Index: /branches/eam_branches/ohana.20160226/src/relastro/src/FitChip.c
===================================================================
--- /branches/eam_branches/ohana.20160226/src/relastro/src/FitChip.c	(revision 39447)
+++ /branches/eam_branches/ohana.20160226/src/relastro/src/FitChip.c	(revision 39448)
@@ -221,10 +221,11 @@
 
   int i, Ns;
-  float dL, dM, dLsum, dLsum2, dMsum, dMsum2, *dR;
-
-  ALLOCATE (dR, float, Nstars);
+  float dL, dM;
+
+  ALLOCATE_PTR (dRvec, double, Nstars);
+  ALLOCATE_PTR (dLvec, double, Nstars);
+  ALLOCATE_PTR (dMvec, double, Nstars);
 
   Ns = 0;
-  dLsum = dLsum2 = dMsum = dMsum2 = 0.0;
   for (i = 0; i < Nstars; i++) {
     if (raw[i].mask) continue;
@@ -235,28 +236,37 @@
     dM = raw[i].M - ref[i].M;
 
-    dLsum  += dL;
-    dLsum2 += dL*dL;
-    dMsum  += dM;
-    dMsum2 += dM*dM;
-
-    dR[Ns] = hypot (dL, dM);
+    dLvec[Ns] = dL;
+    dMvec[Ns] = dM;
+    dRvec[Ns] = hypot (dL, dM);
     Ns++;
   }
 
-  *dLsig = sqrt((dLsum2 / Ns) - SQ(dLsum/Ns));
-  *dMsig = sqrt((dMsum2 / Ns) - SQ(dMsum/Ns));
+  dsort (dLvec, Ns);
+  dsort (dMvec, Ns);
+
+  double Slo, Shi;
+  Slo = VectorFractionInterpolate (dLvec, 0.158655, Ns);
+  Shi = VectorFractionInterpolate (dLvec, 0.841345, Ns);
+  *dLsig = (Shi - Slo) / 2.0;
+  free (dLvec);
+
+  Slo = VectorFractionInterpolate (dMvec, 0.158655, Ns);
+  Shi = VectorFractionInterpolate (dMvec, 0.841345, Ns);
+  *dMsig = (Shi - Slo) / 2.0;
+  free (dMvec);
+
   *nKeep = Ns;
 
   if (Ns < 5) {
     *dRsig = NAN;
-    free  (dR);
+    free  (dRvec);
     return (FALSE);
   }
 
   // for a 2D Gaussian, 40% of the points are within R = 1 sigma
-  fsort (dR, Ns);
-  *dRsig = dR[(int)(0.40*Ns)];
+  dsort (dRvec, Ns);
+  *dRsig = dRvec[(int)(0.40*Ns)];
   
-  free  (dR);
+  free  (dRvec);
   return (TRUE);
 }
