Index: /branches/eam_branches/ipp-20220316/psModules/src/detrend/pmOverscan.c
===================================================================
--- /branches/eam_branches/ipp-20220316/psModules/src/detrend/pmOverscan.c	(revision 42146)
+++ /branches/eam_branches/ipp-20220316/psModules/src/detrend/pmOverscan.c	(revision 42147)
@@ -38,4 +38,7 @@
     opts->order = order;
     opts->stat = psMemIncrRefCounter(stat);
+
+    opts->minValid = 0.0; // default value if not defined
+    opts->maskVal = 0x0001; // default value if not defined
 
     // Smoothing
@@ -308,4 +311,17 @@
 	psFree(reducedScalar);
 
+	// EAM 2022.03.29 : if the calculated overscan value is below the threshold,
+	// declare the readout dead and mask
+
+	if (reduced < overscanOpts->minValid) {
+	    fprintf (stderr, "bad overscan (1) %f, masking readout\n", reduced);
+	    psImage *mask = input->mask;
+	    for (int y = 0; y < mask->numRows; y++) {
+		for (int x = 0; x < mask->numCols; x++) {
+		    mask->data.PS_TYPE_IMAGE_MASK_DATA[y][x] |= overscanOpts->maskVal;
+		}
+	    }
+	}
+
 	psFree(stats);
 	return true;
@@ -365,18 +381,32 @@
 	// generate stats of overscan vector for header
 	{ 
-	  psString comment = NULL;    // Comment to add
-	  psStats *vectorStats = psStatsAlloc (PS_STAT_SAMPLE_MEAN | PS_STAT_SAMPLE_STDEV);
-	  if (!psVectorStats (vectorStats, reduced, NULL, NULL, 0)) {
-	      psError(PS_ERR_UNKNOWN, false, "failure to measure stats");
-	      return false;
-	  }
-	  psStringAppend(&comment, "Mean Overscan value: %f", vectorStats->sampleMean);
-	  psMetadataAddStr(hdu->header, PS_LIST_TAIL, "HISTORY", PS_META_DUPLICATE_OK, comment, "");
-	  psFree(comment);
-
-	  // write metadata header value
-	  psMetadataAddF32(hdu->header, PS_LIST_TAIL, "OVER_VAL", PS_META_REPLACE, "Overscan mean", vectorStats->sampleMean);
-	  psMetadataAddF32(hdu->header, PS_LIST_TAIL, "OVER_SIG", PS_META_REPLACE, "Overscan stdev", vectorStats->sampleStdev);
-	  psFree (vectorStats);
+	    psString comment = NULL;    // Comment to add
+	    psStats *vectorStats = psStatsAlloc (PS_STAT_SAMPLE_MEAN | PS_STAT_SAMPLE_STDEV);
+	    if (!psVectorStats (vectorStats, reduced, NULL, NULL, 0)) {
+		psError(PS_ERR_UNKNOWN, false, "failure to measure stats");
+		return false;
+	    }
+	    psStringAppend(&comment, "Mean Overscan value: %f", vectorStats->sampleMean);
+	    psMetadataAddStr(hdu->header, PS_LIST_TAIL, "HISTORY", PS_META_DUPLICATE_OK, comment, "");
+	    psFree(comment);
+
+	    // write metadata header value
+	    psMetadataAddF32(hdu->header, PS_LIST_TAIL, "OVER_VAL", PS_META_REPLACE, "Overscan mean", vectorStats->sampleMean);
+	    psMetadataAddF32(hdu->header, PS_LIST_TAIL, "OVER_SIG", PS_META_REPLACE, "Overscan stdev", vectorStats->sampleStdev);
+
+	    // EAM 2022.03.29 : if the calculated overscan value is below the threshold,
+	    // declare the readout dead and mask
+	  
+	    if (vectorStats->sampleMean < overscanOpts->minValid) {
+		fprintf (stderr, "bad overscan (2) %f, masking readout\n", vectorStats->sampleMean);
+		psImage *mask = input->mask;
+		for (int y = 0; y < mask->numRows; y++) {
+		    for (int x = 0; x < mask->numCols; x++) {
+			mask->data.PS_TYPE_IMAGE_MASK_DATA[y][x] |= overscanOpts->maskVal;
+		    }
+		}
+	    }
+
+	    psFree (vectorStats);
 	}
 
@@ -463,4 +493,17 @@
 	  psMetadataAddF32(hdu->header, PS_LIST_TAIL, "OVER_VAL", PS_META_REPLACE, "Overscan mean", vectorStats->sampleMean);
 	  psMetadataAddF32(hdu->header, PS_LIST_TAIL, "OVER_SIG", PS_META_REPLACE, "Overscan stdev", vectorStats->sampleStdev);
+
+	  // EAM 2022.03.29 : if the calculated overscan value is below the threshold,
+	  // declare the readout dead and mask
+	  
+	  if (vectorStats->sampleMean < overscanOpts->minValid) {
+	      fprintf (stderr, "bad overscan (3) %f, masking readout\n", vectorStats->sampleMean);
+	      psImage *mask = input->mask;
+	      for (int y = 0; y < mask->numRows; y++) {
+		  for (int x = 0; x < mask->numCols; x++) {
+		      mask->data.PS_TYPE_IMAGE_MASK_DATA[y][x] |= overscanOpts->maskVal;
+		  }
+	      }
+	  }
 	  psFree (vectorStats);
 	}
Index: /branches/eam_branches/ipp-20220316/psModules/src/detrend/pmOverscan.h
===================================================================
--- /branches/eam_branches/ipp-20220316/psModules/src/detrend/pmOverscan.h	(revision 42146)
+++ /branches/eam_branches/ipp-20220316/psModules/src/detrend/pmOverscan.h	(revision 42147)
@@ -43,4 +43,7 @@
     int boxcar;                         ///< Boxcar smoothing radius
     float gauss;                        ///< Gaussian smoothing sigma
+    float minValid;			///< if overscan is too low, readout is dead : mask
+    psImageMaskType maskVal;            ///< Mask value to give dead readouts
+
     // Outputs
     psPolynomial1D *poly;               ///< Result of polynomial fit
