IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 39448


Ignore:
Timestamp:
Mar 10, 2016, 8:29:24 AM (10 years ago)
Author:
eugene
Message:

use a robust measure of sigma (16-84%-ile range)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ohana.20160226/src/relastro/src/FitChip.c

    r38986 r39448  
    221221
    222222  int i, Ns;
    223   float dL, dM, dLsum, dLsum2, dMsum, dMsum2, *dR;
    224 
    225   ALLOCATE (dR, float, Nstars);
     223  float dL, dM;
     224
     225  ALLOCATE_PTR (dRvec, double, Nstars);
     226  ALLOCATE_PTR (dLvec, double, Nstars);
     227  ALLOCATE_PTR (dMvec, double, Nstars);
    226228
    227229  Ns = 0;
    228   dLsum = dLsum2 = dMsum = dMsum2 = 0.0;
    229230  for (i = 0; i < Nstars; i++) {
    230231    if (raw[i].mask) continue;
     
    235236    dM = raw[i].M - ref[i].M;
    236237
    237     dLsum  += dL;
    238     dLsum2 += dL*dL;
    239     dMsum  += dM;
    240     dMsum2 += dM*dM;
    241 
    242     dR[Ns] = hypot (dL, dM);
     238    dLvec[Ns] = dL;
     239    dMvec[Ns] = dM;
     240    dRvec[Ns] = hypot (dL, dM);
    243241    Ns++;
    244242  }
    245243
    246   *dLsig = sqrt((dLsum2 / Ns) - SQ(dLsum/Ns));
    247   *dMsig = sqrt((dMsum2 / Ns) - SQ(dMsum/Ns));
     244  dsort (dLvec, Ns);
     245  dsort (dMvec, Ns);
     246
     247  double Slo, Shi;
     248  Slo = VectorFractionInterpolate (dLvec, 0.158655, Ns);
     249  Shi = VectorFractionInterpolate (dLvec, 0.841345, Ns);
     250  *dLsig = (Shi - Slo) / 2.0;
     251  free (dLvec);
     252
     253  Slo = VectorFractionInterpolate (dMvec, 0.158655, Ns);
     254  Shi = VectorFractionInterpolate (dMvec, 0.841345, Ns);
     255  *dMsig = (Shi - Slo) / 2.0;
     256  free (dMvec);
     257
    248258  *nKeep = Ns;
    249259
    250260  if (Ns < 5) {
    251261    *dRsig = NAN;
    252     free  (dR);
     262    free  (dRvec);
    253263    return (FALSE);
    254264  }
    255265
    256266  // for a 2D Gaussian, 40% of the points are within R = 1 sigma
    257   fsort (dR, Ns);
    258   *dRsig = dR[(int)(0.40*Ns)];
     267  dsort (dRvec, Ns);
     268  *dRsig = dRvec[(int)(0.40*Ns)];
    259269 
    260   free  (dR);
     270  free  (dRvec);
    261271  return (TRUE);
    262272}
Note: See TracChangeset for help on using the changeset viewer.