Index: trunk/Ohana/src/addstar/include/addstar.h
===================================================================
--- trunk/Ohana/src/addstar/include/addstar.h	(revision 30612)
+++ trunk/Ohana/src/addstar/include/addstar.h	(revision 30613)
@@ -265,6 +265,4 @@
 
 int        InitStar               PROTO((Stars *star));
-short      ShortPixels            PROTO((float pixels));
-short      ShortDegree            PROTO((float degrees));
 
 int args_skycells (int argc, char **argv);
Index: trunk/Ohana/src/addstar/src/ReadStarsFITS.c
===================================================================
--- trunk/Ohana/src/addstar/src/ReadStarsFITS.c	(revision 30612)
+++ trunk/Ohana/src/addstar/src/ReadStarsFITS.c	(revision 30613)
@@ -98,7 +98,7 @@
     stars[i].measure.photFlags = (smpdata[i].dophot << 16);
 
-    stars[i].measure.FWx       = ShortPixels (smpdata[i].fx);
-    stars[i].measure.FWy       = ShortPixels (smpdata[i].fy);
-    stars[i].measure.theta     = ShortDegree (smpdata[i].df);
+    stars[i].measure.FWx       = ToShortPixels (smpdata[i].fx);
+    stars[i].measure.FWy       = ToShortPixels (smpdata[i].fy);
+    stars[i].measure.theta     = ToShortDegrees (smpdata[i].df);
   }    
   *nstars = Nstars;
@@ -127,6 +127,6 @@
     stars[i].measure.Yccd     = ps1data[i].Y;
 
