Index: trunk/archive/scripts/src/phase2/papPhase2.c
===================================================================
--- trunk/archive/scripts/src/phase2/papPhase2.c	(revision 5467)
+++ trunk/archive/scripts/src/phase2/papPhase2.c	(revision 5564)
@@ -29,5 +29,5 @@
 // * Write calibrated image
 // * Write source catalogue, astrometry, etc.
- 
+
 // Currently neglecting different input types (F32, S32, U16, etc)
 
@@ -302,4 +302,53 @@
 #else
     psFree(inputFile);
+#endif
+
+
+#if 1
+    {
+	// Generate mask and weight frame
+	p_pmHDU *hdu = NULL;
+	if (input->hdu) {
+	    hdu = input->hdu;
+	}
+	psArray *chips = input->chips;
+	for (int chipNum = 0; chipNum < chips->n; chipNum++) {
+	    pmChip *chip = chips->data[chipNum];
+	    if (chip->valid) {
+		if (chip->hdu) {
+		    hdu = chip->hdu;
+		}
+		psArray *cells = chip->cells;
+		for (int cellNum = 0; cellNum < cells->n; cellNum++) {
+		    pmCell *cell = cells->data[cellNum];
+		    if (cell->valid) {
+			if (cell->hdu) {
+			    hdu = cell->hdu;
+			}
+			
+			hdu->masks = psArrayAlloc(hdu->images->n);
+			hdu->weights = psArrayAlloc(hdu->images->n);
+			psArray *readouts = cell->readouts;
+			for (int readNum = 0; readNum < hdu->images->n; readNum++) {
+			    psImage *image = hdu->images->data[readNum];
+			    psImage *mask = psImageAlloc(image->numCols, image->numRows, PS_TYPE_U8);
+			    psImage *weight = psImageAlloc(image->numCols, image->numRows, PS_TYPE_F32);
+			    pmReadout *readout = readouts->data[readNum];
+			    for (int j = 0; j < image->numRows; j++) {
+				for (int i = 0; i < image->numCols; i++) {
+				    mask->data.U8[j][i] = j + i;
+				    weight->data.F32[j][i] = sqrtf(image->data.F32[j][i]);
+				}
+			    }
+			    hdu->masks->data[readNum] = mask;
+			    hdu->weights->data[readNum] = weight;
+			    readout->mask = psMemIncrRefCounter(mask);
+			    readout->weight = psMemIncrRefCounter(weight);
+			}
+		    }
+		}
+	    }
+	}
+    }
 #endif
 
@@ -741,5 +790,5 @@
 						       inputReadout->image->numRows,
 						       PS_TYPE_U8);
-		    pmReadout *dummyMask = pmReadoutAlloc(NULL, dummyImage, NULL, 0, 0, 1, 1, 1, 1);
+		    pmReadout *dummyMask = pmReadoutAlloc(NULL, dummyImage, NULL, 0, 0, 1, 1);
 		    (void)pmFlatField(inputReadout, dummyMask, flatReadout);
 		    psFree(dummyMask);
@@ -771,5 +820,7 @@
     // Write the output
     pmFPAWrite(outputFile, input, database);
-//    pmFPAWriteMask(outputMaskFile, input);
+    pmFPAWriteMask(input, outputFile);
+    pmFPAWriteWeight(input, outputFile);
+
 #ifdef PRODUCTION
     psFitsClose(outputFile);
