Changeset 20936 for trunk/Ohana/src/opihi/cmd.data/vgauss.c
- Timestamp:
- Dec 7, 2008, 3:31:01 PM (18 years ago)
- File:
-
- 1 edited
-
trunk/Ohana/src/opihi/cmd.data/vgauss.c (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/opihi/cmd.data/vgauss.c
r16446 r20936 2 2 3 3 /* local private functions */ 4 float fgaussOD (float, float *, int, float *);4 opihi_flt fgaussOD (opihi_flt, opihi_flt *, int, opihi_flt *); 5 5 6 6 # define GET_VAR(V,A) \ … … 16 16 17 17 int i, N, Npts, Npar, Quiet; 18 float par[4], *v1, *v2, *dy, **covar;19 float chisq, ochisq, dchisq;18 opihi_flt par[4], *v1, *v2, *dy, **covar; 19 opihi_flt chisq, ochisq, dchisq; 20 20 Vector *xvec, *yvec, *svec, *ovec; 21 21 char *c, name[16]; … … 42 42 if ((ovec = SelectVector (argv[4], ANYVECTOR, TRUE)) == NULL) return (FALSE); 43 43 44 REQUIRE_VECTOR_FLT (xvec, FALSE); 45 REQUIRE_VECTOR_FLT (yvec, FALSE); 46 REQUIRE_VECTOR_FLT (svec, FALSE); 47 44 48 Npts = xvec[0].Nelements; 45 ALLOCATE (dy, float, Npts); 46 REALLOCATE (ovec[0].elements, float, Npts); 49 ResetVector (ovec, OPIHI_FLT, Npts); 50 51 ALLOCATE (dy, opihi_flt, Npts); 47 52 48 53 GET_VAR (par[0], "C0"); … … 52 57 Npar = 4; 53 58 54 v1 = svec[0].elements; 59 // mrqmin takes the inverse variance (do not generate NANs) 60 v1 = svec[0].elements.Flt; 55 61 v2 = dy; 56 62 for (i = 0; i < Npts; i++, v1++, v2++) { … … 58 64 } 59 65 60 ochisq = mrqinit (xvec[0].elements , yvec[0].elements, dy, Npts, par, Npar, fgaussOD, !Quiet);66 ochisq = mrqinit (xvec[0].elements.Flt, yvec[0].elements.Flt, dy, Npts, par, Npar, fgaussOD, !Quiet); 61 67 dchisq = ochisq + 2*Npts; 62 68 63 69 for (i = 0; (i < 20) && ((dchisq > 0.1*(Npts - Npar)) || (dchisq <= 0.0)); i++) { 64 chisq = mrqmin (xvec[0].elements , yvec[0].elements, dy, Npts, par, Npar, fgaussOD, !Quiet);70 chisq = mrqmin (xvec[0].elements.Flt, yvec[0].elements.Flt, dy, Npts, par, Npar, fgaussOD, !Quiet); 65 71 dchisq = ochisq - chisq; 66 72 ochisq = chisq; … … 70 76 71 77 for (i = 0; i < Npts; i++) { 72 ovec[0].elements [i] = fgaussOD (xvec[0].elements[i], par, Npar, dy);78 ovec[0].elements.Flt[i] = fgaussOD (xvec[0].elements.Flt[i], par, Npar, dy); 73 79 } 74 80 ovec[0].Nelements = Npts; … … 90 96 91 97 /* pars: x_o, sigma, I, back */ 92 float fgaussOD (float x, float *par, int Npar, float *dpar) {98 opihi_flt fgaussOD (opihi_flt x, opihi_flt *par, int Npar, opihi_flt *dpar) { 93 99 94 float z, r, f;100 opihi_flt z, r, f; 95 101 96 102 z = (x - par[0])/par[1];
Note:
See TracChangeset
for help on using the changeset viewer.
