Index: branches/eam_branches/20091201/ppStack/src/ppStack.h
===================================================================
--- branches/eam_branches/20091201/ppStack/src/ppStack.h	(revision 26794)
+++ branches/eam_branches/20091201/ppStack/src/ppStack.h	(revision 26832)
@@ -13,8 +13,9 @@
 typedef enum {
     PPSTACK_MASK_CAL    = 0x01,         // Photometric calibration failed
-    PPSTACK_MASK_MATCH  = 0x02,         // PSF-matching failed
-    PPSTACK_MASK_CHI2   = 0x04,         // Chi^2 too deviant
-    PPSTACK_MASK_REJECT = 0x08,         // Rejection failed
-    PPSTACK_MASK_BAD    = 0x10,         // Bad image (too many pixels rejected)
+    PPSTACK_MASK_PSF    = 0x02,         // PSF measurement failed
+    PPSTACK_MASK_MATCH  = 0x04,         // PSF-matching failed
+    PPSTACK_MASK_CHI2   = 0x08,         // Chi^2 too deviant
+    PPSTACK_MASK_REJECT = 0x10,         // Rejection failed
+    PPSTACK_MASK_BAD    = 0x20,         // Bad image (too many pixels rejected)
     PPSTACK_MASK_ALL    = 0xff          // All errors
 } ppStackMask;
Index: branches/eam_branches/20091201/ppStack/src/ppStackPrepare.c
===================================================================
--- branches/eam_branches/20091201/ppStack/src/ppStackPrepare.c	(revision 26794)
+++ branches/eam_branches/20091201/ppStack/src/ppStackPrepare.c	(revision 26832)
@@ -178,5 +178,5 @@
         bool redoPhot = psMetadataLookupBool(NULL, recipe, "PHOT");
 
-	pmDetections *detections = NULL;
+        pmDetections *detections = NULL;
         if (options->convolve || options->matchZPs || options->photometry || redoPhot) {
             pmReadout *ro = pmFPAviewThisReadout(view, inputFile->fpa); // Readout with sources
@@ -186,6 +186,6 @@
                 return NULL;
             }
-	    psAssert (detections->allSources, "missing sources?");
-	    
+            psAssert (detections->allSources, "missing sources?");
+
             options->sourceLists->data[index] = psMemIncrRefCounter(detections->allSources);
         }
@@ -238,7 +238,26 @@
         }
         havePSFs = true;
-        float fwhm = pmPSFtoFWHM(psf, 0.5 * numCols, 0.5 * numRows); // FWHM for image
-        psStringAppend(&log, "Input %d: %f\n", i, fwhm);
-        options->inputSeeing->data.F32[i] = fwhm;
+
+        double sumFWHM = 0.0;           // FWHM for image
+        int numFWHM = 0;                // Number of FWHM measurements
+        for (int y = 0; y < psf->trendNy; y++) {
+            float yPos = ((float)y + 0.5) / (float)psf->trendNy * numRows;
+            for (int x = 0; x < psf->trendNx; x++) {
+                float xPos = ((float)x + 0.5) / (float)psf->trendNx * numCols;
+                float fwhm = pmPSFtoFWHM(psf, xPos, yPos); // FWHM for image
+                if (isfinite(fwhm)) {
+                    sumFWHM += fwhm;
+                    numFWHM++;
+                }
+            }
+        }
+        if (numFWHM == 0) {
+            options->inputSeeing->data.F32[i] = NAN;
+            options->inputMask->data.PS_TYPE_VECTOR_MASK_DATA[i] = PPSTACK_MASK_PSF;
+            psLogMsg("ppStack", PS_LOG_INFO, "Unable to measure PSF FWHM for image %d --- rejected.", i);
+        } else {
+            options->inputSeeing->data.F32[i] = sumFWHM / (float)numFWHM;
+        }
+        psStringAppend(&log, "Input %d: %f\n", i, options->inputSeeing->data.F32[i]);
     }
     if (havePSFs) {
