Index: /trunk/psModules/src/detrend/pmDark.c
===================================================================
--- /trunk/psModules/src/detrend/pmDark.c	(revision 18131)
+++ /trunk/psModules/src/detrend/pmDark.c	(revision 18132)
@@ -25,4 +25,5 @@
 // Look up the value of an ordinate in a readout
 static bool ordinateLookup(float *value, // Value of ordinate, to return
+			   bool *inRange, // is value within min : max range?
                            const char *name, // Name of ordinate (concept name)
                            bool scale,  // Scale the value?
@@ -35,4 +36,6 @@
     assert(ro);
 
+    *inRange = true;
+
     pmCell *cell = ro->parent; // Parent cell
     if (!cell) {
@@ -67,5 +70,5 @@
         if (*value < min || *value > max) {
             psWarning("Value of concept %s (%f) outside range (%f:%f)", name, *value, min, max);
-            return false;
+	    *inRange = false;
         }
         *value = 2.0 * (*value - min) / (max - min) - 1.0;
@@ -104,4 +107,6 @@
     PS_ASSERT_INT_NONNEGATIVE(iter, false);
     PS_ASSERT_FLOAT_LARGER_THAN(rej, 0.0, false);
+
+    bool inRange = true;
 
     // Extract fitting orders
@@ -118,5 +123,5 @@
             pmReadout *ro = inputs->data[i]; // Readout of interest
             float normValue;            // Normalisation value
-            if (!ordinateLookup(&normValue, normConcept, false, NAN, NAN, ro)) {
+            if (!ordinateLookup(&normValue, &inRange, normConcept, false, NAN, NAN, ro)) {
                 psWarning("Unable to find value of %s for readout %d", normConcept, i);
                 roMask->data.U8[i] = 0xff;
@@ -164,5 +169,11 @@
             pmReadout *ro = inputs->data[j]; // Readout of interest
             float value = NAN;          // Value of ordinate
-            if (!ordinateLookup(&value, ord->name, ord->scale, ord->min, ord->max, ro)) {
+            if (!ordinateLookup(&value, &inRange, ord->name, ord->scale, ord->min, ord->max, ro)) {
+                roMask->data.U8[j] = 0xff;
+                val->data.F32[i] = NAN;
+                numBadInputs++;
+                continue;
+            }
+	    if (!inRange) {
                 roMask->data.U8[j] = 0xff;
                 val->data.F32[i] = NAN;
@@ -271,5 +282,20 @@
                     mask->data.PS_TYPE_MASK_DATA[r] = readout->mask->data.PS_TYPE_MASK_DATA[yIn][xIn];
                 }
-            }
+	    
+            }
+
+	    // XXX test
+	    if (0 && (i == 377) && (j == 80)) {
+		FILE *f = fopen ("test.dat", "w");	
+		for (int r = 0; r < inputs->n; r++) { 
+		    fprintf (f, "%d %d  %d  ", i, j, mask->data.U8[r]);
+		    psVector *value = values->data[r];
+		    for (int tmpj = 0; tmpj < value->n; tmpj++) {
+			fprintf (f, "%f ", value->data.F32[tmpj]);
+		    }
+		    fprintf (f, "%f\n", pixels->data.F32[r]);
+		}
+		fclose (f);
+	    }
 
             if (!psPolynomialMDClipFit(poly, pixels, NULL, mask, maskVal, values, iter, rej)) {
@@ -337,4 +363,5 @@
     bool mdok;                          // Status of MD lookup
     psString normConcept = psMetadataLookupStr(&mdok, dark->analysis, PM_DARK_ANALYSIS_NORM); // Normalisation
+    bool inRange = false;
 
     int numOrdinates = ordinates->n;    // Number of ordinates
@@ -343,5 +370,5 @@
         pmDarkOrdinate *ord = ordinates->data[i]; // Ordinate of interest
         float value = NAN;              // Value for ordinate
-        if (!ordinateLookup(&value, ord->name, ord->scale, ord->min, ord->max, readout)) {
+        if (!ordinateLookup(&value, &inRange, ord->name, ord->scale, ord->min, ord->max, readout)) {
             psError(PS_ERR_UNKNOWN, true, "Unable to find value for %s", ord->name);
             psFree(values);
@@ -353,5 +380,5 @@
     bool doNorm = false;                // Do normalisation?
     if (normConcept && strlen(normConcept) > 0) {
-        if (!ordinateLookup(&norm, normConcept, false, NAN, NAN, readout)) {
+        if (!ordinateLookup(&norm, &inRange, normConcept, false, NAN, NAN, readout)) {
             psError(PS_ERR_UNKNOWN, true, "Unable to find value for %s", normConcept);
             psFree(values);
