Index: trunk/psphot/src/pspsf.c
===================================================================
--- trunk/psphot/src/pspsf.c	(revision 4116)
+++ trunk/psphot/src/pspsf.c	(revision 4129)
@@ -68,8 +68,17 @@
     }
     psLogMsg ("psphot.psftest", 4, "fit flt:   %f sec for %d sources\n", psTimerMark ("fit"), sources->n);
+    psTrace ("psphot.psftest", 3, "keeping %d of %d PSF candidates (FLT)\n", Nflt, sources->n);
     DumpModelFits (test->modelFLT, "modelsFLT.dat");
 
     // stage 2: construct a psf (pmPSF) from this collection of model fits
     pmPSFFromModels (test->psf, test->modelFLT, test->mask);
+    
+    // count valid sources
+    int Nkeep = 0;
+    for (int i = 0; i < sources->n; i++) {
+      if (test->mask->data.U8[i]) continue;
+      Nkeep++;
+    }
+    psTrace ("psphot.psftest", 3, "keeping %d of %d PSF candidates\n", Nkeep, sources->n);
 
     // stage 3: refit with fixed shape parameters
@@ -96,4 +105,5 @@
     }
     psLogMsg ("psphot.psftest", 4, "fit psf:   %f sec for %d sources\n", psTimerMark ("fit"), sources->n);
+    psTrace ("psphot.psftest", 3, "keeping %d of %d PSF candidates (PSF)\n", Npsf, sources->n);
     DumpModelFits (test->modelPSF, "modelsPSF.dat");
 
@@ -152,6 +162,4 @@
 bool pmPSFFromModels (pmPSF *psf, psArray *models, psVector *mask) {
 
-    int n;
-
     // construct the fit vectors from the collection of objects
     // use the mask to ignore missing fits 
@@ -187,4 +195,13 @@
 	psf->params->data[i] = RobustFit2D (psf->params->data[i], mask, x, y, z, dz);
 	// psPolynomial2DDump (psf->params->data[i]);
+
+	// count valid sources
+	int Nkeep = 0;
+	for (int j = 0; j < mask->n; j++) {
+	  if (mask->data.U8[j]) continue;
+	  Nkeep++;
+	}
+	psTrace ("psphot.psftest", 3, "keeping %d of %d PSF candidates (PSF param %d)\n", Nkeep, mask->n, i);
+
     }
     return (true);
