Changeset 39558 for trunk/Ohana/src/opihi/cmd.astro
- Timestamp:
- Apr 28, 2016, 11:09:46 AM (10 years ago)
- Location:
- trunk/Ohana/src/opihi/cmd.astro
- Files:
-
- 2 edited
-
specpairfit.c (modified) (2 diffs)
-
transform.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/opihi/cmd.astro/specpairfit.c
r33662 r39558 19 19 CastVector (window, OPIHI_INT); 20 20 21 // minimize (flux 1 - flux2*alpha) in window defined by mask21 // minimize (flux2 - flux1*A - B) in window defined by mask 22 22 // note that the mask is a SELECTION mask not an EXCLUSION mask 23 23 24 double F12 = 0.0; 25 double F22 = 0.0; 24 double R = 0.0, F1 = 0.0, F11 = 0.0, F12 = 0.0, F2 = 0.0; 26 25 for (i = 0; i < flux1->Nelements; i++) { 27 if ((mask & window->elements.Int[i]) == 0) continue;26 // if ((mask & window->elements.Int[i]) == 0) continue; 28 27 double weight = 1.0 / (SQ(dflux1->elements.Flt[i]) + SQ(dflux2->elements.Flt[i])); 28 R += weight; 29 F1 += flux1->elements.Flt[i] * weight; 30 F2 += flux2->elements.Flt[i] * weight; 31 F11 += flux1->elements.Flt[i] * flux1->elements.Flt[i] * weight; 29 32 F12 += flux1->elements.Flt[i] * flux2->elements.Flt[i] * weight; 30 F22 += flux2->elements.Flt[i] * flux2->elements.Flt[i] * weight;31 33 } 32 34 33 double Ao = F12 / F22; 34 double dA = sqrt(1.0 / F22); 35 int nterm = 2; 36 double **b = NULL, **c = NULL; 37 ALLOCATE (b, double *, nterm); 38 ALLOCATE (c, double *, nterm); 39 for (i = 0; i < nterm; i++) { 40 ALLOCATE (c[i], double, nterm); 41 ALLOCATE (b[i], double, 1); 42 } 43 c[0][0] = F11; 44 c[1][0] = c[0][1] = F1; 45 c[1][1] = R; 35 46 36 int Ndof = -1; // 1 parameter fit 47 b[0][0] = F12; 48 b[1][0] = F2; 49 50 if (!dgaussjordan (c, b, nterm, 1)) { 51 gprint (GP_ERR, "failed to fit data : ill-conditioned matrix\n"); 52 goto escape; 53 } 54 55 double Ao = b[0][0]; 56 double dA = sqrt(c[0][0]); 57 double Bo = b[1][0]; 58 double dB = sqrt(c[1][1]); 59 60 for (i = 0; i < nterm; i++) { 61 free (b[i]); 62 free (c[i]); 63 } 64 free (b); 65 free (c); 66 67 int Ndof = -2; // 2 parameter fit 37 68 double chisq = 0.0; 38 69 for (i = 0; i < flux1->Nelements; i++) { 39 70 if ((mask & window->elements.Int[i]) == 0) continue; 40 71 double weight = 1.0 / (SQ(dflux1->elements.Flt[i]) + SQ(dflux2->elements.Flt[i])); 41 chisq += SQ(flux1->elements.Flt[i] - Ao * flux2->elements.Flt[i] ) * weight;72 chisq += SQ(flux1->elements.Flt[i] - Ao * flux2->elements.Flt[i] - Bo) * weight; 42 73 Ndof ++; 43 74 } … … 45 76 double chisqNu = chisq / Ndof; 46 77 78 // fprintf (stderr, "R: %f, F1: %f, F11: %f, F2: %f, F12: %f\n", R, F1, F11, F2, F12); 47 79 // fprintf (stderr, "Ao: %f +/- %f, chisq: %f, chisq_nu : %f for %d dof\n", Ao, dA, chisq, chisqNu, Ndof); 48 80 set_variable ("Ao", Ao); 49 81 set_variable ("dA", dA); 82 set_variable ("Bo", Bo); 83 set_variable ("dB", dB); 50 84 set_variable ("Xv", chisqNu); 51 85 set_variable ("Nd", Ndof); -
trunk/Ohana/src/opihi/cmd.astro/transform.c
r34088 r39558 53 53 X = x; Y = y; 54 54 if ((X > -1) && (X < Nx) && (Y > -1) && (Y < Ny)) { 55 if (!isfinite(*Vin)) continue; 55 56 Vout[X + Y*Nx] += *Vin; 56 57 Sout[X + Y*Nx] ++;
Note:
See TracChangeset
for help on using the changeset viewer.
