Index: /trunk/psphot/src/psphotApResid.c
===================================================================
--- /trunk/psphot/src/psphotApResid.c	(revision 13863)
+++ /trunk/psphot/src/psphotApResid.c	(revision 13864)
@@ -62,4 +62,9 @@
     Npsf = 0;
 
+    FILE *dumpFile = NULL;
+    if (psTraceGetLevel("psphot") >= 5) {
+	dumpFile = fopen ("apresid.dat", "w");
+    }
+
     // select all good PM_SOURCE_TYPE_STAR entries
     for (int i = 0; i < sources->n; i++) {
@@ -80,19 +85,12 @@
         }
 
+        if (!isfinite(source->apMag) || !isfinite(source->apMag)) {
+            Nfail ++;
+            continue;
+        }
+
+        // sanity clipping : if the model is so discrepant, but your expectation in the recipe
         apResid->data.F64[Npsf] = source->apMag - source->psfMag;
 
-        xPos->data.F64[Npsf]    = model->params->data.F32[PM_PAR_XPOS];
-        yPos->data.F64[Npsf]    = model->params->data.F32[PM_PAR_YPOS];
-
-        flux->data.F64[Npsf]    = pow(10.0, -0.4*source->psfMag);
-        r2rflux->data.F64[Npsf] = PS_SQR(model->radiusFit) / flux->data.F64[Npsf];
-
-        mask->data.U8[Npsf] = 0;
-
-        // XXX sanity clip?
-        // XXX need to see if all data were tossed?
-        // XXX need to subtract median?
-        // XXX need to put this in the config data...
-        // if (fabs(apResid->data.F64[Npsf]) > 0.2) continue;
         if ((MAX_AP_OFFSET > 0) && (fabs(apResid->data.F64[Npsf]) > MAX_AP_OFFSET)) {
             Nfail ++;
@@ -100,5 +98,20 @@
         }
 
+        xPos->data.F64[Npsf]    = model->params->data.F32[PM_PAR_XPOS];
+        yPos->data.F64[Npsf]    = model->params->data.F32[PM_PAR_YPOS];
+
+        flux->data.F64[Npsf]    = pow(10.0, -0.4*source->psfMag);
+        r2rflux->data.F64[Npsf] = PS_SQR(model->radiusFit) / flux->data.F64[Npsf];
+
+        mask->data.U8[Npsf] = 0;
+
         dMag->data.F64[Npsf] = model->dparams->data.F32[PM_PAR_I0] / model->params->data.F32[PM_PAR_I0];
+
+	if (psTraceGetLevel("psphot") >= 5) {
+	    fprintf (dumpFile, "%f %f  %f %f %f  %x\n", 
+		     xPos->data.F64[Npsf], yPos->data.F64[Npsf], 
+		     source->psfMag, dMag->data.F64[Npsf], apResid->data.F64[Npsf], 
+		     mask->data.U8[Npsf]);
+	}
 
         psVectorExtend (mask,    100, 1);
@@ -111,4 +124,9 @@
         Npsf ++;
     }
+
+    if (psTraceGetLevel("psphot") >= 5) {
+	fclose (dumpFile);
+    }
+    
     psLogMsg ("psphot.apresid", PS_LOG_DETAIL, "measure aperture residuals for %d objects (%d skipped, %d failed, %ld invalid)\n",
               Npsf, Nskip, Nfail, sources->n - Npsf - Nskip - Nfail);
