Index: trunk/Ohana/src/relphot/include/relphot.h
===================================================================
--- trunk/Ohana/src/relphot/include/relphot.h	(revision 21153)
+++ trunk/Ohana/src/relphot/include/relphot.h	(revision 21508)
@@ -23,5 +23,5 @@
   short Xm;
   float secz;
-  char code;
+  char flags;
   Coords coords;
 } Mosaic; 
Index: trunk/Ohana/src/relphot/src/GridOps.c
===================================================================
--- trunk/Ohana/src/relphot/src/GridOps.c	(revision 21153)
+++ trunk/Ohana/src/relphot/src/GridOps.c	(revision 21508)
@@ -369,5 +369,5 @@
 
       // skip stars marked as BAD
-      if (catalog[c].average[n].code & STAR_BAD) {
+      if (catalog[c].average[n].flags & STAR_BAD) {
 	Nrel ++;
 	continue;
Index: trunk/Ohana/src/relphot/src/ImageOps.c
===================================================================
--- trunk/Ohana/src/relphot/src/ImageOps.c	(revision 21153)
+++ trunk/Ohana/src/relphot/src/ImageOps.c	(revision 21508)
@@ -244,5 +244,5 @@
   if (i == -1) return (NAN);
 
-  if (image[i].code & IMAGE_BAD) return (NAN);  
+  if (image[i].flags & IMAGE_BAD) return (NAN);  
   value = image[i].Mcal;
   return (value);
@@ -285,5 +285,5 @@
     /* on PoorImages run, skip good images */
     if (PoorImages) {
-      bad = image[i].code & (ID_IMAGE_FEW | ID_IMAGE_POOR | ID_IMAGE_SKIP);
+      bad = image[i].flags & (ID_IMAGE_FEW | ID_IMAGE_POOR | ID_IMAGE_SKIP);
       if (!bad) continue;
     }      
@@ -331,8 +331,8 @@
       mark = (N < IMAGE_TOOFEW) || (N < IMAGE_GOOD_FRACTION*Nlist[i]);
       if (mark) {
-	image[i].code |= ID_IMAGE_FEW;
+	image[i].flags |= ID_IMAGE_FEW;
 	Nfew ++;
       } else {
-	image[i].code &= ~ID_IMAGE_FEW;
+	image[i].flags &= ~ID_IMAGE_FEW;
       }      
     }
@@ -373,5 +373,5 @@
 
   for (i = N = 0; i < Nimage; i++) {
-    if (image[i].code & IMAGE_BAD) continue;
+    if (image[i].flags & IMAGE_BAD) continue;
     mlist[N] = fabs (image[i].Mcal);
     slist[N] = image[i].dMcal;
@@ -390,11 +390,11 @@
   for (i = 0; i < Nimage; i++) {
     mark = FALSE;
-    image[i].code &= ~ID_IMAGE_POOR;
+    image[i].flags &= ~ID_IMAGE_POOR;
     mark = (image[i].dMcal > MaxScatter) || (fabs(image[i].Mcal - MedOffset) > MaxOffset);
     if (mark) { 
       Nmark ++;
-      image[i].code |= ID_IMAGE_POOR;
+      image[i].flags |= ID_IMAGE_POOR;
     } else {
-      image[i].code &= ~ID_IMAGE_POOR;
+      image[i].flags &= ~ID_IMAGE_POOR;
     }
   }
@@ -470,5 +470,5 @@
   n = 0;
   for (i = 0; i < Nimage; i++) {
-    if (image[i].code & IMAGE_BAD)  continue;
+    if (image[i].flags & IMAGE_BAD)  continue;
 
     N = 0;
@@ -512,5 +512,5 @@
   for (i = 0; i < Nimage; i++) {
 
-    if (image[i].code & IMAGE_BAD)  continue;
+    if (image[i].flags & IMAGE_BAD)  continue;
 
     list[n] = pow (10.0, 0.01*image[i].Xm);
@@ -540,5 +540,5 @@
   for (i = 0; i < Nimage; i++) {
 
-    if (image[i].code & IMAGE_BAD)  continue;
+    if (image[i].flags & IMAGE_BAD)  continue;
 
     list[n] = image[i].Mcal;
@@ -568,5 +568,5 @@
   for (i = 0; i < Nimage; i++) {
 
-    if (image[i].code & IMAGE_BAD)  continue;
+    if (image[i].flags & IMAGE_BAD)  continue;
 
     list[n] = image[i].dMcal;
Index: trunk/Ohana/src/relphot/src/MosaicOps.c
===================================================================
--- trunk/Ohana/src/relphot/src/MosaicOps.c	(revision 21153)
+++ trunk/Ohana/src/relphot/src/MosaicOps.c	(revision 21508)
@@ -68,5 +68,5 @@
     mosaic[Nmosaic].dMcal = 0.0;
     mosaic[Nmosaic].Xm    = 0.0;
-    mosaic[Nmosaic].code  = image[i].code;
+    mosaic[Nmosaic].flags  = image[i].flags;
     mosaic[Nmosaic].secz  = image[i].secz;
 
@@ -183,6 +183,6 @@
       image[im].dMcal = mosaic[i].dMcal;
       image[im].Xm = mosaic[i].Xm;
-      image[im].code |= (mosaic[i].code & ID_IMAGE_FEW);
-      image[im].code |= (mosaic[i].code & ID_IMAGE_POOR);
+      image[im].flags |= (mosaic[i].flags & ID_IMAGE_FEW);
+      image[im].flags |= (mosaic[i].flags & ID_IMAGE_POOR);
     }
   }      
@@ -306,5 +306,5 @@
   if (i == -1) return (NAN);
 
-  if (mosaic[i].code & IMAGE_BAD) return (NAN);  
+  if (mosaic[i].flags & IMAGE_BAD) return (NAN);  
   value = mosaic[i].Mcal;
   return (value);
@@ -343,5 +343,5 @@
     /* on PoorImages run, skip good images */
     if (PoorImages) {
-      bad = mosaic[i].code & (ID_IMAGE_FEW | ID_IMAGE_POOR | ID_IMAGE_SKIP);
+      bad = mosaic[i].flags & (ID_IMAGE_FEW | ID_IMAGE_POOR | ID_IMAGE_SKIP);
       if (!bad) continue;
     }      
@@ -393,8 +393,8 @@
       if (mark) {
 	fprintf (stderr, "marked image %s (%d), (%d < %d) || (%d < %f*%d)\n", image[imlist[i][0]].name, i, N, IMAGE_TOOFEW, N, IMAGE_GOOD_FRACTION, Nlist[i]);
-	mosaic[i].code |= ID_IMAGE_FEW;
+	mosaic[i].flags |= ID_IMAGE_FEW;
 	Nfew ++;
       } else {
-	mosaic[i].code &= ~ID_IMAGE_FEW;
+	mosaic[i].flags &= ~ID_IMAGE_FEW;
       }
     }
@@ -434,5 +434,5 @@
   n = 0;
   for (i = 0; i < Nmosaic; i++) {
-    if (mosaic[i].code & IMAGE_BAD) continue;
+    if (mosaic[i].flags & IMAGE_BAD) continue;
     list[n] = mosaic[i].Mcal;
     dlist[n] = 1;
@@ -462,5 +462,5 @@
   for (i = 0; i < Nmosaic; i++) {
 
-    if (mosaic[i].code & IMAGE_BAD) continue;
+    if (mosaic[i].flags & IMAGE_BAD) continue;
     list[n] = mosaic[i].dMcal;
     dlist[n] = 1;
@@ -490,5 +490,5 @@
   n = 0;
   for (i = 0; i < Nmosaic; i++) {
-    if (mosaic[i].code & IMAGE_BAD)  continue;
+    if (mosaic[i].flags & IMAGE_BAD)  continue;
 
     N = 0;
@@ -534,5 +534,5 @@
   for (i = 0; i < Nmosaic; i++) {
 
-    if (mosaic[i].code & IMAGE_BAD) continue;
+    if (mosaic[i].flags & IMAGE_BAD) continue;
     list[n] = pow(10.0, 0.01*mosaic[i].Xm);
     dlist[n] = 1;
@@ -564,5 +564,5 @@
 
   for (i = N = 0; i < Nmosaic; i++) {
-    if (mosaic[i].code & IMAGE_BAD) continue;
+    if (mosaic[i].flags & IMAGE_BAD) continue;
     mlist[N] = mosaic[i].Mcal;
     slist[N] = mosaic[i].dMcal;
@@ -584,7 +584,7 @@
     if (mark) { 
       Nmark ++;
-      mosaic[i].code |= ID_IMAGE_POOR;
+      mosaic[i].flags |= ID_IMAGE_POOR;
     } else {
-      mosaic[i].code &= ~ID_IMAGE_POOR;
+      mosaic[i].flags &= ~ID_IMAGE_POOR;
     }
   }
Index: trunk/Ohana/src/relphot/src/StarOps.c
===================================================================
--- trunk/Ohana/src/relphot/src/StarOps.c	(revision 21153)
+++ trunk/Ohana/src/relphot/src/StarOps.c	(revision 21508)
@@ -26,5 +26,5 @@
 
   ave = catalog[cat].measure[meas].averef;
-  if (catalog[cat].average[ave].code & STAR_BAD) return (NAN);  
+  if (catalog[cat].average[ave].flags & STAR_BAD) return (NAN);  
  
   value = catalog[cat].secfilt[PhotNsec*ave+PhotSec].M;
@@ -44,5 +44,5 @@
 
       /* calculate the average value for a single star */
-      if (catalog[i].average[j].code & STAR_BAD) continue;  
+      if (catalog[i].average[j].flags & STAR_BAD) continue;  
       m = catalog[i].average[j].measureOffset;
 
@@ -89,8 +89,8 @@
 
       if (N <= STAR_TOOFEW) { /* too few measurements */
-	catalog[i].average[j].code |= ID_STAR_FEW;
+	catalog[i].average[j].flags |= ID_STAR_FEW;
 	Nfew ++;
       } else {
-	catalog[i].average[j].code &= ~ID_STAR_FEW;
+	catalog[i].average[j].flags &= ~ID_STAR_FEW;
       }	
 
@@ -208,5 +208,5 @@
 
 	  // XXX this is a hack for the 2MASS search; better to save an average value?
-	  if (catalog[i].measure[m].qPSF < 0.85) continue;
+	  if (catalog[i].measure[m].psfQual < 0.85) continue;
 
 	  list[N] = Msys - catalog[i].measure[m].Mcal;
@@ -280,5 +280,5 @@
   for (i = Ntot = 0; i < Ncatalog; i++) {
     for (j = 0; j < catalog[i].Naverage; j++) {
-      if (catalog[i].average[j].code & STAR_BAD) continue;
+      if (catalog[i].average[j].flags & STAR_BAD) continue;
       Xm = catalog[i].secfilt[PhotNsec*j+PhotSec].Xm;
       if (Xm == -1) continue;
@@ -306,8 +306,8 @@
       mark = (dM > MaxScatter) || (Xm == NAN_S_SHORT) || (Chisq > MaxChisq);
       if (mark) {
-	catalog[i].average[j].code |= ID_STAR_POOR;
+	catalog[i].average[j].flags |= ID_STAR_POOR;
 	Ndel ++;
       } else {
-	catalog[i].average[j].code &= ~ID_STAR_POOR;
+	catalog[i].average[j].flags &= ~ID_STAR_POOR;
       }
       Nave ++;
@@ -351,5 +351,5 @@
 
       /* skip bad stars to prevent them from becoming good (on inner sample) */
-      if (catalog[i].average[j].code & STAR_BAD) continue;  
+      if (catalog[i].average[j].flags & STAR_BAD) continue;  
 
       /* on final processing, skip stars already measured */
@@ -448,5 +448,5 @@
 
       /* calculate the average value for a single star */
-      if (catalog[i].average[j].code & STAR_BAD) continue;  
+      if (catalog[i].average[j].flags & STAR_BAD) continue;  
       m = catalog[i].average[j].measureOffset;
 
@@ -493,5 +493,5 @@
 
       /* calculate the average value for a single star */
-      if (catalog[i].average[j].code & STAR_BAD) continue;  
+      if (catalog[i].average[j].flags & STAR_BAD) continue;  
 
       Xm = catalog[i].secfilt[PhotNsec*j+PhotSec].Xm;
@@ -529,5 +529,5 @@
 
       /* calculate the average value for a single star */
-      if (catalog[i].average[j].code & STAR_BAD) continue;  
+      if (catalog[i].average[j].flags & STAR_BAD) continue;  
 
       dM = catalog[i].secfilt[PhotNsec*j+PhotSec].dM;
@@ -559,5 +559,5 @@
   for (i = 0; i < Ncatalog; i++) {
     for (j = 0; j < catalog[i].Naverage; j++) {
-      if (catalog[i].average[j].code & STAR_BAD) continue;  
+      if (catalog[i].average[j].flags & STAR_BAD) continue;  
       dMrel = catalog[i].secfilt[PhotNsec*j+PhotSec].dM;
       bin = dMrel / 0.00025;
@@ -590,5 +590,5 @@
   for (i = 0; i < Ncatalog; i++) {
     for (j = 0; j < catalog[i].Naverage; j++) {
-      if (catalog[i].average[j].code & STAR_BAD) continue;
+      if (catalog[i].average[j].flags & STAR_BAD) continue;
       xlist[N] = catalog[i].secfilt[PhotNsec*j+PhotSec].M;
       value    = catalog[i].secfilt[PhotNsec*j+PhotSec].Xm;
Index: trunk/Ohana/src/relphot/src/bcatalog.c
===================================================================
--- trunk/Ohana/src/relphot/src/bcatalog.c	(revision 21153)
+++ trunk/Ohana/src/relphot/src/bcatalog.c	(revision 21508)
@@ -34,6 +34,6 @@
       subcatalog[0].secfilt[PhotNsec*Naverage+PhotSec].M  = NAN;
       subcatalog[0].secfilt[PhotNsec*Naverage+PhotSec].dM = NAN;
-      subcatalog[0].average[Naverage].code &= ~ID_STAR_FEW;
-      subcatalog[0].average[Naverage].code &= ~ID_STAR_POOR;
+      subcatalog[0].average[Naverage].flags &= ~ID_STAR_FEW;
+      subcatalog[0].average[Naverage].flags &= ~ID_STAR_POOR;
     }
 
@@ -55,5 +55,6 @@
       /* select measurements by quality */
       // XXX ignore this criterion for REF measurements?
-      if (DophotSelect && (catalog[0].measure[offset].dophot != DophotValue)) continue;
+      // XXX chnage this to select by bitflags
+      if (DophotSelect && ((catalog[0].measure[offset].photFlags >> 16) != DophotValue)) continue;
 
       /* select measurements by mag limit */
Index: trunk/Ohana/src/relphot/src/plot_scatter.c
===================================================================
--- trunk/Ohana/src/relphot/src/plot_scatter.c	(revision 21153)
+++ trunk/Ohana/src/relphot/src/plot_scatter.c	(revision 21508)
@@ -23,5 +23,5 @@
 
       /* calculate the average value for a single star */
-      if (catalog[i].average[j].code & STAR_BAD) continue;  
+      if (catalog[i].average[j].flags & STAR_BAD) continue;  
       m = catalog[i].average[j].measureOffset;
 
Index: trunk/Ohana/src/relphot/src/relphot_objects.c
===================================================================
--- trunk/Ohana/src/relphot/src/relphot_objects.c	(revision 21153)
+++ trunk/Ohana/src/relphot/src/relphot_objects.c	(revision 21508)
@@ -42,12 +42,13 @@
       Nsecfilt = catalog.Nsecfilt;
       for (j = 0; j < catalog.Naverage; j++) {
-	catalog.average[j].code = 0;
+	catalog.average[j].flags = 0;
 	for (k = 0; k < Nsecfilt; k++) {
-	  catalog.secfilt[j*Nsecfilt + k].M  = NAN;
-	  catalog.secfilt[j*Nsecfilt + k].dM = NAN;
-	  catalog.secfilt[j*Nsecfilt + k].Xm = NAN_S_SHORT;
+	  catalog.secfilt[j*Nsecfilt + k].M    	= NAN;
+	  catalog.secfilt[j*Nsecfilt + k].M_20 	= NAN_S_SHORT;
+	  catalog.secfilt[j*Nsecfilt + k].M_80 	= NAN_S_SHORT;
+	  catalog.secfilt[j*Nsecfilt + k].dM   	= NAN;
+	  catalog.secfilt[j*Nsecfilt + k].Xm    = NAN_S_SHORT;
 	  catalog.secfilt[j*Nsecfilt + k].Ncode = 0;
 	  catalog.secfilt[j*Nsecfilt + k].Nused = 0;
-	  catalog.secfilt[j*Nsecfilt + k].dummy = 0;
 	}
 	m = catalog.average[j].measureOffset;
Index: trunk/Ohana/src/relphot/src/select_images.c
===================================================================
--- trunk/Ohana/src/relphot/src/select_images.c	(revision 21153)
+++ trunk/Ohana/src/relphot/src/select_images.c	(revision 21508)
@@ -133,11 +133,11 @@
       image[nimage] = timage[i]; 
       /* always allow 'few' images to succeed, if possible */
-      if (image[nimage].code & ID_IMAGE_FEW) { 
-	image[nimage].code &= ~(ID_IMAGE_FEW | ID_IMAGE_POOR);
+      if (image[nimage].flags & ID_IMAGE_FEW) { 
+	image[nimage].flags &= ~(ID_IMAGE_FEW | ID_IMAGE_POOR);
       }
       if (RESET) {
 	assignMcal (&image[nimage], (double *) NULL, -1);
 	image[nimage].dMcal = NAN;
-	image[nimage].code &= ~ID_IMAGE_POOR;
+	image[nimage].flags &= ~ID_IMAGE_POOR;
       }
       line_number[nimage] = i;
Index: trunk/Ohana/src/relphot/src/setMrelFinal.c
===================================================================
--- trunk/Ohana/src/relphot/src/setMrelFinal.c	(revision 21153)
+++ trunk/Ohana/src/relphot/src/setMrelFinal.c	(revision 21508)
@@ -54,6 +54,6 @@
   /* clear ID_STAR_POOR, ID_STAR_FEW, ID_MEAS_NOCAL values before writing ??? */
   for (i = 0; i < catalog[0].Naverage; i++) {
-    catalog[0].average[i].code &= ~ID_STAR_FEW;
-    catalog[0].average[i].code &= ~ID_STAR_POOR;
+    catalog[0].average[i].flags &= ~ID_STAR_FEW;
+    catalog[0].average[i].flags &= ~ID_STAR_POOR;
     m = catalog[0].average[i].measureOffset;
     for (j = 0; j < catalog[0].average[i].Nmeasure; j++, m++) {
@@ -102,5 +102,6 @@
 
       /* skip measurements with sat. dophot values */
-      if ((pass < 4) && (catalog[0].measure[m].dophot == 10)) goto skip;
+      // XXX we need to fix this: use the photFlags to ID saturation...
+      // if ((pass < 4) && (catalog[0].measure[m].dophot == 10)) goto skip;
 
       /* skip measurements from BAD images and mosaics */
@@ -116,6 +117,8 @@
       }
 
-      d1 = (catalog[0].measure[m].dophot == 1);
-      d2 = (catalog[0].measure[m].dophot == 2);
+      // d1 = (catalog[0].measure[m].dophot == 1);
+      // d2 = (catalog[0].measure[m].dophot == 2);
+      fprintf (stderr, "fix the dophot / type selections!");
+      abort ();
 
       /* skip measurements by measurement error */