-    stars[i].measure.dXccd    = ShortPixels(ps1data[i].dX);
-    stars[i].measure.dYccd    = ShortPixels(ps1data[i].dY);
+    stars[i].measure.dXccd    = ToShortPixels(ps1data[i].dX);
+    stars[i].measure.dYccd    = ToShortPixels(ps1data[i].dY);
    
     if ((ps1data[i].M >= 0.0) || isnan(ps1data[i].M)) {
@@ -140,7 +140,7 @@
     stars[i].measure.dSky     = ps1data[i].dSky;
 
-    stars[i].measure.FWx      = ShortPixels(ps1data[i].fx);
-    stars[i].measure.FWy      = ShortPixels(ps1data[i].fy);
-    stars[i].measure.theta    = ShortDegree(ps1data[i].df);
+    stars[i].measure.FWx      = ToShortPixels(ps1data[i].fx);
+    stars[i].measure.FWy      = ToShortPixels(ps1data[i].fy);
+    stars[i].measure.theta    = ToShortDegrees(ps1data[i].df);
 
     stars[i].measure.psfChisq = ps1data[i].psfChisq;
@@ -176,6 +176,6 @@
     stars[i].measure.Yccd       = ps1data[i].Y;
 
-    stars[i].measure.dXccd      = ShortPixels(ps1data[i].dX);
-    stars[i].measure.dYccd      = ShortPixels(ps1data[i].dY);
+    stars[i].measure.dXccd      = ToShortPixels(ps1data[i].dX);
+    stars[i].measure.dYccd      = ToShortPixels(ps1data[i].dY);
 
     if ((ps1data[i].M >= 0.0) || isnan(ps1data[i].M)) {
@@ -189,7 +189,7 @@
     stars[i].measure.dSky       = ps1data[i].dSky;
 
-    stars[i].measure.FWx        = ShortPixels(ps1data[i].fx);
-    stars[i].measure.FWy        = ShortPixels(ps1data[i].fy);
-    stars[i].measure.theta      = ShortDegree(ps1data[i].df);
+    stars[i].measure.FWx        = ToShortPixels(ps1data[i].fx);
+    stars[i].measure.FWy        = ToShortPixels(ps1data[i].fy);
+    stars[i].measure.theta      = ToShortDegrees(ps1data[i].df);
 
     stars[i].measure.psfChisq  	= ps1data[i].psfChisq;
@@ -238,8 +238,8 @@
     stars[i].measure.Xccd       = ps1data[i].X;
     stars[i].measure.Yccd       = ps1data[i].Y;
-    stars[i].measure.dXccd      = ShortPixels(ps1data[i].dX);
-    stars[i].measure.dYccd      = ShortPixels(ps1data[i].dY);
-
-    stars[i].measure.posangle   = ShortDegree(ps1data[i].posangle);
+    stars[i].measure.dXccd      = ToShortPixels(ps1data[i].dX);
+    stars[i].measure.dYccd      = ToShortPixels(ps1data[i].dY);
+
+    stars[i].measure.posangle   = ToShortDegrees(ps1data[i].posangle);
     stars[i].measure.pltscale   = ps1data[i].pltscale;
 
@@ -263,11 +263,11 @@
     stars[i].measure.extNsigma  = ps1data[i].extNsigma;
 
-    stars[i].measure.FWx        = ShortPixels(ps1data[i].fx);
-    stars[i].measure.FWy        = ShortPixels(ps1data[i].fy);
-    stars[i].measure.theta      = ShortDegree(ps1data[i].df);
-
-    stars[i].measure.Mxx        = ShortPixels(ps1data[i].Mxx);
-    stars[i].measure.Mxy        = ShortPixels(ps1data[i].Mxy);
-    stars[i].measure.Myy        = ShortPixels(ps1data[i].Myy);
+    stars[i].measure.FWx        = ToShortPixels(ps1data[i].fx);
+    stars[i].measure.FWy        = ToShortPixels(ps1data[i].fy);
+    stars[i].measure.theta      = ToShortDegrees(ps1data[i].df);
+
+    stars[i].measure.Mxx        = ToShortPixels(ps1data[i].Mxx);
+    stars[i].measure.Mxy        = ToShortPixels(ps1data[i].Mxy);
+    stars[i].measure.Myy        = ToShortPixels(ps1data[i].Myy);
 		        
     stars[i].measure.photFlags  = ps1data[i].flags;
@@ -314,8 +314,8 @@
     stars[i].measure.Xccd       = ps1data[i].X;
     stars[i].measure.Yccd       = ps1data[i].Y;
-    stars[i].measure.dXccd      = ShortPixels(ps1data[i].dX);
-    stars[i].measure.dYccd      = ShortPixels(ps1data[i].dY);
-
-    stars[i].measure.posangle   = ShortDegree(ps1data[i].posangle);
+    stars[i].measure.dXccd      = ToShortPixels(ps1data[i].dX);
+    stars[i].measure.dYccd      = ToShortPixels(ps1data[i].dY);
+
+    stars[i].measure.posangle   = ToShortDegrees(ps1data[i].posangle);
     stars[i].measure.pltscale   = ps1data[i].pltscale;
 
@@ -339,11 +339,11 @@
     stars[i].measure.extNsigma  = ps1data[i].extNsigma;
 
-    stars[i].measure.FWx        = ShortPixels(ps1data[i].fx);
-    stars[i].measure.FWy        = ShortPixels(ps1data[i].fy);
-    stars[i].measure.theta      = ShortDegree(ps1data[i].df);
-
-    stars[i].measure.Mxx        = ShortPixels(ps1data[i].Mxx);
-    stars[i].measure.Mxy        = ShortPixels(ps1data[i].Mxy);
-    stars[i].measure.Myy        = ShortPixels(ps1data[i].Myy);
+    stars[i].measure.FWx        = ToShortPixels(ps1data[i].fx);
+    stars[i].measure.FWy        = ToShortPixels(ps1data[i].fy);
+    stars[i].measure.theta      = ToShortDegrees(ps1data[i].df);
+
+    stars[i].measure.Mxx        = ToShortPixels(ps1data[i].Mxx);
+    stars[i].measure.Mxy        = ToShortPixels(ps1data[i].Mxy);
+    stars[i].measure.Myy        = ToShortPixels(ps1data[i].Myy);
 		        
     stars[i].measure.photFlags  = ps1data[i].flags;
@@ -382,8 +382,8 @@
     stars[i].measure.Xccd       = ps1data[i].X;
     stars[i].measure.Yccd       = ps1data[i].Y;
-    stars[i].measure.dXccd      = ShortPixels(ps1data[i].dX);
-    stars[i].measure.dYccd      = ShortPixels(ps1data[i].dY);
-
-    stars[i].measure.posangle   = ShortDegree(ps1data[i].posangle);
+    stars[i].measure.dXccd      = ToShortPixels(ps1data[i].dX);
+    stars[i].measure.dYccd      = ToShortPixels(ps1data[i].dY);
+
+    stars[i].measure.posangle   = ToShortDegrees(ps1data[i].posangle);
     stars[i].measure.pltscale   = ps1data[i].pltscale;
 
@@ -407,11 +407,11 @@
     stars[i].measure.extNsigma  = ps1data[i].extNsigma;
 
-    stars[i].measure.FWx        = ShortPixels(ps1data[i].fx);
-    stars[i].measure.FWy        = ShortPixels(ps1data[i].fy);
-    stars[i].measure.theta      = ShortDegree(ps1data[i].df);
-
-    stars[i].measure.Mxx        = ShortPixels(ps1data[i].Mxx);
-    stars[i].measure.Mxy        = ShortPixels(ps1data[i].Mxy);
-    stars[i].measure.Myy        = ShortPixels(ps1data[i].Myy);
+    stars[i].measure.FWx        = ToShortPixels(ps1data[i].fx);
+    stars[i].measure.FWy        = ToShortPixels(ps1data[i].fy);
+    stars[i].measure.theta      = ToShortDegrees(ps1data[i].df);
+
+    stars[i].measure.Mxx        = ToShortPixels(ps1data[i].Mxx);
+    stars[i].measure.Mxy        = ToShortPixels(ps1data[i].Mxy);
+    stars[i].measure.Myy        = ToShortPixels(ps1data[i].Myy);
 		        
     stars[i].measure.photFlags  = ps1data[i].flags;
@@ -450,8 +450,8 @@
     stars[i].measure.Xccd       = ps1data[i].X;
     stars[i].measure.Yccd       = ps1data[i].Y;
-    stars[i].measure.dXccd      = ShortPixels(ps1data[i].dX);
-    stars[i].measure.dYccd      = ShortPixels(ps1data[i].dY);
-
-    stars[i].measure.posangle   = ShortDegree(ps1data[i].posangle);
+    stars[i].measure.dXccd      = ToShortPixels(ps1data[i].dX);
+    stars[i].measure.dYccd      = ToShortPixels(ps1data[i].dY);
+
+    stars[i].measure.posangle   = ToShortDegrees(ps1data[i].posangle);
     stars[i].measure.pltscale   = ps1data[i].pltscale;
 
@@ -475,11 +475,11 @@
     stars[i].measure.extNsigma  = ps1data[i].extNsigma;
 
-    stars[i].measure.FWx        = ShortPixels(ps1data[i].fx);
-    stars[i].measure.FWy        = ShortPixels(ps1data[i].fy);
-    stars[i].measure.theta      = ShortDegree(ps1data[i].df);
-
-    stars[i].measure.Mxx        = ShortPixels(ps1data[i].Mxx);
-    stars[i].measure.Mxy        = ShortPixels(ps1data[i].Mxy);
-    stars[i].measure.Myy        = ShortPixels(ps1data[i].Myy);
+    stars[i].measure.FWx        = ToShortPixels(ps1data[i].fx);
+    stars[i].measure.FWy        = ToShortPixels(ps1data[i].fy);
+    stars[i].measure.theta      = ToShortDegrees(ps1data[i].df);
+
+    stars[i].measure.Mxx        = ToShortPixels(ps1data[i].Mxx);
+    stars[i].measure.Mxy        = ToShortPixels(ps1data[i].Mxy);
+    stars[i].measure.Myy        = ToShortPixels(ps1data[i].Myy);
 		        
     stars[i].measure.photFlags  = ps1data[i].flags;
Index: trunk/Ohana/src/addstar/src/ReadStarsSDSS.c
===================================================================
--- trunk/Ohana/src/addstar/src/ReadStarsSDSS.c	(revision 30612)
+++ trunk/Ohana/src/addstar/src/ReadStarsSDSS.c	(revision 30613)
@@ -159,6 +159,6 @@
       stars[N].measure.Xccd      = colc[N];
       stars[N].measure.Yccd      = rowc[N];
-      stars[N].measure.dXccd     = ShortPixels(colcErr[N]);
-      stars[N].measure.dYccd     = ShortPixels(rowcErr[N]);
+      stars[N].measure.dXccd     = ToShortPixels(colcErr[N]);
+      stars[N].measure.dYccd     = ToShortPixels(rowcErr[N]);
       stars[N].measure.M         = psfCounts[N] + ZeroPt - zeropt[j];
       stars[N].measure.dM        = psfCountsErr[N];
@@ -166,6 +166,6 @@
       stars[N].measure.Sky       = sky[N]; // adjust this to counts?
       stars[N].measure.dSky      = skyErr[N];
-      stars[N].measure.FWx       = ShortPixels(seeing[j]); // reported in arcsec?
-      stars[N].measure.FWy       = ShortPixels(seeing[j]);
+      stars[N].measure.FWx       = ToShortPixels(seeing[j]); // reported in arcsec?
+      stars[N].measure.FWy       = ToShortPixels(seeing[j]);
       if (prob_psf) {
           stars[N].measure.psfChisq  = prob_psf[N]; // XXX not really the correct value...
Index: trunk/Ohana/src/addstar/src/ReadStarsTEXT.c
===================================================================
--- trunk/Ohana/src/addstar/src/ReadStarsTEXT.c	(revision 30612)
+++ trunk/Ohana/src/addstar/src/ReadStarsTEXT.c	(revision 30613)
@@ -95,7 +95,7 @@
       dparse (&df,  11, &buffer[j*BYTES_STAR]);
 
-      stars[N].measure.FWx   = ShortPixels (fx);
-      stars[N].measure.FWy   = ShortPixels (fy);
-      stars[N].measure.theta = ShortDegree (df);
+      stars[N].measure.FWx   = ToShortPixels (fx);
+      stars[N].measure.FWy   = ToShortPixels (fy);
+      stars[N].measure.theta = ToShortDegrees (df);
     }
   }
Index: trunk/Ohana/src/addstar/src/StarOps.c
===================================================================
--- trunk/Ohana/src/addstar/src/StarOps.c	(revision 30612)
+++ trunk/Ohana/src/addstar/src/StarOps.c	(revision 30613)
@@ -9,20 +9,2 @@
     return TRUE;
 }
