Index: trunk/psModules/src/detrend/pmFringeStats.c
===================================================================
--- trunk/psModules/src/detrend/pmFringeStats.c	(revision 13776)
+++ trunk/psModules/src/detrend/pmFringeStats.c	(revision 21183)
@@ -70,5 +70,5 @@
     fringe->x = psVectorRecycle(fringe->x, fringe->nRequested, PS_TYPE_F32);
     fringe->y = psVectorRecycle(fringe->y, fringe->nRequested, PS_TYPE_F32);
-    fringe->mask = psVectorRecycle(fringe->mask, fringe->nRequested, PS_TYPE_U8);
+    fringe->mask = psVectorRecycle(fringe->mask, fringe->nRequested, PS_TYPE_VECTOR_MASK);
     fringe->x->n = fringe->y->n = fringe->mask->n = fringe->nRequested;
     psVectorInit(fringe->mask, 0);
@@ -115,5 +115,5 @@
     if (mask) {
         PS_ASSERT_VECTOR_NON_NULL(mask, false);
-        PS_ASSERT_VECTOR_TYPE(mask, PS_TYPE_U8, false);
+        PS_ASSERT_VECTOR_TYPE(mask, PS_TYPE_VECTOR_MASK, false);
         PS_ASSERT_VECTOR_SIZE(mask, (long)numRows, false);
     }
@@ -142,9 +142,9 @@
         psMetadataAddF32(row, PS_LIST_TAIL, "x", PS_META_REPLACE, "Fringe position in x", x->data.F32[i]);
         psMetadataAddF32(row, PS_LIST_TAIL, "y", PS_META_REPLACE, "Fringe position in y", y->data.F32[i]);
-        psU8 maskValue = 0;
-        if (mask && mask->data.U8[i]) {
+        psVectorMaskType maskValue = 0;
+        if (mask && mask->data.PS_TYPE_VECTOR_MASK_DATA[i]) {
             maskValue = 0xff;
         }
-        psMetadataAddU8(row, PS_LIST_TAIL, "mask", PS_META_REPLACE, "Mask", maskValue);
+        psMetadataAddVectorMask(row, PS_LIST_TAIL, "mask", PS_META_REPLACE, "Mask", maskValue);
         table->data[i] = row;
     }
@@ -207,11 +207,11 @@
     psVector *x = psVectorAlloc(numRows, PS_TYPE_F32); // x position
     psVector *y = psVectorAlloc(numRows, PS_TYPE_F32); // y position
-    psVector *mask = psVectorAlloc(numRows, PS_TYPE_U8); // mask
+    psVector *mask = psVectorAlloc(numRows, PS_TYPE_VECTOR_MASK); // mask
     regions->x = x;
     regions->y = y;
     regions->mask = mask;
 
