Index: trunk/psModules/src/detrend/pmDark.c
===================================================================
--- trunk/psModules/src/detrend/pmDark.c	(revision 19432)
+++ trunk/psModules/src/detrend/pmDark.c	(revision 21183)
@@ -103,5 +103,5 @@
 {
     psArray *values = psArrayAlloc(inputs->n);
-    psVector *roMask = psVectorAlloc(inputs->n, PS_TYPE_U8); // Mask for bad readouts
+    psVector *roMask = psVectorAlloc(inputs->n, PS_TYPE_VECTOR_MASK); // Mask for bad readouts
     psVector *norm = normConcept ? psVectorAlloc(inputs->n, PS_TYPE_F32) : NULL; // Normalizations for each
     psVector *orders = psVectorAlloc(ordinates->n, PS_TYPE_U8); // Orders for each concept
@@ -121,5 +121,5 @@
         if (!ordinateLookup(&normValue, &inRange, normConcept, false, NAN, NAN, readout)) {
             psWarning("Unable to find value of %s for readout %d", normConcept, i);
-            roMask->data.U8[i] = 0xff;
+            roMask->data.PS_TYPE_VECTOR_MASK_DATA[i] = 0xff;
             norm->data.F32[i] = NAN;
             numBadInputs++;
@@ -128,5 +128,5 @@
         if (normValue == 0.0) {
             psWarning("Normalisation value (%s) for readout %d is zero", normConcept, i);
-            roMask->data.U8[i] = 0xff;
+            roMask->data.PS_TYPE_VECTOR_MASK_DATA[i] = 0xff;
             norm->data.F32[i] = NAN;
             numBadInputs++;
@@ -151,5 +151,5 @@
         for (int j = 0; j < inputs->n; j++) {
             psVector *val = values->data[j]; // Value vector for readout
-            if (roMask->data.U8[j]) {
+            if (roMask->data.PS_TYPE_VECTOR_MASK_DATA[j]) {
                 val->data.F32[i] = NAN;
                 continue;
@@ -159,5 +159,5 @@
             float value = NAN;          // Value of ordinate
             if (!ordinateLookup(&value, &inRange, ord->name, ord->scale, ord->min, ord->max, readout)) {
-                roMask->data.U8[j] = 0xff;
+                roMask->data.PS_TYPE_VECTOR_MASK_DATA[j] = 0xff;
                 val->data.F32[i] = NAN;
                 numBadInputs++;
@@ -165,5 +165,5 @@
             }
             if (!inRange) {
-                roMask->data.U8[j] = 0xff;
+                roMask->data.PS_TYPE_VECTOR_MASK_DATA[j] = 0xff;
                 val->data.F32[i] = NAN;
                 numBadInputs++;
@@ -263,5 +263,5 @@
 
 // do the combine work for this portion of the output (range is set by input data)
-bool pmDarkCombine(pmCell *output, const psArray *inputs, int iter, float rej, psMaskType maskVal)
+bool pmDarkCombine(pmCell *output, const psArray *inputs, int iter, float rej, psImageMaskType maskVal)
 {
     PS_ASSERT_PTR_NON_NULL(output, false);
@@ -314,5 +314,5 @@
     // Iterate over pixels, fitting polynomial
     psVector *pixels = psVectorAlloc(inputs->n, PS_TYPE_F32); // Stack of pixels
-    psVector *mask   = psVectorAlloc(inputs->n, PS_TYPE_MASK); // Mask for stack
+    psVector *mask   = psVectorAlloc(inputs->n, PS_TYPE_VECTOR_MASK); // Mask for stack
     for (int i = minInputRows; i < maxInputRows; i++) {
         int yOut = i - outReadout->row0; // y position on output readout
@@ -330,6 +330,6 @@
             psVectorInit(mask, 0);
             for (int r = 0; r < inputs->n; r++) {
-                if (roMask->data.U8[r]) {
-                    mask->data.PS_TYPE_MASK_DATA[r] = 0xff;
+                if (roMask->data.PS_TYPE_VECTOR_MASK_DATA[r]) {
+                    mask->data.PS_TYPE_VECTOR_MASK_DATA[r] = 0xff;
                     continue;
                 }
@@ -343,10 +343,10 @@
                 }
                 if (readout->mask) {
-                    mask->data.PS_TYPE_MASK_DATA[r] = readout->mask->data.PS_TYPE_MASK_DATA[yIn][xIn];
+                    mask->data.PS_TYPE_VECTOR_MASK_DATA[r] = (readout->mask->data.PS_TYPE_IMAGE_MASK_DATA[yIn][xIn] & maskVal);
                 }
 
             }
 
-            if (!psPolynomialMDClipFit(poly, pixels, NULL, mask, maskVal, values, iter, rej)) {
+            if (!psPolynomialMDClipFit(poly, pixels, NULL, mask, 0xff, values, iter, rej)) {
                 psErrorClear();         // Nothing we can do about it
                 psVectorInit(poly->coeff, NAN);
@@ -376,5 +376,5 @@
     const psVector *values = job->args->data[3]; // Values for each ordinate
 
-    psMaskType bad = PS_SCALAR_VALUE(job->args->data[4], U8); // Mask value to give bad pixels
+    psImageMaskType bad = PS_SCALAR_VALUE(job->args->data[4], PS_TYPE_IMAGE_MASK_DATA); // Mask value to give bad pixels
     bool doNorm    = PS_SCALAR_VALUE(job->args->data[5], U8); // Normalise values?
     float norm     = PS_SCALAR_VALUE(job->args->data[6], F32); // Value by which to normalise
@@ -386,5 +386,5 @@
 
 bool pmDarkApplyScan(pmReadout *readout, const pmCell *dark, const psVector *orders, const psVector *values,
-                     psMaskType bad, bool doNorm, float norm, int rowStart, int rowStop)
+                     psImageMaskType bad, bool doNorm, float norm, int rowStart, int rowStop)
 {
     int numCols = readout->image->numCols;
@@ -405,5 +405,5 @@
             readout->image->data.F32[y][x] -= value;
             if (readout->mask && !isfinite(value)) {
-                readout->mask->data.PS_TYPE_MASK_DATA[y][x] = bad;
+                readout->mask->data.PS_TYPE_IMAGE_MASK_DATA[y][x] = bad;
             }
         }
@@ -414,5 +414,5 @@
 }
 
-bool pmDarkApply(pmReadout *readout, pmCell *dark, psMaskType bad)
+bool pmDarkApply(pmReadout *readout, pmCell *dark, psImageMaskType bad)
 {
     PS_ASSERT_PTR_NON_NULL(readout, false);
@@ -424,5 +424,5 @@
         PS_ASSERT_IMAGE_NON_NULL(readout->mask, false);
         PS_ASSERT_IMAGES_SIZE_EQUAL(readout->mask, readout->image, false);
-        PS_ASSERT_IMAGE_TYPE(readout->mask, PS_TYPE_MASK, false);
+        PS_ASSERT_IMAGE_TYPE(readout->mask, PS_TYPE_IMAGE_MASK, false);
     }
     int numTerms = dark->readouts->n;   // Number of polynomial terms
@@ -496,5 +496,5 @@
             psArrayAdd(job->args, 1, orders);
             psArrayAdd(job->args, 1, values);
-            PS_ARRAY_ADD_SCALAR(job->args, bad, PS_TYPE_MASK);
+            PS_ARRAY_ADD_SCALAR(job->args, bad, PS_TYPE_IMAGE_MASK);
             PS_ARRAY_ADD_SCALAR(job->args, doNorm, PS_TYPE_U8);
             PS_ARRAY_ADD_SCALAR(job->args, norm, PS_TYPE_F32);
