Index: /branches/eam_branches/ipp-20111122/Ohana/src/relphot/src/StarOps.c
===================================================================
--- /branches/eam_branches/ipp-20111122/Ohana/src/relphot/src/StarOps.c	(revision 33452)
+++ /branches/eam_branches/ipp-20111122/Ohana/src/relphot/src/StarOps.c	(revision 33453)
@@ -160,5 +160,5 @@
 // setMave is also similar to the above.  but:
 // * setMave is called by relphot -update-objects
-// * setMave includes PSF_QF tests 
+// * setMave excludes all detections with (PSF_QF < 0.85), setMrelOutput allows these for PASS > 2
 // * setMave updates 2MASS average flags
 // * setMave updates average EXT flags (PS1 and 2MASS)
@@ -199,4 +199,5 @@
 
 	int Ncode = 0;
+	int Next = 0;
 
 	N = 0;
@@ -213,4 +214,5 @@
 
 	  if (getImageEntry (m, i) < 0) {
+	    // these detetions have no image (eg, ref values such as 2MASS)
 	    Mcal = Mmos = Mgrid = 0;
 	  } else {
@@ -253,4 +255,24 @@
 	    }
 	  }
+
+	  // count the extended detections
+	  if ((catalog[i].measure[m].photcode >= 10000) && (catalog[i].measure[m].photcode <= 10500)) {
+	    if (!isnan(catalog[i].measure[m].Map)) {
+	      if (catalog[i].measure[m].M - catalog[i].measure[m].Map > 0.5) {
+		Next ++;
+	      }
+	    }
+	  }
+	  // count extended detections for 2MASS (XXX NOTE hardwired photcodes 2011, 2012, 2013)
+	  if ((catalog[i].measure[m].photcode >= 2011) && (catalog[i].measure[m].photcode <= 2013)) {
+	    if (catalog[i].measure[m].photFlags & 0x00c00000) {
+	      Next ++;
+	    }
+	    if ((pass == 0) && !(catalog[i].measure[m].photFlags & 0x00000007)) {
+	      // detections without one of these bits should only be used in PASS_1
+	      continue;
+	    }
+	  }
+
 	  N++;
 	}
@@ -288,4 +310,8 @@
 	catalog[i].secfilt[Nsecfilt*j+Nsec].M_20 = 1000 * stats.Lower20;
 	catalog[i].secfilt[Nsecfilt*j+Nsec].ubercalDist = minUbercalDist;
+
+	if ((Next > 0) && (Next > 0.5*N)) {
+	    catalog[i].secfilt[Nsecfilt*j+Nsec].flags |= ID_SECF_OBJ_EXT;
+	}
       }
     }
@@ -369,4 +395,7 @@
 	catalog[i].secfilt[Nsecfilt*j+Ns].Ncode = N;
 	catalog[i].secfilt[Nsecfilt*j+Ns].Nused = stats.Nmeas;
+
+	catalog[i].secfilt[Nsecfilt*j+Ns].M_80 = 1000 * stats.Upper80;
+	catalog[i].secfilt[Nsecfilt*j+Ns].M_20 = 1000 * stats.Lower20;
       }
 
@@ -413,4 +442,5 @@
 	catalog[i].average[j].flags &= ~flagBits;
 
+	// XXX set the secfilt bits?
 	if (nEXT && (nEXT > nPSF)) {
 	  catalog[i].average[j].flags |= ID_OBJ_EXT;
@@ -421,7 +451,9 @@
 	if (Galaxy2MASS) {
 	  catalog[i].average[j].flags |= ID_OBJ_EXT_ALT;
+	  // XXX set the secfilt bits for PASS_0 or PASS_1 here?
 	}
 	if (good2MASS) {
 	  catalog[i].average[j].flags |= ID_OBJ_GOOD_ALT;
+	  // XXX set the secfilt bits for PASS_0 or PASS_1 here?
 	}
       }
