Index: trunk/psModules/src/detrend/pmMaskBadPixels.c
===================================================================
--- trunk/psModules/src/detrend/pmMaskBadPixels.c	(revision 16406)
+++ trunk/psModules/src/detrend/pmMaskBadPixels.c	(revision 16413)
@@ -104,21 +104,26 @@
     psImage *mask = readout->mask;      // Corresponding mask
 
-    float median = psMetadataLookupF32 (&status, readout->analysis, "READOUT.MEDIAN");
-    if (!status) {
-	psError(PS_ERR_PROGRAMMING, true, "Missing READOUT.MEDIAN from readout analysis data");
-	return NULL;
-    }
-
-    float stdev  = psMetadataLookupF32 (&status, readout->analysis, "READOUT.STDEV");
-    if (!status) {
-	psError(PS_ERR_PROGRAMMING, true, "Missing READOUT.STDEV from readout analysis data");
-	return NULL;
-    }
-
-    psTrace ("psModules.detrend", 3, "suspect: %f +/- %f\n", median, stdev);
-
     if (!out) {
         out = psImageAlloc(image->numCols, image->numRows, PS_TYPE_S32);
         psImageInit(out, 0);
+    }
+
+    bool whole = false;                 // Mask whole image?
+    float median = psMetadataLookupF32 (&status, readout->analysis, "READOUT.MEDIAN");
+    if (!status || !isfinite(median)) {
+        whole = true;
+    }
+    float stdev  = psMetadataLookupF32 (&status, readout->analysis, "READOUT.STDEV");
+    if (!status || !isfinite(stdev)) {
+        whole = true;
+    }
+
+
+    psTrace ("psModules.detrend", 3, "suspect: %f +/- %f\n", median, stdev);
+
+    if (whole) {
+        // If we get down here and the statistics are missing, then we should go and mask the entire image
+        psWarning("Missing statistics --- flagging entire image as suspect.");
+        return (psImage*)psBinaryOp(out, out, "+", psScalarAlloc(1.0, PS_TYPE_S32));
     }
 
@@ -146,9 +151,9 @@
       case PM_MASK_ID_VALUE:
         limit = thresh;
-	break;
+        break;
 
       case PM_MASK_ID_FRACTION:
         limit = thresh * nTotal;
-	break;
+        break;
 
       case PM_MASK_ID_SIGMA: {
@@ -162,7 +167,7 @@
         }
         limit = thresh * stats->clippedStdev;
-	psTrace ("psModules.detrend", 3, "bad: %f -> %f\n", stats->clippedStdev, limit);
+        psTrace ("psModules.detrend", 3, "bad: %f -> %f\n", stats->clippedStdev, limit);
         psFree(stats);
-	break;
+        break;
       }
 
@@ -195,6 +200,6 @@
         limit = max + 1.0 - thresh * sqrtf((float)max + 1.0);
 
-	psTrace ("psModules.detrend", 3, "bad: mode: %d, stdev: %f, limit: %f\n", max, sqrtf((float)max + 1.0), limit);
-	break;
+        psTrace ("psModules.detrend", 3, "bad: mode: %d, stdev: %f, limit: %f\n", max, sqrtf((float)max + 1.0), limit);
+        break;
       }
       default:
@@ -237,14 +242,14 @@
     if (!strcasecmp (string, "VALUE")) {
       return PM_MASK_ID_VALUE;
-    } 
+    }
     if (!strcasecmp (string, "FRACTION")) {
       return PM_MASK_ID_FRACTION;
-    } 
+    }
     if (!strcasecmp (string, "SIGMA")) {
       return PM_MASK_ID_SIGMA;
-    } 
+    }
     if (!strcasecmp (string, "POISSON")) {
       return PM_MASK_ID_POISSON;
-    } 
+    }
     return PM_MASK_ID_NONE;
 }
