Index: /branches/eam_branch_20080719/psModules/src/astrom/pmAstrometryTable.c
===================================================================
--- /branches/eam_branch_20080719/psModules/src/astrom/pmAstrometryTable.c	(revision 18724)
+++ /branches/eam_branch_20080719/psModules/src/astrom/pmAstrometryTable.c	(revision 18725)
@@ -3,5 +3,5 @@
  *  @brief Functions to read and write astrometric information using the generic astrometry
  *  model.
- * 
+ *
  *  The generic model does not specify the location of the boresite on the sky, and it includes
  *  a model for the rotator and motion of the boresite.
@@ -10,6 +10,6 @@
  *
  *  @author EAM, IfA
- *  @version $Revision: 1.9 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2008-06-09 01:53:46 $
+ *  @version $Revision: 1.9.14.1 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2008-07-25 02:00:01 $
  *
  *  Copyright 2007 Institute for Astronomy, University of Hawaii
@@ -101,11 +101,11 @@
     // write the full table in one pass: require the level to be FPA
     if (view->chip != -1) {
-	psError(PS_ERR_IO, false, "Astrometry must be written at the FPA level");
-	return false;
+        psError(PS_ERR_IO, false, "Astrometry must be written at the FPA level");
+        return false;
     }
 
     if (!pmAstromWriteFPA (file)) {
-	psError(PS_ERR_IO, false, "Failed to write Astrometry for fpa");
-	return false;
+        psError(PS_ERR_IO, false, "Failed to write Astrometry for fpa");
+        return false;
     }
     return true;
