Index: /trunk/Ohana/src/relphot/src/StarOps.c
===================================================================
--- /trunk/Ohana/src/relphot/src/StarOps.c	(revision 25734)
+++ /trunk/Ohana/src/relphot/src/StarOps.c	(revision 25735)
@@ -193,4 +193,6 @@
   for (i = 0; i < Ncatalog; i++) {
     for (j = 0; j < catalog[i].Naverage; j++) {
+
+      // update average photometry for each of the average filters
       for (Ns = 0; Ns < Nsecfilt; Ns++) {
 
@@ -207,6 +209,8 @@
 	  if (isnan(Msys)) continue;
 
-	  // XXX this is a hack for the 2MASS search; better to save an average value?
-	  if (catalog[i].measure[m].psfQual < 0.85) continue;
+	  // XXX only apply this filter for psphot data from GPC1 for now...
+	  if (0 && (catalog[i].measure[m].photcode > 10000) && (catalog[i].measure[m].photcode < 10500)) {
+	      if (catalog[i].measure[m].psfQual < 0.85) continue;
+	  }
 
 	  list[N] = Msys - catalog[i].measure[m].Mcal;
@@ -224,4 +228,57 @@
 	catalog[i].secfilt[Nsecfilt*j+Ns].Ncode = N;
 	catalog[i].secfilt[Nsecfilt*j+Ns].Nused = stats.Nmeas;
+      }
+
+      // update average flags based on the detection stats.  
+      // XXX we need to clean this up -- this is a serious set of hacks...
+      if (0) { 
+	int Galaxy2MASS, GalaxySDSS, goodPS1, nEXT, nPSF, good2MASS;
+
+	Galaxy2MASS = FALSE; // best guess for galaxy based on 2MASS J measurements (gal_contam == measure.flags[0x00400000 | 0x00800000])
+	GalaxySDSS = FALSE;  // best guess for galaxy based on SDSS measurements (XXX need to fix SDSS flags)
+	goodPS1 = FALSE;     // true if any PS1 measurements have psfQual > 0.85
+	good2MASS = FALSE;   // true if 2MASS J measurements have significant detections
+	nEXT = nPSF = 0;     // number of PS1 PSF vs EXT measurements
+
+	m = catalog[i].average[j].measureOffset;
+	for (k = 0; k < catalog[i].average[j].Nmeasure; k++, m++) {
+
+	  // PS1 data :
+	  if ((catalog[i].measure[m].photcode >= 10000) && (catalog[i].measure[m].photcode <= 10500)) {
+	    if (catalog[i].measure[m].psfQual > 0.85) {
+	      goodPS1 = TRUE;
+	      if (!isnan(catalog[i].measure[m].Map)) {
+		if (catalog[i].measure[m].M - catalog[i].measure[m].Map > 0.5) {
+		  nEXT ++;
+		} else {
+		  nPSF ++;
+		}
+	      }
+	    }
+	  }
+	  
+	  // 2MASS data:
+	  if (catalog[i].measure[m].photcode == 2011) {
+	    if (catalog[i].measure[m].photFlags & 0x00c00000) {
+	      Galaxy2MASS = TRUE;
+	    }
+	    if (catalog[i].measure[m].photFlags & 0x00000007) {
+	      good2MASS = TRUE; 
+	    }
+	  }  
+	}
+
+	if (nEXT && (nEXT > nPSF)) {
+	  catalog[i].average[j].flags |= 0x00010000;
+	}
+	if (goodPS1) {
+	  catalog[i].average[j].flags |= 0x00020000;
+	}
+	if (Galaxy2MASS) {
+	  catalog[i].average[j].flags |= 0x00040000;
+	}
+	if (good2MASS) {
+	  catalog[i].average[j].flags |= 0x00080000;
+	}
       }
     }