-
-short ShortPixels (float pixels) {
-
-    short value;
-
-    value = 100*pixels;
-
-    return value;
-}
-
-short ShortDegree (float degrees) {
-
-    short value;
-
-    value = (0xffff/360.0)*degrees;
-
-    return value;
-}
Index: trunk/Ohana/src/addstar/src/calibrate.c
===================================================================
--- trunk/Ohana/src/addstar/src/calibrate.c	(revision 30612)
+++ trunk/Ohana/src/addstar/src/calibrate.c	(revision 30613)
@@ -225,10 +225,10 @@
     image[0].Mcal = M1;
     image[0].dMcal = M2 / sqrt (N);
-    image[0].Mxxxx = N;
+    image[0].nFitPhotom = N;
   } else {
     fprintf (stderr, "too few stars\n");
     image[0].Mcal = 10.000;
     image[0].dMcal = 10.000;
-    image[0].Mxxxx = 0;
-  }
-}
+    image[0].nFitPhotom = 0;
+  }
+}
Index: trunk/Ohana/src/addstar/src/fakeimage.c
===================================================================
--- trunk/Ohana/src/addstar/src/fakeimage.c	(revision 30612)
+++ trunk/Ohana/src/addstar/src/fakeimage.c	(revision 30613)
@@ -134,5 +134,4 @@
 
     image[i+1].nstar = 0;