@@ -116,34 +116,34 @@
 
     if (!pmAstromWritePHU (file)) {
-	psError(PS_ERR_IO, false, "Failed to write PHU for Astrometry table");
-	return false;
+        psError(PS_ERR_IO, false, "Failed to write PHU for Astrometry table");
+        return false;
     }
 
     if (!pmAstromWriteChips (file)) {
-	psError(PS_ERR_IO, false, "Failed to write Astrometry for chips");
-	return false;
+        psError(PS_ERR_IO, false, "Failed to write Astrometry for chips");
+        return false;
     }
 
     if (!pmAstromWriteFP (file)) {
-	psError(PS_ERR_IO, false, "Failed to write Sky for Astrometry table");
-	return false;
+        psError(PS_ERR_IO, false, "Failed to write Sky for Astrometry table");
+        return false;
     }
 
     if (!pmAstromWriteTP (file)) {
-	psError(PS_ERR_IO, false, "Failed to write Sky for Astrometry table");
-	return false;
+        psError(PS_ERR_IO, false, "Failed to write Sky for Astrometry table");
+        return false;
     }
 
     if (!pmAstromWriteSky (file)) {
-	psError(PS_ERR_IO, false, "Failed to write Sky for Astrometry table");
-	return false;
-    }
-
-    return true;
-}
-
-bool pmAstromWritePHU (pmFPAfile *file) { 
-
-    // output header data 
+        psError(PS_ERR_IO, false, "Failed to write Sky for Astrometry table");
+        return false;
+    }
+
+    return true;
+}
+
+bool pmAstromWritePHU (pmFPAfile *file) {
+
+    // output header data
     psMetadata *outhead = psMetadataAlloc();
 
@@ -155,18 +155,7 @@
     // write it out as a 'blank'
     if (phu) {
-	psMetadataCopy (outhead, phu->header);
+        psMetadataCopy (outhead, phu->header);
     } else {
-	pmConfigConformHeader (outhead, file->format);
-
-# if (0)
-	// XXX this is no longer needed : FPA.OBS is now correctly copied in pmConfigConformHeader
-	// XXX probably need other info to conform the header
-	psMetadata *fileData = psMetadataLookupMetadata(NULL, file->format, "FILE"); // File information
-	const char *fpaNameHdr = psMetadataLookupStr(NULL, fileData, "FPA.NAME");
-	if (fpaNameHdr && strlen(fpaNameHdr) > 0) {
-	    const char *fpaName = psMetadataLookupStr(NULL, file->fpa->concepts, "FPA.NAME");
-	    psMetadataAddStr(outhead, PS_LIST_TAIL, fpaNameHdr, PS_META_REPLACE, "FPA name", fpaName);
-	}
-# endif
+        pmConfigConformHeader (outhead, file->format);
     }
 
@@ -185,8 +174,8 @@
 
     psMetadata *header = psMetadataAlloc();
-    psMetadataAddStr(header, PS_LIST_TAIL, "COORD",    PS_META_REPLACE, "name of this layer",	"CHIPS");
-    psMetadataAddStr(header, PS_LIST_TAIL, "PARENT",   PS_META_REPLACE, "next layer up",     	"FOCAL_PLANE");
-    psMetadataAddStr(header, PS_LIST_TAIL, "BOUNDARY", PS_META_REPLACE, "validity region",   	"RECTANGLE");
-    psMetadataAddStr(header, PS_LIST_TAIL, "TRANSFRM", PS_META_REPLACE, "mapping to parent", 	"POLYNOMIAL");
+    psMetadataAddStr(header, PS_LIST_TAIL, "COORD",    PS_META_REPLACE, "name of this layer",   "CHIPS");
+    psMetadataAddStr(header, PS_LIST_TAIL, "PARENT",   PS_META_REPLACE, "next layer up",        "FOCAL_PLANE");
+    psMetadataAddStr(header, PS_LIST_TAIL, "BOUNDARY", PS_META_REPLACE, "validity region",      "RECTANGLE");
+    psMetadataAddStr(header, PS_LIST_TAIL, "TRANSFRM", PS_META_REPLACE, "mapping to parent",    "POLYNOMIAL");
 
     psArray *table = psArrayAllocEmpty (1);
@@ -197,42 +186,42 @@
     while ((chip = pmFPAviewNextChip (view, file->fpa, 1)) != NULL) {
 
-	if (!chip->toFPA) continue;
-	assert (chip->toFPA->x);
-	assert (chip->toFPA->y);
-      
-	psRegion *region = pmChipPixels (chip);
-
-	// set the chip name
-	char *chiprule = psStringCopy ("{CHIP.NAME}"); 
+        if (!chip->toFPA) continue;
+        assert (chip->toFPA->x);
+        assert (chip->toFPA->y);
+
+        psRegion *region = pmChipPixels (chip);
+
+        // set the chip name
+        char *chiprule = psStringCopy ("{CHIP.NAME}");
         char *chipname = pmFPAfileNameFromRule (chiprule, file, view);
 
-	for (int i = 0; i <= chip->toFPA->x->nX; i++) {
-	    for (int j = 0; j <= chip->toFPA->x->nY; j++) {
-		psMetadata *row = psMetadataAlloc ();
-		
-		psMetadataAddStr(row,    PS_LIST_TAIL, "SEGMENT",  PS_META_REPLACE, "name of this segment", chipname);
-		psMetadataAddStr(row,    PS_LIST_TAIL, "PARENT",   PS_META_REPLACE, "next layer up",        "FOCAL_PLANE");
-		psMetadataAddF32(row,    PS_LIST_TAIL, "MINX",     PS_META_REPLACE, "range", region->x0);
-		psMetadataAddF32(row,    PS_LIST_TAIL, "MAXX",     PS_META_REPLACE, "range", region->x1);
-		psMetadataAddF32(row,    PS_LIST_TAIL, "MINY",     PS_META_REPLACE, "range", region->y0);
-		psMetadataAddF32(row,    PS_LIST_TAIL, "MAXY",     PS_META_REPLACE, "range", region->y1);
-    
-		psMetadataAddS32(row,    PS_LIST_TAIL, "XORDER",   PS_META_REPLACE, "", i);
-		psMetadataAddS32(row,    PS_LIST_TAIL, "YORDER",   PS_META_REPLACE, "", j);
-		psMetadataAddS32(row,    PS_LIST_TAIL, "NXORDER",  PS_META_REPLACE, "", chip->toFPA->x->nX);
-		psMetadataAddS32(row,    PS_LIST_TAIL, "NYORDER",  PS_META_REPLACE, "", chip->toFPA->x->nY);
-		psMetadataAddF32(row,    PS_LIST_TAIL, "POLY_X",   PS_META_REPLACE, "", chip->toFPA->x->coeff[i][j]);
-		psMetadataAddF32(row,    PS_LIST_TAIL, "POLY_Y",   PS_META_REPLACE, "", chip->toFPA->y->coeff[i][j]);
-		psMetadataAddF32(row,    PS_LIST_TAIL, "ERROR_X",  PS_META_REPLACE, "", chip->toFPA->x->coeffErr[i][j]);
-		psMetadataAddF32(row,    PS_LIST_TAIL, "ERROR_Y",  PS_META_REPLACE, "", chip->toFPA->y->coeffErr[i][j]);
-		psMetadataAddU8 (row,    PS_LIST_TAIL, "MASK_X",   PS_META_REPLACE, "", chip->toFPA->x->coeffMask[i][j]);
-		psMetadataAddU8 (row,    PS_LIST_TAIL, "MASK_Y",   PS_META_REPLACE, "", chip->toFPA->y->coeffMask[i][j]);
-		psArrayAdd (table, 100, row);
-		psFree (row);
-	    }
-	}
-	psFree (chiprule);
-	psFree (chipname);
-	psFree (region);
+        for (int i = 0; i <= chip->toFPA->x->nX; i++) {
+            for (int j = 0; j <= chip->toFPA->x->nY; j++) {
+                psMetadata *row = psMetadataAlloc ();
+
+                psMetadataAddStr(row,    PS_LIST_TAIL, "SEGMENT",  PS_META_REPLACE, "name of this segment", chipname);
+                psMetadataAddStr(row,    PS_LIST_TAIL, "PARENT",   PS_META_REPLACE, "next layer up",        "FOCAL_PLANE");
+                psMetadataAddF32(row,    PS_LIST_TAIL, "MINX",     PS_META_REPLACE, "range", region->x0);
+                psMetadataAddF32(row,    PS_LIST_TAIL, "MAXX",     PS_META_REPLACE, "range", region->x1);
+                psMetadataAddF32(row,    PS_LIST_TAIL, "MINY",     PS_META_REPLACE, "range", region->y0);
+                psMetadataAddF32(row,    PS_LIST_TAIL, "MAXY",     PS_META_REPLACE, "range", region->y1);
+
+                psMetadataAddS32(row,    PS_LIST_TAIL, "XORDER",   PS_META_REPLACE, "", i);
+                psMetadataAddS32(row,    PS_LIST_TAIL, "YORDER",   PS_META_REPLACE, "", j);
+                psMetadataAddS32(row,    PS_LIST_TAIL, "NXORDER",  PS_META_REPLACE, "", chip->toFPA->x->nX);
+                psMetadataAddS32(row,    PS_LIST_TAIL, "NYORDER",  PS_META_REPLACE, "", chip->toFPA->x->nY);
+                psMetadataAddF32(row,    PS_LIST_TAIL, "POLY_X",   PS_META_REPLACE, "", chip->toFPA->x->coeff[i][j]);
+                psMetadataAddF32(row,    PS_LIST_TAIL, "POLY_Y",   PS_META_REPLACE, "", chip->toFPA->y->coeff[i][j]);
+                psMetadataAddF32(row,    PS_LIST_TAIL, "ERROR_X",  PS_META_REPLACE, "", chip->toFPA->x->coeffErr[i][j]);
+                psMetadataAddF32(row,    PS_LIST_TAIL, "ERROR_Y",  PS_META_REPLACE, "", chip->toFPA->y->coeffErr[i][j]);
+                psMetadataAddU8 (row,    PS_LIST_TAIL, "MASK_X",   PS_META_REPLACE, "", chip->toFPA->x->coeffMask[i][j]);
+                psMetadataAddU8 (row,    PS_LIST_TAIL, "MASK_Y",   PS_META_REPLACE, "", chip->toFPA->y->coeffMask[i][j]);
+                psArrayAdd (table, 100, row);
+                psFree (row);
+            }
+        }
+        psFree (chiprule);
+        psFree (chipname);
+        psFree (region);
     }
 
@@ -255,8 +244,8 @@
 
     psMetadata *header = psMetadataAlloc();
-    psMetadataAddStr(header, PS_LIST_TAIL, "COORD",    PS_META_REPLACE, "name of this layer",	"FOCAL_PLANE");
-    psMetadataAddStr(header, PS_LIST_TAIL, "PARENT",   PS_META_REPLACE, "next layer up",     	"TANGENT_PLANE");
-    psMetadataAddStr(header, PS_LIST_TAIL, "BOUNDARY", PS_META_REPLACE, "validity region",   	"RECTANGLE");
-    psMetadataAddStr(header, PS_LIST_TAIL, "TRANSFRM", PS_META_REPLACE, "mapping to parent", 	"POLYNOMIAL");
+    psMetadataAddStr(header, PS_LIST_TAIL, "COORD",    PS_META_REPLACE, "name of this layer",   "FOCAL_PLANE");
+    psMetadataAddStr(header, PS_LIST_TAIL, "PARENT",   PS_META_REPLACE, "next layer up",        "TANGENT_PLANE");
+    psMetadataAddStr(header, PS_LIST_TAIL, "BOUNDARY", PS_META_REPLACE, "validity region",      "RECTANGLE");
+    psMetadataAddStr(header, PS_LIST_TAIL, "TRANSFRM", PS_META_REPLACE, "mapping to parent",    "POLYNOMIAL");
 
     psArray *table = psArrayAllocEmpty (1);
@@ -266,5 +255,5 @@
 
     // rotate the toTPA to have 0.0 posangle
-    float posangle = psMetadataLookupF32 (&status, file->fpa->concepts, "FPA.POSANGLE"); 
+    float posangle = psMetadataLookupF32 (&status, file->fpa->concepts, "FPA.POSANGLE");
 
     // the to/from TPA transform currently has rotation of posangle; remove it & create the toTPA version
@@ -273,27 +262,27 @@
 
     for (int i = 0; i <= toTPA->x->nX; i++) {
-	for (int j = 0; j <= toTPA->x->nY; j++) {
-	    psMetadata *row = psMetadataAlloc ();
-	    psMetadataAddStr(row,    PS_LIST_TAIL, "SEGMENT",  PS_META_REPLACE, "name of this segment", "FOCAL_PLANE");
-	    psMetadataAddStr(row,    PS_LIST_TAIL, "PARENT",   PS_META_REPLACE, "next layer up",        "TANGENT_PLANE");
-	    psMetadataAddF32(row,    PS_LIST_TAIL, "MINX",     PS_META_REPLACE, "range", region->x0);
-	    psMetadataAddF32(row,    PS_LIST_TAIL, "MAXX",     PS_META_REPLACE, "range", region->x1);
-	    psMetadataAddF32(row,    PS_LIST_TAIL, "MINY",     PS_META_REPLACE, "range", region->y0);
-	    psMetadataAddF32(row,    PS_LIST_TAIL, "MAXY",     PS_META_REPLACE, "range", region->y1);
-    
-	    psMetadataAddS32(row,    PS_LIST_TAIL, "XORDER",   PS_META_REPLACE, "", i);
-	    psMetadataAddS32(row,    PS_LIST_TAIL, "YORDER",   PS_META_REPLACE, "", j);
-	    psMetadataAddS32(row,    PS_LIST_TAIL, "NXORDER",  PS_META_REPLACE, "", toTPA->x->nX);
-	    psMetadataAddS32(row,    PS_LIST_TAIL, "NYORDER",  PS_META_REPLACE, "", toTPA->x->nY);
-	    psMetadataAddF32(row,    PS_LIST_TAIL, "POLY_X",   PS_META_REPLACE, "", toTPA->x->coeff[i][j]);
-	    psMetadataAddF32(row,    PS_LIST_TAIL, "POLY_Y",   PS_META_REPLACE, "", toTPA->y->coeff[i][j]);
-	    psMetadataAddF32(row,    PS_LIST_TAIL, "ERROR_X",  PS_META_REPLACE, "", toTPA->x->coeffErr[i][j]);
-	    psMetadataAddF32(row,    PS_LIST_TAIL, "ERROR_Y",  PS_META_REPLACE, "", toTPA->y->coeffErr[i][j]);
-	    psMetadataAddU8 (row,    PS_LIST_TAIL, "MASK_X",   PS_META_REPLACE, "", toTPA->x->coeffMask[i][j]);
-	    psMetadataAddU8 (row,    PS_LIST_TAIL, "MASK_Y",   PS_META_REPLACE, "", toTPA->y->coeffMask[i][j]);
-
-	    psArrayAdd (table, 100, row);
-	    psFree (row);
-	}
+        for (int j = 0; j <= toTPA->x->nY; j++) {
+            psMetadata *row = psMetadataAlloc ();
+            psMetadataAddStr(row,    PS_LIST_TAIL, "SEGMENT",  PS_META_REPLACE, "name of this segment", "FOCAL_PLANE");
+            psMetadataAddStr(row,    PS_LIST_TAIL, "PARENT",   PS_META_REPLACE, "next layer up",        "TANGENT_PLANE");
+            psMetadataAddF32(row,    PS_LIST_TAIL, "MINX",     PS_META_REPLACE, "range", region->x0);
+            psMetadataAddF32(row,    PS_LIST_TAIL, "MAXX",     PS_META_REPLACE, "range", region->x1);
+            psMetadataAddF32(row,    PS_LIST_TAIL, "MINY",     PS_META_REPLACE, "range", region->y0);
+            psMetadataAddF32(row,    PS_LIST_TAIL, "MAXY",     PS_META_REPLACE, "range", region->y1);
+
+            psMetadataAddS32(row,    PS_LIST_TAIL, "XORDER",   PS_META_REPLACE, "", i);
+            psMetadataAddS32(row,    PS_LIST_TAIL, "YORDER",   PS_META_REPLACE, "", j);
+            psMetadataAddS32(row,    PS_LIST_TAIL, "NXORDER",  PS_META_REPLACE, "", toTPA->x->nX);
+            psMetadataAddS32(row,    PS_LIST_TAIL, "NYORDER",  PS_META_REPLACE, "", toTPA->x->nY);
+            psMetadataAddF32(row,    PS_LIST_TAIL, "POLY_X",   PS_META_REPLACE, "", toTPA->x->coeff[i][j]);
+            psMetadataAddF32(row,    PS_LIST_TAIL, "POLY_Y",   PS_META_REPLACE, "", toTPA->y->coeff[i][j]);
+            psMetadataAddF32(row,    PS_LIST_TAIL, "ERROR_X",  PS_META_REPLACE, "", toTPA->x->coeffErr[i][j]);
+            psMetadataAddF32(row,    PS_LIST_TAIL, "ERROR_Y",  PS_META_REPLACE, "", toTPA->y->coeffErr[i][j]);
+            psMetadataAddU8 (row,    PS_LIST_TAIL, "MASK_X",   PS_META_REPLACE, "", toTPA->x->coeffMask[i][j]);
+            psMetadataAddU8 (row,    PS_LIST_TAIL, "MASK_Y",   PS_META_REPLACE, "", toTPA->y->coeffMask[i][j]);
+
+            psArrayAdd (table, 100, row);
+            psFree (row);
+        }
     }
 
@@ -301,6 +290,6 @@
         psError(PS_ERR_IO, false, "writing sky data\n");
         psFree(table);
-	psFree (header);
-	psFree (region);
+        psFree (header);
+        psFree (region);
         return false;
     }