-    #define READ_REGIONS_ROW(VECTOR, TYPE, NAME, DESCRIPTION) \
-    VECTOR->data.TYPE[i] = psMetadataLookup##TYPE(&mdok, row, NAME); \
+    #define READ_REGIONS_ROW(VECTOR, TYPE, DATATYPE, NAME, DESCRIPTION) \
+    VECTOR->data.DATATYPE[i] = psMetadataLookup##TYPE(&mdok, row, NAME); \
     if (!mdok) { \
         psError(PS_ERR_IO, true, "Unable to find " #DESCRIPTION " .\n"); \
@@ -224,7 +224,7 @@
     for (long i = 0; i < numRows; i++) {
         psMetadata *row = table->data[i]; // Table row
-        READ_REGIONS_ROW(x, F32, "x", "x position");
-        READ_REGIONS_ROW(y, F32, "y", "y position");
-        READ_REGIONS_ROW(mask, U8, "mask", "mask");
+        READ_REGIONS_ROW(x, F32, F32, "x", "x position");
+        READ_REGIONS_ROW(y, F32, F32, "y", "y position");
+        READ_REGIONS_ROW(mask, VectorMask, PS_TYPE_VECTOR_MASK_DATA, "mask", "mask");
     }
     psFree(table);
@@ -259,5 +259,5 @@
 }
 
-pmFringeStats *pmFringeStatsMeasure(pmFringeRegions *fringe, const pmReadout *readout, psMaskType maskVal)
+pmFringeStats *pmFringeStatsMeasure(pmFringeRegions *fringe, const pmReadout *readout, psImageMaskType maskVal)
 {
     PS_ASSERT_PTR_NON_NULL(fringe, NULL);
@@ -490,5 +490,5 @@
     newRegions->x = psVectorAlloc(numPoints, PS_TYPE_F32);
     newRegions->y = psVectorAlloc(numPoints, PS_TYPE_F32);
-    newRegions->mask = psVectorAlloc(numPoints, PS_TYPE_U8);
+    newRegions->mask = psVectorAlloc(numPoints, PS_TYPE_VECTOR_MASK);
     pmFringeStats *newStats = pmFringeStatsAlloc(newRegions); // The new list of statistics
 
@@ -500,5 +500,5 @@
         memcpy(&newRegions->x->data.F32[offset], regions->x->data.F32, regions->x->n * sizeof(psF32));
         memcpy(&newRegions->y->data.F32[offset], regions->y->data.F32, regions->y->n * sizeof(psF32));
-        memcpy(&newRegions->mask->data.U8[offset], regions->mask->data.U8, regions->mask->n * sizeof(psU8));
+        memcpy(&newRegions->mask->data.PS_TYPE_VECTOR_MASK_DATA[offset], regions->mask->data.PS_TYPE_VECTOR_MASK_DATA, regions->mask->n * sizeof(psVectorMaskType));
         memcpy(&newStats->f->data.F32[offset], fringe->f->data.F32, fringe->f->n * sizeof(psF32));
         memcpy(&newStats->df->data.F32[offset], fringe->df->data.F32, fringe->df->n * sizeof(psF32));
@@ -549,5 +549,5 @@
     if (mask) {
         PS_ASSERT_VECTOR_NON_NULL(mask, false);
-        PS_ASSERT_VECTOR_TYPE(mask, PS_TYPE_U8, false);
+        PS_ASSERT_VECTOR_TYPE(mask, PS_TYPE_VECTOR_MASK, false);
         PS_ASSERT_VECTOR_SIZE(mask, (long)numRows, false);
     }
@@ -580,6 +580,6 @@
         psMetadataAddF32(row, PS_LIST_TAIL, "x", PS_META_REPLACE, "Fringe position in x", x->data.F32[i]);
         psMetadataAddF32(row, PS_LIST_TAIL, "y", PS_META_REPLACE, "Fringe position in y", y->data.F32[i]);
-        psU8 maskValue = 0;             // Mask value
-        if (mask && mask->data.U8[i]) {
+        psVectorMaskType maskValue = 0;             // Mask value
+        if (mask && mask->data.PS_TYPE_VECTOR_MASK_DATA[i]) {
             maskValue = 0xff;
         }
@@ -601,5 +601,5 @@
         psFree(df);
 
-        psMetadataAddU8(row, PS_LIST_TAIL, "mask", PS_META_REPLACE, "Mask", maskValue);
+        psMetadataAddVectorMask(row, PS_LIST_TAIL, "mask", PS_META_REPLACE, "Mask", maskValue);
         table->data[i] = row;
     }
@@ -648,5 +648,5 @@
     psVector *x = psVectorAlloc(numRows, PS_TYPE_F32); // x position
     psVector *y = psVectorAlloc(numRows, PS_TYPE_F32); // y position
-    psVector *mask = psVectorAlloc(numRows, PS_TYPE_U8); // mask
+    psVector *mask = psVectorAlloc(numRows, PS_TYPE_VECTOR_MASK); // mask
     regions->x = x;
     regions->y = y;
@@ -656,7 +656,7 @@
     psArray *fringes = NULL; // Array of fringes, to return
 
-    #define READ_FRINGES_VECTOR_ROW(VECTOR, TYPE, NAME, DESCRIPTION) \
+    #define READ_FRINGES_VECTOR_ROW(VECTOR, TYPE, DATATYPE, NAME, DESCRIPTION) \
     { \
-        VECTOR->data.TYPE[i] = psMetadataLookup##TYPE(&mdok, row, NAME); \
+        VECTOR->data.DATATYPE[i] = psMetadataLookup##TYPE(&mdok, row, NAME); \
         if (!mdok) { \
             psError(PS_ERR_IO, true, "Unable to find " #DESCRIPTION " for row %ld.\n", i); \
@@ -686,10 +686,11 @@
     }
 
+    // XXX : need to extend this to support arbitrary types for the vectors on disk
     // Translate the table into vectors
     for (long i = 0; i < numRows; i++) {
         psMetadata *row = table->data[i]; // Table row
-        READ_FRINGES_VECTOR_ROW(x, F32, "x", "x position");
-        READ_FRINGES_VECTOR_ROW(y, F32, "y", "y position");
-        READ_FRINGES_VECTOR_ROW(mask, U8, "mask", "mask");
+        READ_FRINGES_VECTOR_ROW(x, F32, F32, "x", "x position");
+        READ_FRINGES_VECTOR_ROW(y, F32, F32, "y", "y position");
+        READ_FRINGES_VECTOR_ROW(mask, VectorMask, PS_TYPE_VECTOR_MASK_DATA, "mask", "mask");
         READ_FRINGES_ARRAY_ROW(f, F32, "f", "fringe measurement");
         READ_FRINGES_ARRAY_ROW(df, F32, "df", "fringe error");
@@ -782,5 +783,5 @@
             double matrix = 0.0;        // The matrix sum
             for (int k = 0; k < numPoints; k++) {
-                if (!mask->data.U8[k]) {
+                if (!mask->data.PS_TYPE_VECTOR_MASK_DATA[k]) {
                     psF32 f1 = (fringe1) ? fringe1->data.F32[k] : 1.0; // Contribution from i fringe
                     psF32 f2 = (fringe2) ? fringe2->data.F32[k] : 1.0; // Contribution from j fringe
@@ -799,5 +800,5 @@
         double vector = 0.0;            // The vector sum
         for (int k = 0; k < numPoints; k++) {
-            if (!mask->data.U8[k]) {
+            if (!mask->data.PS_TYPE_VECTOR_MASK_DATA[k]) {
                 psF32 f1 = (fringe1) ? fringe1->data.F32[k] : 1.0; // Contribution from fringe 1
                 psF32 s = science->f->data.F32[k]; // Contribution from science measurement
@@ -855,5 +856,5 @@
 
     for (int i = 0; i < diff->n; i++) {
-        if (!mask->data.U8[i]) {
+        if (!mask->data.PS_TYPE_VECTOR_MASK_DATA[i]) {
             float difference = science->f->data.F32[i] - scale->coeff->data.F32[0];
             for (int j = 0; j < fringes->n; j++) {
@@ -877,5 +878,5 @@
     assert(diffs->type.type == PS_TYPE_F32);
     assert(mask);
-    assert(mask->type.type == PS_TYPE_U8);
+    assert(mask->type.type == PS_TYPE_VECTOR_MASK);
     assert(diffs->n == mask->n);
 
@@ -888,8 +889,8 @@
     int numClipped = 0;                 // Number clipped
     for (int i = 0; i < diffs->n; i++) {
-        psTrace("psModules.detrend", 10, "Region %d (%d): %f\n", i, mask->data.U8[i], diffs->data.F32[i]);
-        if (!mask->data.U8[i] && fabs(diffs->data.F32[i]) > middle + thresh) {
+        psTrace("psModules.detrend", 10, "Region %d (%d): %f\n", i, mask->data.PS_TYPE_VECTOR_MASK_DATA[i], diffs->data.F32[i]);
+        if (!mask->data.PS_TYPE_VECTOR_MASK_DATA[i] && fabs(diffs->data.F32[i]) > middle + thresh) {
             psTrace("psModules.detrend", 5, "Masking %d: %f\n", i, diffs->data.F32[i]);
-            mask->data.U8[i] = 1;
+            mask->data.PS_TYPE_VECTOR_MASK_DATA[i] = 1;
             numClipped++;
         }
@@ -931,5 +932,5 @@
     // Set up the mask
     if (!regions->mask) {
-        regions->mask = psVectorAlloc(numRegions, PS_TYPE_U8);
+        regions->mask = psVectorAlloc(numRegions, PS_TYPE_VECTOR_MASK);
         psVectorInit(regions->mask, 0);
     }
@@ -946,5 +947,5 @@
         for (int j = 0; j < numRegions; j++) {
             if (!isfinite(fringe->f->data.F32[j])) {
-                mask->data.U8[j] = 1;
+                mask->data.PS_TYPE_VECTOR_MASK_DATA[j] = 1;
                 psTrace("psModules.detrend", 9, "Masking region %d because not finite in fringe %d.\n", j, i);
             }
@@ -956,5 +957,5 @@
     FILE *f = fopen ("fringe.dat", "w");
     for (int j = 0; j < numRegions; j++) {
-	if (mask->data.U8[j]) continue;
+	if (mask->data.PS_TYPE_VECTOR_MASK_DATA[j]) continue;
 	fprintf (f, "%d %f %f ", j, science->f->data.F32[j], science->df->data.F32[j]);
 	for (int i = 0; i < fringes->n; i++) {
@@ -1014,5 +1015,5 @@
 // XXX note that this modifies the input fringe images
 psImage *pmFringeCorrect(pmReadout *readout, pmFringeRegions *fringes, psArray *fringeImages,
-                         psArray *fringeStats, psMaskType maskVal, float rej,
+                         psArray *fringeStats, psImageMaskType maskVal, float rej,
                          unsigned int nIter, float keepFrac)
 {
