Index: trunk/ppTranslate/src/ppMops.h
===================================================================
--- trunk/ppTranslate/src/ppMops.h	(revision 40581)
+++ trunk/ppTranslate/src/ppMops.h	(revision 40582)
@@ -11,5 +11,5 @@
                      PM_SOURCE_MODE_CR_LIMIT | PM_SOURCE_MODE_SKY_FAILURE | PM_SOURCE_MODE_DEFECT) // Flags to exclude
 //#define SOURCE_MASK2 (PM_SOURCE_MODE2_DIFF_WITH_DOUBLE | PM_SOURCE_MODE2_ON_SPIKE | PM_SOURCE_MODE2_ON_STARCORE | PM_SOURCE_MODE2_ON_BURNTOOL | PM_SOURCE_MODE2_ON_CONVPOOR) // Flags2 to exclude
-#define SOURCE_MASK2 (PM_SOURCE_MODE2_ON_STARCORE) //Flags2 to exclude
+#define SOURCE_MASK2 (PM_SOURCE_MODE2_DEFAULT) //Flags2 to exclude
 
 #define PS1_DV_FORMAT "PS1_DV%d"
Index: trunk/ppTranslate/src/ppMopsRead.c
===================================================================
--- trunk/ppTranslate/src/ppMopsRead.c	(revision 40581)
+++ trunk/ppTranslate/src/ppMopsRead.c	(revision 40582)
@@ -250,4 +250,13 @@
     psVector *rall = psMetadataLookupVector(NULL, table, "DIFF_NRATIO_ALL");
 
+    psVector *rp = psMetadataLookupVector(NULL, table, "DIFF_R_P");
+    psVector *rm = psMetadataLookupVector(NULL, table, "DIFF_R_M");
+    psVector *snp = psMetadataLookupVector(NULL, table, "DIFF_SN_P");
+    psVector *snm = psMetadataLookupVector(NULL, table, "DIFF_SN_M");
+
+    psVector *mxx = psMetadataLookupVector(NULL, table, "MOMENTS_XX");
+    psVector *myy = psMetadataLookupVector(NULL, table, "MOMENTS_YY");
+    //MEH
+
     double plateScale = 0.0;        // Plate scale
     long numGood = 0;               // Number of good rows
@@ -264,8 +273,39 @@
       // -- need to test similarity/differences for WW/WS -- have separate block for WW
       // -- may need to move block