@@ -318,18 +307,18 @@
 
     // get the boresite model parameters
-    float Xo = psMetadataLookupF32 (&status, file->fpa->concepts, "FPA.BORE.X0"); 
-    float Yo = psMetadataLookupF32 (&status, file->fpa->concepts, "FPA.BORE.Y0"); 
-    float RX = psMetadataLookupF32 (&status, file->fpa->concepts, "FPA.BORE.RX"); 
-    float RY = psMetadataLookupF32 (&status, file->fpa->concepts, "FPA.BORE.RY"); 
-    float To = psMetadataLookupF32 (&status, file->fpa->concepts, "FPA.BORE.T0"); 
-    float Po = psMetadataLookupF32 (&status, file->fpa->concepts, "FPA.BORE.P0"); 
+    float Xo = psMetadataLookupF32 (&status, file->fpa->concepts, "FPA.BORE.X0");
+    float Yo = psMetadataLookupF32 (&status, file->fpa->concepts, "FPA.BORE.Y0");
+    float RX = psMetadataLookupF32 (&status, file->fpa->concepts, "FPA.BORE.RX");
+    float RY = psMetadataLookupF32 (&status, file->fpa->concepts, "FPA.BORE.RY");
+    float To = psMetadataLookupF32 (&status, file->fpa->concepts, "FPA.BORE.T0");
+    float Po = psMetadataLookupF32 (&status, file->fpa->concepts, "FPA.BORE.P0");
     float PosZero = psMetadataLookupF32 (&status, file->fpa->concepts, "FPA.POS_ZERO");  /// XXX be consistent with degrees v radians
     char *refChip = psMetadataLookupStr (&status, file->fpa->concepts, "FPA.REF.CHIP");
 
     psMetadata *header = psMetadataAlloc();
