Index: trunk/Ohana/src/addstar/src/loadgalphot_readstars.c
===================================================================
--- trunk/Ohana/src/addstar/src/loadgalphot_readstars.c	(revision 39270)
+++ trunk/Ohana/src/addstar/src/loadgalphot_readstars.c	(revision 39271)
@@ -306,4 +306,10 @@
   memset (mask, 0, Npts*sizeof(char));
 
+  // the values passed in are reduced chisq, but I want to get the 
+  // fit for the total chisq so the errors are correct
+  for (i = 0; (i < Npts); i++) {
+    chisq[i] *= galphot->Npix;
+  }
+
   float chisqMin = FLT_MAX;
   int iMin = -1;
@@ -327,10 +333,9 @@
     return FALSE; // we cannot do anything if there is no finite chisq
   }
-  
-  for (i = 0; i < Npts; i++) {
-    chisq[i] *= (galphot->Npix / chisqMin);
-  }
-
   if (Nvalid < 6) { galphot->flags |= ID_GALPHOT_TOO_FEW; goto bad_fit; }
+
+  for (i = 0; FALSE && (i < Npts); i++) {
+    chisq[i] *= galphot->Npix;
+  }
 
 # if (0)
@@ -355,8 +360,8 @@
   // allow the fitting minimum to be just outside the grid, but no further
   int inRange = TRUE;
-  inRange = inRange && (Xmin > MajorMin - MajorDel);
-  inRange = inRange && (Xmin < MajorMax + MajorDel);
-  inRange = inRange && (Ymin > MinorMin - MinorDel);
-  inRange = inRange && (Ymin < MinorMax + MinorDel);
+  inRange = inRange && (Xmin > MajorMin - 2*MajorDel);
+  inRange = inRange && (Xmin < MajorMax + 2*MajorDel);
+  inRange = inRange && (Ymin > MinorMin - 2*MinorDel);
+  inRange = inRange && (Ymin < MinorMax + 2*MinorDel);
 
   if (!inRange) { galphot->flags |= ID_GALPHOT_OUT_OF_RANGE; goto bad_fit; }
@@ -385,4 +390,12 @@
   float dYmin = (-B + sqrt(Q)) / (2.0 * A);
 
+  // test the formulae:
+# if (0)
+  float Zmin = fit->c00 + fit->c10*Xmin + fit->c01*Ymin + fit->c20*Xmin*Xmin + fit->c02*Ymin*Ymin + fit->c11*Xmin*Ymin;
+  float ZdX  = fit->c00 + fit->c10*(Xmin + dXmin) + fit->c01*Ymin + fit->c20*(Xmin + dXmin)*(Xmin + dXmin) + fit->c02*Ymin*Ymin + fit->c11*(Xmin + dXmin)*Ymin;
+  float ZdY  = fit->c00 + fit->c10*Xmin + fit->c01*(Ymin + dYmin) + fit->c20*Xmin*Xmin + fit->c02*(Ymin + dYmin)*(Ymin + dYmin) + fit->c11*Xmin*(Ymin + dYmin);
+  fprintf (stderr, "Zmin: %f : %f %f\n", Zmin, ZdX - Zmin, ZdY - Zmin);
+# endif
+
   galphot->majorAxis = Xmin;
   galphot->minorAxis = Ymin;
@@ -429,5 +442,5 @@
   galphot->mag    = -2.5*log10(value) + ZeroPt; // correct for exptime?
   galphot->magErr = sqrt(dValue) / value;
-  galphot->chisq  = chisqMin;
+  galphot->chisq  = chisqMin / galphot->Npix;
   
   return TRUE;
@@ -441,8 +454,10 @@
   galphot->mag    = -2.5*log10(flux[iMin]) + ZeroPt; // correct for exptime?
   galphot->magErr = sqrt(fluxErr[iMin]) / flux[iMin];
-  galphot->chisq  = chisqMin;
+  galphot->chisq  = chisqMin / galphot->Npix;
   return FALSE;
 
 bad_err:
+  galphot->majorAxis = Xmin;
+  galphot->minorAxis = Ymin;
   galphot->majorAxisErr = MajorDel;
   galphot->minorAxisErr = MinorDel;
@@ -450,5 +465,5 @@
   galphot->mag    = -2.5*log10(flux[iMin]) + ZeroPt; // correct for exptime?
   galphot->magErr = sqrt(fluxErr[iMin]) / flux[iMin];
-  galphot->chisq  = chisqMin;
+  galphot->chisq  = chisqMin / galphot->Npix;
   return FALSE;
 }
