Index: branches/eam_branches/ipp-20121219/Ohana/src/opihi/dvo/gstar.c
===================================================================
--- branches/eam_branches/ipp-20121219/Ohana/src/opihi/dvo/gstar.c	(revision 34899)
+++ branches/eam_branches/ipp-20121219/Ohana/src/opihi/dvo/gstar.c	(revision 34901)
@@ -1,3 +1,9 @@
 # include "dvoshell.h"
+
+typedef enum {
+  GSTAR_BY_SEQ,
+  GSTAR_BY_TIME,
+  GSTAR_BY_PHOTCODE,
+} GSTAR_SORT_CODES;
 
 typedef enum {
@@ -23,4 +29,19 @@
 void printPhotcodeSequence (Average *average, SecFilt *secfilt, int entry, int type);
 
+void sort_index_float (float *X, int *IDX, int N) {
+
+# define SWAPFUNC(A,B){ float tmp; int itmp; 	\
+  tmp = X[A]; X[A] = X[B]; X[B] = tmp; \
+  itmp = IDX[A]; IDX[A] = IDX[B]; IDX[B] = itmp; \
+}
+# define COMPARE(A,B)(X[A] < X[B])
+
+  OHANA_SORT (N, COMPARE, SWAPFUNC);
+
+# undef SWAPFUNC
+# undef COMPARE
+
+}
+
 int gstar (int argc, char **argv) {
   
@@ -31,5 +52,5 @@
   off_t i, Nstars, *N1;
   off_t j, k, m, N, Nlo, Nhi;
-  int Nsecfilt, NPTS, QUIET, FULL_OUTPUT, STACK_OUTPUT, INST;
+  int Nsecfilt, NPTS, QUIET, FULL_OUTPUT, STACK_OUTPUT, INST, SHOW_MASKS;
   int found, GetMeasures;
   int SaveVectors;
@@ -44,4 +65,16 @@
   Nsecfilt = GetPhotcodeNsecfilt ();
 
+  GSTAR_SORT_CODES sortCode = GSTAR_BY_SEQ;
+  if ((N = get_argument (argc, argv, "-sort"))) {
+    remove_argument (N, &argc, argv);
+    if (!strcasecmp (argv[N], "time")) {
+      sortCode = GSTAR_BY_TIME;
+    }
+    if (!strcasecmp (argv[N], "photcode")) {
+      sortCode = GSTAR_BY_PHOTCODE;
+    }
+    remove_argument (N, &argc, argv);
+  }
+
   QUIET = FALSE;
   if ((N = get_argument (argc, argv, "-q"))) {
@@ -53,4 +86,10 @@
   if ((N = get_argument (argc, argv, "-inst"))) {
     INST = TRUE;
+    remove_argument (N, &argc, argv);
+  }
+
+  SHOW_MASKS = FALSE;
+  if ((N = get_argument (argc, argv, "-masks"))) {
+    SHOW_MASKS = TRUE;
     remove_argument (N, &argc, argv);
   }
@@ -305,57 +344,96 @@
       }
       if (GetMeasures || SaveVectors) {
+
+	if (catalog.average[k].Nmeasure == 0) continue;
+
 	m = catalog.average[k].measureOffset;
+
+	int *index = NULL;
+	float *value = NULL;
+	ALLOCATE (index, int, catalog.average[k].Nmeasure);
+	ALLOCATE (value, float, catalog.average[k].Nmeasure);
+	for (j = 0; j < catalog.average[k].Nmeasure; j++) {
+	  index[j] = j + m;
+	  switch (sortCode) {
+	    case GSTAR_BY_SEQ:
+	      value[j] = j + m;
+	      break;
+	    case GSTAR_BY_PHOTCODE:
+	      value[j] = catalog.measure[j + m].photcode;
+	      break;
+	    case GSTAR_BY_TIME:
+	      value[j] = catalog.measure[j + m].t;
+	      break;
+	  }
+	}
+
+	sort_index_float (value, index, catalog.average[k].Nmeasure);
+
 	for (j = 0; j < catalog.average[k].Nmeasure; j++, m++) {
 
-	  Mcat = PhotCat (&catalog.measure[m]);
+	  int Nv = index[j];
+
+	  Mcat = PhotCat (&catalog.measure[Nv]);
 	  if (INST) {
-	    Mrel = PhotInst (&catalog.measure[m]);
+	    Mrel = PhotInst (&catalog.measure[Nv]);
 	  } else {
-	    Mrel = PhotRel (&catalog.measure[m], &catalog.average[k], &catalog.secfilt[k*Nsecfilt]);
+	    Mrel = PhotRel (&catalog.measure[Nv], &catalog.average[k], &catalog.secfilt[k*Nsecfilt]);
 	  }
 
 	  if (GetMeasures && !QUIET) {
-	    date = ohana_sec_to_date (catalog.measure[m].t);
+	    date = ohana_sec_to_date (catalog.measure[Nv].t);
 	    gprint (GP_LOG, "%6.3f ",  Mcat);
 	    gprint (GP_LOG, "%6.3f ",  Mrel);
-	    gprint (GP_LOG, "%5.3f  ", catalog.measure[m].dM);
+	    gprint (GP_LOG, "%6.3f  ", catalog.measure[Nv].dM);
 	    gprint (GP_LOG, "%20s  ",  date);
-	    gprint (GP_LOG, "%7.4f ",  catalog.measure[m].dR);
-	    gprint (GP_LOG, "%7.4f ",  catalog.measure[m].dD);
-	    gprint (GP_LOG, "0x%08x ", catalog.measure[m].photFlags);
-	    gprint (GP_LOG, "0x%08x ", catalog.measure[m].dbFlags);
-	    gprint (GP_LOG, "%5d ",    catalog.measure[m].photcode);
-	    gprint (GP_LOG, "%-20s ",  GetPhotcodeNamebyCode (catalog.measure[m].photcode));
- 	    gprint (GP_LOG, "%5.2f ",  FromShortPixels(catalog.measure[m].FWx));
-	    gprint (GP_LOG, "%5.2f ",  FromShortPixels(catalog.measure[m].FWy));
+	    gprint (GP_LOG, "%7.4f ",  catalog.measure[Nv].dR);
+	    gprint (GP_LOG, "%7.4f ",  catalog.measure[Nv].dD);
+	    gprint (GP_LOG, "0x%08x ", catalog.measure[Nv].photFlags);
+	    gprint (GP_LOG, "0x%08x ", catalog.measure[Nv].dbFlags);
+	    if (SHOW_MASKS) {
+	      gprint (GP_LOG, "%5d ",    catalog.measure[Nv].photcode);
+	      PhotCode *code = GetPhotcodebyCode (catalog.measure[Nv].photcode);
+	      int badMask = 0;
+	      int poorMask = 0;
+	      if (code) {
+		badMask = catalog.measure[Nv].photFlags & code->photomBadMask;
+		poorMask = catalog.measure[Nv].photFlags & code->photomPoorMask;
+	      }
+	      gprint (GP_LOG, "0x%08x ", poorMask);
+	      gprint (GP_LOG, "0x%08x ", badMask);
+	    }
+	    gprint (GP_LOG, "%5d ",    catalog.measure[Nv].photcode);
+	    gprint (GP_LOG, "%-20s ",  GetPhotcodeNamebyCode (catalog.measure[Nv].photcode));
+ 	    gprint (GP_LOG, "%5.2f ",  FromShortPixels(catalog.measure[Nv].FWx));
+	    gprint (GP_LOG, "%5.2f ",  FromShortPixels(catalog.measure[Nv].FWy));
 
 	    if (FULL_OUTPUT) {
-		gprint (GP_LOG, "%6.3f ", catalog.measure[m].Mcal);
-		gprint (GP_LOG, "%6.3f ", catalog.measure[m].Map);
-		gprint (GP_LOG, "%6.3f ", catalog.measure[m].Mkron);
-		gprint (GP_LOG, "%6.3f ", catalog.measure[m].dMkron);
-		gprint (GP_LOG, "%5.1f ", pow(10.0, 0.4*catalog.measure[m].dt));
-		gprint (GP_LOG, "%5.3f ", catalog.measure[m].airmass);
-		gprint (GP_LOG, "%6.1f ", catalog.measure[m].az);
-		gprint (GP_LOG, "%6.1f ", catalog.measure[m].Xccd);
-		gprint (GP_LOG, "%6.1f ", catalog.measure[m].Yccd);
-		gprint (GP_LOG, "%3.1f ", FromShortPixels(catalog.measure[m].dXccd));
-		gprint (GP_LOG, "%3.1f ", FromShortPixels(catalog.measure[m].dYccd));
-		gprint (GP_LOG, "%6.1f ", catalog.measure[m].Sky);
-		gprint (GP_LOG, "%5.1f ", catalog.measure[m].dSky);
-		gprint (GP_LOG, "%8d ", catalog.measure[m].averef);
-		gprint (GP_LOG, "0x%08x ", catalog.measure[m].detID);
-		gprint (GP_LOG, "0x%08x ", catalog.measure[m].imageID);
-		gprint (GP_LOG, "%.3f ", catalog.measure[m].psfQF);
-		gprint (GP_LOG, "%.1f ", catalog.measure[m].psfChisq);
-		gprint (GP_LOG, "%.1f ", catalog.measure[m].crNsigma);
-		gprint (GP_LOG, "%.1f ", catalog.measure[m].extNsigma);
-		gprint (GP_LOG, "%.1f ", FromShortDegrees(catalog.measure[m].theta));
+		gprint (GP_LOG, "%6.3f ", catalog.measure[Nv].Mcal);
+		gprint (GP_LOG, "%6.3f ", catalog.measure[Nv].Map);
+		gprint (GP_LOG, "%6.3f ", catalog.measure[Nv].Mkron);
+		gprint (GP_LOG, "%6.3f ", catalog.measure[Nv].dMkron);
+		gprint (GP_LOG, "%5.1f ", pow(10.0, 0.4*catalog.measure[Nv].dt));
+		gprint (GP_LOG, "%5.3f ", catalog.measure[Nv].airmass);
+		gprint (GP_LOG, "%6.1f ", catalog.measure[Nv].az);
+		gprint (GP_LOG, "%6.1f ", catalog.measure[Nv].Xccd);
+		gprint (GP_LOG, "%6.1f ", catalog.measure[Nv].Yccd);
+		gprint (GP_LOG, "%3.1f ", FromShortPixels(catalog.measure[Nv].dXccd));
+		gprint (GP_LOG, "%3.1f ", FromShortPixels(catalog.measure[Nv].dYccd));
+		gprint (GP_LOG, "%6.1f ", catalog.measure[Nv].Sky);
+		gprint (GP_LOG, "%5.1f ", catalog.measure[Nv].dSky);
+		gprint (GP_LOG, "%8d ", catalog.measure[Nv].averef);
+		gprint (GP_LOG, "0x%08x ", catalog.measure[Nv].detID);
+		gprint (GP_LOG, "0x%08x ", catalog.measure[Nv].imageID);
+		gprint (GP_LOG, "%.3f ", catalog.measure[Nv].psfQF);
+		gprint (GP_LOG, "%.1f ", catalog.measure[Nv].psfChisq);
+		gprint (GP_LOG, "%.1f ", catalog.measure[Nv].crNsigma);
+		gprint (GP_LOG, "%.1f ", catalog.measure[Nv].extNsigma);
+		gprint (GP_LOG, "%.1f ", FromShortDegrees(catalog.measure[Nv].theta));
 	    }
 	    if (STACK_OUTPUT) {
-		gprint (GP_LOG, "%10.3e ", catalog.measure[m].FluxPSF);
-		gprint (GP_LOG, "%10.3e ", catalog.measure[m].dFluxPSF);
-		gprint (GP_LOG, "%10.3e ", catalog.measure[m].FluxKron);
-		gprint (GP_LOG, "%10.3e ", catalog.measure[m].dFluxKron);
+		gprint (GP_LOG, "%10.3e ", catalog.measure[Nv].FluxPSF);
+		gprint (GP_LOG, "%10.3e ", catalog.measure[Nv].dFluxPSF);
+		gprint (GP_LOG, "%10.3e ", catalog.measure[Nv].FluxKron);
+		gprint (GP_LOG, "%10.3e ", catalog.measure[Nv].dFluxKron);
 	    }
 	    gprint (GP_LOG, "\n");
@@ -366,9 +444,9 @@
 	  if (SaveVectors) {
 	    vec1[0].elements.Flt[N] = Mcat;
-	    vec2[0].elements.Flt[N] = TimeValue (catalog.measure[m].t, TimeReference, TimeFormat);
-	    vec3[0].elements.Flt[N] = catalog.measure[m].airmass;
-	    vec4[0].elements.Flt[N] = catalog.measure[m].photcode;
-	    vec5[0].elements.Flt[N] = catalog.measure[m].dR;
-	    vec6[0].elements.Flt[N] = catalog.measure[m].dD;
+	    vec2[0].elements.Flt[N] = TimeValue (catalog.measure[Nv].t, TimeReference, TimeFormat);
+	    vec3[0].elements.Flt[N] = catalog.measure[Nv].airmass;
+	    vec4[0].elements.Flt[N] = catalog.measure[Nv].photcode;
+	    vec5[0].elements.Flt[N] = catalog.measure[Nv].dR;
+	    vec6[0].elements.Flt[N] = catalog.measure[Nv].dD;
 	    N ++;
 	    if (N == NPTS - 1) {
@@ -383,4 +461,6 @@
 	  }
 	}
+	free (value);
+	free (index);
       }
     }
Index: branches/eam_branches/ipp-20121219/Ohana/src/relastro/src/BrightCatalog.c
===================================================================
--- branches/eam_branches/ipp-20121219/Ohana/src/relastro/src/BrightCatalog.c	(revision 34899)
+++ branches/eam_branches/ipp-20121219/Ohana/src/relastro/src/BrightCatalog.c	(revision 34901)
@@ -346,6 +346,8 @@
     gfits_define_bintable_column (&theader, "E", "MAG_ERR",  "magnitude (err)",             NULL,    1.0, 0.0);
     gfits_define_bintable_column (&theader, "E", "AIRMASS",  "airmass",                	    NULL,    1.0, 0.0);
-    gfits_define_bintable_column (&theader, "E", "X_CCD",    "ccd x coord",            	   "pix",    1.0, 0.0);
-    gfits_define_bintable_column (&theader, "E", "Y_CCD",    "ccd y coord",            	   "pix",    1.0, 0.0);
+    gfits_define_bintable_column (&theader, "E", "X_CCD",    "ccd x raw coord",            "pix",    1.0, 0.0);
+    gfits_define_bintable_column (&theader, "E", "Y_CCD",    "ccd y raw coord",            "pix",    1.0, 0.0);
+    gfits_define_bintable_column (&theader, "E", "X_FIX",    "ccd x fixed coord",          "pix",    1.0, 0.0);
+    gfits_define_bintable_column (&theader, "E", "Y_FIX",    "ccd y fiex coord",       	   "pix",    1.0, 0.0);
     gfits_define_bintable_column (&theader, "E", "EXPTIME",  "-2.5 * log (exposure time)", "sec",    1.0, 0.0);
     gfits_define_bintable_column (&theader, "J", "TIME",     "time of exp",                "sec",    1.0, 1.0*0x8000);
@@ -467,5 +469,5 @@
     gfits_define_bintable_column (&theader, "J", "MEAN_EPOCH",  "mean epoch (PM-PAR ref)", 	         		  "", 1.0, 1.0*0x8000);
     gfits_define_bintable_column (&theader, "J", "TIME_RANGE",  "mean epoch (PM-PAR ref)", 	         		  "", 1.0, 1.0*0x8000);
-    gfits_define_bintable_column (&theader, "E", "SIGMA_POS",   "position scatter", 	                 		  "", 1.0, 0.0);   
+    gfits_define_bintable_column (&theader, "E", "STARGAL_SEP", "star/galaxy separator",                		  "", 1.0, 0.0);   
     gfits_define_bintable_column (&theader, "I", "NUMBER_POS",  "number of detections used for astrometry", 	          "", 1.0, 1.0*0x80);
     gfits_define_bintable_column (&theader, "I", "NMEASURE",    "number of psf measurements", 	                          "", 1.0, 1.0*0x80);
Index: branches/eam_branches/ipp-20121219/Ohana/src/relastro/src/ImageOps.c
===================================================================
--- branches/eam_branches/ipp-20121219/Ohana/src/relastro/src/ImageOps.c	(revision 34899)
+++ branches/eam_branches/ipp-20121219/Ohana/src/relastro/src/ImageOps.c	(revision 34901)
@@ -178,6 +178,6 @@
 	int found = FALSE;
 	for (k = 0; (k < NphotcodesSkip) && !found; k++) {
-	  if (photcodesSkip[k][0].code == catalog[i].measure[j].photcode) found = TRUE;
-	  if (photcodesSkip[k][0].code == GetPhotcodeEquivCodebyCode(catalog[i].measure[j].photcode)) found = TRUE;
+	  if (photcodesSkip[k][0].code == catalog[i].measureT[j].photcode) found = TRUE;
+	  if (photcodesSkip[k][0].code == GetPhotcodeEquivCodebyCode(catalog[i].measureT[j].photcode)) found = TRUE;
 	}
 	if (found) continue;