-    psMetadataAddStr(header, PS_LIST_TAIL, "COORD",    PS_META_REPLACE, "name of this layer",	"TANGENT_PLANE");
-    psMetadataAddStr(header, PS_LIST_TAIL, "PARENT",   PS_META_REPLACE, "next layer up",     	"SKY");
-    psMetadataAddStr(header, PS_LIST_TAIL, "BOUNDARY", PS_META_REPLACE, "validity region",   	"RECTANGLE");
-    psMetadataAddStr(header, PS_LIST_TAIL, "TRANSFRM", PS_META_REPLACE, "mapping to parent", 	"PROJECTION");
+    psMetadataAddStr(header, PS_LIST_TAIL, "COORD",    PS_META_REPLACE, "name of this layer",   "TANGENT_PLANE");
+    psMetadataAddStr(header, PS_LIST_TAIL, "PARENT",   PS_META_REPLACE, "next layer up",        "SKY");
+    psMetadataAddStr(header, PS_LIST_TAIL, "BOUNDARY", PS_META_REPLACE, "validity region",      "RECTANGLE");
+    psMetadataAddStr(header, PS_LIST_TAIL, "TRANSFRM", PS_META_REPLACE, "mapping to parent",    "PROJECTION");
 
     psArray *table = psArrayAllocEmpty (1);