-    image[i+1].Myyyy = 0;
 
     /* check if chip hits outer bounds of mosaic */
@@ -191,5 +190,4 @@
   image[0].flags = 0;
   image[0].nstar = 0;
-  image[0].Myyyy = 0;
 
   // XXX need to set the imageID here
Index: trunk/Ohana/src/addstar/src/get2mass_full.c
===================================================================
--- trunk/Ohana/src/addstar/src/get2mass_full.c	(revision 30612)
+++ trunk/Ohana/src/addstar/src/get2mass_full.c	(revision 30613)
@@ -17,9 +17,9 @@
   ptr = next2MASSfield (ptr); // dec (assumed to be already set)
   ptr = next2MASSfield (ptr); // err_maj
-  star[0][0].measure.FWx = ShortPixels(strtod (ptr, NULL));
+  star[0][0].measure.FWx = ToShortPixels(strtod (ptr, NULL));
   ptr = next2MASSfield (ptr); // err_min
-  star[0][0].measure.FWy = ShortPixels(strtod (ptr, NULL));
+  star[0][0].measure.FWy = ToShortPixels(strtod (ptr, NULL));
   ptr = next2MASSfield (ptr); // err_ang
-  star[0][0].measure.theta = ShortPixels(strtod (ptr, NULL));
+  star[0][0].measure.theta = ToShortPixels(strtod (ptr, NULL));
 
   star[2][0].measure.FWx   = star[2][0].measure.FWx   = star[0][0].measure.FWx;
Index: trunk/Ohana/src/addstar/src/resort_catalog.c
===================================================================
--- trunk/Ohana/src/addstar/src/resort_catalog.c	(revision 30612)
+++ trunk/Ohana/src/addstar/src/resort_catalog.c	(revision 30613)
@@ -39,5 +39,5 @@
     tmp_ave  = AVE[A];  AVE[A]  = AVE[B];  AVE[B]  = tmp_ave;		\
   }
