Index: /trunk/psphot/src/psphotSourceStats.c
===================================================================
--- /trunk/psphot/src/psphotSourceStats.c	(revision 11176)
+++ /trunk/psphot/src/psphotSourceStats.c	(revision 11177)
@@ -13,8 +13,11 @@
     float OUTER    = psMetadataLookupF32 (&status, recipe, "SKY_OUTER_RADIUS");
     float RADIUS   = psMetadataLookupF32 (&status, recipe, "PSF_MOMENTS_RADIUS");
+    float MIN_SN   = psMetadataLookupF32 (&status, recipe, "MOMENTS_SN_MIN");
     char *breakPt  = psMetadataLookupStr (&status, recipe, "BREAK_POINT");
 
     sources = psArrayAllocEmpty (peaks->n);
 
+    int Nfail = 0;
+    int Nmoments = 0;
     for (int i = 0; i < peaks->n; i++) {
 
@@ -31,5 +34,10 @@
         }
 
-        // XXX skip faint sources?
+        // skip faint sources
+	if (source->peak->SN < MIN_SN) {
+            psArrayAdd (sources, 100, source);
+            psFree (source);
+	    continue;
+	}
 
         // measure a local sky value
@@ -38,4 +46,5 @@
         if (!status) {
           psFree (source);
+	  Nfail ++;
           continue;
         }
@@ -46,4 +55,5 @@
         if (!status) {
           psFree (source);
+	  Nfail ++;
           continue;
         }
@@ -55,4 +65,5 @@
             psArrayAdd (sources, 100, source);
             psFree (source);
+	    Nmoments ++;
             continue;
         }
@@ -67,12 +78,14 @@
             psArrayAdd (sources, 100, source);
             psFree (source);
+	    Nmoments ++;
             continue;
         }
 
         psFree (source);
+	Nfail ++;
         continue;
     }
 
-    psLogMsg ("psphot", PS_LOG_INFO, "%ld moments: %f sec\n", sources->n, psTimerMark ("psphot"));
+    psLogMsg ("psphot", PS_LOG_INFO, "%ld sources, %d moments, %d failed: %f sec\n", sources->n, Nmoments, Nfail, psTimerMark ("psphot"));
 
     return (sources);