@@ -343,5 +332,5 @@
     psMetadataAddF32(row,    PS_LIST_TAIL, "MINY",     PS_META_REPLACE, "range", region->y0);
     psMetadataAddF32(row,    PS_LIST_TAIL, "MAXY",     PS_META_REPLACE, "range", region->y1);
-    
+
     // psMetadataAddF32(row,    PS_LIST_TAIL, "XREF",     PS_META_REPLACE, "", file->fpa->toSky->R  * PM_DEG_RAD);
     // psMetadataAddF32(row,    PS_LIST_TAIL, "YREF",     PS_META_REPLACE, "", file->fpa->toSky->D  * PM_DEG_RAD);
@@ -363,7 +352,7 @@
     if (!psFitsWriteTable (file->fits, header, table, "TP")) {
         psError(PS_ERR_IO, false, "writing sky data\n");
-	psFree (region);
+        psFree (region);
         psFree (table);
-	psFree (header);
+        psFree (header);
         return false;
     }
@@ -379,8 +368,8 @@
 
     psMetadata *header = psMetadataAlloc();
-    psMetadataAddStr(header, PS_LIST_TAIL, "COORD",    PS_META_REPLACE, "name of this layer", 	"SKY");
-    psMetadataAddStr(header, PS_LIST_TAIL, "PARENT",   PS_META_REPLACE, "next layer up",      	"NONE");
-    psMetadataAddStr(header, PS_LIST_TAIL, "BOUNDARY", PS_META_REPLACE, "validity region",    	"NONE");
-    psMetadataAddStr(header, PS_LIST_TAIL, "TRANSFRM", PS_META_REPLACE, "mapping to parent",  	"NONE");
+    psMetadataAddStr(header, PS_LIST_TAIL, "COORD",    PS_META_REPLACE, "name of this layer",   "SKY");
+    psMetadataAddStr(header, PS_LIST_TAIL, "PARENT",   PS_META_REPLACE, "next layer up",        "NONE");
+    psMetadataAddStr(header, PS_LIST_TAIL, "BOUNDARY", PS_META_REPLACE, "validity region",      "NONE");
+    psMetadataAddStr(header, PS_LIST_TAIL, "TRANSFRM", PS_META_REPLACE, "mapping to parent",    "NONE");
 
     psArray *table = psArrayAllocEmpty (1);
@@ -388,5 +377,5 @@
     psMetadataAddStr(row,    PS_LIST_TAIL, "SEGMENT",  PS_META_REPLACE, "name of this segment", "SKY");
     psMetadataAddStr(row,    PS_LIST_TAIL, "PARENT",   PS_META_REPLACE, "next layer up",        "NONE");
-    
+
     psArrayAdd (table, 100, row);
     psFree (row);
@@ -408,15 +397,15 @@
     {
 
-	// write the full table in one pass: require the level to be FPA
-	if (view->chip != -1) {
-	    psError(PS_ERR_IO, false, "Astrometry must be read at the FPA level");
-	    return false;
-	}
-
-	if (!pmAstromReadFPA (file)) {
-	    psError(PS_ERR_IO, false, "Failed to read Astrometry for fpa");
-	    return false;
-	}
-	return true;
+        // write the full table in one pass: require the level to be FPA
+        if (view->chip != -1) {
+            psError(PS_ERR_IO, false, "Astrometry must be read at the FPA level");
+            return false;
+        }
+
+        if (!pmAstromReadFPA (file)) {
+            psError(PS_ERR_IO, false, "Failed to read Astrometry for fpa");
+            return false;
+        }
+        return true;
     }
 