-# define COMPARE(A,B)(MEAS[A] < MEAS[B])
+# define COMPARE(A,B)(AVE[A] < AVE[B])
   OHANA_SORT (N, COMPARE, SWAPFUNC);
 # undef SWAPFUNC
@@ -96,6 +96,22 @@
   }
   
+  // check that averageSeq is now in order
+  // for (i = 1; i < Nmeasure; i++) {
+  //   if (averageSeq[i] < averageSeq[i-1]) {
+  //     fprintf (stderr, "%d ", (int) i);
+  //   }
+  // }
+  // fprintf (stderr, "\n");
+
   SortAveMeasMatch(measureSeq, averageSeq, Nmeasure);
   // MARKTIME("sort : %f sec\n", dtime);
+
+  // check that averageSeq is now in order
+  // for (i = 1; i < Nmeasure; i++) {
+  //   if (averageSeq[i] < averageSeq[i-1]) {
+  //     fprintf (stderr, "%d ", (int) i);
+  //   }
+  // }
+  // fprintf (stderr, "\n");
 
   // copy the measurements in the sorted order
@@ -116,4 +132,5 @@
   for (i = 0; i < Nmeasure; i++) {
     if (averageSeq[i] != currentAve) {
+      // we have hit the next entry in the list
       average[currentAve].Nmeasure = N;
       N = 0;
@@ -127,5 +144,32 @@
   // MARKTIME("update Nmeasure : %f sec\n", dtime);
 
+  int NmeasureTotal = 0;
+  int measureOffsetOK = TRUE;
+  for (i = 0; i < catalog[0].Naverage; i++) {
+    NmeasureTotal += catalog[0].average[i].Nmeasure;
+    if (VERBOSE && !(NmeasureTotal <= catalog[0].Nmeasure)) {
+      fprintf (stderr, "too few measurements: %d %d %d\n", (int) i, NmeasureTotal, (int) catalog[0].Nmeasure);
+    }
+    measureOffsetOK &= (catalog[0].average[i].measureOffset < catalog[0].Nmeasure);
+    if (VERBOSE && !(catalog[0].average[i].measureOffset < catalog[0].Nmeasure)) {
+      fprintf (stderr, "offset too large: %d %d %d\n", (int) i, catalog[0].average[i].Nmeasure, (int) catalog[0].Nmeasure);
+    }
+    measureOffsetOK &= (catalog[0].average[i].measureOffset + catalog[0].average[i].Nmeasure <= catalog[0].Nmeasure);
+    if (VERBOSE && !(catalog[0].average[i].measureOffset + catalog[0].average[i].Nmeasure <= catalog[0].Nmeasure)) {
+      fprintf (stderr, "orrset + Nmeasure too large: %d + %d > %d %d\n", (int) i, catalog[0].average[i].measureOffset, catalog[0].average[i].Nmeasure, (int) catalog[0].Nmeasure);
+    }
+  }
+
+  if (!measureOffsetOK) {
+    fprintf (stderr, "ERROR: catalog %s has an invalid measureOffset\n", catalog[0].filename);
+  }
+
+  if (NmeasureTotal != catalog[0].Nmeasure) {
+    fprintf (stderr, "ERROR: catalog %s has an invalid Nmeasure\n", catalog[0].filename);
+  }
+
   // MARKTIME("  match time %9.4f sec for %7lld measures, %6lld average\n", dtime, (long long) Nmeasure, (long long) Naverage);
+
+  catalog[0].sorted = TRUE;
 
   FREE (measureSeq);
Index: trunk/Ohana/src/addstar/src/sky_tessalation.c
===================================================================
--- trunk/Ohana/src/addstar/src/sky_tessalation.c	(revision 30612)
+++ trunk/Ohana/src/addstar/src/sky_tessalation.c	(revision 30613)
@@ -338,7 +338,8 @@
   image[0].photcode = 1; // this needs to be set more sensibly
 
-  image[0].Mx   = xv[0];  image[0].My   = yv[0];
-  image[0].Mxxx = xv[1];  image[0].Mxyy = yv[1];
-  image[0].Mxxy = xv[2];  image[0].Myyy = yv[2];
+  // XXX these overload these value in a silly way
+  image[0].dXpixSys = xv[0];  	   image[0].dYpixSys   = yv[0];
+  image[0].dMagSys  = xv[1];  	   image[0].nFitAstrom = yv[1];
+  image[0].photom_map_id = xv[2];  image[0].astrom_map_id = yv[2];
 
   return (TRUE);
