Index: trunk/archive/scripts/src/phase2/pmFPA.h
===================================================================
--- trunk/archive/scripts/src/phase2/pmFPA.h	(revision 4820)
+++ trunk/archive/scripts/src/phase2/pmFPA.h	(revision 5104)
@@ -10,4 +10,10 @@
 
 typedef struct {
+    const char *extname;		// Extension name, if it corresponds to this level
+    psArray *pixels;			// The pixel data, if it corresponds to this level
+    psMetadata *header;			// The FITS header, if it corresponds to this level
+} p_pmHDU;
+
+typedef struct {
     // Astrometric transformations
     psPlaneDistort* fromTangentPlane;	// Transformation from tangent plane to focal plane
@@ -15,12 +21,9 @@
     psProjection *projection;		// Projection from tangent plane to sky
     // Information
-    psMetadata *values;			// Important values (cached)
-    const psMetadata *camera;		// Camera configuration
-    psDB *db;				// Database
+    psMetadata *camera;			// Camera configuration
+    psMetadata *concepts;		// Values for concepts
+    psMetadata *phu;			// Primary Header
     psArray *chips;			// The chips
-    // FITS data
-    const char *extname;		// Extension name, if it corresponds to this level
-    psArray *pixels;			// The pixel data, if it corresponds to this level
-    psMetadata *header;			// The FITS header, if it corresponds to this level
+    p_pmHDU *private;			// FITS data
 } pmFPA;
 
@@ -33,11 +36,9 @@
     psPlaneTransform* fromFPA;		// Transformation from FPA to chip coordinates
     // Information
-    psMetadata *values;			// Important values (cached)
+    psMetadata *concepts;		// Values for concepts
     psArray *cells;			// The cells (referred to by name)
     pmFPA *parent;			// Parent FPA
-    // FITS data
-    const char *extname;		// Extension name, if it corresponds to this level
-    psArray *pixels;			// The pixel data, if it corresponds to this level
-    psMetadata *header;			// The FITS header, if it corresponds to this level
+    bool valid;				// Valid for reading in?
+    p_pmHDU *private;			// FITS data
 } pmChip;
 
@@ -53,11 +54,10 @@
     psPlaneTransform* toSky;		// Transformations from cell to tangent plane coordinates
     // Information
-    psMetadata *values;			// Important values (cached)
+    psMetadata *concepts;		// Values for concepts
+    psMetadata *camera;			// Camera information
     psArray *readouts;			// The readouts (referred to by number)
     pmChip *parent;			// Parent chip
-    // FITS data
-    const char *extname;		// Extension name, if it corresponds to this level
-    psArray *pixels;			// The pixel data, if it corresponds to this level
-    psMetadata *header;			// The FITS header, if it corresponds to this level
+    bool valid;				// Valid for operating on?
+    p_pmHDU *private;			// FITS data
 } pmCell;
 
@@ -73,11 +73,13 @@
     // Information
     psImage *image;			// The pixels
-    psList *overscans;			// Array of subimages containing the overscan region(s)
-    psMetadata *values;			// readout-level metadata
+    psImage *mask;			// Mask image
+    psList *overscans;			// List of subimages containing the overscan regions
+    psMetadata *concepts;		// Concepts for readouts
 } pmReadout;
 
 // Allocators and deallocators
-pmFPA *pmFPAAlloc(const psMetadata *camera, // Camera configuration
-		  psDB *db		// Database
+p_pmHDU *p_pmHDUAlloc(const char *extname);
+void p_pmHDUFree(p_pmHDU *hdu);
+pmFPA *pmFPAAlloc(const psMetadata *camera // Camera configuration
     );
 void p_pmFPAFree(pmFPA *fpa);
@@ -89,5 +91,5 @@
 
 pmCell *pmCellAlloc(pmChip *chip,	// Chip to which the cell belongs
-		    psMetadata *values,	// Initial values for concepts
+		    psMetadata *cameraData, // Camera data
 		    psString name	// Name of cell
     );
@@ -95,5 +97,4 @@
 
 pmReadout *pmReadoutAlloc(pmCell *cell,	// Cell to which the readout belongs
-			  int readoutNum, // Number of the readout
 			  psImage *image, // The pixels
 			  psList *overscans, // The overscan images
@@ -102,3 +103,7 @@
 void p_pmReadoutFree(pmReadout *readout);
 
+// Select and exclude chips
+bool pmFPASelectChip(pmFPA *fpa, int chipNum);
+int pmFPAExcludeChip(pmFPA *fpa, int chipNum);
+
 #endif