+      // -- block should set vars and then run rej afterwards -- not clear want all for both -- 
+
+//      if (!strcasecmp(args->difftype, "WW")) {
+//        // cut non-physical moments for PS -- <2.0? -- need to modify w/ mask level for edges
+//        if (!isfinite(mxx->data.F32[row]) || !isfinite(myy->data.F32[row])) {
+//          psTrace("ppMops.read", 10, "Discarding row %ld from input %d because of NAN MOMENTS_XX/YY params: < 2 2:  %f %f ", row, i, mxx->data.F32[row],myy->data.F32[row]);
+//          det->mask->data.U8[row] = 0xFF;
+//          continue;
+//        }
+//        if ( (mxx->data.F32[row]<2.0 || myy->data.F32[row]<2.0) && rmask->data.F32[row]>0.2 ) {
+//          psTrace("ppMops.read", 10, "Discarding row %ld from input %d because of non-physical MOMENTS_XX/YY params: < 2 2:  %f %f ", row, i, mxx->data.F32[row],myy->data.F32[row]);
+//          det->mask->data.U8[row] = 0xFF;
+//          continue;
+//        }
+//      }
+
       if (!strcasecmp(args->difftype, "WS")) {
+//      if (!strcasecmp(args->difftype, "WS") && (!strcasecmp(args->camera, "GPC2")) {
         psU64 flags2 = flags2V->data.U64[row]; // table reads in as U64 
         if (flags2 & SOURCE_MASK2) {
           psTrace("ppMops.read", 10, "Discarding row %ld from input %d because of flags2: %lud", row, i, flags2);
+          det->mask->data.U8[row] = 0xFF;
+          continue;
+        }
+
+	// MEH -- filter on same source P/M in diff (movers shouldn't have) -- WS deeper and may have M
+        // cut P/M sources at same position (stationary) -- NULL is issue when isn't one, lower s/n larger centroid error
+        if ( (isfinite(rp->data.F32[row]) && isfinite(snp->data.F32[row])) && (rp->data.F32[row]>4.0 && snp->data.F32[row]>5.0) ) { 
+            psTrace("ppMops.read", 10, "Discarding row %ld from input %d because of NAN R_P/SN_P or R_P/SN_P params: >4 >5 : %f %f ", row, i, rp->data.F32[row],snp->data.F32[row]);
+          det->mask->data.U8[row] = 0xFF;
+          continue;
+        }
+
+        if ( (isfinite(rm->data.F32[row]) && isfinite(snm->data.F32[row])) && (rm->data.F32[row]<4.0 && snm->data.F32[row]>5.0) ) { 
+            psTrace("ppMops.read", 10, "Discarding row %ld from input %d because of NAN R_M/SN_M or R_M/SN_M params: <4 >5 : %f %f ", row, i, rm->data.F32[row],snm->data.F32[row]);
           det->mask->data.U8[row] = 0xFF;
           continue;
@@ -280,4 +320,9 @@
         // DIFF_NRATIO_MASK>0.4
         // DIFF_NRATIO_ALL>0.3
+	// -- increase the cuts for gpc2 to exclude the poor masked edges more
+        // DIFF_FRATIO>0.6 -- losing some fainter sources @0.7
+        // DIFF_NRATIO_BAD>0.5
+        // DIFF_NRATIO_MASK>0.6
+        // DIFF_NRATIO_ALL>0.5
         // -- unclear about npos still -- so remove from check 
         //if (npos->data.S32[row]<=3 ||
@@ -288,5 +333,5 @@
           continue;
         }
-        if (fpos->data.F32[row]<=0.6 || rbad->data.F32[row]<=0.4 || rmask->data.F32[row]<=0.6 || rall->data.F32[row]<=0.3) {
+        if (fpos->data.F32[row]<=0.6 || rbad->data.F32[row]<=0.5 || rmask->data.F32[row]<=0.6 || rall->data.F32[row]<=0.5) {
           //psTrace("ppMops.read", 10, "Discarding row %ld from input %d because of diff params: 3, 0.6, 0.4, 0.4, 0.3: %d %g %f %f %f ", row, i, npos->data.S32[row], fpos->data.F32[row], rbad->data.F32[row], rmask->data.F32[row], rall->data.F32[row]);
           psTrace("ppMops.read", 10, "Discarding row %ld from input %d because of diff params: 3, 0.6, 0.4, 0.4, 0.3: %g %f %f %f ", row, i, fpos->data.F32[row], rbad->data.F32[row], rmask->data.F32[row], rall->data.F32[row]);
@@ -294,4 +339,17 @@
 	  continue;
         }
+
+	// cut non-physical moments for PS -- <2.0? -- need to modify w/ mask level for edges
+        if (!isfinite(mxx->data.F32[row]) || !isfinite(myy->data.F32[row])) {
+	    psTrace("ppMops.read", 10, "Discarding row %ld from input %d because of NAN MOMENTS_XX/YY params: < 2 2:  %f %f ", row, i, mxx->data.F32[row],myy->data.F32[row]);
+          det->mask->data.U8[row] = 0xFF;
+          continue;
+        }
+        if ( (mxx->data.F32[row]<=2.0 || myy->data.F32[row]<=2.0) && rmask->data.F32[row]>0.2 ) {
+	    psTrace("ppMops.read", 10, "Discarding row %ld from input %d because of non-physical MOMENTS_XX/YY params: < 2 2:  %f %f ", row, i, mxx->data.F32[row],myy->data.F32[row]);
+          det->mask->data.U8[row] = 0xFF;
+	  continue;
+        }
+
       } 
 