@@ -425,16 +414,16 @@
 
     if (!pmAstromReadPHU (file)) {
-	psError(PS_ERR_IO, false, "Failed to read PHU for Astrometry table");
-	return false;
+        psError(PS_ERR_IO, false, "Failed to read PHU for Astrometry table");
+        return false;
     }
 
     if (!pmAstromReadChips (file)) {
-	psError(PS_ERR_IO, false, "Failed to read Astrometry for chips");
-	return false;
+        psError(PS_ERR_IO, false, "Failed to read Astrometry for chips");
+        return false;
     }
 
     if (!pmAstromReadFP (file)) {
-	psError(PS_ERR_IO, false, "Failed to read Sky for Astrometry table");
-	return false;
+        psError(PS_ERR_IO, false, "Failed to read Sky for Astrometry table");
+        return false;
     }
 
@@ -442,17 +431,17 @@
     // transformation determined in FP
     if (!pmAstromReadTP (file)) {
-	psError(PS_ERR_IO, false, "Failed to read Sky for Astrometry table");
-	return false;
+        psError(PS_ERR_IO, false, "Failed to read Sky for Astrometry table");
+        return false;
     }
 
     if (!pmAstromReadSky (file)) {
-	psError(PS_ERR_IO, false, "Failed to read Sky for Astrometry table");
-	return false;
-    }
-
-    return true;
-}
-
-bool pmAstromReadPHU (pmFPAfile *file) { 
+        psError(PS_ERR_IO, false, "Failed to read Sky for Astrometry table");
+        return false;
+    }
+
+    return true;
+}
+
+bool pmAstromReadPHU (pmFPAfile *file) {
 
     fprintf (stderr, "not sure we need to read PHU\n");
@@ -463,9 +452,9 @@
 
     for (int i = 0; i < fpa->chips->n; i++) {
-	pmChip *chip = fpa->chips->data[i];
-	if (!chip) continue;
-	char *thisone = psMetadataLookupStr (NULL, chip->concepts, "CHIP.NAME");
-	if (!thisone) continue;
-	if (!strcmp (name, thisone)) return (i);
+        pmChip *chip = fpa->chips->data[i];
+        if (!chip) continue;
+        char *thisone = psMetadataLookupStr (NULL, chip->concepts, "CHIP.NAME");
+        if (!thisone) continue;
+        if (!strcmp (name, thisone)) return (i);
     }
     return -1;
@@ -475,9 +464,9 @@
 
     for (int i = 0; i < fpa->chips->n; i++) {
-	pmChip *chip = fpa->chips->data[i];
-	if (!chip) continue;
-	char *thisone = psMetadataLookupStr (NULL, chip->concepts, "CHIP.NAME");
-	if (!thisone) continue;
-	if (!strcmp (name, thisone)) return (chip);
+        pmChip *chip = fpa->chips->data[i];
+        if (!chip) continue;
+        char *thisone = psMetadataLookupStr (NULL, chip->concepts, "CHIP.NAME");
+        if (!thisone) continue;
+        if (!strcmp (name, thisone)) return (chip);
     }
     return NULL;
@@ -497,7 +486,7 @@
     // free exising tranformations in prep for new alloc below
     for (int i = 0; i < file->fpa->chips->n; i++) {
-	pmChip *chip = file->fpa->chips->data[i];
-	psFree (chip->toFPA);
-	chip->toFPA = NULL;
+        pmChip *chip = file->fpa->chips->data[i];
+        psFree (chip->toFPA);
+        chip->toFPA = NULL;
     }
 
@@ -513,51 +502,51 @@
     // parse the table entries
     for (int i = 0; i < table->n; i++) {
-	psMetadata *row = table->data[i];
-
-	// name of the chip for this row. 
-	char *chipname = psMetadataLookupStr (&status, row, "SEGMENT");
-
-	// get chip from name
-	pmChip *chip = pmConceptsChipFromName (file->fpa, chipname);
-	REQUIRE (chip, "invalid chip name");
-
-	// define the toFPA transform if not already defined
-	int nX = psMetadataLookupS32(&status, row, "NXORDER"); REQUIRE (status, "missing NXORDER");
-	int nY = psMetadataLookupS32(&status, row, "NYORDER"); REQUIRE (status, "missing NYORDER");
-	if (chip->toFPA == NULL) {
-	    chip->toFPA = psPlaneTransformAlloc(nX, nY);
-	} else {
-	    REQUIRE (chip->toFPA->x->nX == nX, "mismatch in chip order");
-	    REQUIRE (chip->toFPA->x->nY == nY, "mismatch in chip order");
-	    REQUIRE (chip->toFPA->y->nX == nX, "mismatch in chip order");
-	    REQUIRE (chip->toFPA->y->nY == nY, "mismatch in chip order");
-	}
-
-	int ix = psMetadataLookupS32(&status, row, "XORDER");  REQUIRE (status, "missing XORDER");
-	int iy = psMetadataLookupS32(&status, row, "YORDER");  REQUIRE (status, "missing YORDER");
-
-	// XXX do I need to use this or can i rely on the camera concepts?
-	// minX = psMetadataLookupF32(&status, row, "MINX");
-	// maxX = psMetadataLookupF32(&status, row, "MAXX");
-	// minY = psMetadataLookupF32(&status, row, "MINY");
-	// maxY = psMetadataLookupF32(&status, row, "MAXY");
-
-	// XXX need to include mask values
-	chip->toFPA->x->coeff[ix][iy]    = psMetadataLookupF32(&status, row, "POLY_X");
-	chip->toFPA->y->coeff[ix][iy]    = psMetadataLookupF32(&status, row, "POLY_Y");
-	chip->toFPA->x->coeffErr[ix][iy] = psMetadataLookupF32(&status, row, "ERROR_X");
-	chip->toFPA->y->coeffErr[ix][iy] = psMetadataLookupF32(&status, row, "ERROR_Y");
-	chip->toFPA->x->coeffMask[ix][iy] = psMetadataLookupU8(&status, row, "MASK_X");
-	chip->toFPA->y->coeffMask[ix][iy] = psMetadataLookupU8(&status, row, "MASK_Y");
+        psMetadata *row = table->data[i];
+
+        // name of the chip for this row.
+        char *chipname = psMetadataLookupStr (&status, row, "SEGMENT");
+
+        // get chip from name
+        pmChip *chip = pmConceptsChipFromName (file->fpa, chipname);
+        REQUIRE (chip, "invalid chip name");
+
+        // define the toFPA transform if not already defined
+        int nX = psMetadataLookupS32(&status, row, "NXORDER"); REQUIRE (status, "missing NXORDER");
+        int nY = psMetadataLookupS32(&status, row, "NYORDER"); REQUIRE (status, "missing NYORDER");
+        if (chip->toFPA == NULL) {
+            chip->toFPA = psPlaneTransformAlloc(nX, nY);
+        } else {
+            REQUIRE (chip->toFPA->x->nX == nX, "mismatch in chip order");
+            REQUIRE (chip->toFPA->x->nY == nY, "mismatch in chip order");
+            REQUIRE (chip->toFPA->y->nX == nX, "mismatch in chip order");
+            REQUIRE (chip->toFPA->y->nY == nY, "mismatch in chip order");
+        }
+
+        int ix = psMetadataLookupS32(&status, row, "XORDER");  REQUIRE (status, "missing XORDER");
+        int iy = psMetadataLookupS32(&status, row, "YORDER");  REQUIRE (status, "missing YORDER");
+
+        // XXX do I need to use this or can i rely on the camera concepts?
+        // minX = psMetadataLookupF32(&status, row, "MINX");
+        // maxX = psMetadataLookupF32(&status, row, "MAXX");
+        // minY = psMetadataLookupF32(&status, row, "MINY");
+        // maxY = psMetadataLookupF32(&status, row, "MAXY");
+
+        // XXX need to include mask values
+        chip->toFPA->x->coeff[ix][iy]    = psMetadataLookupF32(&status, row, "POLY_X");
+        chip->toFPA->y->coeff[ix][iy]    = psMetadataLookupF32(&status, row, "POLY_Y");
+        chip->toFPA->x->coeffErr[ix][iy] = psMetadataLookupF32(&status, row, "ERROR_X");
+        chip->toFPA->y->coeffErr[ix][iy] = psMetadataLookupF32(&status, row, "ERROR_Y");
+        chip->toFPA->x->coeffMask[ix][iy] = psMetadataLookupU8(&status, row, "MASK_X");
+        chip->toFPA->y->coeffMask[ix][iy] = psMetadataLookupU8(&status, row, "MASK_Y");
     }
 
     // convert the toFPA transfomations to fromFPA transformations
     for (int i = 0; i < file->fpa->chips->n; i++) {
-	pmChip *chip = file->fpa->chips->data[i];
-	if (!chip->toFPA) continue;
-	psRegion *region = pmChipPixels (chip);
-	psFree (chip->fromFPA);
-	chip->fromFPA = psPlaneTransformInvert(NULL, chip->toFPA, *region, 50);
-	psFree (region);
+        pmChip *chip = file->fpa->chips->data[i];
+        if (!chip->toFPA) continue;
+        psRegion *region = pmChipPixels (chip);
+        psFree (chip->fromFPA);
+        chip->fromFPA = psPlaneTransformInvert(NULL, chip->toFPA, *region, 50);
+        psFree (region);
     }
 
@@ -590,27 +579,27 @@
     // parse the table
     for (int i = 0; i < table->n; i++) {
-	psMetadata *row = table->data[i];
-
-	// there is only one transformation in this table; the order is defined in the header
-	int nX = psMetadataLookupS32(&status, row, "NXORDER"); REQUIRE (status, "missing NXORDER");
-	int nY = psMetadataLookupS32(&status, row, "NYORDER"); REQUIRE (status, "missing NYORDER");
-	if (file->fpa->toTPA == NULL) {
-	    // allocate the new transformation
-	    file->fpa->toTPA = psPlaneTransformAlloc(nX, nY);
-	} else {
-	    REQUIRE (file->fpa->toTPA->x->nX == nX, "mismatch in chip order");
-	    REQUIRE (file->fpa->toTPA->x->nY == nY, "mismatch in chip order");
-	    REQUIRE (file->fpa->toTPA->y->nX == nX, "mismatch in chip order");
-	    REQUIRE (file->fpa->toTPA->y->nY == nY, "mismatch in chip order");
-	}
-
-	int ix = psMetadataLookupS32(&status, row, "XORDER"); REQUIRE (status, "missing XORDER");
-	int iy = psMetadataLookupS32(&status, row, "YORDER"); REQUIRE (status, "missing YORDER");
-	file->fpa->toTPA->x->coeff[ix][iy]     = psMetadataLookupF32(&status, row, "POLY_X");  REQUIRE (status, "missing POLY_X");
-	file->fpa->toTPA->y->coeff[ix][iy]     = psMetadataLookupF32(&status, row, "POLY_Y");  REQUIRE (status, "missing POLY_Y");
-	file->fpa->toTPA->x->coeffErr[ix][iy]  = psMetadataLookupF32(&status, row, "ERROR_X"); REQUIRE (status, "missing ERROR_X");
-	file->fpa->toTPA->y->coeffErr[ix][iy]  = psMetadataLookupF32(&status, row, "ERROR_Y"); REQUIRE (status, "missing ERROR_Y");
-	file->fpa->toTPA->x->coeffMask[ix][iy] = psMetadataLookupU8 (&status, row, "MASK_X");  REQUIRE (status, "missing MASK_X");
-	file->fpa->toTPA->y->coeffMask[ix][iy] = psMetadataLookupU8 (&status, row, "MASK_Y");  REQUIRE (status, "missing MASK_Y");
+        psMetadata *row = table->data[i];
+
+        // there is only one transformation in this table; the order is defined in the header
+        int nX = psMetadataLookupS32(&status, row, "NXORDER"); REQUIRE (status, "missing NXORDER");
+        int nY = psMetadataLookupS32(&status, row, "NYORDER"); REQUIRE (status, "missing NYORDER");
+        if (file->fpa->toTPA == NULL) {
+            // allocate the new transformation
+            file->fpa->toTPA = psPlaneTransformAlloc(nX, nY);
+        } else {
+            REQUIRE (file->fpa->toTPA->x->nX == nX, "mismatch in chip order");
+            REQUIRE (file->fpa->toTPA->x->nY == nY, "mismatch in chip order");
+            REQUIRE (file->fpa->toTPA->y->nX == nX, "mismatch in chip order");
+            REQUIRE (file->fpa->toTPA->y->nY == nY, "mismatch in chip order");
+        }
+
+        int ix = psMetadataLookupS32(&status, row, "XORDER"); REQUIRE (status, "missing XORDER");
+        int iy = psMetadataLookupS32(&status, row, "YORDER"); REQUIRE (status, "missing YORDER");
+        file->fpa->toTPA->x->coeff[ix][iy]     = psMetadataLookupF32(&status, row, "POLY_X");  REQUIRE (status, "missing POLY_X");
+        file->fpa->toTPA->y->coeff[ix][iy]     = psMetadataLookupF32(&status, row, "POLY_Y");  REQUIRE (status, "missing POLY_Y");
+        file->fpa->toTPA->x->coeffErr[ix][iy]  = psMetadataLookupF32(&status, row, "ERROR_X"); REQUIRE (status, "missing ERROR_X");
+        file->fpa->toTPA->y->coeffErr[ix][iy]  = psMetadataLookupF32(&status, row, "ERROR_Y"); REQUIRE (status, "missing ERROR_Y");
+        file->fpa->toTPA->x->coeffMask[ix][iy] = psMetadataLookupU8 (&status, row, "MASK_X");  REQUIRE (status, "missing MASK_X");
+        file->fpa->toTPA->y->coeffMask[ix][iy] = psMetadataLookupU8 (&status, row, "MASK_Y");  REQUIRE (status, "missing MASK_Y");
     }
 
@@ -630,5 +619,5 @@
     psMetadataItem *newItem = psMetadataItemCopy(item); \
     if (!psMetadataAddItem(TO, newItem, PS_LIST_TAIL, PS_META_REPLACE)) { \
-	psAbort ("cannot copy %s", NAME); \
+        psAbort ("cannot copy %s", NAME); \
     } \
     psFree (newItem); }
@@ -636,5 +625,5 @@
 // third layer applies boresite corrections and converts tangent plane to sky
 bool pmAstromReadTP (pmFPAfile *file) {
-    
+
     if (!psFitsMoveExtName (file->fits, "TP")) {
         psError(PS_ERR_IO, false, "missing TP extension in astrometry table\n");
@@ -693,5 +682,5 @@
 // third layer applies boresite corrections and converts tangent plane to sky
 bool pmAstromSetTP (pmFPAfile *file, psMetadata *concepts) {
-    
+
     bool status;
 
@@ -749,5 +738,5 @@
     psPlaneTransformApply (boreFP, chip->toFPA, boreCH);
     psPlaneTransformApply (boreTP, file->fpa->toTPA, boreFP);
-    psDeproject (boreSky, boreTP, file->fpa->toSky); 
+    psDeproject (boreSky, boreTP, file->fpa->toSky);
 
     // modify the projection to account for offset between true and reported boresite
