Index: /trunk/Ohana/src/addstar/src/ReadStarsFITS.c
===================================================================
--- /trunk/Ohana/src/addstar/src/ReadStarsFITS.c	(revision 37245)
+++ /trunk/Ohana/src/addstar/src/ReadStarsFITS.c	(revision 37246)
@@ -182,5 +182,4 @@
     stars[i].measure.psfNdof    = NAN_S_INT; // not provided by SMPDATA:
     stars[i].measure.psfNpix    = NAN_S_INT; // not provided by SMPDATA:
-    stars[i].measure.crNsigma   = NAN;       // not provided by SMPDATA:
     stars[i].measure.extNsigma  = NAN;	     // not provided by SMPDATA:
 
@@ -251,5 +250,4 @@
     stars[i].measure.psfNdof    = NAN_S_INT; // not provided by PS1_DEV_0:
     stars[i].measure.psfNpix    = NAN_S_INT; // not provided by PS1_DEV_0:
-    stars[i].measure.crNsigma   = NAN;       // not provided by PS1_DEV_0:
     stars[i].measure.extNsigma  = NAN;        // not provided by PS1_DEV_0:
 
@@ -323,5 +321,4 @@
     stars[i].measure.psfNdof    = NAN_S_INT; // not provided by PS1_DEV_1:
     stars[i].measure.psfNpix    = NAN_S_INT; // not provided by PS1_DEV_1:
-    stars[i].measure.crNsigma   = ps1data[i].crNsigma;
     stars[i].measure.extNsigma  = ps1data[i].extNsigma;
 
@@ -408,5 +405,4 @@
     stars[i].measure.psfNdof    = ps1data[i].psfNdof;
     stars[i].measure.psfNpix    = ps1data[i].psfNpix;
-    stars[i].measure.crNsigma   = ps1data[i].crNsigma;
     stars[i].measure.extNsigma  = ps1data[i].extNsigma;
 
@@ -494,5 +490,4 @@
     stars[i].measure.psfNdof    = ps1data[i].psfNdof;
     stars[i].measure.psfNpix    = ps1data[i].psfNpix;
-    stars[i].measure.crNsigma   = ps1data[i].crNsigma;
     stars[i].measure.extNsigma  = ps1data[i].extNsigma;
 
@@ -572,5 +567,4 @@
     stars[i].measure.psfNdof    = ps1data[i].psfNdof;
     stars[i].measure.psfNpix    = ps1data[i].psfNpix;
-    stars[i].measure.crNsigma   = ps1data[i].crNsigma;
     stars[i].measure.extNsigma  = ps1data[i].extNsigma;
 
@@ -653,5 +647,4 @@
     stars[i].measure.psfNdof    = ps1data[i].psfNdof;
     stars[i].measure.psfNpix    = ps1data[i].psfNpix;
-    stars[i].measure.crNsigma   = ps1data[i].crNsigma;
     stars[i].measure.extNsigma  = ps1data[i].extNsigma;
 
@@ -665,4 +658,5 @@
                         
     stars[i].measure.photFlags  = ps1data[i].flags;
+    stars[i].measure.photFlags2 = ps1data[i].flags2;
 
     // this is may optionally be replaced by the internal sequence (see FilterStars.c)
@@ -738,5 +732,4 @@
     stars[i].measure.psfNdof    = ps1data[i].psfNdof;
     stars[i].measure.psfNpix    = ps1data[i].psfNpix;
-    stars[i].measure.crNsigma   = ps1data[i].crNsigma;
     stars[i].measure.extNsigma  = ps1data[i].extNsigma;
 
@@ -750,4 +743,5 @@
                         
     stars[i].measure.photFlags  = ps1data[i].flags;
+    stars[i].measure.photFlags2 = ps1data[i].flags2;
 
     // this is may optionally be replaced by the internal sequence (see FilterStars.c)
@@ -823,5 +817,4 @@
     stars[i].measure.psfNdof    = ps1data[i].psfNdof;
     stars[i].measure.psfNpix    = ps1data[i].psfNpix;
-    stars[i].measure.crNsigma   = ps1data[i].crNsigma;
     stars[i].measure.extNsigma  = ps1data[i].extNsigma;
 
@@ -835,4 +828,5 @@
                         
     stars[i].measure.photFlags  = ps1data[i].flags;
+    stars[i].measure.photFlags2 = ps1data[i].flags2;
 
     // this is may optionally be replaced by the internal sequence (see FilterStars.c)
@@ -908,5 +902,4 @@
     stars[i].measure.psfNdof    = ps1data[i].psfNdof;
     stars[i].measure.psfNpix    = ps1data[i].psfNpix;
-    stars[i].measure.crNsigma   = ps1data[i].crNsigma;
     stars[i].measure.extNsigma  = ps1data[i].extNsigma;
 
@@ -920,4 +913,5 @@
                         
     stars[i].measure.photFlags  = ps1data[i].flags;
+    stars[i].measure.photFlags2 = ps1data[i].flags2;
 
     // this is may optionally be replaced by the internal sequence (see FilterStars.c)
@@ -1038,5 +1032,4 @@
     stars[i].measure.psfNdof    = ps1data[i].psfNdof;
     stars[i].measure.psfNpix    = ps1data[i].psfNpix;
-    stars[i].measure.crNsigma   = ps1data[i].crNsigma;
     stars[i].measure.extNsigma  = ps1data[i].extNsigma;
 
@@ -1050,4 +1043,5 @@
                         
     stars[i].measure.photFlags  = ps1data[i].flags;
+    stars[i].measure.photFlags2 = ps1data[i].flags2;
 
     // this is may optionally be replaced by the internal sequence (see FilterStars.c)
@@ -1120,5 +1114,4 @@
     stars[i].measure.psfNdof    = ps1data[i].psfNdof;
     stars[i].measure.psfNpix    = ps1data[i].psfNpix;
-    stars[i].measure.crNsigma   = ps1data[i].crNsigma;
     stars[i].measure.extNsigma  = ps1data[i].extNsigma;
 
@@ -1132,4 +1125,5 @@
                         
     stars[i].measure.photFlags  = ps1data[i].flags;
+    stars[i].measure.photFlags2 = ps1data[i].flags2;
 
     // this is may optionally be replaced by the internal sequence (see FilterStars.c)
@@ -1202,5 +1196,4 @@
     stars[i].measure.psfNdof    = ps1data[i].psfNdof;
     stars[i].measure.psfNpix    = ps1data[i].psfNpix;
-    stars[i].measure.crNsigma   = ps1data[i].crNsigma;
     stars[i].measure.extNsigma  = ps1data[i].extNsigma;
 
@@ -1214,4 +1207,5 @@
                         
     stars[i].measure.photFlags  = ps1data[i].flags;
+    stars[i].measure.photFlags2 = ps1data[i].flags2;
 
     // this is may optionally be replaced by the internal sequence (see FilterStars.c)
@@ -1284,5 +1278,4 @@
     stars[i].measure.psfNdof    = ps1data[i].psfNdof;
     stars[i].measure.psfNpix    = ps1data[i].psfNpix;
-    stars[i].measure.crNsigma   = ps1data[i].crNsigma;
     stars[i].measure.extNsigma  = ps1data[i].extNsigma;
 
@@ -1296,4 +1289,5 @@
                         
     stars[i].measure.photFlags  = ps1data[i].flags;
+    stars[i].measure.photFlags2 = ps1data[i].flags2;
 
     // this is may optionally be replaced by the internal sequence (see FilterStars.c)
@@ -1365,5 +1359,4 @@
     stars[i].measure.psfNdof    = ps1data[i].psfNdof;
     stars[i].measure.psfNpix    = ps1data[i].psfNpix;
-    stars[i].measure.crNsigma   = ps1data[i].crNsigma;
     stars[i].measure.extNsigma  = ps1data[i].extNsigma;
 
@@ -1377,4 +1370,5 @@
                         
     stars[i].measure.photFlags  = ps1data[i].flags;
+    stars[i].measure.photFlags2 = ps1data[i].flags2;
 
     // this is may optionally be replaced by the internal sequence (see FilterStars.c)
@@ -1451,5 +1445,4 @@
     stars[i].measure.psfNdof    = ps1data[i].psfNdof;
     stars[i].measure.psfNpix    = ps1data[i].psfNpix;
-    stars[i].measure.crNsigma   = ps1data[i].crNsigma;
     stars[i].measure.extNsigma  = ps1data[i].extNsigma;
 
@@ -1463,4 +1456,5 @@
                         
     stars[i].measure.photFlags  = ps1data[i].flags;
+    stars[i].measure.photFlags2 = ps1data[i].flags2;
 
     // this is may optionally be replaced by the internal sequence (see FilterStars.c)
Index: /trunk/Ohana/src/addstar/src/mkcmf.c
===================================================================
--- /trunk/Ohana/src/addstar/src/mkcmf.c	(revision 37245)
+++ /trunk/Ohana/src/addstar/src/mkcmf.c	(revision 37246)
@@ -31,4 +31,6 @@
 static Coords coords;
 
+static char reserved[] =  "Reserved space.  This line can be used to add a new FITS card.";
+
 int main (int argc, char **argv) {
 
@@ -305,4 +307,9 @@
   PutCoords (&coords, &header);
   gfits_modify (&header, "EXTNAME",   "%s", 1, exthead);
+
+  int i;
+  for (i = 1; i < 32; i++) {
+    gfits_modify_alt (&header, "COMMENT", "%C", i, reserved);
+  }
 
   ftable.header = &theader;
Index: /trunk/Ohana/src/dvopsps/include/dvopsps.h
===================================================================
--- /trunk/Ohana/src/dvopsps/include/dvopsps.h	(revision 37245)
+++ /trunk/Ohana/src/dvopsps/include/dvopsps.h	(revision 37246)
@@ -9,19 +9,27 @@
 
 typedef struct {
-  int imageID;
-  unsigned int ippDetectID;
+  uint64_t objID;
   uint64_t detectID;
   uint64_t ippObjID;
-  uint64_t objID;
-  int      photcode;
-  unsigned int flags;
-  float zp;
-  float zpErr;
-  float airMass;
-  float expTime;
+  unsigned int ippDetectID;
+  int imageID;
+  int catID;
   double ra;
   double dec;
   float raErr;
   float decErr;
+  float zp;
+  float telluricExt;
+  float airmass;
+  float expTime;
+
+  float Mpsf;
+  float dMpsf;
+  float Mkron;
+  float dMkron;
+  float Map;
+  float dMap;
+
+  unsigned int flags;
 } Detections;
 
@@ -78,9 +86,10 @@
       
 int    insert_detections_mysql_commit     PROTO((IOBuffer *buffer, MYSQL *mysql));
-int    insert_detections_mysql_value      PROTO((IOBuffer *buffer, Average *average, Measure *measure));
+// int    insert_detections_mysql_value      PROTO((IOBuffer *buffer, Average *average, Measure *measure));
 int    insert_detections_mysql_init       PROTO((IOBuffer *buffer));
 
 int    insert_detections_mysql_array      PROTO((MYSQL *mysql, Detections *detections, int Ndetections));
 int    insert_detections_mysql_detvalue   PROTO((IOBuffer *buffer, Detections *detection));
+int    assign_detection_values            PROTO((Detections *detection, Measure *measure, Average *average));
 
 int    init_detections                    PROTO(());
Index: /trunk/Ohana/src/dvopsps/src/DetectionOps.c
===================================================================
--- /trunk/Ohana/src/dvopsps/src/DetectionOps.c	(revision 37245)
+++ /trunk/Ohana/src/dvopsps/src/DetectionOps.c	(revision 37246)
@@ -1,6 +1,3 @@
 # include "dvopsps.h"
-# define BZERO_INT16 1.0*0x8000
-# define BZERO_INT32 1.0*0x80000000
-# define BZERO_INT64 1.0*0x8000000000000000
 
 # define GET_COLUMN(OUT,NAME,TYPE)					\
@@ -49,19 +46,25 @@
  
   // need to create and assign to flat-field correction
-  GET_COLUMN(imageID     , "imageID",     int);
-  GET_COLUMN(ippDetectID , "ippDetectID", int);
+  GET_COLUMN(objID       , "objID",       int64_t);
   GET_COLUMN(detectID    , "detectID",    int64_t);
   GET_COLUMN(ippObjID    , "ippObjID",    int64_t);
-  GET_COLUMN(objID       , "objID",       int64_t);
-  GET_COLUMN(photcode    , "photcode",    int);
-  GET_COLUMN(flags       , "flags",       int);
-  GET_COLUMN(zp          , "zp",          float);
-  GET_COLUMN(zpErr       , "zpErr",       float);
-  GET_COLUMN(airMass     , "airMass",     float);
-  GET_COLUMN(expTime     , "expTime",     float);
+  GET_COLUMN(ippDetectID , "ippDetectID", int);
+  GET_COLUMN(imageID     , "imageID",     int);
+  GET_COLUMN(catID       , "catID",       int);
   GET_COLUMN(ra          , "ra",          double); // XXX signed vs unsigned?
   GET_COLUMN(dec         , "dec",         double);
   GET_COLUMN(raErr       , "raErr",       float);
   GET_COLUMN(decErr      , "decErr",      float);
+  GET_COLUMN(zp          , "zp",          float);
+  GET_COLUMN(telluricExt , "telluricExt", float);
+  GET_COLUMN(airmass     , "airmass",     float);
+  GET_COLUMN(expTime     , "expTime",     float);
+  GET_COLUMN(Mpsf        , "Mpsf",        float);
+  GET_COLUMN(dMpsf       , "dMpsf",       float);
+  GET_COLUMN(Mkron       , "Mkron",       float);
+  GET_COLUMN(dMkron      , "dMkron",      float);
+  GET_COLUMN(Map         , "Map",         float);
+  GET_COLUMN(dMap        , "dMap",        float);
+  GET_COLUMN(flags       , "flags",       int);
   gfits_free_header (&theader);
   gfits_free_table  (&ftable);
@@ -69,37 +72,49 @@
   ALLOCATE (detections, Detections, Nrow);
   for (i = 0; i < Nrow; i++) {
-    detections[i].imageID      = imageID[i];    
-    detections[i].ippDetectID  = ippDetectID[i];
+    detections[i].objID        = objID[i];      
     detections[i].detectID     = detectID[i];   
     detections[i].ippObjID     = ippObjID[i];   
-    detections[i].objID        = objID[i];      
-    detections[i].photcode     = photcode[i];      
-    detections[i].flags        = flags[i];      
-    detections[i].zp           = zp[i];         
-    detections[i].zpErr        = zpErr[i];      
-    detections[i].airMass      = airMass[i];    
-    detections[i].expTime      = expTime[i];    
+    detections[i].ippDetectID  = ippDetectID[i];
+    detections[i].imageID      = imageID[i];    
+    detections[i].catID        = catID[i];    
     detections[i].ra           = ra[i];         
     detections[i].dec          = dec[i];        
     detections[i].raErr        = raErr[i];      
     detections[i].decErr       = decErr[i];     
+    detections[i].zp           = zp[i];         
+    detections[i].telluricExt  = telluricExt[i];      
+    detections[i].airmass      = airmass[i];    
+    detections[i].expTime      = expTime[i];    
+    detections[i].Mpsf         = Mpsf[i];    
+    detections[i].dMpsf        = dMpsf[i];    
+    detections[i].Mkron        = Mkron[i];    
+    detections[i].dMkron       = dMkron[i];    
+    detections[i].Map          = Map[i];    
+    detections[i].dMap         = dMap[i];    
+    detections[i].flags        = flags[i];      
   }
   fprintf (stderr, "loaded data for %lld detections\n", (long long) Nrow);
 
-  free (imageID    );
-  free (ippDetectID);
+  free (objID      );
   free (detectID   );
   free (ippObjID   );
-  free (objID      );
-  free (photcode   );
-  free (flags      );
-  free (zp         );
-  free (zpErr      );
-  free (airMass    );
-  free (expTime    );
+  free (ippDetectID);
+  free (imageID    );
+  free (catID      );
   free (ra         );
   free (dec        );
   free (raErr      );
   free (decErr     );
+  free (zp         );
+  free (telluricExt);
+  free (airmass    );
+  free (expTime    );
+  free (Mpsf       );
+  free (dMpsf      );
+  free (Mkron      );
+  free (dMkron     );
+  free (Map        );
+  free (dMap       );
+  free (flags      );
 
   gfits_free_header (&header);
@@ -149,22 +164,25 @@
 
   // XXX need to get the bzero values right
-  gfits_define_bintable_column (&theader, "J", "imageID",     NULL, NULL, 1.0, BZERO_INT32);
-  gfits_define_bintable_column (&theader, "J", "ippDetectID", NULL, NULL, 1.0, BZERO_INT32);
+  gfits_define_bintable_column (&theader, "K", "objID",       NULL, NULL, 1.0, 0);
   gfits_define_bintable_column (&theader, "K", "detectID",    NULL, NULL, 1.0, 0);
   gfits_define_bintable_column (&theader, "K", "ippObjID",    NULL, NULL, 1.0, 0);
-  gfits_define_bintable_column (&theader, "K", "objID",       NULL, NULL, 1.0, 0);
-  // gfits_define_bintable_column (&theader, "K", "detectID",    NULL, NULL, 1.0, BZERO_INT64);
-  // gfits_define_bintable_column (&theader, "K", "ippObjID",    NULL, NULL, 1.0, BZERO_INT64);
-  // gfits_define_bintable_column (&theader, "K", "objID",       NULL, NULL, 1.0, BZERO_INT64);
-  gfits_define_bintable_column (&theader, "J", "photcode",    NULL, NULL, 1.0, 0.0);
-  gfits_define_bintable_column (&theader, "J", "flags",       NULL, NULL, 1.0, BZERO_INT32);
-  gfits_define_bintable_column (&theader, "E", "zp",          NULL, NULL, 1.0, 0.0);
-  gfits_define_bintable_column (&theader, "E", "zpErr",       NULL, NULL, 1.0, 0.0);
-  gfits_define_bintable_column (&theader, "E", "airMass",     NULL, NULL, 1.0, 0.0);
-  gfits_define_bintable_column (&theader, "E", "expTime",     NULL, NULL, 1.0, 0.0);
+  gfits_define_bintable_column (&theader, "J", "ippDetectID", NULL, NULL, 1.0, FT_BZERO_INT32);
+  gfits_define_bintable_column (&theader, "J", "imageID",     NULL, NULL, 1.0, FT_BZERO_INT32);
+  gfits_define_bintable_column (&theader, "J", "catID",       NULL, NULL, 1.0, FT_BZERO_INT32);
   gfits_define_bintable_column (&theader, "D", "ra",          NULL, NULL, 1.0, 0.0);
   gfits_define_bintable_column (&theader, "D", "dec",         NULL, NULL, 1.0, 0.0);
   gfits_define_bintable_column (&theader, "E", "raErr",       NULL, NULL, 1.0, 0.0);
   gfits_define_bintable_column (&theader, "E", "decErr",      NULL, NULL, 1.0, 0.0);
+  gfits_define_bintable_column (&theader, "E", "zp",          NULL, NULL, 1.0, 0.0);
+  gfits_define_bintable_column (&theader, "E", "telluricExt", NULL, NULL, 1.0, 0.0);
+  gfits_define_bintable_column (&theader, "E", "airmass",     NULL, NULL, 1.0, 0.0);
+  gfits_define_bintable_column (&theader, "E", "expTime",     NULL, NULL, 1.0, 0.0);
+  gfits_define_bintable_column (&theader, "E", "Mpsf",        NULL, NULL, 1.0, 0.0);
+  gfits_define_bintable_column (&theader, "E", "dMpsf",       NULL, NULL, 1.0, 0.0);
+  gfits_define_bintable_column (&theader, "E", "Mkron",       NULL, NULL, 1.0, 0.0);
+  gfits_define_bintable_column (&theader, "E", "dMkron",      NULL, NULL, 1.0, 0.0);
+  gfits_define_bintable_column (&theader, "E", "Map",         NULL, NULL, 1.0, 0.0);
+  gfits_define_bintable_column (&theader, "E", "dMap",        NULL, NULL, 1.0, 0.0);
+  gfits_define_bintable_column (&theader, "J", "flags",       NULL, NULL, 1.0, FT_BZERO_INT32);
 
   // generate the output array that carries the data
@@ -172,71 +190,95 @@
 
   // create intermediate storage arrays
-   int32_t   *imageID     ; ALLOCATE (imageID     ,   int32_t, Ndetections);
-  uint32_t   *ippDetectID ; ALLOCATE (ippDetectID ,  uint32_t, Ndetections);
+  uint64_t   *objID       ; ALLOCATE (objID       ,  uint64_t, Ndetections);
   uint64_t   *detectID    ; ALLOCATE (detectID    ,  uint64_t, Ndetections);
   uint64_t   *ippObjID    ; ALLOCATE (ippObjID    ,  uint64_t, Ndetections);
-  uint64_t   *objID       ; ALLOCATE (objID       ,  uint64_t, Ndetections);
-  int        *photcode    ; ALLOCATE (photcode    ,  int,      Ndetections);
-  uint32_t   *flags       ; ALLOCATE (flags       ,  uint32_t, Ndetections);
-  float      *zp          ; ALLOCATE (zp          ,  float,    Ndetections);
-  float      *zpErr       ; ALLOCATE (zpErr       ,  float,    Ndetections);
-  float      *airMass     ; ALLOCATE (airMass     ,  float,    Ndetections);
-  float      *expTime     ; ALLOCATE (expTime     ,  float,    Ndetections);
+  uint32_t   *ippDetectID ; ALLOCATE (ippDetectID ,  uint32_t, Ndetections);
+   int32_t   *imageID     ; ALLOCATE (imageID     ,   int32_t, Ndetections);
+   int32_t   *catID       ; ALLOCATE (catID       ,   int32_t, Ndetections);
   double     *ra          ; ALLOCATE (ra          ,  double,   Ndetections);
   double     *dec         ; ALLOCATE (dec         ,  double,   Ndetections);
   float      *raErr       ; ALLOCATE (raErr       ,  float,    Ndetections);
   float      *decErr      ; ALLOCATE (decErr      ,  float,    Ndetections);
+  float      *zp          ; ALLOCATE (zp          ,  float,    Ndetections);
+  float      *telluricExt ; ALLOCATE (telluricExt ,  float,    Ndetections);
+  float      *airmass     ; ALLOCATE (airmass     ,  float,    Ndetections);
+  float      *expTime     ; ALLOCATE (expTime     ,  float,    Ndetections);
+  float      *Mpsf        ; ALLOCATE (Mpsf        ,  float,    Ndetections);
+  float      *dMpsf       ; ALLOCATE (dMpsf       ,  float,    Ndetections);
+  float      *Mkron       ; ALLOCATE (Mkron       ,  float,    Ndetections);
+  float      *dMkron      ; ALLOCATE (dMkron      ,  float,    Ndetections);
+  float      *Map         ; ALLOCATE (Map         ,  float,    Ndetections);
+  float      *dMap        ; ALLOCATE (dMap        ,  float,    Ndetections);
+  uint32_t   *flags       ; ALLOCATE (flags       ,  uint32_t, Ndetections);
 
   // assign the storage arrays
   for (i = 0; i < Ndetections; i++) {
-    imageID[i]     = detections[i].imageID     ;
-    ippDetectID[i] = detections[i].ippDetectID ;
+    objID[i]       = detections[i].objID       ;
     detectID[i]    = detections[i].detectID    ;
     ippObjID[i]    = detections[i].ippObjID    ;
-    objID[i]       = detections[i].objID       ;
-    photcode[i]    = detections[i].photcode    ;
-    flags[i]       = detections[i].flags       ;
-    zp[i]          = detections[i].zp          ;
-    zpErr[i]       = detections[i].zpErr       ;
-    airMass[i]     = detections[i].airMass     ;
-    expTime[i]     = detections[i].expTime     ;
+    ippDetectID[i] = detections[i].ippDetectID ;
+    imageID[i]     = detections[i].imageID     ;
+    catID[i]       = detections[i].catID       ;
     ra[i]          = detections[i].ra          ;
     dec[i]         = detections[i].dec         ;
     raErr[i]       = detections[i].raErr       ;
     decErr[i]      = detections[i].decErr      ;
+    zp[i]          = detections[i].zp          ;
+    telluricExt[i] = detections[i].telluricExt ;
+    airmass[i]     = detections[i].airmass     ;
+    expTime[i]     = detections[i].expTime     ;
+    Mpsf[i]        = detections[i].Mpsf        ;
+    dMpsf[i]       = detections[i].dMpsf       ;
+    Mkron[i]       = detections[i].Mkron       ;
+    dMkron[i]      = detections[i].dMkron      ;
+    Map[i]         = detections[i].Map         ;
+    dMap[i]        = detections[i].dMap        ;
+    flags[i]       = detections[i].flags       ;
   }
 
   // add the columns to the output array
-  gfits_set_bintable_column (&theader, &ftable, "imageID",     imageID     , Ndetections);
-  gfits_set_bintable_column (&theader, &ftable, "ippDetectID", ippDetectID , Ndetections);
+  gfits_set_bintable_column (&theader, &ftable, "objID",       objID       , Ndetections);
   gfits_set_bintable_column (&theader, &ftable, "detectID",    detectID    , Ndetections);
   gfits_set_bintable_column (&theader, &ftable, "ippObjID",    ippObjID    , Ndetections);
-  gfits_set_bintable_column (&theader, &ftable, "objID",       objID       , Ndetections);
-  gfits_set_bintable_column (&theader, &ftable, "photcode",    photcode    , Ndetections);
-  gfits_set_bintable_column (&theader, &ftable, "flags",       flags       , Ndetections);
-  gfits_set_bintable_column (&theader, &ftable, "zp",          zp          , Ndetections);
-  gfits_set_bintable_column (&theader, &ftable, "zpErr",       zpErr       , Ndetections);
-  gfits_set_bintable_column (&theader, &ftable, "airMass",     airMass     , Ndetections);
-  gfits_set_bintable_column (&theader, &ftable, "expTime",     expTime     , Ndetections);
+  gfits_set_bintable_column (&theader, &ftable, "ippDetectID", ippDetectID , Ndetections);
+  gfits_set_bintable_column (&theader, &ftable, "imageID",     imageID     , Ndetections);
+  gfits_set_bintable_column (&theader, &ftable, "catID",       catID       , Ndetections);
   gfits_set_bintable_column (&theader, &ftable, "ra",          ra          , Ndetections);
   gfits_set_bintable_column (&theader, &ftable, "dec",         dec         , Ndetections);
   gfits_set_bintable_column (&theader, &ftable, "raErr",       raErr       , Ndetections);
   gfits_set_bintable_column (&theader, &ftable, "decErr",      decErr      , Ndetections);
-
-  free (imageID     );
-  free (ippDetectID );
+  gfits_set_bintable_column (&theader, &ftable, "zp",          zp          , Ndetections);
+  gfits_set_bintable_column (&theader, &ftable, "telluricExt", telluricExt , Ndetections);
+  gfits_set_bintable_column (&theader, &ftable, "airmass",     airmass     , Ndetections);
+  gfits_set_bintable_column (&theader, &ftable, "expTime",     expTime     , Ndetections);
+  gfits_set_bintable_column (&theader, &ftable, "Mpsf",        Mpsf        , Ndetections);
+  gfits_set_bintable_column (&theader, &ftable, "dMpsf",       dMpsf       , Ndetections);
+  gfits_set_bintable_column (&theader, &ftable, "Mkron",       Mkron       , Ndetections);
+  gfits_set_bintable_column (&theader, &ftable, "dMkron",      dMkron      , Ndetections);
+  gfits_set_bintable_column (&theader, &ftable, "Map",         Map         , Ndetections);
+  gfits_set_bintable_column (&theader, &ftable, "dMap",        dMap        , Ndetections);
+  gfits_set_bintable_column (&theader, &ftable, "flags",       flags       , Ndetections);
+
+  free (objID       );
   free (detectID    );
   free (ippObjID    );
-  free (objID       );
-  free (photcode    );
-  free (flags       );
-  free (zp          );
-  free (zpErr       );
-  free (airMass     );
-  free (expTime     );
+  free (ippDetectID );
+  free (imageID     );
+  free (catID       );
   free (ra          );
   free (dec         );
   free (raErr       );
   free (decErr      );
+  free (zp          );
+  free (telluricExt );
+  free (airmass     );
+  free (expTime     );
+  free (Mpsf        );
+  free (dMpsf       );
+  free (Mkron       );
+  free (dMkron      );
+  free (Map         );
+  free (dMap        );
+  free (flags       );
 
   gfits_fwrite_Theader (f, &theader);
Index: /trunk/Ohana/src/dvopsps/src/insert_detections_dvopsps.c
===================================================================
--- /trunk/Ohana/src/dvopsps/src/insert_detections_dvopsps.c	(revision 37245)
+++ /trunk/Ohana/src/dvopsps/src/insert_detections_dvopsps.c	(revision 37246)
@@ -281,24 +281,2 @@
 }
 
-# define PRINT_FLOAT(BUFFER,FIELD,FORMAT)		  \
-  if (!isfinite(FIELD)) PrintIOBuffer (BUFFER, "NULL, "); \
-  else PrintIOBuffer (BUFFER, FORMAT, FIELD); 
-
-int insert_detections_mysql_detvalue (IOBuffer *buffer, Detections *detection) {
-
-  PrintIOBuffer (buffer, "(%d, ", detection->imageID);	  // imageID
-  PrintIOBuffer (buffer, "%u, ", detection->ippDetectID); // ippDetectID
-  PrintIOBuffer (buffer, "%lu, ", detection->detectID);	  // detectID
-  PrintIOBuffer (buffer, "%lu, ", detection->ippObjID);	  // ippObjID
-  PrintIOBuffer (buffer, "%lu, ", detection->objID);	  // objID
-  PrintIOBuffer (buffer, "%u, ", detection->flags);	  // flags
-  PRINT_FLOAT(buffer, detection->zp,      "%.6f, ");
-  PRINT_FLOAT(buffer, detection->zpErr,   "%.6f, ");
-  PRINT_FLOAT(buffer, detection->airMass, "%.6f, ");
-  PRINT_FLOAT(buffer, detection->expTime, "%.6f, ");
-  PRINT_FLOAT(buffer, detection->ra,      "%.8f, ");
-  PRINT_FLOAT(buffer, detection->dec,     "%.8f, ");
-  PRINT_FLOAT(buffer, detection->raErr,   "%.6f, ");
-  PRINT_FLOAT(buffer, detection->decErr,  "%.6f),\n");
-  return TRUE;
-}
Index: /trunk/Ohana/src/dvopsps/src/insert_detections_dvopsps_catalog.c
===================================================================
--- /trunk/Ohana/src/dvopsps/src/insert_detections_dvopsps_catalog.c	(revision 37245)
+++ /trunk/Ohana/src/dvopsps/src/insert_detections_dvopsps_catalog.c	(revision 37246)
@@ -6,4 +6,6 @@
 Detections *detections = NULL;
 
+static float ZeroPoint = 25.0;
+
 int init_detections () {
   NDETECTIONS = 1000;
@@ -15,4 +17,6 @@
 
   off_t i, j;
+
+  ZeroPoint = GetZeroPoint();
 
   int missingID = 0;
@@ -47,25 +51,7 @@
       if (measure->photcode >=  PHOTCODE_END) continue;
 
-      PhotCode *code = GetPhotcodebyCode(measure->photcode);
-
-      detections[Ndetections].imageID     = measure->imageID;    // imageID
-      detections[Ndetections].ippDetectID = measure->detID;   // ippDetectID
-      detections[Ndetections].detectID    = measure->extID;   // detectID
-      detections[Ndetections].ippObjID    = ((uint64_t)average->catID * 1000000000) + (uint64_t)average->objID; // ippObjID
-      // NOTE: this is better, but the above is the current ippToPsps value
-      // detections[Ndetections]. ((uint64_t)average->catID << 32) + (uint64_t)average->objID; // ippObjID
-      detections[Ndetections].objID	   = average->extID;   // objID
-      detections[Ndetections].photcode	   = measure->photcode;   // photcode
-      detections[Ndetections].flags 	   = measure->dbFlags;  // flags
-      detections[Ndetections].zp 	   = code->C * 0.001 + code->K * (measure->airmass - 1) - measure->Mcal;   // zp
-      detections[Ndetections].zpErr 	   = measure->dMcal;    // zpErr
-      detections[Ndetections].airMass      = measure->airmass;
-      detections[Ndetections].expTime      = pow(10.0, 0.4 * measure->dt);    // expTime
-      detections[Ndetections].ra 	   = measure->R;    // ra
-      detections[Ndetections].dec 	   = measure->D;    // dec
-      detections[Ndetections].raErr 	   = measure->dXccd * 0.01 * fabs(measure->pltscale); // estimate of raErr
-      detections[Ndetections].decErr	   = measure->dYccd * 0.01 * fabs(measure->pltscale); // estimate of decErr
-
+      assign_detection_values (&detections[Ndetections], measure, average);
       Ndetections ++;
+
       myAssert (Ndetections <= NDETECTIONS, "programming error");
     }
@@ -109,4 +95,6 @@
 
   off_t found = 0;
+
+  ZeroPoint = GetZeroPoint();
 
   INITTIME;
@@ -143,5 +131,8 @@
 
       // XXX check return status
-      if (!insert_detections_mysql_value (&buffer, &average[i], &measure[Nmeas])) {
+      Detections detection;
+      assign_detection_values (&detection, &measure[Nmeas], &average[i]);
+
+      if (!insert_detections_mysql_detvalue (&buffer, &detection)) {
 	fprintf (stderr, "failure to insert detections in mysql\n");
 	status = FALSE;
@@ -194,46 +185,11 @@
   }
 
-  // PrintIOBuffer (buffer, "INSERT INTO dvoDetectionFull (imageID, ippDetectID, detectID, ippObjID, objID, photcode, flags, zp, zpErr, airMass, expTime, ra, dec_, raErr, decErr) VALUES \n");
-  PrintIOBuffer (buffer, "INSERT INTO dvoDetectionFull (imageID, ippDetectID, detectID, ippObjID, objID, flags, zp, zpErr, airMass, expTime, ra, dec_, raErr, decErr) VALUES \n");
-
-  return TRUE;
-}
-
-# define PRINT_FLOAT(BUFFER,FIELD,FORMAT)		  \
-  if (isinf(FIELD) || isnan(FIELD)) PrintIOBuffer (BUFFER, "NULL, ");	\
-  else PrintIOBuffer (BUFFER, FORMAT, FIELD); 
-
-int insert_detections_mysql_value (IOBuffer *buffer, Average *average, Measure *measure) {
-
-  PhotCode *code = GetPhotcodebyCode(measure->photcode);
-  PrintIOBuffer (buffer, "(%d, ", measure->imageID);	  // imageID
-  PrintIOBuffer (buffer, "%u, ", measure->detID); // ippDetectID
-  PrintIOBuffer (buffer, "%lu, ", measure->extID);	  // detectID
-  PrintIOBuffer (buffer, "%lu, ", ((uint64_t)average->catID * 1000000000) + (uint64_t)average->objID);	  // ippObjID
-  // NOTE: the following is better, but the above is the current ippToPsps value
-  // ((uint64_t)average->catID << 32) + (uint64_t)average->objID, // ippObjID
-  PrintIOBuffer (buffer, "%lu, ", average->extID);	  // objID
-  // XXX PrintIOBuffer (buffer, "%d, ", measure->photcode);	  // photcode
-  PrintIOBuffer (buffer, "%u, ", measure->dbFlags);	  // flags
-
-  float zp = code->C * 0.001 + code->K * (measure->airmass - 1) - measure->Mcal;
-  float exptime = pow(10.0, 0.4 * measure->dt);
-  double ra  = measure->R;
-  double dec = measure->D;
-  double dR = measure->dXccd * 0.01 * fabs(measure->pltscale);
-  double dD = measure->dYccd * 0.01 * fabs(measure->pltscale);
-
-  PRINT_FLOAT(buffer, zp,               "%.6f, ");
-  PRINT_FLOAT(buffer, measure->dMcal,   "%.6f, ");
-  PRINT_FLOAT(buffer, measure->airmass, "%.6f, ");
-  PRINT_FLOAT(buffer, exptime,          "%.6f, ");
-  PRINT_FLOAT(buffer, ra,               "%.8f, ");
-  PRINT_FLOAT(buffer, dec,              "%.8f, ");
-  PRINT_FLOAT(buffer, dR,               "%.6f, ");
-  PRINT_FLOAT(buffer, dD,               "%.6f),\n");
-  
-  return TRUE;
-}
-    
+  PrintIOBuffer (buffer, "INSERT INTO dvoDetectionFull (objID, detectID, ippObjID, ippDetectID, imageID, catID, ");
+  PrintIOBuffer (buffer, "ra, dec_, raErr, decErr, zp, telluricExt, airmass, expTime, ");
+  PrintIOBuffer (buffer, "Mpsf, dMpsf, Mkron, dMkron, Map, dMap, flags) VALUES \n");
+
+  return TRUE;
+}
+
 int insert_detections_mysql_commit (IOBuffer *buffer, MYSQL *mysql) {
 
@@ -270,2 +226,111 @@
   return status;
 }
+
+# define PRINT_FLOAT(BUFFER,FIELD,FORMAT)		  \
+  if (!isfinite(FIELD)) PrintIOBuffer (BUFFER, "NULL, "); \
+  else PrintIOBuffer (BUFFER, FORMAT, FIELD); 
+
+int insert_detections_mysql_detvalue (IOBuffer *buffer, Detections *detection) {
+
+  PrintIOBuffer (buffer, "(%lu, ", detection->objID);	    // objID
+  PrintIOBuffer (buffer,  "%lu, ", detection->detectID);    // detectID
+  PrintIOBuffer (buffer,  "%lu, ", detection->ippObjID);    // ippObjID
+  PrintIOBuffer (buffer,  "%u,  ", detection->ippDetectID); // ippDetectID
+  PrintIOBuffer (buffer,  "%d,  ", detection->imageID);	    // imageID
+  PrintIOBuffer (buffer,  "%d,  ", detection->catID);	    // DVO Catalog ID
+
+  PRINT_FLOAT(buffer, detection->ra,          "%.8f, ");
+  PRINT_FLOAT(buffer, detection->dec,         "%.8f, ");
+  PRINT_FLOAT(buffer, detection->raErr,       "%.6f, ");
+  PRINT_FLOAT(buffer, detection->decErr,      "%.6f, ");
+  PRINT_FLOAT(buffer, detection->zp,          "%.6f, ");
+  PRINT_FLOAT(buffer, detection->telluricExt, "%.6f, ");
+  PRINT_FLOAT(buffer, detection->airmass,     "%.6f, ");
+  PRINT_FLOAT(buffer, detection->expTime,     "%.6f, ");
+
+  PRINT_FLOAT(buffer, detection->Mpsf,        "%.6f, ");
+  PRINT_FLOAT(buffer, detection->dMpsf,       "%.6f, ");
+  PRINT_FLOAT(buffer, detection->Mkron,       "%.6f, ");
+  PRINT_FLOAT(buffer, detection->dMkron,      "%.6f, ");
+  PRINT_FLOAT(buffer, detection->Map,         "%.6f, ");
+  PRINT_FLOAT(buffer, detection->dMap,        "%.6f, ");
+
+  PrintIOBuffer (buffer, "%u),\n", detection->flags);	  // flags
+  return TRUE;
+}
+
+float getMagFromValueOrFlux (float flux, float mag, float zp) {
+
+  // first, if mag is finite, use mag:
+  if (isfinite(mag)) {
+    return (zp + mag - ZeroPoint);
+  }
+
+  if (isfinite(flux) && (flux > 0.0)) {
+    fprintf (stderr, "how did we get here?\n");
+    return (zp - 2.5*log10(flux));
+  }
+
+  if (isfinite(flux) && (flux <= 0.0)) {
+    return (NAN);
+  }
+  return (NAN);
+}
+
+float getdMagFromValueOrFlux (float flux, float dflux, float dmag) {
+
+  // first, if mag is finite, use mag:
+  if (isfinite(dmag)) {
+    return (dmag);
+  }
+
+  if (isfinite(flux) && isfinite(dflux)) {
+    return (dflux / fabs(flux));
+  }
+  return (NAN);
+}
+
+int assign_detection_values (Detections *detection, Measure *measure, Average *average) {
+
+  PhotCode *code = GetPhotcodebyCode(measure->photcode);
+
+  uint64_t ippObjID = ((uint64_t)average->catID << 32) + (uint64_t)average->objID; // ippObjID
+
+  float nominalZP   = code->C * 0.001 + code->K * (measure->airmass - 1);
+  float zp          = nominalZP - measure->Mcal;
+  float telluricExt = - measure->Mcal;
+  float expTime     = pow(10.0, 0.4 * measure->dt);
+  float airmass     = measure->airmass;
+
+  detection->objID	  = average->extID;   // objID
+  detection->detectID     = measure->extID;   // detectID
+  detection->ippObjID     = ippObjID;	      // ippObjID
+  detection->ippDetectID  = measure->detID;   // ippDetectID
+  detection->imageID      = measure->imageID; // imageID
+  detection->catID        = measure->catID;   // catID
+
+  detection->ra 	  = measure->R;    // ra
+  detection->dec 	  = measure->D;    // dec
+  detection->raErr 	  = measure->dXccd * 0.01 * fabs(measure->pltscale); // estimate of raErr
+  detection->decErr	  = measure->dYccd * 0.01 * fabs(measure->pltscale); // estimate of decErr
+
+  detection->zp 	  = zp;
+  detection->telluricExt  = telluricExt;
+  detection->airmass      = airmass;
+  detection->expTime      = expTime;
+
+  // XXX clean this up with dvo_photcode_ops calls:
+  // if (isfinite(measure->FluxPSF) && (measure->FluxPSF < 0.0)) 
+  detection->Mpsf  = getMagFromValueOrFlux (measure->FluxPSF,  measure->M,     zp);
+  detection->Mkron = getMagFromValueOrFlux (measure->FluxKron, measure->Mkron, zp);
+  detection->Map   = getMagFromValueOrFlux (measure->FluxAp,   measure->Map,   zp);
+
+  detection->dMpsf  = getdMagFromValueOrFlux (measure->FluxPSF,  measure->dFluxPSF,  measure->dM);
+  detection->dMkron = getdMagFromValueOrFlux (measure->FluxKron, measure->dFluxKron, measure->dMkron);
+  detection->dMap   = getdMagFromValueOrFlux (measure->FluxAp,   measure->dFluxAp,   measure->dMap);
+
+  detection->flags  = measure->dbFlags;  // flags
+
+  return TRUE;
+}
+
Index: /trunk/Ohana/src/dvopsps/src/insert_objects_dvopsps_catalog.c
===================================================================
--- /trunk/Ohana/src/dvopsps/src/insert_objects_dvopsps_catalog.c	(revision 37245)
+++ /trunk/Ohana/src/dvopsps/src/insert_objects_dvopsps_catalog.c	(revision 37246)
@@ -88,37 +88,47 @@
   bzero (buffer.buffer, buffer.Nalloc);
 
+  // Only send the necessary fields (eg, do not sent parallax and pm)
   PrintIOBuffer (&buffer, "CREATE TABLE %s_cpt ("
-		 "RA DOUBLE,  "          
-		 "DEC_ DOUBLE,  "         
-		 "RA_ERR FLOAT,  "      
-		 "DEC_ERR FLOAT,  "     
-		 "U_RA FLOAT,  "        
-		 "U_DEC FLOAT,  "       
-		 "V_RA_ERR FLOAT,  "    
-		 "V_DEC_ERR FLOAT,  "   
-		 "PAR FLOAT,  "         
-		 "PAR_ERR FLOAT,  "     
-		 "CHISQ_POS FLOAT,  "   
-		 "CHISQ_PM FLOAT,  "    
-		 "CHISQ_PAP FLOAT,  "   
-		 "MEAN_EPOCH INT,  "  
-		 "TIME_RANGE INT,  "  
-		 "PSF_QF FLOAT, "      
-		 "PSF_QF_PERF FLOAT,  " 
-		 "STARGAL_SEP FLOAT,  " 
-		 "NUMBER_POS SMALLINT,  "  
-		 "NMEASURE SMALLINT,  "    
-		 "NMISSING SMALLINT,  "    
-		 "NEXTEND SMALLINT,  "     
-		 "OFF_MEASURE INT,  " 
-		 "OFF_MISSING INT,  " 
-		 "OFF_EXTEND INT,  "  
-		 "FLAGS INT,  "       
-		 "PHOTFLAGS_U INT,  " 
-		 "PHOTFLAGS_L INT,  " 
-		 "OBJ_ID INT,  "      
-		 "CAT_ID INT,  "      
-		 "EXT_ID BIGINT"
+		 "EXT_ID        BIGINT,   "
+		 "OBJ_ID        INT,      "      
+		 "CAT_ID        INT,      " 
+		 "TESS_ID       TINYINT,  " 
+		 "PROJECTION_ID SMALLINT, " 
+		 "SKYCELL_ID    TINYINT,  " 
+		 "RA_STK        DOUBLE,   "          
+		 "DEC_STK       DOUBLE,   "         
+		 "RA_STK_ERR    FLOAT,    "      
+		 "DEC_STK_ERR   FLOAT,    "     
+		 "RA_MEAN       DOUBLE,   "          
+		 "DEC_MEAN      DOUBLE,   "         
+		 "RA_ERR        FLOAT,    "      
+		 "DEC_ERR       FLOAT,    "     
+		 "CHISQ_POS     FLOAT,    "   
+		 "CHISQ_PM      FLOAT,    "    
+		 "CHISQ_PAR     FLOAT,    "   
+		 "FLAGS         INT       "       
 		 ")\n", basename);
+
+// skipping these cpt fields:
+// 		 "U_RA        FLOAT,  "        
+// 		 "U_DEC       FLOAT,  "       
+// 		 "V_RA_ERR    FLOAT,  "    
+// 		 "V_DEC_ERR   FLOAT,  "   
+// 		 "PAR         FLOAT,  "         
+// 		 "PAR_ERR     FLOAT,  "     
+//		 "OFF_MEASURE INT,  " 
+//		 "OFF_MISSING INT,  " 
+//		 "OFF_EXTEND  INT,  "  
+//		 "PSF_QF      FLOAT, "      
+//		 "PSF_QF_PERF FLOAT,  " 
+//		 "STARGAL_SEP FLOAT,  " 
+//		 "NUMBER_POS  SMALLINT,  "  
+//		 "NMEASURE    SMALLINT,  "    
+//		 "NMISSING    SMALLINT,  "    
+//		 "NEXTEND     SMALLINT,  "     
+//		 "PHOTFLAGS_U INT,  " 
+//		 "PHOTFLAGS_L INT,  " 
+
+
 
   if (DEBUG) fprintf (stderr, "%s\n", buffer.buffer);
@@ -145,28 +155,23 @@
 
   PrintIOBuffer (&buffer, "CREATE TABLE %s_cps ("
-		 "MAG FLOAT,  "             
-		 "MAG_AP FLOAT,  "             
-		 "MAG_KRON FLOAT,  "        
-		 "MAG_KRON_ERR FLOAT,  "    
-		 "MAG_ERR FLOAT,  "         
-		 "MAG_CHI FLOAT,  "         
-		 "STACK_PSF_MAG FLOAT,  "        
-		 "STACK_PSF_MAG_ERR FLOAT,  "    
-		 "STACK_KRON_MAG FLOAT,  "       
-		 "STACK_KRON_MAG_ERR FLOAT,  "   
-		 "FLAGS INT,  "           
-		 "NCODE SMALLINT,  "           
-		 "NUSED SMALLINT,  "           
-		 "MAG_20 SMALLINT,  "          
-		 "MAG_80 SMALLINT,  "          
-		 "UBERCAL_DIST SMALLINT,  "    
-		 "MAG_STDEV SMALLINT,  "       
-		 "STACK_DETECT_ID BIGINT" 
+		 "MAG            FLOAT,  "             
+		 "MAG_ERR        FLOAT,  "         
+		 "MAG_STDEV      FLOAT,  "         
+		 "MAG_MIN        FLOAT,  "         
+		 "MAG_MAX        FLOAT,  "         
+		 "NUSED          SMALLINT,  "           
+		 "MAG_KRON       FLOAT,  "        
+		 "MAG_KRON_ERR   FLOAT,  "    
+		 "MAG_KRON_STDEV FLOAT,  "    
+		 "NUSED_KRON     SMALLINT,  "    
+		 "MAG_AP         FLOAT,  "             
+		 "MAG_AP_ERR     FLOAT,  "             
+		 "MAG_AP_STDEV   FLOAT,  "             
+		 "NUSED_AP       SMALLINT,  "    
+		 "NCODE          SMALLINT,  "           
+		 "NSTACK_DET     SMALLINT,  "           
+		 "PSF_QF_PERF_MAX FLOAT, "           
+		 "FLAGS          INT "           
 		 ")\n", basename);
-
- // 		 "FLUX_PSF FLOAT,  "        
- //  		 "FLUX_PSF_ERR FLOAT,  "    
- //  		 "FLUX_KRON FLOAT,  "       
- //  		 "FLUX_KRON_ERR FLOAT,  "   
 
   if (DEBUG) fprintf (stderr, "%s\n", buffer.buffer);
@@ -191,35 +196,22 @@
 
   PrintIOBuffer (ave_buffer, "INSERT INTO %s_cpt ("
-		 "RA, "          
-		 "DEC_, "         
-		 "RA_ERR, "      
-		 "DEC_ERR, "     
-		 "U_RA, "        
-		 "U_DEC, "       
-		 "V_RA_ERR, "    
-		 "V_DEC_ERR, "   
-		 "PAR, "         
-		 "PAR_ERR, "     
-		 "CHISQ_POS, "   
-		 "CHISQ_PM, "    
-		 "CHISQ_PAP, "   
-		 "MEAN_EPOCH, "  
-		 "TIME_RANGE, "  
-		 "PSF_QF, "      
-		 "PSF_QF_PERF, " 
-		 "STARGAL_SEP, " 
-		 "NUMBER_POS, "  
-		 "NMEASURE, "    
-		 "NMISSING, "    
-		 "NEXTEND, "     
-		 "OFF_MEASURE, " 
-		 "OFF_MISSING, " 
-		 "OFF_EXTEND, "  
-		 "FLAGS, "       
-		 "PHOTFLAGS_U, " 
-		 "PHOTFLAGS_L, " 
-		 "OBJ_ID, "      
-		 "CAT_ID, "      
-		 "EXT_ID"
+		 "EXT_ID,        "
+		 "OBJ_ID,        "      
+		 "CAT_ID,        "      
+		 "TESS_ID,       "      
+		 "PROJECTION_ID, "      
+		 "SKYCELL_ID,    "      
+		 "RA_STK,        "          
+		 "DEC_STK,       "         
+		 "RA_STK_ERR,    "      
+		 "DEC_STK_ERR,   "     
+		 "RA_MEAN,       "          
+		 "DEC_MEAN,      "         
+		 "RA_ERR,        "      
+		 "DEC_ERR,       "     
+		 "CHISQ_POS,     "   
+		 "CHISQ_PM,      "    
+		 "CHISQ_PAR,     "   
+		 "FLAGS          "       
 		 ") VALUES \n", basename);
 
@@ -230,21 +222,24 @@
   PrintIOBuffer (sec_buffer, "INSERT INTO %s_cps ("
 		 "MAG, "             
-		 "MAG_AP, "             
+		 "MAG_ERR, "         
+		 "MAG_STDEV, "       
+		 "MAG_MIN, "          
+		 "MAG_MAX, "          
+		 "NUSED, "           
+
 		 "MAG_KRON, "        
 		 "MAG_KRON_ERR, "    
-		 "MAG_ERR, "         
-		 "MAG_CHI, "         
-		 "STACK_PSF_MAG, "        
-		 "STACK_PSF_MAG_ERR, "    
-		 "STACK_KRON_MAG, "       
-		 "STACK_KRON_MAG_ERR, "   
-		 "FLAGS, "           
+		 "MAG_KRON_STDEV, "    
+		 "NUSED_KRON, "           
+
+		 "MAG_AP, "             
+		 "MAG_AP_ERR, "             
+		 "MAG_AP_STDEV, "             
+		 "NUSED_AP, "           
+
 		 "NCODE, "           
-		 "NUSED, "           
-		 "MAG_20, "          
-		 "MAG_80, "          
-		 "UBERCAL_DIST, "    
-		 "MAG_STDEV, "       
-		 "STACK_DETECT_ID " 
+		 "NSTACK_DET,  "           
+		 "PSF_QF_PERF_MAX, "           
+		 "FLAGS "           
 		 ") VALUES \n", basename);
   return TRUE;
@@ -261,96 +256,85 @@
 // XXX this bit could/should be autocoded...
   PrintIOBuffer (ave_buffer, " (");
+  PrintIOBuffer (ave_buffer, "%lu, ", average->extID);          
+  PrintIOBuffer (ave_buffer, "%u,  ", average->objID);          
+  PrintIOBuffer (ave_buffer, "%u,  ", average->catID);          
+
+  PrintIOBuffer (ave_buffer, "%hhd, ", average->tessID);          
+  PrintIOBuffer (ave_buffer, "%hd,  ", average->projectionID);          
+  PrintIOBuffer (ave_buffer, "%hhd, ", average->skycellID);          
+
+  PRINT_FLOAT(ave_buffer, average->Rstk,     "%.8f, ");  // 0.036 mas precision 
+  PRINT_FLOAT(ave_buffer, average->Dstk,     "%.8f, ");  // 0.036 mas precision 
+  PRINT_FLOAT(ave_buffer, average->dRstk,    "%.5f, ");  // 0.010 mas precision
+  PRINT_FLOAT(ave_buffer, average->dDstk,    "%.5f, ");  // 0.010 mas precision
+
   PRINT_FLOAT(ave_buffer, average->R,  	     "%.8f, ");  // 0.036 mas precision 
   PRINT_FLOAT(ave_buffer, average->D,  	     "%.8f, ");  // 0.036 mas precision 
   PRINT_FLOAT(ave_buffer, average->dR, 	     "%.5f, ");  // 0.010 mas precision
   PRINT_FLOAT(ave_buffer, average->dD, 	     "%.5f, ");  // 0.010 mas precision
-  PRINT_FLOAT(ave_buffer, average->uR, 	     "%.5f, ");  // 0.010 mas/yr precision
-  PRINT_FLOAT(ave_buffer, average->uD, 	     "%.5f, ");
-  PRINT_FLOAT(ave_buffer, average->duR,      "%.5f, ");
-  PRINT_FLOAT(ave_buffer, average->duD,      "%.5f, ");
-  PRINT_FLOAT(ave_buffer, average->P,        "%.5f, ");
-  PRINT_FLOAT(ave_buffer, average->dP,       "%.5f, ");
+
   PRINT_FLOAT(ave_buffer, average->ChiSqAve, "%.4f, ");
   PRINT_FLOAT(ave_buffer, average->ChiSqPM,  "%.4f, ");
   PRINT_FLOAT(ave_buffer, average->ChiSqPar, "%.4f, ");
-  PrintIOBuffer (ave_buffer, "%d, ",  average->Tmean);          
-  PrintIOBuffer (ave_buffer, "%d, ",  average->Trange);         
-  PRINT_FLOAT(ave_buffer, average->psfQF,     "%.3f, ");
-  PRINT_FLOAT(ave_buffer, average->psfQFperf, "%.3f, ");
-  PRINT_FLOAT(ave_buffer, average->stargal,   "%.3f, ");
-  PrintIOBuffer (ave_buffer, "%hu, ", average->Npos);           
-  PrintIOBuffer (ave_buffer, "%hu, ", average->Nmeasure);       
-  PrintIOBuffer (ave_buffer, "%hu, ", average->Nmissing);       
-  PrintIOBuffer (ave_buffer, "%hu, ", average->Nextend);        
-  PrintIOBuffer (ave_buffer, "%d, ",  average->measureOffset);  
-  PrintIOBuffer (ave_buffer, "%d, ",  average->missingOffset);  
-  PrintIOBuffer (ave_buffer, "%d, ",  0); // was : average->extendOffset);   
-  PrintIOBuffer (ave_buffer, "%u, ",  average->flags);          
-  PrintIOBuffer (ave_buffer, "%u, ",  average->photFlagsUpper); 
-  PrintIOBuffer (ave_buffer, "%u, ",  average->photFlagsLower); 
-  PrintIOBuffer (ave_buffer, "%u, ",  average->objID);          
-  PrintIOBuffer (ave_buffer, "%u, ",  average->catID);          
-  PrintIOBuffer (ave_buffer, "%lu",   average->extID);          
+
+  PrintIOBuffer (ave_buffer, "%u ",  average->flags);          
+
   PrintIOBuffer (ave_buffer, "),\n");
 
+  // XXX what rules for keeping or NAN-ing various mags?
   for (i = 0; i < Nsecfilt; i++) {
     float meanPSFMag    = -999.0;
     float meanPSFMagErr = -999.0;
+    float meanPSFMagStd = -999.0;
+    float meanPSFMagMin = -999.0;
+    float meanPSFMagMax = -999.0;
     if (isfinite(secfilt->dM) && isfinite(secfilt->M)) {
-      meanPSFMag = secfilt->M;
+      meanPSFMag    = secfilt->M;
       meanPSFMagErr = secfilt->dM;
+      meanPSFMagStd = secfilt->Mstdev;
+      meanPSFMagMin = secfilt->Mmin;
+      meanPSFMagMax = secfilt->Mmax;
     }
 
     float meanKronMag    = -999.0;
     float meanKronMagErr = -999.0;
+    float meanKronMagStd = -999.0;
     if (isfinite(secfilt->dMkron) && isfinite(secfilt->Mkron) && (secfilt->dMkron < 0.333)) {
-      meanKronMag = secfilt->Mkron;
+      meanKronMag    = secfilt->Mkron;
       meanKronMagErr = secfilt->dMkron;
+      meanKronMagStd = secfilt->sMkron;
     }
 
     float meanApMag    = -999.0;
-    if (isfinite(secfilt->Map)) {
-      meanApMag = secfilt->Map;
-    }
-
-    float stackPSFMag    = -999.0;
-    float stackPSFMagErr = -999.0;
-    if (isfinite(secfilt->dFpsfStk) && isfinite(secfilt->FpsfStk) && (secfilt->dFpsfStk > 0.0)) {
-      float SN = secfilt->FpsfStk / secfilt->dFpsfStk;
-      if (SN > 3.0) {
-	stackPSFMag = -2.5 * log10(secfilt->FpsfStk) + 8.9;
-	stackPSFMagErr = secfilt->dFpsfStk / secfilt->FpsfStk;
-      }
-    }
-
-    float stackKronMag    = -999.0;
-    float stackKronMagErr = -999.0;
-    if (isfinite(secfilt->dFkronStk) && isfinite(secfilt->FkronStk) && (secfilt->dFkronStk > 0.0)) {
-      float SN = secfilt->FkronStk / secfilt->dFkronStk;
-      if (SN > 3.0) {
-	stackKronMag = -2.5 * log10(secfilt->FkronStk) + 8.9;
-	stackKronMagErr = secfilt->dFkronStk / secfilt->FkronStk;
-      }
+    float meanApMagErr = -999.0;
+    float meanApMagStd = -999.0;
+    if (isfinite(secfilt->dMap) && isfinite(secfilt->Map)) {
+      meanApMag    = secfilt->Map;
+      meanApMagErr = secfilt->dMap;
+      meanApMagStd = secfilt->sMap;
     }
 
     PrintIOBuffer (sec_buffer, " (");
     PRINT_FLOAT(sec_buffer, meanPSFMag,      "%.6f, "); // umag precision
-    PRINT_FLOAT(sec_buffer, meanApMag,       "%.6f, "); // umag precision
+    PRINT_FLOAT(sec_buffer, meanPSFMagErr,   "%.6f, "); // umag precision
+    PRINT_FLOAT(sec_buffer, meanPSFMagStd,   "%.6f, "); // umag precision
+    PRINT_FLOAT(sec_buffer, meanPSFMagMin,   "%.6f, "); // umag precision
+    PRINT_FLOAT(sec_buffer, meanPSFMagMax,   "%.6f, "); // umag precision
+    PrintIOBuffer (sec_buffer, "%hd,  ", secfilt->Nused);        
+
     PRINT_FLOAT(sec_buffer, meanKronMag,     "%.6f, "); // umag precision
     PRINT_FLOAT(sec_buffer, meanKronMagErr,  "%.6f, "); // umag precision
-    PRINT_FLOAT(sec_buffer, meanPSFMagErr,   "%.6f, "); // umag precision
-    PRINT_FLOAT(sec_buffer, secfilt->Mchisq, "%.6f, ");
-    PRINT_FLOAT(sec_buffer, stackPSFMag,     "%.6f, "); // umag precision
-    PRINT_FLOAT(sec_buffer, stackPSFMagErr,  "%.6f, "); // umag precision
-    PRINT_FLOAT(sec_buffer, stackKronMag,    "%.6f, "); // umag precision
-    PRINT_FLOAT(sec_buffer, stackKronMagErr, "%.6f, "); // 0.36 umag precision
-    PrintIOBuffer (sec_buffer, "%u,   ", secfilt->flags);       
+    PRINT_FLOAT(sec_buffer, meanKronMagStd,  "%.6f, "); // umag precision
+    PrintIOBuffer (sec_buffer, "%hd,  ", secfilt->NusedKron);        
+
+    PRINT_FLOAT(sec_buffer, meanApMag,     "%.6f, "); // umag precision
+    PRINT_FLOAT(sec_buffer, meanApMagErr,  "%.6f, "); // umag precision
+    PRINT_FLOAT(sec_buffer, meanApMagStd,  "%.6f, "); // umag precision
+    PrintIOBuffer (sec_buffer, "%hd,  ", secfilt->NusedAp);        
     PrintIOBuffer (sec_buffer, "%hd,  ", secfilt->Ncode);        
-    PrintIOBuffer (sec_buffer, "%hd,  ", secfilt->Nused);        
-    PrintIOBuffer (sec_buffer, "%.6f, ", secfilt->Mmin);         
-    PrintIOBuffer (sec_buffer, "%.6f, ", secfilt->Mmax);         
-    PrintIOBuffer (sec_buffer, "%hd, ", secfilt->ubercalDist);  
-    PrintIOBuffer (sec_buffer, "%.6f, ", secfilt->Mstdev);       
-    PrintIOBuffer (sec_buffer, "%lu  ", 0L); // secfilt->stackDetectID
+    PrintIOBuffer (sec_buffer, "%hd,  ", secfilt->NstackDet);        
+
+    PRINT_FLOAT(sec_buffer, secfilt->psfQfPerfMax, "%.6f,");       
+    PrintIOBuffer (sec_buffer, "%u ", secfilt->flags);       
     PrintIOBuffer (sec_buffer, "),\n");
     secfilt ++;
Index: /trunk/Ohana/src/libautocode/def/average-ps1-v5.d
===================================================================
--- /trunk/Ohana/src/libautocode/def/average-ps1-v5.d	(revision 37245)
+++ /trunk/Ohana/src/libautocode/def/average-ps1-v5.d	(revision 37246)
@@ -2,5 +2,5 @@
 EXTNAME      DVO_AVERAGE_PS1_V5
 TYPE         BINTABLE
-SIZE         184
+SIZE         192
 DESCRIPTION  DVO Average Object Table
 
@@ -53,4 +53,10 @@
 FIELD refColorRed,    REF_COLOR_RED,  float,   	    color of astrometry ref stars
 
+FIELD tessID,         TESS_ID,       char,	    ID of tessellation for primary skycell
+FIELD skycellID,      SKYCELL_ID,    char,    	    ID of skycell for primary skycell
+FIELD projectionID,   PROJECTION_ID, short,	    ID of projection for primary skycell
+
+FIELD dummy,          DUMMY,         int,           unassigned bytes
+
 # 'flags' was called 'code' prior to 2009.02.07
 FIELD flags,          FLAGS,       uint32_t,        average object flags (star; ghost; etc)
Index: /trunk/Ohana/src/libautocode/def/average.d
===================================================================
--- /trunk/Ohana/src/libautocode/def/average.d	(revision 37245)
+++ /trunk/Ohana/src/libautocode/def/average.d	(revision 37246)
@@ -2,5 +2,5 @@
 EXTNAME      DVO_AVERAGE
 TYPE         BINTABLE
-SIZE         184
+SIZE         192
 DESCRIPTION  DVO Average Object Table
 
@@ -53,4 +53,10 @@
 FIELD refColorRed,    REF_COLOR_RED,  float,   	    color of astrometry ref stars
 
+FIELD tessID,         TESS_ID,       char,	    ID of tessellation for primary skycell
+FIELD skycellID,      SKYCELL_ID,    char,    	    ID of skycell for primary skycell
+FIELD projectionID,   PROJECTION_ID, short,	    ID of projection for primary skycell
+
+FIELD dummy,          DUMMY,         int,           unassigned bytes
+
 # 'flags' was called 'code' prior to 2009.02.07
 FIELD flags,          FLAGS,       uint32_t,        average object flags (star; ghost; etc)
Index: /trunk/Ohana/src/libautocode/def/measure-ps1-v5.d
===================================================================
--- /trunk/Ohana/src/libautocode/def/measure-ps1-v5.d	(revision 37245)
+++ /trunk/Ohana/src/libautocode/def/measure-ps1-v5.d	(revision 37246)
@@ -68,5 +68,5 @@
 FIELD psfNdof,        PSF_NDOF,      int,            psf degrees of freedom
 FIELD psfNpix,        PSF_NPIX,      int,            psf number of pixels
-FIELD crNsigma,       CR_NSIGMA,     float,          Nsigma deviation towards CR
+FIELD photFlags2,     PHOT_FLAGS,    int,            flags supplied by photometry program
 FIELD extNsigma,      EXT_NSIGMA,    float,          Nsigma deviation towards EXT
 
Index: /trunk/Ohana/src/libautocode/def/measure.d
===================================================================
--- /trunk/Ohana/src/libautocode/def/measure.d	(revision 37245)
+++ /trunk/Ohana/src/libautocode/def/measure.d	(revision 37246)
@@ -66,5 +66,5 @@
 FIELD psfNdof,        PSF_NDOF,      int,            psf degrees of freedom
 FIELD psfNpix,        PSF_NPIX,      int,            psf number of pixels
-FIELD crNsigma,       CR_NSIGMA,     float,          Nsigma deviation towards CR
+FIELD photFlags2,     PHOT_FLAGS,    int,            flags supplied by photometry program
 FIELD extNsigma,      EXT_NSIGMA,    float,          Nsigma deviation towards EXT
 
Index: /trunk/Ohana/src/libautocode/def/secfilt-ps1-v5.d
===================================================================
--- /trunk/Ohana/src/libautocode/def/secfilt-ps1-v5.d	(revision 37245)
+++ /trunk/Ohana/src/libautocode/def/secfilt-ps1-v5.d	(revision 37246)
@@ -2,5 +2,5 @@
 EXTNAME      DVO_SECFILT_PS1_V5
 TYPE         BINTABLE
-SIZE         160
+SIZE         176
 DESCRIPTION  DVO SecFilt : Secondary Filter Data 
 
@@ -15,4 +15,8 @@
 FIELD  sMkron,        MAG_KRON_STDEV,  float,      standard deviation of kron mags,       mags
 				         
+# XXX I could add these fields to secfilt or calculate in dvopsps?
+FIELD  psfQfMax,      PSF_QF_MAX,      float,      best psfQf for this filter
+FIELD  psfQfPerfMax,  PSF_QF_PERF_MAX, float,      best psfQfPerfect for this filter
+
 # these statistics are PSF-specific      
 FIELD  Mstdev,        MAG_STDEV,         float,    standard deviation of measurements,    mags
@@ -42,4 +46,7 @@
 FIELD  dFapStk,       FLUX_AP_STK_ERR,   float,    mean flux ap error
 
+FIELD  Nstack,        NSTACK,            short,    number of measurements in band (gpc1 stack only)
+FIELD  NstackDet,     NSTACK_DET,        short,    number of stack detections in band (gpc1 stack only)
+
 FIELD  stackPrmryOff, STACK_PRIMARY_OFF,  int,     measure entry which is primary stack detection
 FIELD  stackBestOff,  STACK_BEST_OFF,     int,     measure entry which is best stack detection
@@ -66,4 +73,7 @@
 FIELD  NusedApWrp,    NUSED_AP_WRP,      short,    number of detections used in average
 
+FIELD  Nwarp,         NWARP,             short,    number of measurements in band (gpc1 warp only)
+FIELD  NwarpGood,     NWARP_GOOD,        short,    number of meas with psf_qf > 0.85 in band (gpc1 warp only)
+
 FIELD  ubercalDist,   UBERCAL_DIST,      short,    number of images from an ubercal-image
 
Index: /trunk/Ohana/src/libautocode/def/secfilt.d
===================================================================
--- /trunk/Ohana/src/libautocode/def/secfilt.d	(revision 37245)
+++ /trunk/Ohana/src/libautocode/def/secfilt.d	(revision 37246)
@@ -2,5 +2,5 @@
 EXTNAME      DVO_SECFILT
 TYPE         BINTABLE
-SIZE         160
+SIZE         176
 DESCRIPTION  DVO SecFilt : Secondary Filter Data 
 
@@ -15,4 +15,8 @@
 FIELD  sMkron,        MAG_KRON_STDEV,  float,      standard deviation of kron mags,       mags
 
+# XXX I could add these fields to secfilt or calculate in dvopsps?
+FIELD  psfQfMax,      PSF_QF_MAX,      float,      best psfQf for this filter
+FIELD  psfQfPerfMax,  PSF_QF_PERF_MAX, float,      best psfQfPerfect for this filter
+
 # these statistics are PSF-specific      
 FIELD  Mstdev,        MAG_STDEV,       float,      standard deviation of measurements,    mags
@@ -21,8 +25,8 @@
 FIELD  Mchisq,        MAG_CHI,         float,      chisq on average mag,                  value
 
-FIELD  Ncode,         NCODE,           short,      number of detections in band
-FIELD  Nused,         NUSED,           short,      number of detections used in average
-FIELD  NusedKron,     NUSED_KRON,      short,      number of detections used in average
-FIELD  NusedAp,       NUSED_AP,        short,      number of detections used in average
+FIELD  Ncode,         NCODE,           short,      number of detections in band (gpc1 chip only)
+FIELD  Nused,         NUSED,           short,      number of detections used to calculate secfilt.M
+FIELD  NusedKron,     NUSED_KRON,      short,      number of detections used to calculate secfilt.Mkron
+FIELD  NusedAp,       NUSED_AP,        short,      number of detections used to calculate secfilt.Map
 
 FIELD  flags,         FLAGS,           uint32_t,   photometry flags
@@ -42,6 +46,9 @@
 FIELD  dFapStk,       FLUX_AP_STK_ERR,   float,    mean flux ap error
 
-FIELD  stackPrmryOff, STACK_PRIMARY_OFF,  int,     measure entry which is primary stack detection
-FIELD  stackBestOff,  STACK_BEST_OFF,     int,     measure entry which is best stack detection
+FIELD  Nstack,        NSTACK,            short,    number of measurements in band (gpc1 stack only)
+FIELD  NstackDet,     NSTACK_DET,        short,    number of stack detections in band (gpc1 stack only)
+
+FIELD  stackPrmryOff, STACK_PRIMARY_OFF, int,      measure entry which is primary stack detection
+FIELD  stackBestOff,  STACK_BEST_OFF,    int,      measure entry which is best stack detection
 
 ## *** this section is for forced-warp mean values ***
@@ -66,5 +73,8 @@
 FIELD  NusedApWrp,    NUSED_AP_WRP,      short,    number of detections used in average
 
-FIELD  ubercalDist,   UBERCAL_DIST,    short,      number of images from an ubercal-image
+FIELD  Nwarp,         NWARP,             short,    number of measurements in band (gpc1 warp only)
+FIELD  NwarpGood,     NWARP_GOOD,        short,    number of meas with psf_qf > 0.85 in band (gpc1 warp only)
+
+FIELD  ubercalDist,   UBERCAL_DIST,      short,    number of images from an ubercal-image
 
 # *** 20090206 : new fields : M_20, M_80; dropped dummy
Index: /trunk/Ohana/src/libdvo/include/dvo.h
===================================================================
--- /trunk/Ohana/src/libdvo/include/dvo.h	(revision 37245)
+++ /trunk/Ohana/src/libdvo/include/dvo.h	(revision 37246)
@@ -464,5 +464,5 @@
 } MeasureTiny;
 
-/** STRUCT DEFINITION **/
+// alternate version of PS1_V4 (old dev version)
 typedef struct {
   double           R;                    // RA (decimal degrees )
@@ -500,5 +500,5 @@
 Average *Average_PS1_V4alt_ToInternal (Average_PS1_V4alt *in, off_t Nvalues);
 
-/** STRUCT DEFINITION **/
+// alternate version of PS1_V4 (old dev version)
 typedef struct {
   float            dR;                   // RA offset (arcsec)
@@ -556,4 +556,107 @@
 Measure *Measure_PS1_V4alt_ToInternal (Average *ave, Measure_PS1_V4alt *in, off_t Nvalues);
 
+// alternate version of PS1_V5 (old dev version)
+typedef struct {
+  float            M;                    // average mag in this band (mags)
+  float            dM;                   // formal error on average mag (mags)
+  float            Map;                  // ave aperture mag in this band (mags)
+  float            dMap;                 // ave aperture mag in this band (mags)
+  float            sMap;                 // standard deviation of ap mags (mags)
+  float            Mkron;                // ave kron mag in this band (mags)
+  float            dMkron;               // formal error on average kron mag (mags)
+  float            sMkron;               // standard deviation of kron mags (mags)
+  float            Mstdev;               // standard deviation of measurements (mags)
+  float            Mmin;                 // min accepted mag (mags)
+  float            Mmax;                 // max accepted mag (mags)
+  float            Mchisq;               // chisq on average mag (value)
+  short            Ncode;                // number of detections in band
+  short            Nused;                // number of detections used in average
+  short            NusedKron;            // number of detections used in average
+  short            NusedAp;              // number of detections used in average
+  uint32_t         flags;                // photometry flags
+  float            MpsfStk;              // magnitude from stack (primary if available)
+  float            FpsfStk;              // flux from stack (primary if available)
+  float            dFpsfStk;             // mean flux psf error
+  float            MkronStk;             // magnitude from stack (primary if available)
+  float            FkronStk;             // flux from stack (primary if available)
+  float            dFkronStk;            // mean flux kron error
+  float            MapStk;               // magnitude from stack (primary if available)
+  float            FapStk;               // flux from stack (primary if available)
+  float            dFapStk;              // mean flux ap error
+  int              stackPrmryOff;        // measure entry which is primary stack detection
+  int              stackBestOff;         // measure entry which is best stack detection
+  float            MpsfWrp;              // psf magnitude from stack (primary if available)
+  float            FpsfWrp;              // psf flux from stack (primary if available)
+  float            dFpsfWrp;             // mean flux psf error
+  float            sFpsfWrp;             // mean flux psf stdev
+  float            MkronWrp;             // kron magnitude from stack (primary if available)
+  float            FkronWrp;             // kron flux from stack (primary if available)
+  float            dFkronWrp;            // mean flux kron error
+  float            sFkronWrp;            // mean flux kron stdev
+  float            MapWrp;               // aper magnitude from stack (primary if available)
+  float            FapWrp;               // aper flux from stack (primary if available)
+  float            dFapWrp;              // mean flux ap error
+  float            sFapWrp;              // mean flux ap stdev
+  short            NusedWrp;             // number of detections used in average
+  short            NusedKronWrp;         // number of detections used in average
+  short            NusedApWrp;           // number of detections used in average
+  short            ubercalDist;          // number of images from an ubercal-image
+} SecFilt_PS1_V5alt;
+
+SecFilt_PS1_V5alt *gfits_table_get_SecFilt_PS1_V5alt (FTable *table, off_t *Ndata, char *swapped);
+int      gfits_convert_SecFilt_PS1_V5alt (SecFilt_PS1_V5alt *data, off_t size, off_t nitems);
+SecFilt *SecFilt_PS1_V5alt_ToInternal (SecFilt_PS1_V5alt *in, off_t Nvalues);
+
+// alternate version of PS1_V5alt (old dev version)
+typedef struct {
+  double           R;                    // RA (decimal degrees )
+  double           D;                    // DEC (decimal degrees )
+  float            dR;                   // RA error (arcsec)
+  float            dD;                   // DEC error (arcsec)
+  float            uR;                   // RA*cos(D) proper-motion (arcsec/year)
+  float            uD;                   // DEC proper-motion (arcsec/year)
+  float            duR;                  // RA*cos(D) p-m error (arcsec/year)
+  float            duD;                  // DEC p-m error (arcsec/year)
+  float            P;                    // parallax (arcsec)
+  float            dP;                   // parallax error (arcsec)
+  double           Rstk;                 // RA on stack (decimal degrees )
+  double           Dstk;                 // DEC on stack (decimal degrees )
+  float            dRstk;                // RA error on stack (arcsec)
+  float            dDstk;                // DEC error on stack (arcsec)
+  float            ChiSqAve;             // astrometry analysis chisq
+  float            ChiSqPM;              // astrometry analysis chisq
+  float            ChiSqPar;             // astrometry analysis chisq
+  int              Tmean;                // mean epoch (PM,PAR ref) (unix time seconds)
+  int              Trange;               // mean epoch (PM,PAR ref) (unix time seconds)
+  float            psfQF;                // psf coverage (bad masks)
+  float            psfQFperf;            // psf coverage (all masks)
+  float            stargal;              // star / galaxy separator (1/100 arcsec)
+  unsigned short   Npos;                 // number of detections used for astrometry
+  unsigned short   Nmeasure;             // number of psf measurements
+  unsigned short   Nmissing;             // number of missings
+  unsigned short   Nlensing;             // number of lensing measurements
+  unsigned short   Nlensobj;             // number of lensing measurements
+  unsigned short   Nextend;              // number of extended measurements
+  int              measureOffset;        // offset to first psf measurement
+  int              missingOffset;        // offset to first missing obs
+  int              lensingOffset;        // offset to first lensing obs
+  int              lensobjOffset;        // offset to mean lensing data
+  int              extendOffset;         // offset to extended object entry
+  int              paramsOffset;         // offset to stellar parameter data
+  float            refColorBlue;         // color of astrometry ref stars
+  float            refColorRed;          // color of astrometry ref stars
+  uint32_t         flags;                // average object flags (star; ghost; etc)
+  uint32_t         photFlagsUpper;       // upper bit of 2 bit summary of per-measure photflags
+  uint32_t         photFlagsLower;       // lower bit of 2 bit summary of per-measure photflags
+  unsigned int     objID;                // unique ID for object in table
+  unsigned int     catID;                // unique ID for table in which object was first realized
+  uint64_t         extID;                // external ID for object (eg PSPS objID)
+  uint64_t         extIDgc;              // external ID for object in galactic coords
+} Average_PS1_V5alt;
+
+Average_PS1_V5alt *gfits_table_get_Average_PS1_V5alt (FTable *table, off_t *Ndata, char *swapped);
+int      gfits_convert_Average_PS1_V5alt (Average_PS1_V5alt *data, off_t size, off_t nitems);
+Average *Average_PS1_V5alt_ToInternal (Average_PS1_V5alt *in, off_t Nvalues);
+
 /* for some reason I have merged the set of tables and the file description,
    so I need to have an internal structure to point to the separate files */
Index: /trunk/Ohana/src/libdvo/src/dbExtractMeasures.c
===================================================================
--- /trunk/Ohana/src/libdvo/src/dbExtractMeasures.c	(revision 37245)
+++ /trunk/Ohana/src/libdvo/src/dbExtractMeasures.c	(revision 37246)
@@ -646,7 +646,4 @@
     case MEAS_PSF_NPIX: /* OK */
       value.Int = measure[0].psfNpix;
-      break;
-    case MEAS_CR_NSIGMA: /* OK */
-      value.Flt = measure[0].crNsigma;
       break;
     case MEAS_EXT_NSIGMA: /* OK */
Index: /trunk/Ohana/src/libdvo/src/dvo_catalog.c
===================================================================
--- /trunk/Ohana/src/libdvo/src/dvo_catalog.c	(revision 37245)
+++ /trunk/Ohana/src/libdvo/src/dvo_catalog.c	(revision 37246)
@@ -141,4 +141,9 @@
   average->refColorRed     = NAN;
 
+  average->tessID          = 0;
+  average->skycellID       = 0;
+  average->projectionID    = 0;
+  average->dummy           = 0;
+
   average->flags           = 0;
   average->photFlagsUpper  = 0;
@@ -173,4 +178,7 @@
   secfilt->sMkron      = NAN;
 
+  secfilt->psfQfMax     = NAN;
+  secfilt->psfQfPerfMax = NAN;
+
   secfilt->Mstdev      = NAN;
   secfilt->Mmin        = NAN;
@@ -197,4 +205,7 @@
   secfilt->dFapStk     = NAN;
 
+  secfilt->Nstack      = 0;
+  secfilt->NstackDet   = 0;
+
   secfilt->stackPrmryOff = -1;
   secfilt->stackBestOff  = -1;
@@ -218,4 +229,7 @@
   secfilt->NusedKronWrp = 0;
   secfilt->NusedApWrp   = 0;
+
+  secfilt->Nwarp        = 0;
+  secfilt->NwarpGood    = 0;
 
   secfilt->ubercalDist = 1000;
@@ -279,5 +293,4 @@
  measure->psfNdof   = 0;
  measure->psfNpix   = 0;
- measure->crNsigma  = NAN;
  measure->extNsigma = NAN;
 
@@ -302,4 +315,5 @@
  measure->dbFlags   = 0;
  measure->photFlags = 0;
+ measure->photFlags2= 0;
 }
 
Index: /trunk/Ohana/src/libdvo/src/dvo_convert.c
===================================================================
--- /trunk/Ohana/src/libdvo/src/dvo_convert.c	(revision 37245)
+++ /trunk/Ohana/src/libdvo/src/dvo_convert.c	(revision 37246)
@@ -80,4 +80,18 @@
   }
 
+  // block to convert old tables (PS1_V5 versions made during development)
+  if (!strcmp (extname, "DVO_AVERAGE_PS1_V5") && (ftable[0].header[0].Naxis[0] == 184)) {
+    Average_PS1_V5alt *tmpAverage;
+    tmpAverage = gfits_table_get_Average_PS1_V5alt (ftable, Naverage, NULL);
+    if (!tmpAverage) {
+      fprintf (stderr, "ERROR: failed to read averages\n");
+      exit (2);
+    }
+    average = Average_PS1_V5alt_ToInternal (tmpAverage, *Naverage);
+    free (tmpAverage);
+    *format = DVO_FORMAT_PS1_V5;
+    return (average); 
+  }
+
 # define CONVERT_FORMAT(NAME, FORMAT, TYPE) \
   if (!strcmp (extname, NAME)) { \
@@ -285,4 +299,19 @@
     return (FALSE);
   }
+
+  // block to convert old tables (PS1_V5 versions made during development)
+  if (!strcmp (extname, "DVO_SECFILT_PS1_V5") && (ftable[0].header[0].Naxis[0] == 160)) {
+    SecFilt_PS1_V5alt *tmpSecFilt;
+    tmpSecFilt = gfits_table_get_SecFilt_PS1_V5alt (ftable, Nsecfilt, NULL);
+    if (!tmpSecFilt) {
+      fprintf (stderr, "ERROR: failed to read secfilts\n");
+      exit (2);
+    }
+    secfilt = SecFilt_PS1_V5alt_ToInternal (tmpSecFilt, *Nsecfilt);
+    free (tmpSecFilt);
+    *format = DVO_FORMAT_PS1_V5;
+    return (secfilt); 
+  }
+
 
 # define CONVERT_FORMAT(NAME, FORMAT, TYPE) \
Index: /trunk/Ohana/src/libdvo/src/dvo_convert_PS1_DEV_1.c
===================================================================
--- /trunk/Ohana/src/libdvo/src/dvo_convert_PS1_DEV_1.c	(revision 37245)
+++ /trunk/Ohana/src/libdvo/src/dvo_convert_PS1_DEV_1.c	(revision 37246)
@@ -32,5 +32,4 @@
     out[i].psfQF      = in[i].psfQF;
     out[i].psfChisq   = in[i].psfChisq;
-    out[i].crNsigma   = in[i].crNsigma;
     out[i].extNsigma  = in[i].extNsigma;
     out[i].FWx 	      = in[i].FWx;
@@ -80,5 +79,4 @@
     out[i].psfQF      = in[i].psfQF;
     out[i].psfChisq   = in[i].psfChisq;
-    out[i].crNsigma   = in[i].crNsigma;
     out[i].extNsigma  = in[i].extNsigma;
     out[i].FWx 	      = in[i].FWx;
Index: /trunk/Ohana/src/libdvo/src/dvo_convert_PS1_DEV_2.c
===================================================================
--- /trunk/Ohana/src/libdvo/src/dvo_convert_PS1_DEV_2.c	(revision 37245)
+++ /trunk/Ohana/src/libdvo/src/dvo_convert_PS1_DEV_2.c	(revision 37246)
@@ -34,5 +34,4 @@
     out[i].psfQF      = in[i].psfQF;
     out[i].psfChisq   = in[i].psfChisq;
-    out[i].crNsigma   = in[i].crNsigma;
     out[i].extNsigma  = in[i].extNsigma;
     out[i].FWx 	      = in[i].FWx;
@@ -80,5 +79,4 @@
     out[i].psfQF      = in[i].psfQF;
     out[i].psfChisq   = in[i].psfChisq;
-    out[i].crNsigma   = in[i].crNsigma;
     out[i].extNsigma  = in[i].extNsigma;
     out[i].FWx 	      = in[i].FWx;
Index: /trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V1.c
===================================================================
--- /trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V1.c	(revision 37245)
+++ /trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V1.c	(revision 37246)
@@ -40,5 +40,4 @@
     out[i].psfNdof    = in[i].psfNdof;
     out[i].psfNpix    = in[i].psfNpix;
-    out[i].crNsigma   = in[i].crNsigma;
     out[i].extNsigma  = in[i].extNsigma;
     out[i].FWx 	      = in[i].FWx;
@@ -95,5 +94,4 @@
     out[i].psfNdof    = in[i].psfNdof;
     out[i].psfNpix    = in[i].psfNpix;
-    out[i].crNsigma   = in[i].crNsigma;
     out[i].extNsigma  = in[i].extNsigma;
     out[i].FWx 	      = in[i].FWx;
Index: /trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V2.c
===================================================================
--- /trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V2.c	(revision 37245)
+++ /trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V2.c	(revision 37246)
@@ -40,5 +40,4 @@
     out[i].psfNdof    = in[i].psfNdof;
     out[i].psfNpix    = in[i].psfNpix;
-    out[i].crNsigma   = in[i].crNsigma;
     out[i].extNsigma  = in[i].extNsigma;
     out[i].FWx 	      = in[i].FWx;
@@ -96,5 +95,4 @@
     out[i].psfNdof    = in[i].psfNdof;
     out[i].psfNpix    = in[i].psfNpix;
-    out[i].crNsigma   = in[i].crNsigma;
     out[i].extNsigma  = in[i].extNsigma;
     out[i].FWx 	      = in[i].FWx;
Index: /trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V3.c
===================================================================
--- /trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V3.c	(revision 37245)
+++ /trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V3.c	(revision 37246)
@@ -40,5 +40,4 @@
     out[i].psfNdof    = in[i].psfNdof;
     out[i].psfNpix    = in[i].psfNpix;
-    out[i].crNsigma   = in[i].crNsigma;
     out[i].extNsigma  = in[i].extNsigma;
     out[i].FWx 	      = in[i].FWx;
@@ -96,5 +95,4 @@
     out[i].psfNdof    = in[i].psfNdof;
     out[i].psfNpix    = in[i].psfNpix;
-    out[i].crNsigma   = in[i].crNsigma;
     out[i].extNsigma  = in[i].extNsigma;
     out[i].FWx 	      = in[i].FWx;
Index: /trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V4.c
===================================================================
--- /trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V4.c	(revision 37245)
+++ /trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V4.c	(revision 37246)
@@ -49,5 +49,4 @@
     out[i].psfNdof    = in[i].psfNdof;
     out[i].psfNpix    = in[i].psfNpix;
-    out[i].crNsigma   = in[i].crNsigma;
     out[i].extNsigma  = in[i].extNsigma;
     out[i].FWx 	      = in[i].FWx;
@@ -114,5 +113,4 @@
     out[i].psfNdof    = in[i].psfNdof;
     out[i].psfNpix    = in[i].psfNpix;
-    out[i].crNsigma   = in[i].crNsigma;
     out[i].extNsigma  = in[i].extNsigma;
     out[i].FWx 	      = in[i].FWx;
@@ -541,5 +539,4 @@
     out[i].psfNdof    = in[i].psfNdof;
     out[i].psfNpix    = in[i].psfNpix;
-    out[i].crNsigma   = in[i].crNsigma;
     out[i].extNsigma  = in[i].extNsigma;
     out[i].FWx 	      = in[i].FWx;
Index: /trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V5.c
===================================================================
--- /trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V5.c	(revision 37245)
+++ /trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V5.c	(revision 37246)
@@ -56,5 +56,4 @@
     out[i].psfNdof    = in[i].psfNdof;
     out[i].psfNpix    = in[i].psfNpix;
-    out[i].crNsigma   = in[i].crNsigma;
     out[i].extNsigma  = in[i].extNsigma;
     out[i].FWx 	      = in[i].FWx;
@@ -73,4 +72,5 @@
     out[i].dbFlags    = in[i].dbFlags;
     out[i].photFlags  = in[i].photFlags;
+    out[i].photFlags2 = in[i].photFlags2;
   }
   return (out);
@@ -128,5 +128,4 @@
     out[i].psfNdof    = in[i].psfNdof;
     out[i].psfNpix    = in[i].psfNpix;
-    out[i].crNsigma   = in[i].crNsigma;
     out[i].extNsigma  = in[i].extNsigma;
     out[i].FWx 	      = in[i].FWx;
@@ -145,4 +144,5 @@
     out[i].dbFlags    = in[i].dbFlags;
     out[i].photFlags  = in[i].photFlags;
+    out[i].photFlags2 = in[i].photFlags2;
   }
   return (out);
@@ -203,4 +203,8 @@
     out[i].refColorRed   = in[i].refColorRed;
 
+    out[i].tessID        = in[i].tessID;
+    out[i].skycellID     = in[i].skycellID;
+    out[i].projectionID  = in[i].projectionID;
+
     out[i].flags     	 = in[i].flags;   
     out[i].photFlagsUpper = in[i].photFlagsUpper;   
@@ -223,54 +227,58 @@
 
   for (i = 0; i < Nvalues; i++) {
-    out[i].R        	 = in[i].R;      
-    out[i].D        	 = in[i].D;      
-    out[i].dR       	 = in[i].dR;
-    out[i].dD       	 = in[i].dD;
-    out[i].uR       	 = in[i].uR;
-    out[i].uD       	 = in[i].uD;
-    out[i].duR      	 = in[i].duR;
-    out[i].duD      	 = in[i].duD;
-    out[i].P        	 = in[i].P;
-    out[i].dP       	 = in[i].dP;
-
-    out[i].Rstk        	 = in[i].Rstk;      
-    out[i].Dstk        	 = in[i].Dstk;      
-    out[i].dRstk       	 = in[i].dRstk;
-    out[i].dDstk       	 = in[i].dDstk;
-
-    out[i].ChiSqAve    	 = in[i].ChiSqAve;     
-    out[i].ChiSqPM     	 = in[i].ChiSqPM;     
-    out[i].ChiSqPar   	 = in[i].ChiSqPar;     
-    out[i].Tmean    	 = in[i].Tmean;     
-    out[i].Trange   	 = in[i].Trange;     
-
-    out[i].psfQF         = in[i].psfQF;
-    out[i].psfQFperf     = in[i].psfQFperf;
-    out[i].stargal     	 = in[i].stargal;     
-    out[i].Npos       	 = in[i].Npos;     
-
-    out[i].Nmeasure      = in[i].Nmeasure;     
-    out[i].Nmissing      = in[i].Nmissing;     
-    out[i].Nlensing      = in[i].Nlensing;     
-    out[i].Nlensobj      = in[i].Nlensobj;     
-    out[i].Nextend       = in[i].Nextend;     
-
-    out[i].measureOffset = in[i].measureOffset; 
-    out[i].missingOffset = in[i].missingOffset;
-    out[i].lensingOffset = in[i].lensingOffset;
-    out[i].lensobjOffset = in[i].lensobjOffset;
-    out[i].extendOffset  = in[i].extendOffset;
-    out[i].paramsOffset  = in[i].paramsOffset;
-
-    out[i].refColorBlue  = in[i].refColorBlue;
-    out[i].refColorRed   = in[i].refColorRed;
-
-    out[i].flags     	 = in[i].flags;   
+    out[i].R        	  = in[i].R;      
+    out[i].D        	  = in[i].D;      
+    out[i].dR       	  = in[i].dR;
+    out[i].dD       	  = in[i].dD;
+    out[i].uR       	  = in[i].uR;
+    out[i].uD       	  = in[i].uD;
+    out[i].duR      	  = in[i].duR;
+    out[i].duD      	  = in[i].duD;
+    out[i].P        	  = in[i].P;
+    out[i].dP       	  = in[i].dP;
+			  
+    out[i].Rstk        	  = in[i].Rstk;      
+    out[i].Dstk        	  = in[i].Dstk;      
+    out[i].dRstk       	  = in[i].dRstk;
+    out[i].dDstk       	  = in[i].dDstk;
+			  
+    out[i].ChiSqAve    	  = in[i].ChiSqAve;     
+    out[i].ChiSqPM     	  = in[i].ChiSqPM;     
+    out[i].ChiSqPar   	  = in[i].ChiSqPar;     
+    out[i].Tmean    	  = in[i].Tmean;     
+    out[i].Trange   	  = in[i].Trange;     
+			  
+    out[i].psfQF          = in[i].psfQF;
+    out[i].psfQFperf      = in[i].psfQFperf;
+    out[i].stargal     	  = in[i].stargal;     
+    out[i].Npos       	  = in[i].Npos;     
+			  
+    out[i].Nmeasure       = in[i].Nmeasure;     
+    out[i].Nmissing       = in[i].Nmissing;     
+    out[i].Nlensing       = in[i].Nlensing;     
+    out[i].Nlensobj       = in[i].Nlensobj;     
+    out[i].Nextend        = in[i].Nextend;     
+			  
+    out[i].measureOffset  = in[i].measureOffset; 
+    out[i].missingOffset  = in[i].missingOffset;
+    out[i].lensingOffset  = in[i].lensingOffset;
+    out[i].lensobjOffset  = in[i].lensobjOffset;
+    out[i].extendOffset   = in[i].extendOffset;
+    out[i].paramsOffset   = in[i].paramsOffset;
+			  
+    out[i].refColorBlue   = in[i].refColorBlue;
+    out[i].refColorRed    = in[i].refColorRed;
+			  
+    out[i].tessID         = in[i].tessID;
+    out[i].skycellID      = in[i].skycellID;
+    out[i].projectionID   = in[i].projectionID;
+			  
+    out[i].flags     	  = in[i].flags;   
     out[i].photFlagsUpper = in[i].photFlagsUpper;   
     out[i].photFlagsLower = in[i].photFlagsLower;   
-    out[i].objID 	 = in[i].objID;
-    out[i].catID 	 = in[i].catID;
-    out[i].extID 	 = in[i].extID;
-    out[i].extIDgc 	 = in[i].extIDgc;
+    out[i].objID 	  = in[i].objID;
+    out[i].catID 	  = in[i].catID;
+    out[i].extID 	  = in[i].extID;
+    out[i].extIDgc 	  = in[i].extIDgc;
   }
   return (out);
@@ -286,72 +294,4 @@
   for (i = 0; i < Nvalues; i++) {
     dvo_secfilt_init (&out[i]);
-
-    out[i].M             = in[i].M;      
-    out[i].dM            = in[i].dM;      
-    out[i].Map           = in[i].Map;      
-    out[i].dMap          = in[i].dMap;      
-    out[i].sMap          = in[i].sMap;      
-    out[i].Mkron         = in[i].Mkron;      
-    out[i].dMkron        = in[i].dMkron;      
-
-    out[i].Mstdev        = in[i].Mstdev;      
-    out[i].Mmin          = in[i].Mmin;      
-    out[i].Mmax          = in[i].Mmax;      
-    out[i].Mchisq        = in[i].Mchisq;     
-
-    out[i].Ncode         = in[i].Ncode;
-    out[i].Nused         = in[i].Nused;
-    out[i].NusedKron     = in[i].NusedKron;
-    out[i].NusedAp       = in[i].NusedAp;
-
-    out[i].flags         = in[i].flags;     
-
-    out[i].MpsfStk       = in[i].MpsfStk;
-    out[i].FpsfStk       = in[i].FpsfStk;
-    out[i].dFpsfStk      = in[i].dFpsfStk;
-
-    out[i].MkronStk      = in[i].MkronStk;
-    out[i].FkronStk      = in[i].FkronStk;
-    out[i].dFkronStk     = in[i].dFkronStk;
-
-    out[i].MapStk        = in[i].MapStk;
-    out[i].FapStk        = in[i].FapStk;
-    out[i].dFapStk       = in[i].dFapStk;
-
-    out[i].stackPrmryOff = in[i].stackPrmryOff;      
-    out[i].stackBestOff  = in[i].stackBestOff;      
-
-    out[i].MpsfWrp       = in[i].MpsfWrp;
-    out[i].FpsfWrp       = in[i].FpsfWrp;
-    out[i].dFpsfWrp      = in[i].dFpsfWrp;
-    out[i].sFpsfWrp      = in[i].sFpsfWrp;
-
-    out[i].MkronWrp      = in[i].MkronWrp;
-    out[i].FkronWrp      = in[i].FkronWrp;
-    out[i].dFkronWrp     = in[i].dFkronWrp;
-    out[i].sFkronWrp     = in[i].sFkronWrp;
-
-    out[i].MapWrp        = in[i].MapWrp;
-    out[i].FapWrp        = in[i].FapWrp;
-    out[i].dFapWrp       = in[i].dFapWrp;
-    out[i].sFapWrp       = in[i].sFapWrp;
-
-    out[i].NusedWrp      = in[i].NusedWrp;
-    out[i].NusedKronWrp  = in[i].NusedKronWrp;
-    out[i].NusedApWrp    = in[i].NusedApWrp;
-
-    out[i].ubercalDist   = in[i].ubercalDist;      
-  }
-  return (out);
-}
-
-SecFilt_PS1_V5 *SecFiltInternalTo_PS1_V5 (SecFilt *in, off_t Nvalues) {
-
-  off_t i;
-  SecFilt_PS1_V5 *out;
-
-  ALLOCATE_ZERO (out, SecFilt_PS1_V5, Nvalues);
-
-  for (i = 0; i < Nvalues; i++) {
 
     out[i].M             = in[i].M;      
@@ -364,4 +304,7 @@
     out[i].sMkron        = in[i].sMkron;      
 
+    out[i].psfQfMax      = in[i].psfQfMax;      
+    out[i].psfQfPerfMax  = in[i].psfQfPerfMax;      
+
     out[i].Mstdev        = in[i].Mstdev;      
     out[i].Mmin          = in[i].Mmin;      
@@ -388,4 +331,7 @@
     out[i].dFapStk       = in[i].dFapStk;
 
+    out[i].Nstack        = in[i].Nstack;      
+    out[i].NstackDet     = in[i].NstackDet;      
+
     out[i].stackPrmryOff = in[i].stackPrmryOff;      
     out[i].stackBestOff  = in[i].stackBestOff;      
@@ -409,4 +355,85 @@
     out[i].NusedKronWrp  = in[i].NusedKronWrp;
     out[i].NusedApWrp    = in[i].NusedApWrp;
+
+    out[i].Nwarp         = in[i].Nwarp;      
+    out[i].NwarpGood     = in[i].NwarpGood;      
+
+    out[i].ubercalDist   = in[i].ubercalDist;      
+  }
+  return (out);
+}
+
+SecFilt_PS1_V5 *SecFiltInternalTo_PS1_V5 (SecFilt *in, off_t Nvalues) {
+
+  off_t i;
+  SecFilt_PS1_V5 *out;
+
+  ALLOCATE_ZERO (out, SecFilt_PS1_V5, Nvalues);
+
+  for (i = 0; i < Nvalues; i++) {
+
+    out[i].M             = in[i].M;      
+    out[i].dM            = in[i].dM;      
+    out[i].Map           = in[i].Map;      
+    out[i].dMap          = in[i].dMap;      
+    out[i].sMap          = in[i].sMap;      
+    out[i].Mkron         = in[i].Mkron;      
+    out[i].dMkron        = in[i].dMkron;      
+    out[i].sMkron        = in[i].sMkron;      
+
+    out[i].psfQfMax      = in[i].psfQfMax;      
+    out[i].psfQfPerfMax  = in[i].psfQfPerfMax;      
+
+    out[i].Mstdev        = in[i].Mstdev;      
+    out[i].Mmin          = in[i].Mmin;      
+    out[i].Mmax          = in[i].Mmax;      
+    out[i].Mchisq        = in[i].Mchisq;     
+
+    out[i].Ncode         = in[i].Ncode;
+    out[i].Nused         = in[i].Nused;
+    out[i].NusedKron     = in[i].NusedKron;
+    out[i].NusedAp       = in[i].NusedAp;
+
+    out[i].flags         = in[i].flags;     
+
+    out[i].MpsfStk       = in[i].MpsfStk;
+    out[i].FpsfStk       = in[i].FpsfStk;
+    out[i].dFpsfStk      = in[i].dFpsfStk;
+
+    out[i].MkronStk      = in[i].MkronStk;
+    out[i].FkronStk      = in[i].FkronStk;
+    out[i].dFkronStk     = in[i].dFkronStk;
+
+    out[i].MapStk        = in[i].MapStk;
+    out[i].FapStk        = in[i].FapStk;
+    out[i].dFapStk       = in[i].dFapStk;
+
+    out[i].Nstack        = in[i].Nstack;      
+    out[i].NstackDet     = in[i].NstackDet;      
+
+    out[i].stackPrmryOff = in[i].stackPrmryOff;      
+    out[i].stackBestOff  = in[i].stackBestOff;      
+
+    out[i].MpsfWrp       = in[i].MpsfWrp;
+    out[i].FpsfWrp       = in[i].FpsfWrp;
+    out[i].dFpsfWrp      = in[i].dFpsfWrp;
+    out[i].sFpsfWrp      = in[i].sFpsfWrp;
+
+    out[i].MkronWrp      = in[i].MkronWrp;
+    out[i].FkronWrp      = in[i].FkronWrp;
+    out[i].dFkronWrp     = in[i].dFkronWrp;
+    out[i].sFkronWrp     = in[i].sFkronWrp;
+
+    out[i].MapWrp        = in[i].MapWrp;
+    out[i].FapWrp        = in[i].FapWrp;
+    out[i].dFapWrp       = in[i].dFapWrp;
+    out[i].sFapWrp       = in[i].sFapWrp;
+
+    out[i].NusedWrp      = in[i].NusedWrp;
+    out[i].NusedKronWrp  = in[i].NusedKronWrp;
+    out[i].NusedApWrp    = in[i].NusedApWrp;
+
+    out[i].Nwarp         = in[i].Nwarp;      
+    out[i].NwarpGood     = in[i].NwarpGood;      
 
     out[i].ubercalDist   = in[i].ubercalDist;      
@@ -834,2 +861,327 @@
   return (out);
 }
+
+/*********************** old / alternate version **********************/
+
+// 'primary' is needed to conform with the API for Loneos and Elixir, but is not used
+Average *Average_PS1_V5alt_ToInternal (Average_PS1_V5alt *in, off_t Nvalues) {
+
+  off_t i;
+  Average *out;
+
+  ALLOCATE_ZERO (out, Average, Nvalues);
+
+  for (i = 0; i < Nvalues; i++) {
+    dvo_average_init (&out[i]);
+
+    out[i].R        	  = in[i].R;      
+    out[i].D        	  = in[i].D;      
+    out[i].dR       	  = in[i].dR;
+    out[i].dD       	  = in[i].dD;
+    out[i].uR       	  = in[i].uR;
+    out[i].uD       	  = in[i].uD;
+    out[i].duR      	  = in[i].duR;
+    out[i].duD      	  = in[i].duD;
+    out[i].P        	  = in[i].P;
+    out[i].dP       	  = in[i].dP;
+			  
+    out[i].Rstk        	  = in[i].Rstk;      
+    out[i].Dstk        	  = in[i].Dstk;      
+    out[i].dRstk       	  = in[i].dRstk;
+    out[i].dDstk       	  = in[i].dDstk;
+			  
+    out[i].ChiSqAve    	  = in[i].ChiSqAve;     
+    out[i].ChiSqPM    	  = in[i].ChiSqPM;     
+    out[i].ChiSqPar    	  = in[i].ChiSqPar;     
+    out[i].Tmean    	  = in[i].Tmean;     
+    out[i].Trange   	  = in[i].Trange;     
+			  
+    out[i].psfQF          = in[i].psfQF;
+    out[i].psfQFperf      = in[i].psfQFperf;
+    out[i].stargal     	  = in[i].stargal;     
+    out[i].Npos       	  = in[i].Npos;     
+			  
+    out[i].Nmeasure       = in[i].Nmeasure;     
+    out[i].Nmissing       = in[i].Nmissing;     
+    out[i].Nlensing       = in[i].Nlensing;     
+    out[i].Nlensobj       = in[i].Nlensobj;     
+    out[i].Nextend        = in[i].Nextend;     
+			  
+    out[i].measureOffset  = in[i].measureOffset; 
+    out[i].missingOffset  = in[i].missingOffset;
+    out[i].lensingOffset  = in[i].lensingOffset;
+    out[i].lensobjOffset  = in[i].lensobjOffset;
+    out[i].extendOffset   = in[i].extendOffset;
+    out[i].paramsOffset   = in[i].paramsOffset;
+			  
+    out[i].refColorBlue   = in[i].refColorBlue;
+    out[i].refColorRed    = in[i].refColorRed;
+			  
+    out[i].flags     	  = in[i].flags;   
+    out[i].photFlagsUpper = in[i].photFlagsUpper;   
+    out[i].photFlagsLower = in[i].photFlagsLower;   
+    out[i].objID 	  = in[i].objID;
+    out[i].catID 	  = in[i].catID;
+    out[i].extID 	  = in[i].extID;
+    out[i].extIDgc 	  = in[i].extIDgc;
+  }
+  return (out);
+}
+
+int gfits_convert_Average_PS1_V5alt (Average_PS1_V5alt *data, off_t size, off_t nitems) {
+
+  off_t i;
+  unsigned char *byte, tmp;
+
+  if (size != 184) { 
+    fprintf (stderr, "WARNING: mismatch in data types Average_PS1_V5alt: "OFF_T_FMT" vs %d\n",  size,  184);
+    return (FALSE);
+  }
+
+  /* provide initial values to avoid compiler warnings for non-BYTE_SWAP arch */
+  i = tmp = 0;
+  byte = NULL;
+
+# ifdef BYTE_SWAP
+  byte = (unsigned char *) data;
+  for (i = 0; i < nitems; i++, byte += 184) {
+    /** BYTE SWAP **/
+    SWAP_DBLE (0); // RA
+    SWAP_DBLE (8); // DEC
+    SWAP_WORD (16); // RA_ERR
+    SWAP_WORD (20); // DEC_ERR
+    SWAP_WORD (24); // U_RA
+    SWAP_WORD (28); // U_DEC
+    SWAP_WORD (32); // V_RA_ERR
+    SWAP_WORD (36); // V_DEC_ERR
+    SWAP_WORD (40); // PAR
+    SWAP_WORD (44); // PAR_ERR
+    SWAP_DBLE (48); // RA_STK
+    SWAP_DBLE (56); // DEC_STK
+    SWAP_WORD (64); // RA_STK_ERR
+    SWAP_WORD (68); // DEC_STK_ERR
+    SWAP_WORD (72); // CHISQ_POS
+    SWAP_WORD (76); // CHISQ_PM
+    SWAP_WORD (80); // CHISQ_PAP
+    SWAP_WORD (84); // MEAN_EPOCH
+    SWAP_WORD (88); // TIME_RANGE
+    SWAP_WORD (92); // PSF_QF
+    SWAP_WORD (96); // PSF_QF_PERF
+    SWAP_WORD (100); // STARGAL_SEP
+    SWAP_BYTE (104); // NUMBER_POS
+    SWAP_BYTE (106); // NMEASURE
+    SWAP_BYTE (108); // NMISSING
+    SWAP_BYTE (110); // NLENSING
+    SWAP_BYTE (112); // NLENSOBJ
+    SWAP_BYTE (114); // NEXTEND
+    SWAP_WORD (116); // OFF_MEASURE
+    SWAP_WORD (120); // OFF_MISSING
+    SWAP_WORD (124); // OFF_LENSING
+    SWAP_WORD (128); // OFF_LENSOBJ
+    SWAP_WORD (132); // OFF_EXTEND
+    SWAP_WORD (136); // OFF_PARAMS
+    SWAP_WORD (140); // REF_COLOR_BLUE
+    SWAP_WORD (144); // REF_COLOR_RED
+    SWAP_WORD (148); // FLAGS
+    SWAP_WORD (152); // PHOTFLAGS_U
+    SWAP_WORD (156); // PHOTFLAGS_L
+    SWAP_WORD (160); // OBJ_ID
+    SWAP_WORD (164); // CAT_ID
+    SWAP_DBLE (168); // EXT_ID
+    SWAP_DBLE (176); // EXT_ID_GC
+  }
+# endif  
+
+  return (TRUE);
+} 
+
+/*** add test of EXTNAME and header-defined columns? ***/
+/* return internal structure representation */
+Average_PS1_V5alt *gfits_table_get_Average_PS1_V5alt (FTable *ftable, off_t *Ndata, char *swapped) {
+
+  int Ncols;
+  Average_PS1_V5alt *data;
+
+  Ncols = ftable[0].header[0].Naxis[0];
+  if (Ncols != 184) {
+    fprintf (stderr, "ERROR: mis-match in table size: width is %d but should be %d bytes\n", Ncols, 184);
+    return NULL;
+  }
+
+  *Ndata = ftable[0].header[0].Naxis[1];
+  data = (Average_PS1_V5alt *) ftable[0].buffer;
+  if ((swapped == NULL) || (*swapped == FALSE)) {
+    if (!gfits_convert_Average_PS1_V5alt (data, sizeof (Average_PS1_V5alt), *Ndata)) {
+      return NULL;
+    }
+    gfits_table_scale_data (ftable);
+    if (swapped != NULL) *swapped = TRUE;
+  }
+  return (data);
+}
+
+/****** alt secfilt **********/
+
+SecFilt *SecFilt_PS1_V5alt_ToInternal (SecFilt_PS1_V5alt *in, off_t Nvalues) {
+
+  off_t i;
+  SecFilt *out;
+
+  ALLOCATE_ZERO (out, SecFilt, Nvalues);
+
+  for (i = 0; i < Nvalues; i++) {
+    dvo_secfilt_init (&out[i]);
+
+    out[i].M             = in[i].M;      
+    out[i].dM            = in[i].dM;      
+    out[i].Map           = in[i].Map;      
+    out[i].dMap          = in[i].dMap;      
+    out[i].sMap          = in[i].sMap;      
+    out[i].Mkron         = in[i].Mkron;      
+    out[i].dMkron        = in[i].dMkron;      
+
+    out[i].Mstdev        = in[i].Mstdev;      
+    out[i].Mmin          = in[i].Mmin;      
+    out[i].Mmax          = in[i].Mmax;      
+    out[i].Mchisq        = in[i].Mchisq;     
+
+    out[i].Ncode         = in[i].Ncode;
+    out[i].Nused         = in[i].Nused;
+    out[i].NusedKron     = in[i].NusedKron;
+    out[i].NusedAp       = in[i].NusedAp;
+
+    out[i].flags         = in[i].flags;     
+
+    out[i].MpsfStk       = in[i].MpsfStk;
+    out[i].FpsfStk       = in[i].FpsfStk;
+    out[i].dFpsfStk      = in[i].dFpsfStk;
+
+    out[i].MkronStk      = in[i].MkronStk;
+    out[i].FkronStk      = in[i].FkronStk;
+    out[i].dFkronStk     = in[i].dFkronStk;
+
+    out[i].MapStk        = in[i].MapStk;
+    out[i].FapStk        = in[i].FapStk;
+    out[i].dFapStk       = in[i].dFapStk;
+
+    out[i].stackPrmryOff = in[i].stackPrmryOff;      
+    out[i].stackBestOff  = in[i].stackBestOff;      
+
+    out[i].MpsfWrp       = in[i].MpsfWrp;
+    out[i].FpsfWrp       = in[i].FpsfWrp;
+    out[i].dFpsfWrp      = in[i].dFpsfWrp;
+    out[i].sFpsfWrp      = in[i].sFpsfWrp;
+
+    out[i].MkronWrp      = in[i].MkronWrp;
+    out[i].FkronWrp      = in[i].FkronWrp;
+    out[i].dFkronWrp     = in[i].dFkronWrp;
+    out[i].sFkronWrp     = in[i].sFkronWrp;
+
+    out[i].MapWrp        = in[i].MapWrp;
+    out[i].FapWrp        = in[i].FapWrp;
+    out[i].dFapWrp       = in[i].dFapWrp;
+    out[i].sFapWrp       = in[i].sFapWrp;
+
+    out[i].NusedWrp      = in[i].NusedWrp;
+    out[i].NusedKronWrp  = in[i].NusedKronWrp;
+    out[i].NusedApWrp    = in[i].NusedApWrp;
+
+    out[i].ubercalDist   = in[i].ubercalDist;      
+  }
+  return (out);
+}
+
+int gfits_convert_SecFilt_PS1_V5alt (SecFilt_PS1_V5alt *data, off_t size, off_t nitems) {
+
+  off_t i;
+  unsigned char *byte, tmp;
+
+  if (size != 160) { 
+    fprintf (stderr, "WARNING: mismatch in data types SecFilt_PS1_V5alt: "OFF_T_FMT" vs %d\n",  size,  160);
+    return (FALSE);
+  }
+
+  /* provide initial values to avoid compiler warnings for non-BYTE_SWAP arch */
+  i = tmp = 0;
+  byte = NULL;
+
+# ifdef BYTE_SWAP
+  byte = (unsigned char *) data;
+  for (i = 0; i < nitems; i++, byte += 160) {
+    /** BYTE SWAP **/
+    SWAP_WORD (0); // MAG
+    SWAP_WORD (4); // MAG_ERR
+    SWAP_WORD (8); // MAG_AP
+    SWAP_WORD (12); // MAG_AP_ERR
+    SWAP_WORD (16); // MAG_AP_STDEV
+    SWAP_WORD (20); // MAG_KRON
+    SWAP_WORD (24); // MAG_KRON_ERR
+    SWAP_WORD (28); // MAG_KRON_STDEV
+    SWAP_WORD (32); // MAG_STDEV
+    SWAP_WORD (36); // MAG_MIN
+    SWAP_WORD (40); // MAG_MAX
+    SWAP_WORD (44); // MAG_CHI
+    SWAP_BYTE (48); // NCODE
+    SWAP_BYTE (50); // NUSED
+    SWAP_BYTE (52); // NUSED_KRON
+    SWAP_BYTE (54); // NUSED_AP
+    SWAP_WORD (56); // FLAGS
+    SWAP_WORD (60); // MAG_PSF_STK
+    SWAP_WORD (64); // FLUX_PSF_STK
+    SWAP_WORD (68); // FLUX_PSF_STK_ERR
+    SWAP_WORD (72); // MAG_KRON_STK
+    SWAP_WORD (76); // FLUX_KRON_STK
+    SWAP_WORD (80); // FLUX_KRON_STK_ERR
+    SWAP_WORD (84); // MAG_AP_STK
+    SWAP_WORD (88); // FLUX_AP_STK
+    SWAP_WORD (92); // FLUX_AP_STK_ERR
+    SWAP_WORD (96); // STACK_PRIMARY_OFF
+    SWAP_WORD (100); // STACK_BEST_OFF
+    SWAP_WORD (104); // MAG_PSF_WRP
+    SWAP_WORD (108); // FLUX_PSF_WRP
+    SWAP_WORD (112); // FLUX_PSF_WRP_ERR
+    SWAP_WORD (116); // FLUX_PSF_WRP_STD
+    SWAP_WORD (120); // MAG_KRON_WRP
+    SWAP_WORD (124); // FLUX_KRON_WRP
+    SWAP_WORD (128); // FLUX_KRON_WRP_ERR
+    SWAP_WORD (132); // FLUX_KRON_WRP_STD
+    SWAP_WORD (136); // MAG_AP_WRP
+    SWAP_WORD (140); // FLUX_AP_WRP
+    SWAP_WORD (144); // FLUX_AP_WRP_ERR
+    SWAP_WORD (148); // FLUX_AP_WRP_STD
+    SWAP_BYTE (152); // NUSED_WRP
+    SWAP_BYTE (154); // NUSED_KRON_WRP
+    SWAP_BYTE (156); // NUSED_AP_WRP
+    SWAP_BYTE (158); // UBERCAL_DIST
+  }
+# endif  
+
+  return (TRUE);
+} 
+
+/*** add test of EXTNAME and header-defined columns? ***/
+/* return internal structure representation */
+SecFilt_PS1_V5alt *gfits_table_get_SecFilt_PS1_V5alt (FTable *ftable, off_t *Ndata, char *swapped) {
+
+  int Ncols;
+  SecFilt_PS1_V5alt *data;
+
+  Ncols = ftable[0].header[0].Naxis[0];
+  if (Ncols != 160) {
+    fprintf (stderr, "ERROR: mis-match in table size: width is %d but should be %d bytes\n", Ncols, 160);
+    return NULL;
+  }
+
+  *Ndata = ftable[0].header[0].Naxis[1];
+  data = (SecFilt_PS1_V5alt *) ftable[0].buffer;
+  if ((swapped == NULL) || (*swapped == FALSE)) {
+    if (!gfits_convert_SecFilt_PS1_V5alt (data, sizeof (SecFilt_PS1_V5alt), *Ndata)) {
+      return NULL;
+    }
+    gfits_table_scale_data (ftable);
+    if (swapped != NULL) *swapped = TRUE;
+  }
+  return (data);
+}
+
+
Index: /trunk/Ohana/src/opihi/cmd.astro/cplot.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/cplot.c	(revision 37245)
+++ /trunk/Ohana/src/opihi/cmd.astro/cplot.c	(revision 37246)
@@ -4,5 +4,5 @@
   
   double ra_prev = 0;
-  int i, kapa, Npts, status, leftside;
+  int i, kapa, Npts, status, leftside, valid, size;
   opihi_flt *x, *y, *r, *d, Rmin, Rmax, Rmid;
   Vector Xvec, Yvec, *xvec, *yvec;
@@ -11,6 +11,9 @@
   if (!style_args (&graphmode, &argc, argv, &kapa)) return FALSE;
 
-  if (argc != 3) {
+  valid  = (argc == 3);
+  valid |= (argc > 4) && !strcmp (argv[3], "where");
+  if (!valid) {
     gprint (GP_ERR, "USAGE: cplot <ra> <dec> [style]\n");
+    gprint (GP_ERR, "   OR: cplot <ra> <dec> [style] where (condition)\n");
     return (FALSE);
   }
@@ -32,4 +35,26 @@
   }
 
+  // tvec is used for logical test (truth vector)
+  Vector *tvec = NULL;
+  if (argc > 4) {
+    char *out = dvomath (argc - 4, &argv[4], &size, 1);
+    if (out == NULL) {
+      print_error ();
+      return FALSE;
+    }
+    if ((tvec = SelectVector (out, OLDVECTOR, TRUE)) == NULL) {
+      gprint (GP_ERR, " invalid logic result\n");
+      DeleteNamedVector (out);
+      free (out);
+      return (FALSE);
+    }
+  }
+
+  if (tvec && tvec[0].Nelements != yvec[0].Nelements) {
+    gprint (GP_ERR, "logic test vector not the same length as data vectors\n");
+    DeleteVector (tvec);
+    return (FALSE);
+  }
+
   SetVector (&Xvec, OPIHI_FLT, xvec[0].Nelements);
   SetVector (&Yvec, OPIHI_FLT, xvec[0].Nelements);
@@ -42,4 +67,9 @@
   Npts = 0;
   for (i = 0; i < Xvec.Nelements; i++, r++, d++) {
+    if (tvec) {
+      int skip = (tvec->type == OPIHI_FLT) ? (tvec->elements.Flt[i] == 0.0) : (tvec->elements.Int[i] == 0.0);
+      if (skip) continue;
+    }
+
     double ra = ohana_normalize_angle (*r);
     while (ra < Rmin) ra += 360.0;
@@ -88,4 +118,6 @@
   free (Yvec.elements.Ptr);
     
+  if (tvec) DeleteVector (tvec);
+
   return (TRUE);
 }
Index: /trunk/Ohana/src/opihi/dvo/gstar.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/gstar.c	(revision 37245)
+++ /trunk/Ohana/src/opihi/dvo/gstar.c	(revision 37246)
@@ -627,5 +627,5 @@
 	      gprint (GP_LOG, "%5.3f ", catalog.measure[Nv].psfQF);
 	      gprint (GP_LOG, "%7.1f ", catalog.measure[Nv].psfChisq);
-	      gprint (GP_LOG, "%3.1f ", catalog.measure[Nv].crNsigma);
+	      // gprint (GP_LOG, "%3.1f ", catalog.measure[Nv].crNsigma);
 	      gprint (GP_LOG, "%4.1f ", catalog.measure[Nv].extNsigma);
 	      gprint (GP_LOG, "%5.1f ", FromShortDegrees(catalog.measure[Nv].theta));
Index: /trunk/Ohana/src/relastro/src/UpdateObjects.c
===================================================================
--- /trunk/Ohana/src/relastro/src/UpdateObjects.c	(revision 37245)
+++ /trunk/Ohana/src/relastro/src/UpdateObjects.c	(revision 37246)
@@ -467,4 +467,10 @@
       catalog[i].average[j].Npos = fit.Nfit;
 
+      // XXX EAM 20140812: for a test, set average.Rstk,Dstk, etc to match R,D
+      catalog[i].average[j].Rstk  = fit.Ro; // RA in degrees
+      catalog[i].average[j].Dstk  = fit.Do; // DEC in degrees
+      catalog[i].average[j].dRstk = fit.dRo; // RA scatter in arcsec
+      catalog[i].average[j].dDstk = fit.dDo; // DEC scatter in arcsec
+
       // unset the NO_ASTROM bit (not(NO_ASTROM) == HAVE_ASTROM)
       catalog[i].average[j].flags &= ~ID_STAR_NO_ASTROM;
Index: /trunk/Ohana/src/relphot/src/setMrelCatalog.c
===================================================================
--- /trunk/Ohana/src/relphot/src/setMrelCatalog.c	(revision 37245)
+++ /trunk/Ohana/src/relphot/src/setMrelCatalog.c	(revision 37246)
@@ -147,4 +147,7 @@
     off_t meas = measureOffset;
 
+    float psfQfMax = 0.0;
+    float psfQfPerfMax = 0.0;
+
     int Nap = 0;
     int Npsf = 0;
@@ -166,4 +169,9 @@
       // SKIP gpc1 forced-warp data
       if (isGPC1warp(measureT[k].photcode)) continue;
+
+      if (isSetMrelFinal) {
+	if (measure[k].psfQF     > psfQfMax)     psfQfMax     = measure[k].psfQF;
+	if (measure[k].psfQFperf > psfQfPerfMax) psfQfPerfMax = measure[k].psfQFperf;
+      }
 
       if (measureT[k].dbFlags & MEAS_BAD) SKIP_THIS_MEAS(Nbad); 
@@ -367,4 +375,7 @@
       secfilt[Nsec].Mmin = psfstats->min;
 
+      secfilt[Nsec].psfQfMax     = psfQfMax;
+      secfilt[Nsec].psfQfPerfMax = psfQfPerfMax;
+
       // NOTE : use the modified weight for apmags as well as psf mags
       liststats (Maplist, daplist, waplist, Nap, apstats);
@@ -457,4 +468,8 @@
   get_tess_ids(&tessID, &projectID, &skycellID, average[0].R, average[0].D);
 
+  average[0].tessID       = tessID;
+  average[0].projectionID = projectID;
+  average[0].skycellID    = skycellID;
+
   int NstackGood = 0;
   int NstackSuspect = 0;
@@ -478,4 +493,7 @@
     int isBad = FALSE;
     int isSuspect = FALSE;
+
+    int Nstack = 0; // number for this photcode
+    int NstackDet = 0; // number for this photcode
 
     off_t meas = measureOffset;
@@ -489,4 +507,7 @@
       if (!code) continue;
       if (code->equiv != thisCode) { continue; }
+
+      Nstack ++;
+      if (measure[k].photFlags2 & 0x00000004 == 0) NstackDet ++;
 
       // clear this bit for all measurements
@@ -615,4 +636,7 @@
     secfilt[Nsec].stackBestOff = k + measureOffset;
 
+    secfilt[Nsec].Nstack    = Nstack;
+    secfilt[Nsec].NstackDet = NstackDet;
+
     // this is the measurement used by secfilt[]
     measure[k].dbFlags |= ID_MEAS_STACK_PHOT_SRC;
@@ -694,4 +718,7 @@
     int Npsf = 0;
     int Nkron = 0;
+
+    int Nwarp = 0;
+    int NwarpGood = 0;
     for (k = 0; k < average[0].Nmeasure; k++, meas++) {
 
@@ -703,4 +730,7 @@
       if (!code) continue;
       if (code->equiv != thisCode) { continue; }
+
+      Nwarp ++;
+      if (measure[k].psfQFperf > 0.85) NwarpGood ++;
 
       measure[k].dbFlags &= ~ID_MEAS_WARP_USED;
@@ -799,4 +829,7 @@
     secfilt[Nsec].NusedKronWrp = Nkron;
     secfilt[Nsec].MkronWrp  = isnan(secfilt[Nsec].FkronWrp) ? NAN : 8.9 - 2.5*log10(secfilt[Nsec].FkronWrp); // 8.9 since flux is in Jy
+
+    secfilt[Nsec].Nwarp     = Nwarp;
+    secfilt[Nsec].NwarpGood = NwarpGood;
   }
   return (TRUE);
Index: /trunk/ippToPsps/config/ippToPspsDbSchema.sql
===================================================================
--- /trunk/ippToPsps/config/ippToPspsDbSchema.sql	(revision 37245)
+++ /trunk/ippToPsps/config/ippToPspsDbSchema.sql	(revision 37246)
@@ -215,5 +215,5 @@
   `stage_id` bigint(20) default NULL,
   UNIQUE KEY `a_key` (`box_id`,`stage_id`,`batch_type`),
-  UNIQUE KEY `stage_id_key` (`stage_id`),
+  UNIQUE KEY `stage_id_key` (`stage_id`,`batch_type`),
   CONSTRAINT `box_key` FOREIGN KEY (`box_id`) REFERENCES `box` (`id`) ON DELETE CASCADE
 ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Index: /trunk/ippToPsps/config/tables.IN.vot
===================================================================
--- /trunk/ippToPsps/config/tables.IN.vot	(revision 37245)
+++ /trunk/ippToPsps/config/tables.IN.vot	(revision 37246)
@@ -597,4 +597,34 @@
       </DATA>
     </TABLE>
+    <TABLE name="TessellationType">
+      <DESCRIPTION>VOTable description of PSPS table TessellationType</DESCRIPTION>
+      <PARAM arraysize="1" datatype="char" ucd="meta.bib.author" name="Author" value="PSPS"></PARAM>
+      <FIELD name="tessID" arraysize="1" datatype="unsignedByte">
+        <DESCRIPTION>tessellation ID</DESCRIPTION>
+      </FIELD>
+      <FIELD name="name" arraysize="100" datatype="char">
+        <DESCRIPTION>tessellation name</DESCRIPTION>
+      </FIELD>
+      <FIELD name="description" arraysize="100" datatype="char">
+        <DESCRIPTION>tessellation description</DESCRIPTION>
+      </FIELD>
+      <DATA>
+        <TABLEDATA>
+          <TR><TD>1</TD><TD>RINGS.V3</TD><TD>Tessellation for the 3pi survey, ex pole regions</TD></TR>
+          <TR><TD>2</TD><TD>CNP.LAP</TD><TD>Tessellation for the 3pi survey pole regions (LOCAL)</TD></TR>
+          <TR><TD>3</TD><TD>MD01.V3</TD><TD>Tessellation for MD01 field (LOCAL)</TD></TR>
+          <TR><TD>4</TD><TD>MD02.V3</TD><TD>Tessellation for MD02 field (LOCAL)</TD></TR>
+          <TR><TD>5</TD><TD>MD03.V3</TD><TD>Tessellation for MD03 field (LOCAL)</TD></TR>
+          <TR><TD>6</TD><TD>MD04.V3</TD><TD>Tessellation for MD04 field (LOCAL)</TD></TR>
+          <TR><TD>7</TD><TD>MD05.V3</TD><TD>Tessellation for MD05 field (LOCAL)</TD></TR>
+          <TR><TD>8</TD><TD>MD06.V3</TD><TD>Tessellation for MD06 field (LOCAL)</TD></TR>
+          <TR><TD>9</TD><TD>MD07.V3</TD><TD>Tessellation for MD07 field (LOCAL)</TD></TR>
+          <TR><TD>10</TD><TD>MD08.V3</TD><TD>Tessellation for MD08 field (LOCAL)</TD></TR>
+          <TR><TD>11</TD><TD>MD09.V3</TD><TD>Tessellation for MD09 field (LOCAL)</TD></TR>
+          <TR><TD>12</TD><TD>MD10.V3</TD><TD>Tessellation for MD10 field (LOCAL)</TD></TR>
+          <TR><TD>13</TD><TD>M31.V4</TD><TD>Tessellation for M31 (LOCAL)</TD></TR>
+        </TABLEDATA>
+      </DATA>
+    </TABLE>
     <TABLE name="ImageFlags">
       <DESCRIPTION>VOTable description of PSPS table ImageFlags</DESCRIPTION>
Index: /trunk/ippToPsps/config/tables.OB.vot
===================================================================
--- /trunk/ippToPsps/config/tables.OB.vot	(revision 37245)
+++ /trunk/ippToPsps/config/tables.OB.vot	(revision 37246)
@@ -12,7 +12,4 @@
         <DESCRIPTION>ODM object identifier index</DESCRIPTION>
       </FIELD>
-      <FIELD name="gcobjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
-        <DESCRIPTION>galactic coordinates ODM object identifier</DESCRIPTION>
-      </FIELD>
       <FIELD name="ippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
         <DESCRIPTION>IPP object number</DESCRIPTION>
@@ -21,7 +18,4 @@
         <DESCRIPTION>Survey ID</DESCRIPTION>
       </FIELD>
-      <FIELD name="skyCellID" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>single float giving PrimaryCell.SkyCell identifier</DESCRIPTION>
-      </FIELD>
       <FIELD name="htmID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
         <DESCRIPTION>HTM index</DESCRIPTION>
@@ -30,4 +24,13 @@
         <DESCRIPTION>Zone index</DESCRIPTION>
       </FIELD>
+      <FIELD name="tessID" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="0">
+        <DESCRIPTION>tessellation ID for primary stack detection</DESCRIPTION>
+      </FIELD>
+      <FIELD name="projectionID" arraysize="1" datatype="short" unit="dimensionless" default="-1">
+        <DESCRIPTION>projection cell identifier for primary stack detection</DESCRIPTION>
+      </FIELD>
+      <FIELD name="skyCellID" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="255">
+        <DESCRIPTION>skycell region identifier for primary stack detection</DESCRIPTION>
+      </FIELD>
       <FIELD name="randomID" arraysize="1" datatype="long" unit="dimensionless" default="0">
 	<DESCRIPTION>Random integer between 0 and 2^32 - 4,394,967,296</DESCRIPTION>
@@ -36,5 +39,5 @@
         <DESCRIPTION>batch id</DESCRIPTION>
       </FIELD>
-      <FIELD name="dvoRegionID" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+      <FIELD name="dvoRegionID" arraysize="1" datatype="int" unit="dimensionless" default="-1">
 	<DESCRIPTION>identifier of dvo spatial region -dvo cat id</DESCRIPTION>
       </FIELD>
@@ -75,9 +78,6 @@
         <DESCRIPTION>Combination of the measurement errors in the Declination measurements if they exist</DESCRIPTION>
       </FIELD>
-      <FIELD name="raMeanStd" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>standard deviation of Right Ascension measuments in detections if they exist</DESCRIPTION>
-      </FIELD>
-      <FIELD name="decMeanStd" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>standard deviation of Declination measurements in detections if they exist</DESCRIPTION>
+      <FIELD name="posMeanChisq" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Chi Square of mean position</DESCRIPTION>
       </FIELD>
       <FIELD name="cx" arraysize="1" datatype="double" unit="dimensionless" default="NA"> 
@@ -136,7 +136,4 @@
         <DESCRIPTION>ODM object identifier index</DESCRIPTION>
       </FIELD>
-      <FIELD name="gcobjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
-        <DESCRIPTION>galactic coordinates ODM object identifier</DESCRIPTION>
-      </FIELD>
       <FIELD name="gQfPerfect" arraysize="1" datatype="float" unit="dimensionless" default="-999">
         <DESCRIPTION>maximum psf QfPerfect from best available g band detections</DESCRIPTION>
@@ -148,15 +145,15 @@
         <DESCRIPTION>estimated error of best available g-band psf AB magnitudes</DESCRIPTION>
       </FIELD>
-      <FIELD name="gnIncPSFMag" arraysize="1" datatype="short" unit="dimensionless" default="-999">
-	<DESCRIPTION>number of best available detections included in mean psfMag</DESCRIPTION>
-      </FIELD>
       <FIELD name="gMeanPSFMagStd" arraysize="1" datatype="float" unit="dimensionless" default="-999">
         <DESCRIPTION>standard deviation of best available measurements - compared with MeanErr this is one measure of true variability</DESCRIPTION>
       </FIELD>
-      <FIELD name="gMinPSFMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
-        <DESCRIPTION>minimum best available PSFMag - min and max are given for PSFMag as they may indicate variability</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gMaxPSFMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
-        <DESCRIPTION>maxiumum best available PSFMag</DESCRIPTION>
+      <FIELD name="gMeanPSFMagMin" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>minimum best available PSFMag - min and max are given for PSFMag as they may indicate variability</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gMeanPSFMagMax" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>maxiumum best available PSFMag</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gMeanPSFMagNpt" arraysize="1" datatype="short" unit="dimensionless" default="-999">
+	<DESCRIPTION>number of best available detections included in mean psfMag</DESCRIPTION>
       </FIELD>
       <FIELD name="gMeanKronMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
@@ -166,9 +163,9 @@
         <DESCRIPTION>estimated error of mean g kron AB magnitude</DESCRIPTION>
       </FIELD>
-      <FIELD name="gnIncKronMag" arraysize="1" datatype="short" unit="dimensionless" default="-999">
-	<DESCRIPTION>number of best available detections included in mean Kron Mag</DESCRIPTION>
-      </FIELD>
       <FIELD name="gMeanKronMagStd" arraysize="1" datatype="float" unit="dimensionless" default="-999">
         <DESCRIPTION>standard deviation of best available measurements</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gMeanKronMagNpt" arraysize="1" datatype="short" unit="dimensionless" default="-999">
+	<DESCRIPTION>number of best available detections included in mean Kron Mag</DESCRIPTION>
       </FIELD>
       <FIELD name="gMeanApMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
@@ -178,11 +175,11 @@
         <DESCRIPTION>estimated error of mean g aperture AB magnitude</DESCRIPTION>
       </FIELD>
-      <FIELD name="gnIncApMag" arraysize="1" datatype="short" unit="dimensionless" default="-999">
-	<DESCRIPTION>number of best available detections included in mean Ap Mag</DESCRIPTION>
-      </FIELD>
       <FIELD name="gMeanApMagStd" arraysize="1" datatype="float" unit="dimensionless" default="-999">
         <DESCRIPTION>standard deviation of best available measurements</DESCRIPTION>
       </FIELD>
-      <FIELD name="gFlags" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+      <FIELD name="gMeanApMagNpt" arraysize="1" datatype="short" unit="dimensionless" default="-999">
+	<DESCRIPTION>number of best available detections included in mean Ap Mag</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gFlags" arraysize="1" datatype="int" unit="dimensionless" default="0">
         <DESCRIPTION>flags for g mean</DESCRIPTION>
       </FIELD>
@@ -196,14 +193,14 @@
         <DESCRIPTION>estimated error of best available r-band psf AB magnitudes</DESCRIPTION>
       </FIELD>
-      <FIELD name="rnIncPSFMag" arraysize="1" datatype="short" unit="dimensionless" default="-999">
-	<DESCRIPTION>number of best available detections included in mean psfMag</DESCRIPTION>
-      </FIELD>
       <FIELD name="rMeanPSFMagStd" arraysize="1" datatype="float" unit="dimensionless" default="-999">
         <DESCRIPTION>standard deviation of best available measurements - compared with MeanErr this is one measure of true variability</DESCRIPTION>
       </FIELD>
-      <FIELD name="rMinPSFMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
-        <DESCRIPTION>minimum best available PSFMag - min and max are given for PSFMag as they may indicate variability</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rMaxPSFMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+      <FIELD name="rMeanPSFMagNpt" arraysize="1" datatype="short" unit="dimensionless" default="-999">
+	<DESCRIPTION>number of best available detections included in mean psfMag</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rMeanPSFMagMin" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>minimum best available PSFMag - min and max are given for PSFMag as they may indicate variability</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rMeanPSFMagMax" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
         <DESCRIPTION>maxiumum best available PSFMag</DESCRIPTION>
       </FIELD>
@@ -214,9 +211,9 @@
         <DESCRIPTION>estimated error of mean r kron AB magnitude</DESCRIPTION>
       </FIELD>
-      <FIELD name="rnIncKronMag" arraysize="1" datatype="short" unit="dimensionless" default="-999">
-	<DESCRIPTION>number of best available detections included in mean Kron Mag</DESCRIPTION>
-      </FIELD>
       <FIELD name="rMeanKronMagStd" arraysize="1" datatype="float" unit="dimensionless" default="-999">
         <DESCRIPTION>standard deviation of best available measurements</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rMeanKronMagNpt" arraysize="1" datatype="short" unit="dimensionless" default="-999">
+	<DESCRIPTION>number of best available detections included in mean Kron Mag</DESCRIPTION>
       </FIELD>
       <FIELD name="rMeanApMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
@@ -226,11 +223,11 @@
         <DESCRIPTION>estimated error of mean r aperture AB magnitude</DESCRIPTION>
       </FIELD>
-      <FIELD name="rnIncApMag" arraysize="1" datatype="short" unit="dimensionless" default="-999">
-	<DESCRIPTION>number of best available detections included in mean Ap Mag</DESCRIPTION>
-      </FIELD>
       <FIELD name="rMeanApMagStd" arraysize="1" datatype="float" unit="dimensionless" default="-999">
         <DESCRIPTION>standard deviation of best available measurements</DESCRIPTION>
       </FIELD>
-      <FIELD name="rFlags" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+      <FIELD name="rMeanApMagNpt" arraysize="1" datatype="short" unit="dimensionless" default="-999">
+	<DESCRIPTION>number of best available detections included in mean Ap Mag</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rFlags" arraysize="1" datatype="int" unit="dimensionless" default="0">
         <DESCRIPTION>flags for r mean</DESCRIPTION>
       </FIELD>
@@ -244,14 +241,14 @@
         <DESCRIPTION>estimated error of best available i-band psf AB magnitudes</DESCRIPTION>
       </FIELD>
-      <FIELD name="inIncPSFMag" arraysize="1" datatype="short" unit="dimensionless" default="-999">
-	<DESCRIPTION>number of best available detections included in mean psfMag</DESCRIPTION>
-      </FIELD>
       <FIELD name="iMeanPSFMagStd" arraysize="1" datatype="float" unit="dimensionless" default="-999">
         <DESCRIPTION>standard deviation of best available measurements - compared with MeanErr this is one measure of true variability</DESCRIPTION>
       </FIELD>
-      <FIELD name="iMinPSFMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
-        <DESCRIPTION>minimum best available PSFMag - min and max are given for PSFMag as they may indicate variability</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iMaxPSFMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+      <FIELD name="iMeanPSFMagNpt" arraysize="1" datatype="short" unit="dimensionless" default="-999">
+	<DESCRIPTION>number of best available detections included in mean psfMag</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iMeanPSFMagMin" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>minimum best available PSFMag - min and max are given for PSFMag as they may indicate variability</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iMeanPSFMagMax" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
         <DESCRIPTION>maxiumum best available PSFMag</DESCRIPTION>
       </FIELD>
@@ -262,9 +259,9 @@
         <DESCRIPTION>estimated error of mean i kron AB magnitude</DESCRIPTION>
       </FIELD>
-      <FIELD name="inIncKronMag" arraysize="1" datatype="short" unit="dimensionless" default="-999">
-	<DESCRIPTION>number of best available detections included in mean Kron Mag</DESCRIPTION>
-      </FIELD>
       <FIELD name="iMeanKronMagStd" arraysize="1" datatype="float" unit="dimensionless" default="-999">
         <DESCRIPTION>standard deviation of best available measurements</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iMeanKronMagNpt" arraysize="1" datatype="short" unit="dimensionless" default="-999">
+	<DESCRIPTION>number of best available detections included in mean Kron Mag</DESCRIPTION>
       </FIELD>
       <FIELD name="iMeanApMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
@@ -274,11 +271,11 @@
         <DESCRIPTION>estimated error of mean i aperture AB magnitude</DESCRIPTION>
       </FIELD>
-      <FIELD name="inIncApMag" arraysize="1" datatype="short" unit="dimensionless" default="-999">
-	<DESCRIPTION>number of best available detections included in mean Ap Mag</DESCRIPTION>
-      </FIELD>
       <FIELD name="iMeanApMagStd" arraysize="1" datatype="float" unit="dimensionless" default="-999">
         <DESCRIPTION>standard deviation of best available measurements</DESCRIPTION>
       </FIELD>
-      <FIELD name="iFlags" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+      <FIELD name="iMeanApMagNpt" arraysize="1" datatype="short" unit="dimensionless" default="-999">
+	<DESCRIPTION>number of best available detections included in mean Ap Mag</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iFlags" arraysize="1" datatype="int" unit="dimensionless" default="0">
         <DESCRIPTION>flags for i mean</DESCRIPTION>
       </FIELD>
@@ -292,14 +289,14 @@
         <DESCRIPTION>estimated error of best available z-band psf AB magnitudes</DESCRIPTION>
       </FIELD>
-      <FIELD name="znIncPSFMag" arraysize="1" datatype="short" unit="dimensionless" default="-999">
-	<DESCRIPTION>number of best available detections included in mean psfMag</DESCRIPTION>
-      </FIELD>
       <FIELD name="zMeanPSFMagStd" arraysize="1" datatype="float" unit="dimensionless" default="-999">
         <DESCRIPTION>standard deviation of best available measurements - compared with MeanErr this is one measure of true variability</DESCRIPTION>
       </FIELD>
-      <FIELD name="zMinPSFMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
-        <DESCRIPTION>minimum best available PSFMag - min and max are given for PSFMag as they may indicate variability</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zMaxPSFMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+      <FIELD name="zMeanPSFMagNpt" arraysize="1" datatype="short" unit="dimensionless" default="-999">
+	<DESCRIPTION>number of best available detections included in mean psfMag</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zMeanPSFMagMin" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>minimum best available PSFMag - min and max are given for PSFMag as they may indicate variability</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zMeanPSFMagMax" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
         <DESCRIPTION>maxiumum best available PSFMag</DESCRIPTION>
       </FIELD>
@@ -310,9 +307,9 @@
         <DESCRIPTION>estimated error of mean z kron AB magnitude</DESCRIPTION>
       </FIELD>
-      <FIELD name="znIncKronMag" arraysize="1" datatype="short" unit="dimensionless" default="-999">
-	<DESCRIPTION>number of best available detections included in mean Kron Mag</DESCRIPTION>
-      </FIELD>
       <FIELD name="zMeanKronMagStd" arraysize="1" datatype="float" unit="dimensionless" default="-999">
         <DESCRIPTION>standard deviation of best available measurements</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zMeanKronMagNpt" arraysize="1" datatype="short" unit="dimensionless" default="-999">
+	<DESCRIPTION>number of best available detections included in mean Kron Mag</DESCRIPTION>
       </FIELD>
       <FIELD name="zMeanApMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
@@ -322,11 +319,11 @@
         <DESCRIPTION>estimated error of mean z aperture AB magnitude</DESCRIPTION>
       </FIELD>
-      <FIELD name="znIncApMag" arraysize="1" datatype="short" unit="dimensionless" default="-999">
-	<DESCRIPTION>number of best available detections included in mean Ap Mag</DESCRIPTION>
-      </FIELD>
       <FIELD name="zMeanApMagStd" arraysize="1" datatype="float" unit="dimensionless" default="-999">
         <DESCRIPTION>standard deviation of best available measurements</DESCRIPTION>
       </FIELD>
-      <FIELD name="zFlags" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+      <FIELD name="zMeanApMagNpt" arraysize="1" datatype="short" unit="dimensionless" default="-999">
+	<DESCRIPTION>number of best available detections included in mean Ap Mag</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zFlags" arraysize="1" datatype="int" unit="dimensionless" default="0">
         <DESCRIPTION>flags for z mean</DESCRIPTION>
       </FIELD>
@@ -340,14 +337,14 @@
         <DESCRIPTION>estimated error of best available y-band psf AB magnitudes</DESCRIPTION>
       </FIELD>
-      <FIELD name="ynIncPSFMag" arraysize="1" datatype="short" unit="dimensionless" default="-999">
-	<DESCRIPTION>number of best available detections included in mean psfMag</DESCRIPTION>
-      </FIELD>
       <FIELD name="yMeanPSFMagStd" arraysize="1" datatype="float" unit="dimensionless" default="-999">
         <DESCRIPTION>standard deviation of best available measurements - compared with MeanErr this is one measure of true variability</DESCRIPTION>
       </FIELD>
-      <FIELD name="yMinPSFMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
-        <DESCRIPTION>minimum best available PSFMag - min and max are given for PSFMag as they may indicate variability</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yMaxPSFMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+      <FIELD name="yMeanPSFMagNpt" arraysize="1" datatype="short" unit="dimensionless" default="-999">
+	<DESCRIPTION>number of best available detections included in mean psfMag</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yMeanPSFMagMin" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>minimum best available PSFMag - min and max are given for PSFMag as they may indicate variability</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yMeanPSFMagMax" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
         <DESCRIPTION>maxiumum best available PSFMag</DESCRIPTION>
       </FIELD>
@@ -358,9 +355,9 @@
         <DESCRIPTION>estimated error of mean y kron AB magnitude</DESCRIPTION>
       </FIELD>
-      <FIELD name="ynIncKronMag" arraysize="1" datatype="short" unit="dimensionless" default="-999">
-	<DESCRIPTION>number of best available detections included in mean Kron Mag</DESCRIPTION>
-      </FIELD>
       <FIELD name="yMeanKronMagStd" arraysize="1" datatype="float" unit="dimensionless" default="-999">
         <DESCRIPTION>standard deviation of best available measurements</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yMeanKronMagNpt" arraysize="1" datatype="short" unit="dimensionless" default="-999">
+	<DESCRIPTION>number of best available detections included in mean Kron Mag</DESCRIPTION>
       </FIELD>
       <FIELD name="yMeanApMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
@@ -370,11 +367,11 @@
         <DESCRIPTION>estimated error of mean y aperture AB magnitude</DESCRIPTION>
       </FIELD>
-      <FIELD name="ynIncApMag" arraysize="1" datatype="short" unit="dimensionless" default="-999">
-	<DESCRIPTION>number of best available detections included in mean Ap Mag</DESCRIPTION>
-      </FIELD>
       <FIELD name="yMeanApMagStd" arraysize="1" datatype="float" unit="dimensionless" default="-999">
         <DESCRIPTION>standard deviation of best available measurements</DESCRIPTION>
       </FIELD>
-      <FIELD name="yFlags" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+      <FIELD name="yMeanApMagNpt" arraysize="1" datatype="short" unit="dimensionless" default="-999">
+	<DESCRIPTION>number of best available detections included in mean Ap Mag</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yFlags" arraysize="1" datatype="int" unit="dimensionless" default="0">
         <DESCRIPTION>flags for y mean</DESCRIPTION>
       </FIELD>
Index: /trunk/ippToPsps/config/tables.P2.vot
===================================================================
--- /trunk/ippToPsps/config/tables.P2.vot	(revision 37245)
+++ /trunk/ippToPsps/config/tables.P2.vot	(revision 37246)
@@ -229,30 +229,21 @@
         <DESCRIPTION> model PSF parameters at chip center</DESCRIPTION>
       </FIELD>
-      <FIELD name="momentXX" arraysize="1" datatype="float" unit="pixels" default="-999">
-        <DESCRIPTION> moment XX</DESCRIPTION>
-      </FIELD>
-      <FIELD name="momentXY" arraysize="1" datatype="float" unit="pixels" default="-999">
-        <DESCRIPTION> moment XY</DESCRIPTION>
-      </FIELD>
-      <FIELD name="momentYY" arraysize="1" datatype="float" unit="pixels" default="-999">
-        <DESCRIPTION> moment YY</DESCRIPTION>
-      </FIELD>
-      <FIELD name="momentM3C" arraysize="1" datatype="float" unit="pixels squared" default="-999">
-        <DESCRIPTION> moment M3C</DESCRIPTION>
-      </FIELD>
-      <FIELD name="momentM3S" arraysize="1" datatype="float" unit="pixels squared" default="-999">
-        <DESCRIPTION> moment M3S</DESCRIPTION>
-      </FIELD>
-      <FIELD name="momentM4C" arraysize="1" datatype="float" unit="pixels squared" default="-999">
-        <DESCRIPTION> moment M4C</DESCRIPTION>
-      </FIELD>
-      <FIELD name="momentM4S" arraysize="1" datatype="float" unit="pixels squared" default="-999">
-        <DESCRIPTION> moment M4S</DESCRIPTION>
-      </FIELD>
-      <FIELD name="momentR1" arraysize="1" datatype="float" unit="pixels" default="-999">
-        <DESCRIPTION> moment R1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="momentRH" arraysize="1" datatype="float" unit="sqrt pixels" default="-999">
-        <DESCRIPTION> moment RH</DESCRIPTION>
+      <FIELD name="momentMajor" arraysize="1" datatype="float" unit="pixels" default="-999">
+        <DESCRIPTION> PSF major axis sigma from 2nd moments </DESCRIPTION>
+      </FIELD>
+      <FIELD name="momentMinor" arraysize="1" datatype="float" unit="pixels" default="-999">
+        <DESCRIPTION> PSF minor axis sigma from 2nd moments</DESCRIPTION>
+      </FIELD>
+      <FIELD name="momentM2C" arraysize="1" datatype="float" unit="pixels squared" default="-999">
+        <DESCRIPTION> moment M2C</DESCRIPTION>
+      </FIELD>
+      <FIELD name="momentM2S" arraysize="1" datatype="float" unit="pixels squared" default="-999">
+        <DESCRIPTION> moment M2S</DESCRIPTION>
+      </FIELD>
+      <FIELD name="momentM3" arraysize="1" datatype="float" unit="pixels squared" default="-999">
+        <DESCRIPTION> moment M3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="momentM4" arraysize="1" datatype="float" unit="pixels squared" default="-999">
+        <DESCRIPTION> moment M4</DESCRIPTION>
       </FIELD>
       <FIELD name="apResid" arraysize="1" datatype="float" unit="magnitude" default="-999">
@@ -392,7 +383,4 @@
         <DESCRIPTION>ODM object identifier</DESCRIPTION>
       </FIELD>
-      <FIELD name="gcobjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
-        <DESCRIPTION>galactic coordinates ODM object identifier</DESCRIPTION>
-      </FIELD>
       <FIELD name="detectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
         <DESCRIPTION>ODM detection identifier</DESCRIPTION>
@@ -530,4 +518,7 @@
         <DESCRIPTION> Aperture fill factor</DESCRIPTION>
       </FIELD>
+      <FIELD name="apRadius" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION> Aperture radius</DESCRIPTION>
+      </FIELD>
       <FIELD name="kronFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
         <DESCRIPTION> Kron flux</DESCRIPTION>
@@ -539,7 +530,4 @@
         <DESCRIPTION> Kron radius</DESCRIPTION>
       </FIELD>
-      <FIELD name="kronRadErr" arraysize="1" datatype="float" unit="raw pixels" default="-999">
-        <DESCRIPTION> Kron radius error</DESCRIPTION>
-      </FIELD>
       <FIELD name="sky" arraysize="1" datatype="float" unit="adu/sec/pixel" default="-999">
         <DESCRIPTION> PSF sky level at source</DESCRIPTION>
@@ -548,5 +536,8 @@
         <DESCRIPTION> estimated error in sky</DESCRIPTION>
       </FIELD>
-      <FIELD name="infoFlag" arraysize="1" datatype="long" unit="dimensionless" default="-999">
+      <FIELD name="infoFlag" arraysize="1" datatype="int" unit="dimensionless" default="-999">
+        <DESCRIPTION>flag indicating provenance information</DESCRIPTION>
+      </FIELD>
+      <FIELD name="infoFlag2" arraysize="1" datatype="int" unit="dimensionless" default="-999">
         <DESCRIPTION>flag indicating provenance information</DESCRIPTION>
       </FIELD>
Index: /trunk/ippToPsps/config/tables.ST.template.vot
===================================================================
--- /trunk/ippToPsps/config/tables.ST.template.vot	(revision 37246)
+++ /trunk/ippToPsps/config/tables.ST.template.vot	(revision 37246)
@@ -0,0 +1,2583 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<VOTABLE version="1.1">
+  <RESOURCE>
+
+    <!-- StackMeta Table ************************************************** -->
+    <TABLE name="StackMeta">
+      <DESCRIPTION>VOTable description of PSPS table StackMeta</DESCRIPTION>
+      <PARAM arraysize="1" datatype="char" ucd="meta.bib.author" name="Author" value="PSPS"></PARAM>              
+      <FIELD name="stackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="batchID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>batchID</DESCRIPTION>
+      </FIELD>
+      <FIELD name="surveyID" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="NA">
+        <DESCRIPTION>survey flag identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="filterID" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="NA">
+        <DESCRIPTION>filter identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="stackTypeID" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="0">
+        <DESCRIPTION>stack type identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="skyCellID" arraysize="1" datatype="float" unit="dimensionless" default="NA">
+        <DESCRIPTION>skycell region identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="photoCalID" arraysize="1" datatype="int" unit="dimensionless" default="NA">
+        <DESCRIPTION>photometry code numerical id</DESCRIPTION>
+      </FIELD>
+      <FIELD name="magSat" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>saturation magnitude level</DESCRIPTION>
+      </FIELD>
+      <FIELD name="analVer" arraysize="1" datatype="short" unit="dimensionless" default="-999">
+        <DESCRIPTION>analysis version index</DESCRIPTION>
+      </FIELD>
+      <FIELD name="expTime" arraysize="1" datatype="float" unit="seconds" default="-999">
+        <DESCRIPTION> exposure time (unit = s)</DESCRIPTION>
+      </FIELD>
+      <FIELD name="nP2Images" arraysize="1" datatype="short" unit="dimensionless" default="-999">
+        <DESCRIPTION>number of P2 images contributing to this cell</DESCRIPTION>
+      </FIELD>
+      <FIELD name="completMag" arraysize="1" datatype="float" unit="magnitudes" default="-999">
+        <DESCRIPTION>95% completion level in mag</DESCRIPTION>
+      </FIELD>
+      <FIELD name="astroScat" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>astrometric scatter for chip</DESCRIPTION>
+      </FIELD>
+      <FIELD name="photoScat" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>photometric scatter for chip</DESCRIPTION>
+      </FIELD>
+      <FIELD name="nAstroRef" arraysize="1" datatype="int" unit="dimensionless" default="-999">
+        <DESCRIPTION>number of astrometric reference sources</DESCRIPTION>
+      </FIELD>
+      <FIELD name="nPhoRef" arraysize="1" datatype="int" unit="dimensionless" default="-999">
+        <DESCRIPTION>number of photometric reference sources</DESCRIPTION>
+      </FIELD>
+      <FIELD name="psfModelID" arraysize="100" datatype="char" unit="dimensionless" default="8000">
+        <DESCRIPTION>PSF model identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="psfFwhm_mean" arraysize="1" datatype="double" unit="arcsec" default="-999">
+        <DESCRIPTION>mean PSF FWHM in the stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="psfFwhm_max" arraysize="1" datatype="double" unit="arcsec" default="-999">
+        <DESCRIPTION>maximum PSF FWHM in the stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="photoZero" arraysize="1" datatype="float" unit="magnitudes" default="-999">
+        <DESCRIPTION>local derived photometric zero point</DESCRIPTION>
+      </FIELD>
+      <FIELD name="photoColor" arraysize="1" datatype="float" unit="magnitudes" default="-999">
+        <DESCRIPTION>local derived photometric color term</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ctype1" arraysize="100" datatype="char" unit="alphanumeric" default="8000">
+        <DESCRIPTION>name of astrometric projection in RA</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ctype2" arraysize="100" datatype="char" unit="alphanumeric" default="8000">
+        <DESCRIPTION>name of astrometric projection in DEC</DESCRIPTION>
+      </FIELD>
+      <FIELD name="crval1" arraysize="1" datatype="double" unit="degrees" default="-999">
+        <DESCRIPTION>RA corresponding to reference pixel</DESCRIPTION>
+      </FIELD>
+      <FIELD name="crval2" arraysize="1" datatype="double" unit="degrees" default="-999">
+        <DESCRIPTION>DEC corresponding to reference pixel</DESCRIPTION>
+      </FIELD>
+      <FIELD name="crpix1" arraysize="1" datatype="double" unit="dimensionless" default="-999">
+        <DESCRIPTION>reference pixel value for RA</DESCRIPTION>
+      </FIELD>
+      <FIELD name="crpix2" arraysize="1" datatype="double" unit="dimensionless" default="-999">
+        <DESCRIPTION>reference pixel value for DEC</DESCRIPTION>
+      </FIELD>
+      <FIELD name="cdelt1" arraysize="1" datatype="double" unit="deg/pixel" default="-999">
+        <DESCRIPTION>scale factor for RA</DESCRIPTION>
+      </FIELD>
+      <FIELD name="cdelt2" arraysize="1" datatype="double" unit="deg/pixel" default="-999">
+        <DESCRIPTION>scale factor for DEC</DESCRIPTION>
+      </FIELD>
+      <FIELD name="pc001001" arraysize="1" datatype="double" unit="dimensionless" default="-999">
+        <DESCRIPTION>elements of rotation/scale matrix</DESCRIPTION>
+      </FIELD>
+      <FIELD name="pc001002" arraysize="1" datatype="double" unit="dimensionless" default="-999">
+        <DESCRIPTION>elements of rotation/scale matrix</DESCRIPTION>
+      </FIELD>
+      <FIELD name="pc002001" arraysize="1" datatype="double" unit="dimensionless" default="-999">
+        <DESCRIPTION>elements of rotation/scale matrix</DESCRIPTION>
+      </FIELD>
+      <FIELD name="pc002002" arraysize="1" datatype="double" unit="dimensionless" default="-999">
+        <DESCRIPTION>elements of rotation/scale matrix</DESCRIPTION>
+      </FIELD>
+      <FIELD name="calibModNum" arraysize="1" datatype="short" unit="dimensionless" default="NA">
+        <DESCRIPTION>calibration modification number</DESCRIPTION>
+      </FIELD>
+      <FIELD name="dataRelease" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="NA">
+        <DESCRIPTION>Data release</DESCRIPTION>
+      </FIELD>
+      <DATA>
+        <TABLEDATA></TABLEDATA>
+      </DATA>
+    </TABLE>
+
+    <!-- StackObjectThin Table ************************************************** -->
+    <TABLE name="StackObjectThin">
+      <DESCRIPTION>VOTable description of PSPS table StackObjectThin</DESCRIPTION>
+      <PARAM arraysize="1" datatype="char" ucd="meta.bib.author" name="Author" value="PSPS"></PARAM>
+      <FIELD name="objID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gcobjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>galactic coordinates ODM object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>IPP object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="surveyID" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="NA">
+        <DESCRIPTION>survey flag identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="skyCellID" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+	<DESCRIPTION>single float giving PrimaryCell.SkyCell identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="randomStackObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+	<DESCRIPTION>random stack id</DESCRIPTION>
+      </FIELD>
+      <FIELD name="stackDetectRowID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+	<DESCRIPTION>identifies which of up to 5 possible stackdetections this row refers to: primary, up to 3 Secondary, 1 best</DESCRIPTION>
+      </FIELD>
+      <FIELD name="primaryDetection" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="255">
+        <DESCRIPTION>identifies if this row is a primary stack detection. True about 80 percent of time</DESCRIPTION>
+      </FIELD>
+      <FIELD name="bestDetection" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="255">
+        <DESCRIPTION>identifies if this row is a best detection or not. Also set if only a primary detection exists.</DESCRIPTION>
+      </FIELD>
+      <FIELD name="dvoRegionID" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>identifier to dvo spatial region</DESCRIPTION>
+      </FIELD>
+      <FIELD name="dataRelease" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="NA">
+        <DESCRIPTION>Data release when this table was loaded.</DESCRIPTION>
+      </FIELD> 
+
+      <!-- g-band values -->
+      <FIELD name="gippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gra" arraysize="1" datatype="double" unit="degrees" default="NA">
+        <DESCRIPTION>right ascension</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gdec" arraysize="1" datatype="double" unit="degrees" default="NA">
+        <DESCRIPTION>declination</DESCRIPTION>
+      </FIELD>
+      <FIELD name="graErr" arraysize="1" datatype="float" unit="arcsec" default="NA">
+        <DESCRIPTION>right ascension error</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gdecErr" arraysize="1" datatype="float" unit="arcsec" default="NA">
+        <DESCRIPTION>declination error</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gPSFMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>g psf AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gPSFMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>estimated error of g psf AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gApMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>g Aperture AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gApMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>estimated error of g Ap AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gKronMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>g kron AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gKronMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>estimated error of g kron AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gsky" arraysize="1" datatype="float" unit="adu/s/arcsec" default="-999">
+        <DESCRIPTION>PSF sky level at source (adu)</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gskyErr" arraysize="1" datatype="float" unit="adu/s/arcsec" default="-999">
+        <DESCRIPTION>estimated error in sky</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ginfoFlag" arraysize="1" datatype="int" unit="dimensionless" default="-999">
+        <DESCRIPTION>informational bits</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ginfoFlag2" arraysize="1" datatype="int" unit="dimensionless" default="0">
+        <DESCRIPTION>informational bits</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gnFrames" arraysize="1" datatype="int" unit="dimensionless" default="-999">
+        <DESCRIPTION>number of frames contributing to source</DESCRIPTION>
+      </FIELD>
+
+      <!-- r-band values -->
+      <FIELD name="rippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rra" arraysize="1" datatype="double" unit="degrees" default="NA">
+        <DESCRIPTION>right ascension</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rdec" arraysize="1" datatype="double" unit="degrees" default="NA">
+        <DESCRIPTION>declination</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rraErr" arraysize="1" datatype="float" unit="arcsec" default="NA">
+        <DESCRIPTION>right ascension error</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rdecErr" arraysize="1" datatype="float" unit="arcsec" default="NA">
+        <DESCRIPTION>declination error</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rPSFMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>r psf AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rPSFMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>estimated error of r psf AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rApMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>r Aperture AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rApMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>estimated error of r Ap AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rKronMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>r kron AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rKronMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>estimated error of r kron AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rsky" arraysize="1" datatype="float" unit="adu/s/arcsec" default="-999">
+        <DESCRIPTION>PSF sky level at source (adu)</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rskyErr" arraysize="1" datatype="float" unit="adu/s/arcsec" default="-999">
+        <DESCRIPTION>estimated error in sky</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rinfoFlag" arraysize="1" datatype="int" unit="dimensionless" default="-999">
+        <DESCRIPTION>informational bits</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rinfoFlag2" arraysize="1" datatype="int" unit="dimensionless" default="0">
+        <DESCRIPTION>informational bits</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rnFrames" arraysize="1" datatype="int" unit="dimensionless" default="-999">
+        <DESCRIPTION>number of frames contributing to source</DESCRIPTION>
+      </FIELD>
+
+      <!-- i-band values -->
+      <FIELD name="iippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="istackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="istackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ira" arraysize="1" datatype="double" unit="degrees" default="NA">
+        <DESCRIPTION>right ascension</DESCRIPTION>
+      </FIELD>
+      <FIELD name="idec" arraysize="1" datatype="double" unit="degrees" default="NA">
+        <DESCRIPTION>declination</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iraErr" arraysize="1" datatype="float" unit="arcsec" default="NA">
+        <DESCRIPTION>right ascension error</DESCRIPTION>
+      </FIELD>
+      <FIELD name="idecErr" arraysize="1" datatype="float" unit="arcsec" default="NA">
+        <DESCRIPTION>declination error</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iPSFMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>i psf AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iPSFMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>estimated error of i psf AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iApMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>i Aperture AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iApMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>estimated error of i Ap AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iKronMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>i kron AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iKronMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>estimated error of i kron AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="isky" arraysize="1" datatype="float" unit="adu/s/arcsec" default="-999">
+        <DESCRIPTION>PSF sky level at source (adu)</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iskyErr" arraysize="1" datatype="float" unit="adu/s/arcsec" default="-999">
+        <DESCRIPTION>estimated error in sky</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iinfoFlag" arraysize="1" datatype="int" unit="dimensionless" default="-999">
+        <DESCRIPTION>informational bits</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iinfoFlag2" arraysize="1" datatype="int" unit="dimensionless" default="0">
+        <DESCRIPTION>informational bits</DESCRIPTION>
+      </FIELD>
+      <FIELD name="inFrames" arraysize="1" datatype="int" unit="dimensionless" default="-999">
+        <DESCRIPTION>number of frames contributing to source</DESCRIPTION>
+      </FIELD>
+
+      <!-- z-band values -->
+      <FIELD name="zippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zra" arraysize="1" datatype="double" unit="degrees" default="NA">
+        <DESCRIPTION>right ascension</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zdec" arraysize="1" datatype="double" unit="degrees" default="NA">
+        <DESCRIPTION>declination</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zraErr" arraysize="1" datatype="float" unit="arcsec" default="NA">
+        <DESCRIPTION>right ascension error</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zdecErr" arraysize="1" datatype="float" unit="arcsec" default="NA">
+        <DESCRIPTION>declination error</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zPSFMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>z psf AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zPSFMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>estimated error of z psf AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zApMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>z Aperture AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zApMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>estimated error of z Ap AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zKronMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>z kron AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zKronMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>estimated error of z kron AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zsky" arraysize="1" datatype="float" unit="adu/s/arcsec" default="-999">
+        <DESCRIPTION>PSF sky level at source (adu)</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zskyErr" arraysize="1" datatype="float" unit="adu/s/arcsec" default="-999">
+        <DESCRIPTION>estimated error in sky</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zinfoFlag" arraysize="1" datatype="int" unit="dimensionless" default="-999">
+        <DESCRIPTION>informational bits</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zinfoFlag2" arraysize="1" datatype="int" unit="dimensionless" default="0">
+        <DESCRIPTION>informational bits</DESCRIPTION>
+      </FIELD>
+      <FIELD name="znFrames" arraysize="1" datatype="int" unit="dimensionless" default="-999">
+        <DESCRIPTION>number of frames contributing to source</DESCRIPTION>
+      </FIELD>
+
+      <!-- y-band values -->
+      <FIELD name="yippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ystackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ystackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yra" arraysize="1" datatype="double" unit="degrees" default="NA">
+        <DESCRIPTION>right ascension</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ydec" arraysize="1" datatype="double" unit="degrees" default="NA">
+        <DESCRIPTION>declination</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yraErr" arraysize="1" datatype="float" unit="arcsec" default="NA">
+        <DESCRIPTION>right ascension error</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ydecErr" arraysize="1" datatype="float" unit="arcsec" default="NA">
+        <DESCRIPTION>declination error</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yPSFMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>y psf AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yPSFMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>estimated error of y psf AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yApMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>y Aperture AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yApMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>estimated error of y Ap AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yKronMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>y kron AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yKronMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>estimated error of y kron AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ysky" arraysize="1" datatype="float" unit="adu/s/arcsec" default="-999">
+        <DESCRIPTION>PSF sky level at source (adu)</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yskyErr" arraysize="1" datatype="float" unit="adu/s/arcsec" default="-999">
+        <DESCRIPTION>estimated error in sky</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yinfoFlag" arraysize="1" datatype="int" unit="dimensionless" default="-999">
+        <DESCRIPTION>informational bits</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yinfoFlag2" arraysize="1" datatype="int" unit="dimensionless" default="0">
+        <DESCRIPTION>informational bits</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ynFrames" arraysize="1" datatype="int" unit="dimensionless" default="-999">
+        <DESCRIPTION>number of frames contributing to source</DESCRIPTION>
+      </FIELD>
+      <DATA>
+        <TABLEDATA></TABLEDATA>
+      </DATA>
+    </TABLE>
+
+    <!-- StackObjecExtra Table ************************************************** -->
+    <TABLE name="StackObjectExtra">
+      <DESCRIPTION>VOTable description of PSPS table StackObject</DESCRIPTION>
+      <PARAM arraysize="1" datatype="char" ucd="meta.bib.author" name="Author" value="PSPS"></PARAM>
+      <FIELD name="objID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gcobjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>galactic coordinates ODM object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>IPP object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="surveyID" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="NA">
+        <DESCRIPTION>survey flag identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="skyCellID" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+	<DESCRIPTION>single float giving PrimaryCell.SkyCell identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="randomStackObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+	<DESCRIPTION>random stack id</DESCRIPTION>
+      </FIELD>
+      <FIELD name="stackDetectRowID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+	<DESCRIPTION>identifies which of up to 5 possible stackdetections this row refers to: primary, up to 3 Secondary, 1 best</DESCRIPTION>
+      </FIELD>
+      <FIELD name="primaryDetection" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="255">
+        <DESCRIPTION>identifies if this row is a primary stack detection. True about 80 percent of time</DESCRIPTION>
+      </FIELD>
+      <FIELD name="bestDetection" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="255">
+        <DESCRIPTION>identifies if this row is a best detection or not. Also set if only a primary detection exists.</DESCRIPTION>
+      </FIELD>
+      <FIELD name="dvoRegionID" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>identifier to dvo spatial region</DESCRIPTION>
+      </FIELD>
+      <FIELD name="dataRelease" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="NA">
+        <DESCRIPTION>Data release when this table was loaded.</DESCRIPTION>
+      </FIELD> 
+
+      <!-- g-band values -->
+      <FIELD name="gippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gxPos" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>measured x on skycell from PSF fit</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gyPos" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>measured y on skycell from PSF fit</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gxPosErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in x</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gyPosErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in y</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gzp" arraysize="1" datatype="float" unit="magnitude" default="0">
+        <DESCRIPTION>zero point offset</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gexpTime" arraysize="1" datatype="float" unit="seconds" default="-999">
+        <DESCRIPTION>exposure time (informational)</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gpsfMajorFWHM" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>PSF width in major axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gpsfMinorFWHM" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>PSF width in minor axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gpsfTheta" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>PSF orientation angle</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gpsfCore" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>PSF core parameter [k in (1 + kz * z^1.66)]</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gpsfLikelihood" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>PSF likelihood</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gpsfQf" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>PSF coverage factor</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gpsfQfPerfect" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>PSF-weighted fraction of arcsec totally unmasked</DESCRIPTION>
+      </FIELD> 
+      <FIELD name="gpsfChiSq" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>PSF-weighted fraction of arcsec to.</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gmomentXX" arraysize="1" datatype="float" unit="arcsec squared" default="-999">
+        <DESCRIPTION> moment XX</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gmomentXY" arraysize="1" datatype="float" unit="arcsec squared" default="-999">
+        <DESCRIPTION> moment XY</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gmomentYY" arraysize="1" datatype="float" unit="arcsec squared" default="-999">
+        <DESCRIPTION> moment YY</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gmomentR1" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION> moment R1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gmomentRH" arraysize="1" datatype="float" unit="sqrt arcsec" default="-999">
+        <DESCRIPTION> moment RH</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gPSFFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>PSF instrumental flux</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gPSFFluxErr" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error in instrumental flux</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gApFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION> Aperture flux</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gApFluxErr" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION> Aperture flux error</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gApFillFac" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Aperture fill factor - redundant with psfQF, keep?</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gApRadius" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>Aperture size</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gKronFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION> Kron flux</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gKronFluxErr" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION> Kron flux error</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gKronRad" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION> Kron radius</DESCRIPTION>
+      </FIELD>
+
+      <!-- r-band values -->
+      <FIELD name="rippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rxPos" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>measured x on skycell from PSF fit</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ryPos" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>measured y on skycell from PSF fit</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rxPosErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in x</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ryPosErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in y</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rzp" arraysize="1" datatype="float" unit="magnitude" default="0">
+        <DESCRIPTION>zero point offset</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rexpTime" arraysize="1" datatype="float" unit="seconds" default="-999">
+        <DESCRIPTION>exposure time (informational)</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rpsfMajorFWHM" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>PSF width in major axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rpsfMinorFWHM" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>PSF width in minor axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rpsfTheta" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>PSF orientation angle</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rpsfCore" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>PSF core parameter [k in (1 + kz * z^1.66)]</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rpsfLikelihood" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>PSF likelihood</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rpsfQf" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>PSF coverage factor</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rpsfQfPerfect" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>PSF-weighted fraction of arcsec totally unmasked</DESCRIPTION>
+      </FIELD> 
+      <FIELD name="rpsfChiSq" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>PSF-weighted fraction of arcsec to.</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rmomentXX" arraysize="1" datatype="float" unit="arcsec squared" default="-999">
+        <DESCRIPTION> moment XX</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rmomentXY" arraysize="1" datatype="float" unit="arcsec squared" default="-999">
+        <DESCRIPTION> moment XY</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rmomentYY" arraysize="1" datatype="float" unit="arcsec squared" default="-999">
+        <DESCRIPTION> moment YY</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rmomentR1" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION> moment R1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rmomentRH" arraysize="1" datatype="float" unit="sqrt arcsec" default="-999">
+        <DESCRIPTION> moment RH</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rPSFFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>PSF instrumental flux</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rPSFFluxErr" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error in instrumental flux</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rApFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION> Aperture flux</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rApFluxErr" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION> Aperture flux error</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rApFillFac" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Aperture fill factor - redundant with psfQF, keep?</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rApRadius" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>Aperture size</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rKronFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION> Kron flux</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rKronFluxErr" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION> Kron flux error</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rKronRad" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION> Kron radius</DESCRIPTION>
+      </FIELD>
+
+      <!-- i-band values -->
+      <FIELD name="iippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="istackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="istackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ixPos" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>measured x on skycell from PSF fit</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iyPos" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>measured y on skycell from PSF fit</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ixPosErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in x</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iyPosErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in y</DESCRIPTION>
+      </FIELD>
+      <FIELD name="izp" arraysize="1" datatype="float" unit="magnitude" default="0">
+        <DESCRIPTION>zero point offset</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iexpTime" arraysize="1" datatype="float" unit="seconds" default="-999">
+        <DESCRIPTION>exposure time (informational)</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ipsfMajorFWHM" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>PSF width in major axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ipsfMinorFWHM" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>PSF width in minor axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ipsfTheta" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>PSF orientation angle</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ipsfCore" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>PSF core parameter [k in (1 + kz * z^1.66)]</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ipsfLikelihood" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>PSF likelihood</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ipsfQf" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>PSF coverage factor</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ipsfQfPerfect" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>PSF-weighted fraction of arcsec totally unmasked</DESCRIPTION>
+      </FIELD> 
+      <FIELD name="ipsfChiSq" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>PSF-weighted fraction of arcsec to.</DESCRIPTION>
+      </FIELD>
+      <FIELD name="imomentXX" arraysize="1" datatype="float" unit="arcsec squared" default="-999">
+        <DESCRIPTION> moment XX</DESCRIPTION>
+      </FIELD>
+      <FIELD name="imomentXY" arraysize="1" datatype="float" unit="arcsec squared" default="-999">
+        <DESCRIPTION> moment XY</DESCRIPTION>
+      </FIELD>
+      <FIELD name="imomentYY" arraysize="1" datatype="float" unit="arcsec squared" default="-999">
+        <DESCRIPTION> moment YY</DESCRIPTION>
+      </FIELD>
+      <FIELD name="imomentR1" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION> moment R1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="imomentRH" arraysize="1" datatype="float" unit="sqrt arcsec" default="-999">
+        <DESCRIPTION> moment RH</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iPSFFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>PSF instrumental flux</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iPSFFluxErr" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error in instrumental flux</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iApFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION> Aperture flux</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iApFluxErr" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION> Aperture flux error</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iApFillFac" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Aperture fill factor - redundant with psfQF, keep?</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iApRadius" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>Aperture size</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iKronFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION> Kron flux</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iKronFluxErr" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION> Kron flux error</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iKronRad" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION> Kron radius</DESCRIPTION>
+      </FIELD>
+
+      <!-- z-band values -->
+      <FIELD name="zippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zxPos" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>measured x on skycell from PSF fit</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zyPos" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>measured y on skycell from PSF fit</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zxPosErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in x</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zyPosErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in y</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zzp" arraysize="1" datatype="float" unit="magnitude" default="0">
+        <DESCRIPTION>zero point offset</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zexpTime" arraysize="1" datatype="float" unit="seconds" default="-999">
+        <DESCRIPTION>exposure time (informational)</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zpsfMajorFWHM" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>PSF width in major axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zpsfMinorFWHM" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>PSF width in minor axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zpsfTheta" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>PSF orientation angle</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zpsfCore" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>PSF core parameter [k in (1 + kz * z^1.66)]</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zpsfLikelihood" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>PSF likelihood</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zpsfQf" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>PSF coverage factor</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zpsfQfPerfect" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>PSF-weighted fraction of arcsec totally unmasked</DESCRIPTION>
+      </FIELD> 
+      <FIELD name="zpsfChiSq" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>PSF-weighted fraction of arcsec to.</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zmomentXX" arraysize="1" datatype="float" unit="arcsec squared" default="-999">
+        <DESCRIPTION> moment XX</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zmomentXY" arraysize="1" datatype="float" unit="arcsec squared" default="-999">
+        <DESCRIPTION> moment XY</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zmomentYY" arraysize="1" datatype="float" unit="arcsec squared" default="-999">
+        <DESCRIPTION> moment YY</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zmomentR1" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION> moment R1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zmomentRH" arraysize="1" datatype="float" unit="sqrt arcsec" default="-999">
+        <DESCRIPTION> moment RH</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zPSFFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>PSF instrumental flux</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zPSFFluxErr" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error in instrumental flux</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zApFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION> Aperture flux</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zApFluxErr" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION> Aperture flux error</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zApFillFac" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Aperture fill factor - redundant with psfQF, keep?</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zApRadius" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>Aperture size</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zKronFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION> Kron flux</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zKronFluxErr" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION> Kron flux error</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zKronRad" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION> Kron radius</DESCRIPTION>
+      </FIELD>
+
+      <!-- y-band values -->
+      <FIELD name="yippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ystackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ystackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yxPos" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>measured x on skycell from PSF fit</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yyPos" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>measured y on skycell from PSF fit</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yxPosErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in x</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yyPosErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in y</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yzp" arraysize="1" datatype="float" unit="magnitude" default="0">
+        <DESCRIPTION>zero point offset</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yexpTime" arraysize="1" datatype="float" unit="seconds" default="-999">
+        <DESCRIPTION>exposure time (informational)</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ypsfMajorFWHM" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>PSF width in major axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ypsfMinorFWHM" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>PSF width in minor axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ypsfTheta" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>PSF orientation angle</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ypsfCore" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>PSF core parameter [k in (1 + kz * z^1.66)]</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ypsfLikelihood" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>PSF likelihood</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ypsfQf" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>PSF coverage factor</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ypsfQfPerfect" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>PSF-weighted fraction of arcsec totally unmasked</DESCRIPTION>
+      </FIELD> 
+      <FIELD name="ypsfChiSq" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>PSF-weighted fraction of arcsec to.</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ymomentXX" arraysize="1" datatype="float" unit="arcsec squared" default="-999">
+        <DESCRIPTION> moment XX</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ymomentXY" arraysize="1" datatype="float" unit="arcsec squared" default="-999">
+        <DESCRIPTION> moment XY</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ymomentYY" arraysize="1" datatype="float" unit="arcsec squared" default="-999">
+        <DESCRIPTION> moment YY</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ymomentR1" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION> moment R1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ymomentRH" arraysize="1" datatype="float" unit="sqrt arcsec" default="-999">
+        <DESCRIPTION> moment RH</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yPSFFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>PSF instrumental flux</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yPSFFluxErr" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error in instrumental flux</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yApFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION> Aperture flux</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yApFluxErr" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION> Aperture flux error</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yApFillFac" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Aperture fill factor - redundant with psfQF, keep?</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yApRadius" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>Aperture size</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yKronFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION> Kron flux</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yKronFluxErr" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION> Kron flux error</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yKronRad" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION> Kron radius</DESCRIPTION>
+      </FIELD>
+
+      <DATA>
+        <TABLEDATA></TABLEDATA>
+      </DATA>
+    </TABLE>
+
+    <!-- StackApFlx Table ************************************************** -->
+    <TABLE name="StackApFlx">
+      <DESCRIPTION>VOTable description of PSPS table StackApFlx</DESCRIPTION>
+      <PARAM arraysize="1" datatype="char" ucd="meta.bib.author" name="Author" value="PSPS"></PARAM>
+      <FIELD name="objID" arraysize="1" datatype="long" unit="dimensionless"  default="NA">
+        <DESCRIPTION>ODM object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gcobjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>galactic coordinates ODM object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>IPP object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="surveyID" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="0">
+        <DESCRIPTION>survey flag identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="skyCellID" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+	<DESCRIPTION>single float giving PrimaryCell.SkyCell identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="randomStackObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+	<DESCRIPTION>random stack id</DESCRIPTION>
+      </FIELD>
+      <FIELD name="stackDetectRowID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+	<DESCRIPTION>identifies which of up to 5 possible stackdetections thisrow refers to: primary, up to 3 Secondary, 1 best</DESCRIPTION>
+      </FIELD>
+      <FIELD name="primaryDetection" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="255">
+        <DESCRIPTION>identifies if this row is a primary stack detection. True about 80 percent of time</DESCRIPTION>
+      </FIELD>
+      <FIELD name="bestDetection" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="255">
+        <DESCRIPTION>identifies if this row is a best detection or not. Also set if only a primary detection exists.</DESCRIPTION>
+      </FIELD>
+      <FIELD name="dvoRegionID" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>identifier to dvo spatial region</DESCRIPTION>
+      </FIELD>
+      <FIELD name="dataRelease" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="NA">
+        <DESCRIPTION>Data release when this table was loaded.</DESCRIPTION>
+      </FIELD> 
+
+      <!-- g-band values -->
+      <FIELD name="gstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error in flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR3Fill" arraysize="1" datatype="float"  unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error in flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is gflxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in gflxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c1flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR3Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c1flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c1flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error in c2flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR3Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error in c2flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error in c2flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
+      </FIELD>
+
+      <!-- r-band values -->
+      <FIELD name="rstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error in flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR3Fill" arraysize="1" datatype="float"  unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error in flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is gflxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in gflxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c1flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR3Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c1flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c1flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c2flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR3Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c2flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c2flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
+      </FIELD>
+
+      <!-- i-band values -->
+      <FIELD name="istackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="istackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error in flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR3Fill" arraysize="1" datatype="float"  unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error in flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is gflxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in gflxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c1flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR3Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c1flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c1flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c2flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR3Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c2flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c2flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
+      </FIELD>
+
+      <!-- z-band values -->
+      <FIELD name="zstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error in flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR3Fill" arraysize="1" datatype="float"  unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error in flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is gflxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in gflxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c1flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR3Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c1flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c1flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c2flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR3Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c2flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c2flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
+      </FIELD>
+
+      <!-- y-band values -->
+      <FIELD name="ystackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ystackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error in flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR3Fill" arraysize="1" datatype="float"  unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error in flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is gflxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in gflxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c1flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR3Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c1flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c1flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c2flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR3Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c2flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c2flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
+      </FIELD>
+      <DATA>
+        <TABLEDATA></TABLEDATA>
+      </DATA>
+    </TABLE>
+
+    <!-- StackModelFitThin Table ************************************************** -->
+    <TABLE name="StackModelFitThin">
+      <DESCRIPTION>VOTable description of PSPS table StackModelFit</DESCRIPTION>
+      <PARAM arraysize="1" datatype="char" ucd="meta.bib.author" name="Author" value="PSPS"></PARAM>
+      <FIELD name="objID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gcobjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>galactic coordinates ODM object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>IPP object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="surveyID" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="NA">
+        <DESCRIPTION>survey flag identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="skyCellID" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+	<DESCRIPTION>single float giving PrimaryCell.SkyCell identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="randomStackObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+	<DESCRIPTION>random stack id</DESCRIPTION>
+      </FIELD>
+      <FIELD name="stackDetectRowID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+	<DESCRIPTION>identifies which of up to 5 possible stackdetections thisrow refers to: primary, up to 3 Secondary, 1 best</DESCRIPTION>
+      </FIELD>
+      <FIELD name="primaryDetection" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="255">
+        <DESCRIPTION>identifies if this row is a primary stack detection. True about 80 percent of time</DESCRIPTION>
+      </FIELD>
+      <FIELD name="bestDetection" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="255">
+        <DESCRIPTION>identifies if this row is a best detection or not. Also set if only a primary detection exists.</DESCRIPTION>
+      </FIELD>
+      <FIELD name="dvoRegionID" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>identifier to dvo spatial region</DESCRIPTION>
+      </FIELD>
+      <FIELD name="dataRelease" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="NA">
+        <DESCRIPTION>Data release when this table was loaded.</DESCRIPTION>
+      </FIELD>
+
+      <!-- XXX-band values -->
+      <FIELD name="XXXippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp detect identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXS2" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>(un)smoothness (Cheng 2012, Simard 2002)</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXlogRT" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>total residual from elliptically symmetric model</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXlogRA" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>asymmetric residual from elliptically symmetric model</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXlogC" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>concentration index (Petrosian R_50 / R_90</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXlogA" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>log of asymmetry index (Gyory & Bell 2010)</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXbumpy" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Blakeslee bumpiness</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXhalfLightRad" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>half-light radius</DESCRIPTION>
+      </FIELD>
+
+      <DATA>
+	<TABLEDATA></TABLEDATA>
+      </DATA>
+    </TABLE>
+
+    <!-- StackModelFitExp Table ************************************************** -->
+    <TABLE name="StackModelFitExp">
+      <DESCRIPTION>VOTable description of PSPS table StackModelFit</DESCRIPTION>
+      <PARAM arraysize="1" datatype="char" ucd="meta.bib.author" name="Author" value="PSPS"></PARAM>
+      <FIELD name="objID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gcobjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>galactic coordinates ODM object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>IPP object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="surveyID" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="NA">
+        <DESCRIPTION>survey flag identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="skyCellID" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+	<DESCRIPTION>single float giving PrimaryCell.SkyCell identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="randomStackObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+	<DESCRIPTION>random stack id</DESCRIPTION>
+      </FIELD>
+      <FIELD name="stackDetectRowID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+	<DESCRIPTION>identifies which of up to 5 possible stackdetections thisrow refers to: primary, up to 3 Secondary, 1 best</DESCRIPTION>
+      </FIELD>
+      <FIELD name="primaryDetection" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="255">
+        <DESCRIPTION>identifies if this row is a primary stack detection. True about 80 percent of time</DESCRIPTION>
+      </FIELD>
+      <FIELD name="bestDetection" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="255">
+        <DESCRIPTION>identifies if this row is a best detection or not. Also set if only a primary detection exists.</DESCRIPTION>
+      </FIELD>
+      <FIELD name="dvoRegionID" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>identifier to dvo spatial region</DESCRIPTION>
+      </FIELD>
+      <FIELD name="dataRelease" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="NA">
+        <DESCRIPTION>Data release when this table was loaded.</DESCRIPTION>
+      </FIELD>
+
+      <!-- XXX-band values -->
+      <FIELD name="XXXippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp detect identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXexpRadius" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>Exponential fit radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXexpRadiusErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in Exponential fit radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXexpFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Exponential fit flux</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXexpFluxErr" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error in expFlux</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXexpAb" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Exponential fit axis ratio</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXexpAbErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated error in Exponential fit axis ratio</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXexpPhi" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>estmated phi of Exponential axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXexpPhiErr" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>estmated error of phi of Exponential axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXraExpOff" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Offset in RA of Exponential fit from PSF RA</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXdecExpOff" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Offset in DEC of Exponential fit from PSF DEC</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXraExpOffErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated error in raExpOff</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXdecExpOffErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated error in decExpOff</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXexpCf" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Exponential fit coverage factor</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXexpLikelihood" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Exponential fit likelihood factor</DESCRIPTION>
+      </FIELD>
+
+      <DATA>
+	<TABLEDATA></TABLEDATA>
+      </DATA>
+    </TABLE>
+
+    <!-- StackModelFitDeV Table ************************************************** -->
+    <TABLE name="StackModelFitDeV">
+      <DESCRIPTION>VOTable description of PSPS table StackModelFit</DESCRIPTION>
+      <PARAM arraysize="1" datatype="char" ucd="meta.bib.author" name="Author" value="PSPS"></PARAM>
+      <FIELD name="objID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gcobjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>galactic coordinates ODM object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>IPP object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="surveyID" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="NA">
+        <DESCRIPTION>survey flag identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="skyCellID" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+	<DESCRIPTION>single float giving PrimaryCell.SkyCell identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="randomStackObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+	<DESCRIPTION>random stack id</DESCRIPTION>
+      </FIELD>
+      <FIELD name="stackDetectRowID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+	<DESCRIPTION>identifies which of up to 5 possible stackdetections thisrow refers to: primary, up to 3 Secondary, 1 best</DESCRIPTION>
+      </FIELD>
+      <FIELD name="primaryDetection" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="255">
+        <DESCRIPTION>identifies if this row is a primary stack detection. True about 80 percent of time</DESCRIPTION>
+      </FIELD>
+      <FIELD name="bestDetection" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="255">
+        <DESCRIPTION>identifies if this row is a best detection or not. Also set if only a primary detection exists.</DESCRIPTION>
+      </FIELD>
+      <FIELD name="dvoRegionID" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>identifier to dvo spatial region</DESCRIPTION>
+      </FIELD>
+      <FIELD name="dataRelease" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="NA">
+        <DESCRIPTION>Data release when this table was loaded.</DESCRIPTION>
+      </FIELD>
+
+      <!-- XXX-band values -->
+      <FIELD name="XXXippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp detect identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXdeVRadius" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>deVaucouleurs radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXdeVRadiusErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in deVaucouleurs radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXdeVFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>deVaucouleurs magntiude</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXdeVFluxErr" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error in deV_mag</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXdeVAb" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>deVaucoulerus axis ratio</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXdeVAbErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated error in deVaucoulerus axis ratio</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXdeVPhi" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>estmated phi of deVaucouleurs axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXdeVPhiErr" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>estmated error of phi of deVaucouleurs axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXraDeVOff" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>Offset in RA of deVaucouleurs fit from PSF RA</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXdecDeVOff" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>Offset in DEC of deVaucouleurs fit from PSF DEC</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXraDeVOffErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in ra offset</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXdecDeVOffErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in dec offset</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXdeVCf" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>deVaucouleurs fit coverage factor</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXdeVLikelihood" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>deVaucouleurs fit likelihood factor</DESCRIPTION>
+      </FIELD>
+
+      <DATA>
+	<TABLEDATA></TABLEDATA>
+      </DATA>
+    </TABLE>
+
+    <!-- StackModelFitSer Table ************************************************** -->
+    <TABLE name="StackModelFitSer">
+      <DESCRIPTION>VOTable description of PSPS table StackModelFit</DESCRIPTION>
+      <PARAM arraysize="1" datatype="char" ucd="meta.bib.author" name="Author" value="PSPS"></PARAM>
+      <FIELD name="objID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gcobjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>galactic coordinates ODM object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>IPP object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="surveyID" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="NA">
+        <DESCRIPTION>survey flag identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="skyCellID" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+	<DESCRIPTION>single float giving PrimaryCell.SkyCell identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="randomStackObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+	<DESCRIPTION>random stack id</DESCRIPTION>
+      </FIELD>
+      <FIELD name="stackDetectRowID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+	<DESCRIPTION>identifies which of up to 5 possible stackdetections thisrow refers to: primary, up to 3 Secondary, 1 best</DESCRIPTION>
+      </FIELD>
+      <FIELD name="primaryDetection" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="255">
+        <DESCRIPTION>identifies if this row is a primary stack detection. True about 80 percent of time</DESCRIPTION>
+      </FIELD>
+      <FIELD name="bestDetection" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="255">
+        <DESCRIPTION>identifies if this row is a best detection or not. Also set if only a primary detection exists.</DESCRIPTION>
+      </FIELD>
+      <FIELD name="dvoRegionID" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>identifier to dvo spatial region</DESCRIPTION>
+      </FIELD>
+      <FIELD name="dataRelease" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="NA">
+        <DESCRIPTION>Data release when this table was loaded.</DESCRIPTION>
+      </FIELD>
+
+      <!-- XXX-band values -->
+      <FIELD name="XXXippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp detect identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXserRadius" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>Sersic radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXserRadiusErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in Sersic radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXserFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Sersic Flux</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXserFluxErr" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error in serFlux</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXserAb" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Sersic axis ratio</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXserAbErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated error in Sersic axis ratio</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXserNu" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Sersic index</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXserNuErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated error in Sersic index</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXserPhi" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>estmated phi of Sersic axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXserPhiErr" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>estmated error of phi of Sersic axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXraSerOff" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Offset in RA of Sersic fit from PSF RA</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXdecSerOff" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Offset in DEC of Sersic fit from PSF DEC</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXraSerOffErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated error in raSerOff</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXdecSerOffErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated error in decSerOff</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXserCf" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Sersic fit coverage factor</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXserLikelihood" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Sersic fit likelihood factor</DESCRIPTION>
+      </FIELD>
+
+      <DATA>
+	<TABLEDATA></TABLEDATA>
+      </DATA>
+    </TABLE>
+
+    <!-- StackModelFitFlx Table ************************************************** -->
+    <TABLE name="StackModelFitFlx">
+      <DESCRIPTION>VOTable description of PSPS table StackModelFit</DESCRIPTION>
+      <PARAM arraysize="1" datatype="char" ucd="meta.bib.author" name="Author" value="PSPS"></PARAM>
+      <FIELD name="objID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gcobjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>galactic coordinates ODM object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>IPP object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="surveyID" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="NA">
+        <DESCRIPTION>survey flag identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="skyCellID" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+	<DESCRIPTION>single float giving PrimaryCell.SkyCell identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="randomStackObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+	<DESCRIPTION>random stack id</DESCRIPTION>
+      </FIELD>
+      <FIELD name="stackDetectRowID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+	<DESCRIPTION>identifies which of up to 5 possible stackdetections thisrow refers to: primary, up to 3 Secondary, 1 best</DESCRIPTION>
+      </FIELD>
+      <FIELD name="primaryDetection" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="255">
+        <DESCRIPTION>identifies if this row is a primary stack detection. True about 80 percent of time</DESCRIPTION>
+      </FIELD>
+      <FIELD name="bestDetection" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="255">
+        <DESCRIPTION>identifies if this row is a best detection or not. Also set if only a primary detection exists.</DESCRIPTION>
+      </FIELD>
+      <FIELD name="dvoRegionID" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>identifier to dvo spatial region</DESCRIPTION>
+      </FIELD>
+      <FIELD name="dataRelease" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="NA">
+        <DESCRIPTION>Data release when this table was loaded.</DESCRIPTION>
+      </FIELD>
+
+      <!-- XXX-band values -->
+      <FIELD name="XXXippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp detect identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXflxR1" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXflxR1Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is flxR1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXflxR1Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXflxR1Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXflxR2" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXflxR2Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is flxR2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXflxR2Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXflxR2Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXflxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXflxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXflxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXflxR3Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXflxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXflxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXflxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXflxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXflxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXflxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXflxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXflxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXflxR6" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXflxR6Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is flxR6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXflxR6Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXflxR6Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXflxR7" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXflxR7Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is flxR7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXflxR7Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXflxR7Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXflxR8" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXflxR8Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is flxR8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXflxR8Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXflxR8Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXflxR9" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXflxR9Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is flxR9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXflxR9Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXflxR9Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXflxR10" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXflxR10Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is flxR10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXflxR10Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXflxR10Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R10</DESCRIPTION>
+      </FIELD>
+
+      <DATA>
+	<TABLEDATA></TABLEDATA>
+      </DATA>
+    </TABLE>
+
+    <!-- StackModelFitFlxC1 Table ************************************************** -->
+    <TABLE name="StackModelFitFlxC1">
+      <DESCRIPTION>VOTable description of PSPS table StackModelFit</DESCRIPTION>
+      <PARAM arraysize="1" datatype="char" ucd="meta.bib.author" name="Author" value="PSPS"></PARAM>
+      <FIELD name="objID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gcobjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>galactic coordinates ODM object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>IPP object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="surveyID" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="NA">
+        <DESCRIPTION>survey flag identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="skyCellID" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+	<DESCRIPTION>single float giving PrimaryCell.SkyCell identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="randomStackObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+	<DESCRIPTION>random stack id</DESCRIPTION>
+      </FIELD>
+      <FIELD name="stackDetectRowID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+	<DESCRIPTION>identifies which of up to 5 possible stackdetections thisrow refers to: primary, up to 3 Secondary, 1 best</DESCRIPTION>
+      </FIELD>
+      <FIELD name="primaryDetection" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="255">
+        <DESCRIPTION>identifies if this row is a primary stack detection. True about 80 percent of time</DESCRIPTION>
+      </FIELD>
+      <FIELD name="bestDetection" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="255">
+        <DESCRIPTION>identifies if this row is a best detection or not. Also set if only a primary detection exists.</DESCRIPTION>
+      </FIELD>
+      <FIELD name="dvoRegionID" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>identifier to dvo spatial region</DESCRIPTION>
+      </FIELD>
+      <FIELD name="dataRelease" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="NA">
+        <DESCRIPTION>Data release when this table was loaded.</DESCRIPTION>
+      </FIELD>
+
+      <!-- XXX-band values -->
+      <FIELD name="XXXippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp detect identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc1flxR1" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc1flxR1Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c1flxR1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc1flxR1Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc1flxR1Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc1flxR2" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc1flxR2Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c1flxR2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc1flxR2Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc1flxR2Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc1flxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc1flxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c1flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc1flxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc1flxR3Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc1flxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc1flxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c1flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc1flxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc1flxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc1flxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc1flxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c1flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc1flxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc1flxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc1flxR6" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc1flxR6Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c1flxR6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc1flxR6Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc1flxR6Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc1flxR7" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc1flxR7Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c1flxR7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc1flxR7Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc1flxR7Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc1flxR8" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc1flxR8Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c1flxR8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc1flxR8Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc1flxR8Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc1flxR9" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc1flxR9Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c1flxR9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc1flxR9Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc1flxR9Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc1flxR10" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc1flxR10Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c1flxR10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc1flxR10Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc1flxR10Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R10</DESCRIPTION>
+      </FIELD>
+
+      <DATA>
+	<TABLEDATA></TABLEDATA>
+      </DATA>
+    </TABLE>
+
+    <!-- StackModelFitFlxC2 Table ************************************************** -->
+    <TABLE name="StackModelFitFlxC2">
+      <DESCRIPTION>VOTable description of PSPS table StackModelFit</DESCRIPTION>
+      <PARAM arraysize="1" datatype="char" ucd="meta.bib.author" name="Author" value="PSPS"></PARAM>
+      <FIELD name="objID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gcobjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>galactic coordinates ODM object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>IPP object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="surveyID" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="NA">
+        <DESCRIPTION>survey flag identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="skyCellID" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+	<DESCRIPTION>single float giving PrimaryCell.SkyCell identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="randomStackObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+	<DESCRIPTION>random stack id</DESCRIPTION>
+      </FIELD>
+      <FIELD name="stackDetectRowID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+	<DESCRIPTION>identifies which of up to 5 possible stackdetections thisrow refers to: primary, up to 3 Secondary, 1 best</DESCRIPTION>
+      </FIELD>
+      <FIELD name="primaryDetection" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="255">
+        <DESCRIPTION>identifies if this row is a primary stack detection. True about 80 percent of time</DESCRIPTION>
+      </FIELD>
+      <FIELD name="bestDetection" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="255">
+        <DESCRIPTION>identifies if this row is a best detection or not. Also set if only a primary detection exists.</DESCRIPTION>
+      </FIELD>
+      <FIELD name="dvoRegionID" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>identifier to dvo spatial region</DESCRIPTION>
+      </FIELD>
+      <FIELD name="dataRelease" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="NA">
+        <DESCRIPTION>Data release when this table was loaded.</DESCRIPTION>
+      </FIELD>
+
+      <!-- XXX-band values -->
+      <FIELD name="XXXippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp detect identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc2flxR1" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc2flxR1Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c2flxR1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc2flxR1Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc2flxR1Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc2flxR2" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc2flxR2Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c2flxR2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc2flxR2Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc2flxR2Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc2flxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc2flxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c2flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc2flxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc2flxR3Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc2flxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc2flxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c2flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc2flxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc2flxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc2flxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc2flxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c2flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc2flxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc2flxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc2flxR6" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc2flxR6Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c2flxR6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc2flxR6Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc2flxR6Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc2flxR7" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc2flxR7Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c2flxR7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc2flxR7Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc2flxR7Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc2flxR8" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc2flxR8Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c2flxR8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc2flxR8Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc2flxR8Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc2flxR9" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc2flxR9Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c2flxR9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc2flxR9Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc2flxR9Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc2flxR10" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Flux inside r = 10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc2flxR10Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error is c2flxR10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc2flxR10Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXc2flxR10Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R10</DESCRIPTION>
+      </FIELD>
+
+      <DATA>
+	<TABLEDATA></TABLEDATA>
+      </DATA>
+    </TABLE>
+
+    <!-- StackModelFitPet Table ************************************************** -->
+    <TABLE name="StackModelFitPet">
+      <DESCRIPTION>VOTable description of PSPS table StackModelFit</DESCRIPTION>
+      <PARAM arraysize="1" datatype="char" ucd="meta.bib.author" name="Author" value="PSPS"></PARAM>
+      <FIELD name="objID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gcobjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>galactic coordinates ODM object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>IPP object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="surveyID" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="NA">
+        <DESCRIPTION>survey flag identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="skyCellID" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+	<DESCRIPTION>single float giving PrimaryCell.SkyCell identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="randomStackObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+	<DESCRIPTION>random stack id</DESCRIPTION>
+      </FIELD>
+      <FIELD name="stackDetectRowID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+	<DESCRIPTION>identifies which of up to 5 possible stackdetections thisrow refers to: primary, up to 3 Secondary, 1 best</DESCRIPTION>
+      </FIELD>
+      <FIELD name="primaryDetection" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="255">
+        <DESCRIPTION>identifies if this row is a primary stack detection. True about 80 percent of time</DESCRIPTION>
+      </FIELD>
+      <FIELD name="bestDetection" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="255">
+        <DESCRIPTION>identifies if this row is a best detection or not. Also set if only a primary detection exists.</DESCRIPTION>
+      </FIELD>
+      <FIELD name="dvoRegionID" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>identifier to dvo spatial region</DESCRIPTION>
+      </FIELD>
+      <FIELD name="dataRelease" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="NA">
+        <DESCRIPTION>Data release when this table was loaded.</DESCRIPTION>
+      </FIELD>
+
+      <!-- XXX-band values -->
+      <FIELD name="XXXippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp detect identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXpetRadius" arraysize="1" datatype="float" unit="pixels" default="-999">
+        <DESCRIPTION>Petrosian radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXpetRadiusErr" arraysize="1" datatype="float" unit="pixels" default="-999">
+        <DESCRIPTION>estimated error inPetrosian radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXpetFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>Petrosian Flux</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXpetFluxErr" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+        <DESCRIPTION>estimated error in petFlux</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXpetR50" arraysize="1" datatype="float" unit="pixels" default="-999">
+        <DESCRIPTION>Petrosian radius at 50% light</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXpetR50Err" arraysize="1" datatype="float" unit="pixels" default="-999">
+        <DESCRIPTION>estimated error inPetrosian radius at 50% light</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXpetR90" arraysize="1" datatype="float" unit="pixels" default="-999">
+        <DESCRIPTION>Petrosian radius at 90% light</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXpetR90Err" arraysize="1" datatype="float" unit="pixels" default="-999">
+        <DESCRIPTION>estimated error in Petrosian radius at 90% light</DESCRIPTION>
+      </FIELD>
+      <FIELD name="XXXpetCf" arraysize="1" datatype="float" unit="pixels" default="-999">
+        <DESCRIPTION>Petrosian fit coverage factor</DESCRIPTION>
+      </FIELD>
+      <DATA>
+	<TABLEDATA></TABLEDATA>
+      </DATA>
+    </TABLE>
+
+    <!-- StackToImage Table ************************************************** -->
+    <TABLE name="StackToImage">
+      <DESCRIPTION>VOTable description of PSPS table StackToImage</DESCRIPTION>
+      <PARAM arraysize="1" datatype="char" ucd="meta.bib.author" name="Author" value="PSPS"></PARAM>
+      <FIELD name="stackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="imageID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>hashed exposure-ccdID identifier</DESCRIPTION>
+      </FIELD>
+      <DATA>
+        <TABLEDATA></TABLEDATA>
+      </DATA>
+    </TABLE>
+  </RESOURCE>
+</VOTABLE>
Index: /trunk/ippToPsps/config/tables.ST.vot
===================================================================
--- /trunk/ippToPsps/config/tables.ST.vot	(revision 37245)
+++ /trunk/ippToPsps/config/tables.ST.vot	(revision 37246)
@@ -3,4 +3,6 @@
 <VOTABLE version="1.1">
   <RESOURCE>
+
+    <!-- StackMeta Table ************************************************** -->
     <TABLE name="StackMeta">
       <DESCRIPTION>VOTable description of PSPS table StackMeta</DESCRIPTION>
@@ -21,5 +23,11 @@
         <DESCRIPTION>stack type identifier</DESCRIPTION>
       </FIELD>
-      <FIELD name="skyCellID" arraysize="1" datatype="float" unit="dimensionless" default="NA">
+      <FIELD name="tessID" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="0">
+        <DESCRIPTION>tessellation ID</DESCRIPTION>
+      </FIELD>
+      <FIELD name="projectionID" arraysize="1" datatype="short" unit="dimensionless" default="-1">
+        <DESCRIPTION>projection cell identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="skyCellID" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="255">
         <DESCRIPTION>skycell region identifier</DESCRIPTION>
       </FIELD>
@@ -30,6 +38,6 @@
         <DESCRIPTION>saturation magnitude level</DESCRIPTION>
       </FIELD>
-      <FIELD name="analVer" arraysize="1" datatype="short" unit="dimensionless" default="-999">
-        <DESCRIPTION>analysis version index</DESCRIPTION>
+      <FIELD name="analysisVer" arraysize="100" datatype="char" unit="alphanumeric" default="8000">
+        <DESCRIPTION>IPP software analysis release</DESCRIPTION>
       </FIELD>
       <FIELD name="expTime" arraysize="1" datatype="float" unit="seconds" default="-999">
@@ -115,5 +123,347 @@
       </DATA>
     </TABLE>
-    <TABLE name="StackObject">
+
+    <!-- StackObjectThin Table ************************************************** -->
+    <TABLE name="StackObjectThin">
+      <DESCRIPTION>VOTable description of PSPS table StackObjectThin</DESCRIPTION>
+      <PARAM arraysize="1" datatype="char" ucd="meta.bib.author" name="Author" value="PSPS"></PARAM>
+      <FIELD name="objID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>IPP object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="surveyID" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="NA">
+        <DESCRIPTION>survey flag identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="tessID" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="0">
+        <DESCRIPTION>tessellation ID</DESCRIPTION>
+      </FIELD>
+      <FIELD name="projectionID" arraysize="1" datatype="short" unit="dimensionless" default="-1">
+        <DESCRIPTION>projection cell identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="skyCellID" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="255">
+        <DESCRIPTION>skycell region identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="randomStackObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+	<DESCRIPTION>random stack id</DESCRIPTION>
+      </FIELD>
+      <FIELD name="stackDetectRowID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+	<DESCRIPTION>identifies which of up to 5 possible stackdetections this row refers to: primary, up to 3 Secondary, 1 best</DESCRIPTION>
+      </FIELD>
+      <FIELD name="primaryDetection" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="255">
+        <DESCRIPTION>identifies if this row is a primary stack detection. True about 80 percent of time</DESCRIPTION>
+      </FIELD>
+      <FIELD name="bestDetection" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="255">
+        <DESCRIPTION>identifies if this row is a best detection or not. Also set if only a primary detection exists.</DESCRIPTION>
+      </FIELD>
+      <FIELD name="dvoRegionID" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>identifier to dvo spatial region</DESCRIPTION>
+      </FIELD>
+      <FIELD name="dataRelease" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="NA">
+        <DESCRIPTION>Data release when this table was loaded.</DESCRIPTION>
+      </FIELD> 
+
+      <!-- g-band values -->
+      <FIELD name="gippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gra" arraysize="1" datatype="double" unit="degrees" default="NA">
+        <DESCRIPTION>right ascension</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gdec" arraysize="1" datatype="double" unit="degrees" default="NA">
+        <DESCRIPTION>declination</DESCRIPTION>
+      </FIELD>
+      <FIELD name="graErr" arraysize="1" datatype="float" unit="arcsec" default="NA">
+        <DESCRIPTION>right ascension error</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gdecErr" arraysize="1" datatype="float" unit="arcsec" default="NA">
+        <DESCRIPTION>declination error</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gPSFMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>g psf AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gPSFMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>estimated error of g psf AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gApMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>g Aperture AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gApMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>estimated error of g Ap AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gKronMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>g kron AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gKronMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>estimated error of g kron AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gtelluricExt" arraysize="1" datatype="float" unit="magnitudes" default="-999">
+        <DESCRIPTION>Excess extinction</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gsky" arraysize="1" datatype="float" unit="adu/s/arcsec" default="-999">
+        <DESCRIPTION>PSF sky level at source (adu)</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gskyErr" arraysize="1" datatype="float" unit="adu/s/arcsec" default="-999">
+        <DESCRIPTION>estimated error in sky</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ginfoFlag" arraysize="1" datatype="int" unit="dimensionless" default="-999">
+        <DESCRIPTION>informational bits</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ginfoFlag2" arraysize="1" datatype="int" unit="dimensionless" default="0">
+        <DESCRIPTION>informational bits</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gnFrames" arraysize="1" datatype="int" unit="dimensionless" default="-999">
+        <DESCRIPTION>number of frames contributing to source</DESCRIPTION>
+      </FIELD>
+
+      <!-- r-band values -->
+      <FIELD name="rippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rra" arraysize="1" datatype="double" unit="degrees" default="NA">
+        <DESCRIPTION>right ascension</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rdec" arraysize="1" datatype="double" unit="degrees" default="NA">
+        <DESCRIPTION>declination</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rraErr" arraysize="1" datatype="float" unit="arcsec" default="NA">
+        <DESCRIPTION>right ascension error</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rdecErr" arraysize="1" datatype="float" unit="arcsec" default="NA">
+        <DESCRIPTION>declination error</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rPSFMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>r psf AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rPSFMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>estimated error of r psf AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rApMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>r Aperture AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rApMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>estimated error of r Ap AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rKronMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>r kron AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rKronMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>estimated error of r kron AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rtelluricExt" arraysize="1" datatype="float" unit="magnitudes" default="-999">
+        <DESCRIPTION>Excess extinction</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rsky" arraysize="1" datatype="float" unit="adu/s/arcsec" default="-999">
+        <DESCRIPTION>PSF sky level at source (adu)</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rskyErr" arraysize="1" datatype="float" unit="adu/s/arcsec" default="-999">
+        <DESCRIPTION>estimated error in sky</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rinfoFlag" arraysize="1" datatype="int" unit="dimensionless" default="-999">
+        <DESCRIPTION>informational bits</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rinfoFlag2" arraysize="1" datatype="int" unit="dimensionless" default="0">
+        <DESCRIPTION>informational bits</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rnFrames" arraysize="1" datatype="int" unit="dimensionless" default="-999">
+        <DESCRIPTION>number of frames contributing to source</DESCRIPTION>
+      </FIELD>
+
+      <!-- i-band values -->
+      <FIELD name="iippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="istackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="istackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ira" arraysize="1" datatype="double" unit="degrees" default="NA">
+        <DESCRIPTION>right ascension</DESCRIPTION>
+      </FIELD>
+      <FIELD name="idec" arraysize="1" datatype="double" unit="degrees" default="NA">
+        <DESCRIPTION>declination</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iraErr" arraysize="1" datatype="float" unit="arcsec" default="NA">
+        <DESCRIPTION>right ascension error</DESCRIPTION>
+      </FIELD>
+      <FIELD name="idecErr" arraysize="1" datatype="float" unit="arcsec" default="NA">
+        <DESCRIPTION>declination error</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iPSFMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>i psf AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iPSFMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>estimated error of i psf AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iApMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>i Aperture AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iApMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>estimated error of i Ap AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iKronMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>i kron AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iKronMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>estimated error of i kron AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="itelluricExt" arraysize="1" datatype="float" unit="magnitudes" default="-999">
+        <DESCRIPTION>Excess extinction</DESCRIPTION>
+      </FIELD>
+      <FIELD name="isky" arraysize="1" datatype="float" unit="adu/s/arcsec" default="-999">
+        <DESCRIPTION>PSF sky level at source (adu)</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iskyErr" arraysize="1" datatype="float" unit="adu/s/arcsec" default="-999">
+        <DESCRIPTION>estimated error in sky</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iinfoFlag" arraysize="1" datatype="int" unit="dimensionless" default="-999">
+        <DESCRIPTION>informational bits</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iinfoFlag2" arraysize="1" datatype="int" unit="dimensionless" default="0">
+        <DESCRIPTION>informational bits</DESCRIPTION>
+      </FIELD>
+      <FIELD name="inFrames" arraysize="1" datatype="int" unit="dimensionless" default="-999">
+        <DESCRIPTION>number of frames contributing to source</DESCRIPTION>
+      </FIELD>
+
+      <!-- z-band values -->
+      <FIELD name="zippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zra" arraysize="1" datatype="double" unit="degrees" default="NA">
+        <DESCRIPTION>right ascension</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zdec" arraysize="1" datatype="double" unit="degrees" default="NA">
+        <DESCRIPTION>declination</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zraErr" arraysize="1" datatype="float" unit="arcsec" default="NA">
+        <DESCRIPTION>right ascension error</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zdecErr" arraysize="1" datatype="float" unit="arcsec" default="NA">
+        <DESCRIPTION>declination error</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zPSFMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>z psf AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zPSFMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>estimated error of z psf AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zApMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>z Aperture AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zApMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>estimated error of z Ap AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zKronMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>z kron AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zKronMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>estimated error of z kron AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ztelluricExt" arraysize="1" datatype="float" unit="magnitudes" default="-999">
+        <DESCRIPTION>Excess extinction</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zsky" arraysize="1" datatype="float" unit="adu/s/arcsec" default="-999">
+        <DESCRIPTION>PSF sky level at source (adu)</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zskyErr" arraysize="1" datatype="float" unit="adu/s/arcsec" default="-999">
+        <DESCRIPTION>estimated error in sky</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zinfoFlag" arraysize="1" datatype="int" unit="dimensionless" default="-999">
+        <DESCRIPTION>informational bits</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zinfoFlag2" arraysize="1" datatype="int" unit="dimensionless" default="0">
+        <DESCRIPTION>informational bits</DESCRIPTION>
+      </FIELD>
+      <FIELD name="znFrames" arraysize="1" datatype="int" unit="dimensionless" default="-999">
+        <DESCRIPTION>number of frames contributing to source</DESCRIPTION>
+      </FIELD>
+
+      <!-- y-band values -->
+      <FIELD name="yippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ystackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ystackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yra" arraysize="1" datatype="double" unit="degrees" default="NA">
+        <DESCRIPTION>right ascension</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ydec" arraysize="1" datatype="double" unit="degrees" default="NA">
+        <DESCRIPTION>declination</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yraErr" arraysize="1" datatype="float" unit="arcsec" default="NA">
+        <DESCRIPTION>right ascension error</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ydecErr" arraysize="1" datatype="float" unit="arcsec" default="NA">
+        <DESCRIPTION>declination error</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yPSFMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>y psf AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yPSFMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>estimated error of y psf AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yApMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>y Aperture AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yApMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>estimated error of y Ap AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yKronMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>y kron AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yKronMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
+        <DESCRIPTION>estimated error of y kron AB magnitude from stack</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ytelluricExt" arraysize="1" datatype="float" unit="magnitudes" default="-999">
+        <DESCRIPTION>Excess extinction</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ysky" arraysize="1" datatype="float" unit="adu/s/arcsec" default="-999">
+        <DESCRIPTION>PSF sky level at source (adu)</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yskyErr" arraysize="1" datatype="float" unit="adu/s/arcsec" default="-999">
+        <DESCRIPTION>estimated error in sky</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yinfoFlag" arraysize="1" datatype="int" unit="dimensionless" default="-999">
+        <DESCRIPTION>informational bits</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yinfoFlag2" arraysize="1" datatype="int" unit="dimensionless" default="0">
+        <DESCRIPTION>informational bits</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ynFrames" arraysize="1" datatype="int" unit="dimensionless" default="-999">
+        <DESCRIPTION>number of frames contributing to source</DESCRIPTION>
+      </FIELD>
+      <DATA>
+        <TABLEDATA></TABLEDATA>
+      </DATA>
+    </TABLE>
+
+    <!-- StackObjectRaw Table ************************************************** -->
+    <TABLE name="StackObjectRaw">
       <DESCRIPTION>VOTable description of PSPS table StackObject</DESCRIPTION>
       <PARAM arraysize="1" datatype="char" ucd="meta.bib.author" name="Author" value="PSPS"></PARAM>
@@ -121,12 +471,6 @@
         <DESCRIPTION>ODM object identifier</DESCRIPTION>
       </FIELD>
-      <FIELD name="gcobjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
-        <DESCRIPTION>galactic coordinates ODM object identifier</DESCRIPTION>
-      </FIELD>
-      <FIELD name="surveyID" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="NA">
-        <DESCRIPTION>survey flag identifier</DESCRIPTION>
-      </FIELD>
-      <FIELD name="skyCellID" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-	<DESCRIPTION>single float giving PrimaryCell.SkyCell identifier</DESCRIPTION>
+      <FIELD name="ippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>IPP object identifier</DESCRIPTION>
       </FIELD>
       <FIELD name="randomStackObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
@@ -142,13 +486,6 @@
         <DESCRIPTION>identifies if this row is a best detection or not. Also set if only a primary detection exists.</DESCRIPTION>
       </FIELD>
-      <FIELD name="dvoRegionID" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>identifier to dvo spatial region</DESCRIPTION>
-      </FIELD>
-      <FIELD name="dataRelease" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="NA">
-        <DESCRIPTION>Data release when this table was loaded.</DESCRIPTION>
-      </FIELD> 
-      <FIELD name="gippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
-        <DESCRIPTION>IPP object identifier</DESCRIPTION>
-      </FIELD>
+
+      <!-- g-band values -->
       <FIELD name="gippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
         <DESCRIPTION>ipp identifier</DESCRIPTION>
@@ -172,19 +509,10 @@
         <DESCRIPTION>estimated error in y</DESCRIPTION>
       </FIELD>
-      <FIELD name="gra" arraysize="1" datatype="double" unit="degrees" default="NA">
-        <DESCRIPTION>right ascension</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gdec" arraysize="1" datatype="double" unit="degrees" default="NA">
-        <DESCRIPTION>declination</DESCRIPTION>
-      </FIELD>
-      <FIELD name="graErr" arraysize="1" datatype="float" unit="arcsec" default="NA">
-        <DESCRIPTION>right ascension error</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gdecErr" arraysize="1" datatype="float" unit="arcsec" default="NA">
-        <DESCRIPTION>declination error</DESCRIPTION>
-      </FIELD>
       <FIELD name="gzp" arraysize="1" datatype="float" unit="magnitude" default="0">
         <DESCRIPTION>zero point offset</DESCRIPTION>
       </FIELD>
+      <FIELD name="gPlateScale" arraysize="1" datatype="float" unit="arcsec/pixel" default="0">
+        <DESCRIPTION>plate scale</DESCRIPTION>
+      </FIELD>
       <FIELD name="gexpTime" arraysize="1" datatype="float" unit="seconds" default="-999">
         <DESCRIPTION>exposure time (informational)</DESCRIPTION>
@@ -208,5 +536,5 @@
         <DESCRIPTION>PSF coverage factor</DESCRIPTION>
       </FIELD>
-       <FIELD name="gpsfQfPerfect" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+      <FIELD name="gpsfQfPerfect" arraysize="1" datatype="float" unit="dimensionless" default="-999">
         <DESCRIPTION>PSF-weighted fraction of arcsec totally unmasked</DESCRIPTION>
       </FIELD> 
@@ -244,4 +572,7 @@
         <DESCRIPTION>Aperture fill factor - redundant with psfQF, keep?</DESCRIPTION>
       </FIELD>
+      <FIELD name="gApRadius" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>Aperture size</DESCRIPTION>
+      </FIELD>
       <FIELD name="gKronFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
         <DESCRIPTION> Kron flux</DESCRIPTION>
@@ -253,37 +584,6 @@
         <DESCRIPTION> Kron radius</DESCRIPTION>
       </FIELD>
-      <FIELD name="gPSFMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
-        <DESCRIPTION>g psf AB magnitude from stack</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gPSFMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
-        <DESCRIPTION>estimated error of g psf AB magnitude from stack</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gApMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
-        <DESCRIPTION>g Aperture AB magnitude from stack</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gApMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
-        <DESCRIPTION>estimated error of g Ap AB magnitude from stack</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gKronMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
-        <DESCRIPTION>g kron AB magnitude from stack</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gKronMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
-        <DESCRIPTION>estimated error of g kron AB magnitude from stack</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gsky" arraysize="1" datatype="float" unit="adu/s/arcsec" default="-999">
-        <DESCRIPTION>PSF sky level at source (adu)</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gskyErr" arraysize="1" datatype="float" unit="adu/s/arcsec" default="-999">
-        <DESCRIPTION>estimated error in sky</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ginfoFlag" arraysize="1" datatype="long" unit="dimensionless" default="-999">
-        <DESCRIPTION>indicator of strange propeties</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gnFrames" arraysize="1" datatype="int" unit="dimensionless" default="-999">
-        <DESCRIPTION>number of frames contributing to source</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
-        <DESCRIPTION>IPP object identifier</DESCRIPTION>
-      </FIELD>
+
+      <!-- r-band values -->
       <FIELD name="rippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
         <DESCRIPTION>ipp identifier</DESCRIPTION>
@@ -307,19 +607,10 @@
         <DESCRIPTION>estimated error in y</DESCRIPTION>
       </FIELD>
-      <FIELD name="rra" arraysize="1" datatype="double" unit="degrees" default="NA">
-        <DESCRIPTION>right ascension</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rdec" arraysize="1" datatype="double" unit="degrees" default="NA">
-        <DESCRIPTION>declination</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rraErr" arraysize="1" datatype="float" unit="arcsec" default="NA">
-        <DESCRIPTION>right ascension error</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rdecErr" arraysize="1" datatype="float" unit="arcsec" default="NA">
-        <DESCRIPTION>declination error</DESCRIPTION>
-      </FIELD>
       <FIELD name="rzp" arraysize="1" datatype="float" unit="magnitude" default="0">
         <DESCRIPTION>zero point offset</DESCRIPTION>
       </FIELD>
+      <FIELD name="rPlateScale" arraysize="1" datatype="float" unit="arcsec/pixel" default="0">
+        <DESCRIPTION>plate scale</DESCRIPTION>
+      </FIELD>
       <FIELD name="rexpTime" arraysize="1" datatype="float" unit="seconds" default="-999">
         <DESCRIPTION>exposure time (informational)</DESCRIPTION>
@@ -343,5 +634,5 @@
         <DESCRIPTION>PSF coverage factor</DESCRIPTION>
       </FIELD>
-       <FIELD name="rpsfQfPerfect" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+      <FIELD name="rpsfQfPerfect" arraysize="1" datatype="float" unit="dimensionless" default="-999">
         <DESCRIPTION>PSF-weighted fraction of arcsec totally unmasked</DESCRIPTION>
       </FIELD> 
@@ -379,4 +670,7 @@
         <DESCRIPTION>Aperture fill factor - redundant with psfQF, keep?</DESCRIPTION>
       </FIELD>
+      <FIELD name="rApRadius" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>Aperture size</DESCRIPTION>
+      </FIELD>
       <FIELD name="rKronFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
         <DESCRIPTION> Kron flux</DESCRIPTION>
@@ -388,37 +682,6 @@
         <DESCRIPTION> Kron radius</DESCRIPTION>
       </FIELD>
-      <FIELD name="rPSFMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
-        <DESCRIPTION>psf AB mag from stack</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rPSFMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
-        <DESCRIPTION>estimated error of psf mag from stack</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rApMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
-        <DESCRIPTION>aperture AB mag from stack</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rApMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
-        <DESCRIPTION>estimated error of aperture mag from stack</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rKronMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
-        <DESCRIPTION>kron AB mag from stack</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rKronMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
-        <DESCRIPTION>estimated error of kron mag from stack</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rsky" arraysize="1" datatype="float" unit="adu/s/arcsec" default="-999">
-        <DESCRIPTION>PSF sky level at source (adu)</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rskyErr" arraysize="1" datatype="float" unit="adu/s/arcsec" default="-999">
-        <DESCRIPTION>estimated error in sky</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rinfoFlag" arraysize="1" datatype="long" unit="dimensionless" default="-999">
-        <DESCRIPTION>indicator of strange propeties</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rnFrames" arraysize="1" datatype="int" unit="dimensionless" default="-999">
-        <DESCRIPTION>number of frames contributing to source</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
-        <DESCRIPTION>IPP object identifier</DESCRIPTION>
-      </FIELD>
+
+      <!-- i-band values -->
       <FIELD name="iippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
         <DESCRIPTION>ipp identifier</DESCRIPTION>
@@ -442,19 +705,10 @@
         <DESCRIPTION>estimated error in y</DESCRIPTION>
       </FIELD>
-      <FIELD name="ira" arraysize="1" datatype="double" unit="degrees" default="NA">
-        <DESCRIPTION>right ascension</DESCRIPTION>
-      </FIELD>
-      <FIELD name="idec" arraysize="1" datatype="double" unit="degrees" default="NA">
-        <DESCRIPTION>declination</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iraErr" arraysize="1" datatype="float" unit="arcsec" default="NA">
-        <DESCRIPTION>right ascension error</DESCRIPTION>
-      </FIELD>
-      <FIELD name="idecErr" arraysize="1" datatype="float" unit="arcsec" default="NA">
-        <DESCRIPTION>declination error</DESCRIPTION>
-      </FIELD>
       <FIELD name="izp" arraysize="1" datatype="float" unit="magnitude" default="0">
         <DESCRIPTION>zero point offset</DESCRIPTION>
       </FIELD>
+      <FIELD name="iPlateScale" arraysize="1" datatype="float" unit="arcsec/pixel" default="0">
+        <DESCRIPTION>plate scale</DESCRIPTION>
+      </FIELD>
       <FIELD name="iexpTime" arraysize="1" datatype="float" unit="seconds" default="-999">
         <DESCRIPTION>exposure time (informational)</DESCRIPTION>
@@ -478,5 +732,5 @@
         <DESCRIPTION>PSF coverage factor</DESCRIPTION>
       </FIELD>
-       <FIELD name="ipsfQfPerfect" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+      <FIELD name="ipsfQfPerfect" arraysize="1" datatype="float" unit="dimensionless" default="-999">
         <DESCRIPTION>PSF-weighted fraction of arcsec totally unmasked</DESCRIPTION>
       </FIELD> 
@@ -514,4 +768,7 @@
         <DESCRIPTION>Aperture fill factor - redundant with psfQF, keep?</DESCRIPTION>
       </FIELD>
+      <FIELD name="iApRadius" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>Aperture size</DESCRIPTION>
+      </FIELD>
       <FIELD name="iKronFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
         <DESCRIPTION> Kron flux</DESCRIPTION>
@@ -523,37 +780,6 @@
         <DESCRIPTION> Kron radius</DESCRIPTION>
       </FIELD>
-      <FIELD name="iPSFMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
-        <DESCRIPTION>psf AB mag from stack</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iPSFMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
-        <DESCRIPTION>estimated error of psf mag from stack</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iApMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
-        <DESCRIPTION>aperture AB mag from stack</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iApMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
-        <DESCRIPTION>estimated error of aperture mag from stack</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iKronMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
-        <DESCRIPTION>kron AB mag from stack</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iKronMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
-        <DESCRIPTION>estimated error of kron mag from stack</DESCRIPTION>
-      </FIELD>
-      <FIELD name="isky" arraysize="1" datatype="float" unit="adu/s/arcsec" default="-999">
-        <DESCRIPTION>PSF sky level at source (adu)</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iskyErr" arraysize="1" datatype="float" unit="adu/s/arcsec" default="-999">
-        <DESCRIPTION>estimated error in sky</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iinfoFlag" arraysize="1" datatype="long" unit="dimensionless" default="-999">
-        <DESCRIPTION>indicator of strange propeties</DESCRIPTION>
-      </FIELD>
-      <FIELD name="inFrames" arraysize="1" datatype="int" unit="dimensionless" default="-999">
-        <DESCRIPTION>number of frames contributing to source</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
-        <DESCRIPTION>IPP object identifier</DESCRIPTION>
-      </FIELD>
+
+      <!-- z-band values -->
       <FIELD name="zippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
         <DESCRIPTION>ipp identifier</DESCRIPTION>
@@ -577,19 +803,10 @@
         <DESCRIPTION>estimated error in y</DESCRIPTION>
       </FIELD>
-      <FIELD name="zra" arraysize="1" datatype="double" unit="degrees" default="NA">
-        <DESCRIPTION>right ascension</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zdec" arraysize="1" datatype="double" unit="degrees" default="NA">
-        <DESCRIPTION>declination</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zraErr" arraysize="1" datatype="float" unit="arcsec" default="NA">
-        <DESCRIPTION>right ascension error</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zdecErr" arraysize="1" datatype="float" unit="arcsec" default="NA">
-        <DESCRIPTION>declination error</DESCRIPTION>
-      </FIELD>
       <FIELD name="zzp" arraysize="1" datatype="float" unit="magnitude" default="0">
         <DESCRIPTION>zero point offset</DESCRIPTION>
       </FIELD>
+      <FIELD name="zPlateScale" arraysize="1" datatype="float" unit="arcsec/pixel" default="0">
+        <DESCRIPTION>plate scale</DESCRIPTION>
+      </FIELD>
       <FIELD name="zexpTime" arraysize="1" datatype="float" unit="seconds" default="-999">
         <DESCRIPTION>exposure time (informational)</DESCRIPTION>
@@ -613,5 +830,5 @@
         <DESCRIPTION>PSF coverage factor</DESCRIPTION>
       </FIELD>
-       <FIELD name="zpsfQfPerfect" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+      <FIELD name="zpsfQfPerfect" arraysize="1" datatype="float" unit="dimensionless" default="-999">
         <DESCRIPTION>PSF-weighted fraction of arcsec totally unmasked</DESCRIPTION>
       </FIELD> 
@@ -649,4 +866,7 @@
         <DESCRIPTION>Aperture fill factor - redundant with psfQF, keep?</DESCRIPTION>
       </FIELD>
+      <FIELD name="zApRadius" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>Aperture size</DESCRIPTION>
+      </FIELD>
       <FIELD name="zKronFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
         <DESCRIPTION> Kron flux</DESCRIPTION>
@@ -658,37 +878,6 @@
         <DESCRIPTION> Kron radius</DESCRIPTION>
       </FIELD>
-      <FIELD name="zPSFMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
-        <DESCRIPTION>psf AB mag from stack</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zPSFMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
-        <DESCRIPTION>estimated error of psf mag from stack</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zApMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
-        <DESCRIPTION>aperture AB mag from stack</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zApMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
-        <DESCRIPTION>estimated error of aperture mag from stack</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zKronMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
-        <DESCRIPTION>kron AB mag from stack</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zKronMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
-        <DESCRIPTION>estimated error of kron mag from stack</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zsky" arraysize="1" datatype="float" unit="adu/s/arcsec" default="-999">
-        <DESCRIPTION>PSF sky level at source (adu)</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zskyErr" arraysize="1" datatype="float" unit="adu/s/arcsec" default="-999">
-        <DESCRIPTION>estimated error in sky</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zinfoFlag" arraysize="1" datatype="long" unit="dimensionless" default="-999">
-        <DESCRIPTION>indicator of strange propeties</DESCRIPTION>
-      </FIELD>
-      <FIELD name="znFrames" arraysize="1" datatype="int" unit="dimensionless" default="-999">
-        <DESCRIPTION>number of frames contributing to source</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
-        <DESCRIPTION>IPP object identifier</DESCRIPTION>
-      </FIELD>
+
+      <!-- y-band values -->
       <FIELD name="yippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
         <DESCRIPTION>ipp identifier</DESCRIPTION>
@@ -712,19 +901,10 @@
         <DESCRIPTION>estimated error in y</DESCRIPTION>
       </FIELD>
-      <FIELD name="yra" arraysize="1" datatype="double" unit="degrees" default="NA">
-        <DESCRIPTION>right ascension</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ydec" arraysize="1" datatype="double" unit="degrees" default="NA">
-        <DESCRIPTION>declination</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yraErr" arraysize="1" datatype="float" unit="arcsec" default="NA">
-        <DESCRIPTION>right ascension error</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ydecErr" arraysize="1" datatype="float" unit="arcsec" default="NA">
-        <DESCRIPTION>declination error</DESCRIPTION>
-      </FIELD>
       <FIELD name="yzp" arraysize="1" datatype="float" unit="magnitude" default="0">
         <DESCRIPTION>zero point offset</DESCRIPTION>
       </FIELD>
+      <FIELD name="yPlateScale" arraysize="1" datatype="float" unit="arcsec/pixel" default="0">
+        <DESCRIPTION>plate scale</DESCRIPTION>
+      </FIELD>
       <FIELD name="yexpTime" arraysize="1" datatype="float" unit="seconds" default="-999">
         <DESCRIPTION>exposure time (informational)</DESCRIPTION>
@@ -748,5 +928,5 @@
         <DESCRIPTION>PSF coverage factor</DESCRIPTION>
       </FIELD>
-       <FIELD name="ypsfQfPerfect" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+      <FIELD name="ypsfQfPerfect" arraysize="1" datatype="float" unit="dimensionless" default="-999">
         <DESCRIPTION>PSF-weighted fraction of arcsec totally unmasked</DESCRIPTION>
       </FIELD> 
@@ -784,4 +964,7 @@
         <DESCRIPTION>Aperture fill factor - redundant with psfQF, keep?</DESCRIPTION>
       </FIELD>
+      <FIELD name="yApRadius" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>Aperture size</DESCRIPTION>
+      </FIELD>
       <FIELD name="yKronFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
         <DESCRIPTION> Kron flux</DESCRIPTION>
@@ -793,38 +976,11 @@
         <DESCRIPTION> Kron radius</DESCRIPTION>
       </FIELD>
-      <FIELD name="yPSFMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
-        <DESCRIPTION>psf AB mag from stack</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yPSFMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
-        <DESCRIPTION>estimated error of psf mag from stack</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yApMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
-        <DESCRIPTION>aperture AB mag from stack</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yApMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
-        <DESCRIPTION>estimated error of aperture mag from stack</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yKronMag" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
-        <DESCRIPTION>kron AB mag from stack</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yKronMagErr" arraysize="1" datatype="float" unit="AB magnitude" default="-999">
-        <DESCRIPTION>estimated error of kron mag from stack</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ysky" arraysize="1" datatype="float" unit="adu/s/arcsec" default="-999">
-        <DESCRIPTION>PSF sky level at source (adu)</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yskyErr" arraysize="1" datatype="float" unit="adu/s/arcsec" default="-999">
-        <DESCRIPTION>estimated error in sky</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yinfoFlag" arraysize="1" datatype="long" unit="dimensionless" default="-999">
-        <DESCRIPTION>indicator of strange propeties</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ynFrames" arraysize="1" datatype="int" unit="dimensionless" default="-999">
-        <DESCRIPTION>number of frames contributing to source</DESCRIPTION>
-      </FIELD>      
+
       <DATA>
         <TABLEDATA></TABLEDATA>
       </DATA>
     </TABLE>
+
+    <!-- StackApFlx Table ************************************************** -->
     <TABLE name="StackApFlx">
       <DESCRIPTION>VOTable description of PSPS table StackApFlx</DESCRIPTION>
@@ -833,12 +989,6 @@
         <DESCRIPTION>ODM object identifier</DESCRIPTION>
       </FIELD>
-      <FIELD name="gcobjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
-        <DESCRIPTION>galactic coordinates ODM object identifier</DESCRIPTION>
-      </FIELD>
-      <FIELD name="surveyID" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="0">
-        <DESCRIPTION>survey flag identifier</DESCRIPTION>
-      </FIELD>
-      <FIELD name="skyCellID" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-	<DESCRIPTION>single float giving PrimaryCell.SkyCell identifier</DESCRIPTION>
+      <FIELD name="ippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>IPP object identifier</DESCRIPTION>
       </FIELD>
       <FIELD name="randomStackObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
@@ -854,10 +1004,6 @@
         <DESCRIPTION>identifies if this row is a best detection or not. Also set if only a primary detection exists.</DESCRIPTION>
       </FIELD>
-      <FIELD name="dvoRegionID" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>identifier to dvo spatial region</DESCRIPTION>
-      </FIELD>
-      <FIELD name="dataRelease" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="NA">
-        <DESCRIPTION>Data release when this table was loaded.</DESCRIPTION>
-      </FIELD> 
+
+      <!-- g-band values -->
       <FIELD name="gstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
         <DESCRIPTION>ODM detection identifier</DESCRIPTION>
@@ -865,18 +1011,15 @@
       <FIELD name="gstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
         <DESCRIPTION>stack identifier</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
-        <DESCRIPTION>IPP object identifier</DESCRIPTION>
       </FIELD>
       <FIELD name="gippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
         <DESCRIPTION>ipp identifier</DESCRIPTION>
       </FIELD>
-      <FIELD name="gflxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="gflxR3" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
       </FIELD>
-      <FIELD name="gflxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="gflxR3Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error in flxR3</DESCRIPTION>
       </FIELD>
-      <FIELD name="gflxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="gflxR3Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in flxR3</DESCRIPTION>
       </FIELD>
@@ -884,11 +1027,11 @@
         <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
       </FIELD>
-      <FIELD name="gflxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="gflxR4" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
       </FIELD>
-      <FIELD name="gflxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="gflxR4Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error in flxR4</DESCRIPTION>
       </FIELD>
-      <FIELD name="gflxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="gflxR4Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in flxR4</DESCRIPTION>
       </FIELD>
@@ -896,11 +1039,11 @@
         <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
       </FIELD>
-      <FIELD name="gflxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="gflxR5" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
       </FIELD>
-      <FIELD name="gflxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="gflxR5Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error is gflxR5</DESCRIPTION>
       </FIELD>
-      <FIELD name="gflxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="gflxR5Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in gflxR5</DESCRIPTION>
       </FIELD>
@@ -908,11 +1051,11 @@
         <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
       </FIELD>
-      <FIELD name="gc1flxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="gc1flxR3" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
       </FIELD>
-      <FIELD name="gc1flxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="gc1flxR3Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error is c1flxR3</DESCRIPTION>
       </FIELD>
-      <FIELD name="gc1flxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="gc1flxR3Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in c1flxR3</DESCRIPTION>
       </FIELD>
@@ -920,11 +1063,11 @@
         <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
       </FIELD>
-      <FIELD name="gc1flxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="gc1flxR4" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
       </FIELD>
-      <FIELD name="gc1flxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="gc1flxR4Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error is c1flxR4</DESCRIPTION>
       </FIELD>
-      <FIELD name="gc1flxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="gc1flxR4Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in c1flxR4</DESCRIPTION>
       </FIELD>
@@ -932,11 +1075,11 @@
         <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
       </FIELD>
-      <FIELD name="gc1flxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="gc1flxR5" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
       </FIELD>
-      <FIELD name="gc1flxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="gc1flxR5Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error is c1flxR5</DESCRIPTION>
       </FIELD>
-      <FIELD name="gc1flxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="gc1flxR5Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in c1flxR5</DESCRIPTION>
       </FIELD>
@@ -944,11 +1087,11 @@
         <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
       </FIELD>
-      <FIELD name="gc2flxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="gc2flxR3" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
       </FIELD>
-      <FIELD name="gc2flxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="gc2flxR3Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error in c2flxR3</DESCRIPTION>
       </FIELD>
-      <FIELD name="gc2flxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="gc2flxR3Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in c2flxR3</DESCRIPTION>
       </FIELD>
@@ -956,11 +1099,11 @@
         <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
       </FIELD>
-      <FIELD name="gc2flxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="gc2flxR4" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
       </FIELD>
-      <FIELD name="gc2flxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="gc2flxR4Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error in c2flxR4</DESCRIPTION>
       </FIELD>
-      <FIELD name="gc2flxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="gc2flxR4Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in c2flxR4</DESCRIPTION>
       </FIELD>
@@ -968,11 +1111,11 @@
         <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
       </FIELD>
-      <FIELD name="gc2flxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="gc2flxR5" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
       </FIELD>
-      <FIELD name="gc2flxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="gc2flxR5Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error in c2flxR5</DESCRIPTION>
       </FIELD>
-      <FIELD name="gc2flxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="gc2flxR5Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in c2flxR5</DESCRIPTION>
       </FIELD>
@@ -980,4 +1123,6 @@
         <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
       </FIELD>
+
+      <!-- r-band values -->
       <FIELD name="rstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
         <DESCRIPTION>ODM detection identifier</DESCRIPTION>
@@ -985,18 +1130,15 @@
       <FIELD name="rstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
         <DESCRIPTION>stack identifier</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
-        <DESCRIPTION>IPP object identifier</DESCRIPTION>
       </FIELD>
       <FIELD name="rippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
         <DESCRIPTION>ipp identifier</DESCRIPTION>
       </FIELD>
-      <FIELD name="rflxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="rflxR3" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
       </FIELD>
-      <FIELD name="rflxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="rflxR3Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error in flxR3</DESCRIPTION>
       </FIELD>
-      <FIELD name="rflxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="rflxR3Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in flxR3</DESCRIPTION>
       </FIELD>
@@ -1004,11 +1146,11 @@
         <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
       </FIELD>
-      <FIELD name="rflxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="rflxR4" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
       </FIELD>
-      <FIELD name="rflxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="rflxR4Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error in flxR4</DESCRIPTION>
       </FIELD>
-      <FIELD name="rflxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="rflxR4Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in flxR4</DESCRIPTION>
       </FIELD>
@@ -1016,11 +1158,11 @@
         <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
       </FIELD>
-      <FIELD name="rflxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="rflxR5" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
       </FIELD>
-      <FIELD name="rflxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="rflxR5Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error is gflxR5</DESCRIPTION>
       </FIELD>
-      <FIELD name="rflxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="rflxR5Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in gflxR5</DESCRIPTION>
       </FIELD>
@@ -1028,11 +1170,11 @@
         <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
       </FIELD>
-      <FIELD name="rc1flxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="rc1flxR3" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
       </FIELD>
-      <FIELD name="rc1flxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="rc1flxR3Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error is c1flxR3</DESCRIPTION>
       </FIELD>
-      <FIELD name="rc1flxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="rc1flxR3Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in c1flxR3</DESCRIPTION>
       </FIELD>
@@ -1040,11 +1182,11 @@
         <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
       </FIELD>
-      <FIELD name="rc1flxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="rc1flxR4" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
       </FIELD>
-      <FIELD name="rc1flxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="rc1flxR4Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error is c1flxR4</DESCRIPTION>
       </FIELD>
-      <FIELD name="rc1flxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="rc1flxR4Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in c1flxR4</DESCRIPTION>
       </FIELD>
@@ -1052,11 +1194,11 @@
         <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
       </FIELD>
-      <FIELD name="rc1flxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="rc1flxR5" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
       </FIELD>
-      <FIELD name="rc1flxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="rc1flxR5Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error is c1flxR5</DESCRIPTION>
       </FIELD>
-      <FIELD name="rc1flxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="rc1flxR5Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in c1flxR5</DESCRIPTION>
       </FIELD>
@@ -1064,11 +1206,11 @@
         <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
       </FIELD>
-      <FIELD name="rc2flxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="rc2flxR3" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
       </FIELD>
-      <FIELD name="rc2flxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="rc2flxR3Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error is c2flxR3</DESCRIPTION>
       </FIELD>
-      <FIELD name="rc2flxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="rc2flxR3Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in c2flxR3</DESCRIPTION>
       </FIELD>
@@ -1076,11 +1218,11 @@
         <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
       </FIELD>
-      <FIELD name="rc2flxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="rc2flxR4" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
       </FIELD>
-      <FIELD name="rc2flxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="rc2flxR4Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error is c2flxR4</DESCRIPTION>
       </FIELD>
-      <FIELD name="rc2flxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="rc2flxR4Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in c2flxR4</DESCRIPTION>
       </FIELD>
@@ -1088,11 +1230,11 @@
         <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
       </FIELD>
-      <FIELD name="rc2flxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="rc2flxR5" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
       </FIELD>
-      <FIELD name="rc2flxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="rc2flxR5Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error is c2flxR5</DESCRIPTION>
       </FIELD>
-      <FIELD name="rc2flxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="rc2flxR5Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in c2flxR5</DESCRIPTION>
       </FIELD>
@@ -1100,4 +1242,6 @@
         <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
       </FIELD>
+
+      <!-- i-band values -->
       <FIELD name="istackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
         <DESCRIPTION>ODM detection identifier</DESCRIPTION>
@@ -1105,18 +1249,15 @@
       <FIELD name="istackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
         <DESCRIPTION>stack identifier</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
-        <DESCRIPTION>IPP object identifier</DESCRIPTION>
       </FIELD>
       <FIELD name="iippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
         <DESCRIPTION>ipp identifier</DESCRIPTION>
       </FIELD>
-      <FIELD name="iflxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="iflxR3" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
       </FIELD>
-      <FIELD name="iflxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="iflxR3Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error in flxR3</DESCRIPTION>
       </FIELD>
-      <FIELD name="iflxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="iflxR3Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in flxR3</DESCRIPTION>
       </FIELD>
@@ -1124,11 +1265,11 @@
         <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
       </FIELD>
-      <FIELD name="iflxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="iflxR4" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
       </FIELD>
-      <FIELD name="iflxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="iflxR4Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error in flxR4</DESCRIPTION>
       </FIELD>
-      <FIELD name="iflxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="iflxR4Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in flxR4</DESCRIPTION>
       </FIELD>
@@ -1136,11 +1277,11 @@
         <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
       </FIELD>
-      <FIELD name="iflxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="iflxR5" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
       </FIELD>
-      <FIELD name="iflxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="iflxR5Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error is gflxR5</DESCRIPTION>
       </FIELD>
-      <FIELD name="iflxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="iflxR5Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in gflxR5</DESCRIPTION>
       </FIELD>
@@ -1148,11 +1289,11 @@
         <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
       </FIELD>
-      <FIELD name="ic1flxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="ic1flxR3" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
       </FIELD>
-      <FIELD name="ic1flxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="ic1flxR3Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error is c1flxR3</DESCRIPTION>
       </FIELD>
-      <FIELD name="ic1flxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="ic1flxR3Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in c1flxR3</DESCRIPTION>
       </FIELD>
@@ -1160,11 +1301,11 @@
         <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
       </FIELD>
-      <FIELD name="ic1flxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="ic1flxR4" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
       </FIELD>
-      <FIELD name="ic1flxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="ic1flxR4Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error is c1flxR4</DESCRIPTION>
       </FIELD>
-      <FIELD name="ic1flxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="ic1flxR4Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in c1flxR4</DESCRIPTION>
       </FIELD>
@@ -1172,11 +1313,11 @@
         <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
       </FIELD>
-      <FIELD name="ic1flxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="ic1flxR5" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
       </FIELD>
-      <FIELD name="ic1flxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="ic1flxR5Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error is c1flxR5</DESCRIPTION>
       </FIELD>
-      <FIELD name="ic1flxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="ic1flxR5Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in c1flxR5</DESCRIPTION>
       </FIELD>
@@ -1184,11 +1325,11 @@
         <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
       </FIELD>
-      <FIELD name="ic2flxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="ic2flxR3" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
       </FIELD>
-      <FIELD name="ic2flxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="ic2flxR3Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error is c2flxR3</DESCRIPTION>
       </FIELD>
-      <FIELD name="ic2flxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="ic2flxR3Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in c2flxR3</DESCRIPTION>
       </FIELD>
@@ -1196,11 +1337,11 @@
         <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
       </FIELD>
-      <FIELD name="ic2flxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="ic2flxR4" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
       </FIELD>
-      <FIELD name="ic2flxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="ic2flxR4Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error is c2flxR4</DESCRIPTION>
       </FIELD>
-      <FIELD name="ic2flxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="ic2flxR4Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in c2flxR4</DESCRIPTION>
       </FIELD>
@@ -1208,11 +1349,11 @@
         <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
       </FIELD>
-      <FIELD name="ic2flxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="ic2flxR5" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
       </FIELD>
-      <FIELD name="ic2flxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="ic2flxR5Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error is c2flxR5</DESCRIPTION>
       </FIELD>
-      <FIELD name="ic2flxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="ic2flxR5Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in c2flxR5</DESCRIPTION>
       </FIELD>
@@ -1220,4 +1361,6 @@
         <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
       </FIELD>
+
+      <!-- z-band values -->
       <FIELD name="zstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
         <DESCRIPTION>ODM detection identifier</DESCRIPTION>
@@ -1225,18 +1368,15 @@
       <FIELD name="zstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
         <DESCRIPTION>stack identifier</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
-        <DESCRIPTION>IPP object identifier</DESCRIPTION>
       </FIELD>
       <FIELD name="zippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
         <DESCRIPTION>ipp identifier</DESCRIPTION>
       </FIELD>
-      <FIELD name="zflxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="zflxR3" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
       </FIELD>
-      <FIELD name="zflxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="zflxR3Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error in flxR3</DESCRIPTION>
       </FIELD>
-      <FIELD name="zflxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="zflxR3Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in flxR3</DESCRIPTION>
       </FIELD>
@@ -1244,11 +1384,11 @@
         <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
       </FIELD>
-      <FIELD name="zflxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="zflxR4" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
       </FIELD>
-      <FIELD name="zflxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="zflxR4Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error in flxR4</DESCRIPTION>
       </FIELD>
-      <FIELD name="zflxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="zflxR4Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in flxR4</DESCRIPTION>
       </FIELD>
@@ -1256,11 +1396,11 @@
         <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
       </FIELD>
-      <FIELD name="zflxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="zflxR5" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
       </FIELD>
-      <FIELD name="zflxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="zflxR5Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error is gflxR5</DESCRIPTION>
       </FIELD>
-      <FIELD name="zflxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="zflxR5Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in gflxR5</DESCRIPTION>
       </FIELD>
@@ -1268,11 +1408,11 @@
         <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
       </FIELD>
-      <FIELD name="zc1flxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="zc1flxR3" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
       </FIELD>
-      <FIELD name="zc1flxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="zc1flxR3Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error is c1flxR3</DESCRIPTION>
       </FIELD>
-      <FIELD name="zc1flxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="zc1flxR3Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in c1flxR3</DESCRIPTION>
       </FIELD>
@@ -1280,11 +1420,11 @@
         <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
       </FIELD>
-      <FIELD name="zc1flxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="zc1flxR4" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
       </FIELD>
-      <FIELD name="zc1flxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="zc1flxR4Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error is c1flxR4</DESCRIPTION>
       </FIELD>
-      <FIELD name="zc1flxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="zc1flxR4Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in c1flxR4</DESCRIPTION>
       </FIELD>
@@ -1292,11 +1432,11 @@
         <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
       </FIELD>
-      <FIELD name="zc1flxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="zc1flxR5" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
       </FIELD>
-      <FIELD name="zc1flxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="zc1flxR5Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error is c1flxR5</DESCRIPTION>
       </FIELD>
-      <FIELD name="zc1flxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="zc1flxR5Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in c1flxR5</DESCRIPTION>
       </FIELD>
@@ -1304,11 +1444,11 @@
         <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
       </FIELD>
-      <FIELD name="zc2flxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="zc2flxR3" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
       </FIELD>
-      <FIELD name="zc2flxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="zc2flxR3Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error is c2flxR3</DESCRIPTION>
       </FIELD>
-      <FIELD name="zc2flxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="zc2flxR3Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in c2flxR3</DESCRIPTION>
       </FIELD>
@@ -1316,11 +1456,11 @@
         <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
       </FIELD>
-      <FIELD name="zc2flxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="zc2flxR4" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
       </FIELD>
-      <FIELD name="zc2flxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="zc2flxR4Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error is c2flxR4</DESCRIPTION>
       </FIELD>
-      <FIELD name="zc2flxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="zc2flxR4Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in c2flxR4</DESCRIPTION>
       </FIELD>
@@ -1328,11 +1468,11 @@
         <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
       </FIELD>
-      <FIELD name="zc2flxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="zc2flxR5" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
       </FIELD>
-      <FIELD name="zc2flxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="zc2flxR5Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error is c2flxR5</DESCRIPTION>
       </FIELD>
-      <FIELD name="zc2flxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="zc2flxR5Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in c2flxR5</DESCRIPTION>
       </FIELD>
@@ -1340,4 +1480,6 @@
         <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
       </FIELD>
+
+      <!-- y-band values -->
       <FIELD name="ystackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
         <DESCRIPTION>ODM detection identifier</DESCRIPTION>
@@ -1345,18 +1487,15 @@
       <FIELD name="ystackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
         <DESCRIPTION>stack identifier</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
-        <DESCRIPTION>IPP object identifier</DESCRIPTION>
       </FIELD>
       <FIELD name="yippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
         <DESCRIPTION>ipp identifier</DESCRIPTION>
       </FIELD>
-      <FIELD name="yflxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="yflxR3" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
       </FIELD>
-      <FIELD name="yflxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="yflxR3Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error in flxR3</DESCRIPTION>
       </FIELD>
-      <FIELD name="yflxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="yflxR3Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in flxR3</DESCRIPTION>
       </FIELD>
@@ -1364,11 +1503,11 @@
         <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
       </FIELD>
-      <FIELD name="yflxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="yflxR4" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
       </FIELD>
-      <FIELD name="yflxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="yflxR4Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error in flxR4</DESCRIPTION>
       </FIELD>
-      <FIELD name="yflxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="yflxR4Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in flxR4</DESCRIPTION>
       </FIELD>
@@ -1376,11 +1515,11 @@
         <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
       </FIELD>
-      <FIELD name="yflxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="yflxR5" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
       </FIELD>
-      <FIELD name="yflxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="yflxR5Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error is gflxR5</DESCRIPTION>
       </FIELD>
-      <FIELD name="yflxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="yflxR5Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in gflxR5</DESCRIPTION>
       </FIELD>
@@ -1388,11 +1527,11 @@
         <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
       </FIELD>
-      <FIELD name="yc1flxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="yc1flxR3" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
       </FIELD>
-      <FIELD name="yc1flxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="yc1flxR3Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error is c1flxR3</DESCRIPTION>
       </FIELD>
-      <FIELD name="yc1flxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="yc1flxR3Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in c1flxR3</DESCRIPTION>
       </FIELD>
@@ -1400,11 +1539,11 @@
         <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
       </FIELD>
-      <FIELD name="yc1flxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="yc1flxR4" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
       </FIELD>
-      <FIELD name="yc1flxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="yc1flxR4Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error is c1flxR4</DESCRIPTION>
       </FIELD>
-      <FIELD name="yc1flxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="yc1flxR4Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in c1flxR4</DESCRIPTION>
       </FIELD>
@@ -1412,11 +1551,11 @@
         <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
       </FIELD>
-      <FIELD name="yc1flxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="yc1flxR5" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
       </FIELD>
-      <FIELD name="yc1flxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="yc1flxR5Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error is c1flxR5</DESCRIPTION>
       </FIELD>
-      <FIELD name="yc1flxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="yc1flxR5Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in c1flxR5</DESCRIPTION>
       </FIELD>
@@ -1424,11 +1563,11 @@
         <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
       </FIELD>
-      <FIELD name="yc2flxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="yc2flxR3" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
       </FIELD>
-      <FIELD name="yc2flxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="yc2flxR3Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error is c2flxR3</DESCRIPTION>
       </FIELD>
-      <FIELD name="yc2flxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="yc2flxR3Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in c2flxR3</DESCRIPTION>
       </FIELD>
@@ -1436,11 +1575,11 @@
         <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
       </FIELD>
-      <FIELD name="yc2flxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="yc2flxR4" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
       </FIELD>
-      <FIELD name="yc2flxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="yc2flxR4Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error is c2flxR4</DESCRIPTION>
       </FIELD>
-      <FIELD name="yc2flxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="yc2flxR4Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in c2flxR4</DESCRIPTION>
       </FIELD>
@@ -1448,11 +1587,11 @@
         <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
       </FIELD>
-      <FIELD name="yc2flxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="yc2flxR5" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
       </FIELD>
-      <FIELD name="yc2flxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="yc2flxR5Err" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated error is c2flxR5</DESCRIPTION>
       </FIELD>
-      <FIELD name="yc2flxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
+      <FIELD name="yc2flxR5Std" arraysize="1" datatype="float" unit="Jy" default="-999">
         <DESCRIPTION>estimated standard deviation in c2flxR5</DESCRIPTION>
       </FIELD>
@@ -1464,18 +1603,14 @@
       </DATA>
     </TABLE>
-    <TABLE name="StackModelFit">
-      <DESCRIPTION>VOTable description of PSPS table StackModelFit</DESCRIPTION>
+
+    <!-- StackModelFitExtra Table ************************************************** -->
+    <TABLE name="StackModelFitExtra">
+      <DESCRIPTION>VOTable description of PSPS table StackModelFitExtra</DESCRIPTION>
       <PARAM arraysize="1" datatype="char" ucd="meta.bib.author" name="Author" value="PSPS"></PARAM>
       <FIELD name="objID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
         <DESCRIPTION>ODM object identifier</DESCRIPTION>
       </FIELD>
-      <FIELD name="gcobjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
-        <DESCRIPTION>galactic coordinates ODM object identifier</DESCRIPTION>
-      </FIELD>
-      <FIELD name="surveyID" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="NA">
-        <DESCRIPTION>survey flag identifier</DESCRIPTION>
-      </FIELD>
-      <FIELD name="skyCellID" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-	<DESCRIPTION>single float giving PrimaryCell.SkyCell identifier</DESCRIPTION>
+      <FIELD name="ippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>IPP object identifier</DESCRIPTION>
       </FIELD>
       <FIELD name="randomStackObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
@@ -1491,2714 +1626,3347 @@
         <DESCRIPTION>identifies if this row is a best detection or not. Also set if only a primary detection exists.</DESCRIPTION>
       </FIELD>
-      <FIELD name="dvoRegionID" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>identifier to dvo spatial region</DESCRIPTION>
-      </FIELD>
-      <FIELD name="dataRelease" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="NA">
-        <DESCRIPTION>Data release when this table was loaded.</DESCRIPTION>
-      </FIELD>
-      <FIELD name="glogC" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>concentration index</DESCRIPTION>
-      </FIELD>
-      <FIELD name="glogA" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>asymmetry index</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gclump" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>clumpiness factor</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
-        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
-        <DESCRIPTION>stack identifier</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
-        <DESCRIPTION>IPP object identifier</DESCRIPTION>
-      </FIELD>
+
+      <!-- g-band values -->
       <FIELD name="gippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
         <DESCRIPTION>ipp detect identifier</DESCRIPTION>
       </FIELD>
-      <FIELD name="gdeVRadius" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>deVaucouleurs radius</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gdeVRadiusErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>estimated error in deVaucouleurs radius</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gdeVFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>deVaucouleurs magntiude</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gdeVFluxErr" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error in deV_mag</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gdeVAb" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>deVaucoulerus axis ratio</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gdeVAbErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated error in deVaucoulerus axis ratio</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gdeVPhi" arraysize="1" datatype="float" unit="degrees" default="-999">
-        <DESCRIPTION>estmated phi of deVaucouleurs axis</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gdeVPhiErr" arraysize="1" datatype="float" unit="degrees" default="-999">
-        <DESCRIPTION>estmated error of phi of deVaucouleurs axis</DESCRIPTION>
-      </FIELD>
-      <FIELD name="graDeVOff" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>Offset in RA of deVaucouleurs fit from PSF RA</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gdecDeVOff" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>Offset in DEC of deVaucouleurs fit from PSF DEC</DESCRIPTION>
-      </FIELD>
-      <FIELD name="graDeVOffErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>estimated error in ra offset</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gdecDeVOffErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>estimated error in dec offset</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gdeVCf" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>deVaucouleurs fit coverage factor</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gdeVLikelihood" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>deVaucouleurs fit likelihood factor</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gexpRadius" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>Exponential fit radius</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gexpRadiusErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>estimated error in Exponential fit radius</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gexpFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Exponential fit flux</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gexpFluxErr" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error in expFlux</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gexpAb" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Exponential fit axis ratio</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gexpAbErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated error in Exponential fit axis ratio</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gexpPhi" arraysize="1" datatype="float" unit="degrees" default="-999">
-        <DESCRIPTION>estmated phi of Exponential axis</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gexpPhiErr" arraysize="1" datatype="float" unit="degrees" default="-999">
-        <DESCRIPTION>estmated error of phi of Exponential axis</DESCRIPTION>
-      </FIELD>
-      <FIELD name="graExpOff" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Offset in RA of Exponential fit from PSF RA</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gdecExpOff" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Offset in DEC of Exponential fit from PSF DEC</DESCRIPTION>
-      </FIELD>
-      <FIELD name="graExpOffErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated error in raExpOff</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gdecExpOffErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated error in decExpOff</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gexpCf" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Exponential fit coverage factor</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gexpLikelihood" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Exponential fit likelihood factor</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gserRadius" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>Sersic radius</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gserRadiusErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>estimated error in Sersic radius</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gserFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Sersic Flux</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gserFluxErr" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error in serFlux</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gserAb" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Sersic axis ratio</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gserAbErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated error in Sersic axis ratio</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gserNu" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Sersic index</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gserNuErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated error in Sersic index</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gserPhi" arraysize="1" datatype="float" unit="degrees" default="-999">
-        <DESCRIPTION>estmated phi of Sersic axis</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gserPhiErr" arraysize="1" datatype="float" unit="degrees" default="-999">
-        <DESCRIPTION>estmated error of phi of Sersic axis</DESCRIPTION>
-      </FIELD>
-      <FIELD name="graSerOff" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Offset in RA of Sersic fit from PSF RA</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gdecSerOff" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Offset in DEC of Sersic fit from PSF DEC</DESCRIPTION>
-      </FIELD>
-      <FIELD name="graSerOffErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated error in raSerOff</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gdecSerOffErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated error in decSerOff</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gserCf" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Sersic fit coverage factor</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gserLikelihood" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Sersic fit likelihood factor</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gpetRadius" arraysize="1" datatype="float" unit="pixels" default="-999">
-        <DESCRIPTION>Petrosian radius</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gpetRadiusErr" arraysize="1" datatype="float" unit="pixels" default="-999">
-        <DESCRIPTION>estimated error inPetrosian radius</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gpetFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Petrosian Flux</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gpetFluxErr" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error in petFlux</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gpetR50" arraysize="1" datatype="float" unit="pixels" default="-999">
-        <DESCRIPTION>Petrosian radius at 50% light</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gpetR50Err" arraysize="1" datatype="float" unit="pixels" default="-999">
-        <DESCRIPTION>estimated error inPetrosian radius at 50% light</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gpetR90" arraysize="1" datatype="float" unit="pixels" default="-999">
-        <DESCRIPTION>Petrosian radius at 90% light</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gpetR90Err" arraysize="1" datatype="float" unit="pixels" default="-999">
-        <DESCRIPTION>estimated error in Petrosian radius at 90% light</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gpetCf" arraysize="1" datatype="float" unit="pixels" default="-999">
-        <DESCRIPTION>Petrosian fit coverage factor</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gflxR1" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gflxR1Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gflxR1Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gflxR1Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gflxR2" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gflxR2Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gflxR2Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gflxR2Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gflxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gflxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gflxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gflxR3Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gflxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gflxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gflxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gflxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gflxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gflxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gflxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gflxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gflxR6" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gflxR6Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gflxR6Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gflxR6Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gflxR7" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gflxR7Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gflxR7Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gflxR7Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gflxR8" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gflxR8Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gflxR8Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gflxR8Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gflxR9" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gflxR9Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gflxR9Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gflxR9Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gflxR10" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gflxR10Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gflxR10Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gflxR10Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc1flxR1" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc1flxR1Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc1flxR1Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc1flxR1Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc1flxR2" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc1flxR2Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc1flxR2Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc1flxR2Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc1flxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc1flxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc1flxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc1flxR3Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc1flxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc1flxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc1flxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc1flxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc1flxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc1flxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc1flxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc1flxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc1flxR6" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc1flxR6Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc1flxR6Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc1flxR6Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc1flxR7" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc1flxR7Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc1flxR7Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc1flxR7Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc1flxR8" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc1flxR8Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc1flxR8Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc1flxR8Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc1flxR9" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc1flxR9Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc1flxR9Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc1flxR9Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc1flxR10" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc1flxR10Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc1flxR10Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc1flxR10Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc2flxR1" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc2flxR1Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc2flxR1Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc2flxR1Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc2flxR2" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc2flxR2Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc2flxR2Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc2flxR2Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc2flxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc2flxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc2flxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc2flxR3Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc2flxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc2flxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc2flxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc2flxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc2flxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc2flxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc2flxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc2flxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc2flxR6" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc2flxR6Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc2flxR6Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc2flxR6Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc2flxR7" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc2flxR7Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc2flxR7Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc2flxR7Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc2flxR8" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc2flxR8Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc2flxR8Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc2flxR8Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc2flxR9" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc2flxR9Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc2flxR9Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc2flxR9Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc2flxR10" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc2flxR10Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc2flxR10Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="gc2flxR10Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rlogC" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>concentration index</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rlogA" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>asymmetry index</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rclump" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>clumpiness factor</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
-        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
-        <DESCRIPTION>stack identifier</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
-        <DESCRIPTION>IPP object identifier</DESCRIPTION>
-      </FIELD>
+      <FIELD name="gstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gS2" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>(un)smoothness (Cheng 2012, Simard 2002)</DESCRIPTION>
+      </FIELD>
+      <FIELD name="glogRT" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>total residual from elliptically symmetric model</DESCRIPTION>
+      </FIELD>
+      <FIELD name="glogRA" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>asymmetric residual from elliptically symmetric model</DESCRIPTION>
+      </FIELD>
+      <FIELD name="glogC" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>concentration index (Petrosian R_50 / R_90</DESCRIPTION>
+      </FIELD>
+      <FIELD name="glogA" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>log of asymmetry index (Gyory and Bell 2010)</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gbumpy" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Blakeslee bumpiness</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ghalfLightRad" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>half-light radius</DESCRIPTION>
+      </FIELD>
+
+      <!-- r-band values -->
       <FIELD name="rippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
         <DESCRIPTION>ipp detect identifier</DESCRIPTION>
       </FIELD>
-      <FIELD name="rdeVRadius" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>deVaucouleurs radius</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rdeVRadiusErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>estimated error in deVaucouleurs radius</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rdeVFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>deVaucouleurs magntiude</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rdeVFluxErr" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error in deV_mag</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rdeVAb" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>deVaucoulerus axis ratio</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rdeVAbErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated error in deVaucoulerus axis ratio</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rdeVPhi" arraysize="1" datatype="float" unit="degrees" default="-999">
-        <DESCRIPTION>estmated phi of deVaucouleurs axis</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rdeVPhiErr" arraysize="1" datatype="float" unit="degrees" default="-999">
-        <DESCRIPTION>estmated error of phi of deVaucouleurs axis</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rraDeVOff" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>Offset in RA of deVaucouleurs fit from PSF RA</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rdecDeVOff" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>Offset in DEC of deVaucouleurs fit from PSF DEC</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rraDeVOffErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>estimated error in ra offset</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rdecDeVOffErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>estimated error in dec offset</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rdeVCf" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>deVaucouleurs fit coverage factor</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rdeVLikelihood" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>deVaucouleurs fit likelihood factor</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rexpRadius" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>Exponential fit radius</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rexpRadiusErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>estimated error in Exponential fit radius</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rexpFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Exponential fit flux</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rexpFluxErr" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error in expFlux</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rexpAb" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Exponential fit axis ratio</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rexpAbErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated error in Exponential fit axis ratio</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rexpPhi" arraysize="1" datatype="float" unit="degrees" default="-999">
-        <DESCRIPTION>estmated phi of Exponential axis</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rexpPhiErr" arraysize="1" datatype="float" unit="degrees" default="-999">
-        <DESCRIPTION>estmated error of phi of Exponential axis</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rraExpOff" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Offset in RA of Exponential fit from PSF RA</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rdecExpOff" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Offset in DEC of Exponential fit from PSF DEC</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rraExpOffErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated error in raExpOff</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rdecExpOffErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated error in decExpOff</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rexpCf" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Exponential fit coverage factor</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rexpLikelihood" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Exponential fit likelihood factor</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rserRadius" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>Sersic radius</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rserRadiusErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>estimated error in Sersic radius</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rserFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Sersic Flux</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rserFluxErr" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error in serFlux</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rserAb" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Sersic axis ratio</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rserAbErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated error in Sersic axis ratio</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rserNu" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Sersic index</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rserNuErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated error in Sersic index</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rserPhi" arraysize="1" datatype="float" unit="degrees" default="-999">
-        <DESCRIPTION>estmated phi of Sersic axis</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rserPhiErr" arraysize="1" datatype="float" unit="degrees" default="-999">
-        <DESCRIPTION>estmated error of phi of Sersic axis</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rraSerOff" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Offset in RA of Sersic fit from PSF RA</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rdecSerOff" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Offset in DEC of Sersic fit from PSF DEC</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rraSerOffErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated error in raSerOff</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rdecSerOffErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated error in decSerOff</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rserCf" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Sersic fit coverage factor</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rserLikelihood" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Sersic fit likelihood factor</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rpetRadius" arraysize="1" datatype="float" unit="pixels" default="-999">
-        <DESCRIPTION>Petrosian radius</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rpetRadiusErr" arraysize="1" datatype="float" unit="pixels" default="-999">
-        <DESCRIPTION>estimated error inPetrosian radius</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rpetFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Petrosian Flux</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rpetFluxErr" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error in petFlux</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rpetR50" arraysize="1" datatype="float" unit="pixels" default="-999">
-        <DESCRIPTION>Petrosian radius at 50% light</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rpetR50Err" arraysize="1" datatype="float" unit="pixels" default="-999">
-        <DESCRIPTION>estimated error inPetrosian radius at 50% light</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rpetR90" arraysize="1" datatype="float" unit="pixels" default="-999">
-        <DESCRIPTION>Petrosian radius at 90% light</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rpetR90Err" arraysize="1" datatype="float" unit="pixels" default="-999">
-        <DESCRIPTION>estimated error in Petrosian radius at 90% light</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rpetCf" arraysize="1" datatype="float" unit="pixels" default="-999">
-        <DESCRIPTION>Petrosian fit coverage factor</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rflxR1" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rflxR1Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rflxR1Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rflxR1Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rflxR2" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rflxR2Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rflxR2Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rflxR2Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rflxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rflxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rflxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rflxR3Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rflxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rflxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rflxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rflxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rflxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rflxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rflxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rflxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rflxR6" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rflxR6Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rflxR6Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rflxR6Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rflxR7" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rflxR7Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rflxR7Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rflxR7Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rflxR8" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rflxR8Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rflxR8Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rflxR8Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rflxR9" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rflxR9Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rflxR9Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rflxR9Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rflxR10" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rflxR10Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rflxR10Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rflxR10Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc1flxR1" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc1flxR1Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc1flxR1Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc1flxR1Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc1flxR2" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc1flxR2Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc1flxR2Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc1flxR2Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc1flxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc1flxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc1flxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc1flxR3Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc1flxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc1flxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc1flxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc1flxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc1flxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc1flxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc1flxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc1flxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc1flxR6" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc1flxR6Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc1flxR6Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc1flxR6Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc1flxR7" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc1flxR7Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc1flxR7Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc1flxR7Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc1flxR8" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc1flxR8Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc1flxR8Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc1flxR8Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc1flxR9" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc1flxR9Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc1flxR9Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc1flxR9Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc1flxR10" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc1flxR10Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc1flxR10Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc1flxR10Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc2flxR1" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc2flxR1Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc2flxR1Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc2flxR1Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc2flxR2" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc2flxR2Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc2flxR2Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc2flxR2Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc2flxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc2flxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc2flxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc2flxR3Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc2flxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc2flxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc2flxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc2flxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc2flxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc2flxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc2flxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc2flxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc2flxR6" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc2flxR6Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc2flxR6Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc2flxR6Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc2flxR7" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc2flxR7Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc2flxR7Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc2flxR7Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc2flxR8" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc2flxR8Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc2flxR8Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc2flxR8Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc2flxR9" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc2flxR9Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc2flxR9Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc2flxR9Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc2flxR10" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc2flxR10Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc2flxR10Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="rc2flxR10Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ilogC" arraysize="1" datatype="float" unit="dimensionless" default="NA">
-        <DESCRIPTION>concentration index</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ilogA" arraysize="1" datatype="float" unit="dimensionless" default="NA">
-        <DESCRIPTION>asymmetry index</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iclump" arraysize="1" datatype="float" unit="dimensionless" default="NA">
-        <DESCRIPTION>clumpiness factor</DESCRIPTION>
-      </FIELD>
-      <FIELD name="istackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="-999">
-        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
-      </FIELD>
-      <FIELD name="istackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="-999">
-        <DESCRIPTION>stack identifier</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
-        <DESCRIPTION>IPP object identifier</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="-999">
+      <FIELD name="rstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rS2" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>(un)smoothness (Cheng 2012, Simard 2002)</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rlogRT" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>total residual from elliptically symmetric model</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rlogRA" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>asymmetric residual from elliptically symmetric model</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rlogC" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>concentration index (Petrosian R_50 / R_90</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rlogA" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>log of asymmetry index (Gyory and Bell 2010)</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rbumpy" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Blakeslee bumpiness</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rhalfLightRad" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>half-light radius</DESCRIPTION>
+      </FIELD>
+
+      <!-- i-band values -->
+      <FIELD name="iippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
         <DESCRIPTION>ipp detect identifier</DESCRIPTION>
       </FIELD>
-      <FIELD name="ideVRadius" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>deVaucouleurs radius</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ideVRadiusErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>estimated error in deVaucouleurs radius</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ideVFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>deVaucouleurs magntiude</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ideVFluxErr" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error in deV_mag</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ideVAb" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>deVaucoulerus axis ratio</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ideVAbErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated error in deVaucoulerus axis ratio</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ideVPhi" arraysize="1" datatype="float" unit="degrees" default="-999">
-        <DESCRIPTION>estmated phi of deVaucouleurs axis</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ideVPhiErr" arraysize="1" datatype="float" unit="degrees" default="-999">
-        <DESCRIPTION>estmated error of phi of deVaucouleurs axis</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iraDeVOff" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>Offset in RA of deVaucouleurs fit from PSF RA</DESCRIPTION>
-      </FIELD>
-      <FIELD name="idecDeVOff" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>Offset in DEC of deVaucouleurs fit from PSF DEC</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iraDeVOffErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>estimated error in ra offset</DESCRIPTION>
-      </FIELD>
-      <FIELD name="idecDeVOffErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>estimated error in dec offset</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ideVCf" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>deVaucouleurs fit coverage factor</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ideVLikelihood" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>deVaucouleurs fit likelihood factor</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iexpRadius" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>Exponential fit radius</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iexpRadiusErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>estimated error in Exponential fit radius</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iexpFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Exponential fit flux</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iexpFluxErr" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error in expFlux</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iexpAb" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Exponential fit axis ratio</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iexpAbErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated error in Exponential fit axis ratio</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iexpPhi" arraysize="1" datatype="float" unit="degrees" default="-999">
-        <DESCRIPTION>estmated phi of Exponential axis</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iexpPhiErr" arraysize="1" datatype="float" unit="degrees" default="-999">
-        <DESCRIPTION>estmated error of phi of Exponential axis</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iraExpOff" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Offset in RA of Exponential fit from PSF RA</DESCRIPTION>
-      </FIELD>
-      <FIELD name="idecExpOff" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Offset in DEC of Exponential fit from PSF DEC</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iraExpOffErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated error in raExpOff</DESCRIPTION>
-      </FIELD>
-      <FIELD name="idecExpOffErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated error in decExpOff</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iexpCf" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Exponential fit coverage factor</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iexpLikelihood" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Exponential fit likelihood factor</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iserRadius" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>Sersic radius</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iserRadiusErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>estimated error in Sersic radius</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iserFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Sersic Flux</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iserFluxErr" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error in serFlux</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iserAb" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Sersic axis ratio</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iserAbErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated error in Sersic axis ratio</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iserNu" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Sersic index</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iserNuErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated error in Sersic index</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iserPhi" arraysize="1" datatype="float" unit="degrees" default="-999">
-        <DESCRIPTION>estmated phi of Sersic axis</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iserPhiErr" arraysize="1" datatype="float" unit="degrees" default="-999">
-        <DESCRIPTION>estmated error of phi of Sersic axis</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iraSerOff" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Offset in RA of Sersic fit from PSF RA</DESCRIPTION>
-      </FIELD>
-      <FIELD name="idecSerOff" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Offset in DEC of Sersic fit from PSF DEC</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iraSerOffErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated error in raSerOff</DESCRIPTION>
-      </FIELD>
-      <FIELD name="idecSerOffErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated error in decSerOff</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iserCf" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Sersic fit coverage factor</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iserLikelihood" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Sersic fit likelihood factor</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ipetRadius" arraysize="1" datatype="float" unit="pixels" default="-999">
-        <DESCRIPTION>Petrosian radius</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ipetRadiusErr" arraysize="1" datatype="float" unit="pixels" default="-999">
-        <DESCRIPTION>estimated error inPetrosian radius</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ipetFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Petrosian Flux</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ipetFluxErr" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error in petFlux</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ipetR50" arraysize="1" datatype="float" unit="pixels" default="-999">
-        <DESCRIPTION>Petrosian radius at 50% light</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ipetR50Err" arraysize="1" datatype="float" unit="pixels" default="-999">
-        <DESCRIPTION>estimated error inPetrosian radius at 50% light</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ipetR90" arraysize="1" datatype="float" unit="pixels" default="-999">
-        <DESCRIPTION>Petrosian radius at 90% light</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ipetR90Err" arraysize="1" datatype="float" unit="pixels" default="-999">
-        <DESCRIPTION>estimated error in Petrosian radius at 90% light</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ipetCf" arraysize="1" datatype="float" unit="pixels" default="-999">
-        <DESCRIPTION>Petrosian fit coverage factor</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iflxR1" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iflxR1Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iflxR1Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iflxR1Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iflxR2" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iflxR2Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iflxR2Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iflxR2Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iflxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iflxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iflxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iflxR3Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iflxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iflxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iflxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iflxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iflxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iflxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iflxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iflxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iflxR6" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iflxR6Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iflxR6Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iflxR6Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iflxR7" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iflxR7Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iflxR7Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iflxR7Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iflxR8" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iflxR8Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iflxR8Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iflxR8Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iflxR9" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iflxR9Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iflxR9Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iflxR9Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iflxR10" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iflxR10Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iflxR10Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="iflxR10Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic1flxR1" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic1flxR1Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic1flxR1Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic1flxR1Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic1flxR2" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic1flxR2Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic1flxR2Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic1flxR2Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic1flxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic1flxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic1flxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic1flxR3Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic1flxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic1flxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic1flxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic1flxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic1flxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic1flxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic1flxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic1flxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic1flxR6" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic1flxR6Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic1flxR6Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic1flxR6Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic1flxR7" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic1flxR7Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic1flxR7Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic1flxR7Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic1flxR8" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic1flxR8Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic1flxR8Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic1flxR8Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic1flxR9" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic1flxR9Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic1flxR9Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic1flxR9Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic1flxR10" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic1flxR10Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic1flxR10Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic1flxR10Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic2flxR1" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic2flxR1Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic2flxR1Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic2flxR1Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic2flxR2" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic2flxR2Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic2flxR2Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic2flxR2Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic2flxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic2flxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic2flxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic2flxR3Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic2flxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic2flxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic2flxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic2flxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic2flxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic2flxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic2flxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic2flxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic2flxR6" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic2flxR6Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic2flxR6Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic2flxR6Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic2flxR7" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic2flxR7Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic2flxR7Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic2flxR7Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic2flxR8" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic2flxR8Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic2flxR8Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic2flxR8Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic2flxR9" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic2flxR9Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic2flxR9Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic2flxR9Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic2flxR10" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic2flxR10Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic2flxR10Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ic2flxR10Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zlogC" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>concentration index</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zlogA" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>asymmetry index</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zclump" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>clumpiness factor</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
-        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
-        <DESCRIPTION>stack identifier</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
-        <DESCRIPTION>IPP object identifier</DESCRIPTION>
-      </FIELD>
+      <FIELD name="istackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="istackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iS2" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>(un)smoothness (Cheng 2012, Simard 2002)</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ilogRT" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>total residual from elliptically symmetric model</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ilogRA" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>asymmetric residual from elliptically symmetric model</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ilogC" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>concentration index (Petrosian R_50 / R_90</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ilogA" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>log of asymmetry index (Gyory and Bell 2010)</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ibumpy" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Blakeslee bumpiness</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ihalfLightRad" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>half-light radius</DESCRIPTION>
+      </FIELD>
+
+      <!-- z-band values -->
       <FIELD name="zippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
         <DESCRIPTION>ipp detect identifier</DESCRIPTION>
       </FIELD>
-      <FIELD name="zdeVRadius" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>deVaucouleurs radius</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zdeVRadiusErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>estimated error in deVaucouleurs radius</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zdeVFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>deVaucouleurs magntiude</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zdeVFluxErr" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error in deV_mag</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zdeVAb" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>deVaucoulerus axis ratio</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zdeVAbErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated error in deVaucoulerus axis ratio</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zdeVPhi" arraysize="1" datatype="float" unit="degrees" default="-999">
-        <DESCRIPTION>estmated phi of deVaucouleurs axis</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zdeVPhiErr" arraysize="1" datatype="float" unit="degrees" default="-999">
-        <DESCRIPTION>estmated error of phi of deVaucouleurs axis</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zraDeVOff" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>Offset in RA of deVaucouleurs fit from PSF RA</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zdecDeVOff" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>Offset in DEC of deVaucouleurs fit from PSF DEC</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zraDeVOffErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>estimated error in ra offset</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zdecDeVOffErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>estimated error in dec offset</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zdeVCf" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>deVaucouleurs fit coverage factor</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zdeVLikelihood" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>deVaucouleurs fit likelihood factor</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zexpRadius" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>Exponential fit radius</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zexpRadiusErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>estimated error in Exponential fit radius</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zexpFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Exponential fit flux</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zexpFluxErr" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error in expFlux</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zexpAb" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Exponential fit axis ratio</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zexpAbErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated error in Exponential fit axis ratio</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zexpPhi" arraysize="1" datatype="float" unit="degrees" default="-999">
-        <DESCRIPTION>estmated phi of Exponential axis</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zexpPhiErr" arraysize="1" datatype="float" unit="degrees" default="-999">
-        <DESCRIPTION>estmated error of phi of Exponential axis</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zraExpOff" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Offset in RA of Exponential fit from PSF RA</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zdecExpOff" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Offset in DEC of Exponential fit from PSF DEC</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zraExpOffErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated error in raExpOff</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zdecExpOffErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated error in decExpOff</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zexpCf" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Exponential fit coverage factor</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zexpLikelihood" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Exponential fit likelihood factor</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zserRadius" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>Sersic radius</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zserRadiusErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>estimated error in Sersic radius</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zserFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Sersic Flux</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zserFluxErr" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error in serFlux</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zserAb" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Sersic axis ratio</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zserAbErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated error in Sersic axis ratio</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zserNu" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Sersic index</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zserNuErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated error in Sersic index</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zserPhi" arraysize="1" datatype="float" unit="degrees" default="-999">
-        <DESCRIPTION>estmated phi of Sersic axis</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zserPhiErr" arraysize="1" datatype="float" unit="degrees" default="-999">
-        <DESCRIPTION>estmated error of phi of Sersic axis</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zraSerOff" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Offset in RA of Sersic fit from PSF RA</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zdecSerOff" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Offset in DEC of Sersic fit from PSF DEC</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zraSerOffErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated error in raSerOff</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zdecSerOffErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated error in decSerOff</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zserCf" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Sersic fit coverage factor</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zserLikelihood" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Sersic fit likelihood factor</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zpetRadius" arraysize="1" datatype="float" unit="pixels" default="-999">
-        <DESCRIPTION>Petrosian radius</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zpetRadiusErr" arraysize="1" datatype="float" unit="pixels" default="-999">
-        <DESCRIPTION>estimated error inPetrosian radius</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zpetFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Petrosian Flux</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zpetFluxErr" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error in petFlux</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zpetR50" arraysize="1" datatype="float" unit="pixels" default="-999">
-        <DESCRIPTION>Petrosian radius at 50% light</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zpetR50Err" arraysize="1" datatype="float" unit="pixels" default="-999">
-        <DESCRIPTION>estimated error inPetrosian radius at 50% light</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zpetR90" arraysize="1" datatype="float" unit="pixels" default="-999">
-        <DESCRIPTION>Petrosian radius at 90% light</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zpetR90Err" arraysize="1" datatype="float" unit="pixels" default="-999">
-        <DESCRIPTION>estimated error in Petrosian radius at 90% light</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zpetCf" arraysize="1" datatype="float" unit="pixels" default="-999">
-        <DESCRIPTION>Petrosian fit coverage factor</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zflxR1" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zflxR1Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zflxR1Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zflxR1Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zflxR2" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zflxR2Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zflxR2Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zflxR2Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zflxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zflxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zflxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zflxR3Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zflxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zflxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zflxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zflxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zflxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zflxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zflxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zflxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zflxR6" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zflxR6Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zflxR6Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zflxR6Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zflxR7" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zflxR7Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zflxR7Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zflxR7Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zflxR8" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zflxR8Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zflxR8Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zflxR8Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zflxR9" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zflxR9Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zflxR9Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zflxR9Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zflxR10" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zflxR10Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zflxR10Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zflxR10Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc1flxR1" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc1flxR1Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc1flxR1Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc1flxR1Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc1flxR2" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc1flxR2Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc1flxR2Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc1flxR2Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc1flxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc1flxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc1flxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc1flxR3Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc1flxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc1flxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc1flxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc1flxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc1flxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc1flxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc1flxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc1flxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc1flxR6" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc1flxR6Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc1flxR6Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc1flxR6Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc1flxR7" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc1flxR7Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc1flxR7Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc1flxR7Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc1flxR8" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc1flxR8Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc1flxR8Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc1flxR8Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc1flxR9" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc1flxR9Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc1flxR9Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc1flxR9Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc1flxR10" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc1flxR10Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc1flxR10Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc1flxR10Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc2flxR1" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc2flxR1Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc2flxR1Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc2flxR1Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc2flxR2" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc2flxR2Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc2flxR2Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc2flxR2Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc2flxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc2flxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc2flxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc2flxR3Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc2flxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc2flxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc2flxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc2flxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc2flxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc2flxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc2flxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc2flxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc2flxR6" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc2flxR6Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc2flxR6Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc2flxR6Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc2flxR7" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc2flxR7Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc2flxR7Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc2flxR7Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc2flxR8" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc2flxR8Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc2flxR8Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc2flxR8Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc2flxR9" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc2flxR9Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc2flxR9Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc2flxR9Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc2flxR10" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc2flxR10Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc2flxR10Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="zc2flxR10Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ylogC" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>concentration index</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ylogA" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>asymmetry index</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yclump" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>clumpiness factor</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ystackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
-        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ystackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
-        <DESCRIPTION>stack identifier</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
-        <DESCRIPTION>IPP object identifier</DESCRIPTION>
-      </FIELD>
+      <FIELD name="zstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zS2" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>(un)smoothness (Cheng 2012, Simard 2002)</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zlogRT" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>total residual from elliptically symmetric model</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zlogRA" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>asymmetric residual from elliptically symmetric model</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zlogC" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>concentration index (Petrosian R_50 / R_90</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zlogA" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>log of asymmetry index (Gyory and Bell 2010)</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zbumpy" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Blakeslee bumpiness</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zhalfLightRad" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>half-light radius</DESCRIPTION>
+      </FIELD>
+
+      <!-- y-band values -->
       <FIELD name="yippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
         <DESCRIPTION>ipp detect identifier</DESCRIPTION>
       </FIELD>
-      <FIELD name="ydeVRadius" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>deVaucouleurs radius</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ydeVRadiusErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>estimated error in deVaucouleurs radius</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ydeVFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>deVaucouleurs magntiude</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ydeVFluxErr" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error in deV_mag</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ydeVAb" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>deVaucoulerus axis ratio</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ydeVAbErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated error in deVaucoulerus axis ratio</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ydeVPhi" arraysize="1" datatype="float" unit="degrees" default="-999">
-        <DESCRIPTION>estmated phi of deVaucouleurs axis</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ydeVPhiErr" arraysize="1" datatype="float" unit="degrees" default="-999">
-        <DESCRIPTION>estmated error of phi of deVaucouleurs axis</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yraDeVOff" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>Offset in RA of deVaucouleurs fit from PSF RA</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ydecDeVOff" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>Offset in DEC of deVaucouleurs fit from PSF DEC</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yraDeVOffErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>estimated error in ra offset</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ydecDeVOffErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>estimated error in dec offset</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ydeVCf" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>deVaucouleurs fit coverage factor</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ydeVLikelihood" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>deVaucouleurs fit likelihood factor</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yexpRadius" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>Exponential fit radius</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yexpRadiusErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>estimated error in Exponential fit radius</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yexpFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Exponential fit flux</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yexpFluxErr" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error in expFlux</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yexpAb" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Exponential fit axis ratio</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yexpAbErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated error in Exponential fit axis ratio</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yexpPhi" arraysize="1" datatype="float" unit="degrees" default="-999">
-        <DESCRIPTION>estmated phi of Exponential axis</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yexpPhiErr" arraysize="1" datatype="float" unit="degrees" default="-999">
-        <DESCRIPTION>estmated error of phi of Exponential axis</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yraExpOff" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Offset in RA of Exponential fit from PSF RA</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ydecExpOff" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Offset in DEC of Exponential fit from PSF DEC</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yraExpOffErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated error in raExpOff</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ydecExpOffErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated error in decExpOff</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yexpCf" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Exponential fit coverage factor</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yexpLikelihood" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Exponential fit likelihood factor</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yserRadius" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>Sersic radius</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yserRadiusErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
-        <DESCRIPTION>estimated error in Sersic radius</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yserFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Sersic Flux</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yserFluxErr" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error in serFlux</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yserAb" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Sersic axis ratio</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yserAbErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated error in Sersic axis ratio</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yserNu" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Sersic index</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yserNuErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated error in Sersic index</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yserPhi" arraysize="1" datatype="float" unit="degrees" default="-999">
-        <DESCRIPTION>estmated phi of Sersic axis</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yserPhiErr" arraysize="1" datatype="float" unit="degrees" default="-999">
-        <DESCRIPTION>estmated error of phi of Sersic axis</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yraSerOff" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Offset in RA of Sersic fit from PSF RA</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ydecSerOff" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Offset in DEC of Sersic fit from PSF DEC</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yraSerOffErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated error in raSerOff</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ydecSerOffErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated error in decSerOff</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yserCf" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Sersic fit coverage factor</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yserLikelihood" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>Sersic fit likelihood factor</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ypetRadius" arraysize="1" datatype="float" unit="pixels" default="-999">
-        <DESCRIPTION>Petrosian radius</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ypetRadiusErr" arraysize="1" datatype="float" unit="pixels" default="-999">
-        <DESCRIPTION>estimated error inPetrosian radius</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ypetFlux" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Petrosian Flux</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ypetFluxErr" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error in petFlux</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ypetR50" arraysize="1" datatype="float" unit="pixels" default="-999">
-        <DESCRIPTION>Petrosian radius at 50% light</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ypetR50Err" arraysize="1" datatype="float" unit="pixels" default="-999">
-        <DESCRIPTION>estimated error inPetrosian radius at 50% light</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ypetR90" arraysize="1" datatype="float" unit="pixels" default="-999">
-        <DESCRIPTION>Petrosian radius at 90% light</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ypetR90Err" arraysize="1" datatype="float" unit="pixels" default="-999">
-        <DESCRIPTION>estimated error in Petrosian radius at 90% light</DESCRIPTION>
-      </FIELD>
-      <FIELD name="ypetCf" arraysize="1" datatype="float" unit="pixels" default="-999">
-        <DESCRIPTION>Petrosian fit coverage factor</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yflxR1" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yflxR1Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yflxR1Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yflxR1Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yflxR2" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yflxR2Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yflxR2Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yflxR2Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yflxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yflxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yflxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yflxR3Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yflxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yflxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yflxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yflxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yflxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yflxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yflxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yflxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yflxR6" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yflxR6Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yflxR6Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yflxR6Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yflxR7" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yflxR7Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yflxR7Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yflxR7Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yflxR8" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yflxR8Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yflxR8Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yflxR8Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yflxR9" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yflxR9Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yflxR9Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yflxR9Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yflxR10" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yflxR10Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is flxR10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yflxR10Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in flxR10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yflxR10Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc1flxR1" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc1flxR1Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc1flxR1Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc1flxR1Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc1flxR2" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc1flxR2Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc1flxR2Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc1flxR2Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc1flxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc1flxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc1flxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc1flxR3Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc1flxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc1flxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc1flxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc1flxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc1flxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc1flxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc1flxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc1flxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc1flxR6" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc1flxR6Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc1flxR6Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc1flxR6Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc1flxR7" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc1flxR7Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc1flxR7Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc1flxR7Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc1flxR8" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc1flxR8Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc1flxR8Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc1flxR8Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc1flxR9" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc1flxR9Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc1flxR9Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc1flxR9Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc1flxR10" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc1flxR10Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c1flxR10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc1flxR10Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c1flxR10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc1flxR10Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc2flxR1" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc2flxR1Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc2flxR1Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc2flxR1Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc2flxR2" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc2flxR2Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc2flxR2Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR2</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc2flxR2Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc2flxR3" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc2flxR3Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc2flxR3Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc2flxR3Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc2flxR4" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc2flxR4Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc2flxR4Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc2flxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc2flxR5" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc2flxR5Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc2flxR5Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc2flxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc2flxR6" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc2flxR6Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc2flxR6Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc2flxR6Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R6</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc2flxR7" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc2flxR7Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc2flxR7Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc2flxR7Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R7</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc2flxR8" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc2flxR8Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc2flxR8Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc2flxR8Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R8</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc2flxR9" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc2flxR9Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc2flxR9Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc2flxR9Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R9</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc2flxR10" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>Flux inside r = 10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc2flxR10Err" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated error is c2flxR10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc2flxR10Std" arraysize="1" datatype="float" unit="adu/seconds" default="-999">
-        <DESCRIPTION>estimated standard deviation in c2flxR10</DESCRIPTION>
-      </FIELD>
-      <FIELD name="yc2flxR10Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
-        <DESCRIPTION>estimated filling factor at R10</DESCRIPTION>
-      </FIELD>
+      <FIELD name="ystackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ystackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yS2" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>(un)smoothness (Cheng 2012, Simard 2002)</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ylogRT" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>total residual from elliptically symmetric model</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ylogRA" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>asymmetric residual from elliptically symmetric model</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ylogC" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>concentration index (Petrosian R_50 / R_90</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ylogA" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>log of asymmetry index (Gyory and Bell 2010)</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ybumpy" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Blakeslee bumpiness</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yhalfLightRad" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>half-light radius</DESCRIPTION>
+      </FIELD>
+
       <DATA>
 	<TABLEDATA></TABLEDATA>
       </DATA>
     </TABLE>
+
+    <!-- StackModelFitExp Table ************************************************** -->
+    <TABLE name="StackModelFitExp">
+      <DESCRIPTION>VOTable description of PSPS table StackModelFitExp</DESCRIPTION>
+      <PARAM arraysize="1" datatype="char" ucd="meta.bib.author" name="Author" value="PSPS"></PARAM>
+      <FIELD name="objID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>IPP object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="randomStackObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+	<DESCRIPTION>random stack id</DESCRIPTION>
+      </FIELD>
+      <FIELD name="stackDetectRowID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+	<DESCRIPTION>identifies which of up to 5 possible stackdetections thisrow refers to: primary, up to 3 Secondary, 1 best</DESCRIPTION>
+      </FIELD>
+      <FIELD name="primaryDetection" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="255">
+        <DESCRIPTION>identifies if this row is a primary stack detection. True about 80 percent of time</DESCRIPTION>
+      </FIELD>
+      <FIELD name="bestDetection" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="255">
+        <DESCRIPTION>identifies if this row is a best detection or not. Also set if only a primary detection exists.</DESCRIPTION>
+      </FIELD>
+
+      <!-- g-band values -->
+      <FIELD name="gippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp detect identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gExpRadius" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>Exponential fit radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gExpRadiusErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in Exponential fit radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gExpMag" arraysize="1" datatype="float" unit="AB_mag" default="-999">
+        <DESCRIPTION>Exponential fit mag</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gExpMagErr" arraysize="1" datatype="float" unit="AB_mag" default="-999">
+        <DESCRIPTION>estimated error in expMag</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gExpAb" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Exponential fit axis ratio</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gExpAbErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated error in Exponential fit axis ratio</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gExpPhi" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>estmated phi of Exponential axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gExpPhiErr" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>estmated error of phi of Exponential axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gExpRa" arraysize="1" datatype="double" unit="degrees" default="-999">
+        <DESCRIPTION>RA of Exponential fit</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gExpDec" arraysize="1" datatype="double" unit="degrees" default="-999">
+        <DESCRIPTION>DEC of Exponential fit</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gExpRaErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in ExpRa</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gExpDecErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in ExpDec</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gExpCf" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Exponential fit coverage factor</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gExpChisq" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Exponential fit chi square factor</DESCRIPTION>
+      </FIELD>
+
+      <!-- r-band values -->
+      <FIELD name="rippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp detect identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rExpRadius" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>Exponential fit radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rExpRadiusErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in Exponential fit radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rExpMag" arraysize="1" datatype="float" unit="AB_mag" default="-999">
+        <DESCRIPTION>Exponential fit mag</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rExpMagErr" arraysize="1" datatype="float" unit="AB_mag" default="-999">
+        <DESCRIPTION>estimated error in ExpMag</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rExpAb" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Exponential fit axis ratio</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rExpAbErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated error in Exponential fit axis ratio</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rExpPhi" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>estmated phi of Exponential axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rExpPhiErr" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>estmated error of phi of Exponential axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rExpRa" arraysize="1" datatype="double" unit="degrees" default="-999">
+        <DESCRIPTION>RA of Exponential fit</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rExpDec" arraysize="1" datatype="double" unit="degrees" default="-999">
+        <DESCRIPTION>DEC of Exponential fit</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rExpRaErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in ExpRa</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rExpDecErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in ExpDec</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rExpCf" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Exponential fit coverage factor</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rExpChisq" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Exponential fit chi square factor</DESCRIPTION>
+      </FIELD>
+
+      <!-- i-band values -->
+      <FIELD name="iippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp detect identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="istackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="istackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iExpRadius" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>Exponential fit radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iExpRadiusErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in Exponential fit radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iExpMag" arraysize="1" datatype="float" unit="AB_mag" default="-999">
+        <DESCRIPTION>Exponential fit mag</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iExpMagErr" arraysize="1" datatype="float" unit="AB_mag" default="-999">
+        <DESCRIPTION>estimated error in ExpMag</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iExpAb" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Exponential fit axis ratio</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iExpAbErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated error in Exponential fit axis ratio</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iExpPhi" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>estmated phi of Exponential axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iExpPhiErr" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>estmated error of phi of Exponential axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iExpRa" arraysize="1" datatype="double" unit="degrees" default="-999">
+        <DESCRIPTION>RA of Exponential fit</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iExpDec" arraysize="1" datatype="double" unit="degrees" default="-999">
+        <DESCRIPTION>DEC of Exponential fit</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iExpRaErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in ExpRa</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iExpDecErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in ExpDec</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iExpCf" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Exponential fit coverage factor</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iExpChisq" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Exponential fit chi square factor</DESCRIPTION>
+      </FIELD>
+
+      <!-- z-band values -->
+      <FIELD name="zippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp detect identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zExpRadius" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>Exponential fit radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zExpRadiusErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in Exponential fit radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zExpMag" arraysize="1" datatype="float" unit="AB_mag" default="-999">
+        <DESCRIPTION>Exponential fit mag</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zExpMagErr" arraysize="1" datatype="float" unit="AB_mag" default="-999">
+        <DESCRIPTION>estimated error in ExpMag</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zExpAb" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Exponential fit axis ratio</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zExpAbErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated error in Exponential fit axis ratio</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zExpPhi" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>estmated phi of Exponential axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zExpPhiErr" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>estmated error of phi of Exponential axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zExpRa" arraysize="1" datatype="double" unit="degrees" default="-999">
+        <DESCRIPTION>RA of Exponential fit</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zExpDec" arraysize="1" datatype="double" unit="degrees" default="-999">
+        <DESCRIPTION>DEC of Exponential fit</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zExpRaErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in ExpRa</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zExpDecErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in ExpDec</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zExpCf" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Exponential fit coverage factor</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zExpChisq" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Exponential fit chi square factor</DESCRIPTION>
+      </FIELD>
+
+      <!-- y-band values -->
+      <FIELD name="yippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp detect identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ystackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ystackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yExpRadius" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>Exponential fit radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yExpRadiusErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in Exponential fit radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yExpMag" arraysize="1" datatype="float" unit="AB_mag" default="-999">
+        <DESCRIPTION>Exponential fit mag</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yExpMagErr" arraysize="1" datatype="float" unit="AB_mag" default="-999">
+        <DESCRIPTION>estimated error in ExpMag</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yExpAb" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Exponential fit axis ratio</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yExpAbErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated error in Exponential fit axis ratio</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yExpPhi" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>estmated phi of Exponential axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yExpPhiErr" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>estmated error of phi of Exponential axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yExpRa" arraysize="1" datatype="double" unit="degrees" default="-999">
+        <DESCRIPTION>RA of Exponential fit</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yExpDec" arraysize="1" datatype="double" unit="degrees" default="-999">
+        <DESCRIPTION>DEC of Exponential fit</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yExpRaErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in ExpRa</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yExpDecErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in ExpDec</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yExpCf" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Exponential fit coverage factor</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yExpChisq" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Exponential fit chi square factor</DESCRIPTION>
+      </FIELD>
+
+      <DATA>
+	<TABLEDATA></TABLEDATA>
+      </DATA>
+    </TABLE>
+
+    <!-- StackModelFitDeV Table ************************************************** -->
+    <TABLE name="StackModelFitDeV">
+      <DESCRIPTION>VOTable description of PSPS table StackModelFitDeV</DESCRIPTION>
+      <PARAM arraysize="1" datatype="char" ucd="meta.bib.author" name="Author" value="PSPS"></PARAM>
+      <FIELD name="objID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>IPP object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="randomStackObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+	<DESCRIPTION>random stack id</DESCRIPTION>
+      </FIELD>
+      <FIELD name="stackDetectRowID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+	<DESCRIPTION>identifies which of up to 5 possible stackdetections thisrow refers to: primary, up to 3 Secondary, 1 best</DESCRIPTION>
+      </FIELD>
+      <FIELD name="primaryDetection" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="255">
+        <DESCRIPTION>identifies if this row is a primary stack detection. True about 80 percent of time</DESCRIPTION>
+      </FIELD>
+      <FIELD name="bestDetection" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="255">
+        <DESCRIPTION>identifies if this row is a best detection or not. Also set if only a primary detection exists.</DESCRIPTION>
+      </FIELD>
+
+      <!-- g-band values -->
+      <FIELD name="gippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp detect identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gDeVRadius" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>DeVaucouleurs radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gDeVRadiusErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in DeVaucouleurs radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gDeVMag" arraysize="1" datatype="float" unit="AB_mag" default="-999">
+        <DESCRIPTION>DeVaucouleurs magntiude</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gDeVMagErr" arraysize="1" datatype="float" unit="AB_mag" default="-999">
+        <DESCRIPTION>estimated error in DeV_mag</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gDeVAb" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>DeVaucoulerus axis ratio</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gDeVAbErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated error in DeVaucoulerus axis ratio</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gDeVPhi" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>estmated phi of DeVaucouleurs axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gDeVPhiErr" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>estmated error of phi of DeVaucouleurs axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gDeVRa" arraysize="1" datatype="double" unit="degrees" default="-999">
+        <DESCRIPTION>RA of DeVaucouleurs fit</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gDeVDec" arraysize="1" datatype="double" unit="degrees" default="-999">
+        <DESCRIPTION>DEC of DeVaucouleurs fit</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gDeVRaErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in ra offset</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gDeVDecErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in dec offset</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gDeVCf" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>DeVaucouleurs fit coverage factor</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gDeVChisq" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>DeVaucouleurs fit chi square factor</DESCRIPTION>
+      </FIELD>
+
+      <!-- r-band values -->
+      <FIELD name="rippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp detect identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rDeVRadius" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>DeVaucouleurs radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rDeVRadiusErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in DeVaucouleurs radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rDeVMag" arraysize="1" datatype="float" unit="AB_mag" default="-999">
+        <DESCRIPTION>DeVaucouleurs magntiude</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rDeVMagErr" arraysize="1" datatype="float" unit="AB_mag" default="-999">
+        <DESCRIPTION>estimated error in DeV_mag</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rDeVAb" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>DeVaucoulerus axis ratio</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rDeVAbErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated error in DeVaucoulerus axis ratio</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rDeVPhi" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>estmated phi of DeVaucouleurs axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rDeVPhiErr" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>estmated error of phi of DeVaucouleurs axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rDeVRa" arraysize="1" datatype="double" unit="degrees" default="-999">
+        <DESCRIPTION>RA of DeVaucouleurs fit</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rDeVDec" arraysize="1" datatype="double" unit="degrees" default="-999">
+        <DESCRIPTION>DEC of DeVaucouleurs fit</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rDeVRaErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in ra offset</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rDeVDecErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in dec offset</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rDeVCf" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>DeVaucouleurs fit coverage factor</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rDeVChisq" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>DeVaucouleurs fit chi square factor</DESCRIPTION>
+      </FIELD>
+
+      <!-- i-band values -->
+      <FIELD name="iippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp detect identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="istackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="istackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iDeVRadius" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>DeVaucouleurs radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iDeVRadiusErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in DeVaucouleurs radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iDeVMag" arraysize="1" datatype="float" unit="AB_mag" default="-999">
+        <DESCRIPTION>DeVaucouleurs magntiude</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iDeVMagErr" arraysize="1" datatype="float" unit="AB_mag" default="-999">
+        <DESCRIPTION>estimated error in DeV_mag</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iDeVAb" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>DeVaucoulerus axis ratio</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iDeVAbErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated error in DeVaucoulerus axis ratio</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iDeVPhi" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>estmated phi of DeVaucouleurs axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iDeVPhiErr" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>estmated error of phi of DeVaucouleurs axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iDeVRa" arraysize="1" datatype="double" unit="degrees" default="-999">
+        <DESCRIPTION>RA of DeVaucouleurs fit</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iDeVDec" arraysize="1" datatype="double" unit="degrees" default="-999">
+        <DESCRIPTION>DEC of DeVaucouleurs fit</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iDeVRaErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in ra offset</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iDeVDecErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in dec offset</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iDeVCf" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>DeVaucouleurs fit coverage factor</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iDeVChisq" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>DeVaucouleurs fit chi square factor</DESCRIPTION>
+      </FIELD>
+
+      <!-- z-band values -->
+      <FIELD name="zippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp detect identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zDeVRadius" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>DeVaucouleurs radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zDeVRadiusErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in DeVaucouleurs radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zDeVMag" arraysize="1" datatype="float" unit="AB_mag" default="-999">
+        <DESCRIPTION>DeVaucouleurs magntiude</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zDeVMagErr" arraysize="1" datatype="float" unit="AB_mag" default="-999">
+        <DESCRIPTION>estimated error in DeV_mag</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zDeVAb" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>DeVaucoulerus axis ratio</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zDeVAbErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated error in DeVaucoulerus axis ratio</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zDeVPhi" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>estmated phi of DeVaucouleurs axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zDeVPhiErr" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>estmated error of phi of DeVaucouleurs axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zDeVRa" arraysize="1" datatype="double" unit="degrees" default="-999">
+        <DESCRIPTION>RA of DeVaucouleurs fit</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zDeVDec" arraysize="1" datatype="double" unit="degrees" default="-999">
+        <DESCRIPTION>DEC of DeVaucouleurs fit</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zDeVRaErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in ra offset</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zDeVDecErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in dec offset</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zDeVCf" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>DeVaucouleurs fit coverage factor</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zDeVChisq" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>DeVaucouleurs fit chi square factor</DESCRIPTION>
+      </FIELD>
+
+      <!-- y-band values -->
+      <FIELD name="yippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp detect identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ystackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ystackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yDeVRadius" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>DeVaucouleurs radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yDeVRadiusErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in DeVaucouleurs radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yDeVMag" arraysize="1" datatype="float" unit="AB_mag" default="-999">
+        <DESCRIPTION>DeVaucouleurs magntiude</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yDeVMagErr" arraysize="1" datatype="float" unit="AB_mag" default="-999">
+        <DESCRIPTION>estimated error in DeV_mag</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yDeVAb" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>DeVaucoulerus axis ratio</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yDeVAbErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated error in DeVaucoulerus axis ratio</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yDeVPhi" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>estmated phi of DeVaucouleurs axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yDeVPhiErr" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>estmated error of phi of DeVaucouleurs axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yDeVRa" arraysize="1" datatype="double" unit="degrees" default="-999">
+        <DESCRIPTION>RA of DeVaucouleurs fit</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yDeVDec" arraysize="1" datatype="double" unit="degrees" default="-999">
+        <DESCRIPTION>DEC of DeVaucouleurs fit</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yDeVRaErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in ra offset</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yDeVDecErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in dec offset</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yDeVCf" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>DeVaucouleurs fit coverage factor</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yDeVChisq" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>DeVaucouleurs fit chi square factor</DESCRIPTION>
+      </FIELD>
+
+      <DATA>
+	<TABLEDATA></TABLEDATA>
+      </DATA>
+    </TABLE>
+
+    <!-- StackModelFitSer Table ************************************************** -->
+    <TABLE name="StackModelFitSer">
+      <DESCRIPTION>VOTable description of PSPS table StackModelFitSer</DESCRIPTION>
+      <PARAM arraysize="1" datatype="char" ucd="meta.bib.author" name="Author" value="PSPS"></PARAM>
+      <FIELD name="objID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>IPP object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="randomStackObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+	<DESCRIPTION>random stack id</DESCRIPTION>
+      </FIELD>
+      <FIELD name="stackDetectRowID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+	<DESCRIPTION>identifies which of up to 5 possible stackdetections thisrow refers to: primary, up to 3 Secondary, 1 best</DESCRIPTION>
+      </FIELD>
+      <FIELD name="primaryDetection" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="255">
+        <DESCRIPTION>identifies if this row is a primary stack detection. True about 80 percent of time</DESCRIPTION>
+      </FIELD>
+      <FIELD name="bestDetection" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="255">
+        <DESCRIPTION>identifies if this row is a best detection or not. Also set if only a primary detection exists.</DESCRIPTION>
+      </FIELD>
+
+      <!-- g-band values -->
+      <FIELD name="gippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp detect identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gSerRadius" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>Sersic radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gSerRadiusErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in Sersic radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gSerMag" arraysize="1" datatype="float" unit="AB_mag" default="-999">
+        <DESCRIPTION>Sersic Mag</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gSerMagErr" arraysize="1" datatype="float" unit="AB_mag" default="-999">
+        <DESCRIPTION>estimated error in SerMag</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gSerAb" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Sersic axis ratio</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gSerAbErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated error in Sersic axis ratio</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gSerNu" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Sersic index</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gSerNuErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated error in Sersic index</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gSerPhi" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>estmated phi of Sersic axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gSerPhiErr" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>estmated error of phi of Sersic axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gSerRa" arraysize="1" datatype="double" unit="degrees" default="-999">
+        <DESCRIPTION>RA of Sersic fit</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gSerDec" arraysize="1" datatype="double" unit="degrees" default="-999">
+        <DESCRIPTION>DEC of Sersic fit</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gSerRaErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in SerRa</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gSerDecErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in SerDec</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gSerCf" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Sersic fit coverage factor</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gSerChisq" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Sersic fit chi square factor</DESCRIPTION>
+      </FIELD>
+
+      <!-- r-band values -->
+      <FIELD name="rippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp detect identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rSerRadius" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>Sersic radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rSerRadiusErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in Sersic radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rSerMag" arraysize="1" datatype="float" unit="AB_mag" default="-999">
+        <DESCRIPTION>Sersic Mag</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rSerMagErr" arraysize="1" datatype="float" unit="AB_mag" default="-999">
+        <DESCRIPTION>estimated error in SerMag</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rSerAb" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Sersic axis ratio</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rSerAbErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated error in Sersic axis ratio</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rSerNu" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Sersic index</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rSerNuErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated error in Sersic index</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rSerPhi" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>estmated phi of Sersic axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rSerPhiErr" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>estmated error of phi of Sersic axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rSerRa" arraysize="1" datatype="double" unit="degrees" default="-999">
+        <DESCRIPTION>RA of Sersic fit</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rSerDec" arraysize="1" datatype="double" unit="degrees" default="-999">
+        <DESCRIPTION>DEC of Sersic fit</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rSerRaErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in SerRa</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rSerDecErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in SerDec</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rSerCf" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Sersic fit coverage factor</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rSerChisq" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Sersic fit chi square factor</DESCRIPTION>
+      </FIELD>
+
+      <!-- i-band values -->
+      <FIELD name="iippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp detect identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="istackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="istackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iSerRadius" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>Sersic radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iSerRadiusErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in Sersic radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iSerMag" arraysize="1" datatype="float" unit="AB_mag" default="-999">
+        <DESCRIPTION>Sersic Mag</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iSerMagErr" arraysize="1" datatype="float" unit="AB_mag" default="-999">
+        <DESCRIPTION>estimated error in SerMag</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iSerAb" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Sersic axis ratio</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iSerAbErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated error in Sersic axis ratio</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iSerNu" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Sersic index</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iSerNuErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated error in Sersic index</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iSerPhi" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>estmated phi of Sersic axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iSerPhiErr" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>estmated error of phi of Sersic axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iSerRa" arraysize="1" datatype="double" unit="degrees" default="-999">
+        <DESCRIPTION>RA of Sersic fit</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iSerDec" arraysize="1" datatype="double" unit="degrees" default="-999">
+        <DESCRIPTION>DEC of Sersic fit</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iSerRaErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in SerRa</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iSerDecErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in SerDec</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iSerCf" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Sersic fit coverage factor</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iSerChisq" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Sersic fit chi square factor</DESCRIPTION>
+      </FIELD>
+
+      <!-- z-band values -->
+      <FIELD name="zippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp detect identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zSerRadius" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>Sersic radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zSerRadiusErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in Sersic radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zSerMag" arraysize="1" datatype="float" unit="AB_mag" default="-999">
+        <DESCRIPTION>Sersic Mag</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zSerMagErr" arraysize="1" datatype="float" unit="AB_mag" default="-999">
+        <DESCRIPTION>estimated error in SerMag</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zSerAb" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Sersic axis ratio</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zSerAbErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated error in Sersic axis ratio</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zSerNu" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Sersic index</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zSerNuErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated error in Sersic index</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zSerPhi" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>estmated phi of Sersic axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zSerPhiErr" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>estmated error of phi of Sersic axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zSerRa" arraysize="1" datatype="double" unit="degrees" default="-999">
+        <DESCRIPTION>RA of Sersic fit</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zSerDec" arraysize="1" datatype="double" unit="degrees" default="-999">
+        <DESCRIPTION>DEC of Sersic fit</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zSerRaErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in SerRa</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zSerDecErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in SerDec</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zSerCf" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Sersic fit coverage factor</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zSerChisq" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Sersic fit chi square factor</DESCRIPTION>
+      </FIELD>
+
+      <!-- y-band values -->
+      <FIELD name="yippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp detect identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ystackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ystackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ySerRadius" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>Sersic radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ySerRadiusErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in Sersic radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ySerMag" arraysize="1" datatype="float" unit="AB_mag" default="-999">
+        <DESCRIPTION>Sersic Mag</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ySerMagErr" arraysize="1" datatype="float" unit="AB_mag" default="-999">
+        <DESCRIPTION>estimated error in SerMag</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ySerAb" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Sersic axis ratio</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ySerAbErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated error in Sersic axis ratio</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ySerNu" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Sersic index</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ySerNuErr" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated error in Sersic index</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ySerPhi" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>estmated phi of Sersic axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ySerPhiErr" arraysize="1" datatype="float" unit="degrees" default="-999">
+        <DESCRIPTION>estmated error of phi of Sersic axis</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ySerRa" arraysize="1" datatype="double" unit="degrees" default="-999">
+        <DESCRIPTION>RA of Sersic fit</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ySerDec" arraysize="1" datatype="double" unit="degrees" default="-999">
+        <DESCRIPTION>DEC of Sersic fit</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ySerRaErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in SerRa</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ySerDecErr" arraysize="1" datatype="float" unit="arcsec" default="-999">
+        <DESCRIPTION>estimated error in SerDec</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ySerCf" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Sersic fit coverage factor</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ySerChisq" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>Sersic fit chi square</DESCRIPTION>
+      </FIELD>
+
+      <DATA>
+	<TABLEDATA></TABLEDATA>
+      </DATA>
+    </TABLE>
+
+    <!-- StackApFlxFull Table ************************************************** -->
+    <TABLE name="StackApFlxFull">
+      <DESCRIPTION>VOTable description of PSPS table StackApFlxFull</DESCRIPTION>
+      <PARAM arraysize="1" datatype="char" ucd="meta.bib.author" name="Author" value="PSPS"></PARAM>
+      <FIELD name="objID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>IPP object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="randomStackObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+	<DESCRIPTION>random stack id</DESCRIPTION>
+      </FIELD>
+      <FIELD name="stackDetectRowID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+	<DESCRIPTION>identifies which of up to 5 possible stackdetections thisrow refers to: primary, up to 3 Secondary, 1 best</DESCRIPTION>
+      </FIELD>
+      <FIELD name="primaryDetection" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="255">
+        <DESCRIPTION>identifies if this row is a primary stack detection. True about 80 percent of time</DESCRIPTION>
+      </FIELD>
+      <FIELD name="bestDetection" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="255">
+        <DESCRIPTION>identifies if this row is a best detection or not. Also set if only a primary detection exists.</DESCRIPTION>
+      </FIELD>
+
+      <!-- g-band values -->
+      <FIELD name="gippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp detect identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR1" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR1Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR1Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR1Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR2" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR2Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR2Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR2Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR3" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR3Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR3Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR3Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR4" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR4Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR4Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR5" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR5Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR5Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR6" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR6Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR6Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR6Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR7" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR7Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR7Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR7Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR8" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR8Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR8Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR8Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR9" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR9Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR9Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR9Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR10" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR10Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR10Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gflxR10Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R10</DESCRIPTION>
+      </FIELD>
+
+      <!-- r-band values -->
+      <FIELD name="rippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp detect identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR1" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR1Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR1Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR1Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR2" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR2Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR2Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR2Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR3" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR3Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR3Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR3Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR4" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR4Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR4Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR5" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR5Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR5Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR6" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR6Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR6Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR6Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR7" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR7Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR7Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR7Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR8" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR8Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR8Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR8Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR9" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR9Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR9Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR9Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR10" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR10Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR10Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rflxR10Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R10</DESCRIPTION>
+      </FIELD>
+
+      <!-- i-band values -->
+      <FIELD name="iippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp detect identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="istackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="istackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR1" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR1Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR1Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR1Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR2" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR2Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR2Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR2Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR3" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR3Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR3Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR3Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR4" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR4Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR4Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR5" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR5Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR5Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR6" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR6Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR6Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR6Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR7" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR7Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR7Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR7Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR8" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR8Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR8Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR8Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR9" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR9Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR9Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR9Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR10" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR10Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR10Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="iflxR10Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R10</DESCRIPTION>
+      </FIELD>
+
+      <!-- z-band values -->
+      <FIELD name="zippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp detect identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR1" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR1Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR1Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR1Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR2" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR2Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR2Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR2Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR3" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR3Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR3Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR3Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR4" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR4Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR4Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR5" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR5Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR5Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR6" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR6Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR6Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR6Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR7" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR7Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR7Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR7Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR8" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR8Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR8Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR8Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR9" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR9Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR9Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR9Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR10" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR10Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR10Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zflxR10Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R10</DESCRIPTION>
+      </FIELD>
+
+      <!-- y-band values -->
+      <FIELD name="yippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp detect identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ystackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ystackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR1" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR1Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR1Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR1Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR2" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR2Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR2Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR2Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR3" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR3Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR3Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR3Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR4" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR4Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR4Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR5" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR5Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR5Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR6" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR6Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR6Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR6Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR7" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR7Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR7Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR7Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR8" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR8Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR8Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR8Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR9" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR9Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR9Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR9Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR10" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR10Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is flxR10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR10Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in flxR10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yflxR10Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R10</DESCRIPTION>
+      </FIELD>
+
+      <DATA>
+	<TABLEDATA></TABLEDATA>
+      </DATA>
+    </TABLE>
+
+    <!-- StackApFlxFullC1 Table ************************************************** -->
+    <TABLE name="StackApFlxFullC1">
+      <DESCRIPTION>VOTable description of PSPS table StackApFlxFullC1</DESCRIPTION>
+      <PARAM arraysize="1" datatype="char" ucd="meta.bib.author" name="Author" value="PSPS"></PARAM>
+      <FIELD name="objID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>IPP object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="randomStackObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+	<DESCRIPTION>random stack id</DESCRIPTION>
+      </FIELD>
+      <FIELD name="stackDetectRowID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+	<DESCRIPTION>identifies which of up to 5 possible stackdetections thisrow refers to: primary, up to 3 Secondary, 1 best</DESCRIPTION>
+      </FIELD>
+      <FIELD name="primaryDetection" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="255">
+        <DESCRIPTION>identifies if this row is a primary stack detection. True about 80 percent of time</DESCRIPTION>
+      </FIELD>
+      <FIELD name="bestDetection" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="255">
+        <DESCRIPTION>identifies if this row is a best detection or not. Also set if only a primary detection exists.</DESCRIPTION>
+      </FIELD>
+
+      <!-- g-band values -->
+      <FIELD name="gippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp detect identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR1" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR1Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR1Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR1Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR2" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR2Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR2Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR2Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR3" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR3Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR3Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR3Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR4" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR4Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR4Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR5" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR5Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR5Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR6" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR6Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR6Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR6Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR7" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR7Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR7Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR7Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR8" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR8Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR8Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR8Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR9" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR9Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR9Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR9Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR10" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR10Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR10Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc1flxR10Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R10</DESCRIPTION>
+      </FIELD>
+
+      <!-- r-band values -->
+      <FIELD name="rippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp detect identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR1" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR1Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR1Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR1Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR2" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR2Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR2Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR2Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR3" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR3Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR3Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR3Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR4" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR4Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR4Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR5" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR5Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR5Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR6" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR6Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR6Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR6Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR7" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR7Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR7Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR7Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR8" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR8Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR8Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR8Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR9" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR9Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR9Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR9Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR10" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR10Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR10Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc1flxR10Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R10</DESCRIPTION>
+      </FIELD>
+
+      <!-- i-band values -->
+      <FIELD name="iippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp detect identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="istackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="istackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR1" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR1Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR1Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR1Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR2" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR2Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR2Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR2Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR3" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR3Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR3Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR3Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR4" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR4Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR4Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR5" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR5Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR5Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR6" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR6Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR6Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR6Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR7" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR7Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR7Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR7Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR8" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR8Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR8Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR8Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR9" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR9Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR9Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR9Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR10" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR10Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR10Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic1flxR10Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R10</DESCRIPTION>
+      </FIELD>
+
+      <!-- z-band values -->
+      <FIELD name="zippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp detect identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR1" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR1Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR1Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR1Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR2" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR2Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR2Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR2Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR3" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR3Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR3Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR3Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR4" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR4Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR4Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR5" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR5Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR5Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR6" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR6Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR6Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR6Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR7" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR7Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR7Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR7Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR8" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR8Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR8Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR8Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR9" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR9Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR9Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR9Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR10" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR10Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR10Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc1flxR10Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R10</DESCRIPTION>
+      </FIELD>
+
+      <!-- y-band values -->
+      <FIELD name="yippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp detect identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ystackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ystackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR1" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR1Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR1Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR1Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR2" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR2Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR2Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR2Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR3" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR3Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR3Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR3Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR4" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR4Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR4Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR5" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR5Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR5Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR6" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR6Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR6Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR6Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR7" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR7Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR7Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR7Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR8" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR8Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR8Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR8Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR9" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR9Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR9Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR9Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR10" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR10Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c1flxR10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR10Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c1flxR10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc1flxR10Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R10</DESCRIPTION>
+      </FIELD>
+
+      <DATA>
+	<TABLEDATA></TABLEDATA>
+      </DATA>
+    </TABLE>
+
+    <!-- StackApFlxFullC2 Table ************************************************** -->
+    <TABLE name="StackApFlxFullC2">
+      <DESCRIPTION>VOTable description of PSPS table StackApFlxFullC2</DESCRIPTION>
+      <PARAM arraysize="1" datatype="char" ucd="meta.bib.author" name="Author" value="PSPS"></PARAM>
+      <FIELD name="objID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>IPP object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="randomStackObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+	<DESCRIPTION>random stack id</DESCRIPTION>
+      </FIELD>
+      <FIELD name="stackDetectRowID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+	<DESCRIPTION>identifies which of up to 5 possible stackdetections thisrow refers to: primary, up to 3 Secondary, 1 best</DESCRIPTION>
+      </FIELD>
+      <FIELD name="primaryDetection" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="255">
+        <DESCRIPTION>identifies if this row is a primary stack detection. True about 80 percent of time</DESCRIPTION>
+      </FIELD>
+      <FIELD name="bestDetection" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="255">
+        <DESCRIPTION>identifies if this row is a best detection or not. Also set if only a primary detection exists.</DESCRIPTION>
+      </FIELD>
+
+      <!-- g-band values -->
+      <FIELD name="gippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp detect identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR1" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR1Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR1Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR1Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR2" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR2Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR2Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR2Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR3" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR3Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR3Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR3Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR4" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR4Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR4Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR5" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR5Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR5Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR6" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR6Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR6Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR6Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR7" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR7Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR7Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR7Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR8" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR8Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR8Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR8Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR9" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR9Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR9Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR9Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR10" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR10Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR10Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gc2flxR10Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R10</DESCRIPTION>
+      </FIELD>
+
+      <!-- r-band values -->
+      <FIELD name="rippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp detect identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR1" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR1Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR1Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR1Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR2" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR2Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR2Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR2Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR3" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR3Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR3Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR3Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR4" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR4Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR4Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR5" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR5Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR5Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR6" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR6Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR6Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR6Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR7" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR7Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR7Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR7Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR8" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR8Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR8Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR8Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR9" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR9Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR9Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR9Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR10" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR10Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR10Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rc2flxR10Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R10</DESCRIPTION>
+      </FIELD>
+
+      <!-- i-band values -->
+      <FIELD name="iippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp detect identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="istackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="istackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR1" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR1Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR1Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR1Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR2" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR2Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR2Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR2Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR3" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR3Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR3Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR3Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR4" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR4Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR4Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR5" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR5Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR5Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR6" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR6Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR6Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR6Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR7" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR7Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR7Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR7Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR8" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR8Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR8Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR8Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR9" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR9Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR9Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR9Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR10" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR10Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR10Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ic2flxR10Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R10</DESCRIPTION>
+      </FIELD>
+
+      <!-- z-band values -->
+      <FIELD name="zippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp detect identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR1" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR1Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR1Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR1Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR2" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR2Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR2Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR2Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR3" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR3Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR3Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR3Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR4" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR4Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR4Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR5" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR5Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR5Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR6" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR6Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR6Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR6Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR7" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR7Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR7Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR7Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR8" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR8Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR8Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR8Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR9" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR9Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR9Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR9Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR10" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR10Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR10Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zc2flxR10Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R10</DESCRIPTION>
+      </FIELD>
+
+      <!-- y-band values -->
+      <FIELD name="yippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp detect identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ystackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ystackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR1" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR1Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR1Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR1Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR2" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR2Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR2Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR2</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR2Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R1</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR3" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR3Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR3Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR3Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R3</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR4" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR4Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR4Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR4Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R4</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR5" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR5Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR5Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR5Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R5</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR6" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR6Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR6Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR6Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R6</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR7" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR7Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR7Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR7Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R7</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR8" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR8Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR8Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR8Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R8</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR9" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR9Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR9Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR9Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R9</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR10" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Flux inside r = 10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR10Err" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error is c2flxR10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR10Std" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated standard deviation in c2flxR10</DESCRIPTION>
+      </FIELD>
+      <FIELD name="yc2flxR10Fill" arraysize="1" datatype="float" unit="dimensionless" default="-999">
+        <DESCRIPTION>estimated filling factor at R10</DESCRIPTION>
+      </FIELD>
+
+      <DATA>
+	<TABLEDATA></TABLEDATA>
+      </DATA>
+    </TABLE>
+
+    <!-- StackPetrosian Table ************************************************** -->
+    <TABLE name="StackPetrosian">
+      <DESCRIPTION>VOTable description of PSPS table StackPetrosian</DESCRIPTION>
+      <PARAM arraysize="1" datatype="char" ucd="meta.bib.author" name="Author" value="PSPS"></PARAM>
+      <FIELD name="objID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ippObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>IPP object identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="randomStackObjID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+	<DESCRIPTION>random stack id</DESCRIPTION>
+      </FIELD>
+      <FIELD name="stackDetectRowID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+	<DESCRIPTION>identifies which of up to 5 possible stackdetections thisrow refers to: primary, up to 3 Secondary, 1 best</DESCRIPTION>
+      </FIELD>
+      <FIELD name="primaryDetection" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="255">
+        <DESCRIPTION>identifies if this row is a primary stack detection. True about 80 percent of time</DESCRIPTION>
+      </FIELD>
+      <FIELD name="bestDetection" arraysize="1" datatype="unsignedByte" unit="dimensionless" default="255">
+        <DESCRIPTION>identifies if this row is a best detection or not. Also set if only a primary detection exists.</DESCRIPTION>
+      </FIELD>
+
+      <!-- g-band values -->
+      <FIELD name="gippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp detect identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gpetRadius" arraysize="1" datatype="float" unit="pixels" default="-999">
+        <DESCRIPTION>Petrosian radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gpetRadiusErr" arraysize="1" datatype="float" unit="pixels" default="-999">
+        <DESCRIPTION>estimated error inPetrosian radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gpetMag" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Petrosian Flux</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gpetMagErr" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error in petMag</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gpetR50" arraysize="1" datatype="float" unit="pixels" default="-999">
+        <DESCRIPTION>Petrosian radius at 50% light</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gpetR50Err" arraysize="1" datatype="float" unit="pixels" default="-999">
+        <DESCRIPTION>estimated error inPetrosian radius at 50% light</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gpetR90" arraysize="1" datatype="float" unit="pixels" default="-999">
+        <DESCRIPTION>Petrosian radius at 90% light</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gpetR90Err" arraysize="1" datatype="float" unit="pixels" default="-999">
+        <DESCRIPTION>estimated error in Petrosian radius at 90% light</DESCRIPTION>
+      </FIELD>
+      <FIELD name="gpetCf" arraysize="1" datatype="float" unit="pixels" default="-999">
+        <DESCRIPTION>Petrosian fit coverage factor</DESCRIPTION>
+      </FIELD>
+
+      <!-- r-band values -->
+      <FIELD name="rippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp detect identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rpetRadius" arraysize="1" datatype="float" unit="pixels" default="-999">
+        <DESCRIPTION>Petrosian radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rpetRadiusErr" arraysize="1" datatype="float" unit="pixels" default="-999">
+        <DESCRIPTION>estimated error inPetrosian radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rpetMag" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Petrosian Flux</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rpetMagErr" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error in petMag</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rpetR50" arraysize="1" datatype="float" unit="pixels" default="-999">
+        <DESCRIPTION>Petrosian radius at 50% light</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rpetR50Err" arraysize="1" datatype="float" unit="pixels" default="-999">
+        <DESCRIPTION>estimated error inPetrosian radius at 50% light</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rpetR90" arraysize="1" datatype="float" unit="pixels" default="-999">
+        <DESCRIPTION>Petrosian radius at 90% light</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rpetR90Err" arraysize="1" datatype="float" unit="pixels" default="-999">
+        <DESCRIPTION>estimated error in Petrosian radius at 90% light</DESCRIPTION>
+      </FIELD>
+      <FIELD name="rpetCf" arraysize="1" datatype="float" unit="pixels" default="-999">
+        <DESCRIPTION>Petrosian fit coverage factor</DESCRIPTION>
+      </FIELD>
+
+      <!-- i-band values -->
+      <FIELD name="iippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp detect identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="istackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="istackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ipetRadius" arraysize="1" datatype="float" unit="pixels" default="-999">
+        <DESCRIPTION>Petrosian radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ipetRadiusErr" arraysize="1" datatype="float" unit="pixels" default="-999">
+        <DESCRIPTION>estimated error inPetrosian radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ipetMag" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Petrosian Flux</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ipetMagErr" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error in petMag</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ipetR50" arraysize="1" datatype="float" unit="pixels" default="-999">
+        <DESCRIPTION>Petrosian radius at 50% light</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ipetR50Err" arraysize="1" datatype="float" unit="pixels" default="-999">
+        <DESCRIPTION>estimated error inPetrosian radius at 50% light</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ipetR90" arraysize="1" datatype="float" unit="pixels" default="-999">
+        <DESCRIPTION>Petrosian radius at 90% light</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ipetR90Err" arraysize="1" datatype="float" unit="pixels" default="-999">
+        <DESCRIPTION>estimated error in Petrosian radius at 90% light</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ipetCf" arraysize="1" datatype="float" unit="pixels" default="-999">
+        <DESCRIPTION>Petrosian fit coverage factor</DESCRIPTION>
+      </FIELD>
+
+      <!-- z-band values -->
+      <FIELD name="zippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp detect identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zstackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zstackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zpetRadius" arraysize="1" datatype="float" unit="pixels" default="-999">
+        <DESCRIPTION>Petrosian radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zpetRadiusErr" arraysize="1" datatype="float" unit="pixels" default="-999">
+        <DESCRIPTION>estimated error inPetrosian radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zpetMag" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Petrosian Flux</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zpetMagErr" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error in petMag</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zpetR50" arraysize="1" datatype="float" unit="pixels" default="-999">
+        <DESCRIPTION>Petrosian radius at 50% light</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zpetR50Err" arraysize="1" datatype="float" unit="pixels" default="-999">
+        <DESCRIPTION>estimated error inPetrosian radius at 50% light</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zpetR90" arraysize="1" datatype="float" unit="pixels" default="-999">
+        <DESCRIPTION>Petrosian radius at 90% light</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zpetR90Err" arraysize="1" datatype="float" unit="pixels" default="-999">
+        <DESCRIPTION>estimated error in Petrosian radius at 90% light</DESCRIPTION>
+      </FIELD>
+      <FIELD name="zpetCf" arraysize="1" datatype="float" unit="pixels" default="-999">
+        <DESCRIPTION>Petrosian fit coverage factor</DESCRIPTION>
+      </FIELD>
+
+      <!-- y-band values -->
+      <FIELD name="yippDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ipp detect identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ystackDetectID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>ODM detection identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ystackMetaID" arraysize="1" datatype="long" unit="dimensionless" default="NA">
+        <DESCRIPTION>stack identifier</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ypetRadius" arraysize="1" datatype="float" unit="pixels" default="-999">
+        <DESCRIPTION>Petrosian radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ypetRadiusErr" arraysize="1" datatype="float" unit="pixels" default="-999">
+        <DESCRIPTION>estimated error inPetrosian radius</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ypetMag" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>Petrosian Flux</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ypetMagErr" arraysize="1" datatype="float" unit="Jy" default="-999">
+        <DESCRIPTION>estimated error in petMag</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ypetR50" arraysize="1" datatype="float" unit="pixels" default="-999">
+        <DESCRIPTION>Petrosian radius at 50% light</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ypetR50Err" arraysize="1" datatype="float" unit="pixels" default="-999">
+        <DESCRIPTION>estimated error inPetrosian radius at 50% light</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ypetR90" arraysize="1" datatype="float" unit="pixels" default="-999">
+        <DESCRIPTION>Petrosian radius at 90% light</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ypetR90Err" arraysize="1" datatype="float" unit="pixels" default="-999">
+        <DESCRIPTION>estimated error in Petrosian radius at 90% light</DESCRIPTION>
+      </FIELD>
+      <FIELD name="ypetCf" arraysize="1" datatype="float" unit="pixels" default="-999">
+        <DESCRIPTION>Petrosian fit coverage factor</DESCRIPTION>
+      </FIELD>
+
+      <DATA>
+	<TABLEDATA></TABLEDATA>
+      </DATA>
+    </TABLE>
+
+    <!-- StackToImage Table ************************************************** -->
     <TABLE name="StackToImage">
       <DESCRIPTION>VOTable description of PSPS table StackToImage</DESCRIPTION>
Index: /trunk/ippToPsps/jython/Makefile.am
===================================================================
--- /trunk/ippToPsps/jython/Makefile.am	(revision 37245)
+++ /trunk/ippToPsps/jython/Makefile.am	(revision 37246)
@@ -22,5 +22,5 @@
   gpc1db.py \
   initbatch.py \
-  insert.dvodb.info.py \	
+  insert.dvodb.info.py \
   ipptopspsdb.py \
   ipptopsps.py \
@@ -35,8 +35,9 @@
   pslogger.py \
   queue.py \
-  removepending.py \ 
+  removepending.py \
   scratchdb.py \
   setupScratchDb.py \
   skychunk.py \
+  sqlUtility.py \
   stackbatch.py
 
Index: /trunk/ippToPsps/jython/batch.py
===================================================================
--- /trunk/ippToPsps/jython/batch.py	(revision 37245)
+++ /trunk/ippToPsps/jython/batch.py	(revision 37246)
@@ -37,11 +37,5 @@
                  batchID,
                  batchType, 
-                 fits,
-                 useFullTables): 
-
-        # print "starting the batch"
-
-        # self.printline = 0
-        # self.testprint()
+                 fits): 
 
         self.readHeader = False
@@ -49,5 +43,4 @@
         self.skychunk = skychunk
         self.fits = fits
-        self.useFullTables = useFullTables
 
         # set up logging
@@ -55,6 +48,4 @@
         self.logger.infoSeparator()
         self.logger.debug("Batch class constructor")
-
-        # self.testprint()
 
         # set up class variables
@@ -68,6 +59,4 @@
         self.pspsVoTableFilePath = self.config.configDir + "tables." + batchType + ".vot"
 
-        # self.testprint()
-
         # check FITS file is ok
         if self.fits: 
@@ -79,5 +68,6 @@
                 raise
 
-        self.scratchDb.setUseFullTables(self.useFullTables)
+        # define the dvo table names
+        self.scratchDb.setDvoTableNames()
 
         # TODO
@@ -107,12 +97,10 @@
         if not os.path.exists(self.localOutPath): os.makedirs(self.localOutPath)
 
-        # self.testprint()
-
         # store today's date
         now = datetime.datetime.now();
         self.dateStr = now.strftime("%Y-%m-%d")
 
-        # create DVO tables if accessing DVO directly
-        if not self.useFullTables: self.scratchDb.createDvoTables()
+        # create DVO tables (scratch database)
+        self.scratchDb.createDvoTables()
 
         # dump stuff to the log
@@ -120,11 +108,8 @@
         self.logger.infoPair("Batch name", self.batchName)
         self.logger.infoPair("Survey ID", "%d" % self.surveyID)
-        self.logger.infoBool("Use full DVO tables?", self.useFullTables)
 
         if self.fits:
             self.logger.infoPair("Input FITS file", self.fits.getOriginalPath())
             self.logger.infoPair("Input FITS primary header", "%s cards found" % self.fits.getPrimaryHeaderCardCount())
-
-        # self.testprint()
 
         self.logger.infoPair("Output path", self.localOutPath)
@@ -237,4 +222,40 @@
              self.logger.errorPair("Missing header field", key)
              return "NULL"
+
+    '''
+    Returns the string keyword value from this header or else "NULL"
+    '''
+    def getKeyValue(self, header, key):
+
+         if key in header: return header[key]
+         else:
+             self.logger.errorPair("Missing header field", key)
+             return "NULL"
+
+    '''
+    Returns the string keyword value from this header or else "NULL"
+    '''
+    def getKeyFloat(self, header, format, key):
+
+         if key in header: 
+             value = format % float(header[key])
+         else:
+             self.logger.errorPair("Missing header field", key)
+             value = format % -999.9
+
+         return value
+
+    '''
+    Returns the string keyword value from this header or else "NULL"
+    '''
+    def getKeyInt(self, header, defValue, key):
+
+         if key in header: 
+             value = str(int(header[key]))
+         else:
+             self.logger.errorPair("Missing header field", key)
+             value = str(defValue)
+
+         return value
 
     '''
@@ -373,5 +394,5 @@
              self.tablesToExport.append(table.name)
 
-         return self.alterPspsTables();
+         return True
 
     '''
@@ -383,5 +404,5 @@
 
     '''
-    Alter PSPS tables
+    Alter PSPS tables (Subclass implements this)
     '''   
     def alterPspsTables(self):
@@ -417,4 +438,5 @@
 
           # print "read smf table ", table
+          self.logger.infoPair("read smf table", table)
 
           # drop any previous tables before import
@@ -440,94 +462,4 @@
 
       return True
-    '''
-    Imports IPP tables from FITS file
-
-    Accepts a regular expression filter so not all tables need to be imported
-    '''
-    def importIppSTTables(self, columns="*", filter=""):
-
-      self.logger.infoPair("Importing ST tables with filter", filter)
-
-      # print "trying to read ", self.fits.getPath()
-
-      # ST has 5 cmf files - all with the same table names. To counter this we do it like this.
-
-      filters = ["g","r","i","z","y"]
-      count = 0
-      for f in filters:
-          skip = 0
-          if (f == "g"):
-              if self.gstackID > 0:  
-                  fileName = self.gfits.getPath()
-              else:
-                  skip = 1
-          if (f == "r"):
-              if self.rstackID > 0:
-                  fileName = self.rfits.getPath()
-              else:
-                  skip = 1
-          if (f == "i"):
-              if self.istackID > 0:
-                  fileName = self.ifits.getPath()
-              else:
-                  skip = 1
-          if (f == "z"):
-              if self.zstackID > 0:
-                  fileName = self.zfits.getPath()
-              else:
-                  skip = 1
-          if (f == "y"):
-              if self.ystackID > 0:
-                  fileName = self.yfits.getPath()
-              else:
-                  skip = 1
-
-          if skip == 1:
-              self.logger.infoPair("no files for filter" , f) 
-          else:
-             self.logger.infoPair("using filename:",fileName)
-          
-             try:
-              tables = stilts.treads(fileName)
-             except:
-              self.logger.errorPair("STILTS could not import from", fileName)
-              return False
-              
-             #count = 0
-             for table in tables:
-              
-              # print "import smf table ", table
-              match = re.match(filter, table.name)
-              
-              if not match: continue
-              self.logger.infoPair("Reading IPP table", f + table.name)
-              table = stilts.tpipe(table, cmd='addcol table_index $0')
-                  
-              table = stilts.tpipe(table, cmd='explodeall')
-                  
-              # print "read smf table ", table
-                  
-              # drop any previous tables before import
-              self.scratchDb.dropTable(f + table.name)
-                  
-              # IPP FITS files are littered with infinities, so remove these
-              self.logger.debug("Removing Infinity values from all columns")
-              table = stilts.tpipe(table, cmd='keepcols "' + columns + '"')
-              table = stilts.tpipe(table, cmd='replaceval -Infinity null *')
-              table = stilts.tpipe(table, cmd='replaceval Infinity null *')
-              # print "cleaned up values ", table
-                  
-              try:
-                  table.write(self.scratchDb.url + '#' + f + table.name)
-                  # XXX this one is not needed
-                  # self.scratchDb.killLastConnectionID()
-                  count = count + 1
-              except:
-                  self.logger.exception("Problem writing table '" + f + table.name + "' to the database")
-                      
-      self.logger.infoPair("Done. Imported", "%d tables" % count)
-      self.indexIppTables()
-                      
-      return True
 
     '''
@@ -548,5 +480,4 @@
            # get everything from table
            try:
-               print "reading table from mysql ", table
                _table = stilts.tread(self.scratchDb.url + '#SELECT * FROM ' + table)
                self.scratchDb.killLastConnectionID()
@@ -633,6 +564,5 @@
     def run(self):
 
-        # this is badly named : it creates the tables and then fills in
-        # the ImageMeta tables for each ota (alterPspsTables)
+        # creates the empty PSPS tables
         if not self.createEmptyPspsTables():
             self.logger.errorPair("Aborting this batch", "could not create empty PSPS tables")
@@ -640,23 +570,21 @@
             raise
 
+        # fill in basic, not cmf/smf data (eg, ImageMeta for detectionbatch)
+        if not self.alterPspsTables():
+            self.logger.errorPair("Aborting this batch", "could not alter PSPS tables for batch type")
+            self.ippToPspsDb.updateProcessed(self.batchID, -1)
+            raise
+
         # for P2/ST, this reads the detection tables from the CMF/SMF file(s)
         # for OB, this imports object data from DVO
-        if self.batchType == "ST":
-            self.logger.infoPair("did we get here","?")  
-            if not self.importIppSTTables():
-                self.logger.errorPair("skipping this batch", "could not import ST IPP tables")
-                self.ippToPspsDb.updateProcessed(self.batchID, -1)
-                raise
-            self.logger.infoPair("we did the ST","yes")
-        else:    
-            # if not ST we do this 
-            if not self.importIppTables():
-                if self.batchType == "OB":
-                    self.logger.errorPair("skipping this batch", "no dvo tables for this region")
-                    self.ippToPspsDb.updateProcessed(self.batchID, 1)
-                    return True
-                self.logger.errorPair("Aborting this batch", "could not import IPP tables")
-                self.ippToPspsDb.updateProcessed(self.batchID, -1)
-                raise
+        if not self.importIppTables():
+            if self.batchType == "OB":
+                self.logger.errorPair("skipping this batch", "no dvo tables for this region")
+                self.ippToPspsDb.updateProcessed(self.batchID, 1)
+                return True
+            self.logger.errorPair("Aborting this batch", "could not import IPP tables")
+            self.ippToPspsDb.updateProcessed(self.batchID, -1)
+            raise
+
         self.logger.infoPair("populatePspsTables","ok")
         if not self.populatePspsTables():
@@ -692,4 +620,8 @@
                             tarballFile)
 
+        if self.config.onebatch:
+            self.logger.infoPair("onebatch requested", "exiting")
+            sys.exit(0)
+
+# XXX why is this down here??
 from datastore import Datastore
-
Index: /trunk/ippToPsps/jython/config.py
===================================================================
--- /trunk/ippToPsps/jython/config.py	(revision 37245)
+++ /trunk/ippToPsps/jython/config.py	(revision 37246)
@@ -22,17 +22,43 @@
 
         self.test = False
-        for arg in sys.argv:
-            if arg == "-test": 
-                self.test = True
-                sys.argv.remove(arg)
-            if arg == "-t": 
-                self.test = True
-                sys.argv.remove(arg)
+        self.resetDvo = False
+        self.gpc1test = True
+        self.retry = False
+        self.camera = "gpc1"
+        self.onebatch = False
 
+        if sys.argv.count("-test"):
+            self.test = True
+            sys.argv.remove("-test")
+
+        if sys.argv.count("-t"):
+            self.test = True
+            sys.argv.remove("-t")
+
+        # by default, we use gpc1test in a test, and do not if not a test
         self.gpc1test = self.test
-        for arg in sys.argv:
-            if arg == "-realgpc": 
-                self.gpc1test = False
-                sys.argv.remove(arg)
+
+        if sys.argv.count("-realgpc"):
+            if not self.test:
+                print "-realgpc requires -test"
+                sys.exit(1)
+            self.gpc1test = False
+            sys.argv.remove("-realgpc")
+
+        if sys.argv.count("-reset-dvo"):
+            self.resetDvo = True
+            sys.argv.remove("-reset-dvo")
+
+        if sys.argv.count("-retry"):
+            self.retry = True
+            sys.argv.remove("-retry")
+
+        if sys.argv.count("-simtest"):
+            self.camera = "simtest"
+            sys.argv.remove("-simtest")
+
+        if sys.argv.count("-one-batch"):
+            self.onebatch = True
+            sys.argv.remove("-one-batch")
 
         ## name of the top-level jython script
Index: /trunk/ippToPsps/jython/detectionbatch.py
===================================================================
--- /trunk/ippToPsps/jython/detectionbatch.py	(revision 37245)
+++ /trunk/ippToPsps/jython/detectionbatch.py	(revision 37246)
@@ -19,4 +19,5 @@
 from ipptopspsdb import IppToPspsDb
 from scratchdb import ScratchDb
+from sqlUtility import sqlUtility
 
 import logging.config
@@ -41,6 +42,5 @@
                  scratchDb,
                  camID,
-                 batchID,
-                 useFullTables):
+                 batchID):
 
        super(DetectionBatch, self).__init__(
@@ -54,6 +54,5 @@
                batchID,
                "P2", 
-               gpc1Db.getCameraStageSmf(camID,skychunk.P2_smf_version),
-               useFullTables)
+               gpc1Db.getCameraStageSmf(camID,skychunk.P2_smf_version))
 
        # get camera meta data
@@ -99,4 +98,5 @@
            raise
        
+       # MJD-OBS is the exposure start, EXTIME / 172800 = (EXPTIME sec / 84600 sec/day) / 2
        self.obsTime = float(self.header['MJD-OBS']) + (float(self.header['EXPTIME']) / 172800.0)
       
@@ -124,95 +124,57 @@
         self.logger.infoPair("Proccesing table", "FrameMeta")
 
-        sql = "INSERT INTO FrameMeta (\
-          frameID \
-         ,frameName \
-         ,cameraID \
-         ,cameraConfigID \
-         ,telescopeID \
-         ,analysisVer \
-         ,p1Recip \
-         ,p2Recip \
-         ,p3Recip \
-         ,photoScat \
-         ,expStart \
-         ,expTime \
-         ,airmass \
-         ,raBore \
-         ,decBore \
-         ,ctype1 \
-         ,ctype2 \
-         ,crval1 \
-         ,crval2 \
-         ,crpix1 \
-         ,crpix2 \
-         ,cdelt1 \
-         ,cdelt2 \
-         ,pc001001 \
-         ,pc001002 \
-         ,pc002001 \
-         ,pc002002 \
-         ,polyOrder \
-         ,pca1x3y0 \
-         ,pca1x2y1 \
-         ,pca1x1y2 \
-         ,pca1x0y3 \
-         ,pca1x2y0 \
-         ,pca1x1y1 \
-         ,pca1x0y2 \
-         ,pca2x3y0 \
-         ,pca2x2y1 \
-         ,pca2x1y2 \
-         ,pca2x0y3 \
-         ,pca2x2y0 \
-         ,pca2x1y1 \
-         ,pca2x0y2 \
-         ) VALUES ( \
-        " + str(self.expID) + " \
-        ,'" + self.expName + "' \
-        ,1  \
-        ,1  \
-        ,1  \
-        ,'" + str(self.analysisVer) + "' \
-        ,' ' \
-        ,' ' \
-        ,' ' \
-        ," + self.safeDictionaryAccess(self.header, 'ZPT_ERR') + " \
-        ," + self.safeDictionaryAccess(self.header, 'MJD-OBS') + " \
-        ," + self.safeDictionaryAccess(self.header, 'EXPREQ') + " \
-        ," + self.safeDictionaryAccess(self.header, 'AIRMASS') + " \
-        ," + self.safeDictionaryAccess(self.header, 'RA') + " \
-        ," + self.safeDictionaryAccess(self.header, 'DEC') + " \
-        ,'" + self.safeDictionaryAccess(self.header, 'CTYPE1') + "' \
-        ,'" + self.safeDictionaryAccess(self.header, 'CTYPE2') + "' \
-        ," + self.safeDictionaryAccess(self.header, 'CRVAL1') + " \
-        ," + self.safeDictionaryAccess(self.header, 'CRVAL2') + " \
-        ," + self.safeDictionaryAccess(self.header, 'CRPIX1') + " \
-        ," + self.safeDictionaryAccess(self.header, 'CRPIX2') + " \
-        ," + self.safeDictionaryAccess(self.header, 'CDELT1') + " \
-        ," + self.safeDictionaryAccess(self.header, 'CDELT2') + " \
-        ," + self.safeDictionaryAccess(self.header, 'PC001001') + " \
-        ," + self.safeDictionaryAccess(self.header, 'PC001002') + " \
-        ," + self.safeDictionaryAccess(self.header, 'PC002001') + " \
-        ," + self.safeDictionaryAccess(self.header, 'PC002002') + " \
-        ," + self.safeDictionaryAccess(self.header, 'NPLYTERM') + " \
-        ," + self.safeDictionaryAccess(self.header, 'PCA1X3Y0') + " \
-        ," + self.safeDictionaryAccess(self.header, 'PCA1X2Y1') + " \
-        ," + self.safeDictionaryAccess(self.header, 'PCA1X1Y2') + " \
-        ," + self.safeDictionaryAccess(self.header, 'PCA1X0Y3') + " \
-        ," + self.safeDictionaryAccess(self.header, 'PCA1X2Y0') + " \
-        ," + self.safeDictionaryAccess(self.header, 'PCA1X1Y1') + " \
-        ," + self.safeDictionaryAccess(self.header, 'PCA1X0Y2') + " \
-        ," + self.safeDictionaryAccess(self.header, 'PCA2X3Y0') + " \
-        ," + self.safeDictionaryAccess(self.header, 'PCA2X2Y1') + " \
-        ," + self.safeDictionaryAccess(self.header, 'PCA2X1Y2') + " \
-        ," + self.safeDictionaryAccess(self.header, 'PCA2X0Y3') + " \
-        ," + self.safeDictionaryAccess(self.header, 'PCA2X2Y0') + " \
-        ," + self.safeDictionaryAccess(self.header, 'PCA2X1Y1') + " \
-        ," + self.safeDictionaryAccess(self.header, 'PCA2X0Y2') + " \
-        )"
-
-        # print "frame meta sql: ", sql
-
-        self.scratchDb.execute(sql)
+        sqlLine = sqlUtility("INSERT INTO FrameMeta (")
+
+        # sqlLine.group("p1Recip",               ' ');
+        # sqlLine.group("p2Recip",               ' ');
+        # sqlLine.group("p3Recip",               ' ');
+
+        sqlLine.group("frameID",               str(self.expID));
+        sqlLine.group("frameName",             self.expName);
+        sqlLine.group("cameraID",              "1");
+        sqlLine.group("cameraConfigID",        "1");
+        sqlLine.group("telescopeID",           "1");
+        sqlLine.group("analysisVer",           self.analysisVer);
+        sqlLine.group("photoScat",             self.getKeyFloat(self.header, "%.8f", 'ZPT_ERR'));
+        sqlLine.group("expStart",              self.getKeyFloat(self.header, "%.10f", 'MJD-OBS'));
+        sqlLine.group("expTime",               self.getKeyFloat(self.header, "%.8f", 'EXPREQ'));
+        sqlLine.group("airmass",               self.getKeyFloat(self.header, "%.8f", 'AIRMASS'));
+        sqlLine.group("raBore",                self.getKeyFloat(self.header, "%.10f", 'RA'));
+        sqlLine.group("decBore",               self.getKeyFloat(self.header, "%.10f", 'DEC'));
+        sqlLine.group("ctype1",                self.getKeyValue(self.header, 'CTYPE1'));
+        sqlLine.group("ctype2",                self.getKeyValue(self.header, 'CTYPE2'));
+        sqlLine.group("crval1",                self.getKeyFloat(self.header, "%.8f", 'CRVAL1'));
+        sqlLine.group("crval2",                self.getKeyFloat(self.header, "%.8f", 'CRVAL2'));
+        sqlLine.group("crpix1",                self.getKeyFloat(self.header, "%.8f", 'CRPIX1'));
+        sqlLine.group("crpix2",                self.getKeyFloat(self.header, "%.8f", 'CRPIX2'));
+        sqlLine.group("cdelt1",                self.getKeyFloat(self.header, "%.8e", 'CDELT1'));
+        sqlLine.group("cdelt2",                self.getKeyFloat(self.header, "%.8e", 'CDELT2'));
+        sqlLine.group("pc001001",              self.getKeyFloat(self.header, "%.8e", 'PC001001'));
+        sqlLine.group("pc001002",              self.getKeyFloat(self.header, "%.8e", 'PC001002'));
+        sqlLine.group("pc002001",              self.getKeyFloat(self.header, "%.8e", 'PC002001'));
+        sqlLine.group("pc002002",              self.getKeyFloat(self.header, "%.8e", 'PC002002'));
+        sqlLine.group("polyOrder",             self.getKeyValue(self.header, 'NPLYTERM'));
+        sqlLine.group("pca1x3y0",              self.getKeyFloat(self.header, "%.8e", 'PCA1X3Y0'));
+        sqlLine.group("pca1x2y1",              self.getKeyFloat(self.header, "%.8e", 'PCA1X2Y1'));
+        sqlLine.group("pca1x1y2",              self.getKeyFloat(self.header, "%.8e", 'PCA1X1Y2'));
+        sqlLine.group("pca1x0y3",              self.getKeyFloat(self.header, "%.8e", 'PCA1X0Y3'));
+        sqlLine.group("pca1x2y0",              self.getKeyFloat(self.header, "%.8e", 'PCA1X2Y0'));
+        sqlLine.group("pca1x1y1",              self.getKeyFloat(self.header, "%.8e", 'PCA1X1Y1'));
+        sqlLine.group("pca1x0y2",              self.getKeyFloat(self.header, "%.8e", 'PCA1X0Y2'));
+        sqlLine.group("pca2x3y0",              self.getKeyFloat(self.header, "%.8e", 'PCA2X3Y0'));
+        sqlLine.group("pca2x2y1",              self.getKeyFloat(self.header, "%.8e", 'PCA2X2Y1'));
+        sqlLine.group("pca2x1y2",              self.getKeyFloat(self.header, "%.8e", 'PCA2X1Y2'));
+        sqlLine.group("pca2x0y3",              self.getKeyFloat(self.header, "%.8e", 'PCA2X0Y3'));
+        sqlLine.group("pca2x2y0",              self.getKeyFloat(self.header, "%.8e", 'PCA2X2Y0'));
+        sqlLine.group("pca2x1y1",              self.getKeyFloat(self.header, "%.8e", 'PCA2X1Y1'));
+        sqlLine.group("pca2x0y2",              self.getKeyFloat(self.header, "%.8e", 'PCA2X0Y2'));
+
+        sql = sqlLine.make(") VALUES ( ", ")")
+
+        try: self.scratchDb.execute(sql)
+        except:
+            self.logger.errorPair('failed sql: ', sql)
+            raise
+
         self.scratchDb.updateAllRows("FrameMeta", "batchID", str(self.batchID))
         self.scratchDb.updateAllRows("FrameMeta", "surveyID", str(self.surveyID))
@@ -228,154 +190,111 @@
         tableName = "ImageMeta_" + ota
         
-        # XXX we drop the table above so it is not left behind on failure
-        # drop then re-create table
-        # self.scratchDb.dropTable(tableName)
+        # we drop the table before calling this functoin so it is not left behind on failure
         sql = "CREATE TABLE " + tableName + " LIKE ImageMeta"
         try: self.scratchDb.execute(sql)
         except: pass
+
         if (ota[0:2] == "XY"): ccdID = ota[2:4]
         else: ccdID = 0
 
+        psfFwhmMajor = self.getKeyFloat(header, "%.8f", 'FWHM_MAJ')
+        psfFwhmMinor = self.getKeyFloat(header, "%.8f", 'FWHM_MIN')
+        psfFwhm = 0.5*(float(psfFwhmMajor) + float(psfFwhmMinor))
+
         # insert image metadata into table
-        sql = "INSERT INTO " + tableName + " ( \
-               frameID \
-               ,ccdID \
-               ,bias \
-               ,biasScat \
-               ,sky \
-               ,skyScat \
-               ,magSat \
-               ,completMag \
-               ,astroScat \
-               ,photoScat \
-               ,numAstroRef \
-               ,numPhotoRef \
-               ,nx \
-               ,ny \
-               ,psfFwhm \
-               ,psfWidMajor \
-               ,psfWidMinor \
-               ,psfTheta \
-               ,momentXX \
-               ,momentXY \
-               ,momentYY \
-               ,momentM3C \
-               ,momentM3S \
-               ,momentM4C \
-               ,momentM4S \
-               ,momentR1 \
-               ,momentRH \
-               ,apResid \
-               ,dapResid \
-               ,detectorID \
-               ,qaFlags \
-               ,detrend1 \
-               ,detrend2 \
-               ,detrend3 \
-               ,detrend4 \
-               ,detrend5 \
-               ,detrend6 \
-               ,detrend7 \
-               ,detrend8 \
-               ,photoZero \
-               ,ctype1 \
-               ,ctype2 \
-               ,crval1 \
-               ,crval2 \
-               ,crpix1 \
-               ,crpix2 \
-               ,cdelt1 \
-               ,cdelt2 \
-               ,pc001001 \
-               ,pc001002 \
-               ,pc002001 \
-               ,pc002002 \
-               ,polyOrder \
-               ,pca1x3y0 \
-               ,pca1x2y1 \
-               ,pca1x1y2 \
-               ,pca1x0y3 \
-               ,pca1x2y0 \
-               ,pca1x1y1 \
-               ,pca1x0y2 \
-               ,pca2x3y0 \
-               ,pca2x2y1 \
-               ,pca2x1y2 \
-               ,pca2x0y3 \
-               ,pca2x2y0 \
-               ,pca2x1y1 \
-               ,pca2x0y2 \
-               ) VALUES ( \
-               " + str(self.expID) + " \
-               ," + str(ccdID) + " \
-               ," + str(self.bias) + " \
-               ," + str(self.biasScat) + " \
-               ," + self.safeDictionaryAccess(header, 'MSKY_MN') + " \
-               ," + self.safeDictionaryAccess(header, 'MSKY_SIG') + " \
-               ," + self.safeDictionaryAccess(header, 'FSATUR') + " \
-               ," + self.safeDictionaryAccess(header, 'FLIMIT') + " \
-               ," + self.safeDictionaryAccess(header, 'CERROR') + " \
-               ," + self.safeDictionaryAccess(self.header, 'ZPT_OBS') + " \
-               ," + self.safeDictionaryAccess(header, 'NASTRO') + " \
-               ," + self.safeDictionaryAccess(header, 'NASTRO') + " \
-               ," + self.safeDictionaryAccess(header, 'CNAXIS1') + " \
-               ," + self.safeDictionaryAccess(header, 'CNAXIS2') + " \
-               , ( " + self.safeDictionaryAccess(header, 'FWHM_MAJ') + " + " + self.safeDictionaryAccess(header, 'FWHM_MIN') + " ) / 2.0 \
-               ," + self.safeDictionaryAccess(header, 'FWHM_MAJ') + " \
-               ," + self.safeDictionaryAccess(header, 'FWHM_MIN') + " \
-               ," + self.safeDictionaryAccess(header, 'ANGLE') + " \
-               ,-999 \
-               ,-999 \
-               ,-999 \
-               ,-999 \
-               ,-999 \
-               ,-999 \
-               ,-999 \
-               ,-999 \
-               ,-999 \
-               ," + self.safeDictionaryAccess(header, 'APMIFIT') + " \
-               ," + self.safeDictionaryAccess(header, 'DAPMIFIT') + " \
-               ,'" + self.safeDictionaryAccess(header, 'DETECTOR') + "' \
-               ," + str(self.scratchDb.getDvoImageFlags(header['IMAGEID'])) + " \
-               ,'" + self.safeDictionaryAccess(header, 'DETREND.MASK') + "' \
-               ,'" + self.safeDictionaryAccess(header, 'DETREND.DARK') + "' \
-               ,'" + self.safeDictionaryAccess(header, 'DETREND.FLAT') + "' \
-               ,' ' \
-               ,' ' \
-               ,' ' \
-               ,' ' \
-               ,' ' \
-               ," + self.safeDictionaryAccess(self.header, 'ZPT_OBS') + " \
-               ,'" + self.safeDictionaryAccess(header, 'CTYPE1') + "' \
-               ,'" + self.safeDictionaryAccess(header, 'CTYPE2') + "' \
-               ," + self.safeDictionaryAccess(header, 'CRVAL1') + " \
-               ," + self.safeDictionaryAccess(header, 'CRVAL2') + " \
-               ," + self.safeDictionaryAccess(header, 'CRPIX1') + " \
-               ," + self.safeDictionaryAccess(header, 'CRPIX2') + " \
-               ," + self.safeDictionaryAccess(header, 'CDELT1') + " \
-               ," + self.safeDictionaryAccess(header, 'CDELT2') + " \
-               ," + self.safeDictionaryAccess(header, 'PC001001') + " \
-               ," + self.safeDictionaryAccess(header, 'PC001002') + " \
-               ," + self.safeDictionaryAccess(header, 'PC002001') + " \
-               ," + self.safeDictionaryAccess(header, 'PC002002') + " \
-               ," + self.safeDictionaryAccess(header, 'NPLYTERM') + " \
-               ," + self.safeDictionaryAccess(header, 'PCA1X3Y0') + " \
-               ," + self.safeDictionaryAccess(header, 'PCA1X2Y1') + " \
-               ," + self.safeDictionaryAccess(header, 'PCA1X1Y2') + " \
-               ," + self.safeDictionaryAccess(header, 'PCA1X0Y3') + " \
-               ," + self.safeDictionaryAccess(header, 'PCA1X2Y0') + " \
-               ," + self.safeDictionaryAccess(header, 'PCA1X1Y1') + " \
-               ," + self.safeDictionaryAccess(header, 'PCA1X0Y2') + " \
-               ," + self.safeDictionaryAccess(header, 'PCA2X3Y0') + " \
-               ," + self.safeDictionaryAccess(header, 'PCA2X2Y1') + " \
-               ," + self.safeDictionaryAccess(header, 'PCA2X1Y2') + " \
-               ," + self.safeDictionaryAccess(header, 'PCA2X0Y3') + " \
-               ," + self.safeDictionaryAccess(header, 'PCA2X2Y0') + " \
-               ," + self.safeDictionaryAccess(header, 'PCA2X1Y1') + " \
-               ," + self.safeDictionaryAccess(header, 'PCA2X0Y2') + " \
-               )"
+        sqlLine = sqlUtility("INSERT INTO " + tableName + "(")
+
+        sqlLine.group("frameID",          str(self.expID))
+        sqlLine.group("ccdID",            str(ccdID))
+        sqlLine.group("bias",             str(self.bias))
+        sqlLine.group("biasScat",         str(self.biasScat))
+        sqlLine.group("sky",              self.getKeyFloat(header, "%.8f", 'MSKY_MN'))
+        sqlLine.group("skyScat",          self.getKeyFloat(header, "%.8f", 'MSKY_SIG'))
+        sqlLine.group("magSat",           self.getKeyFloat(header, "%.8f", 'FSATUR'))
+        sqlLine.group("completMag",       self.getKeyFloat(header, "%.8f", 'FLIMIT'))
+        sqlLine.group("astroScat",        self.getKeyFloat(header, "%.8f", 'CERROR'))
+        sqlLine.group("photoScat",        self.getKeyFloat(self.header, "%.8f", 'ZPT_OBS'))
+        sqlLine.group("numAstroRef",      self.getKeyValue(header, 'NASTRO'))
+        sqlLine.group("numPhotoRef",      self.getKeyValue(header, 'NASTRO'))
+        sqlLine.group("nx",               self.getKeyInt(header, 0, 'CNAXIS1'))
+        sqlLine.group("ny",               self.getKeyInt(header, 0, 'CNAXIS2'))
+        sqlLine.group("psfFwhm",          str(psfFwhm))
+        sqlLine.group("psfWidMajor",      psfFwhmMajor)
+        sqlLine.group("psfWidMinor",      psfFwhmMinor)
+        sqlLine.group("psfTheta",         self.getKeyFloat(header, "%.8f", 'ANGLE'))
+        sqlLine.group("momentMajor",      self.getKeyFloat(header, "%.8f", 'IQ_FW1'))
+        sqlLine.group("momentMinor",      self.getKeyFloat(header, "%.8f", 'IQ_FW2'))
+        sqlLine.group("momentM2C",        self.getKeyFloat(header, "%.8f", 'IQ_M2C'))
+        sqlLine.group("momentM2S",        self.getKeyFloat(header, "%.8f", 'IQ_M2S'))
+        sqlLine.group("momentM3",         self.getKeyFloat(header, "%.8f", 'IQ_M3'))
+        sqlLine.group("momentM4",         self.getKeyFloat(header, "%.8f", 'IQ_M4'))
+        sqlLine.group("apResid",          self.getKeyFloat(header, "%.8f", 'APMIFIT'))
+        sqlLine.group("dapResid",         self.getKeyFloat(header, "%.8f", 'DAPMIFIT'))
+        sqlLine.group("detectorID",       self.getKeyValue(header, 'DETECTOR'))
+        sqlLine.group("qaFlags",          str(self.scratchDb.getDvoImageFlags(header['IMAGEID'])))
+        sqlLine.group("detrend1",         self.getKeyValue(header, 'DETREND.MASK'))
+        sqlLine.group("detrend2",         self.getKeyValue(header, 'DETREND.DARK'))
+        sqlLine.group("detrend3",         self.getKeyValue(header, 'DETREND.FLAT'))
+        # sqlLine.group("detrend4",         " ")
+        # sqlLine.group("detrend5",         " ")
+        # sqlLine.group("detrend6",         " ")
+        # sqlLine.group("detrend7",         " ")
+        # sqlLine.group("detrend8",         " ")
+        sqlLine.group("photoZero",        self.getKeyFloat(self.header, "%.8f", 'ZPT_OBS'))
+        sqlLine.group("ctype1",           self.getKeyValue(header, 'CTYPE1'))
+        sqlLine.group("ctype2",           self.getKeyValue(header, 'CTYPE2'))
+        sqlLine.group("crval1",           self.getKeyFloat(header, "%.8f", 'CRVAL1'))
+        sqlLine.group("crval2",           self.getKeyFloat(header, "%.8f", 'CRVAL2'))
+        sqlLine.group("crpix1",           self.getKeyFloat(header, "%.8f", 'CRPIX1'))
+        sqlLine.group("crpix2",           self.getKeyFloat(header, "%.8f", 'CRPIX2'))
+        sqlLine.group("cdelt1",           self.getKeyFloat(header, "%.8e", 'CDELT1'))
+        sqlLine.group("cdelt2",           self.getKeyFloat(header, "%.8e", 'CDELT2'))
+        sqlLine.group("pc001001",         self.getKeyFloat(header, "%.8e", 'PC001001'))
+        sqlLine.group("pc001002",         self.getKeyFloat(header, "%.8e", 'PC001002'))
+        sqlLine.group("pc002001",         self.getKeyFloat(header, "%.8e", 'PC002001'))
+        sqlLine.group("pc002002",         self.getKeyFloat(header, "%.8e", 'PC002002'))
+        sqlLine.group("polyOrder",        self.getKeyInt(header, 0, 'NPLYTERM'))
+
+        nPolyterm = int(self.getKeyValue(header, 'NPLYTERM'))
+        if nPolyterm > 1:
+            sqlLine.group("pca1x2y0",         self.getKeyFloat(header, "%.8e", 'PCA1X2Y0'))
+            sqlLine.group("pca1x1y1",         self.getKeyFloat(header, "%.8e", 'PCA1X1Y1'))
+            sqlLine.group("pca1x0y2",         self.getKeyFloat(header, "%.8e", 'PCA1X0Y2'))
+            sqlLine.group("pca2x2y0",         self.getKeyFloat(header, "%.8e", 'PCA2X2Y0'))
+            sqlLine.group("pca2x1y1",         self.getKeyFloat(header, "%.8e", 'PCA2X1Y1'))
+            sqlLine.group("pca2x0y2",         self.getKeyFloat(header, "%.8e", 'PCA2X0Y2'))
+        else:
+            sqlLine.group("pca1x2y0",         "-999")
+            sqlLine.group("pca1x1y1",         "-999")
+            sqlLine.group("pca1x0y2",         "-999")
+            sqlLine.group("pca2x2y0",         "-999")
+            sqlLine.group("pca2x1y1",         "-999")
+            sqlLine.group("pca2x0y2",         "-999")
+            
+        if nPolyterm > 2:
+            sqlLine.group("pca1x3y0",         self.getKeyFloat(header, "%.8e", 'PCA1X3Y0'))
+            sqlLine.group("pca1x2y1",         self.getKeyFloat(header, "%.8e", 'PCA1X2Y1'))
+            sqlLine.group("pca1x1y2",         self.getKeyFloat(header, "%.8e", 'PCA1X1Y2'))
+            sqlLine.group("pca1x0y3",         self.getKeyFloat(header, "%.8e", 'PCA1X0Y3'))
+            sqlLine.group("pca2x3y0",         self.getKeyFloat(header, "%.8e", 'PCA2X3Y0'))
+            sqlLine.group("pca2x2y1",         self.getKeyFloat(header, "%.8e", 'PCA2X2Y1'))
+            sqlLine.group("pca2x1y2",         self.getKeyFloat(header, "%.8e", 'PCA2X1Y2'))
+            sqlLine.group("pca2x0y3",         self.getKeyFloat(header, "%.8e", 'PCA2X0Y3'))
+        else:
+            sqlLine.group("pca1x3y0",         "-999")
+            sqlLine.group("pca1x2y1",         "-999")
+            sqlLine.group("pca1x1y2",         "-999")
+            sqlLine.group("pca1x0y3",         "-999")
+            sqlLine.group("pca2x3y0",         "-999")
+            sqlLine.group("pca2x2y1",         "-999")
+            sqlLine.group("pca2x1y2",         "-999")
+            sqlLine.group("pca2x0y3",         "-999")
+
+        sql = sqlLine.make(") VALUES ( ", ")")
 
         try: self.scratchDb.execute(sql)
-        except: print sql
+        except:
+            self.logger.errorPair('failed sql: ', sql)
+            raise
 
         self.scratchDb.updateFilterID(tableName, self.filter)
@@ -407,104 +326,70 @@
         results['SATDET'] = 0 
 
-        # insert all detections into table
-        sql = "INSERT IGNORE INTO " + pspsTableName + " ( \
-               ippDetectID \
-               ,randomDetID \
-               ,filterID \
-               ,surveyID \
-               ,obsTime \
-               ,xPos \
-               ,yPos \
-               ,xPosErr \
-               ,yPosErr \
-               ,psfFlux \
-               ,psfFluxErr \
-               ,psfMajorFWHM \
-               ,psfMinorFWHM \
-               ,psfTheta \
-               ,psfCore \
-               ,psfLikelihood \
-               ,psfQf \
-               ,momentXX \
-               ,momentXY \
-               ,momentYY \
-               ,momentR1 \
-               ,momentRH \
-               ,momentM3C \
-               ,momentM3S \
-               ,momentM4C \
-               ,momentM4S \
-               ,apFlux \
-               ,kronFlux \
-               ,kronFluxErr \
-               ,psfQfPerfect \
-               ,psfChiSq \
-               ,infoFlag \
-               ,sky \
-               ,skyErr \
-               ,pltScale \
-               ,posAngle \
-               ,dataRelease \
-               ) \
-               SELECT \
-               IPP_IDET \
-               , FLOOR(RAND()*9223372036854775807) \
-               , " + str(self.filterID) + "\
-               , " + str(self.surveyID) + " \
-               ," + str(self.obsTime) + " \
-               ,X_PSF \
-               ,Y_PSF \
-               ,X_PSF_SIG \
-               ,Y_PSF_SIG \
-               ,PSF_INST_FLUX / " + self.header['EXPTIME'] + " \
-               ,PSF_INST_FLUX_SIG / " + self.header['EXPTIME'] + " \
-               ,PSF_MAJOR \
-               ,PSF_MINOR \
-               ,PSF_THETA \
-               ,-999 \
-               ,psfLikelihood(EXT_NSIGMA) \
-               ,PSF_QF \
-               ,MOMENTS_XX \
-               ,MOMENTS_XY \
-               ,MOMENTS_YY \
-               ,MOMENTS_R1 \
-               ,MOMENTS_RH \
-               ,MOMENTS_M3C \
-               ,MOMENTS_M3S \
-               ,MOMENTS_M4C \
-               ,MOMENTS_M4S \
-               ,POW(10.0, -0.4 *AP_MAG) / " + self.header['EXPTIME'] + " \
-               ,KRON_FLUX / " + self.header['EXPTIME'] + " \
-               ,KRON_FLUX_ERR / " + self.header['EXPTIME'] + " \
-               ,PSF_QF_PERFECT \
-               ,PSF_CHISQ \
-               ,FLAGS2 << 32 | FLAGS \
-               ,SKY  / " + self.header['EXPTIME'] + " \
-               ,SKY_SIGMA  / " + self.header['EXPTIME'] + " \
-               ,PLTSCALE \
-               ,POSANGLE \
-               , " + str(self.skychunk.dataRelease) + "\
-               FROM " + ippTableName
-        # self.logger.info(sql)
-
-# these were used above (left over from before PSF_INST_FLUX, PSF_INST_FLUX_SIG were available?
-#               ,POW(10.0, (-0.4*PSF_INST_MAG)) / " + self.header['EXPTIME'] + " 
-#               ,ABS((PSF_INST_MAG_SIG*(POW(10.0, (-0.4*PSF_INST_MAG)) / " + self.header['EXPTIME'] + ")) / 1.085736) 
-
-# I need a way to choose the sql above based on the cmf version: V3 (LAP.PV1) does not have AP_FLUX
-# AP_FLUX is no              ,AP_FLUX / " + self.header['EXPTIME'] + "
-
-        self.scratchDb.execute(sql)
-
-        # XXX EAM : I removed this old fix for invalid fluxes
-        # add a instFlux = 0.0 -> 0.000001
-        # XXX EAM : why is this done? 
-        # sql="UPDATE " + pspsTableName + " SET psfFlux = 0.0000001 WHERE psfFlux =  0"
-        # self.scratchDb.execute(sql)
-      
+        extTimeString = str(self.header['EXPTIME'])
+
+        # insert all detections into table : do NOT include the IGNORE unless we have to
+        # sqlLine = sqlUtility("INSERT IGNORE INTO " + pspsTableName + " (")
+        sqlLine = sqlUtility("INSERT INTO " + pspsTableName + " (")
+
+        # XXX WARNING: need to apply platescale to convert sizes to arcsec
+        # XXX apFluxF or apFluxNpix + apFluxRadius?
+
+        sqlLine.group("ippDetectID",     "IPP_IDET")                                                
+        sqlLine.group("randomDetID",     "FLOOR(RAND()*9223372036854775807)")                       
+        sqlLine.group("filterID",        str(self.filterID))                                        
+        sqlLine.group("surveyID",        str(self.surveyID))                                        
+        sqlLine.group("obsTime",         str(self.obsTime))                                         
+        sqlLine.group("xPos",            "X_PSF")                                                   
+        sqlLine.group("yPos",            "Y_PSF")                                                   
+        sqlLine.group("xPosErr",         "X_PSF_SIG")                                               
+        sqlLine.group("yPosErr",         "Y_PSF_SIG")                                               
+        sqlLine.group("pltScale",        "PLTSCALE")                                      
+        sqlLine.group("posAngle",        "POSANGLE")                                      
+        sqlLine.group("raErr",           "X_PSF_SIG * abs(PLTSCALE)") 
+        sqlLine.group("decErr",          "Y_PSF_SIG * abs(PLTSCALE)") 
+        sqlLine.group("psfFlux",         "PSF_INST_FLUX / " + extTimeString)
+        sqlLine.group("psfFluxErr",      "PSF_INST_FLUX_SIG / " + extTimeString)
+        sqlLine.group("psfMajorFWHM",    "PSF_FWHM_MAJ")                                               
+        sqlLine.group("psfMinorFWHM",    "PSF_FWHM_MIN")                                               
+        sqlLine.group("psfTheta",        "PSF_THETA")                                               
+        sqlLine.group("psfCore",         "PSF_CORE")                                                    
+        sqlLine.group("psfQf",           "PSF_QF")                                                  
+        sqlLine.group("psfQfPerfect",    "PSF_QF_PERFECT")                                
+        sqlLine.group("psfChiSq",        "PSF_CHISQ")                                     
+        sqlLine.group("psfLikelihood",   "psfLikelihood(EXT_NSIGMA)")                               
+        sqlLine.group("momentXX",        "MOMENTS_XX")                                              
+        sqlLine.group("momentXY",        "MOMENTS_XY")                                              
+        sqlLine.group("momentYY",        "MOMENTS_YY")                                              
+        sqlLine.group("momentR1",        "MOMENTS_R1")                                              
+        sqlLine.group("momentRH",        "MOMENTS_RH")                                              
+        sqlLine.group("momentM3C",       "MOMENTS_M3C")                                             
+        sqlLine.group("momentM3S",       "MOMENTS_M3S")                                             
+        sqlLine.group("momentM4C",       "MOMENTS_M4C")                                             
+        sqlLine.group("momentM4S",       "MOMENTS_M4S")                                             
+        sqlLine.group("apFlux",          "AP_FLUX / " + extTimeString)
+        sqlLine.group("apFluxErr",       "AP_FLUX_SIG / " + extTimeString)
+        sqlLine.group("apFillF",         "AP_NPIX / (3.14159265359 * POW(AP_MAG_RADIUS - 0.5, 2))")
+        sqlLine.group("apRadius",        "AP_MAG_RADIUS")
+        sqlLine.group("kronFlux",        "KRON_FLUX / " + extTimeString)
+        sqlLine.group("kronFluxErr",     "KRON_FLUX_ERR / " + extTimeString)
+        sqlLine.group("kronRad",         "MOMENTS_R1 * 2.5")
+        sqlLine.group("sky",             "SKY  / " + extTimeString)
+        sqlLine.group("skyErr",          "SKY_SIGMA  / " + extTimeString)
+        sqlLine.group("infoFlag",        "FLAGS")                          
+        sqlLine.group("infoFlag2",       "FLAGS2")                          
+        sqlLine.group("dataRelease",     str(self.skychunk.dataRelease))                  
+
+        sql = sqlLine.makeRaw(") SELECT ", " FROM " + ippTableName)
+
+        try: self.scratchDb.execute(sql)
+        except:
+            self.logger.errorPair("failed sql: ", sql)
+            raise
+
         # NOTE : Flux limits : in the current PSPS schema, negative fluxes 
         # cause problems for sql queries which work in mags as SQL cannot do
         # something like (f < 0.0) ? -999 : -2.5*log10(f)
         # as a result, the negative fluxes here result in floating point errors
+        # XXX EAM 2014072 : Is this still a problem?
         sql = "UPDATE " + pspsTableName + " SET psfFlux = 1e20 WHERE psfFlux <= 0.0"
         self.scratchDb.execute(sql)
@@ -518,5 +403,4 @@
         # we don't delete these anymore
         results['NULLINSTFLUX'] = 0;
-        
 
     '''
@@ -575,117 +459,4 @@
         self.scratchDb.updateAllRows(tableName, "dataRelease", str(self.skychunk.dataRelease))
 
-
-
-    '''
-    Populates the DetectionCalib table for this OTA
-    '''
-    def populateDetectionCalibTableUpdateInsert(self, ota):
-
-        tableName = "Detection_" + ota
-        # drop then re-create table
-        #self.scratchDb.dropTable(tableName)
-        #sql = "CREATE TABLE " + tableName + " LIKE DetectionCalib"
-        #try: self.scratchDb.execute(sql)
-        #except: pass
-
-        # insert all detections into table
-        sql = "INSERT INTO " + tableName + " ( \
-               objID \
-               ,detectID \
-               ,ippObjID \
-               ,ippDetectID \
-               ,filterID \
-               ,surveyID \
-               ) \
-               SELECT \
-               objID \
-               ,detectID \
-               ,ippObjID \
-               ,ippDetectID \
-               ,filterID \
-               ,surveyID \
-               FROM Detection_" + ota
-#        self.scratchDb.execute(sql)
-
-        # insert calibration information from dvoDetections into the Table
-        sql = "UPDATE " + tableName + " AS a, "  + self.scratchDb.dvoDetectionTable + " AS b \
-            SET a.ra = b.ra, \
-            a.dec = b.dec_, \
-            a.raErr = b.raErr, \
-            a.decErr = b.decErr, \
-            a.zp = b.zp, \
-            a.expTime = b.expTime, \
-            a.airMass = b.airMass   \
-            WHERE a.objID = b.objID AND a.detectID = b.detectID"
-        self.scratchDb.execute(sql)
-        self.scratchDb.updateAllRows(tableName, "dataRelease", str(self.skychunk.dataRelease))
-        
-    '''
-    Populates the DetectionCalib table for this OTA
-    '''
-    def populateDetectionCalibTable(self, ota):
-
-        # target table name:
-        tableName = "Detection_" + ota
-        # drop then re-create table
-        #self.scratchDb.dropTable(tableName)
-        #sql = "CREATE TABLE " + tableName + " LIKE Detection"
-        #try: self.scratchDb.execute(sql)
-        #except: pass
-
-        externID = self.imageIDs[ota]
-
-        imageID = self.scratchDb.getImageIDFromExternID(externID)
-        self.logger.infoPair("obtained imageID",imageID)
-        self.logger.infoPair("obtained externID",externID)
-
-        # insert all detections into table
-        sql = "Update Detection_" + ota + " AS a, "+ self.scratchDb.dvoDetectionTable + " as b \
-          set a.ra=b.ra,            \
-          a.dec = b.dec_,          \
-          a.raErr = b.raErr,         \
-          a.decErr = b.decErr,        \
-          a.zp = b.zp,            \
-          a.expTime = b.expTime,       \
-          a.airMass = b.airMass       \
-          WHERE (a.objID = b.objID AND a.detectID = b.detectID) \
-          AND b.imageID = " + str(imageID)  \
- 
-
-        try: self.scratchDb.execute(sql)
-        except:
-            self.logger.info("failed to update data for detectionCalib")
-            self.logger.infoPair("sql: ", sql)
-            raise
-        
-    '''
-    Populates the Detection table for this OTA
-    '''
-    def populateObjectCalColorTable(self, ota):
-
-        tableName = "ObjectCalColor_" + ota
-        
-        # drop then re-create table
-        self.scratchDb.dropTable(tableName)
-        sql = "CREATE TABLE " + tableName + " LIKE ObjectCalColor"
-        try: self.scratchDb.execute(sql)
-        except: pass
-
-        # insert all detections into table
-        sql = "INSERT INTO " + tableName + " ( \
-               objID \
-               ,ippObjID \
-               ,filterID \
-               ) \
-               SELECT \
-               objID \
-               ,ippObjID \
-               ,filterID \
-               FROM Detection_" + ota
-        self.scratchDb.execute(sql)
-
-        self.scratchDb.updateAllRows(tableName, "calibModNum", str(self.calibModNum))
-        self.scratchDb.updateAllRows(tableName, "dataRelease", str(self.skychunk.dataRelease))
-
     '''
     Applies indexes and other constraints to the PSPS tables
@@ -710,10 +481,9 @@
         
         # check we have valid sourceID/imageID pair from the header
-        if self.safeDictionaryAccess(header, 'SOURCEID') == "NULL": return False
-        if self.safeDictionaryAccess(header, 'IMAGEID') == "NULL": return False
-        
-        # store sourceID/imageID combo in Db so DVO can look up later
-        if not self.useFullTables:
-            self.scratchDb.insertNewDvoExternID(header['SOURCEID'], header['IMAGEID'])
+        if self.getKeyValue(header, 'SOURCEID') == "NULL": return False
+        if self.getKeyValue(header, 'IMAGEID') == "NULL": return False
+        
+        # store sourceID/imageID combo in Db so DVO can look up later (XXX deprecated?)
+        # self.scratchDb.insertNewDvoExternID(header['SOURCEID'], header['IMAGEID'])
             
         # store these for later
@@ -746,7 +516,47 @@
         self.logger.infoPair("Reading", "FITS headers")
         self.logger.infoPair("Populating table", "ImageMeta")
+
+        if self.config.camera == "gpc1":
+            for x in range(self.startX, self.endX):
+                for y in range(self.startY, self.endY):
+                    
+                    # dodge the corners
+                    if x==0 and y==0: continue
+                    if x==0 and y==7: continue
+                    if x==7 and y==0: continue
+                    if x==7 and y==7: continue
+                    
+                    ota = "XY%d%d" % (x, y)
+                
+                    if self.config.test and not ((x == 0) and (y == 1)):
+                        print "skipping ota: " + ota
+                        continue
+                        
+                    self.alterPspsTablesChip(ota, ota + ".hdr", x, y)
+
+        if self.config.camera == "simtest":
+            # try the test Chip
+            self.alterPspsTablesChip("Chip", "Chip.hdr", 0, 0)
+
+        # now run DVO code to get all IDs ( XXX deprecated, uses dvograbber)
+        # if not self.getIDsFromDVO(): return False
+
+        # dec is reserved in MySQL, so STILTS replaces if with dec_, which is not the name of 
+        # the column in PSPS
+        self.scratchDb.execute("ALTER TABLE Detection CHANGE dec_ `dec` double")
+
+        return True
+
+
+    '''
+    Applies indexes to the IPP tables
+    '''
+    def indexIppTables(self):
+
+        self.logger.infoPair("Creating indexes on", "IPP tables")
+
         for x in range(self.startX, self.endX):
             for y in range(self.startY, self.endY):
-               
+
                 # dodge the corners
                 if x==0 and y==0: continue
@@ -755,38 +565,4 @@
                 if x==7 and y==7: continue
 
-                ota = "XY%d%d" % (x, y)
-                
-                self.alterPspsTablesChip(ota, ota + ".hdr", x, y)
-
-        # try the test Chip
-        self.alterPspsTablesChip("Chip", "Chip.hdr", 0, 0)
-
-        # now run DVO code to get all IDs
-        if not self.useFullTables: 
-            if not self.getIDsFromDVO(): return False
-
-        # dec is reserved in MySQL, so STILTS replaces if with dec_, which is not the name of 
-        # the column in PSPS
-        self.scratchDb.execute("ALTER TABLE Detection CHANGE dec_ `dec` double")
-
-        return True
-
-
-    '''
-    Applies indexes to the IPP tables
-    '''
-    def indexIppTables(self):
-
-        self.logger.infoPair("Creating indexes on", "IPP tables")
-
-        for x in range(self.startX, self.endX):
-            for y in range(self.startY, self.endY):
-
-                # dodge the corners
-                if x==0 and y==0: continue
-                if x==0 and y==7: continue
-                if x==7 and y==0: continue
-                if x==7 and y==7: continue
-
                 extension = "XY%d%d_psf" % (x, y)
                 self.scratchDb.createIndex(extension, "IPP_IDET")
@@ -803,9 +579,17 @@
         imageID = self.scratchDb.getImageIDFromExternID(externID)
         self.logger.debug("Updating table '" + table + "' with DVO IDs using imageID = %d" % imageID)
+
         sql = "UPDATE IGNORE " + table + " AS a, " + self.scratchDb.dvoDetectionTable + " AS b SET \
-               a.ippObjID = b.ippObjID, \
-               a.detectID = b.detectID, \
-               a.objID = b.objID, \
-               a.infoFlag = b.flags << 45 | a.infoFlag \
+               a.objID        = b.objID, \
+               a.detectID     = b.detectID, \
+               a.ippObjID     = b.ippObjID, \
+               a.dvoRegionID  = b.catID, \
+               a.ra           = b.ra, \
+               a.dec          = b.dec_, \
+               a.zp           = b.zp, \
+               a.telluricExt  = b.telluricExt, \
+               a.airmass      = b.airmass, \
+               a.expTime      = b.expTime, \
+               a.infoFlag2    = (b.flags << 13) | a.infoFlag2 \
                WHERE a.ippDetectID = b.ippDetectID \
                AND b.imageID = " + str(imageID)
@@ -817,9 +601,9 @@
     '''
     def populatePspsTablesChip(self, chipname, x, y, results, tables):
-        # XXX EAM NOTE: drop tables (Detection_, SkinnyObject_, DetectionCalib_, Detection_) here so
+        # XXX EAM NOTE: drop tables Detection_* here so
         # they do not polute the db?
         # XXX or put an explicit drop at the end of the loop?
 
-        #self.logger.infoTitle("Processing " + chipname)
+        # self.logger.infoTitle("Processing " + chipname)
         # this is a bit crude: if the chip is not present, this test will fail and the chip 
         # will be (correctly) skipped.  would be better to carry that information explicitly ("chip is missing")
@@ -882,11 +666,4 @@
         self.scratchDb.execute(sql)
         
-        #self.logger.info("updated imagedata")
-        self.populateSkinnyObjectTable(chipname)
-        self.logger.info("updated skinnyobject")
- 
-        self.populateDetectionCalibTable(chipname)
-        #self.logger.info("updated detectioncalibtable")
-        
         # add these to list of tables to export later
         self.tablesToExport.append("ImageMeta_" + chipname)
@@ -896,10 +673,6 @@
         self.logger.info("export Detection")
 
-        self.tablesToExport.append("SkinnyObject_" + chipname)
-        self.logger.info("export Skinny")
-
-
         tables.append("Detection_" + chipname)
-        self.logger.info("updated detectioncalibtable")
+        self.logger.info("updated detection")
 
         self.validChips.append(chipname)
@@ -936,4 +709,8 @@
                 if ota not in self.imageIDs: continue
 
+                if self.config.test and not ((x == 0) and (y == 1)):
+                    print "skipping ota " + ota
+                    continue
+
                 if self.populatePspsTablesChip(ota, x, y, results, tables): otaCount = otaCount + 1
                 if self.skipBatch: 
@@ -1045,17 +822,16 @@
     '''
     def importIppTables(self, filter=""):
-
-       ## if self.config.test: regex = "XY33.psf"
-       ## else : regex = ".*.psf"
-       regex = ".*.psf"
-  
-       # XXX EAM NOTE : this is fragile : requires PS1_V4
-       # columns = "IPP_IDET X_PSF Y_PSF X_PSF_SIG Y_PSF_SIG PSF_INST_MAG PSF_INST_MAG_SIG PSF_INST_FLUX PSF_INST_FLUX_SIG PEAK_FLUX_AS_MAG PSF_MAJOR PSF_MINOR PSF_THETA EXT_NSIGMA PSF_QF MOMENTS_XX MOMENTS_XY MOMENTS_YY AP_MAG AP_FLUX KRON_FLUX KRON_FLUX_ERR FLAGS FLAGS2 SKY SKY_SIGMA EXT_NSIGMA PSF_QF_PERFECT PSF_CHISQ"
-
-       # XXX EAM NOTE : this is fragile : requires PS1_V4
-       columns = "IPP_IDET X_PSF Y_PSF X_PSF_SIG Y_PSF_SIG PSF_INST_MAG PSF_INST_MAG_SIG PSF_INST_FLUX PSF_INST_FLUX_SIG PEAK_FLUX_AS_MAG PSF_MAJOR PSF_MINOR PSF_THETA EXT_NSIGMA PSF_QF MOMENTS_XX MOMENTS_XY MOMENTS_YY MOMENTS_R1 MOMENTS_RH MOMENTS_M3C MOMENTS_M3S MOMENTS_M4C MOMENTS_M4S AP_MAG KRON_FLUX KRON_FLUX_ERR FLAGS FLAGS2 SKY SKY_SIGMA EXT_NSIGMA PSF_QF_PERFECT PSF_CHISQ POSANGLE PLTSCALE"
-
-       return super(DetectionBatch, self).importIppTables(columns, regex)
-
+        
+        regex = ".*.psf"
+        if self.config.test and self.config.camera == "gpc1":
+            regex = "XY01.psf"
+            
+        # XXX EAM NOTE : this is fragile : requires PS1_V4
+        # columns = "IPP_IDET X_PSF Y_PSF X_PSF_SIG Y_PSF_SIG PSF_INST_MAG PSF_INST_MAG_SIG PSF_INST_FLUX PSF_INST_FLUX_SIG PEAK_FLUX_AS_MAG PSF_MAJOR PSF_MINOR PSF_THETA EXT_NSIGMA PSF_QF MOMENTS_XX MOMENTS_XY MOMENTS_YY AP_MAG AP_FLUX KRON_FLUX KRON_FLUX_ERR FLAGS FLAGS2 SKY SKY_SIGMA EXT_NSIGMA PSF_QF_PERFECT PSF_CHISQ"
+
+        # XXX EAM NOTE : this is fragile : requires PS1_V5
+        columns = "IPP_IDET X_PSF Y_PSF X_PSF_SIG Y_PSF_SIG POSANGLE PLTSCALE PSF_INST_FLUX PSF_INST_FLUX_SIG PSF_FWHM_MAJ PSF_FWHM_MIN PSF_THETA PSF_CORE PSF_QF PSF_QF_PERFECT PSF_CHISQ EXT_NSIGMA MOMENTS_XX MOMENTS_XY MOMENTS_YY MOMENTS_R1 MOMENTS_RH MOMENTS_M3C MOMENTS_M3S MOMENTS_M4C MOMENTS_M4S AP_FLUX AP_FLUX_SIG AP_NPIX AP_MAG_RADIUS KRON_FLUX KRON_FLUX_ERR SKY SKY_SIGMA FLAGS FLAGS2"
+
+        return super(DetectionBatch, self).importIppTables(columns, regex)
 
     '''
@@ -1064,3 +840,2 @@
     def exportPspsTablesToFits(self, regex="(.*)"):
        return super(DetectionBatch, self).exportPspsTablesToFits("([a-zA-Z]+)")
-
Index: /trunk/ippToPsps/jython/dvo.py
===================================================================
--- /trunk/ippToPsps/jython/dvo.py	(revision 37245)
+++ /trunk/ippToPsps/jython/dvo.py	(revision 37246)
@@ -50,12 +50,11 @@
         self.regionsIngestedButOutOfDate = []
        
-        # we have (still) 3 modes of ingest from dvo cpt/cps/cpm files 
-        # 1) dvograbber (useFullTables == FALSE), 
+        # we USED TO have 3 modes of ingest from dvo cpt/cps/cpm files 
+        # 1) dvograbber (useStilts == TRUE, useFullTables == FALSE), 
         # 2) jython/stilts (useStilts == TRUE, useFullTables == TRUE)
-        # 3) dvopsps (useStilts == FALSE, useFullTables == TRUE)
+        # 3) dvopsps (useStilts == FALSE, useFullTables == FALSE)
         # my goal (EAM, 2013/01/31) is to migrate to only dvopsps
 
-        self.useStilts = 0
-        self.scratchDb.setUseFullTables(True)
+        self.scratchDb.setDvoTableNames()
 
         # decide if we are using the right DVO for this scratchDb
@@ -64,5 +63,4 @@
         # this scratch Db either has no DVO info ingested, or a different DVO ingested. Prompt user
         if not self.correctDvo:
-            print "*******************************************************************************"
             self.logger.warning("switching to a new dvo: '" + self.skychunk.dvoLocation + "'")
             # response = raw_input("(y/n) ")
@@ -104,4 +102,8 @@
         # go no further if we've already partly ingested a different DVO
         if not self.correctDvo: return
+
+        if (self.skychunk.dvoLocation == 'none'):
+            # print "do not load Photcodes for place-holder DVO " + self.skychunk.dvoLocation
+            return False
 
         # check if we have up-to-date version
@@ -156,4 +158,8 @@
         if not self.correctDvo: return False
 
+        if (self.skychunk.dvoLocation == 'none'):
+            # print "do not load SkyTable for place-holder DVO " + self.skychunk.dvoLocation
+            return False
+
         path =  self.skychunk.dvoLocation + "/SkyTable.fits"
         if self.scratchDb.alreadyImportedThisDvoTable(path): 
@@ -164,35 +170,27 @@
         self.logger.infoPair("DVO SkyTable.fits file", "NOT up-to-date")        
 
-        if self.useStilts:
-            self.importFits(
-                path,
-                "R_MIN R_MAX D_MIN D_MAX INDEX NAME",
-                self.scratchDb.dvoSkyTable)
-        else:
-            
-            # create dvoSkyTable 
-            sql = "drop TABLE dvoSkyTable"
-            try:
-                self.scratchDb.execute(sql)
-            except: pass
-
-            # create dvoSkyTable 
-            sql = "CREATE TABLE dvoSkyTable (R_MIN REAL, R_MAX REAL, D_MIN REAL, D_MAX REAL, INDEX_ INT, NAME CHAR(18))"
-            self.scratchDb.execute(sql)
-
-            # TODO path to DVO prog hardcoded temporarily
-            cmd = "dvopsps skytable"
-            cmd += " -dbhost " + self.scratchDb.dbHost
-            cmd += " -dbname " + self.scratchDb.dbName
-            cmd += " -dbuser " + self.scratchDb.dbUser
-            cmd += " -dbpass " + self.scratchDb.dbPass
-            cmd += " -D CATDIR " + self.skychunk.dvoLocation
-
-            self.logger.infoPair("Running dvopsps", cmd)
-            p = Popen(cmd, shell=True, stdout=PIPE, stderr=PIPE)
-            p.wait()
-            if p.returncode != 0:
-                self.logger.errorPair("dvopsps failed on SkyTable.fits for ", self.skychunk.dvoLocation)
-                raise
+        # drop dvoSkyTable (if it exists)
+        sql = "drop TABLE dvoSkyTable"
+        try: self.scratchDb.execute(sql)
+        except: pass
+
+        # create dvoSkyTable 
+        sql = "CREATE TABLE dvoSkyTable (R_MIN REAL, R_MAX REAL, D_MIN REAL, D_MAX REAL, INDEX_ INT, NAME CHAR(18))"
+        self.scratchDb.execute(sql)
+
+        # TODO path to DVO prog hardcoded temporarily
+        cmd = "dvopsps skytable"
+        cmd += " -dbhost " + self.scratchDb.dbHost
+        cmd += " -dbname " + self.scratchDb.dbName
+        cmd += " -dbuser " + self.scratchDb.dbUser
+        cmd += " -dbpass " + self.scratchDb.dbPass
+        cmd += " -D CATDIR " + self.skychunk.dvoLocation
+
+        self.logger.infoPair("Running dvopsps", cmd)
+        p = Popen(cmd, shell=True, stdout=PIPE, stderr=PIPE)
+        p.wait()
+        if p.returncode != 0:
+            self.logger.errorPair("dvopsps failed on SkyTable.fits for ", self.skychunk.dvoLocation)
+            raise
 
         self.logger.infoPair("Adding index to", self.scratchDb.dvoSkyTable)
@@ -268,20 +266,4 @@
            regionDec = region[2]
            regionPath = region[3]
-
-           # get paths for this region for the file types we are interested in
-           # XXX ipptopsps cannot check files -- it does not know where they are
-           ## paths = []
-           ## for fileType in self.ingestFileTypes:
-           ##     paths.append(self.skychunk.dvoLocation + "/" + regionPath + "." + fileType)
-
-           # check for the existence of all interested file types
-           # XXX ipptopsps cannot check files -- it does not know where they are
-           ## skipThisRegion = False
-           ## for path in paths:
-           ##     if not os.path.isfile(path):
-           ##         skipThisRegion = True
-           ##         break
-
-           ## if skipThisRegion: continue
 
            # ok, have real, populated files so add this region to the list
@@ -680,12 +662,21 @@
                 useP2 = 1
 
-        if (useP2 ==0 and useST ==1):
-            #grab only stacks
-            cmd += " -photcode-start 11000 -photcode-end 11500"
-
-        if (useP2 ==1 and useST==0):
-            #grabd only P2s    
-            cmd += " -photcode-start 10000 -photcode-end 10577"
-
+        if (useP2 == 0 and useST == 1):
+            # grab only stacks
+            if (self.config.camera == "simtest"):
+                # SIMTEST.x.SkyChip
+                cmd += " -photcode-start 14100 -photcode-end 14500"
+            else:
+                # not gpc1test -> GPC1.x.SkyShip
+                cmd += " -photcode-start 11000 -photcode-end 11500"
+
+        if (useP2 == 1 and useST == 0):
+            # grab only P2s (4000-4500 are test cameras, SIMTEST and SIMMOSAIC)
+            if (self.config.camera == "simtest"):
+                # SIMTEST.x.Chip
+                cmd += " -photcode-start  4100 -photcode-end 4500"
+            else:
+                # not gpc1test -> GPC1.x.XYnn
+                cmd += " -photcode-start 10000 -photcode-end 10577"
 
         self.logger.infoPair("Running dvopsps", cmd)
Index: /trunk/ippToPsps/jython/dvoobjects.py
===================================================================
--- /trunk/ippToPsps/jython/dvoobjects.py	(revision 37245)
+++ /trunk/ippToPsps/jython/dvoobjects.py	(revision 37246)
@@ -27,23 +27,4 @@
         self.ingestFileTypes = ['cpt', 'cps']
         self.loadPhotcodes()
-
-    '''
-    Ingests object files for this region
-    '''
-    def ingestRegion(self, region):
-
-       self.logger.infoPair("Ingesting objects for", region)
-
-       for fileType in self.ingestFileTypes:
-
-           path = self.skychunk.dvoLocation + "/" + region + "." + fileType
-           tableName = self.scratchDb.getDbFriendlyTableName(region + "." + fileType)
-
-           self.importFits(path, "*", tableName)
-
-           self.scratchDb.setImportedThisDvoTable(path, region)
-
-       return True
-
 
     '''
Index: /trunk/ippToPsps/jython/gpc1db.py
===================================================================
--- /trunk/ippToPsps/jython/gpc1db.py	(revision 37245)
+++ /trunk/ippToPsps/jython/gpc1db.py	(revision 37246)
@@ -119,13 +119,15 @@
 
         try:
-            # XXX EAM : test output
-            rs = self.executeQuery(sql)
-            while (rs.next()): 
-               rows.append([rs.getInt(1), rs.getFloat(2), rs.getFloat(3)])
-            rs.close()
+            rs = self.executeQuery(sql)
+
         except:
             self.logger.exception("Can't query for ids in DVO")
             self.logger.infoPair("failed sql:", sql)
-            return rows
+            sys.exit(1)
+
+        while (rs.next()): 
+            rows.append([rs.getInt(1), rs.getFloat(2), rs.getFloat(3)])
+
+        rs.close()
 
         self.logger.debug("Found %d items in DVO database '%s' for stage='%s'" % (len(rows), dvoDb, stage))
@@ -339,5 +341,4 @@
 
 
-        # XXX EAM : test output
         self.logger.infoPair("smf files:", files)
         if len(files) < 1: return None
Index: /trunk/ippToPsps/jython/initbatch.py
===================================================================
--- /trunk/ippToPsps/jython/initbatch.py	(revision 37245)
+++ /trunk/ippToPsps/jython/initbatch.py	(revision 37246)
@@ -33,4 +33,5 @@
             scratchDb,
             batchID):
+
        super(InitBatch, self).__init__(logger, 
                config,
@@ -42,6 +43,5 @@
                batchID,
                "IN", 
-               None,
-               0)
+               None)
 
        self.outputFitsFile = "00000000.FITS";
Index: /trunk/ippToPsps/jython/ippjytest
===================================================================
--- /trunk/ippToPsps/jython/ippjytest	(revision 37246)
+++ /trunk/ippToPsps/jython/ippjytest	(revision 37246)
@@ -0,0 +1,53 @@
+#!/bin/csh -f 
+
+# set JAVA = ~ipp/jre1.7.0_03/bin/java
+# set JYTHON = ~ipp/jython2.5.3b1/jython.jar
+
+# a bit crude : get the datadir path by interpollation of the PATH element for psconfig
+foreach f ( `echo $PATH | tr : ' '` )
+  echo $f | grep $PSCONFDIR > /dev/null
+  if ($status) continue
+  set datadir = `echo $f | sed s/bin\$/share/`
+  break
+end
+
+set JARDIR = $datadir/jar
+
+# XXX if you want to run a local test, use . for JYDIR
+# set JYDIR = $datadir/jython
+set JYDIR = .
+
+setenv IPPTOPSPS_DATA $datadir/ipptopsps
+
+# XXX install jython in JARDIR
+set JYTHON = $JARDIR/jython2.5.3b1/jython.jar
+# set JYTHON = ~/jython2.5.3b1/jython.jar
+#set JYTHON = $JARDIR/jython.jar
+
+if (! -r $JYTHON) then
+  echo "jython jar file not found, check jython installation"
+  exit 2
+endif
+
+if ($?JAVA == 0) then
+  which java >& /dev/null
+  if ($status) then
+    echo "java not found, please specify location in environment or install in path"
+    exit 2
+  endif
+  set JAVA = `which java`
+endif
+
+set CLASSPATH = $JARDIR/stilts.jar\:$JARDIR/commons-math-2.2.jar\:$JARDIR/mysql-connector-java-5.1.14-bin.jar\:$JYDIR
+
+if ($#argv < 1) then
+  echo "USAGE ippjython (classfile) [options]"
+  exit 2
+endif
+
+set classfile = $1
+shift
+
+echo starting java
+echo $JAVA -Xbootclasspath/a:$CLASSPATH -jar $JYTHON $JYDIR/$classfile $*
+     $JAVA -Xbootclasspath/a:$CLASSPATH -jar $JYTHON $JYDIR/$classfile $*
Index: /trunk/ippToPsps/jython/ippjython
===================================================================
--- /trunk/ippToPsps/jython/ippjython	(revision 37245)
+++ /trunk/ippToPsps/jython/ippjython	(revision 37246)
@@ -13,5 +13,9 @@
 
 set JARDIR = $datadir/jar
+
+# XXX if you want to run a local test, use . for JYDIR
 set JYDIR = $datadir/jython
+# set JYDIR = .
+
 setenv IPPTOPSPS_DATA $datadir/ipptopsps
 
@@ -45,6 +49,3 @@
 shift
 
-# XXX if you want to run a test on a local file, use this line:
-# $JAVA -Xbootclasspath/a:$CLASSPATH -jar $JYTHON $classfile $*
-
 $JAVA -Xbootclasspath/a:$CLASSPATH -jar $JYTHON $JYDIR/$classfile $*
Index: /trunk/ippToPsps/jython/ipptopsps.py
===================================================================
--- /trunk/ippToPsps/jython/ipptopsps.py	(revision 37245)
+++ /trunk/ippToPsps/jython/ipptopsps.py	(revision 37246)
@@ -55,5 +55,4 @@
             raise
 
-        print "check client status"
         self.checkClientStatus()
 
@@ -143,8 +142,6 @@
     def checkClientStatus(self):
 
-        print "update client"
         self.ippToPspsDb.updateClient(self.config.programName, self.HOST, self.PID)
 
-        print "check killed"
         if self.ippToPspsDb.isKilled(self.HOST, self.PID): 
             self.exitProgram("killed via Db")
@@ -152,7 +149,5 @@
         # this loop pauses the process if we have no skychunk or we have set it to pause
         firstTimeIn = True
-        print "refresh skychunk"
         while not self.refreshSkychunk() or self.ippToPspsDb.isPaused(self.HOST, self.PID):
-
             self.ippToPspsDb.updateClient(self.config.programName, self.HOST, self.PID)
             if self.ippToPspsDb.isKilled(self.HOST, self.PID): 
@@ -161,5 +156,4 @@
             firstTimeIn = False
             time.sleep(self.PAUSEPERIOD)
-
 
     '''
Index: /trunk/ippToPsps/jython/ipptopspsdb.py
===================================================================
--- /trunk/ippToPsps/jython/ipptopspsdb.py	(revision 37245)
+++ /trunk/ippToPsps/jython/ipptopspsdb.py	(revision 37246)
@@ -166,119 +166,4 @@
 
         return ids
-
-    ## '''
-    ## XXX EAM : removed this function and made it more explicit (with an additional block)
-    ## Returns a list of merged batch IDs that are merged but not yet deleted
-    ## '''
-    ## def getMergedButNotDeletedBatchIDs(self, batchType, column):
-    ## 
-    ##     sql = "SELECT DISTINCT batch_id \
-    ##            FROM batch \
-    ##            WHERE timestamp > '" + self.skychunk.epoch + "' \
-    ##            AND batch_type = '" + batchType + "' \
-    ##            AND dvo_db = '" + self.skychunk.dvoLabel + "' \
-    ##            AND merged = 1 \
-    ##            AND " + column + " = 0"
-    ## 
-    ##     ids = []
-    ##     try:
-    ##         rs = self.executeQuery(sql)
-    ##         while (rs.next()): ids.append(rs.getInt(1))
-    ##         rs.close()
-    ##     except:
-    ##         self.logger.exception("Can't query for merged batch ids in ipptopsps Db")
-    ## 
-    ##     self.logger.debug("Found %d merged but un-deleted items" % len(ids))
-    ## 
-    ##     return ids
-
-    ## '''
-    ## Returns a list of batch IDs marked as 'purged' but not yet deleted
-    ## XXX EAM : removed this function and made it more explicit (with an additional block)
-    ## '''
-    ## def getPurgedButNotDeletedBatchIDs(self, batchType, column):
-    ## 
-    ##     sql = "SELECT DISTINCT batch_id \
-    ##            FROM batch \
-    ##            WHERE timestamp > '" + self.skychunk.epoch + "' \
-    ##            AND batch_type = '" + batchType + "' \
-    ##            AND dvo_db = '" + self.skychunk.dvoLabel + "' \
-    ##            AND purged = 1 \
-    ##            AND " + column + " = 0"
-    ## 
-    ##     ids = []
-    ##     try:
-    ##         rs = self.executeQuery(sql)
-    ##         while (rs.next()): ids.append(rs.getInt(1))
-    ##         rs.close()
-    ##     except:
-    ##         self.logger.exception("Can't query for merged batch ids in ipptopsps Db")
-    ## 
-    ## 
-    ##     self.logger.debug("Found %d merged but un-deleted items" % len(ids))
-    ## 
-    ##     return ids
-
-    ## '''
-    ## Returns a list of processed batch IDs that have been loaded to the ODM but not yet deleted
-    ## '''
-    ## def getLoadedToODMButNotDeletedBatchIDs(self, batchType, column):
-    ## 
-    ##     sql = "SELECT DISTINCT batch_id \
-    ##            FROM batch \
-    ##            WHERE timestamp > '" + self.skychunk.epoch + "' \
-    ##            AND batch_type = '" + batchType + "' \
-    ##            AND dvo_db = '" + self.skychunk.dvoLabel + "' \
-    ##            AND (loaded_to_ODM = -1 OR merge_worthy = 1) \
-    ##            AND " + column + " = 0"
-    ## 
-    ##     ids = []
-    ##     try:
-    ##         rs = self.executeQuery(sql)
-    ##         while (rs.next()): ids.append(rs.getInt(1))
-    ##         rs.close()
-    ##     except:
-    ##         self.logger.exception("Can't query for merged batch ids in ipptopsps Db")
-    ## 
-    ##     self.logger.debug("Found %d merged but un-deleted items" % len(ids))
-    ## 
-    ##     return ids
-
-    # '''
-    # Returns a list of merged batch IDs that are not deleted from local disk
-    # '''
-    # def getMergedButNotDeletedFromLocalDisk(self, batchType):
-    #     return self.getMergedButNotDeletedBatchIDs(batchType, "deleted_local")
-
-    ## '''
-    ## Returns a list of processed batch IDs that are loaded to the ODM, but not deleted from local disk
-    ## '''
-    ## def getLoadedToODMButNotDeletedFromLocalDisk(self, batchType):
-    ##     return self.getLoadedToODMButNotDeletedBatchIDs(batchType, "deleted_local")
-    ## 
-    ## '''
-    ## Returns a list of processed batch IDs that are loaded to the ODM, but not deleted from datastore
-    ## '''
-    ## def getLoadedToODMButNotDeletedFromDatastore(self, batchType):
-    ##     return self.getLoadedToODMButNotDeletedBatchIDs(batchType, "deleted_datastore")
-    ## 
-    ## '''
-    ## Returns a list of processed batch IDs that are loaded to the ODM, but not deleted from DXLayer
-    ## '''
-    ## def getLoadedToODMButNotDeletedFromDXLayer(self, batchType):
-    ##     return self.getLoadedToODMButNotDeletedBatchIDs(batchType, "deleted_dxlayer")
-
-    ## '''
-    ## Returns a list of purged  batch IDs that not deleted from local disk
-    ## '''
-    ## def getPurgedButNotDeletedFromLocalDisk(self, batchType):
-    ##     return self.getPurgedButNotDeletedBatchIDs(batchType, "deleted_local")
-    ## 
-    ## '''
-    ## Returns a list of purged batch IDs that are not deleted from datastore
-    ## '''
-    ## def getPurgedButNotDeletedFromDatastore(self, batchType):
-    ##     return self.getPurgedButNotDeletedBatchIDs(batchType, "deleted_datastore")
-
 
     '''
@@ -786,5 +671,5 @@
             and not self.consistentlyFailed(batchType, stageID)): 
             
-            self.logger.infoPair("heather:","passed logic")
+            # self.logger.infoPair("heather:","passed logic")
 
             sql = "INSERT INTO batch ( \
@@ -803,5 +688,6 @@
                        '" + self.skychunk.name + "' \
                        )"
-            self.logger.infoPair("heather:","sql")
+ 
+            # self.logger.infoPair("heather:",sql)
 
             self.execute(sql)
@@ -816,4 +702,6 @@
             except:
                 self.logger.exception("Unable to get batch ID")
+                self.logger.infoPair("sql:",sql)
+
                 batchID = -1
 
@@ -1017,4 +905,5 @@
        response = raw_input(" * Name for new skychunk, or existing skychunk to edit? ")
        if response == "": return
+       response = response.strip()
        self.skychunk.name = response
 
@@ -1056,7 +945,10 @@
            question = question +  "? "
            response = raw_input(question)
+           response = response.strip()
+           print "response: '" + response + "'"
            if response != "":
                if type.find("varchar") != -1 or type.find("timestamp") != -1: quotes = "'"
                else: quotes = ""
+               # print "UPDATE skychunk SET " + field + " = " + quotes + response + quotes + " WHERE name = '" + self.skychunk.name + "'"
                self.execute("UPDATE skychunk SET " + field + " = " + quotes + response + quotes + " WHERE name = '" + self.skychunk.name + "'")
        
@@ -1129,60 +1021,112 @@
 
         self.skychunk.batchTypes = []
-        try:
-            rs = self.executeQuery(sql)
-
-            rs.first()
-            self.skychunk.datastoreProduct = rs.getString(1)
-            self.skychunk.datastoreType = rs.getString(2)
-            if rs.getInt(3) == 1: self.skychunk.datastorePublishing = True
-            else: self.skychunk.datastorePublishing = False
-            self.skychunk.dvoLabel = rs.getString(4)
-
-            # if dvoLabel is null is can break queries, so set to something
-            if not self.skychunk.dvoLabel: self.skychunk.dvoLabel = "none"
-            self.skychunk.dvoLocation = rs.getString(5)
-            self.skychunk.minRa = rs.getDouble(6)
-            self.skychunk.maxRa = rs.getDouble(7)
-            self.skychunk.minDec = rs.getDouble(8)
-            self.skychunk.maxDec = rs.getDouble(9)
-
-            self.skychunk.boxSize = rs.getDouble(10)
-            # self.skychunk.halfBox = self.skychunk.boxSize/2.0
-            # self.skychunk.boxSizeWithBorder = self.skychunk.boxSize + (self.skychunk.BORDER * 2)
-
-            self.skychunk.basePath = rs.getString(11)
-            self.skychunk.dataRelease = rs.getInt(12)
-
-            self.skychunk.deleteLocal = rs.getInt(13)
-            self.skychunk.deleteDatastore = rs.getInt(14)
-            self.skychunk.deleteDxLayer = rs.getInt(15)
-
-            self.skychunk.epoch = rs.getString(16)
-
-            self.skychunk.survey = rs.getString(17)
-            self.skychunk.pspsSurvey = rs.getString(18)
-
-            if rs.getInt(19) == 1: self.skychunk.batchTypes.append("P2")
-            if rs.getInt(20) == 1: self.skychunk.batchTypes.append("ST")
-            if rs.getInt(21) == 1: self.skychunk.batchTypes.append("OB")
-            if rs.getInt(22) == 1: self.skychunk.batchTypes.append("DF")
-            if rs.getInt(23) == 1: self.skychunk.batchTypes.append("DO")
-            if rs.getInt(24) == 1: self.skychunk.batchTypes.append("FW")
-            if rs.getInt(25) == 1: self.skychunk.batchTypes.append("FO")
-
-            self.skychunk.force = True # TODO
-            self.skychunk.parallel = False # TODO
-
-            if rs.getInt(26) == 1: self.skychunk.parallel = True
-            self.skychunk.P2_smf_version = rs.getString(27)
-            self.skychunk.ST_cmf_version = rs.getString(28)
-            self.skychunk.trange_start = rs.getString(29)
-            self.skychunk.trange_end = rs.getString(30) 
-
-            if self.skychunk.parallel: print "USING parallel"
-            self.skychunk.isLoaded = True
-        except:
+
+        try:
+            rs = self.executeQuery("show tables")
+        except:
+            self.logger.errorPair("cannot even show tables?", "Boo hoo")
+            sys.exit(1)
+
+        # while rs.next():
+        #     print "table row"
+        #     print rs.getString(1)
+        # 
+        # rs = self.executeQuery("select * from skychunk")
+        # while rs.next():
+        #     print "skychunk row"
+        #     print rs.getString(1)
+        # 
+        # print "SQL (2): " + sql
+
+        try:
+            rs = self.executeQuery(sql)
+
+        except:
+            self.logger.errorPair("problem with sql query for skychunk", sql)
+            sys.exit(1)
+
+        if not rs.next():
             self.logger.errorPair("Could not read skychunk with name", self.skychunk.name)
             self.skychunk.isLoaded = False
+            return False
+
+        self.skychunk.datastoreProduct = rs.getString(1)
+        self.skychunk.datastoreType = rs.getString(2)
+        if rs.getInt(3) == 1: self.skychunk.datastorePublishing = True
+        else: self.skychunk.datastorePublishing = False
+        self.skychunk.dvoLabel = rs.getString(4)
+
+        # if dvoLabel is null is can break queries, so set to something
+        if not self.skychunk.dvoLabel: self.skychunk.dvoLabel = "none"
+        self.skychunk.dvoLocation = rs.getString(5)
+        self.skychunk.minRa = rs.getDouble(6)
+        self.skychunk.maxRa = rs.getDouble(7)
+        self.skychunk.minDec = rs.getDouble(8)
+        self.skychunk.maxDec = rs.getDouble(9)
+
+        self.skychunk.boxSize = rs.getDouble(10)
+        # self.skychunk.halfBox = self.skychunk.boxSize/2.0
+        # self.skychunk.boxSizeWithBorder = self.skychunk.boxSize + (self.skychunk.BORDER * 2)
+
+        self.skychunk.basePath = rs.getString(11)
+        self.skychunk.dataRelease = rs.getInt(12)
+
+        self.skychunk.deleteLocal = rs.getInt(13)
+        self.skychunk.deleteDatastore = rs.getInt(14)
+        self.skychunk.deleteDxLayer = rs.getInt(15)
+
+        self.skychunk.epoch = rs.getString(16)
+
+        self.skychunk.survey = rs.getString(17)
+        self.skychunk.pspsSurvey = rs.getString(18)
+
+        if rs.getInt(19) == 1: self.skychunk.batchTypes.append("P2")
+        if rs.getInt(20) == 1: self.skychunk.batchTypes.append("ST")
+        if rs.getInt(21) == 1: self.skychunk.batchTypes.append("OB")
+        if rs.getInt(22) == 1: self.skychunk.batchTypes.append("DF")
+        if rs.getInt(23) == 1: self.skychunk.batchTypes.append("DO")
+        if rs.getInt(24) == 1: self.skychunk.batchTypes.append("FW")
+        if rs.getInt(25) == 1: self.skychunk.batchTypes.append("FO")
+
+        self.skychunk.force = True # TODO
+        self.skychunk.parallel = False # TODO
+
+        if rs.getInt(26) == 1: self.skychunk.parallel = True
+        self.skychunk.P2_smf_version = rs.getString(27)
+        # options: "use_new", "not_reproc", "use_original"
+
+        self.skychunk.ST_cmf_version = rs.getString(28)
+        # options: not used?
+
+        # NOTE : the rs (ResultSet) class is somewhat annoying and finicky esp about timestamp values
+        # for example, rs.getTimestamp(N) fails silently if the value is not a valid time.  this is
+        # also true to getString() on the same column.  Docs for the ResultSet class can be found here:
+        # http://docs.oracle.com/javase/1.5.0/docs/api/java/sql/ResultSet.html?is-external=true
+
+        # rsmd = rs.getMetaData()
+        # print "got metadata"
+        # print "number of columns: " + str(rsmd.getColumnCount())
+        # print "label: " + rsmd.getColumnLabel(25)
+        # print "label: " + rsmd.getColumnLabel(29)
+        # print "name: " + rsmd.getColumnName(25)
+        # print "name: " + rsmd.getColumnName(29)
+        # print "typename: " + rsmd.getColumnTypeName(25)
+        # print "typename: " + rsmd.getColumnTypeName(29)
+
+        # epochStamp = rs.getTimestamp(16)
+        # print "epoch: " + epochStamp.toString()
+
+        # print "label: " + rsmd.getColumnLabel(16)
+        # print "name: " + rsmd.getColumnName(16)
+        # print "typename: " + rsmd.getColumnTypeName(16)
+
+        self.skychunk.trange_start = rs.getString(29)
+        # options: "YYYY-MM-DD,HH:MM:SS" or "0000-00-00 00:00:00"
+
+        self.skychunk.trange_end = rs.getString(30) 
+        # options: "YYYY-MM-DD,HH:MM:SS" or "0000-00-00 00:00:00"
+
+        if self.skychunk.parallel: print "USING parallel"
+        self.skychunk.isLoaded = True
 
         return self.skychunk.isLoaded
@@ -1308,5 +1252,5 @@
     def insertPending(self, box_id, batchType, ids):
 
-        # print "starting insert pending"
+        print "starting insert pending"
 
         # first delete old pending items
@@ -1314,6 +1258,4 @@
                 WHERE box_id = " + str(box_id) + " \
                 AND batch_type = '" + batchType + "'")
-
-        # print "deleted old items"
 
         for id in ids:
@@ -1323,6 +1265,9 @@
                (" + str(box_id) + ", '" + batchType + "', " + str(id) + ")"
 
-            # print "sql: ", sql
-            self.execute(sql)
+            try: self.execute(sql)
+            except:
+                print "failed to insert into pending"
+                print "sql: " + sql
+                raise
 
     '''
@@ -1348,29 +1293,36 @@
                GROUP BY ra_center LIMIT 1"
 
-        # XXX print "sql: ", sql               
-
-        try:
-            rs = self.executeQuery(sql)
-            rs.first()
-            raCenter = rs.getFloat(1)
-            rs.close()
-        except:
-            self.logger.errorPair("No free stripes", "trying to steal boxes from other client...")
-            sql = "SELECT ra_center, COUNT(*) AS numPending\
-                   FROM box \
-                   JOIN pending ON (id = box_id) \
-                   WHERE skychunk = '" + self.skychunk.name + "' \
-                   AND batch_type = '" + batchType + "' \
-                   GROUP BY ra_center \
-                   ORDER BY numPending \
-                   DESC LIMIT 1"
-
-            try:
-                rs = self.executeQuery(sql)
-                rs.first()
-                raCenter = rs.getFloat(1)
-                rs.close()
-            except:
-                self.logger.errorPair("No outstanding boxes to steal", "no stripe obtained")
+        try: rs = self.executeQuery(sql)
+        except:
+            self.logger.errorPair("Problem querying for outstanding boxes", "error in sql?")
+            print "SQL: " + sql
+
+        if not rs.next():
+            self.logger.errorPair("No outstanding boxes", "nothing to do here")
+            rs.close()
+            self.unlockTables()
+            return ids
+
+        raCenter = rs.getFloat(1)
+        rs.close()
+
+        #except:
+        #    self.logger.errorPair("No free stripes", "trying to steal boxes from other client...")
+        #    sql = "SELECT ra_center, COUNT(*) AS numPending\
+        #           FROM box \
+        #           JOIN pending ON (id = box_id) \
+        #           WHERE skychunk = '" + self.skychunk.name + "' \
+        #           AND batch_type = '" + batchType + "' \
+        #           GROUP BY ra_center \
+        #           ORDER BY numPending \
+        #           DESC LIMIT 1"
+        #
+        #    try:
+        #        rs = self.executeQuery(sql)
+        #        rs.first()
+        #        raCenter = rs.getFloat(1)
+        #        rs.close()
+        #    except:
+        #        self.logger.errorPair("No outstanding boxes to steal", "no stripe obtained")
 
         # tests against ra_center need to use a finite box
@@ -1421,26 +1373,35 @@
                GROUP BY ra_center LIMIT 1"
 
-        try:
-            rs = self.executeQuery(sql)
-            rs.first()
-            raCenter = rs.getFloat(1)
-            rs.close()
-        except:
-            self.logger.errorPair("No free stripes", "trying to steal boxes from other client...")
-            sql = "SELECT ra_center, COUNT(*) AS numPending\
-                   FROM box \
-                   JOIN pending ON (id = box_id) \
-                   WHERE skychunk = '" + self.skychunk.name + "' \
-                   GROUP BY ra_center \
-                   ORDER BY numPending \
-                   DESC LIMIT 1"
-
-            try:
-                rs = self.executeQuery(sql)
-                rs.first()
-                raCenter = rs.getFloat(1)
-                rs.close()
-            except:
-                self.logger.errorPair("No outstanding boxes to steal", "no stripe obtained")
+        try: rs = self.executeQuery(sql)
+        except:
+            self.logger.errorPair("Problem querying for outstanding boxes", "error in sql?")
+            print "SQL: " + sql
+
+        if not rs.next():
+            self.logger.infoPair("No outstanding boxes", "nothing to do here")
+            rs.close()
+            self.unlockTables()
+            return ids
+
+        raCenter = rs.getFloat(1)
+        rs.close()
+
+        # except:
+        #     self.logger.errorPair("No free stripes", "trying to steal boxes from other client...")
+        #     sql = "SELECT ra_center, COUNT(*) AS numPending\
+        #            FROM box \
+        #            JOIN pending ON (id = box_id) \
+        #            WHERE skychunk = '" + self.skychunk.name + "' \
+        #            GROUP BY ra_center \
+        #            ORDER BY numPending \
+        #            DESC LIMIT 1"
+        # 
+        #     try:
+        #         rs = self.executeQuery(sql)
+        #         rs.first()
+        #         raCenter = rs.getFloat(1)
+        #         rs.close()
+        #     except:
+        #         self.logger.errorPair("No outstanding boxes to steal", "no stripe obtained")
 
         # tests against ra_center need to use a finite box
@@ -1634,22 +1595,4 @@
         self.logger.infoPair("Items written to Db", "%d" % count)
 
-        # try:
-        #     self.execute("DROP TABLE all_pending_alt")
-        # except:
-        #     pass
-        # 
-        # self.execute("CREATE TABLE all_pending_alt (stage_id bigint(20), ra_bore float, dec_bore float)")
-        # for row in rows:
-        #     try:
-        #         sql = "INSERT INTO all_pending_alt (stage_id, ra_bore, dec_bore) \
-        #                VALUES (%d, %f, %f)" % (row[0], row[1], row[2]) 
-        #         print "sql 2: ", sql
-        #         self.execute(sql)
-        #     except: continue
-        # 
-        # count = self.getRowCount("all_pending_alt")
-        # self.logger.infoPair("Items written to alt Db", "%d" % count)
-
-
     '''
     Creates a temporary table and shoves it full of stage_ids and ra/dec coords
@@ -1670,5 +1613,5 @@
                        VALUES ( '" + dvo_db + "', '" + batchType + "'," + str(row[0]) + "," + str(row[1]) + " \
                        , " + str(row[2]) + ", '"+uniq+"' ) " 
-                print "sql 1: ", sql
+                # print "sql 1: ", sql
                 self.execute(sql)
             except: continue
@@ -1683,11 +1626,4 @@
     '''
     def getItemsInThisBox(self, minRA, maxRA, minDEC, maxDEC):
-
-        # the old linear size is ill-conceived
-        ## XX halfSide = self.skychunk.boxSize/2.0
-        ## XX minRa =  ra-halfSide
-        ## XX maxRa = ra+halfSide
-        ## XX minDec = dec-halfSide
-        ## XX maxDec = dec+halfSide
 
         ids = []
@@ -1698,9 +1634,8 @@
                AND dec_bore BETWEEN " + str(minDEC) + " AND " + str(maxDEC)
 
-        print "items: ", sql
-
-        try:
-            rs = self.executeQuery(sql)
-            while (rs.next()): ids.append(rs.getInt(1))
+        try:
+            rs = self.executeQuery(sql)
+            while (rs.next()): 
+                ids.append(rs.getInt(1))
         except:
             self.logger.errorPair("Can't get items in this box", sql)
Index: /trunk/ippToPsps/jython/loader.py
===================================================================
--- /trunk/ippToPsps/jython/loader.py	(revision 37245)
+++ /trunk/ippToPsps/jython/loader.py	(revision 37246)
@@ -160,64 +160,19 @@
                     self.logger.infoPair(batchType + " items found in this box", "%d" % len(ids))
 
-                    useFullTables = 0
                     if batchType != "OB":
-
-                        if (self.dvoDetections.useStilts):
-                            # look in DVO for this box (with extra border)
-                            self.logger.infoPair("Querying DVO for this sky area", "")
-
-                            # XXXX EAM : This code should not be used anymore
-                            boxSize = 0.0
-                            self.dvoDetections.setSkyAreaAsBox(boxDim['RA'], boxDim['DEC'], boxSize)
-                            #self.dvoDetections.setSkyArea()
-                            sizeToBeIngested = self.dvoDetections.getDiskSizeOfRegionsToBeIngested()
-                            if sizeToBeIngested == 0.0: smfsPerGB = 999999999
-                            else: smfsPerGB = len(ids)/sizeToBeIngested
-                            self.logger.infoPair("DVO to be ingested", "%7.1e GB" % sizeToBeIngested)
-                            self.logger.infoPair("smfs-per-GB", "%.1f" % smfsPerGB)
-
-                            # should do we pre-ingest stuff from DVO?
-                            # NOTE EAM : this skychunk loads the dvo detections into the mysql db
-                            # XXXX EAM : this should happen for both P2 and Stack detection
-                            # XXXX EAM : in parallel model, this should happen for all P2 & Stack batches
-                            # 
-                            if (batchType == 'P2' or batchType == 'ST' or batchType == 'DF' or batchType == 'FW') and smfsPerGB > 30:
-                                if not self.dvoDetections.sync():
-                                    self.logger.errorPair("Could not sync DVO with MySQL", "skipping")
-                                    continue
-                                
-                                useFullTables = 1
-                        else:
-                            # XXX EAM : this is not currently optional
-                            # (it is the only path). either remove the
-                            # non-native ingest code or make it an
-                            # option if we are using the native
-                            # loader, always use it need to work out a
-                            # good boundary / region strategy in
-                            # coordination with impact of mysql
-                            # insertion
-                            if not self.ippToPspsDb.isBoxIngested(boxId, self.scratchDb.dbHost):
-                                if not self.dvoDetections.nativeIngestDetections(boxId, boxDim):
-                                    self.logger.error("Unable to ingest detections with nativeIngest")
-                                    return False
-
-                            useFullTables = 1
-                
-                    ## else:
-                    ##     # if we are using the native loader, always use it
-                    ##     # need to work out a good boundary / region strategy in coordination with 
-                    ##     # impact of mysql insertion
-                    ##     self.dvoObjects.nativeIngestObjects(boxDim['RA'], boxDim['DEC'], boxSizeSansBorder)
-                    ##     useFullTables = 1
+                        if self.config.resetDvo or not self.ippToPspsDb.isBoxIngested(boxId, self.scratchDb.dbHost):
+                            if not self.dvoDetections.nativeIngestDetections(boxId, boxDim):
+                                self.logger.error("Unable to ingest detections with nativeIngest")
+                                return False
 
                     '''
                     NOTE EAM : "TheseItems" refers to each of the stack CMFs, camera SMFs, or object batches
                     '''
-                    self.logger.infoBool("Using pre-ingested DVO data?", useFullTables)
-                    if not self.processTheseItems(batchType, ids, useFullTables):
+                    if not self.processTheseItems(batchType, ids):
                         abort = True
                         break
                     self.logger.infoPair("processed","ok")
 
+            self.logger.infoPair("done with processing boxes, numAttempts: ", str(numAttempts))
             if abort or not self.checkClientStatus(): abort = True
             elif numAttempts > 1 and not self.waitForPollTime():  break
@@ -228,5 +183,5 @@
     Actually loops through items and processes them
     '''
-    def processTheseItems(self, batchType, ids, useFullTables):
+    def processTheseItems(self, batchType, ids):
     
         self.logger.infoPair("%s items queued" % batchType, "%d" % len(ids))
@@ -246,6 +201,8 @@
                 continue
             #self.logger.infoPair("heather:","passed logic")
+
             self.ippToPspsDb.unlockTables()
             #self.logger.infoPair("heather:","unlock table")
+
             self.ippToPspsDb.deletePendingItem(batchType, id)
             #self.logger.infoPair("heather:","deleted pending item")
@@ -262,6 +219,5 @@
                             self.scratchDb,
                             id,
-                            batchID,
-                            useFullTables)
+                            batchID)
                 elif batchType == "ST":
                     self.logger.infoPair("defining ST batch for sky_id:",id)
@@ -273,6 +229,5 @@
                             self.scratchDb,
                             id,
-                            batchID,
-                            useFullTables)
+                            batchID)
     
                 elif batchType == "OB":
@@ -284,6 +239,5 @@
                             self.scratchDb,
                             id,
-                            batchID,
-                            useFullTables)
+                            batchID)
     
                 elif batchType == "DF":
@@ -295,6 +249,5 @@
                             self.scratchDb,
                             id,
-                            batchID,
-                            useFullTables)
+                            batchID)
     
                 elif batchType == "DO":
@@ -306,6 +259,5 @@
                             self.scratchDb,
                             id,
-                            batchID,
-                            useFullTables)
+                            batchID)
     
                 elif batchType == "FW":
@@ -317,6 +269,5 @@
                             self.scratchDb,
                             id,
-                            batchID,
-                            useFullTables)
+                            batchID)
     
                 elif batchType == "FO":
@@ -328,6 +279,5 @@
                             self.scratchDb,
                             id,
-                            batchID,
-                            useFullTables)
+                            batchID)
                     
                 batch.run()
@@ -337,4 +287,5 @@
                 self.logger.error("EXCEPTION: " + str(e))
                 self.logger.errorPair("Problem with this %s batch (%d)" % (batchType, id), "skipping")
+                sys.exit(1)
                 pass
 
Index: /trunk/ippToPsps/jython/mysql.py
===================================================================
--- /trunk/ippToPsps/jython/mysql.py	(revision 37245)
+++ /trunk/ippToPsps/jython/mysql.py	(revision 37246)
@@ -83,4 +83,5 @@
     '''
     def lockTable(self, table):
+        # print "Locking table: " + table
         self.execute("LOCK TABLES " + table + " WRITE")
 
@@ -89,4 +90,5 @@
     '''
     def unlockTables(self):
+        # print "Unlocking tables"
         self.execute("UNLOCK TABLES")
 
@@ -109,4 +111,13 @@
             print "failed to kill connection: ", connectionID
 
+    def listTables(self):
+
+        sql = "show tables"
+        rs = self.executeQuery(sql)  
+        while (rs.next()):
+            tableName = rs.getString(1)
+            # print "table: " + tableName
+        rs.close()
+
     '''
     Checks whether this table exists
@@ -200,4 +211,13 @@
 
     '''
+    Add a column to the table
+    '''
+    def addColumn(self, table, column, type):
+
+        sql = "ALTER TABLE " + table + " ADD COLUMN " + column + " " + type
+        try: self.execute(sql)
+        except: return
+
+    '''
     Drops a list of tables
     '''
@@ -271,4 +291,23 @@
         except: pass
             #self.logger.warn("Index already in place on '" + column + "' for table '" + table + "'")
+
+    def addPrimaryKeyWithIgnore(self, table, column):
+        # note that in mysql versions later than 5.1, this fails
+        # unless the following is called first: 
+        # "set session old_alter_table=1"
+
+        # follow the command with 
+        # "set session old_alter_table=0"
+
+        # OF COURSE, this fails for mysql version <= 5.1...
+        if self.scratchDb.version > 5.1:
+            self.scratchDb.execute("set session old_alter_table=1")
+
+        # I should probably do this before the whole table is built, right?
+        sql = "ALTER IGNORE TABLE " + table + " ADD PRIMARY KEY (" + column + ")"
+        self.scratchDb.execute(sql)
+        
+        if self.scratchDb.version > 5.1:
+            self.scratchDb.execute("set session old_alter_table=0")
 
     '''
Index: /trunk/ippToPsps/jython/objectbatch.py
===================================================================
--- /trunk/ippToPsps/jython/objectbatch.py	(revision 37245)
+++ /trunk/ippToPsps/jython/objectbatch.py	(revision 37246)
@@ -15,4 +15,5 @@
 from scratchdb import ScratchDb
 from dvoobjects import DvoObjects
+from sqlUtility import sqlUtility
 
 import logging.config
@@ -37,6 +38,5 @@
                  scratchDb,
                  dvoID,
-                 batchID,
-                 useFullTables):
+                 batchID):
 
        super(ObjectBatch, self).__init__(
@@ -50,9 +50,7 @@
                batchID,
                "OB", 
-               None,
-               1)
+               None)
 
        try:
-           ## XX pass in the existing connection to scratchDb
            self.dvoObjects = DvoObjects(self.logger, self.config, self.skychunk, self.ippToPspsDb, self.scratchDb)
        except:
@@ -74,8 +72,5 @@
         self.region = self.scratchDb.getRegionNameFromThisDvoIndex(self.id)
         self.ippToPspsDb.insertObjectMeta(self.batchID, self.region)
-        if True:
-            self.dvoObjects.nativeIngestRegion(self.region)
-        else:
-            self.dvoObjects.ingestRegion(self.region)
+        self.dvoObjects.nativeIngestRegion(self.region)
 
         cptTableName = self.scratchDb.getDbFriendlyTableName(self.region + ".cpt")
@@ -90,8 +85,4 @@
     def alterPspsTables(self):
 
-        # dec is reserved in MySQL, so STILTS replaces if with dec_, which PSPS doesn't like. so, force it back again using ``
-      #  self.scratchDb.execute("ALTER TABLE MeanObject CHANGE dec_ `dec` double")
-      #  self.scratchDb.execute("ALTER TABLE ObjectThin CHANGE dec_ `dec` double")
-
         return True
 
@@ -101,5 +92,6 @@
     def indexIppTables(self):
 
-        self.logger.infoPair("Creating indexes on", "IPP tables")
+        # since dvopsps is now used, no action is needed here
+        # self.logger.infoPair("Creating indexes on", "IPP tables")
 
         return True
@@ -109,4 +101,78 @@
     '''
     def updateMeanObjectFromCps(self, cpsTable):
+
+        # list of all filters PSPS is interested in
+        # XXX EAM : 2014.07.24 : this list should probably be in a config file somewhere
+        interestedFilters = ['g', 'r', 'i', 'z', 'y']
+        
+        filters = self.scratchDb.getOrderedListOfFiltersFromPhotcodesTable(interestedFilters)
+    
+        # get a count of the available filters
+        filterCount = self.scratchDb.getCountOfFiltersFromPhotcodesTable()
+
+        self.logger.infoPair("Available filters in Photcodes", filters)
+
+        # the 'code' now defines the order in the cps file that the mags are listed for a given filter
+        self.logger.infoPair("Adding magnitudes from", "cps table")
+        for filter in filters:
+
+            filterID = self.scratchDb.getFilterID(filter[1])
+
+            # NOTE: Manipulation of FLAGS from cpsTable is to move ID_SECF_OBJ_EXT flag (0x01000000)
+	    # from bit 24 to bit 13 so that it fits into the SMALLINT Object.Flags
+            # XXX EAM : 20140724 this manipulation is no longer needed : [grizy]Flags is now 4 byte (was 8 byte!)
+
+            # set the MeanObject fields based largely on dvopsps cps fields:
+
+            # XXX EAM 20140724 : filterCount is meant to match
+            # Nsecfilt, but is potentially not determined correctly.
+            # use a call to a dvo-native command which knows how to
+            # find Nsecfilt (or save in the db with dvopsps)
+
+            # the math below depends on filterCount = Nsecfilt and MeanObject.row being 1 counting but cps being 0 counting?
+            # cps.row has a count of MeanObject.row * Nsecfilt + Nfilter 
+            #  " + cpsTable + " AS cps ON (cps.row = (MeanObject.row* " + str(filterCount) + ")-(" + str(filterCount) + " - " + str(filter[0]) + ")) \
+
+            sql = "UPDATE MeanObject JOIN \
+                   " + cpsTable + " AS cps ON (cps.row = (MeanObject.row* " + str(filterCount) + ")-(" + str(filterCount) + " - " + str(filter[0]) + ")) \
+                   SET \
+                    MeanObject." + filter[1] + "QfPerfect      = PSF_QF_PERF_MAX \
+                   ,MeanObject." + filter[1] + "MeanPSFMag     = MAG \
+                   ,MeanObject." + filter[1] + "MeanPSFMagErr  = MAG_ERR \
+                   ,MeanObject." + filter[1] + "MeanPSFMagStd  = MAG_STDEV \
+                   ,MeanObject." + filter[1] + "MeanPSFMagMin  = MAG_MIN \
+                   ,MeanObject." + filter[1] + "MeanPSFMagMax  = MAG_MAX \
+                   ,MeanObject." + filter[1] + "MeanPSFMagNpt  = NUSED \
+                   ,MeanObject." + filter[1] + "MeanKronMag    = MAG_KRON \
+                   ,MeanObject." + filter[1] + "MeanKronMagErr = MAG_KRON_ERR \
+                   ,MeanObject." + filter[1] + "MeanKronMagStd = MAG_KRON_STDEV \
+                   ,MeanObject." + filter[1] + "MeanKronMagNpt = NUSED_KRON \
+                   ,MeanObject." + filter[1] + "MeanApMag      = MAG_AP \
+                   ,MeanObject." + filter[1] + "MeanApMagErr   = MAG_AP_ERR \
+                   ,MeanObject." + filter[1] + "MeanApMagStd   = MAG_AP_STDEV \
+                   ,MeanObject." + filter[1] + "MeanApMagNpt   = NUSED_AP \
+                   ,MeanObject." + filter[1] + "Flags = (0x7fff & FLAGS) | ((FLAGS >> 11) & 0x2000) "
+
+
+            try: self.scratchDb.execute(sql)
+            except:
+                self.logger.errorPair("failed update MeanObject", sql)
+                raise
+
+        # now set to null all MeanMagErr values > 0.5 (cut set by Gene, 2012-04-12)
+        # XXX EAM 20140724 : keep this cut?
+        cut = 0.5
+        self.logger.infoPair("Setting to NULL all MeanMagErr value >", "%f" % cut)
+        for filter in filters:
+
+            sql = "UPDATE MeanObject \
+                   SET " + filter[1] + "MeanPSFMagErr = null \
+                   WHERE " + filter[1] + "MeanPSFMagErr > " + str(cut)
+            self.scratchDb.execute(sql)
+
+    '''
+    Inserts stuff for all mags
+    '''
+    def updateObjectThinFromCps(self, cpsTable):
 
         # list of all filters PSPS is interested in
@@ -127,85 +193,32 @@
             filterID = self.scratchDb.getFilterID(filter[1])
 
-            # NOTE: Manipulation of FLAGS from cpsTable is to move ID_SECF_OBJ_EXT flag (0x01000000)
-	    # from bit 24 to bit 13 so that it fits into the SMALLINT Object.Flags
-
-            sql = "UPDATE MeanObject JOIN \
-                   " + cpsTable + " AS cps ON (cps.row = (MeanObject.row* " + str(filterCount) + ")-(" + str(filterCount) + " - " + str(filter[0]) + ")) \
-                   SET \
-                   MeanObject." + filter[1] + "QfPerfect = -999 \
-                   ,MeanObject." + filter[1] + "MeanPSFMag = MAG \
-                   ,MeanObject." + filter[1] + "MeanPSFMagErr = MAG_ERR \
-                   ,MeanObject." + filter[1] + "MeanKronMag = MAG_KRON \
-                   ,MeanObject." + filter[1] + "MeanKronMagErr = MAG_KRON_ERR \
-                   ,MeanObject." + filter[1] + "nIncPSFMag = -999 \
-                   ,MeanObject." + filter[1] + "MeanPSFMagStd = -999 \
-                   ,MeanObject." + filter[1] + "MinPSFMag = -999 \
-                   ,MeanObject." + filter[1] + "MaxPSFMag = -999 \
-                   ,MeanObject." + filter[1] + "nIncKronMag = -999 \
-                   ,MeanObject." + filter[1] + "MeanKronMag = -999 \
-                   ,MeanObject." + filter[1] + "MeanKronMagStd = -999 \
-                   ,MeanObject." + filter[1] + "MeanApMag = MAG_AP \
-                   ,MeanObject." + filter[1] + "MeanApMagErr = MAG_ERR \
-                   ,MeanObject." + filter[1] + "MeanApMagStd = MAG_STDEV \
-                   ,MeanObject." + filter[1] + "nIncApMag = -999 \
-                   ,MeanObject." + filter[1] + "Flags = (0x7fff & FLAGS) | ((FLAGS >> 11) & 0x2000) "
-
-
+            # XXX EAM 20140724 : this is quite awkward, add a objRow and ncode value to mysql db table?
+            # sqlLine = sqlUtility()
+
+            sql  = "UPDATE ObjectThin JOIN "
+            sql += cpsTable + " AS cps "
+            sql += "ON (cps.row = (ObjectThin.row * "
+            sql += str(filterCount) + ")-(" 
+            sql += str(filterCount) + " - " 
+            sql += str(filter[0])
+            sql += ")) "
+
+            sql += "SET ObjectThin.n" + filter[1] + " = NCODE, "
+            sql += "ObjectThin.nStackDetections = ObjectThin.nStackDetections + cps.NSTACK_DET"
             self.logger.info(sql)
             self.scratchDb.execute(sql)
 
-        # now set to null all MeanMagErr values > 0.5 (cut set by Gene, 2012-04-12)
-        cut = 0.5
-        self.logger.infoPair("Setting to NULL all MeanMagErr value >", "%f" % cut)
-        for filter in filters:
-
-            sql = "UPDATE MeanObject \
-                   SET " + filter[1] + "MeanPSFMagErr = null \
-                   WHERE " + filter[1] + "MeanPSFMagErr > " + str(cut)
-            self.scratchDb.execute(sql)
-    '''
-    Inserts stuff for all mags
-    '''
-    def updateObjectThinFromCps(self, cpsTable):
-
-        # list of all filters PSPS is interested in
-        interestedFilters = ['g', 'r', 'i', 'z', 'y']
-        
-        filters = self.scratchDb.getOrderedListOfFiltersFromPhotcodesTable(interestedFilters)
-    
-        # get a count of the available filters
-        filterCount = self.scratchDb.getCountOfFiltersFromPhotcodesTable()
-        # filterCount = len(filters)
-
-        self.logger.infoPair("Available filters in Photcodes", filters)
-
-        # the 'code' now defines the order in the cps file that the mags are listed for a given filter
-        self.logger.infoPair("Adding magnitudes from", "cps table")
-        for filter in filters:
-
-            filterID = self.scratchDb.getFilterID(filter[1])
-
-            # NOTE: Manipulation of FLAGS from cpsTable is to move ID_SECF_OBJ_EXT flag (0x01000000)
-	    # from bit 24 to bit 13 so that it fits into the SMALLINT Object.Flags
-
-            sql = "UPDATE ObjectThin JOIN \
-                   " + cpsTable + " AS cps ON (cps.row = (ObjectThin.row* " + str(filterCount) + ")-(" + str(filterCount) + " - " + str(filter[0]) + ")) \
-                   SET \
-                   ObjectThin.n" + filter[1] + " = NCODE "
-            self.logger.info(sql)
-            self.scratchDb.execute(sql)
-
+        # XXX this does not seem like a good thing to leave in SQL
         self.logger.infoPair("Calculating nDetections from", "n[filters]")
         for filter in filters:
             # now do a sum of n[filters], but do not include the ones with -999
-            sql = "UPDATE ObjectThin   \
-                   SET nDetections = nDetections + n" + filter[1] + " \
-                   WHERE n" + filter[1] + " != -999"
-            self.scratchDb.execute(sql)
-            
-
+            sql  = "UPDATE ObjectThin "
+            sql += "SET nDetections = nDetections + n" + filter[1]
+            sql += " WHERE n" + filter[1] + " != -999"
+            self.scratchDb.execute(sql)
 
     '''
     give objectName to objectThin
+    XXX EAM 20140714 : This seems quite inefficient in SQL, move to dvopsps?
     '''
     def updateObjName(self):
@@ -281,10 +294,4 @@
             return False
 
-
-
-
-
-
-
     '''
     Populates the Object table
@@ -296,6 +303,8 @@
 
         if False:
+            # XXX EAM 20140724 : this is probably wrong : flux measurements can be 0.0 or negative: please review
             self.logger.infoPair("setting to null  > 1e-38 and < 1e-38 in", "cps FLUX_KRON_ERR")
             sql = "UPDATE " + cpsTableName + " set FLUX_KRON_ERR = NULL where FLUX_KRON_ERR < 1e-37 AND FLUX_KRON_ERR > -1e-37 "
+            self.exitProgram("review this code" + sql)
       
             try:
@@ -315,62 +324,39 @@
 
         
-        self.logger.infoPair("Populating", "ThinObject")
-        self.logger.infoPair("Inserting objects from", "cpt file")
-
-        # note `` around dec here, as this is a reserved word in MySQL
-        sql = "INSERT IGNORE INTO ObjectThin (\
-               objID \
-               ,gcobjID \
-               ,ippObjID \
-               ,surveyID \
-               ,skyCellID \
-               ,randomID \
-               ,batchID \
-               ,dvoRegionID \
-               ,dataRelease \
-               ,objInfoFlag \
-               ,qualityFlag \
-               ,consistencyFlag \
-               ,raStack \
-               ,decStack \
-               ,raStackErr \
-               ,decStackErr \
-               ,raMean \
-               ,decMean \
-               ,raMeanErr \
-               ,decMeanErr \
-               ,raMeanStd \
-               ,decMeanStd \
-               ,nStackObjectRows \
-               ,nStackDetections \
-               ,nDetections \
-                ) \
-               SELECT \
-               EXT_ID \
-               , -999 \
-               ,CAT_ID*1000000000 + OBJ_ID \
-               ," + str(self.surveyID) + " \
-               , -999 \
-               , FLOOR(RAND()*9223372036854775807) \
-               , " + str(self.batchID) + "\
-               , -999 \
-               , " + str(self.skychunk.dataRelease) + "\
-               ,FLAGS \
-               ,FLAGS >> 24 & 0xFF \
-               , 0 \
-               , -999 \
-               , -999 \
-               , -999 \
-               , -999 \
-               ,RA \
-               ,DEC_ \
-               ,RA_ERR \
-               ,DEC_ERR \
-               , -999 \
-               , -999 \
-               ,0 \
-               ,0 \
-               ,0 \
-                FROM " + cptTableName
+        self.logger.info("Populating ThinObject")
+        self.logger.info("Inserting objects from cpt file")
+
+        # note "dec" is a reserved word in MySQL
+        # XXX EAM 20140724 : do not use INGORE unless we discover unavoidable problems...
+        # INSERT IGNORE INTO ObjectThin
+
+        sqlLine = sqlUtility("INSERT INTO ObjectThin (")
+
+        sqlLine.group("objID",           "EXT_ID") 
+        sqlLine.group("ippObjID",        "OBJ_ID + (CAT_ID << 32)") # NOTE: shift by 32 bits exactly
+        sqlLine.group("surveyID",        "'" + str(self.surveyID) + "'")
+        sqlLine.group("randomID",        "FLOOR(RAND()*9223372036854775807)") # XXX where does this number come from??
+        sqlLine.group("batchID",         "'" + str(self.batchID) + "'")
+        sqlLine.group("dvoRegionID",     "CAT_ID") 
+        sqlLine.group("tessID",          "TESS_ID") 
+        sqlLine.group("projectionID",    "PROJECTION_ID") 
+        sqlLine.group("skycellID",       "SKYCELL_ID") 
+        sqlLine.group("dataRelease",     "'" + str(self.skychunk.dataRelease) + "'")
+        sqlLine.group("objInfoFlag",     "FLAGS") 
+        sqlLine.group("qualityFlag",     "FLAGS >> 24 & 0xFF")
+        sqlLine.group("consistencyFlag", "'0'") 
+        sqlLine.group("raStack",         "RA_STK")
+        sqlLine.group("decStack",        "DEC_STK") 
+        sqlLine.group("raStackErr",      "RA_STK_ERR") 
+        sqlLine.group("decStackErr",     "DEC_STK_ERR")
+        sqlLine.group("raMean",          "RA_MEAN")
+        sqlLine.group("decMean",         "DEC_MEAN")
+        sqlLine.group("raMeanErr",       "RA_ERR")
+        sqlLine.group("decMeanErr",      "DEC_ERR")
+        sqlLine.group("posMeanChisq",    "CHISQ_POS")
+        sqlLine.group("nStackObjectRows", "'0'") # XXX I need to add / define this in dvopsps
+        sqlLine.group("nStackDetections", "'0'")
+        sqlLine.group("nDetections",      "'0'")
+        sql = sqlLine.makeRaw(") SELECT ", " FROM " + cptTableName)
 
         try:
@@ -390,9 +376,9 @@
         self.updateObjName()
 
-
         self.logger.infoPair("update ObjectThin from ","cps table")
 
         self.updateObjectThinFromCps(cpsTableName)
 
+        # XXX EAM 20140724 : is this necessary??
         #objects can have out of range ra dec in dvo - need to find and kill them at the end
 
@@ -455,12 +441,5 @@
         self.logger.infoPair("Populating MeanObject from ", "ObjectThin")
 
-        sql = "INSERT INTO MeanObject ( \
-               objID \
-               ,gcobjID \
-               ) \
-               SELECT \
-               objID \
-               ,gcobjID \
-               FROM ObjectThin"
+        sql = "INSERT INTO MeanObject ( objID ) SELECT objID FROM ObjectThin"
         try:
             self.scratchDb.execute(sql)
Index: /trunk/ippToPsps/jython/queue.py
===================================================================
--- /trunk/ippToPsps/jython/queue.py	(revision 37245)
+++ /trunk/ippToPsps/jython/queue.py	(revision 37246)
@@ -29,21 +29,13 @@
         super(Queue, self).__init__(argv)
 
-        # print "inited ipptopsps"
-
         # create various objects
         self.gpc1Db = Gpc1Db(self.logger, self.config)
-        # print "connect to gpc1"
 
         self.datastore = Datastore(self.logger, self.skychunk, self.ippToPspsDb)
-
-        print "made datastore"
 
         # connect to scratch database
         self.scratchDb = ScratchDb(self.logger, self.config)
 
-        print "connect to scratchdb"
-
         try:
-            print "why doesn't this work"
             self.dvoObjects = DvoObjects(self.logger, self.config, self.skychunk, self.ippToPspsDb, self.scratchDb)
         except:
@@ -51,6 +43,4 @@
             raise
 
-        print "got objects"
-
         self.skychunk.printAll()
 
@@ -63,10 +53,10 @@
     '''
     def run(self):
-        print "here"
+        self.logger.info("------------- starting queue.run -----------------")
         # this outer while loop simply waits a few minutes then starts queuing again (as more stuff may appear in DVO over time)
         while True:
 
             self.ippToPspsDb.removeAllBoxes()
-            print "remove boxes" 
+
             # queue up batches that are processed but not loaded to datastore
             for batchType in self.skychunk.batchTypes: 
@@ -77,10 +67,10 @@
                 # get totals for whole area to check if there is anything to do
                 processedIDs = self.ippToPspsDb.getProcessedIDs(batchType)
-                print "got processed ids"
                 consistantlyFailedIDs = self.ippToPspsDb.getConsistentlyFailedIDs(batchType)
-                print "got here"
+
                 # for object batches, get full list of stuff from Dvo
                 # XXX : need to fix 'dvo.setSkyArea' or this may not return the full list for a parallel dvo
-            #for object-like batches, info comes from dvo
+
+                # for object-like batches, info comes from dvo
                 if (batchType == "OB" or batchType =="DO" or batchType =="FO"):
                     self.dvoObjects.setSkyArea(
@@ -144,5 +134,5 @@
                     if (dec > 85): raise
 
-                    print "dec, dD: ", dec, dD ,self.skychunk.maxDec
+                    # print "dec, dD: ", dec, dD ,self.skychunk.maxDec
 
                     # a given box centered at RA,DEC with (linear) size of SIDE has the following bounds
@@ -152,10 +142,9 @@
                     ra = self.skychunk.minRa + dR
                     
-                    print "ra, dR, maxRa", ra, dR, self.skychunk.maxRa
+                    # print "ra, dR, maxRa", ra, dR, self.skychunk.maxRa
 
                     # XXX not sure why this is not done with a for-loop...
                     while dec <= self.skychunk.maxDec:
                         while ra <= self.skychunk.maxRa:
-                           print "here" 
                            # a given box centered at RA,DEC with (linear) size of SIDE has the following bounds
                            minRA  = ra  - dR
@@ -175,6 +164,4 @@
                                        len(ids)))
                 
-                           print "box_id: ", box_id
-
                            if len(ids) > 0: self.ippToPspsDb.insertPending(box_id, batchType, ids)
                            # print "inserted pending"
Index: /trunk/ippToPsps/jython/scratchdb.py
===================================================================
--- /trunk/ippToPsps/jython/scratchdb.py	(revision 37245)
+++ /trunk/ippToPsps/jython/scratchdb.py	(revision 37246)
@@ -51,12 +51,8 @@
     Sets whether we are using normal or pre-ingested DVO tables
     '''
-    def setUseFullTables(self, useFull):
-
-        if useFull:
-            self.dvoImagesTable = "dvoImagesFull"
-            self.dvoDetectionTable = "dvoDetectionFull"
-        else:
-            self.dvoImagesTable = "dvoImages"
-            self.dvoDetectionTable = "dvoDetection"
+    def setDvoTableNames(self):
+
+        self.dvoImagesTable = "dvoImagesFull"
+        self.dvoDetectionTable = "dvoDetectionFull"
 
         self.logger.debugPair("Using DVO images table", self.dvoImagesTable)
@@ -135,4 +131,20 @@
         return filterID
 
+    '''
+    Gets tess ID for this tess name
+    '''
+    def getTessID(self, name):
+     
+        sql = "SELECT tessID FROM TessellationType WHERE name = '" + name + "'"
+        try:
+            rs = self.executeQuery(sql)
+            rs.first()
+            tessID = rs.getInt(1)
+        except:
+            self.logger.errorPair("No tess ID found for tess", name)
+            tessID = -1
+
+        return tessID
+
     ''' 
     Gets imageID from extern ID 
@@ -244,8 +256,9 @@
                 return True
             else:
+                self.logger.infoPair("Did NOT already import from",  path)
                 return False
         except:
+            print "***** exception in alreadyImportedThisDvoTable *****"
             self.logger.exception("Unable to check whether this DVO table has been imported")
-
 
     '''
@@ -323,9 +336,36 @@
     def isCorrectDvo(self, path):
 
+        sql = "show tables"
+        try:
+            rs = self.executeQuery(sql)  
+            haveDone = False
+            while (rs.next()):
+                tableName = rs.getString(1)
+                # print "table: " + tableName
+                if tableName == self.dvoDoneTable:
+                    haveDone = True
+                    
+            rs.close()
+            if not haveDone:
+                self.logger.info("dvoDone not yet built")
+                return False
+
+        except Exception, e:
+            print str(e)
+            self.logger.errorPair("problem examining table", sql)
+            sys.exit(1)
+
         sql = "SELECT path FROM " + self.dvoDoneTable + " WHERE path LIKE '%SkyTable.fits'"
-        try:
-            rs = self.executeQuery(sql)  
-            rs.first()
-
+        try: rs = self.executeQuery(sql)  
+        except Exception, e:
+            print str(e)
+            self.logger.errorPair("problem querying for dvo path", path)
+            sys.exit(1)
+
+        if not rs.next():
+            self.logger.info("dvoDone exists, but is empty")
+            return False
+
+        try:
             head,tail = os.path.split(rs.getString(1))
 
@@ -334,11 +374,11 @@
                 return True
             else: 
-                self.logger.errorPair("DVO does not match. We have", head)
+                self.logger.infoPair("DVO does not match. We have", head)
                 return False
 
         except Exception, e:
             print str(e)
-            self.logger.errorPair("No DVO files ingested for this path", path)
-            return False
+            self.logger.errorPair("problem searching for DVO at", path)
+            sys.exit(1)
 
     '''
@@ -387,6 +427,5 @@
             # if no returned rows, return an error
             if not rs.next():
-                print "DVO lacks imageID ", imageID
-                print "sql: ", sql
+                self.logger.infoPair("DVO lacks imageID ", imageID)
                 return False
 
@@ -396,7 +435,8 @@
 
             else:
-                print "DVO has wrong imageID? ", imageID
-                print "result was ", rs.getInt(1)
-                print "sql: ", sql
+                self.logger.error("DVO has wrong imageID? ")
+                self.logger.error("imageID: ", imageID)
+                self.logger.error("EXTERN_ID: ", rs.getInt(1))
+                self.logger.infoPair("sql: ", sql)
                 raise
 
@@ -415,8 +455,8 @@
     
         dvoImagesTable = "dvoImages"
-        dvoDetectionTable = "dvoDetections"
+        dvoDetectionTable = "dvoDetection"
 
         # drop and create Images table
-        self.logger.debugPair("Creating DVO table", dvoImagesTable)
+        self.logger.infoPair("Creating DVO table", dvoImagesTable)
         sql = "DROP TABLE " + dvoImagesTable
 
@@ -438,25 +478,34 @@
 
         # now detection table
-        self.logger.debugPair("Creating DVO table", dvoDetectionTable)
+        self.logger.infoPair("Dropping DVO table", dvoDetectionTable)
         sql = "DROP TABLE " + dvoDetectionTable
         try: self.execute(sql)
-        except: pass
-
-        self.logger.debugPair("Creating DVO table", "dvoDetection")
+        except: 
+            self.logger.errorPair("problem dropping DVO table", dvoDetectionTable)
+            pass
+
+        self.logger.infoPair("Creating DVO table", "dvoDetection")
         sql = "CREATE TABLE dvoDetection ( \
-               imageID INT, \
-               ippDetectID BIGINT, \
+               objID BIGINT, \
                detectID BIGINT, \
                ippObjID BIGINT, \
-               objID BIGINT, \
-               flags INT, \
-               zp FLOAT, \
-               zpErr FLOAT, \
-               airMass FLOAT, \
-               expTime FLOAT, \
+               ippDetectID BIGINT, \
+               imageID INT, \
+               catID INT, \
                ra DOUBLE, \
                dec_ DOUBLE, \
                raErr FLOAT, \
                decErr FLOAT, \
+               zp FLOAT, \
+               telluricExt FLOAT, \
+               airmass FLOAT, \
+               expTime FLOAT, \
+               Mpsf FLOAT, \
+               dMpsf FLOAT, \
+               Mkron FLOAT, \
+               dMkron FLOAT, \
+               Map FLOAT, \
+               dMap FLOAT, \
+               flags INT, \
                PRIMARY KEY (imageID, ippDetectID), \
                KEY (objID, detectID) \
@@ -466,4 +515,5 @@
         except: 
             self.logger.error("Unable to create DVO detection database table")
+            self.sys.exit(1)
 
         # XXX EAM : for the parallel mode, dvoDetection requires duplicate objID values!
@@ -511,8 +561,9 @@
 
        # we need a big enough memory table for the incoming detections
-       print "requested memory in gigs: ", self.memoryTableSize
+       # print "requested memory in gigs: ", self.memoryTableSize
        tableSize = int(self.memoryTableSize) * 1024 * 1024 * 1024
+       self.logger.infoPair("setting max heap size: ", tableSize)
+
        sql = "set @@max_heap_table_size = " + str(tableSize)
-       print "setting max heap size: ", sql
        try: self.execute(sql)
        except: 
@@ -550,8 +601,11 @@
        self.logger.infoPair("Dropping table", self.dvoSkyTable)
        self.dropTable(self.dvoSkyTable) 
-       self.logger.infoPair("Dropping table", self.dvoDetectionTable)
-       self.dropTable(self.dvoDetectionTable)
        self.logger.infoPair("Dropping table", self.dvoDoneTable)
        self.dropTable(self.dvoDoneTable) 
+
+       # blow away existing dvoDetection table & re-crate
+       if not self.resetDvoDetectionTable():
+           self.logger.errorPair("Unable to reset scratch table", "DvoDetectionFull")
+           return False
 
        # create dvoDone table
@@ -564,9 +618,4 @@
 
        self.changeEngineToInnoDB(self.dvoDoneTable)
-
-       # blow away existing dvoDetection table & re-crate
-       if not self.resetDvoDetectionTable():
-           self.logger.errorPair("Unable to reset scratch table", "DvoDetectionFull")
-           return False
 
        return True
Index: /trunk/ippToPsps/jython/sqlUtility.py
===================================================================
--- /trunk/ippToPsps/jython/sqlUtility.py	(revision 37246)
+++ /trunk/ippToPsps/jython/sqlUtility.py	(revision 37246)
@@ -0,0 +1,82 @@
+#!/usr/bin/env jython
+
+import os
+import re
+import shutil
+
+# SQL Utility class, for manipulating SQL string commands
+class sqlUtility(object):
+
+    # Constructor
+    def __init__(self,startString):
+        self.fields = []
+        self.values = []
+        self.startString = startString
+        return
+    
+    def group(self,field,value):
+        self.fields.append(field)
+        self.values.append(value)
+        return
+
+    # result is startString + fields + middleString + values + endString
+    def makeRaw(self,middleString,endString):
+
+        output = self.startString + " "
+
+        for i in range(len(self.fields)):
+            output += self.fields[i]
+            if (i < len(self.fields) - 1):
+                output += ", "
+
+        output += " " + middleString + "  "
+
+        for i in range(len(self.values)):
+            output += self.values[i]
+            if (i < len(self.values) - 1):
+                output += ", "
+        
+        output += " " + endString
+
+        return output
+
+    # result is startString + fields + middleString + values + endString (each value surrounded by '')
+    def make(self,middleString,endString):
+
+        output = self.startString + " "
+
+        for i in range(len(self.fields)):
+            output += self.fields[i]
+            if (i < len(self.fields) - 1):
+                output += ", "
+
+        output += " " + middleString + " "
+
+        for i in range(len(self.values)):
+            output += "'" + self.values[i] + "'"
+            if (i < len(self.values) - 1):
+                output += ", "
+        
+        output += " " + endString
+
+        return output
+
+    # result is startString + field = value,... + endString
+    def makeEquals(self,endString):
+
+        output = self.startString + " "
+
+        for i in range(len(self.fields)):
+            output += self.fields[i] + " = " + self.values[i]
+            if (i < len(self.fields) - 1):
+                output += ", "
+        
+        output += " " + endString
+
+        return output
+
+    # when we do a sql insert, we have a command that looks like this:
+    # INSERT INTO Table (field1, field2,...) OPERATION (value1, value2,...)
+    # I want to make it easy to group field1 and value1, etc
+
+    
Index: /trunk/ippToPsps/jython/stackbatch.py
===================================================================
--- /trunk/ippToPsps/jython/stackbatch.py	(revision 37245)
+++ /trunk/ippToPsps/jython/stackbatch.py	(revision 37246)
@@ -1,8 +1,8 @@
-q#!/usr/bin/env jython
+#!/usr/bin/env jython
 
 import os.path
 import glob
 import sys
-
+import math
 
 import stilts
@@ -17,4 +17,5 @@
 from ipptopspsdb import IppToPspsDb
 from scratchdb import ScratchDb
+from sqlUtility import sqlUtility
 
 import logging.config
@@ -39,6 +40,5 @@
                  scratchDb,
                  skyID,
-                 batchID,
-                 useFullTables):
+                 batchID):
 
        super(StackBatch, self).__init__(
@@ -52,201 +52,134 @@
                batchID,
                "ST", 
-               "",
-               #gpc1Db.getStackStageCmf(skychunk.dvoLabel, stackID),
-               useFullTables)
-
-       # self.printline = 0
-       # # self.testprint()
-#       self.logger.infoPair("did I get", "here");
+               None)
+
        self.stackType = "DEEP_STACK" # TODO
-       ## = stuff I commented out for pv2 stacks
+       self.stackTypeID = self.getStackTypeID()
        
-       #heather tasks
-
-       # get a list of stackIDs
-       self.logger.infoPair ("getting stackID for: ","g.00000")
-       gstackID = gpc1Db.getStackIDFromSkyIDAndFilter( skychunk.dvoLabel, skyID, "g.00000")
-       self.logger.infoPair ("getting stackID for: ","r.00000")
-       rstackID = gpc1Db.getStackIDFromSkyIDAndFilter( skychunk.dvoLabel, skyID, "r.00000")
-       self.logger.infoPair ("getting stackID for: ","i.00000")
-       istackID = gpc1Db.getStackIDFromSkyIDAndFilter( skychunk.dvoLabel, skyID, "i.00000")
-       self.logger.infoPair ("getting stackID for: ","z.00000")
-       zstackID = gpc1Db.getStackIDFromSkyIDAndFilter( skychunk.dvoLabel, skyID, "z.00000")
-       self.logger.infoPair ("getting stackID for: ","y.00000")
-       ystackID = gpc1Db.getStackIDFromSkyIDAndFilter( skychunk.dvoLabel, skyID, "y.00000")
- #      self.logger.infoPair("g stackID ",gstackID)       
- #      self.logger.infoPair("r stackID ",rstackID)
- #      self.logger.infoPair("i stackID ",istackID)
- #      self.logger.infoPair("z stackID ",zstackID)
- #      self.logger.infoPair("y stackID ",ystackID)
- #      raise
-       # from each stackget fits name from getStackStageCmf
-       if gstackID > 0:
-           self.logger.infoPair ("finding fits file for: ","g.00000")
-           gfits = gpc1Db.getStackStageCmf(skychunk.dvoLabel, gstackID)
-           self.gfits = gfits
-       if rstackID > 0:    
-           self.logger.infoPair ("finding fits file for: ","r.00000")
-           rfits = gpc1Db.getStackStageCmf(skychunk.dvoLabel, rstackID)
-           self.rfits = rfits
-       if istackID > 0:    
-           self.logger.infoPair ("finding fits file for: ","i.00000")
-           ifits = gpc1Db.getStackStageCmf(skychunk.dvoLabel, istackID)
-           self.ifits = ifits
-       if zstackID > 0:    
-           self.logger.infoPair ("finding fits file for: ","z.00000")
-           zfits = gpc1Db.getStackStageCmf(skychunk.dvoLabel, zstackID)
-           self.zfits = zfits
-       if ystackID > 0:    
-           self.logger.infoPair ("finding fits file for: ","y.00000")
-           yfits = gpc1Db.getStackStageCmf(skychunk.dvoLabel, ystackID)
-           self.yfits = yfits
-
-       #from each of those get self.gheader, self.rheader, etc.
-       if gstackID > 0:    
-           if gfits:
-               gheader = gfits.getPrimaryHeader()
-               if not gheader:
-                   self.logger.errorPair("could not read FITS PHU for ",gstackID)
-                   raise
-               self.gheader = gheader
-       if rstackID > 0:        
-           if rfits:
-               rheader = rfits.getPrimaryHeader()
-               if not rheader:
-                   self.logger.errorPair("could not read FITS PHU for ",rstackID)
-                   raise
-               self.rheader = rheader
-       if istackID > 0:        
-           if ifits:
-               iheader = ifits.getPrimaryHeader()
-               if not iheader:
-                   self.logger.errorPair("could not read FITS PHU for ",istackID)
-                   raise
-               self.iheader = iheader
-       if zstackID > 0:
-           if zfits:
-               zheader = zfits.getPrimaryHeader()
-               if not zheader:
-                   self.logger.errorPair("could not read FITS PHU for ",zstackID)
-                   raise
-               self.zheader = zheader
-       if ystackID > 0: 
-           if yfits:
-               yheader = yfits.getPrimaryHeader()
-               if not yheader:
-                   self.logger.errorPair("could not read FITS PHU for ",ystackID)
-                   raise
-               self.yheader = yheader
-       # get stack meta data
-       self.gstackID = gstackID
-       self.rstackID = rstackID
-       self.istackID = istackID     
-       self.zstackID = zstackID
-       self.ystackID = ystackID
-
-       metastackid = -999
-       if gstackID > 0:
-           metastackid = gstackID
-       if rstackID > 0:
-           metastackid = rstackID
-       if istackID > 0:
-           metastackid = istackID    
-       if zstackID > 0:
-           metastackid = zstackID
-       if ystackID > 0:
-           metastackid = ystackID
-       #there is probably a better way to do this
-       if metastackid < 0:
-           self.logger.errorPair("can't find any stack ids...?? ","??")
+       self.filters = ['g', 'r', 'i', 'z', 'y']
+       self.stackIDs = {}
+       self.imageIDs = {}
+       self.fits = {}
+       self.headerSet = {}
+
+       # we have two sets of imageIDs here:
+
+       # stackID : this is the id from the gpc1 stack table and (should) match the 
+       # cmf header keyword 'IMAGEID', this is also called EXTERN_ID in dvoImagesTable
+       
+       # imageID : this is the DVO-internal image ID for the stack cmf, and is called
+       # IMAGE_ID in dvoImagesTable
+
+       # we just need one valid filter to get the generic metadata
+       validFilter = 'none'
+
+       # get a list of stackIDs, identify the CMFs, read the headers:
+       for filter in self.filters:
+           filterName = filter + ".00000"
+
+           self.logger.infoPair ("getting stackID for: ", filterName)
+           stackID = gpc1Db.getStackIDFromSkyIDAndFilter(skychunk.dvoLabel, skyID, filterName)
+           self.stackIDs[filter] = stackID
+
+           if (stackID <= 0): 
+               continue
+               
+           validFilter = filter
+
+           # from each stack, get fits name from getStackStageCmf
+           self.logger.infoPair ("finding fits file for: ", filterName)
+           self.fits[filter] = gpc1Db.getStackStageCmf(skychunk.dvoLabel, stackID)
+           if not self.fits[filter]:
+               self.logger.errorPair("could not find cmf file name for ", stackID)
+               raise
+
+           header = self.fits[filter].getPrimaryHeader()
+           if not header:
+               self.logger.errorPair("could not read FITS PHU for ", stackID)
+               raise
+
+           self.headerSet[filter] = header
+
+           self.logger.infoPair(filter + " stackID = ", stackID)       
+
+           if not (str(stackID) == header['IMAGEID']): 
+               self.logger.errorPair("inconsistency: header IMAGEID does not match stackID", str(stackID) + " vs " + header['IMAGEID'])
+               raise
+
+           imageID = self.scratchDb.getImageIDFromExternID(stackID)
+           self.logger.infoPair(filter + " imageID = ", imageID)       
+           self.imageIDs[filter] = imageID
+
+       # did we find any valid stacks?
+       if validFilter == 'none':
+           self.logger.errorPair("can't find any valid stacks...?? ","??")
            raise
     
-       meta = self.gpc1Db.getStackStageMeta(metastackid)  
-       ## this should be ok - it takes a stack_id and returns filter/skycell etc.
-
-
-       if not meta:
-           self.logger.errorPair("Could not get stack", "metadata")
+       validStackID = self.stackIDs[validFilter]
+
+       # using the given stack ID, get the generic information: filter, skycell, etc.
+       metadata = self.gpc1Db.getStackStageMeta(validStackID)  
+
+       if not metadata:
+           self.logger.errorPair("Could not get stack metadata for", validStackID)
            raise
 
-       #self.filter = meta[0];
-       #self.filter = self.filter[0:1]
-       #self.filterID = self.scratchDb.getFilterID(self.filter)
-       self.skycell = meta[1];
-
-       # self.testprint()
-
-       # skycell is, eg "skycell.1133.081"
-       # we need 1133.081 for skycell, but store as an int, so instead store 1133081
-       # projection cell is just the 1133 bit
-       # This Is how it should be done
-       #self.projectioncell = self.skycell[8:12]
-       #self.skycell = self.skycell[8:]
-       #self.skycell = self.skycell.replace(".", "")
-       #self.projectioncell = self.skycell[8:12]
-
-       # TODO this is the wrong way, but is consistent with SkyCell table in IN data
-       self.skycell = self.skycell[8:]
-       self.projectioncell = self.skycell
-
-       # self.testprint()
-
-       # proposed new values. Need to coordinate with the SkyCell table
-       # this fits in 32 bits for 0 < tessID < 214
-       # self.skycell = str( (tessID * (10000 * 1000)) + (int(self.projectioncell) * 1000) + cellID )
-
-       self.analysisVer = meta[2];
-
-       #self.expTime = gpc1Db.getStackExpTime(self.id)
+       validHeader = self.headerSet[validFilter]
+
+       tessName = self.getKeyValue(header, 'TESS_ID')
+       self.tessID = self.scratchDb.getTessID(tessName)
+
+       skycellName = self.getKeyValue(header, 'SKYCELL')
+
+       # XXX EAM 20140812 : I am hardwiring the parsing logic for RINGS vs LOCAL
+       if tessName == 'RINGS.V3':
+           # skycell is, eg "skycell.1133.081"
+           #                 0123456789012345
+           self.projectionID = skycellName[8:12]
+           self.skycellID = skycellName[13:]
+       else:
+           # skycell is, eg "skycell.081"
+           #                 01234567890
+           self.projectionID = 0
+           self.skycellID = skycellName[8:11]
+       if self.skycellID == "":
+           self.skycellID = -1
+
+       self.analysisVer = metadata[2];
+
+       # delete PSPS tables
+       for filter in self.filters:
+           tableName = filter + "StackMeta"
+           self.dropTableVerbose(tableName)
+
+       self.dropTableVerbose("StackObjectThin")
+       self.dropTableVerbose("StackObjectRaw")
        
-       # delete PSPS tables
-       self.logger.infoPair("dropping table:","gStackMeta")
-       self.scratchDb.dropTable("gStackMeta")
-       self.logger.infoPair("dropping table:","rStackMeta")
-       self.scratchDb.dropTable("rStackMeta")
-       self.logger.infoPair("dropping table:","iStackMeta")
-       self.scratchDb.dropTable("iStackMeta")
-       self.logger.infoPair("dropping table:","zStackMeta")
-       self.scratchDb.dropTable("zStackMeta")
-       self.logger.infoPair("dropping table:","yStackMeta")
-       self.scratchDb.dropTable("yStackMeta")
-       self.logger.infoPair("dropping table:","StackObject")
-
-       self.scratchDb.dropTable("StackObject")
-       self.logger.infoPair("dropping table:","StackModelFit")
-       self.scratchDb.dropTable("SkinnyObject")
-       self.scratchDb.dropTable("StackModelFit")
-       self.logger.infoPair("dropping table:","StackApFlx")
-
-       self.scratchDb.dropTable("StackApFlx")
-       self.logger.infoPair("dropping table:","StackToImage")
-
-       self.scratchDb.dropTable("StackToImage")
-             # self.testprint()
-
-       # for PV2 we will have (grizy) of stack meta and skychip      
-
+       self.dropTableVerbose("StackModelFitExtra")
+       self.dropTableVerbose("StackModelFitDeV")
+       self.dropTableVerbose("StackModelFitExp")
+       self.dropTableVerbose("StackModelFitSer")
+
+       self.dropTableVerbose("StackApFlx")
+       self.dropTableVerbose("StackApFlxFull")
+       self.dropTableVerbose("StackApFlxFullC1")
+       self.dropTableVerbose("StackApFlxFullC2")
+
+       self.dropTableVerbose("StackPetrosian")
+
+       self.dropTableVerbose("StackToImage")
 
        # delete IPP tables
-       self.scratchDb.dropTable("gSkyChip_psf")
-       self.scratchDb.dropTable("gSkyChip_xrad")
-       self.scratchDb.dropTable("gSkyChip_xfit")
-       self.scratchDb.dropTable("gSkyChip_xsrc")
-       self.scratchDb.dropTable("rSkyChip_psf")
-       self.scratchDb.dropTable("rSkyChip_xrad")
-       self.scratchDb.dropTable("rSkyChip_xfit")
-       self.scratchDb.dropTable("rSkyChip_xsrc")
-       self.scratchDb.dropTable("iSkyChip_psf")
-       self.scratchDb.dropTable("iSkyChip_xrad")
-       self.scratchDb.dropTable("iSkyChip_xfit")
-       self.scratchDb.dropTable("iSkyChip_xsrc")
-       self.scratchDb.dropTable("zSkyChip_psf")
-       self.scratchDb.dropTable("zSkyChip_xrad")
-       self.scratchDb.dropTable("zSkyChip_xfit")
-       self.scratchDb.dropTable("zSkyChip_xsrc")
-       self.scratchDb.dropTable("ySkyChip_psf")
-       self.scratchDb.dropTable("ySkyChip_xrad")
-       self.scratchDb.dropTable("ySkyChip_xfit")
-       self.scratchDb.dropTable("ySkyChip_xsrc")
+       if not self.config.retry:
+           self.logger.info("dropping Stack cmf tables")
+           for filter in self.filters:
+               tableName = filter + "SkyChip_psf"
+               self.scratchDb.dropTable(tableName)
+               tableName = filter + "SkyChip_xrad"
+               self.scratchDb.dropTable(tableName)
+               tableName = filter + "SkyChip_xsrc"
+               self.scratchDb.dropTable(tableName)
+               tableName = filter + "SkyChip_xfit"
+               self.scratchDb.dropTable(tableName)
 
        # create an output filename, which is {stackID}.FITS
@@ -263,98 +196,584 @@
        self.ippToPspsDb.insertStackMeta(self.batchID, "x" , self.stackType)
 
-       # insert sourceID/imageID combo so DVO can look it up
-       ##if not self.useFullTables:
-       ##    self.scratchDb.insertNewDvoExternID(self.header['SOURCEID'], self.header['IMAGEID'])
-
-       # self.testprint()
-
        # dump stuff to log
        self.logger.infoPair("Stack ID", "%d" % self.id)
        self.logger.infoPair("Stack type", "%s" % self.stackType)
-       self.logger.infoPair("Skycell", "%s" % self.skycell)
-       self.logger.infoPair("Projectioncell", "%s" % self.projectioncell)
-       ##self.logger.infoPair("Filter", "%s" % self.filter)
-
-    '''
-    Updates a table with stackMetaID
-    '''
-    def updateStackMetaID(self, table):
-
-        sql = "UPDATE " + table + "  SET gstackMetaID=" + str(self.gstackID) + " \
-              , rstackMetaID=" + str(self.rstackID) + " \
-              , istackMetaID=" + str(self.istackID) + " \
-              , zstackMetaID=" + str(self.zstackID) + " \
-              , ystackMetaID=" + str(self.ystackID)   
-     
-        self.scratchDb.execute(sql)
-
-    '''
-    Updates a table with stackTypeID grabbed from FitModel init table
-    '''
-    def updateStackTypeID(self, table):
-
-        sql = "UPDATE "+table+" AS a, StackType AS b SET a.stackTypeID=b.stackTypeID WHERE b.name = '" + self.stackType + "'"
-        self.scratchDb.execute(sql)
-
-
-    def testprint(self):
-      print "here ", self.printline
-      self.printline += 1
+       self.logger.infoPair("SkycellID", "%s" % self.skycellID)
+       self.logger.infoPair("ProjectionID", "%s" % self.projectionID)
+
+    ### *********************** main populate functions ************************************
+
+    '''
+    Populates the StackMeta table, mainly from header values found in stack cmf FITS header
+    '''
+    def populateStackMeta(self,filter):
+
+        header = self.headerSet[filter]
+        tablename = filter + "StackMeta"
+        stackID = self.stackIDs[filter]
+        filterName = filter + ".00000"
+
+        self.logger.infoPair("Populating table", tablename)
+
+        fwhm_maj    = self.getKeyFloat(header, "%.8f", 'FWHM_MAJ')
+        fwhm_maj_uq = self.getKeyFloat(header, "%.8f", 'FW_MJ_UQ')
+        psfmodel    = self.getKeyValue(header, 'PSFMODEL')
+
+        # make a table
+        filterID = self.scratchDb.getFilterID(filter)
+        self.logger.infoPair("filterID is ",str(filterID))
+
+        photoCalID = str(self.scratchDb.getPhotoCalID(stackID))
+
+        # mysql is sensitive to values which are ambiugously float.  eg
+        # a warning is raised if we try to insert '25.' into a float field.
+        # use getKeyFloat(hdr, format, key) to avoid this problem
+
+        sql = "CREATE TABLE " + tablename + " LIKE StackMeta"
+        try: self.scratchDb.execute(sql)
+        except: pass
+
+        sqlLine = sqlUtility("INSERT INTO " + tablename + " (")
+
+        sqlLine.group("stackMetaID",   str(stackID))        
+        sqlLine.group("batchID",       str(self.batchID))
+        sqlLine.group("surveyID",      str(self.surveyID))
+        sqlLine.group("filterID",      str(filterID))           
+        sqlLine.group("stackTypeID",   str(self.stackTypeID))
+        sqlLine.group("tessID",        str(self.tessID))            
+        sqlLine.group("projectionID",  str(self.projectionID))            
+        sqlLine.group("skyCellID",     str(self.skycellID))            
+        sqlLine.group("photoCalID",    photoCalID) 
+        sqlLine.group("analysisVer",   str(self.analysisVer)) 
+        sqlLine.group("expTime",       self.getKeyFloat(header, "%.5f", 'EXPTIME'))  
+        sqlLine.group("psfModelID",    psfmodel)           
+        sqlLine.group("psfFwhm_mean",  fwhm_maj)      
+        sqlLine.group("psfFwhm_max",   fwhm_maj_uq)    
+        sqlLine.group("photoZero",     self.getKeyFloat(header, "%.5f", 'FPA.ZP'))
+        sqlLine.group("ctype1",        header['CTYPE1'])  
+        sqlLine.group("ctype2",        header['CTYPE2'])  
+        sqlLine.group("crval1",        self.getKeyFloat(header, "%.8f", 'CRVAL1'))   
+        sqlLine.group("crval2",        self.getKeyFloat(header, "%.8f", 'CRVAL2'))   
+        sqlLine.group("crpix1",        self.getKeyFloat(header, "%.8f", 'CRPIX1'))   
+        sqlLine.group("crpix2",        self.getKeyFloat(header, "%.8f", 'CRPIX2'))   
+        sqlLine.group("cdelt1",        self.getKeyFloat(header, "%.8e", 'CDELT1'))   
+        sqlLine.group("cdelt2",        self.getKeyFloat(header, "%.8e", 'CDELT2'))   
+        sqlLine.group("pc001001",      self.getKeyFloat(header, "%.8e", 'PC001001')) 
+        sqlLine.group("pc001002",      self.getKeyFloat(header, "%.8e", 'PC001002')) 
+        sqlLine.group("pc002001",      self.getKeyFloat(header, "%.8e", 'PC002001')) 
+        sqlLine.group("pc002002",      self.getKeyFloat(header, "%.8e", 'PC002002')) 
+        sqlLine.group("dataRelease",   str(self.skychunk.dataRelease))
+
+        sql = sqlLine.make(") VALUES ( ", ")")
+
+        try: self.scratchDb.execute(sql)
+        except:
+            self.logger.error("problem with SQL: " + sql)
+            raise
+
+        self.tablesToExport.append(tablename)
+
+    '''
+    Populates the StackObjectThin table
+    '''
+    def populateStackObjectThin(self):
+
+        self.logger.infoPair("Procesing table", "StackObjectThin")
+
+        # insert the per-object data (IDs, random stack ID, dataRelease, etc)
+        self.selectDvoObjIDs()
+
+        # add indexes StackObjectThin
+        self.scratchDb.createIndex("StackObjectThin", "objID")
+
+        self.logger.infoPair("inserting filter dependent items into", "StackObjectThin")
+
+        for filter in self.filters:
+            self.logger.infoPair("filter", filter)
+
+            stackID = self.stackIDs[filter]
+            self.logger.infoPair(filter + "stackID = ", stackID)
+
+            if stackID <= 0:  
+                self.logger.infoPair("no stack data for filter" , filter) 
+                continue
+
+            imageID = self.imageIDs[filter]
+            self.logger.infoPair("selecting imageID", imageID)
+
+            # at this point, the StackObjectThin table includes objID and ippObjID
+
+            # insert detection information for each filter based on the DVO contents
+            sqlLine = sqlUtility("UPDATE StackObjectThin as a, " + self.scratchDb.dvoDetectionTable + " as b SET")
+
+            sqlLine.group("a."+filter+"ippDetectID",   "b.ippDetectID") # eg, gippDetectID (from dvo.measure.detID)
+            sqlLine.group("a."+filter+"stackDetectID", "b.detectID")    # eg, gstackDetectID (from dvo.measure.extID)
+            sqlLine.group("a."+filter+"stackMetaID",    str(stackID))   # eg, gstackMetaID (from cmf.IMAGEID)
+
+            sqlLine.group("a.dvoRegionID",             "b.catID")       # this is not filter dependent, but is re-written for each filter (if data exists)
+            sqlLine.group("a.primaryDetection",        "((b.flags & 0x10000) >> 16)") # this is not filter dependent, but is re-written for each filter (if data exists)
+
+            sqlLine.group("a."+filter+"haveData",      "'1'")
+
+            sqlLine.group("a."+filter+"ra",            "b.ra")
+            sqlLine.group("a."+filter+"dec",           "b.dec_")
+
+            sqlLine.group("a."+filter+"PSFMag",        "b.Mpsf")
+            sqlLine.group("a."+filter+"PSFMagErr",     "b.dMpsf")
+            sqlLine.group("a."+filter+"KronMag",       "b.Mkron")
+            sqlLine.group("a."+filter+"KronMagErr",    "b.dMkron")
+            sqlLine.group("a."+filter+"ApMag",         "b.Map")
+            sqlLine.group("a."+filter+"ApMagErr",      "b.dMap")
+            sqlLine.group("a."+filter+"telluricExt",   "b.telluricExt")
+
+            sqlLine.group("a."+filter+"infoFlag2",     "(b.flags << 13)")
+            sql = sqlLine.makeEquals("WHERE a.objID = b.objID AND b.imageID = " + str(imageID))
+
+            try: self.scratchDb.execute(sql)
+            except:
+                self.logger.errorPair('failed sql: ', sql)
+                raise
+
+            # insert values coming from the CMF, not carried by DVO
+            header = self.headerSet[filter]
+            exptime = self.getKeyFloat(header, "%.5f", "EXPTIME")
+
+            sqlLine = sqlUtility("UPDATE StackObjectThin AS a , " + filter + "SkyChip_psf AS b SET")
+
+            sqlLine.group("a."+filter+"raErr",         "b.X_PSF_SIG * b.PLTSCALE")
+            sqlLine.group("a."+filter+"decErr",        "b.Y_PSF_SIG * b.PLTSCALE")
+            sqlLine.group("a."+filter+"sky",           "b.SKY / " + str(exptime))
+            sqlLine.group("a."+filter+"skyErr",        "b.SKY_SIGMA / " + str(exptime))
+            sqlLine.group("a."+filter+"infoFlag",      "b.FLAGS")
+            sqlLine.group("a."+filter+"infoFlag2",     "b.FLAGS2 | a."+filter+"infoFlag2")
+            sqlLine.group("a."+filter+"nFrames",       "b.N_FRAMES")
+
+            sql = sqlLine.makeEquals("WHERE a." + filter + "ippDetectID=b.IPP_IDET")
+
+            # index the (f)ippDetectIDs for the next steps?
+            # for filter in self.filters:
+            #     IDname = filter + "ippDetectID"
+            #     self.scratchDb.createIndex("StackObjectThin", IDname)
+
+            try:
+                self.scratchDb.execute(sql)
+            except:
+                self.logger.errorPair('failed sql: ', sql)
+                raise
+
+        self.tablesToExport.append("StackObjectThin")
+
+    '''
+    Populates the StackObjectRaw table
+    '''
+    def populateStackObjectRaw(self):
+
+        tablename = "StackObjectRaw"
+
+        self.logger.infoPair("Procesing table", tablename)
+        self.insertDvoIDs(tablename, "StackObjectThin")
+
+        # if we are going to add a key, do it here so it is useful
+        self.scratchDb.createIndex(tablename, "objID") 
+
+        self.logger.infoPair("inserting filter dependent cmf items into", tablename)
+        for filter in self.filters:
+            self.logger.infoPair("filter", filter)
+
+            stackID = self.stackIDs[filter]
+            self.logger.infoPair(filter + "stackID = ", stackID)
+
+            if stackID <= 0:  
+                self.logger.infoPair("no stack data for filter" , filter) 
+                continue
+
+            header = self.headerSet[filter]
+            exptime = self.getKeyFloat(header, "%.5f", "EXPTIME")
+
+            # insert all the detections
+            sqlLine = sqlUtility("UPDATE " + tablename + " AS a , " + filter + "SkyChip_psf AS b SET")
+
+            sqlLine.group("a."+filter+"haveData",      "'1'")
+
+            sqlLine.group("a."+filter+"xPos",          "b.X_PSF")
+            sqlLine.group("a."+filter+"yPos",          "b.Y_PSF")
+            sqlLine.group("a."+filter+"xPosErr",       "b.X_PSF_SIG")
+            sqlLine.group("a."+filter+"yPosErr",       "b.Y_PSF_SIG")
+            sqlLine.group("a."+filter+"psfMajorFWHM",  "b.PSF_FWHM_MAJ")
+            sqlLine.group("a."+filter+"psfMinorFWHM",  "b.PSF_FWHM_MIN")
+            sqlLine.group("a."+filter+"psfTheta",      "b.PSF_THETA")
+            sqlLine.group("a."+filter+"psfCore",       "b.PSF_CORE")
+            sqlLine.group("a."+filter+"psfLikelihood", "psfLikelihood(b.EXT_NSIGMA)")
+            sqlLine.group("a."+filter+"psfQf",         "b.PSF_QF")
+            sqlLine.group("a."+filter+"psfQfPerfect",  "b.PSF_QF_PERFECT")
+            sqlLine.group("a."+filter+"psfChiSq",      "b.PSF_CHISQ / b.PSF_NDOF")
+            sqlLine.group("a."+filter+"momentXX",      "b.MOMENTS_XX")
+            sqlLine.group("a."+filter+"momentXY",      "b.MOMENTS_XY")
+            sqlLine.group("a."+filter+"momentYY",      "b.MOMENTS_YY")
+            sqlLine.group("a."+filter+"momentR1",      "b.MOMENTS_R1")
+            sqlLine.group("a."+filter+"momentRH",      "b.MOMENTS_RH")
+            sqlLine.group("a."+filter+"PSFFlux",       "b.PSF_INST_FLUX / " + str(exptime))
+            sqlLine.group("a."+filter+"PSFFluxErr",    "b.PSF_INST_FLUX_SIG / " + str(exptime))
+            sqlLine.group("a."+filter+"ApFlux",        "b.AP_FLUX / " + str(exptime))
+            sqlLine.group("a."+filter+"ApFluxErr",     "b.AP_FLUX_SIG / " + str(exptime))
+            sqlLine.group("a."+filter+"KronFlux",      "b.KRON_FLUX / " + str(exptime))
+            sqlLine.group("a."+filter+"KronFluxErr",   "b.KRON_FLUX_ERR / " + str(exptime))
+            sqlLine.group("a."+filter+"ApFillFac",     "b.AP_NPIX / (3.14159265359 * POW(b.AP_MAG_RADIUS - 0.5, 2))")
+            sqlLine.group("a."+filter+"ApRadius",      "b.AP_MAG_RADIUS")
+            sqlLine.group("a."+filter+"KronRad",       "b.MOMENTS_R1 * 2.5")
+            sqlLine.group("a."+filter+"PlateScale",    "b.PLTSCALE")
+
+            sql = sqlLine.makeEquals("WHERE a." + filter + "ippDetectID = b.IPP_IDET")
+
+            try:
+                self.scratchDb.execute(sql)
+            except:
+                self.logger.errorPair('failed sql',sql)
+                return
+
+            # insert detection information for each filter based on the DVO contents
+            sqlLine = sqlUtility("UPDATE " + tablename + " AS a, " + self.scratchDb.dvoDetectionTable + " as b SET")
+            sqlLine.group("a."+filter+"expTime",       "b.expTime")
+            sqlLine.group("a."+filter+"zp",            "b.zp")
+
+            # where should these go?
+            # sqlLine.group("a."+filter+"airmass",       "b.airmass")
+
+            sql = sqlLine.makeEquals("WHERE a.objID = b.objID AND a." + filter + "ippDetectID = b.ippDetectID")
+
+            try:
+                self.scratchDb.execute(sql)
+            except:
+                self.logger.errorPair('failed sql',sql)
+                return
+
+
+        self.deleteRowsWithNoStackData(tablename)
+        self.tablesToExport.append(tablename)
+
+    '''
+    Populates the StackModelFitExtra table
+    '''
+    def populateStackModelFitExtra(self):
+
+        self.logger.infoPair("Procesing table", "StackModelFitExtra")
+        self.insertDvoIDs("StackModelFitExtra", "StackObjectThin")
+
+        # if we are going to add a key, do it here so it is useful
+        # self.scratchDb.createIndex(tablename, "objID") 
+
+        # currently, none of the fields defined by the table are generated
+        
+    '''
+    Populates the StackModelFitExp table
+    '''
+    def populateStackModelFit(self, model, ippModelType):
+
+        tablename = "StackModelFit" + model
+
+        if self.config.camera == "simtest":
+            self.logger.infoPair("Skipping table for simtest:", tablename)
+            return
+
+        self.logger.infoPair("Procesing table", tablename)
+        self.insertDvoIDs(tablename, "StackObjectThin")
+
+        # if we are going to add a key, do it here so it is useful
+        # self.scratchDb.createIndex(table, "objID") 
+
+        for filter in self.filters:
+            self.populateStackModelFitFilter(model, ippModelType, filter)
+
+        self.deleteRowsWithNoStackData(tablename)
+        self.tablesToExport.append(tablename)
+
+    '''
+    Updates parameters for a particular model in the StackModelFit table
+    '''
+    def populateStackModelFitFilter(self, model, ippModelType, filter):
+
+        tablename = "StackModelFit" + model
+
+        if self.stackIDs[filter] <= 0:
+            self.logger.infoPair("no stack data for filter" , filter) 
+            return True
+
+        header  = self.headerSet[filter]
+
+        # model calibrated magnitude = instrumental magnitude + 2.5*log10(exptime) + ZP (added below from dvoDetectionTable)
+        magtime = "%.5f" % (2.5*math.log10(float(header['EXPTIME'])))
+
+        sqlLine = sqlUtility("UPDATE " + tablename + " AS a, " + filter + "SkyChip_xfit AS b SET")
+
+        sqlLine.group("a."+filter+"haveData",              "'1'")
+
+        # model calibrated magnitude = instrumental magnitude + 2.5*log10(exptime) + ZP (added below from dvoDetectionTable)
+        sqlLine.group("a." + filter + model + "Mag",       "b.EXT_INST_MAG + " + magtime) # need to modify by zero point and 2.5*log10(exptime)
+        sqlLine.group("a." + filter + model + "MagErr",    "b.EXT_INST_MAG_SIG")
+                      
+        sqlLine.group("a." + filter + model + "Radius",    "b.EXT_WIDTH_MAJ")
+        sqlLine.group("a." + filter + model + "Ab",        "b.EXT_WIDTH_MIN/b.EXT_WIDTH_MAJ")
+        sqlLine.group("a." + filter + model + "Phi",       "DEGREES(b.EXT_THETA)")
+
+        sqlLine.group("a." + filter + model + "RadiusErr", "b.EXT_WIDTH_MAJ_ERR") # these are not correctly defined.
+        sqlLine.group("a." + filter + model + "AbErr",     "b.EXT_WIDTH_MIN_ERR") # these are not correctly defined.
+        sqlLine.group("a." + filter + model + "PhiErr",    "b.EXT_THETA_ERR") # these are not correctly defined.
+
+        sqlLine.group("a." + filter + model + "Chisq",     "b.EXT_CHISQ / b.EXT_NDOF")
+
+        # I have raExp = X_EXT
+
+        # This is tricky: RA_EXT is not defined for PS1_SV3 or PS1_V5, but X_EXT is
+        # XXX EAM 20140812: for PV3, update cmf output to define RA_EXT, DEC_EXT
+        sqlLine.group("a." + filter + model + "Ra",        "b.X_EXT")
+        sqlLine.group("a." + filter + model + "Dec",       "b.Y_EXT")
+        sqlLine.group("a." + filter + model + "RaErr",     "b.X_EXT_SIG") # need to modify by platescale
+        sqlLine.group("a." + filter + model + "DecErr",    "b.Y_EXT_SIG")
+
+        # sersic fit has an extra parameter
+        if (ippModelType == "PS_MODEL_SERSIC"):
+            sqlLine.group("a." + filter + model + "Nu",    "b.EXT_PAR_07")
+            sqlLine.group("a." + filter + model + "NuErr", "'0.1'") # this is not measured at the moment
+
+        # missing these two fields?
+        # sqlLine.group("a." + filter + model + "CF",         "b.XX")
+        # sqlLine.group("a." + filter + model + "Likelihood", "b.XX")
+
+        sql = sqlLine.makeEquals("WHERE a." + filter + "ippDetectID = b.IPP_IDET AND b.MODEL_TYPE = '" + ippModelType + "'")
+
+        try: self.scratchDb.execute(sql)
+        except:
+            self.logger.error("problem with SQL: " + sql)
+            raise
+
+        # insert detection information for each filter based on the
+        # DVO contents.  Since I already have extracted
+        # StackObjectRaw, this is probably faster using that table:
+        sqlLine = sqlUtility("UPDATE " + tablename + " AS a, " + self.scratchDb.dvoDetectionTable + " as b SET")
+        sqlLine.group("a." + filter + model + "Mag",       "a." + filter + model + "Mag + b.zp")
+        sql = sqlLine.makeEquals("WHERE a.objID = b.objID AND a." + filter + "ippDetectID = b.ippDetectID")
+
+        try:
+            self.scratchDb.execute(sql)
+        except:
+            self.logger.errorPair('failed sql',sql)
+            return
+
+        # we have (modulo signs):
+        # gRaExp  = gra  + (X_EXT - gxPos)*gPlateScale / cos(gdec)
+        # gDecExp = gdec + (Y_EXT - gyPos)*gPlateScale
+
+        rawS  = "c." + filter + "PlateScale"
+
+        extR  = "a." + filter + model + "Ra"
+        rawR  = "b." + filter + "ra"
+        rawX  = "c." + filter + "xPos"
+
+        extD  = "a." + filter + model + "Dec"
+        rawD  = "b." + filter + "dec"
+        rawY  = "c." + filter + "yPos"
+
+        # dRA / dX = -PlateScale
+        # b.+filter+ra  - (a.+filter+model+Ra - c.+filter+xPos)*c.+filter+PlateScale / cos(+filter+dec)
+        # extR = rawR - (extR - rawX)*rawS / 3600.0 / cos(rawD)
+
+        # dDEC / dY = +PlateScale
+        # b.+filter+dec + (a.+filter+model+Dec - c.+filter+xPos)*c.+filter+PlateScale / cos(+filter+dec)
+        # extD = rawD + (extD - rawY)*rawS / 3600.0
+
+        # insert detection information for each filter based on the DVO contents
+        sqlLine = sqlUtility("UPDATE " + tablename + " AS a, StackObjectThin as b, StackObjectRaw as c SET ")
+        sqlLine.group(extR, rawR + " - (" + extR + " - " + rawX + ")*" + rawS + " / 3600.0 / cos(radians(" + rawD + "))")
+        sqlLine.group(extD, rawD + " + (" + extD + " - " + rawY + ")*" + rawS + " / 3600.0")
+        field = "a." + filter + model + "RaErr"
+        sqlLine.group(field, field + "*" + rawS)
+        field = "a." + filter + model + "DecErr"
+        sqlLine.group(field, field + "*" + rawS)
+        sql = sqlLine.makeEquals("WHERE a.objID = b.objID AND a.objID = c.objID")
+
+        try:
+            self.scratchDb.execute(sql)
+        except:
+            self.logger.errorPair('failed sql',sql)
+            return
+
+    '''
+    Populates the StackPetrosian table, mainly from dictionary values found in IPP FITS header
+    '''
+    def populateStackPetrosian(self):
+
+        tablename = "StackPetrosian"
+
+        if self.config.camera == "simtest":
+            self.logger.infoPair("Skipping table for simtest:", tablename)
+            return
+
+        self.logger.infoPair("Procesing table", tablename)
+        self.insertDvoIDs(tablename, "StackObjectThin")
+
+        # if we are going to add a key, do it here so it is useful
+        # self.scratchDb.createIndex(tablename, "objID") 
+
+        for filter in self.filters:
+            self.populateStackPetrosianFilter(filter)
+
+        self.deleteRowsWithNoStackData(tablename)
+        self.tablesToExport.append(tablename)
+
+    '''
+    Populates the StackPetrosian table, mainly from dictionary values found in IPP FITS header
+    '''
+    def populateStackPetrosianFilter(self, filter):
+
+        tablename = "StackPetrosian"
+
+        if self.stackIDs[filter] <= 0:
+            self.logger.infoPair("no stack data for filter" , filter) 
+            return True
+
+        header  = self.headerSet[filter]
+
+        # PETRO_MAG is instrumental + 2.5log(exptime) + FPA.ZP
+        # we want to apply the DVO zero point, so remove FPA.ZP:
+
+        hdrZP   = "%.5f" % float(header['FPA.ZP'])
+        # magtime = "%.5f" % (2.5*math.log10(float(header['EXPTIME'])))
+
+        self.logger.infoPair("Adding", "petrosians for extended sources")
+        sqlLine = sqlUtility("UPDATE " + tablename + " AS a, " + filter + "SkyChip_xsrc AS b SET")
+
+        sqlLine.group("a."+filter+"haveData",         "'1'")
+
+        sqlLine.group("a." + filter + "petRadius",    "b.PETRO_RADIUS")
+        sqlLine.group("a." + filter + "petRadiusErr", "b.PETRO_RADIUS_ERR")
+        sqlLine.group("a." + filter + "petMag",       "b.PETRO_MAG - " + hdrZP)  
+        sqlLine.group("a." + filter + "petMagErr",    "1.0 / b.PETRO_MAG_ERR")  
+        sqlLine.group("a." + filter + "petR50",       "b.PETRO_RADIUS_50")
+        sqlLine.group("a." + filter + "petR50Err",    "b.PETRO_RADIUS_50_ERR")
+        sqlLine.group("a." + filter + "petR90",       "b.PETRO_RADIUS_90")
+        sqlLine.group("a." + filter + "petR90Err",    "b.PETRO_RADIUS_90_ERR")
+        sqlLine.group("a." + filter + "petCf",        "b.PETRO_FILL")
+
+        sql = sqlLine.makeEquals("WHERE a." + filter + "ippDetectID = b.IPP_IDET")
+
+        try: self.scratchDb.execute(sql)
+        except:
+            self.logger.error("problem with SQL: " + sql)
+            raise
+
+        # modify petMag to apply the zero point
+        sqlLine = sqlUtility("UPDATE " + tablename + " AS a, " + self.scratchDb.dvoDetectionTable + " as b SET")
+        sqlLine.group("a." + filter + "petMag",       "a." + filter + "petMag + b.zp")
+        sql = sqlLine.makeEquals("WHERE a.objID = b.objID AND a." + filter + "ippDetectID = b.ippDetectID")
+
+        try: self.scratchDb.execute(sql)
+        except:
+            self.logger.errorPair('failed sql',sql)
+            return
+
+    '''
+    Populates the StackApFlx table
+    '''
+    def populateStackApFlx(self):
+
+        tablename = "StackApFlx"
+
+        if self.config.camera == "simtest":
+            self.logger.infoPair("Skipping table for simtest:", tablename)
+            return
+
+        self.logger.infoPair("Procesing table", tablename)
+        self.insertDvoIDs(tablename, "StackObjectThin")
+
+        # if we are going to add a key, do it here so it is useful
+        self.scratchDb.createIndex(tablename, "objID") 
+
+        for filter in self.filters:
+            self.populateStackApFlxFilter(tablename, "", filter)
+            self.populateStackApFlxFilter(tablename, "C1", filter)
+            self.populateStackApFlxFilter(tablename, "C2", filter)
+
+        self.deleteRowsWithNoStackData(tablename)
+        self.tablesToExport.append(tablename)
+
+    '''
+    Populates the StackApFlxFull table
+    '''
+    def populateStackApFlxFull(self, version):
+
+        tablename = "StackApFlxFull" + version
+
+        if self.config.camera == "simtest":
+            self.logger.infoPair("Skipping table for simtest:", tablename)
+            return
+
+        self.logger.infoPair("Procesing table", tablename)
+        self.insertDvoIDs(tablename, "StackObjectThin")
+
+        # if we are going to add a key, do it here so it is useful
+        self.scratchDb.createIndex(tablename, "objID") 
+
+        for filter in self.filters:
+            self.populateStackApFlxFilter(tablename, version, filter)
+
+        self.deleteRowsWithNoStackData(tablename)
+        self.tablesToExport.append(tablename)
 
     '''
     Updates aperture fluxes for StackApFkx table
     '''
-    def updateModelFitFlxs(self, prefix, psfCondition, tablename, filter):
-        #properly -999 these to start with:
-        f = filter
-        if tablename == 'StackModelFit':
-            sql = "UPDATE " + tablename + " AS a, "+f+"SkyChip_xrad AS b SET \
-        "+f+prefix+"flxR1=-999, \
-        "+f+prefix+"flxR1Err=-999, \
-        "+f+prefix+"flxR1Std=-999, \
-        "+f+prefix+"flxR1Fill=-999, \
-        "+f+prefix+"flxR2=-999, \
-        "+f+prefix+"flxR2Err=-999, \
-        "+f+prefix+"flxR2Std=-999, \
-        "+f+prefix+"flxR2Fill=-999, \
-        "+f+prefix+"flxR3=-999, \
-        "+f+prefix+"flxR3Err=-999, \
-        "+f+prefix+"flxR3Std=-999, \
-        "+f+prefix+"flxR3Fill=-999, \
-        "+f+prefix+"flxR4=-999, \
-        "+f+prefix+"flxR4Err=-999, \
-        "+f+prefix+"flxR4Std=-999, \
-        "+f+prefix+"flxR4Fill=-999, \
-        "+f+prefix+"flxR5=-999, \
-        "+f+prefix+"flxR5Err=-999, \
-        "+f+prefix+"flxR5Std=-999, \
-        "+f+prefix+"flxR5Fill=-999, \
-        "+f+prefix+"flxR6=-999, \
-        "+f+prefix+"flxR6Err=-999, \
-        "+f+prefix+"flxR6Std=-999, \
-        "+f+prefix+"flxR6Fill=-999, \
-        "+f+prefix+"flxR7=-999, \
-        "+f+prefix+"flxR7Err=-999, \
-        "+f+prefix+"flxR7Std=-999, \
-        "+f+prefix+"flxR7Fill=-999, \
-        "+f+prefix+"flxR8=-999, \
-        "+f+prefix+"flxR8Err=-999, \
-        "+f+prefix+"flxR8Std=-999, \
-        "+f+prefix+"flxR8Fill=-999, \
-        "+f+prefix+"flxR9=-999, \
-        "+f+prefix+"flxR9Err=-999, \
-        "+f+prefix+"flxR9Std=-999, \
-        "+f+prefix+"flxR9Fill=-999, \
-        "+f+prefix+"flxR10=-999, \
-        "+f+prefix+"flxR10Err=-999, \
-        "+f+prefix+"flxR10Std=-999, \
-        "+f+prefix+"flxR10Fill=-999 \
-        WHERE a."+f+"ippDetectID=b.IPP_IDET "
-        #self.logger.infoPair("sql", sql)
-            self.scratchDb.execute(sql)
-
-
-        #we have variable numbers of these columns. find out which are in use
-        sql = "DESCRIBE "+f+"SkyChip_xrad 'aper_fill_%'"
+    def populateStackApFlxFilter(self, tablename, version, filter):
+
+        prefix = "none"
+
+        # order of the 3 convolutions is fixed (raw, C1, C2) = (1, 2, 3)
+        if version == "":   
+            psfCondition = "(b.table_index % 3 = 1)"
+            prefix = ""
+        if version == "C1": 
+            psfCondition = "(b.table_index % 3 = 2)"
+            prefix = "c1"
+        if version == "C2": 
+            psfCondition = "(b.table_index % 3 = 0)" 
+            prefix = "c2"
+
+        if prefix == "none":
+            self.logger.errorPair("invalid stack ap flux version", version)
+            raise
+
+        if self.stackIDs[filter] <= 0:
+            self.logger.infoPair("no stack data for filter" , filter) 
+            return True
+
+        minRadius = 1
+        maxRadius = 10
+        if tablename == 'StackApFlx':
+            minRadius = 3
+            maxRadius = 5
+
+        # properly -999 these to start with.  the default should take
+        # care of this, but does not
+
+        sqlLine = sqlUtility("UPDATE " + tablename + " SET")
+        for radius in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:
+            if radius < minRadius: continue
+            if radius > maxRadius: continue
+            sqlLine.group(filter + prefix + "flxR" + str(radius),          "-999")
+            sqlLine.group(filter + prefix + "flxR" + str(radius) + "Err",  "-999")
+            sqlLine.group(filter + prefix + "flxR" + str(radius) + "Std",  "-999")
+            sqlLine.group(filter + prefix + "flxR" + str(radius) + "Fill", "-999")
+
+        sql = sqlLine.makeEquals("")
+
+        try: self.scratchDb.execute(sql)
+        except:
+            self.logger.errorPair('failed sql',sql)
+            return
+
+        # set the flux values from the cmf file
+        cmfTable = filter + "SkyChip_xrad"
+
+        # we have variable numbers of these columns. find out which are in use
+        sql = "DESCRIBE " + cmfTable + " 'aper_fill_%'"
         rs = self.scratchDb.executeQuery(sql)
         rs.first()
@@ -367,840 +786,217 @@
         rs.close()
 
-        #use regex to leave just the numbers
-
+        # use regex to select the aperture number (APER_FILL_N)
         numbers = []
-        min = 1
-        max = 10
-        if tablename == 'StackApFlx':
-            min = 3
-            max = 5
         for column in columns: 
             number = re.sub("APER_FILL_","",column)
-            if (int(number) >= min and int(number) <=max):
+            if (int(number) >= minRadius and int(number) <= maxRadius):
                 numbers.append(number)
                 self.logger.infoPair("Aperture Numbers",number)
 
-        #generate the sql to do the necessary ops on the columns    
-        sql = "UPDATE " + tablename + " AS a, "+f+"SkyChip_xrad AS b SET "
-        cnt =0
-        exptime = self.safeDictionaryAccess(self.header, 'EXPTIME')
+        # get the exposure time for aperture fluxes
+        header = self.headerSet[filter]
+        exptime = self.getKeyFloat(header, "%.5f", "EXPTIME")
+
+        # generate the sql to do the necessary ops on the columns    
+        sqlLine = sqlUtility("UPDATE " + tablename + " AS a, " + cmfTable + " AS b SET ")
+
+        sqlLine.group("a."+filter+"haveData", "'1'")
+
         for number in numbers:
-            if (cnt>0):
-                sql=sql+" , "
-            sql=sql+f+prefix+"flxR"+number+"=b.APER_FLUX_"+number +" / " + str(exptime) + ", "
-            sql=sql+f+prefix+"flxR"+number+"Err=b.APER_FLUX_ERR_"+number +" / " + str(exptime) + ", "
-            sql=sql+f+prefix+"flxR"+number+"Std=b.APER_FLUX_STDEV_"+number +" / " + str(exptime) + ", "
-            sql=sql+f+prefix+"flxR"+number+"Fill=b.APER_FILL_"+number + " "
-            cnt=cnt+1
+            field = filter + prefix + "flxR" + number
+            sqlLine.group(field,          "b.APER_FLUX_"       + number + " / " + exptime)
+            sqlLine.group(field + "Err",  "b.APER_FLUX_ERR_"   + number + " / " + exptime)
+            sqlLine.group(field + "Std",  "b.APER_FLUX_STDEV_" + number + " / " + exptime)
+            sqlLine.group(field + "Fill", "b.APER_FILL_"       + number)
             
-        sql=sql+"WHERE a."+f+"ippDetectID=b.IPP_IDET AND  "+psfCondition   
-        self.logger.infoPair("sql",sql)
+        sql = sqlLine.makeEquals("WHERE a." + filter + "ippDetectID = b.IPP_IDET AND  " + psfCondition)
+
         self.scratchDb.execute(sql)
 
-
-    '''
-    Updates parameters for a particular model in the StackModelFit table
-    '''
-    def updateModelFit(self, model, ippModelType, filter, exptime):
-        f = filter
- 
- # idk what to do about PET
-
-        sql = "DESCRIBE "+f+"SkyChip_xfit 'EXT_COVAR_%'"
+        # instrumental flux, AB mags, Jy:
+        # flux_inst = cts / sec
+        # mag_AB = -2.5*log(flux_inst) + ZP [with appropriate definition of zero point]
+        # mag_AB = -2.5*log(flux_cgs) - 48.6 [by construction with ~Vega flux in V-band]
+        # flux_cgs = ten(-0.4*(mag_AB + 48.6))
+        # flux_cgs = ten(-0.4*((-2.5*log(flux_inst) + ZP) + 48.6))
+        # flux_cgs = flux_inst * ten(-0.4*(ZP + 48.6))
+        # flux_Jy  = flux_cgs * 10^23
+        # flux_Jy  = flux_inst * ten(-0.4*(ZP + 48.6) + 23.0)  [23.0 - 0.4*48.6 = 3.56]
+        # flux_Jy  = flux_inst * ten(-0.4*ZP + 3.56)
+        # flux_Jy  = flux_inst * ten(-0.4*ZP) * 3630.78
+
+        # modify flux to apply the zero point
+        sqlLine = sqlUtility("UPDATE " + tablename + " AS a, " + self.scratchDb.dvoDetectionTable + " as b SET")
+        for number in numbers:
+            field = filter + prefix + "flxR" + number
+            sqlLine.group(field,               field         + " * POW(10, 3.56 - 0.4* b.zp)")
+            sqlLine.group(field + "Err",       field + "err" + " * POW(10, 3.56 - 0.4* b.zp)")
+            sqlLine.group(field + "Std",       field + "Std" + " * POW(10, 3.56 - 0.4* b.zp)")
+        sql = sqlLine.makeEquals("WHERE a.objID = b.objID AND a." + filter + "ippDetectID = b.ippDetectID")
+        self.scratchDb.execute(sql)
+
+    '''
+    Populates the StackToImage table
+    '''
+    def populateStackToImage(self):
+
+        self.logger.infoPair("Procesing table", "StackToImage")
+
+        for filter in self.filters:
+            
+            stackmetaID = self.stackIDs[filter]
+            if stackmetaID > 0:
+    
+                imageIDs = self.gpc1Db.getImageIDsForThisStackID(stackmetaID)
+
+                for imageID in imageIDs:
+
+                    sql = "INSERT INTO StackToImage (stackMetaID, imageID) \
+                   VALUES (\
+                   " + str(stackmetaID) + ", " + imageID + ")"
+                    self.scratchDb.execute(sql)
+
+                    # now update StackMeta with correct number of inputs
+                    sql = "UPDATE "+filter+"StackMeta SET nP2Images = (SELECT COUNT(distinct(floor(imageID/100))) FROM StackToImage where stackMetaID = "+str(stackmetaID)+")"
+                    self.scratchDb.execute(sql)
+
+        self.tablesToExport.append("StackToImage")
+
+    ### *********************** Utility Functions ************************************
+
+    '''
+    Drop a table and report the drop
+    '''
+    def dropTableVerbose(self, table):
+        self.logger.infoPair("dropping table:",table)
+        self.scratchDb.dropTable(table)
+
+    '''
+    get stackTypeID corresponding to our stackType
+    '''
+    def getStackTypeID(self):
+
+        sql = "SELECT stackTypeID from StackType WHERE name = '" + self.stackType + "'"
         rs = self.scratchDb.executeQuery(sql)
-        rs.first()
-        hasResult = rs.next()
-
-
-
-        sql = "UPDATE StackModelFit AS a, " + f + "SkyChip_xfit AS b SET \
-        "+f+model+"Radius=b.EXT_WIDTH_MAJ,  \
-        "+f+model+"Flux=POW(10, -0.4 * b.EXT_INST_MAG) / " + str(exptime) + " ,  \
-        "+f+model+"FluxErr=ABS(b.EXT_INST_MAG_SIG) * POW(10, -0.4 * b.EXT_INST_MAG) / " + str(exptime) + " / 1.085736, \
-        "+f+model+"Ab=b.EXT_WIDTH_MAJ/b.EXT_WIDTH_MIN, \
-        "+f+model+"Phi=b.EXT_THETA  \
-          \
-        WHERE a."+f+"ippDetectID=b.IPP_IDET AND b.MODEL_TYPE = '"+ippModelType+"'"
-
-        print sql
+        if not rs.next():
+            self.logger.errorPair("cannot get stack type ID from database for", self.stackType)
+            raise
+        
+        ID = rs.getInt(1)
+        return ID
+
+    def deleteRowsWithNoStackData(self, tableName):
+
+        self.logger.infoPair("Deleting rows with no stack data from", tableName)
+        sql = "DELETE FROM " + tableName + " WHERE "
+
+        for i in range(len(self.filters)):
+            filter = self.filters[i]
+            sql += filter + "haveData is NULL"
+
+            if (i < len(self.filters) - 1):
+                sql += " AND "
+
+        self.logger.infoPair('sql',sql)    
         self.scratchDb.execute(sql)
 
-
-
-        # sersic fit has an extra parameter
-        if (ippModelType == "PS_MODEL_SERSIC"):
-            extra_sql = ""
-            if hasResult:
-                extra_sql = ","+f+"serNuErr=SQRT(EXT_COVAR_07_07)"
-            sql = "UPDATE StackModelFit AS a, "+ f+ "SkyChip_xfit AS b SET \
-            "+f+"serNu=b.EXT_PAR_07   \
-            "+extra_sql+" \
-            WHERE a."+f+"ippDetectID=b.IPP_IDET AND b.MODEL_TYPE = '"+ippModelType+"'"
-#           "+f+"serNuErr=SQRT(EXT_COVAR_07_07)  \
-            self.logger.infoPair("sql",sql)
-            self.scratchDb.execute(sql)
-
-
-    '''
-    Populates the StackMeta table, mainly from dictionary values found in IPP FITS header
-    '''
-    def populateStackMeta(self,filterName):
-
-        self.logger.infoPair("Procesing table", "StackMeta")
-
-        # this should work : set header into (grizy)header and run from there
-        if filterName == 'g.00000':
-            f = "g"
-            self.header = self.gheader
-            tablename = 'gStackMeta'
-            stackmetaid = self.gstackID
-        if filterName == 'r.00000':
-            f = "r"
-            tablename = 'rStackMeta'
-            self.header = self.rheader
-            stackmetaid = self.rstackID
-        if filterName == 'i.00000':
-            f = "i"
-            tablename = 'iStackMeta'
-            self.header = self.iheader
-            stackmetaid = self.istackID
-        if filterName == 'z.00000':
-            f = "z"
-            tablename = 'zStackMeta'
-            self.header = self.zheader
-            stackmetaid = self.zstackID
-        if filterName == 'y.00000':
-            f = "y"
-            tablename = 'yStackMeta'
-            self.header = self.yheader
-            stackmetaid = self.ystackID
-
-        self.fwhm_maj    = self.safeDictionaryAccess(self.header, 'FWHM_MAJ')
-        self.fwhm_maj_uq = self.safeDictionaryAccess(self.header, 'FW_MJ_UQ')
-        self.psfmodel    = self.safeDictionaryAccess(self.header, 'PSFMODEL')
-        if (self.fwhm_maj    == "NULL"): self.fwhm_maj    = -999
-        if (self.fwhm_maj_uq == "NULL"): self.fwhm_maj_uq = -999
-
-        # print "fwhm_maj    = ", self.fwhm_maj
-        # print "fwhm_maj_uq = ", self.fwhm_maj_uq
-        # print "psfmodel    = ", self.psfmodel
-
-        #make a table
-
-        filterid = self.scratchDb.getFilterID(f)
-        self.logger.infoPair("filterid is ",str(filterid))
-
-        sql = "CREATE TABLE " + tablename + " LIKE StackMeta"
+        for filter in self.filters:
+            column = filter + "haveData"
+            self.scratchDb.dropColumn(tableName, column)
+
+    '''
+    Applies indexes to the PSPS tables
+    '''
+    def alterPspsTables(self):
+
+        self.logger.debug("Altering PSPS tables (currently does nothing in stackbatch)")
+
+        return True
+
+    '''
+    Applies indexes to the IPP tables
+    '''
+    def indexIppTables(self):
+
+        for filter in self.filters:
+            if self.stackIDs[filter] <= 0:  
+                self.logger.infoPair("no files for filter" , filter) 
+                continue
+
+            self.logger.infoPair("Creating indexes on", "IPP tables")
+            self.scratchDb.createIndex(filter + "SkyChip_psf",  "IPP_IDET")
+            self.scratchDb.createIndex(filter + "SkyChip_xfit", "IPP_IDET")
+            self.scratchDb.createIndex(filter + "SkyChip_xrad", "IPP_IDET")
+            self.scratchDb.createIndex(filter + "SkyChip_xsrc", "IPP_IDET")
+
+        return True
+
+    '''
+    select objID (psps object ID) from dvo restricted to this set of imageIDs. also insert
+    ippObjID and several constants (for a skycell): surveyID, skyCellId, dataRelease
+    '''
+    def selectDvoObjIDs(self):
+
+        # we need a temporary column for each filter to identify empty rows
+        for filter in self.filters:
+            self.scratchDb.addColumn("StackObjectThin", filter + "haveData", "tinyint")
+
+        sqlLine = sqlUtility("INSERT INTO StackObjectThin (")
+        
+        sqlLine.group("objID",            "objID")
+        sqlLine.group("ippObjID",         "ippObjID")
+        sqlLine.group("surveyID",         "'" + str(self.surveyID) + "'")
+        sqlLine.group("tessID",           "'" + str(self.tessID) + "'")
+        sqlLine.group("projectionID",     "'" + str(self.projectionID) + "'")
+        sqlLine.group("skyCellID",        "'" + str(self.skycellID) + "'")
+        sqlLine.group("dataRelease",      "'" + str(self.skychunk.dataRelease) + "'")
+        sqlLine.group("randomStackObjID", "FLOOR(RAND()*9223372036854775807)")
+
+        whereClause = " WHERE ("
+        imageIDs = self.imageIDs.values()
+        for i in range(len(imageIDs)):
+            imageID = imageIDs[i]
+            self.logger.infoPair("selecting imageID", imageID)
+
+            whereClause += "(" + self.scratchDb.dvoDetectionTable + ".imageID = " + str(imageID) + ")"
+
+            if (i < len(imageIDs) - 1):
+                whereClause += " or "
+
+        whereClause += ")"
+
+        sql = sqlLine.makeRaw(") SELECT DISTINCT ", "FROM " + self.scratchDb.dvoDetectionTable + whereClause)
+
         try: self.scratchDb.execute(sql)
-        except: pass
-
-        sql = "INSERT INTO " + tablename + " (\
-        stackMetaID \
-        ,filterID \
-        ,skyCellID \
-        ,photoCalID \
-        ,photoZero \
-        ,expTime \
-        ,psfModelID \
-        ,psfFwhm_mean \
-        ,psfFwhm_max \
-        ,ctype1 \
-        ,ctype2 \
-        ,crval1 \
-        ,crval2 \
-        ,crpix1 \
-        ,crpix2 \
-        ,cdelt1 \
-        ,cdelt2 \
-        ,pc001001 \
-        ,pc001002 \
-        ,pc002001 \
-        ,pc002002 \
-         ) VALUES ( \
-        " + str(stackmetaid) + " \
-        , " + str(filterid) + "  \
-        ," + self.skycell + " \
-        ," + str(self.scratchDb.getPhotoCalID(self.header['IMAGEID'])) + " \
-        ," + self.header['FPA.ZP'] + " \
-        ," + self.header['EXPTIME'] + " \
-        ,'" + self.psfmodel   + "' \
-        ," + str(self.fwhm_maj)    + " \
-        ," + str(self.fwhm_maj_uq) + " \
-        ,'" + self.header['CTYPE1'] + "' \
-        ,'" + self.header['CTYPE2'] + "' \
-        ," + self.header['CRVAL1'] + " \
-        ," + self.header['CRVAL2'] + " \
-        ," + self.header['CRPIX1'] + " \
-        ," + self.header['CRPIX2'] + " \
-        ," + self.header['CDELT1'] + " \
-        ," + self.header['CDELT2'] + " \
-        ," + self.header['PC001001'] + " \
-        ," + self.header['PC001002'] + " \
-        ," + self.header['PC002001'] + " \
-        ," + self.header['PC002002'] + " \
-        )"
-        self.scratchDb.execute(sql)
-
-
-        self.scratchDb.updateAllRows(tablename, "batchID", str(self.batchID))
-        self.scratchDb.updateAllRows(tablename, "surveyID", str(self.surveyID))
-    #    self.scratchDb.updateFilterID(tablename, self.scratchDb.getFilterID(filterName))
-        self.scratchDb.updateAllRows(tablename, "dataRelease", str(self.skychunk.dataRelease))
-        self.updateStackTypeID(tablename)
-
-    '''
-    Populates the StackObject table
-    '''
-    def populateStackObject(self):
-
-        self.logger.infoPair("Procesing table", "StackObject")
-        
-        self.logger.infoPair("inserting non-filter dependent items into", "StackObject")
-
-        #this is dvo crap
-        #sql = "INSERT INTO StackObject(\
-        #      objID, \
-        #      gcobjID, \
-        #      ippObjID, \
-        #      surveyID, \
-        #      skyCellID, \
-        #      randomStackObjID, \
-        #      stackDetectRowID, \
-        #      dvoRegionID, \
-        #      dataRelease) SELECT \
-        #      -999,
-        #      -999,
-        #      -999,
-        #      ,
-              
-        
-        
-
-        self.logger.infoPair("inserting filter dependent cmf items into", "StackObject")
-        filters =['g','r','i','z','y']
-        for f in filters:
-          skip = 0
-          if (f == "g"):
-              self.logger.infoPair("gstackID = ",self.gstackID)
-              if self.gstackID > 0:  
-                  stackid = self.gstackID
-                  exptime = self.gheader['EXPTIME']
-              else:
-                  skip = 1
-          if (f == "r"):
-              self.logger.infoPair("rstackID = ",self.rstackID)
-              if self.rstackID > 0:
-                  stackid = self.rstackID
-                  exptime = self.rheader['EXPTIME']
-              else:
-                  skip = 1
-          if (f == "i"):
-              self.logger.infoPair("istackID = ",self.istackID)
-              if self.istackID > 0:
-                  stackid = self.istackID
-                  exptime = self.iheader['EXPTIME']
-              else:
-                  skip = 1
-          if (f == "z"):
-              self.logger.infoPair("zstackID = ",self.zstackID)
-              if self.zstackID > 0:
-                  stackid = self.zstackID
-                  exptime = self.zheader['EXPTIME']
-              else:
-                  skip = 1
-          if (f == "y"):
-              self.logger.infoPair("ystackID = ",self.ystackID)
-              if self.ystackID > 0:
-                  stackid = self.ystackID
-                  exptime = self.yheader['EXPTIME']
-              else:
-                  skip = 1
-
-          if skip == 1:
-              self.logger.infoPair("nothing for filter" , f) 
-          else:
-             self.logger.infoPair("filter",f)
-
-
-
-             # insert all the detections
-             sql = "UPDATE StackObject as a , " + f + "SkyChip_psf as b set \
-                   a."+f+"xPos = b.X_PSF \
-                   ,a."+f+"yPos = b.Y_PSF \
-                   ,a."+f+"xPosErr = b.X_PSF_SIG \
-                   ,a."+f+"yPosErr = b.Y_PSF_SIG \
-                   ,a."+f+"PSFFlux = b.PSF_INST_FLUX / " + str(exptime) + " \
-                   ,a."+f+"PSFFluxErr = b.PSF_INST_FLUX_SIG / " + str(exptime) + " \
-                   ,a."+f+"sky = b.SKY / " + str(exptime) + " \
-                   ,a."+f+"skyErr = b.SKY_SIGMA / " + str(exptime) + " \
-                   ,a."+f+"psfMajorFWHM = b.PSF_MAJOR \
-                   ,a."+f+"psfMinorFWHM = b.PSF_MINOR \
-                   ,a."+f+"psfTheta = b.PSF_THETA \
-                   ,a."+f+"psfCore = NULL \
-                   ,a."+f+"psfLikelihood = psfLikelihood(b.EXT_NSIGMA) \
-                   ,a."+f+"infoFlag = b.FLAGS2 << 32 | FLAGS \
-                   ,a."+f+"psfQf = b.PSF_QF \
-                   ,a."+f+"psfQfPerfect = b.PSF_QF_PERFECT \
-                   ,a."+f+"psfChiSq = b.PSF_CHISQ / b.PSF_NDOF \
-                   ,a."+f+"momentXX = b.MOMENTS_XX \
-                   ,a."+f+"momentXY = b.MOMENTS_XY \
-                   ,a."+f+"momentYY = b.MOMENTS_YY \
-                   ,a."+f+"momentR1 = b.MOMENTS_R1 \
-                   ,a."+f+"momentRH = b.MOMENTS_RH \
-                   ,a."+f+"ApFlux = POW(10.0, -0.4*b.AP_MAG) / " + str(exptime) + " \
-                   ,a."+f+"ApFluxErr = NULL \
-                   ,a."+f+"ApFillFac = NULL \
-                   ,a."+f+"KronFlux = b.KRON_FLUX / " + str(exptime) + " \
-                   ,a."+f+"KronFluxErr = b.KRON_FLUX_ERR / " + str(exptime) + " \
-                   ,a."+f+"KronRad = b.MOMENTS_R1 * 2.5 \
-                   ,a."+f+"PSFMag = b.PSF_INST_MAG    \
-                   ,a."+f+"PSFMagErr = b.PSF_INST_MAG_SIG    \
-                   ,a."+f+"ApMag = b.AP_MAG    \
-                   ,a."+f+"ApMagErr = NULL    \
-                   ,a."+f+"KronMag = NULL    \
-                   ,a."+f+"KronMagErr = NULL    \
-                   ,a."+f+"nFrames = b. N_FRAMES \
-                   WHERE a." + f + "ippDetectID=b.IPP_IDET "
-             self.logger.infoPair('sql', sql)     
-             try:
-                 self.scratchDb.execute(sql)
-             except:
-                 self.logger.errorPair('failed sql',sql)
-                 return
-             #it is possible to drop some detections from dvo (that are present in the cmf). when that happens we get a 0 for objid
-        #we drop those...
-
-        self.logger.infoPair("Deleting", "entries with StackObject.objID = 0")
-        sql="DELETE FROM StackObject where objID = 0"
-        try:
-            self.scratchDb.execute(sql)
         except:
             self.logger.errorPair('failed sql',sql)
             return
+
+    '''
+    Insert objid (from dvo) into table from main table
+    '''
+    def insertDvoIDs(self, table, mainTable):
+
+        # we need a temporary column for each filter to identify empty rows
+        for filter in self.filters:
+            self.scratchDb.addColumn(table, filter + "haveData", "tinyint")
+
+        fields = "objID, ippObjID, randomStackObjID, primaryDetection, bestDetection, "
+
+        for i in range(len(self.filters)):
+            filter = self.filters[i]
+            fields += filter + "ippDetectID, "
+            fields += filter + "stackDetectID, "
+            fields += filter + "stackMetaID" # careful here: do not add comma to last entry
+            if (i < len(self.filters) - 1):
+                fields += ", "
         
-        try:
-            self.scratchDb.updateAllRows("StackObject", "surveyID", str(self.surveyID))
+        sql  = "INSERT INTO " + table + " (" + fields + ") "
+        sql += "SELECT " + fields + " FROM " + mainTable
+
+        try: self.scratchDb.execute(sql)
         except:
-            self.logger.errorPair('failed update surveyID on','StackObject')
-            raise
-#        self.scratchDb.updateFilterID("StackObject", f+".00000")
-        
-        self.scratchDb.updateAllRows("StackObject", "dataRelease", str(self.skychunk.dataRelease))
-        try:
-            self.updateStackMetaID("StackObject")
-        except:
-            self.logger.errorPair("failed update stack meta id on ", "StackObject")
-            raise
-        ##self.updateStackTypeID("StackObject")
-        
-        #self.updateDvoIDsAndFlags("StackObject")
-        #this now updates primary F as well
-        # response = raw_input("updated dvo ")
-        
-        # XXX EAM : note that in mysql versions later than 5.1, this fails
-        # unless the following is called first: 
-        # set session old_alter_table=1
-        # follow the command with 
-        # set session old_alter_table=0
-        # OF COURSE, this fails for mysql version < 5.5...
-        if self.scratchDb.version > 5.1:
-            self.scratchDb.execute("set session old_alter_table=1")
-
-        sql = "ALTER IGNORE TABLE StackObject ADD PRIMARY KEY (objID)"
-        
-        if self.scratchDb.version > 5.1:
-            self.scratchDb.execute("set session old_alter_table=0")
-
-        self.scratchDb.execute(sql)
-        # response = raw_input("add primary key? ")
-  
-        ### XXX this should not be a DEEP_STACK only case...
-        if False and self.stackType == "DEEP_STACK": 
-            ## need to do for all filters?
-            #if deep stack and instFlux = null and err not null
-            sql = "UPDATE StackObject AS a, SkyChip_psf AS b \
-                   SET psfFlux = 2*b.PSF_INST_FLUX_SIG / " + str(self.expTime) + " \
-                   WHERE psfFlux IS NULL \
-                   AND a.ippDetectID = b.IPP_IDET  \
-                   AND b.PSF_INST_FLUX_SIG IS NOT NULL"
-            
-            self.scratchDb.execute(sql)
-            # response = raw_input("add psf flux ")
-         
-        #filter dependent
-        # NOTE : Flux limits : in the current PSPS schema, negative fluxes 
-        # cause problems for sql queries which work in mags as SQL cannot do
-        # something like (f < 0.0) ? -999 : -2.5*log10(f)
-        # as a result, the negative fluxes here result in floating point errors
-        sql = "UPDATE StackObject SET gPSFFlux = 1e20 WHERE gPSFFlux <= 0.0"
-        self.scratchDb.execute(sql)
-        
-        sql = "UPDATE StackObject SET gApFlux = 1e20 WHERE gApFlux <= 0.0"
-        self.scratchDb.execute(sql)
-
-        sql = "UPDATE StackObject SET gKronFlux = 1e20 WHERE gKronFlux <= 0.0"
-        self.scratchDb.execute(sql)
-        sql = "UPDATE StackObject SET rPSFFlux = 1e20 WHERE rPSFFlux <= 0.0"
-        self.scratchDb.execute(sql)
-        
-        sql = "UPDATE StackObject SET rApFlux = 1e20 WHERE rApFlux <= 0.0"
-        self.scratchDb.execute(sql)
-
-        sql = "UPDATE StackObject SET rKronFlux = 1e20 WHERE rKronFlux <= 0.0"
-        self.scratchDb.execute(sql)
-        sql = "UPDATE StackObject SET iPSFFlux = 1e20 WHERE iPSFFlux <= 0.0"
-        self.scratchDb.execute(sql)
-        
-        sql = "UPDATE StackObject SET iApFlux = 1e20 WHERE iApFlux <= 0.0"
-        self.scratchDb.execute(sql)
-
-        sql = "UPDATE StackObject SET iKronFlux = 1e20 WHERE iKronFlux <= 0.0"
-        self.scratchDb.execute(sql)
-        sql = "UPDATE StackObject SET zPSFFlux = 1e20 WHERE zPSFFlux <= 0.0"
-        self.scratchDb.execute(sql)
-        
-        sql = "UPDATE StackObject SET zApFlux = 1e20 WHERE zApFlux <= 0.0"
-        self.scratchDb.execute(sql)
-
-        sql = "UPDATE StackObject SET zKronFlux = 1e20 WHERE zKronFlux <= 0.0"
-        self.scratchDb.execute(sql)
-        sql = "UPDATE StackObject SET yPSFFlux = 1e20 WHERE yPSFFlux <= 0.0"
-        self.scratchDb.execute(sql)
-        
-        sql = "UPDATE StackObject SET yApFlux = 1e20 WHERE yApFlux <= 0.0"
-        self.scratchDb.execute(sql)
-
-        sql = "UPDATE StackObject SET yKronFlux = 1e20 WHERE yKronFlux <= 0.0"
-        self.scratchDb.execute(sql)
-
-        #leave null instflux in
-        #self.scratchDb.reportAndDeleteRowsWithNULLS("StackObject", "instFlux")
-        
-        self.scratchDb.reportAndDeleteRowsWithNULLS("StackObject", "objID")
-        # response = raw_input("delete nulls ")
-        
-        sql="DELETE FROM StackObject where objID = 0"
-        
-        self.scratchDb.execute(sql)
-        self.logger.infoPair("Deleting", "entries with StackObject.objID = 0")
-        # response = raw_input("deleted objID is 0 ")
-    '''
-    Populates the SkinnyObject table
-    '''
-    def populateSkinnyObject(self):
-
-        self.logger.infoPair("Procesing table", "SkinnyObject")
-
-        sql = "INSERT INTO SkinnyObject (\
-               objID \
-               ,ippObjID \
-               ,projectionCellID \
-               ) \
-               SELECT \
-               DISTINCT objID \
-               ,ippObjID \
-               ,projectionCellID \
-               FROM StackDetection"
-        self.scratchDb.execute(sql)
-
-        self.scratchDb.updateAllRows("SkinnyObject", "surveyID", str(self.surveyID))
-        self.scratchDb.updateAllRows("SkinnyObject", "dataRelease", str(self.skychunk.dataRelease))
-         
-
-    '''
-    Populates the StackApFlx table
-    '''
-    def populateStackApFlx(self):
-        filter = ['g','r','i','z','y']
-
-        for f in filter:
-            skip = 0 
-            if (f == 'g'):
-                if self.gstackID > 0:
-                    self.header = self.gheader
-                else:
-                    skip = 1
-            if (f == 'r'):
-                if self.rstackID > 0:
-                    self.header = self.rheader
-                else:
-                    skip = 1
-            if (f == 'i'):
-                if self.istackID > 0:
-                    self.header = self.iheader
-                else:
-                    skip = 1
-            if (f == 'z'):
-                if self.zstackID > 0:
-                    self.header = self.zheader
-                else:
-                    skip = 1
-            if (f == 'y'):
-                if self.ystackID > 0:
-                    self.header = self.yheader
-                else:
-                    skip =1 
-
-            if skip == 0:
-                self.logger.infoPair("Adding fluxes", "un-convolved")
-                self.updateModelFitFlxs("", "((b.table_index -1) % 3 = 0)", "StackApFlx", f)
-                self.logger.infoPair("Adding fluxes", "1st convolved")
-                self.updateModelFitFlxs("c1", "((b.table_index -1) % 3 = 1)","StackApFlx",f)
-                self.logger.infoPair("Adding fluxes", "2nd convolved")
-                self.updateModelFitFlxs("c2", "((b.table_index -1) % 3 = 2)","StackApFlx",f)
-
-                self.deleteDetectionsNotInStackObject("StackApFlx",f)
-
-        self.scratchDb.reportAndDeleteRowsWithNULLS("StackApFlx", "objID")
-       
-
-
-    '''
-    Populates the StackModelFit table
-    '''
-    def populateStackModelFit(self, filter):
-        # for each filter
-        f =filter
-        if (filter == 'g'):
-            self.header = self.gheader
-            
-        if (filter == 'r'):
-            self.header = self.rheader
-        if (filter == 'i'):
-            self.header = self.iheader
-        if (filter == 'z'):
-            self.header = self.zheader
-        if (filter == 'y'):
-            self.header = self.yheader
-            
-
-
-
-
-        self.logger.infoPair("getting","imageID")
-        imageID = self.scratchDb.getImageIDFromExternID(self.header['IMAGEID'])
-        self.logger.infoPair("obtained","imageID")
-        self.logger.infoPair("Procesing table", "StackModelFit")
-
-
-        # insert all the detections
-
-        # populate model parameters
-        self.logger.infoPair("Adding model fit", "deVaucouleurs")
-        self.updateModelFit("deV", "PS_MODEL_DEV", filter, self.header['EXPTIME'])
-        self.logger.infoPair("Adding model fit", "exponential")
-        self.updateModelFit("deV", "PS_MODEL_EXP", filter, self.header['EXPTIME'])
-        self.logger.infoPair("Adding model fit", "sersic")
-        self.updateModelFit("deV", "PS_MODEL_SERSIC", filter, self.header['EXPTIME'])
- 
-
-        self.logger.infoPair("Adding fluxes", "un-convolved")
-        self.updateModelFitFlxs("", "((b.table_index -1) % 3 = 0)","StackModelFit",f)
-        self.logger.infoPair("Adding fluxes", "1st convolved")
-        self.updateModelFitFlxs("c1", "((b.table_index -1) % 3 = 1)","StackModelFit",f)
-        self.logger.infoPair("Adding fluxes", "2nd convolved")
-        self.updateModelFitFlxs("c2", "((b.table_index -1) % 3 = 2)","StackModelFit",f)
-
- 
-        self.logger.infoPair("Adding", "petrosians for extended sources")
-        sql = "UPDATE StackModelFit as a, "+f+"SkyChip_xsrc AS b SET \
-        "+f+"petRadius=b.PETRO_RADIUS \
-        ,"+f+"petRadiusErr=b.PETRO_RADIUS_ERR \
-        ,"+f+"petFlux=POW(10.0, -0.4 * b.PETRO_MAG) /" + str(self.header['EXPTIME']) + " \
-        ,"+f+"petFluxErr=-999  \
-        ,"+f+"petR50=b.PETRO_RADIUS_50 \
-        ,"+f+"petR50Err=b.PETRO_RADIUS_50_ERR \
-        ,"+f+"petR90=b.PETRO_RADIUS_90 \
-        ,"+f+"petR90Err=b.PETRO_RADIUS_90_ERR \
-        ,"+f+"petCf=b.PETRO_FILL \
-        WHERE a."+f+"ippDetectID=b.IPP_IDET"
-        self.scratchDb.execute(sql)
-
-        self.logger.infoPair("Adding", "petFluxErr for non nulls")
-        sql = "UPDATE StackModelFit as a, "+f+"SkyChip_xsrc AS b SET \
-        "+f+"petFluxErr=ABS(b.PETRO_MAG_ERR) * POW(10.0, (-0.4*b.PETRO_MAG)) / " + str(self.header['EXPTIME']) + " / 1.085736  \
-        WHERE a."+f+"ippDetectID=b.IPP_IDET \
-        AND (b.PETRO_MAG_ERR is not NULL AND b.PETRO_MAG is not NULL AND PETRO_MAG_ERR < 1000.0)"
-        # added this because when the petromagerr is crazy large (10^29 it out of ranges the flux err calc)
-        self.logger.infoPair("sql", sql)
-        self.scratchDb.execute(sql)
-
-
-
-        self.scratchDb.updateAllRows("StackModelFit", "surveyID", str(self.surveyID))
-        self.scratchDb.updateAllRows("StackModelFit", "dataRelease", str(self.skychunk.dataRelease))
-
-        self.logger.infoPair("not adding"," PrimaryF to stackApFlx")
-        sql = "UPDATE StackModelFit AS a, " + self.scratchDb.dvoDetectionTable + " AS b SET \
-               a.primaryF = ((b.flags & 0x10000) >> 16 ) \
-               WHERE a.ippDetectID = b.ippDetectID \
-               AND b.imageID = " + str(imageID)
-
-#        try:
-#            self.scratchDb.execute(sql)
-#        except:
-#            return
-
-##        self.scratchDb.updateAllRows("StackModelFit", "activeFlag", "0")
-        ##self.updateStackMetaID("StackModelFit")
-##        self.updateStackTypeID("StackModelFit")
-        
-        self.scratchDb.reportAndDeleteRowsWithNULLS("StackModelFit", "objID")
-        self.deleteDetectionsNotInStackObject("StackModelFit", f)
-
-    '''
-    Reports and deletes detections in this table that are not in StackObject
-    '''
-    def deleteDetectionsNotInStackObject(self, table, filter):
-        f= filter
-
-        sql = "SELECT COUNT(*) FROM " + table + " WHERE "+f+"ippDetectID NOT IN (SELECT "+f+"ippDetectID FROM StackObject)"
-        rs = self.scratchDb.executeQuery(sql)
-        rs.first()
-        nMissing = rs.getInt(1)
-  
-        if nMissing < 1: return
-        
-        sql = "DELETE FROM " + table + " WHERE "+f+"ippDetectID NOT IN (SELECT "+f+"ippDetectID FROM StackObject)"
-        self.scratchDb.execute(sql)
-        self.logger.infoPair("Detections not in StackObject", "%d deleted from %s" % (nMissing, table))
-       
-
-    '''
-    Populates the StackToImage table
-    '''
-    def populateStackToImage(self):
-
-        self.logger.infoPair("Procesing table", "StackToImage")
-        filters = ['g','r','i','z','y']
-        for f in filters:
-            
-            if f == 'g':
-                stackmetaid = self.gstackID
-            if f == 'r':
-                stackmetaid = self.rstackID
-            if f == 'i':
-                stackmetaid = self.istackID
-            if f == 'z':
-                stackmetaid = self.zstackID
-            if f == 'y':
-                stackmetaid = self.ystackID
-            if stackmetaid > 0:
-    
-                imageIDs = self.gpc1Db.getImageIDsForThisStackID(stackmetaid)
-
-                for imageID in imageIDs:
-                    sql = "INSERT INTO StackToImage (stackMetaID, imageID) \
-                   VALUES (\
-                   " + str(stackmetaid) + ", " + imageID + ")"
-                    self.scratchDb.execute(sql)
-
-        # now update StackMeta with correct number of inputs
-                    sql = "UPDATE "+f+"StackMeta SET nP2Images = (SELECT COUNT(distinct(floor(imageID/100))) FROM StackToImage where stackMetaID = "+str(stackmetaid)+")"
-                    self.scratchDb.execute(sql)
-
-    ''' 
-    Generates the randomStackIds
-    '''
-    def populateRandomsAndSkyCellID(self):
-
-        self.logger.infoPair("Generating Randoms","for StackObject")
-        sql = "update StackObject set randomStackObjID = FLOOR(RAND()*9223372036854775807) \
-              ,skyCellID = " + str(self.skycell)+ " \
-              ,surveyID = " + str(self.surveyID) 
-        try:
-            self.scratchDb.execute(sql)
-        except:
-            self.logger.infoPair("failed sql", sql)
-
-    ''' 
-    copies randomStackIds from StackObject to tableName
-    '''
-    def copyRandomsAndSkyCellIDFromStackObject(self, tableName):
-
-        self.logger.infoPair("copying Randoms from StackObject to ", tableName)
-        sql = "update " + tableName + " join StackObject using (objID) \
-        set " + tableName + ".randomStackObjID = StackObject.randomStackObjID \
-        , " + tableName + ".skyCellID = StackObject.skyCellID \
-        , " + tableName + ".surveyID = StackObject.surveyID"
-        self.logger.infoPair("sql", sql)
-        try:
-            self.scratchDb.execute(sql)
-        except:
-            self.logger.infoPair("failed sql", sql)
-
-
-        
-    def populateStackIPPDetectIDFromDvo(self, tableName, all):
-
-        #tableName = "StackObject"
-        self.logger.infoPair("Processing table", tableName)
-
-        filters = ['g','r','i','z','y']
-        
-        for f in filters:
-            skip = 0
-            #first: do we skip this filter
-            if f == 'g':
-                if self.gstackID < 0:
-                    skip = 1
-                else:
-                    self.header=self.gheader
-                    stackmetaid = self.gstackID
-            elif f == 'r':
-                if self.rstackID < 0:
-                    skip = 1
-                else:
-                    self.header = self.rheader
-                    stackmetaid = self.rstackID
-            elif f == 'i':
-                if self.istackID < 0:
-                    skip = 1
-                else:
-                    self.header = self.iheader
-                    stackmetaid = self.istackID
-            elif f == 'z':
-                if self.zstackID < 0:
-                    skip = 1
-                else:
-                    self.header = self.zheader
-                    stackmetaid = self.zstackID
-            elif f == 'y':
-                if self.ystackID < 0:
-                    skip = 1
-                else:
-                    self.header = self.yheader
-                    stackmetaid = self.ystackID
-            if skip == 0:        
-                imageID = self.scratchDb.getImageIDFromExternID(self.header['IMAGEID'])
-                self.logger.infoPair("obtained","imageID")
-                addsql = ""
-                if (all == 1):
-                    addsql = "a." + f + "ra = b.ra, \
-                      a." + f + "dec = b.dec_, \
-                      a." + f + "raErr = b.raErr, \
-                      a." + f + "decErr = b.decErr, \
-                      a." + f + "zp = b.zp, \
-                      a." + f + "expTime = b.expTime,"
-
-                    
-                sql = "UPDATE " + tableName + " AS a, "  + self.scratchDb.dvoDetectionTable + " AS b \
-                      SET a." + f + "ippDetectID = b.ippDetectID, \
-                      " + addsql + " \
-                      a." + f + "stackDetectID = b.detectID,   \
-                      a." + f + "ippObjID = b.ippObjID, \
-                      a." + f + "stackMetaID = " + str(stackmetaid) +  " \
-                      WHERE a.objID = b.objID  AND b.imageID = " + str(imageID)
-                self.logger.infoPair('sql',sql)    
-                self.scratchDb.execute(sql)
-            else:
-                self.logger.infoPair("skipping ingest of dvo for filter",f)
-        #out of the loops - give dataRelase to all        
-        self.scratchDb.updateAllRows(tableName, "dataRelease", str(self.skychunk.dataRelease))
-
-
-    def deleteNULLippDetectIDs(self, tableName):
-
-        self.logger.infoPair("Deleting NULL ippdetectIDs from table", tableName)
-        sql = "DELETE FROM " + tableName + " WHERE \
-              gippDetectID is NULL AND \
-              rippDetectID is NULL AND \
-              iippDetectID is NULL AND \
-              zippDetectID is NULL AND \
-              yippDetectID is NULL "
-        self.logger.infoPair('sql',sql)    
-        self.scratchDb.execute(sql)
-
-    '''
-    Applies indexes to the PSPS tables
-    '''
-    def alterPspsTables(self):
-
-        self.logger.debug("Altering PSPS tables")
-        # heather uncommented the unique line -- well that no worky
-        #self.scratchDb.makeColumnUnique("StackObject", "objID")
-        self.scratchDb.createIndex("StackObject", "ippDetectID")
-        self.scratchDb.createIndex("StackObject", "stackDetectID")
-        self.scratchDb.createIndex("StackApFlx", "ippDetectID")
-        self.scratchDb.createIndex("StackModelFit", "ippDetectID")
-
-        return True
-
-    '''
-    Applies indexes to the IPP tables
-    '''
-    def indexIppTables(self):
-
-        self.logger.infoPair("Creating indexes on", "IPP tables")
-        self.scratchDb.createIndex("SkyChip_psf", "IPP_IDET")
-        self.scratchDb.createIndex("SkyChip_xfit", "IPP_IDET")
-        self.scratchDb.createIndex("SkyChip_xrad", "IPP_IDET")
-        self.scratchDb.createIndex("SkyChip_xsrc", "IPP_IDET")
-
-        return True
-    '''
-    Insert objid (from dvo) into table
-    '''
-    def insertDvoIDs(self, table, filterName):
-        self.logger.infoPair("getting imageID for ","filter")
-        if (filterName == 'g.00000'):
-            self.header=self.gheader
-        if (filterName == 'r.00000'):
-            self.header=self.rheader
-        if (filterName == 'i.00000'):
-            self.header=self.iheader
-        if (filterName == 'z.00000'):
-            self.header=self.zheader
-        if (filterName == 'y.00000'):
-            self.header=self.yheader
-
-        imageID = self.scratchDb.getImageIDFromExternID(self.header['IMAGEID'])
-        self.logger.infoPair("obtained","imageID")
-        self.logger.debug("Updating table '" + table + "' with DVO IDs...")
-        sql = "INSERT IGNORE INTO " + table + " ( \
-               objID ) \
-               SELECT (objID) FROM " + self.scratchDb.dvoDetectionTable + "  \
-               WHERE " + self.scratchDb.dvoDetectionTable + ".imageID = " + str(imageID)
-        self.logger.infoPair("sql",sql)
-        self.scratchDb.execute(sql)
-    
-
-
-    '''
-    Updates provided table with DVO IDs from DVO table
-    '''
-    def updateDvoIDs(self, table, filterName):
-        self.logger.infoPair("getting imageID for ","filter")
-        imageID = self.scratchDb.getImageIDFromExternID(self.header['IMAGEID'])
-        self.logger.infoPair("obtained","imageID")
-        self.logger.debug("Updating table '" + table + "' with DVO IDs...")
-        sql = "UPDATE " + table + " AS a, " + self.scratchDb.dvoDetectionTable + " AS b SET \
-               a.ippObjID = b.ippObjID, \
-               a.stackDetectID = b.detectID, \
-               a.objID = b.objID \
-               WHERE a.ippDetectID = b.ippDetectID \
-               AND b.imageID = " + str(imageID)
-        self.scratchDb.execute(sql)
-    
-    '''
-    Updates Flags
-    '''
-    def updateDvoIDsAndFlags(self, table):
-        self.logger.infoPair("getting","imageID")
-        imageID = self.scratchDb.getImageIDFromExternID(self.header['IMAGEID'])
-        self.logger.infoPair("obtained","imageID")
-        self.logger.debug("Updating table '" + table + "' with DVO IDs...")
-        sql = "UPDATE " + table + " AS a, " + self.scratchDb.dvoDetectionTable + " AS b SET \
-               a.ippObjID = b.ippObjID, \
-               a.stackDetectID = b.detectID, \
-               a.objID = b.objID, \
-               a.infoFlag = b.flags << 45 | a.infoFlag,  \
-               a.primaryF = ((b.flags & 0x10000) >> 16 ) \
-               WHERE a.ippDetectID = b.ippDetectID \
-               AND b.imageID = " + str(imageID)
-
-        print "update dvo sql: ", sql
-        self.scratchDb.execute(sql)
-    
+            self.logger.errorPair('failed sql',sql)
+            return
     
     '''
@@ -1210,134 +1006,68 @@
         self.logger.infoPair("starting","populatePspsTables");
         self.skipBatch = False
-        if not self.useFullTables:
-             if not self.getIDsFromDVO():
-                return False
-        #do some basics first
-        # populate stack meta per filter
-        # insert objid/stackdetectid per filter to each table           
+
+        # each of the "populate*" methods below add their tables to the list:
         self.tablesToExport=[]    
 
-        if self.gstackID > 0:        
-            self.logger.infoPair("populating","gStackMeta")    
-            self.populateStackMeta("g.00000")
-            self.insertDvoIDs("StackObject","g.00000")
-            self.insertDvoIDs("StackModelFit","g.00000")
-            self.insertDvoIDs("StackApFlx","g.00000")
-            self.tablesToExport.append("gStackMeta")
-        if self.rstackID > 0:    
-            self.logger.infoPair("populating","rStackMeta")    
-            self.populateStackMeta("r.00000")
-            self.insertDvoIDs("StackObject","r.00000")
-            self.insertDvoIDs("StackModelFit","r.00000")
-            self.insertDvoIDs("StackApFlx","r.00000")
-            self.tablesToExport.append("rStackMeta")
-        if self.istackID > 0:    
-            self.logger.infoPair("populating","iStackMeta")    
-            self.populateStackMeta("i.00000")
-            self.insertDvoIDs("StackObject","i.00000")
-            self.insertDvoIDs("StackModelFit","i.00000")
-            self.insertDvoIDs("StackApFlx","i.00000")
-            self.tablesToExport.append("iStackMeta")
-        if self.zstackID > 0:    
-            self.logger.infoPair("populating","zStackMeta")    
-            self.populateStackMeta("z.00000")
-            self.insertDvoIDs("StackObject","z.00000")
-            self.insertDvoIDs("StackModelFit","z.00000")
-            self.insertDvoIDs("StackApFlx","z.00000")
-            self.tablesToExport.append("zStackMeta")
-        if self.ystackID > 0:    
-            self.logger.infoPair("populating","yStackMeta")    
-            self.populateStackMeta("y.00000")
-            self.insertDvoIDs("StackObject","y.00000")
-            self.insertDvoIDs("StackModelFit","y.00000")
-            self.insertDvoIDs("StackApFlx","y.00000")
-            self.tablesToExport.append("yStackMeta")
-
-        self.logger.infoPair("populating ","StackObject")
-        # need to index on objid and ippdetectid  or it is stupidly slow
-        self.scratchDb.createIndex("StackObject", "objID")
-        #populate from dvo the (f)ippDetectID into StackObject  
-        self.populateStackIPPDetectIDFromDvo("StackObject",1)
-        #index the ippDetectids for the next step
-        self.scratchDb.createIndex("StackObject", "gippDetectID")
-        self.scratchDb.createIndex("StackObject", "rippDetectID")
-        self.scratchDb.createIndex("StackObject", "iippDetectID")
-        self.scratchDb.createIndex("StackObject", "zippDetectID")
-        self.scratchDb.createIndex("StackObject", "yippDetectID")
-        self.populateStackObject()
-        self.populateRandomsAndSkyCellID()
-        # stackObject should be done, pending a few NULL columns (need help)
+        # EAM 20140730 : I have revised the StackObjectXX construction
+        # process.  The challenge here is that we have dvo-generated
+        # objIDs and ippObjIDs for each stack detection in seperate
+        # rows, but we want to merge the 5 filter sets into a single
+        # set of rows.  The old code was relying on INSERT IGNORE,
+        # making it hard to catch errors, and probably not doing the
+        # insert very efficiently
+        
+        # Now we do a first pass with SELECT DISTINCT to get the
+        # complete set of objIDs which are associated with detections
+        # from one of the relevant images (ie, measure.imageID matches
+        # the set of image IDs).  
+
+        # once we have determined the complete set of desired objects,
+        # then we can use an update to set the per-field fields with
+        # data selected for each filter.  Once we have constructed
+        # this basic common information in StackObjectThin, then we
+        # can uses this table to seed the same rows in the other Stack
+        # tables
+
+        for filter in self.filters:
+            if self.stackIDs[filter] > 0:        
+                self.populateStackMeta(filter)
+
+        self.populateStackObjectThin()
+
+        self.populateStackObjectRaw()
 
         if self.stackType != "NIGHTLY_STACK":
 
+            self.logger.infoPair("populating ","StackModelFitExtra")
+            self.populateStackModelFitExtra()
+
             self.logger.infoPair("populating ","StackModelFit")
-
-            self.scratchDb.createIndex("StackModelFit", "objID")
-        #populate from dvo the (f)ippdetectid into stackModelFit
-            self.populateStackIPPDetectIDFromDvo("StackModelFit",0)
-        #index the ippDetectIds for the next step
-            self.scratchDb.createIndex("StackModelFit", "gippDetectID")
-            self.scratchDb.createIndex("StackModelFit", "rippDetectID")
-            self.scratchDb.createIndex("StackModelFit", "iippDetectID")
-            self.scratchDb.createIndex("StackModelFit", "zippDetectID")
-            self.scratchDb.createIndex("StackModelFit", "yippDetectID")
-        #cull the entries that should not be (how?)        
-            self.deleteNULLippDetectIDs("StackModelFit") 
-        #populate stackModelFit
-            if self.gstackID > 0:
-                self.logger.infoPair("populating g filter for stackModelFit, stackmetaid =", self.gstackID)
-                self.populateStackModelFit("g")
-            if self.rstackID > 0: 
-                self.logger.infoPair("populating r filter for stackModelFit, stackmetaid =", self.rstackID)
-                self.populateStackModelFit("r")
-            if self.istackID > 0: 
-                self.logger.infoPair("populating i filter for stackModelFit, stackmetaid =", self.istackID)
-                self.populateStackModelFit("i")
-            if self.zstackID > 0: 
-                self.logger.infoPair("populating z filter for stackModelFit, stackmetaid =", self.zstackID)
-                self.populateStackModelFit("z")
-            if self.ystackID > 0: 
-                self.logger.infoPair("populating y filter for stackModelFit, stackmetaid =", self.ystackID)
-                self.populateStackModelFit("y")
-           
-            self.copyRandomsAndSkyCellIDFromStackObject("StackModelFit")
- 
-            self.logger.infoPair("populating ","StackApFlx")
-            
-            self.scratchDb.createIndex("StackApFlx", "objID")
-        #populate from dvo the (f)ippDetectID into StackApFlx
-            self.populateStackIPPDetectIDFromDvo("StackApFlx",0)
-        #index the ippDetectIDs for the next step 
-            self.scratchDb.createIndex("StackApFlx", "gippDetectID")
-            self.scratchDb.createIndex("StackApFlx", "rippDetectID")
-            self.scratchDb.createIndex("StackApFlx", "iippDetectID")
-            self.scratchDb.createIndex("StackApFlx", "zippDetectID")
-            self.scratchDb.createIndex("StackApFlx", "yippDetectID")
-        #populate StackApFlx
-            self.deleteNULLippDetectIDs("StackApFlx") 
+            self.populateStackModelFit("Exp", "PS_MODEL_EXP")
+            self.populateStackModelFit("DeV", "PS_MODEL_DEV")
+            self.populateStackModelFit("Ser", "PS_MODEL_SERSIC")
+
+            self.populateStackPetrosian()
+
+            self.logger.infoPair("populating ","StackApFlx Tables")
             self.populateStackApFlx()
-            self.copyRandomsAndSkyCellIDFromStackObject("StackApFlx")
-        #cull the entries that should not be (how?) 
-        
-        
+
+            self.populateStackApFlxFull("")
+            self.populateStackApFlxFull("C1")
+            self.populateStackApFlxFull("C2")
+
+        # delete rows with no content. for the other tables, this is done in 
+        # the 'populate' functions, but StackObjectThin needs to retain all rows
+        # until those tables are done
+        self.deleteRowsWithNoStackData("StackObjectThin")
+
         self.logger.infoPair("populating","StackToImage") 
         self.populateStackToImage()
         
-        self.setMinMaxObjID(["StackObject"])
-      #  self.updateStackTypeID("StackModelFit")
-
-        ##if self.totalDetections < 1: 
-        #self.logger.infoPair("populating","SkinnyObject") 
-        self.populateSkinnyObject()
-
-            ##self.logger.error("No detections to publish")
-            ##return False
-        self.tablesToExport.append("StackToImage")
-        self.tablesToExport.append("StackObject")
-        self.tablesToExport.append("StackModelFit")
-        self.tablesToExport.append("StackApFlx")
-        self.tablesToExport.append("SkinnyObject")
+        self.setMinMaxObjID(["StackObjectThin"])
+
         self.logger.infoPair("finishing","populatePspsTables"); 
         return True
+
     '''
     overidding this method - use regex to trimoff letter before stack
@@ -1345,2 +1075,59 @@
     def exportPspsTablesToFits(self, regex="(.*)"):
         return super(StackBatch, self).exportPspsTablesToFits("(Stack.*)")
+
+    '''
+    Imports IPP tables from FITS file
+    Accepts a regular expression to match the tables so not all tables need to be imported
+    (This regex feature is not currently used...)
+    '''
+    def importIppTables(self, columns="*", tableRE=""):
+        
+        if self.config.retry: return True
+
+        self.logger.infoPair("Importing ST tables with table match expression: ", tableRE)
+
+        count = 0
+        for filter in self.filters:
+            if self.stackIDs[filter] <= 0:  
+                self.logger.infoPair("no files for filter" , filter) 
+                continue
+
+            fileName = self.fits[filter].getPath()
+            
+            self.logger.infoPair("using filename:",fileName)
+            
+            try:
+                tables = stilts.treads(fileName)
+            except:
+                self.logger.errorPair("STILTS could not import from", fileName)
+                return False
+            
+            # count = 0
+            for table in tables:
+              
+                match = re.match(tableRE, table.name)
+                if not match: continue
+
+                self.logger.infoPair("Reading IPP table", filter + table.name)
+                table = stilts.tpipe(table, cmd='addcol table_index $0')
+                table = stilts.tpipe(table, cmd='explodeall')
+                  
+                # drop any previous tables before import
+                self.scratchDb.dropTable(filter + table.name)
+                  
+                # IPP FITS files are littered with infinities, so remove these
+                self.logger.info("Removing Infinity values from all columns")
+                table = stilts.tpipe(table, cmd='keepcols "' + columns + '"')
+                table = stilts.tpipe(table, cmd='replaceval -Infinity null *')
+                table = stilts.tpipe(table, cmd='replaceval Infinity null *')
+                  
+                try:
+                    table.write(self.scratchDb.url + '#' + filter + table.name)
+                    count = count + 1
+                except:
+                    self.logger.exception("Problem writing table '" + filter + table.name + "' to the database")
+                      
+        self.logger.infoPair("Done. Imported", "%d tables" % count)
+        self.indexIppTables()
+                      
+        return True
Index: /trunk/ippToPsps/jython/testCode.py
===================================================================
--- /trunk/ippToPsps/jython/testCode.py	(revision 37246)
+++ /trunk/ippToPsps/jython/testCode.py	(revision 37246)
@@ -0,0 +1,41 @@
+#!/usr/bin/env jython
+
+# A test script for testing new jython code snippets
+
+# import time
+import sys
+# import os
+import math
+# import logging.config
+
+# from sqlUtility import sqlUtility
+
+# testCode class
+class testCode(object):
+
+    # Constructor
+    def __init__(self, argv):
+        super(testCode, self).__init__(argv)
+
+    def run(self):
+
+        for x in range(0, 8):
+            for y in range(0, 8):
+
+                if not ((x == 0) and (y == 1)):
+                    print "case 1"
+                    print "x : " + str(x)
+                    print "y : " + str(y)
+                else:
+                    print "case 2"
+                    print "x : " + str(x)
+                    print "y : " + str(y)
+
+'''
+Start of program.
+'''
+try:
+    testcode = testCode(sys.argv)
+    testcode.run()
+    testcode.exitProgram("completed")
+except: pass
Index: /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/Detection
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/Detection	(revision 37245)
+++ /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/Detection	(revision 37246)
@@ -1,4 +1,3 @@
 objID           dimensionless   BIGINT  8         NA    ODM object identifier
-gcObjID		dimensionless	BIGINT	8	  NA 	ODM galactic coordinates identifier
 detectID        dimensionless   BIGINT  8         NA    ODM detection identifier
 ippObjID        dimensionless   BIGINT  8         NA    detection id generated by IPP
@@ -48,8 +47,8 @@
 apFluxErr       adu/seconds     REAL    4       -999    Aperture flux error
 apFillF         dimensionless   REAL    4       -999    Aperture fill factor 
+apRadius        arcsec          REAL    4       -999    Aperture radius
 kronFlux        adu/seconds     REAL    4       -999    Kron flux
 kronFluxErr     adu/seconds     REAL    4       -999    Kron flux error
 kronRad         arcsec      	REAL    4       -999    Kron radius
-kronRadErr      arcsec      	REAL    4       -999    Kron radius error (DROP)
 sky             adu/sec/pixel   REAL    4       -999    PSF sky level at source
 skyErr          adu/sec/pixel   REAL    4       -999    estimated error in sky
@@ -59,2 +58,6 @@
 --
 -- [231 bytes/det]
+
+### do we want apRadius?
+### relevant code spots:
+### config/tables.P2.vot, detectionbatch.py:315
Index: /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/Detection.txt
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/Detection.txt	(revision 37245)
+++ /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/Detection.txt	(revision 37246)
@@ -1,58 +1,56 @@
-objID           = dvo / addstar
-gcObjID		= dvo / addstar [EAM: add to addstar]
-detectID        = dvo / addstar
-ippObjID        = dvo / addstar
-ippDetectID     = dvo / addstar
-filterID        = smf / ipptopsps
-surveyID        = ipptopsps
-imageID         = smf header
-randomDetID     = ipptopsps
-dvoRegionID     = dvo / catID [EAM: add to dvopsps]
-obsTime         = smf
-xPos            = smf
-yPos            = smf
-xPosErr         = smf [EAM: modify errors to match relastro?]
-yPosErr         = smf
-pltScale        = smf
-posAngle        = smf
-----------------= 
-ra              = dvo / relastro
-dec             = dvo / relastro
-raErr           = dvo / relastro
-decErr          = dvo / relastro
-zp              = dvo / relphot
-telluricExt     = zp - zpNominal (dvopsps) [EAM: add to dvopsps]
-expTime         = smf
-airMass         = smf
-----------------= 
-psfFlux         = smf [OK: ipptopsps uses PSF_FLUX]
-psfFluxErr      = smf
-psfMajorFWHM    = smf [PSF_MAJOR is Sxx parameter, NOT FWHM] [EAM: add PSF_FWHM_MAJ to smf, keep PSF_MAJOR]
-psfMinorFWHM    = smf [PSF_MINOR is Sxx parameter, NOT FWHM] [EAM: add PSF_FWHM_MIN to smf, keep PSF_MINOR]
-psfTheta        = smf
-psfCore         = smf [EAM: add PSF_CORE to smf]
-psfQf           = smf
-psfQfPerfect    = smf
-psfChiSq        = smf
-psfLikelihood   = ipptopsps
-momentXX        = smf
-momentXY        = smf
-momentYY        = smf
-momentR1        = smf
-momentRH        = smf [XXX : MOMENTS_RH is NOT half-light radius : keep as MOMENTS_RH or calculate?]
-momentM3C       = smf
-momentM3S       = smf
-momentM4C       = smf
-momentM4S       = smf
-apFlux          = smf [requires PS1_V4]
-apFluxErr       = smf [requires PS1_V4]
-apFillF         = smf [EAM: add to pmSource and smf]
-kronFlux        = smf
-kronFluxErr     = smf
-kronRad         = (2.5*R1) : Ken : drop this or MOMENTS_R1?
-kronRadErr      = [not calculated] : drop this
-sky             = smf
-skyErr          = smf
-infoFlag        = smf
-infoFlag2       = smf
-dataRelease     = ippToPsps
+objID           + dvo = average.extID [calculated in addstar]
+detectID        + dvo = measure.extID [calculated in addstar]
+ippObjID        + dvo = average.objID + (average.catID << 32) [NOTE: this is a change in definition]
+ippDetectID     + smf:IPP_IDET
+filterID        + ipptopsps : internal, lookup from filter (grizy)
+surveyID        + ipptopsps : internal, from survey name
+imageID         - ipptopsps : expID x y (*** is this right???) (smf:IMAGEID / gpc1.chipRun.chip_image_id)_
+randomDetID     + ipptopsps : RANDOM from sql
+dvoRegionID     + dvo:average.catID
+obsTime         + smf:MJD-OBS + 0.5 EXPTIME / 84600
+xPos            + smf:X_PSF 
+yPos            + smf:Y_PSF
+xPosErr         + smf:X_PSF_SIG
+yPosErr         + smf:Y_PSF_SIG
+pltScale        + smf:PLTSCALE (negative -> sky parity)
+posAngle        + smf:POSANGLE
+---------------
+ra              + dvo:measure.ra
+dec             + dvo:measure.dec
+raErr           + smf:X_PSF_SIG * abs(PLTSCALE)
+decErr          + smf:Y_PSF_SIG * abs(PLTSCALE)
+zp              + dvo / dvopsps : zp
+telluricExt     + dvo / dvopsps : zp - zpNominal (dvopsps)
+expTime         + dvo:measure.dt [converted to seconds]
+airMass         + dvo:measure.airmass
+---------------
+psfFlux         + smf:PSF_INST_FLUX / EXPTIME
+psfFluxErr      + smf:PSF_INST_FLUX_SIG / EXPTIME
+psfMajorFWHM    + smf:PSF_FWHM_MAJ
+psfMinorFWHM    + smf:PSF_FWHM_MIN
+psfTheta        + smf:PSF_THETA
+psfCore         + smf:PSF_CORE
+psfQf           + smf:PSF_QF
+psfQfPerfect    + smf:PSF_QF_PERFECT
+psfChiSq        + smf:PSF_CHISQ
+psfLikelihood   + smf:psfLikelihood(EXT_NSIGMA)
+momentXX        + smf:MOMENTS_XX
+momentXY        + smf:MOMENTS_XY
+momentYY        + smf:MOMENTS_YY
+momentR1        + smf:MOMENTS_R1
+momentRH        + smf:MOMENTS_RH
+momentM3C       + smf:MOMENTS_M3C
+momentM3S       + smf:MOMENTS_M3S
+momentM4C       + smf:MOMENTS_M4C
+momentM4S       + smf:MOMENTS_M4S
+apFlux          + smf:AP_FLUX
+apFluxErr       + smf:AP_FLUX_SIG
+apFillF         + smf:AP_NPIX / (pi * (AP_MAG_RADIUS - 0.5)^2)
+kronFlux        + smf:KRON_FLUX
+kronFluxErr     + smf:KRON_FLUX_ERR
+kronRad         + smf:2.5*MOMENTS_R1
+sky             + smf:SKY / exptime
+skyErr          + smf:SKY_SIGMA / exptime
+infoFlag        + smf:FLAGS
+infoFlag2       + smf:FLAGS2 | (dvo.measure.flags << 13)
+dataRelease     + ippToPsps : user input (skychunk.dataRelease)
Index: /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/ForcedWarpExtended
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/ForcedWarpExtended	(revision 37246)
+++ /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/ForcedWarpExtended	(revision 37246)
@@ -0,0 +1,47 @@
+
+objID           dimensionless   BIGINT  8       NA      ODM object identifier
+gcObjID		dimensionless	BIGINT	8	NA 	ODM galactic coordinates identifier
+detectID        dimensionless   BIGINT  8       NA      ODM detection identifier
+ippObjID        dimensionless   BIGINT  8       NA      ippobject id generated by IPP
+ippDetectID     dimensionless   BIGINT  8       NA      detection id generated by IPP
+filterID        dimensionless   TINYINT 1       NA      filter ID: g=1, r=2, i=3, z=4, y=5, w=6, ...
+surveyID        dimensionless   TINYINT 1       NA      survey flag identifier
+forcedWarpID    dimensionless   BIGINT  8       NA      IPP warp_id
+randomWarpID    dimensionless   BIGINT  8       NA      Random warp_id
+skyCellID       dimensionless   REAL    4       -999    single float giving PrimaryCell.SkyCell identifier 
+dvoRegionID     dimensionless   INT     4       -999    identifier to dvo spatial region
+obsTime         MeanJulianDays  FLOAT   8       -999    Time of mid observation in Mean Julian Days
+------------------------------------------------------ 
+lensObjSmearX11 arcsec^-2       REAL    4       -999    per-object smear polarizability X11 term
+lensObjSmearX12 arcsec^-2       REAL    4       -999    per-object smear polarizability X12 term
+lensObjSmearX22 arcsec^-2       REAL    4       -999    per-object smear polarizability X22 term
+lensObjSmearE1  arcsec^-2       REAL    4       -999    per-object smear polarizability E1 term
+lensObjSmearE2  arcsec^-2       REAL    4       -999    per-object smear polarizability E2 term
+lensObjShearX11 dimensionless   REAL    4       -999    per-object shear polarizability X11 term
+lensObjShearX12 dimensionless   REAL    4       -999    per-object shear polarizability X12 term
+lensObjShearX22 dimensionless   REAL    4       -999    per-object shear polarizability X22 term
+lensObjShearE1  dimensionless   REAL    4       -999    per-object shear polarizability E1 term
+lensObjShearE2  dimensionless   REAL    4       -999    per-object shear polarizability E2 term
+lensPSFSmearX11 arcsec^-2       REAL    4       -999    psf model smear polarizability X11 term
+lensPSFSmearX12 arcsec^-2       REAL    4       -999    psf model smear polarizability X12 term
+lensPSFSmearX22 arcsec^-2       REAL    4       -999    psf model smear polarizability X22 term
+lensPSFSmearE1  arcsec^-2       REAL    4       -999    psf model smear polarizability E1 term
+lensPSFSmearE2  arcsec^-2       REAL    4       -999    psf model smear polarizability E2 term
+lensPSFShearX11 dimensionless   REAL    4       -999    psf model shear polarizability X11 term
+lensPSFShearX12 dimensionless   REAL    4       -999    psf model shear polarizability X12 term
+lensPSFShearX22 dimensionless   REAL    4       -999    psf model shear polarizability X22 term
+lensPSFShearE1  dimensionless   REAL    4       -999    psf model shear polarizability E1 term
+lensPSFShearE2  dimensionless   REAL    4       -999    psf model shear polarizability E2 term
+------------------------------------------------------ 
+flxR5           adu/seconds     REAL    4       -999    Flux inside r = 5
+flxR5Err        adu/seconds     REAL    4       -999    estimated error is flxR5
+flxR5Std        adu/seconds     REAL    4       -999    estimated standard deviation in flxR5
+flxR5Fill       dimensionless   REAL    4       -999    estimated filling factor at R5
+flxR6           adu/seconds     REAL    4       -999    Flux inside r = 6
+flxR6Err        adu/seconds     REAL    4       -999    estimated error is flxR6
+flxR6Std        adu/seconds     REAL    4       -999    estimated standard deviation in flxR6
+flxR6Fill       dimensionless   REAL    4       -999    estimated filling factor at R6
+------------------------------------------------------ 
+
+-- [295 byte/det]
+-- this table is only for non-Galatic-plane data
Index: /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/ForcedWarpExtended.txt
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/ForcedWarpExtended.txt	(revision 37246)
+++ /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/ForcedWarpExtended.txt	(revision 37246)
@@ -0,0 +1,44 @@
+
+objID            = dvo/addstar
+gcObjID          = dvo/addstar
+detectID         = dvo/addstar
+ippObjID         = dvo/addstar
+ippDetectID      = dvo/addstar
+filterID         = 
+surveyID         = 
+forcedWarpID     = 
+randomWarpID     = 
+skyCellID        = 
+dvoRegionID      = 
+obsTime          = smf
+---------------- = 
+lensObjSmearX11  = smf [PS1_V5]
+lensObjSmearX12  = smf [PS1_V5]
+lensObjSmearX22  = smf [PS1_V5]
+lensObjSmearE1   = smf [PS1_V5]
+lensObjSmearE2   = smf [PS1_V5]
+lensObjShearX11  = smf [PS1_V5]
+lensObjShearX12  = smf [PS1_V5]
+lensObjShearX22  = smf [PS1_V5]
+lensObjShearE1   = smf [PS1_V5]
+lensObjShearE2   = smf [PS1_V5]
+lensPSFSmearX11  = smf [PS1_V5]
+lensPSFSmearX12  = smf [PS1_V5]
+lensPSFSmearX22  = smf [PS1_V5]
+lensPSFSmearE1   = smf [PS1_V5]
+lensPSFSmearE2   = smf [PS1_V5]
+lensPSFShearX11  = smf [PS1_V5]
+lensPSFShearX12  = smf [PS1_V5]
+lensPSFShearX22  = smf [PS1_V5]
+lensPSFShearE1   = smf [PS1_V5]
+lensPSFShearE2   = smf [PS1_V5]
+---------------- = 
+flxR5            = smf [?? calculated?]
+flxR5Err         = smf [?? calculated?]
+flxR5Std         = smf [?? calculated?]
+flxR5Fill        = smf [?? calculated?]
+flxR6            = smf [?? calculated?]
+flxR6Err         = smf [?? calculated?]
+flxR6Std         = smf [?? calculated?]
+flxR6Fill        = smf [?? calculated?]
+---------------- = 
Index: /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/ForcedWarpMeasurement
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/ForcedWarpMeasurement	(revision 37245)
+++ /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/ForcedWarpMeasurement	(revision 37246)
@@ -1,2 +1,3 @@
+
 objID           dimensionless   BIGINT  8       NA      ODM object identifier
 gcObjID		dimensionless	BIGINT	8	NA 	ODM galactic coordinates identifier
@@ -37,25 +38,4 @@
 momentM4S       arcsec^4        REAL    4       -999    4th moment cos(theta) 
 
-lensObjSmearX11 arcsec^-2       REAL    4       -999    per-object smear polarizability X11 term
-lensObjSmearX12 arcsec^-2       REAL    4       -999    per-object smear polarizability X12 term
-lensObjSmearX22 arcsec^-2       REAL    4       -999    per-object smear polarizability X22 term
-lensObjSmearE1  arcsec^-2       REAL    4       -999    per-object smear polarizability E1 term
-lensObjSmearE2  arcsec^-2       REAL    4       -999    per-object smear polarizability E2 term
-lensObjShearX11 dimensionless   REAL    4       -999    per-object shear polarizability X11 term
-lensObjShearX12 dimensionless   REAL    4       -999    per-object shear polarizability X12 term
-lensObjShearX22 dimensionless   REAL    4       -999    per-object shear polarizability X22 term
-lensObjShearE1  dimensionless   REAL    4       -999    per-object shear polarizability E1 term
-lensObjShearE2  dimensionless   REAL    4       -999    per-object shear polarizability E2 term
-lensPSFSmearX11 arcsec^-2       REAL    4       -999    psf model smear polarizability X11 term
-lensPSFSmearX12 arcsec^-2       REAL    4       -999    psf model smear polarizability X12 term
-lensPSFSmearX22 arcsec^-2       REAL    4       -999    psf model smear polarizability X22 term
-lensPSFSmearE1  arcsec^-2       REAL    4       -999    psf model smear polarizability E1 term
-lensPSFSmearE2  arcsec^-2       REAL    4       -999    psf model smear polarizability E2 term
-lensPSFShearX11 dimensionless   REAL    4       -999    psf model shear polarizability X11 term
-lensPSFShearX12 dimensionless   REAL    4       -999    psf model shear polarizability X12 term
-lensPSFShearX22 dimensionless   REAL    4       -999    psf model shear polarizability X22 term
-lensPSFShearE1  dimensionless   REAL    4       -999    psf model shear polarizability E1 term
-lensPSFShearE2  dimensionless   REAL    4       -999    psf model shear polarizability E2 term
-
 apFlux          adu/seconds     REAL    4       -999    Aperture flux
 apFluxErr       adu/seconds     REAL    4       -999    Aperture flux error
@@ -66,13 +46,4 @@
 kronRadErr      arcsed          REAL    4       -999    Kron radius error
 ------------------------------------------------------ 
-flxR5           adu/seconds     REAL    4       -999    Flux inside r = 5
-flxR5Err        adu/seconds     REAL    4       -999    estimated error is flxR5
-flxR5Std        adu/seconds     REAL    4       -999    estimated standard deviation in flxR5
-flxR5Fill       dimensionless   REAL    4       -999    estimated filling factor at R5
-flxR6           adu/seconds     REAL    4       -999    Flux inside r = 6
-flxR6Err        adu/seconds     REAL    4       -999    estimated error is flxR6
-flxR6Std        adu/seconds     REAL    4       -999    estimated standard deviation in flxR6
-flxR6Fill       dimensionless   REAL    4       -999    estimated filling factor at R6
------------------------------------------------------- 
 sky             adu/sec/pixel   REAL    4       -999    PSF sky level at source
 skyErr          adu/sec/pixel   REAL    4       -999    estimated error in sky
Index: /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/ForcedWarpMeasurement.txt
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/ForcedWarpMeasurement.txt	(revision 37245)
+++ /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/ForcedWarpMeasurement.txt	(revision 37246)
@@ -38,25 +38,4 @@
 momentM4S        = smf
 		 = 
-lensObjSmearX11  = smf [PS1_V5]
-lensObjSmearX12  = smf [PS1_V5]
-lensObjSmearX22  = smf [PS1_V5]
-lensObjSmearE1   = smf [PS1_V5]
-lensObjSmearE2   = smf [PS1_V5]
-lensObjShearX11  = smf [PS1_V5]
-lensObjShearX12  = smf [PS1_V5]
-lensObjShearX22  = smf [PS1_V5]
-lensObjShearE1   = smf [PS1_V5]
-lensObjShearE2   = smf [PS1_V5]
-lensPSFSmearX11  = smf [PS1_V5]
-lensPSFSmearX12  = smf [PS1_V5]
-lensPSFSmearX22  = smf [PS1_V5]
-lensPSFSmearE1   = smf [PS1_V5]
-lensPSFSmearE2   = smf [PS1_V5]
-lensPSFShearX11  = smf [PS1_V5]
-lensPSFShearX12  = smf [PS1_V5]
-lensPSFShearX22  = smf [PS1_V5]
-lensPSFShearE1   = smf [PS1_V5]
-lensPSFShearE2   = smf [PS1_V5]
-		 = 
 apFlux           = smf [PS1_V4]
 apFluxErr        = smf [PS1_V4]
@@ -67,13 +46,4 @@
 kronRadErr       = [drop : not currently calculated]
 ---------------- = 
-flxR5            = smf [?? calculated?]
-flxR5Err         = smf [?? calculated?]
-flxR5Std         = smf [?? calculated?]
-flxR5Fill        = smf [?? calculated?]
-flxR6            = smf [?? calculated?]
-flxR6Err         = smf [?? calculated?]
-flxR6Std         = smf [?? calculated?]
-flxR6Fill        = smf [?? calculated?]
----------------- = 
 sky              = smf
 skyErr           = smf
Index: /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/MeanObject
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/MeanObject	(revision 37245)
+++ /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/MeanObject	(revision 37246)
@@ -4,23 +4,23 @@
 
 objID           dimensionless   BIGINT   8       NA      ODM object identifier index
-gcObjID		dimensionless	BIGINT	 8	 NA 	ODM galactic coordinates identifier
 gQfPerfect      dimensionless   REAL     4       -999    maximum psf qfPerfect from best available g band detections 
 gMeanPSFMag     AB_magnitude    REAL     4       -999    mean g psf AB magnitude from best available measurements (best available as current defined by ipp "waterfall logic"  
 gMeanPSFMagErr  AB_magnitude    REAL     4       -999    estimated error of best availalbe g-band psf AB magnitudes (individual errors added in quadrature)
-gnIncPSFMag     dimensionless   SMALLINT 2       -999    number of best available detections included in mean psfMag 
 gMeanPSFMagStd  dimensioless    REAL     4       -999    standard deviation of best available measurements - compared with MeanErr this is one measure of true variability  
-gMinPSFMag      AB_magnitude    REAL     4       -999    minimum best available PSFMag - min and max are given for PSFMag as they may indicate variability.  
-gMaxPSFMag      AB_magnitude    REAL     4       -999    maximum best available PSFMag   
+gMeanPSFMagMin  AB_magnitude    REAL     4       -999    minimum best available PSFMag - min and max are given for PSFMag as they may indicate variability.  
+gMeanPSFMagMax  AB_magnitude    REAL     4       -999    maximum best available PSFMag   
+gMeanPSFMagNpt  dimensionless   SMALLINT 2       -999    number of best available detections included in mean psfMag 
 					 
 gMeanKronMag    AB_magnitude    REAL     4       -999    mean g kron AB magnitude from best available measurements     
 gMeanKronMagErr AB_magnitude    REAL     4       -999    estimated error of mean g kron AB magnitude 
-gnIncKronMag    dimensionless   SMALLINT 2       -999    number of best available detections included mean Kron mag 
-gMeanKronMagStd dimensioless    REAL     4       -999    standard deviation of best available measurements   
+gMeanKronMagStd dimensionless   REAL     4       -999    standard deviation of best available measurements   
+gMeanKronMagNpt dimensionless   SMALLINT 2       -999    number of best available detections included mean Kron mag 
 					 
 gMeanApMag      AB_magnitude    REAL     4       -999    mean g kron AB magnitude from best available measurements
 gMeanApMagErr   AB_magnitude    REAL     4       -999    estimated error of g kron AB magnitude mean
-gnIncApMag      dimensionless   SMALLINT 2       -999    number of detections included in best available mean of Kron mag in g filter
 gMeanApMagStd   dimensioless    REAL     4       -999    standard deviation of best available measurements   
-gFlags          dimensionless   BIGINT   8       NA      flags for g mean
+gMeanApMagNpt   dimensionless   SMALLINT 2       -999    number of detections included in best available mean of Kron mag in g filter
+
+gFlags          dimensionless   INT      4          0    flags for g mean [XXX secfilt.flags is 4byte] 
 -- duplicate for other filters
 
Index: /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/MeanObject.txt
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/MeanObject.txt	(revision 37245)
+++ /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/MeanObject.txt	(revision 37246)
@@ -1,25 +1,23 @@
 
+*** I've checked that these are plausible, not exact
 
+objID           + dvo / addstar
+gQfPerfect      + dvo / relphot / secfilt.psfQfMax 
+gMeanPSFMag     + dvo / relphot / secfilt.M 
+gMeanPSFMagErr  + dvo / relphot / secfilt.dM
+gMeanPSFMagStd  + dvo / relphot / secfilt.Mstdev 
+gMeanPSFMagMin  + dvo / relphot / secfilt.Min
+gMeanPSFMagMax  + dvo / relphot / secfilt.Max
+gMeanPSFMagNpt  + dvo / relphot / secfilt.Nused
 
+gMeanKronMag    + dvo / relphot / secfilt.Mkron 
+gMeanKronMagErr + dvo / relphot / secfilt.dMkron
+gMeanKronMagStd + dvo / relphot / secfilt.sMkron
+gMeanKronMagNpt + dvo / relphot / secfilt.NusedKron
 
-objID           = dvo / addstar
-gcObjID         = dvo / addstar
-gQfPerfect      = dvo / relphot / secfilt. [XXX Not calculated]
-gMeanPSFMag     = dvo / relphot / secfilt.M 
-gMeanPSFMagErr  = dvo / relphot / secfilt.dM
-gnIncPSFMag     = dvo / relphot / secfilt.Nused [XXX : ensure .Nused matches .M]
-gMeanPSFMagStd  = dvo / relphot / secfilt.Mstdev 
-gMinPSFMag      = dvo / relphot / secfilt.Min [XXX: replace M_20, M_80 with Min, Max]
-gMaxPSFMag      = dvo / relphot / secfilt.Max [XXX: replace M_20, M_80 with Min, Max]
-		= 
-gMeanKronMag    = dvo / relphot / secfilt.Mkron 
-gMeanKronMagErr = dvo / relphot / secfilt.dMkron
-gnIncKronMag    = dvo / relphot / secfilt.nMkron [XXX : not calculated]
-gMeanKronMagStd = dvo / relphot / secfilt.MstdevKron [XXX : not calculated]
-		= 
-gMeanApMag      = dvo / relphot / secfilt.Map
-gMeanApMagErr   = dvo / relphot / secfilt.? [XXX : not calculated]
-gnIncApMag      = dvo / relphot / secfilt.? [XXX : not calculated]
-gMeanApMagStd   = dvo / relphot / secfilt.? [XXX : not calculated]
+gMeanApMag      + dvo / relphot / secfilt.Map
+gMeanApMagErr   + dvo / relphot / secfilt.dMap
+gMeanApMagStd   + dvo / relphot / secfilt.sMap
+gMeanApMagNpt   + dvo / relphot / secfilt.NusedAp
 
-gFlags          = dvo / relphot / secfilt.flags
+gFlags          + dvo / relphot / secfilt.flags
Index: /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/ObjectThin
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/ObjectThin	(revision 37245)
+++ /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/ObjectThin	(revision 37246)
@@ -2,10 +2,11 @@
 objName          string         VAR      8      NA      IAU Name constructed from objID postion PS1.x JHHMMSS.SS+/-DDMMSS.S where x is leading number of procesing version       
 objID            dimensionless  BIGINT   8      NA      ODM object identifier index
-gcObjID		 dimensionless	BIGINT	8	  NA 	ODM galactic coordinates identifier
 ippObjID         dimensionless  BIGINT   8      NA      IPP object number
 surveyID         dimensionless  TINYINT  1      255     Survey ID
-skyCellID        dimensionless  REAL     4      -999     single float giving PrimaryCell.SkyCell identifier
 htmID            dimensionless  BIGINT   8      NA      HTM index
 zoneID           dimensionless  INT      4      NA      Zone index
+tessID           dimensionless  TINYINT  1       -1     ID mapping to tessellation names (eg, RINGS.V3, MD01.V3, etc)
+projectionID     dimensionless  SMALLINT 2       -999   valid values 0 - < 10000
+skyCellID        dimensionless  TINYINT  1       255    valid values 0 - 143 (12x12 grid)
 randomID         dimensionless  BIGINT   8      0       Random integer between 0 and 2^32 = 4,394,967,296 remaining ramdom integer 0  
 batchID          dimensionless  BIGINT   8      -999    batch id        
@@ -23,6 +24,5 @@
 raMeanErr        arcsec         REAL     4      -999    Combination of the measurement Errors in the Right Ascension from the mean detections if they exist 
 decMeanErr       arcsec         REAL     4      -999    Combination of the measurement Errors in the  Declination measurements if they exist  
-raMeanStd        arcsec         Real     4      -999    standard deviation of Right Ascension measurements in detections if they exist 
-decMeanStd       arcsec         REAL     4      -999    standard deviation of the  Declination measurements if they exist  
+posMeanChisq     dimensionless  REAL     4      -999    chisq of mean position
 --------------------------------------------------------------------------------------------------------
 --                                                      Note: the following three sets of coordinate systems are based on stack if it exists, and mean if it does not.
Index: /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/ObjectThin.txt
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/ObjectThin.txt	(revision 37245)
+++ /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/ObjectThin.txt	(revision 37246)
@@ -1,49 +1,49 @@
 
-objName           = ipptopsps
-objID             = dvo / addstar
-gcobjID           = dvo / addstar
-ippObjID          = dvo / addstar
-surveyID          = ipptopsps
-skyCellID         = smf header
-htmID             = PSPS
-zoneID            = PSPS
-randomID          = ipptopsps
-batchID           = ipptopsps
-dvoRegionID       = dvo / catID
-dataRelease       = ipptopsps
-objInfoFlag       = dvo / relastro,relphot [define]
-qualityFlag       = dvo / relastro,relphot [define]
-consistencyFlag   = ipptopsps?
-raStack           = dvo / allow recalibration? [ADD to average.d]
-decStack          = dvo / allow recalibration?
-raStackErr        = dvo / allow recalibration?
-decStackErr       = dvo / allow recalibration?
-raMean            = dvo / relastro
-decMean           = dvo / relastro
-raMeanErr         = dvo / relastro
-decMeanErr        = dvo / relastro
-raMeanStd         = dvo / relastro
-decMeanStd        = dvo / relastro
------------------ = 
---                = 
---                = 
---                = 
---                = 
---                = 
-cx                = PSPS
-cy                = PSPS
-cz                = PSPS
-lambda            = PSPS
-beta              = PSPS
-l                 = PSPS
-b                 = PSPS
------------------ = 
-nStackObjectRows  = dvo [ADD to average.d]
---                = 
-nStackDetections  = dvo / relphot [Sum of not-forced stack detections]
-nDetections       = dvo / relphot [Sum of ng+nr, etc?]
-ng                = dvo / relphot [Sum of GPC1.g.XY?? measure.d]
-nr                = dvo / relphot [ditto]
-ni                = dvo / relphot
-nz                = dvo / relphot
-ny                = dvo / relphot
+objName           - ipptopsps : move to dvopsps?
+objID             + dvo:average.extID
+ippObjID          + dvo:(average.objID | average.catID << 32)
+surveyID          + ipptopsps : internal, from survey name
+htmID             - PSPS
+zoneID            - PSPS
+tessID            + average.tessID
+projectionID      + average.projectionID
+skycellID         + average.skycellID
+randomID          + ipptopsps : RANDOM from sql
+batchID           + ipptopsps : internal
+dvoRegionID       + dvo:average.catID
+dataRelease       + ipptopsps : user input (skychunk.dataRelease)
+objInfoFlag       + dvo:average.flags
+qualityFlag       - (dvo:average.flags >> 24) & 0xFF *** correct??
+consistencyFlag   - *** hard-wired in ipptopsps to 0
+raStack           + dvo:average.Rstk *** not calculated?
+decStack          + dvo:average.Dstk *** not calculated?
+raStackErr        + dvo:average.dRstk *** not calculated?
+decStackErr       + dvo:average.dDstk *** not calculated?
+raMean            + dvo:average.R
+decMean           + dvo:average.D
+raMeanErr         + dvo:average.dR
+decMeanErr        + dvo:average.dD
+posMeanChisq      + dvo:average.ChiSqAve
+-----------------   
+--                  
+--                  
+--                  
+--                  
+--                  
+cx                - PSPS
+cy                - PSPS
+cz                - PSPS
+lambda            - PSPS
+beta              - PSPS
+l                 - PSPS
+b                 - PSPS
+----------------- 
+nStackObjectRows  - do in dvopsps
+--                
+nStackDetections  - sum of secfilt.NstackDet (sum in sql)
+nDetections       + ipptopsps:Sum of ng+nr in sql 
+ng                + dvo:secfilt.ncode ** check that this is right
+nr                + dvo:secfilt.ncode ** check that this is right
+ni                + dvo:secfilt.ncode ** check that this is right
+nz                + dvo:secfilt.ncode ** check that this is right
+ny                + dvo:secfilt.ncode ** check that this is right
Index: /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackApFlx
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackApFlx	(revision 37245)
+++ /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackApFlx	(revision 37246)
@@ -1,8 +1,5 @@
 
 objID            dimensionless  BIGINT  8       NA      ODM object identifier
-gcObjID	  	 dimensionless	BIGINT	8	NA 	ODM galactic coordinates identifier
 ippObjID         dimensionless  BIGINT  8       NA      ipp object identifier
-surveyID         dimensionless  TINYINT 1       0       stack type identifier
-skyCellID        dimensionless  REAL    4       -999    single float giving PrimaryCell.SkyCell identifier 
 randomStackObjID dimensionless  BIGINT  8       NA      random stack id
 stackDetectRowID dimensionless  BIGINT  8       NA      identifies which of up to 5 possible stackdetctions this Row refers to: Primary, up to 3 Secondary, 1 best  
@@ -10,6 +7,4 @@
 bestDetection    dimensionless  TINYINT 1       255     identifies if this row is a best detection or not. Also set if only a primary detection exists.   
 --                                                      the Primary Dectection, 0 to 3 possible secondary dectections, and the "best" per filter.  
-dvoRegionID     dimensionless   INT    4       -999    identifier to dvo spatial region
-dataRelease     dimensionless   TINYINT 1       NA      Data release when this table was loaded.
 ------------------------------------------------------- replicate to end for each filter g,r,i,z,y
 gippDetectID    dimensionless   BIGINT  8       NA      stack identifier
@@ -17,41 +12,41 @@
 gstackMetaID    dimensionless   BIGINT  8       NA      stack identifier
 --------------------------------------------------------unconvolved
-gflxR3          adu/seconds     REAL    4       -999    Flux inside r = 3
-gflxR3Err       adu/seconds     REAL    4       -999    estimated error is flxR3
-gflxR3Std       adu/seconds     REAL    4       -999    estimated standard deviation in flxR3
+gflxR3          Jy              REAL    4       -999    Flux inside r = 3
+gflxR3Err       Jy              REAL    4       -999    estimated error is flxR3
+gflxR3Std       Jy              REAL    4       -999    estimated standard deviation in flxR3
 gflxR3Fill      dimensionless   REAL    4       -999    estimated filling factor at R3
-gflxR4          adu/seconds     REAL    4       -999    Flux inside r = 4
-gflxR4Err       adu/seconds     REAL    4       -999    estimated error is flxR4
-gflxR4Std       adu/seconds     REAL    4       -999    estimated standard deviation in flxR4
+gflxR4          Jy              REAL    4       -999    Flux inside r = 4
+gflxR4Err       Jy              REAL    4       -999    estimated error is flxR4
+gflxR4Std       Jy              REAL    4       -999    estimated standard deviation in flxR4
 gflxR4Fill      dimensionless   REAL    4       -999    estimated filling factor at R4
-gflxR5          adu/seconds     REAL    4       -999    Flux inside r = 5
-gflxR5Err       adu/seconds     REAL    4       -999    estimated error is flxR5
-gflxR5Std       adu/seconds     REAL    4       -999    estimated standard deviation in flxR5
+gflxR5          Jy              REAL    4       -999    Flux inside r = 5
+gflxR5Err       Jy              REAL    4       -999    estimated error is flxR5
+gflxR5Std       Jy              REAL    4       -999    estimated standard deviation in flxR5
 gflxR5Fill      dimensionless   REAL    4       -999    estimated filling factor at R5
 ----------------------------------------------------    convolved across all bands to 6 or 8 pixels
-gc1flxR3        adu/seconds     REAL    4       -999    Flux inside r = 3
-gc1flxR3Err     adu/seconds     REAL    4       -999    estimated error is c1flxR3
-gc1flxR3Std     adu/seconds     REAL    4       -999    estimated standard deviation in c1flxR3
+gc1flxR3        Jy              REAL    4       -999    Flux inside r = 3
+gc1flxR3Err     Jy              REAL    4       -999    estimated error is c1flxR3
+gc1flxR3Std     Jy              REAL    4       -999    estimated standard deviation in c1flxR3
 gc1flxR3Fill    dimensionless   REAL    4       -999    estimated filling factor at R3
-gc1flxR4        adu/seconds     REAL    4       -999    Flux inside r = 4
-gc1flxR4Err     adu/seconds     REAL    4       -999    estimated error is c1flxR4
-gc1flxR4Std     adu/seconds     REAL    4       -999    estimated standard deviation in c1flxR4
+gc1flxR4        Jy              REAL    4       -999    Flux inside r = 4
+gc1flxR4Err     Jy              REAL    4       -999    estimated error is c1flxR4
+gc1flxR4Std     Jy              REAL    4       -999    estimated standard deviation in c1flxR4
 gc1flxR4Fill    dimensionless   REAL    4       -999    estimated filling factor at R4
-gc1flxR5        adu/seconds     REAL    4       -999    Flux inside r = 5
-gc1flxR5Err     adu/seconds     REAL    4       -999    estimated error is c1flxR5
-gc1flxR5Std     adu/seconds     REAL    4       -999    estimated standard deviation in c1flxR5
+gc1flxR5        Jy              REAL    4       -999    Flux inside r = 5
+gc1flxR5Err     Jy              REAL    4       -999    estimated error is c1flxR5
+gc1flxR5Std     Jy              REAL    4       -999    estimated standard deviation in c1flxR5
 gc1flxR5Fill    dimensionless   REAL    4       -999    estimated filling factor at R5
 ----------------------------------------------------    convolved across all bands to 6 or 8 pixels
-gc2flxR3        adu/seconds     REAL    4       -999    Flux inside r = 3
-gc2flxR3Err     adu/seconds     REAL    4       -999    estimated error in c2flxR3
-gc2flxR3Std     adu/seconds     REAL    4       -999    estimated standard deviation in c2flxR3
+gc2flxR3        Jy              REAL    4       -999    Flux inside r = 3
+gc2flxR3Err     Jy              REAL    4       -999    estimated error in c2flxR3
+gc2flxR3Std     Jy              REAL    4       -999    estimated standard deviation in c2flxR3
 gc2flxR3Fill    dimensionless   REAL    4       -999    estimated filling factor at R3
-gc2flxR4        adu/seconds     REAL    4       -999    Flux inside r = 4
-gc2flxR4Err     adu/seconds     REAL    4       -999    estimated error in c2flxR4
-gc2flxR4Std     adu/seconds     REAL    4       -999    estimated standard deviation in c2flxR4
+gc2flxR4        Jy              REAL    4       -999    Flux inside r = 4
+gc2flxR4Err     Jy              REAL    4       -999    estimated error in c2flxR4
+gc2flxR4Std     Jy              REAL    4       -999    estimated standard deviation in c2flxR4
 gc2flxR4Fill    dimensionless   REAL    4       -999    estimated filling factor at R4
-gc2flxR5        adu/seconds     REAL    4       -999    Flux inside r = 5
-gc2flxR5Err     adu/seconds     REAL    4       -999    estimated error in c2flxR5
-gc2flxR5Std     adu/seconds     REAL    4       -999    estimated standard deviation in c2flxR5
+gc2flxR5        Jy              REAL    4       -999    Flux inside r = 5
+gc2flxR5Err     Jy              REAL    4       -999    estimated error in c2flxR5
+gc2flxR5Std     Jy              REAL    4       -999    estimated standard deviation in c2flxR5
 gc2flxR5Fill    dimensionless   REAL    4       -999    estimated filling factor at R5
 
Index: /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackApFlx.txt
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackApFlx.txt	(revision 37245)
+++ /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackApFlx.txt	(revision 37246)
@@ -1,56 +1,51 @@
 
-objID            = dvo/addstar
-gcObjID          = dvo/addstar
-ippObjID         = dvo/addstar average.objID + (average.catID << 32)
-surveyID         = ipptopsps
-skyCellID        = smf header
-randomStackObjID = ipptopsps
-stackDetectRowID = PSPS ?
-primaryDetection = dvo
-bestDetection    = dvo
---               = 
-dvoRegionID      = dvo / catID
-dataRelease      = ipptopsps
----------------- = 
-gippDetectID     = dvo/addstar
-gstackDetectID   = dvopsps (see StackObject.txt)
-gstackMetaID     = dvopsps (see StackObject.txt)
----------------- = 
-gflxR3           = smf
-gflxR3Err        = smf
-gflxR3Std        = smf
-gflxR3Fill       = smf
-gflxR4           = smf
-gflxR4Err        = smf
-gflxR4Std        = smf
-gflxR4Fill       = smf
-gflxR5           = smf
-gflxR5Err        = smf
-gflxR5Std        = smf
-gflxR5Fill       = smf
----------------- = 
-gc1flxR3         = smf
-gc1flxR3Err      = smf
-gc1flxR3Std      = smf
-gc1flxR3Fill     = smf
-gc1flxR4         = smf
-gc1flxR4Err      = smf
-gc1flxR4Std      = smf
-gc1flxR4Fill     = smf
-gc1flxR5         = smf
-gc1flxR5Err      = smf
-gc1flxR5Std      = smf
-gc1flxR5Fill     = smf
----------------- = 
-gc2flxR3         = smf
-gc2flxR3Err      = smf
-gc2flxR3Std      = smf
-gc2flxR3Fill     = smf
-gc2flxR4         = smf
-gc2flxR4Err      = smf
-gc2flxR4Std      = smf
-gc2flxR4Fill     = smf
-gc2flxR5         = smf
-gc2flxR5Err      = smf
-gc2flxR5Std      = smf
-gc2flxR5Fill     = smf
+objID            + from StackObjectThin			      	      
+ippObjID         + from StackObjectThin			      	      
+randomStackObjID + from StackObjectThin			      	      
+stackDetectRowID - PSPS					      	      
+primaryDetection - from StackObjectThin NOT YET TESTED		      
+bestDetection    - from StackObjectThin CANNOT BE SET until after PV3 
+--               
+---------------- 
+gippDetectID     + from StackObjectThin 
+gstackDetectID   + from StackObjectThin 
+gstackMetaID     + from StackObjectThin 
+----------------  
+gflxR3           + cmf : APER_FLUX_3
+gflxR3Err        + cmf : APER_FLUX_ERR_3
+gflxR3Std        - cmf : APER_FLUX_STDEV_3 : ** badly defined in cmf
+gflxR3Fill       + cmf : APER_FILL_3      
+gflxR4           + cmf : APER_FLUX_4	  
+gflxR4Err        + cmf : APER_FLUX_ERR_4  
+gflxR4Std        - cmf : APER_FLUX_STDEV_4 : ** badly defined in cmf
+gflxR4Fill       + cmf : APER_FILL_4      
+gflxR5           + cmf : APER_FLUX_5	  
+gflxR5Err        + cmf : APER_FLUX_ERR_5  
+gflxR5Std        - cmf : APER_FLUX_STDEV_5 : ** badly defined in cmf
+gflxR5Fill       + cmf : APER_FILL_5      
+---------------- 
+gc1flxR3         + cmf : APER_FLUX_3	  
+gc1flxR3Err      + cmf : APER_FLUX_ERR_3  
+gc1flxR3Std      - cmf : APER_FLUX_STDEV_3 : ** badly defined in cmf
+gc1flxR3Fill     + cmf : APER_FILL_3      
+gc1flxR4         + cmf : APER_FLUX_4	  
+gc1flxR4Err      + cmf : APER_FLUX_ERR_4  
+gc1flxR4Std      - cmf : APER_FLUX_STDEV_4 : ** badly defined in cmf
+gc1flxR4Fill     + cmf : APER_FILL_4      
+gc1flxR5         + cmf : APER_FLUX_5	  
+gc1flxR5Err      + cmf : APER_FLUX_ERR_5  
+gc1flxR5Std      - cmf : APER_FLUX_STDEV_5 : ** badly defined in cmf
+gc1flxR5Fill     + cmf : APER_FILL_5      
+---------------- 
+gc2flxR3         + cmf : APER_FLUX_3	  
+gc2flxR3Err      + cmf : APER_FLUX_ERR_3  
+gc2flxR3Std      - cmf : APER_FLUX_STDEV_3 : ** badly defined in cmf
+gc2flxR3Fill     + cmf : APER_FILL_3      
+gc2flxR4         + cmf : APER_FLUX_4	  
+gc2flxR4Err      + cmf : APER_FLUX_ERR_4  
+gc2flxR4Std      - cmf : APER_FLUX_STDEV_4 : ** badly defined in cmf
+gc2flxR4Fill     + cmf : APER_FILL_4      
+gc2flxR5         + cmf : APER_FLUX_5	  
+gc2flxR5Err      + cmf : APER_FLUX_ERR_5  
+gc2flxR5Std      - cmf : APER_FLUX_STDEV_5 : ** badly defined in cmf
+gc2flxR5Fill     + cmf : APER_FILL_5      
Index: /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackApFlxFull
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackApFlxFull	(revision 37246)
+++ /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackApFlxFull	(revision 37246)
@@ -0,0 +1,53 @@
+
+objID            dimensionless  BIGINT  8       NA      ODM object identifier
+ippObjID         dimensionless  BIGINT  8       NA      object ID generated by IPP
+randomStackObjID dimensionless  BIGINT  8       NA      random stack id
+stackDetectRowID dimensionless  BIGINT  8       NA      identifies which of up to 5 possible stackdetctions this Row refers to: Primary, up to 3 Secondary, 1 best  
+primaryDetection dimensionless  TINYINT 1       255     identifies if this row is a primary stack detection. True about 80% of time. 
+bestDetection    dimensionless  TINYINT 1       255     identifies if this row is a best detection or not. Also set if only a primary detection exists.   
+--                                                      the Primary Dectection, 0 to 3 possible secondary dectections, and the "best" per filter.  
+-------------------------------------------------------- replicate below for all filters (grizy)
+gippDetectID    dimensionless   BIGINT  8       NA      ipp detect identifier
+gstackDetectID  dimensionless   BIGINT  8       NA      ODM detection identifier
+gstackMetaID    dimensionless   BIGINT  8       NA      stack identifier
+----------------------------------------------------------------------------------------
+gflxR1          Jy              REAL    4       -999    Flux inside r = 1
+gflxR1Err       Jy              REAL    4       -999    estimated error is flxR1
+gflxR1Std       Jy              REAL    4       -999    estimated standard deviation in flxR1
+gflxR1Fill      dimensionless   REAL    4       -999    estimated filling factor at R1
+gflxR2          Jy              REAL    4       -999    Flux inside r = 2
+gflxR2Err       Jy              REAL    4       -999    estimated error is flxR2
+gflxR2Std       Jy              REAL    4       -999    estimated standard deviation in flxR2
+gflxR2Fill      dimensionless   REAL    4       -999    estimated filling factor at R1
+gflxR3          Jy              REAL    4       -999    Flux inside r = 3
+gflxR3Err       Jy              REAL    4       -999    estimated error is flxR3
+gflxR3Std       Jy              REAL    4       -999    estimated standard deviation in flxR3
+gflxR3Fill      dimensionless   REAL    4       -999    estimated filling factor at R3
+gflxR4          Jy              REAL    4       -999    Flux inside r = 4
+gflxR4Err       Jy              REAL    4       -999    estimated error is flxR4
+gflxR4Std       Jy              REAL    4       -999    estimated standard deviation in flxR4
+gflxR4Fill      dimensionless   REAL    4       -999    estimated filling factor at R4
+gflxR5          Jy              REAL    4       -999    Flux inside r = 5
+gflxR5Err       Jy              REAL    4       -999    estimated error is flxR5
+gflxR5Std       Jy              REAL    4       -999    estimated standard deviation in flxR5
+gflxR5Fill      dimensionless   REAL    4       -999    estimated filling factor at R5
+gflxR6          Jy              REAL    4       -999    Flux inside r = 6
+gflxR6Err       Jy              REAL    4       -999    estimated error is flxR6
+gflxR6Std       Jy              REAL    4       -999    estimated standard deviation in flxR6
+gflxR6Fill      dimensionless   REAL    4       -999    estimated filling factor at R6
+gflxR7          Jy              REAL    4       -999    Flux inside r = 7
+gflxR7Err       Jy              REAL    4       -999    estimated error is flxR7
+gflxR7Std       Jy              REAL    4       -999    estimated standard deviation in flxR7
+gflxR7Fill      dimensionless   REAL    4       -999    estimated filling factor at R7
+gflxR8          Jy              REAL    4       -999    Flux inside r = 8
+gflxR8Err       Jy              REAL    4       -999    estimated error is flxR8
+gflxR8Std       Jy              REAL    4       -999    estimated standard deviation in flxR8
+gflxR8Fill      dimensionless   REAL    4       -999    estimated filling factor at R8
+gflxR9          Jy              REAL    4       -999    Flux inside r = 9
+gflxR9Err       Jy              REAL    4       -999    estimated error is flxR9
+gflxR9Std       Jy              REAL    4       -999    estimated standard deviation in flxR9
+gflxR9Fill      dimensionless   REAL    4       -999    estimated filling factor at R9
+gflxR10         Jy              REAL    4       -999    Flux inside r = 10
+gflxR10Err      Jy              REAL    4       -999    estimated error is flxR10
+gflxR10Std      Jy              REAL    4       -999    estimated standard deviation in flxR10
+gflxR10Fill     dimensionless   REAL    4       -999    estimated filling factor at R10
Index: /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackApFlxFull.txt
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackApFlxFull.txt	(revision 37246)
+++ /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackApFlxFull.txt	(revision 37246)
@@ -0,0 +1,53 @@
+
+objID            + from StackObjectThin			      	      
+ippObjID         + from StackObjectThin			      	      
+randomStackObjID + from StackObjectThin			      	      
+stackDetectRowID - PSPS					      	      
+primaryDetection - from StackObjectThin NOT YET TESTED		      
+bestDetection    - from StackObjectThin CANNOT BE SET until after PV3 
+--               
+---------------- 
+gippDetectID     + from StackObjectThin 
+gstackDetectID   + from StackObjectThin 
+gstackMetaID     + from StackObjectThin 
+---------------- 
+gflxR1           + cmf : APER_FLUX_1	  
+gflxR1Err        + cmf : APER_FLUX_ERR_1  
+gflxR1Std        - cmf : APER_FLUX_STDEV_1 : ** badly defined in cmf
+gflxR1Fill       + cmf : APER_FILL_1      
+gflxR2           + cmf : APER_FLUX_2	  
+gflxR2Err        + cmf : APER_FLUX_ERR_2  
+gflxR2Std        - cmf : APER_FLUX_STDEV_2 : ** badly defined in cmf
+gflxR2Fill       + cmf : APER_FILL_2      
+gflxR3           + cmf : APER_FLUX_3	  
+gflxR3Err        + cmf : APER_FLUX_ERR_3  
+gflxR3Std        - cmf : APER_FLUX_STDEV_3 : ** badly defined in cmf
+gflxR3Fill       + cmf : APER_FILL_3      
+gflxR4           + cmf : APER_FLUX_4	  
+gflxR4Err        + cmf : APER_FLUX_ERR_4  
+gflxR4Std        - cmf : APER_FLUX_STDEV_4 : ** badly defined in cmf
+gflxR4Fill       + cmf : APER_FILL_4      
+gflxR5           + cmf : APER_FLUX_5	  
+gflxR5Err        + cmf : APER_FLUX_ERR_5  
+gflxR5Std        - cmf : APER_FLUX_STDEV_5 : ** badly defined in cmf
+gflxR5Fill       + cmf : APER_FILL_5      
+gflxR6           + cmf : APER_FLUX_6	  
+gflxR6Err        + cmf : APER_FLUX_ERR_6  
+gflxR6Std        - cmf : APER_FLUX_STDEV_6 : ** badly defined in cmf
+gflxR6Fill       + cmf : APER_FILL_6      
+gflxR7           + cmf : APER_FLUX_7	  
+gflxR7Err        + cmf : APER_FLUX_ERR_7  
+gflxR7Std        - cmf : APER_FLUX_STDEV_7 : ** badly defined in cmf
+gflxR7Fill       + cmf : APER_FILL_7      
+gflxR8           + cmf : APER_FLUX_8	  
+gflxR8Err        + cmf : APER_FLUX_ERR_8  
+gflxR8Std        - cmf : APER_FLUX_STDEV_8 : ** badly defined in cmf
+gflxR8Fill       + cmf : APER_FILL_8      
+gflxR9           + cmf : APER_FLUX_9	  
+gflxR9Err        + cmf : APER_FLUX_ERR_9  
+gflxR9Std        - cmf : APER_FLUX_STDEV_9 : ** badly defined in cmf
+gflxR9Fill       + cmf : APER_FILL_9      
+gflxR10          - cmf : APER_FLUX_10	     ** does not exist in cmf
+gflxR10Err       - cmf : APER_FLUX_ERR_10    ** does not exist in cmf
+gflxR10Std       - cmf : APER_FLUX_STDEV_10  ** does not exist in cmf
+gflxR10Fill      - cmf : APER_FILL_10        ** does not exist in cmf
Index: /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackApFlxFullC1
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackApFlxFullC1	(revision 37246)
+++ /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackApFlxFullC1	(revision 37246)
@@ -0,0 +1,55 @@
+
+objID            dimensionless  BIGINT  8       NA      ODM object identifier
+ippObjID         dimensionless  BIGINT  8       NA      object ID generated by IPP
+randomStackObjID dimensionless  BIGINT  8       NA      random stack id
+stackDetectRowID dimensionless  BIGINT  8       NA      identifies which of up to 5 possible stackdetctions this Row refers to: Primary, up to 3 Secondary, 1 best  
+primaryDetection dimensionless  TINYINT 1       255     identifies if this row is a primary stack detection. True about 80% of time. 
+bestDetection    dimensionless  TINYINT 1       255     identifies if this row is a best detection or not. Also set if only a primary detection exists.   
+--                                                      the Primary Dectection, 0 to 3 possible secondary dectections, and the "best" per filter.  
+-------------------------------------------------------- replicate below for all filters (grizy)
+gippDetectID    dimensionless   BIGINT  8       NA      ipp detect identifier
+gstackDetectID  dimensionless   BIGINT  8       NA      ODM detection identifier
+gstackMetaID    dimensionless   BIGINT  8       NA      stack identifier
+----------------------------------------------------------------------------------------
+gc1flxR1        Jy              REAL    4       -999    Flux inside r = 1
+gc1flxR1Err     Jy              REAL    4       -999    estimated error is c1flxR1
+gc1flxR1Std     Jy              REAL    4       -999    estimated standard deviation in c1flxR1
+gc1flxR1Fill    dimensionless   REAL    4       -999    estimated filling factor at R1
+gc1flxR2        Jy              REAL    4       -999    Flux inside r = 2
+gc1flxR2Err     Jy              REAL    4       -999    estimated error is c1flxR2
+gc1flxR2Std     Jy              REAL    4       -999    estimated standard deviation in c1flxR2
+gc1flxR2Fill    dimensionless   REAL    4       -999    estimated filling factor at R1
+gc1flxR3        Jy              REAL    4       -999    Flux inside r = 3
+gc1flxR3Err     Jy              REAL    4       -999    estimated error is c1flxR3
+gc1flxR3Std     Jy              REAL    4       -999    estimated standard deviation in c1flxR3
+gc1flxR3Fill    dimensionless   REAL    4       -999    estimated filling factor at R3
+gc1flxR4        Jy              REAL    4       -999    Flux inside r = 4
+gc1flxR4Err     Jy              REAL    4       -999    estimated error is c1flxR4
+gc1flxR4Std     Jy              REAL    4       -999    estimated standard deviation in c1flxR4
+gc1flxR4Fill    dimensionless   REAL    4       -999    estimated filling factor at R4
+gc1flxR5        Jy              REAL    4       -999    Flux inside r = 5
+gc1flxR5Err     Jy              REAL    4       -999    estimated error is c1flxR5
+gc1flxR5Std     Jy              REAL    4       -999    estimated standard deviation in c1flxR5
+gc1flxR5Fill    dimensionless   REAL    4       -999    estimated filling factor at R5
+gc1flxR6        Jy              REAL    4       -999    Flux inside r = 6
+gc1flxR6Err     Jy              REAL    4       -999    estimated error is c1flxR6
+gc1flxR6Std     Jy              REAL    4       -999    estimated standard deviation in c1flxR6
+gc1flxR6Fill    dimensionless   REAL    4       -999    estimated filling factor at R6
+gc1flxR7        Jy              REAL    4       -999    Flux inside r = 7
+gc1flxR7Err     Jy              REAL    4       -999    estimated error is c1flxR7
+gc1flxR7Std     Jy              REAL    4       -999    estimated standard deviation in c1flxR7
+gc1flxR7Fill    dimensionless   REAL    4       -999    estimated filling factor at R7
+gc1flxR8        Jy              REAL    4       -999    Flux inside r = 8
+gc1flxR8Err     Jy              REAL    4       -999    estimated error is c1flxR8
+gc1flxR8Std     Jy              REAL    4       -999    estimated standard deviation in c1flxR8
+gc1flxR8Fill    dimensionless   REAL    4       -999    estimated filling factor at R8
+gc1flxR9        Jy              REAL    4       -999    Flux inside r = 9
+gc1flxR9Err     Jy              REAL    4       -999    estimated error is c1flxR9
+gc1flxR9Std     Jy              REAL    4       -999    estimated standard deviation in c1flxR9
+gc1flxR9Fill    dimensionless   REAL    4       -999    estimated filling factor at R9
+gc1flxR10       Jy              REAL    4       -999    Flux inside r = 10
+gc1flxR10Err    Jy              REAL    4       -999    estimated error is c1flxR10
+gc1flxR10Std    Jy              REAL    4       -999    estimated standard deviation in c1flxR10
+gc1flxR10Fill   dimensionless   REAL    4       -999    estimated filling factor at R10
+
+
Index: /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackApFlxFullC1.txt
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackApFlxFullC1.txt	(revision 37246)
+++ /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackApFlxFullC1.txt	(revision 37246)
@@ -0,0 +1,53 @@
+
+objID            + from StackObjectThin			      	      
+ippObjID         + from StackObjectThin			      	      
+randomStackObjID + from StackObjectThin			      	      
+stackDetectRowID - PSPS					      	      
+primaryDetection - from StackObjectThin NOT YET TESTED		      
+bestDetection    - from StackObjectThin CANNOT BE SET until after PV3 
+--               
+---------------- 
+gippDetectID     + from StackObjectThin 
+gstackDetectID   + from StackObjectThin 
+gstackMetaID     + from StackObjectThin 
+---------------- 
+gc1flxR1         + cmf : APER_FLUX_1	  
+gc1flxR1Err      + cmf : APER_FLUX_ERR_1  
+gc1flxR1Std      - cmf : APER_FLUX_STDEV_1 : ** badly defined in cmf
+gc1flxR1Fill     + cmf : APER_FILL_1      
+gc1flxR2         + cmf : APER_FLUX_2	  
+gc1flxR2Err      + cmf : APER_FLUX_ERR_2  
+gc1flxR2Std      - cmf : APER_FLUX_STDEV_2 : ** badly defined in cmf
+gc1flxR2Fill     + cmf : APER_FILL_2      
+gc1flxR3         + cmf : APER_FLUX_3	  
+gc1flxR3Err      + cmf : APER_FLUX_ERR_3  
+gc1flxR3Std      - cmf : APER_FLUX_STDEV_3 : ** badly defined in cmf
+gc1flxR3Fill     + cmf : APER_FILL_3      
+gc1flxR4         + cmf : APER_FLUX_4	  
+gc1flxR4Err      + cmf : APER_FLUX_ERR_4  
+gc1flxR4Std      - cmf : APER_FLUX_STDEV_4 : ** badly defined in cmf
+gc1flxR4Fill     + cmf : APER_FILL_4      
+gc1flxR5         + cmf : APER_FLUX_5	  
+gc1flxR5Err      + cmf : APER_FLUX_ERR_5  
+gc1flxR5Std      - cmf : APER_FLUX_STDEV_5 : ** badly defined in cmf
+gc1flxR5Fill     + cmf : APER_FILL_5      
+gc1flxR6         + cmf : APER_FLUX_6	  
+gc1flxR6Err      + cmf : APER_FLUX_ERR_6  
+gc1flxR6Std      - cmf : APER_FLUX_STDEV_6 : ** badly defined in cmf
+gc1flxR6Fill     + cmf : APER_FILL_6      
+gc1flxR7         + cmf : APER_FLUX_7	  
+gc1flxR7Err      + cmf : APER_FLUX_ERR_7  
+gc1flxR7Std      - cmf : APER_FLUX_STDEV_7 : ** badly defined in cmf
+gc1flxR7Fill     + cmf : APER_FILL_7      
+gc1flxR8         + cmf : APER_FLUX_8	  
+gc1flxR8Err      + cmf : APER_FLUX_ERR_8  
+gc1flxR8Std      - cmf : APER_FLUX_STDEV_8 : ** badly defined in cmf
+gc1flxR8Fill     + cmf : APER_FILL_8      
+gc1flxR9         + cmf : APER_FLUX_9	  
+gc1flxR9Err      + cmf : APER_FLUX_ERR_9  
+gc1flxR9Std      - cmf : APER_FLUX_STDEV_9 : ** badly defined in cmf
+gc1flxR9Fill     + cmf : APER_FILL_9      
+gc1flxR10        - cmf : APER_FLUX_10	     ** does not exist in cmf
+gc1flxR10Err     - cmf : APER_FLUX_ERR_10    ** does not exist in cmf
+gc1flxR10Std     - cmf : APER_FLUX_STDEV_10  ** does not exist in cmf
+gc1flxR10Fill    - cmf : APER_FILL_10        ** does not exist in cmf
Index: /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackApFlxFullC2
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackApFlxFullC2	(revision 37246)
+++ /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackApFlxFullC2	(revision 37246)
@@ -0,0 +1,55 @@
+
+objID            dimensionless  BIGINT  8       NA      ODM object identifier
+ippObjID         dimensionless  BIGINT  8       NA      object ID generated by IPP
+randomStackObjID dimensionless  BIGINT  8       NA      random stack id
+stackDetectRowID dimensionless  BIGINT  8       NA      identifies which of up to 5 possible stackdetctions this Row refers to: Primary, up to 3 Secondary, 1 best  
+primaryDetection dimensionless  TINYINT 1       255     identifies if this row is a primary stack detection. True about 80% of time. 
+bestDetection    dimensionless  TINYINT 1       255     identifies if this row is a best detection or not. Also set if only a primary detection exists.   
+--                                                      the Primary Dectection, 0 to 3 possible secondary dectections, and the "best" per filter.  
+-------------------------------------------------------- replicate below for all filters (grizy)
+gippDetectID    dimensionless   BIGINT  8       NA      ipp detect identifier
+gstackDetectID  dimensionless   BIGINT  8       NA      ODM detection identifier
+gstackMetaID    dimensionless   BIGINT  8       NA      stack identifier
+----------------------------------------------------------------------------------------
+gc2flxR1        Jy              REAL    4       -999    Flux inside r = 1
+gc2flxR1Err     Jy              REAL    4       -999    estimated error is c2flxR1
+gc2flxR1Std     Jy              REAL    4       -999    estimated standard deviation in c2flxR1
+gc2flxR1Fill    dimensionless   REAL    4       -999    estimated filling factor at R1
+gc2flxR2        Jy              REAL    4       -999    Flux inside r = 2
+gc2flxR2Err     Jy              REAL    4       -999    estimated error is c2flxR2
+gc2flxR2Std     Jy              REAL    4       -999    estimated standard deviation in c2flxR2
+gc2flxR2Fill    dimensionless   REAL    4       -999    estimated filling factor at R1
+gc2flxR3        Jy              REAL    4       -999    Flux inside r = 3
+gc2flxR3Err     Jy              REAL    4       -999    estimated error is c2flxR3
+gc2flxR3Std     Jy              REAL    4       -999    estimated standard deviation in c2flxR3
+gc2flxR3Fill    dimensionless   REAL    4       -999    estimated filling factor at R3
+gc2flxR4        Jy              REAL    4       -999    Flux inside r = 4
+gc2flxR4Err     Jy              REAL    4       -999    estimated error is c2flxR4
+gc2flxR4Std     Jy              REAL    4       -999    estimated standard deviation in c2flxR4
+gc2flxR4Fill    dimensionless   REAL    4       -999    estimated filling factor at R4
+gc2flxR5        Jy              REAL    4       -999    Flux inside r = 5
+gc2flxR5Err     Jy              REAL    4       -999    estimated error is c2flxR5
+gc2flxR5Std     Jy              REAL    4       -999    estimated standard deviation in c2flxR5
+gc2flxR5Fill    dimensionless   REAL    4       -999    estimated filling factor at R5
+gc2flxR6        Jy              REAL    4       -999    Flux inside r = 6
+gc2flxR6Err     Jy              REAL    4       -999    estimated error is c2flxR6
+gc2flxR6Std     Jy              REAL    4       -999    estimated standard deviation in c2flxR6
+gc2flxR6Fill    dimensionless   REAL    4       -999    estimated filling factor at R6
+gc2flxR7        Jy              REAL    4       -999    Flux inside r = 7
+gc2flxR7Err     Jy              REAL    4       -999    estimated error is c2flxR7
+gc2flxR7Std     Jy              REAL    4       -999    estimated standard deviation in c2flxR7
+gc2flxR7Fill    dimensionless   REAL    4       -999    estimated filling factor at R7
+gc2flxR8        Jy              REAL    4       -999    Flux inside r = 8
+gc2flxR8Err     Jy              REAL    4       -999    estimated error is c2flxR8
+gc2flxR8Std     Jy              REAL    4       -999    estimated standard deviation in c2flxR8
+gc2flxR8Fill    dimensionless   REAL    4       -999    estimated filling factor at R8
+gc2flxR9        Jy              REAL    4       -999    Flux inside r = 9
+gc2flxR9Err     Jy              REAL    4       -999    estimated error is c2flxR9
+gc2flxR9Std     Jy              REAL    4       -999    estimated standard deviation in c2flxR9
+gc2flxR9Fill    dimensionless   REAL    4       -999    estimated filling factor at R9
+gc2flxR10       Jy              REAL    4       -999    Flux inside r = 10
+gc2flxR10Err    Jy              REAL    4       -999    estimated error is c2flxR10
+gc2flxR10Std    Jy              REAL    4       -999    estimated standard deviation in c2flxR10
+gc2flxR10Fill   dimensionless   REAL    4       -999    estimated filling factor at R10
+
+-- repeat for other filters with appropriate leading prefex.
Index: /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackApFlxFullC2.txt
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackApFlxFullC2.txt	(revision 37246)
+++ /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackApFlxFullC2.txt	(revision 37246)
@@ -0,0 +1,53 @@
+
+objID            + from StackObjectThin			      	      
+ippObjID         + from StackObjectThin			      	      
+randomStackObjID + from StackObjectThin			      	      
+stackDetectRowID - PSPS					      	      
+primaryDetection - from StackObjectThin NOT YET TESTED		      
+bestDetection    - from StackObjectThin CANNOT BE SET until after PV3 
+--               
+---------------- 
+gippDetectID     + from StackObjectThin 
+gstackDetectID   + from StackObjectThin 
+gstackMetaID     + from StackObjectThin 
+---------------- 
+gc2flxR1         + cmf : APER_FLUX_1	  
+gc2flxR1Err      + cmf : APER_FLUX_ERR_1  
+gc2flxR1Std      - cmf : APER_FLUX_STDEV_1 : ** badly defined in cmf
+gc2flxR1Fill     + cmf : APER_FILL_1      
+gc2flxR2         + cmf : APER_FLUX_2	  
+gc2flxR2Err      + cmf : APER_FLUX_ERR_2  
+gc2flxR2Std      - cmf : APER_FLUX_STDEV_2 : ** badly defined in cmf
+gc2flxR2Fill     + cmf : APER_FILL_2      
+gc2flxR3         + cmf : APER_FLUX_3	  
+gc2flxR3Err      + cmf : APER_FLUX_ERR_3  
+gc2flxR3Std      - cmf : APER_FLUX_STDEV_3 : ** badly defined in cmf
+gc2flxR3Fill     + cmf : APER_FILL_3      
+gc2flxR4         + cmf : APER_FLUX_4	  
+gc2flxR4Err      + cmf : APER_FLUX_ERR_4  
+gc2flxR4Std      - cmf : APER_FLUX_STDEV_4 : ** badly defined in cmf
+gc2flxR4Fill     + cmf : APER_FILL_4      
+gc2flxR5         + cmf : APER_FLUX_5	  
+gc2flxR5Err      + cmf : APER_FLUX_ERR_5  
+gc2flxR5Std      - cmf : APER_FLUX_STDEV_5 : ** badly defined in cmf
+gc2flxR5Fill     + cmf : APER_FILL_5      
+gc2flxR6         + cmf : APER_FLUX_6	  
+gc2flxR6Err      + cmf : APER_FLUX_ERR_6  
+gc2flxR6Std      - cmf : APER_FLUX_STDEV_6 : ** badly defined in cmf
+gc2flxR6Fill     + cmf : APER_FILL_6      
+gc2flxR7         + cmf : APER_FLUX_7	  
+gc2flxR7Err      + cmf : APER_FLUX_ERR_7  
+gc2flxR7Std      - cmf : APER_FLUX_STDEV_7 : ** badly defined in cmf
+gc2flxR7Fill     + cmf : APER_FILL_7      
+gc2flxR8         + cmf : APER_FLUX_8	  
+gc2flxR8Err      + cmf : APER_FLUX_ERR_8  
+gc2flxR8Std      - cmf : APER_FLUX_STDEV_8 : ** badly defined in cmf
+gc2flxR8Fill     + cmf : APER_FILL_8      
+gc2flxR9         + cmf : APER_FLUX_9	  
+gc2flxR9Err      + cmf : APER_FLUX_ERR_9  
+gc2flxR9Std      - cmf : APER_FLUX_STDEV_9 : ** badly defined in cmf
+gc2flxR9Fill     + cmf : APER_FILL_9      
+gc2flxR10        - cmf : APER_FLUX_10	     ** does not exist in cmf
+gc2flxR10Err     - cmf : APER_FLUX_ERR_10    ** does not exist in cmf
+gc2flxR10Std     - cmf : APER_FLUX_STDEV_10  ** does not exist in cmf
+gc2flxR10Fill    - cmf : APER_FILL_10        ** does not exist in cmf
Index: unk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackModelFit
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackModelFit	(revision 37245)
+++ 	(revision )
@@ -1,209 +1,0 @@
-
-objID            dimensionless  BIGINT  8       NA      ODM object identifier
-gcObjID		 dimensionless	BIGINT	8	NA 	ODM galactic coordinates identifier
-ippObjID         dimensionless  BIGINT  8       NA      ipp object identifier
-surveyID         dimensionless  TINYINT 1       NA      survey flag identifier
-skyCellID        dimensionless  REAL    4       -999    single float giving PrimaryCell.SkyCell identifier 
-randomStackObjID dimensionless  BIGINT  8       NA      random stack id
-stackDetectRowID dimensionless  BIGINT  8       NA      identifies which of up to 5 possible stackdetctions this Row refers to: Primary, up to 3 Secondary, 1 best  
-primaryDetection dimensionless  TINYINT 1       255     identifies if this row is a primary stack detection. True about 80% of time. 
-bestDetection    dimensionless  TINYINT 1       255     identifies if this row is a best detection or not. Also set if only a primary detection exists.   
---                                                      the Primary Dectection, 0 to 3 possible secondary dectections, and the "best" per filter.  
-dvoRegionID      dimensionless  INT     4       -999    identifier to dvo spatial region
-dataRelease      dimensionless  TINYINT 1       NA      Data release when this table was loaded
--------------------------------------------------------- replicate below for all filters (grizy)
-gS2             dimensionless   REAL    4       -999    (un)smoothness (Cheng 2012, Simard 2002)
-glogRT		dimensionless   REAL    4       -999    total residual (from ellipcally symmetric model)
-glogRA		dimensionless   REAL    4       -999    asymmetric residual (from ellipcally symmetric model)
-glogC           dimensionless   REAL    4       -999    concentration index  (Petrosian R_50 / R_90)
-glogA           dimensionless   REAL    4       -999    log of asymmetry index (Gyory & Bell 2010)
-gbumpy          dimensionless   REAL    4       -999    Blakeslee bumpiness
-ghalfLightRad   arcsec          REAL    4       -999    half-light radius
--------------------------------------------------------- replicate below for all filters (grizy)
-gippDetectID    dimensionless   BIGINT  8       NA      ipp detect identifier
-gstackDetectID  dimensionless   BIGINT  8       NA      ODM detection identifier
-gstackMetaID    dimensionless   BIGINT  8       NA      stack identifier
-----------------------------------------------------------------------------------------
-gdeVRadius      arcsec          REAL    4       -999    deVaucouleurs radius
-gdeVRadiusErr   arcsec          REAL    4       -999    estimated error in deVaucouleurs radius
-gdeVFlux        adu/seconds     REAL    4       -999    deVaucouleurs flux
-gdeVFluxErr     adu/seconds     REAL    4       -999    estimated error in deVaucouleurs flux
-gdeVAb          dimensionless   REAL    4       -999    deVaucoulerus axis ratio
-gdeVAbErr       dimensionless   REAL    4       -999    estimated error in deVaucoulerus axis ratio
-gdeVPhi         degrees         REAL    4       -999    estmated phi of deVaucouleurs axis. Degrees East of North.
-gdeVPhiErr      degrees         REAL    4       -999    estmated error of phi of deVaucouleurs axis
-graDeVOff       arcsec          REAL    4       -999    Offset in RA of deVaucouleurs fit from PSF RA
-gdecDeVOff      arcsec          REAL    4       -999    Offset in DEC of deVaucouleurs fit from PSF DEC
-graDeVOffErr    arcsec          REAL    4       -999    estimated error in ra offset
-gdecDeVOffErr   arcsec          REAL    4       -999    estimated error in dec offset
-gdeVCf          dimensionless   REAL    4       -999    deVaucouleurs fit coverage factor
-gdeVLikelihood  dimensionless   REAL    4       -999    deVaucouleurs fit likelihood factor
-----------------------------------------------------------------------------------------
-gexpRadius      arcsec          REAL    4       -999    Exponential fit radius
-gexpRadiusErr   arcsec          REAL    4       -999    estimated error in Exponential fit radius
-gexpFlux        adu/seconds     REAL    4       -999    Exponential fit flux
-gexpFluxErr     adu/seconds     REAL    4       -999    estimated error in expFlux
-gexpAb          dimensionless   REAL    4       -999    Exponential fit axis ratio
-gexpAbErr       dimensionless   REAL    4       -999    estimated error in Exponential fit axis ratio
-gexpPhi         degrees         REAL    4       -999    estmated phi of Exponential axis
-gexpPhiErr      degrees         REAL    4       -999    estmated error of phi of Exponential axis
-graExpOff       dimensionless   REAL    4       -999    Offset in RA of Exponential fit from PSF RA
-gdecExpOff      dimensionless   REAL    4       -999    Offset in DEC of Exponential fit from PSF DEC
-graExpOffErr    dimensionless   REAL    4       -999    estimated error in raExpOff
-gdecExpOffErr   dimensionless   REAL    4       -999    estimated error in decExpOff
-gexpCf          dimensionless   REAL    4       -999    Exponential fit coverage factor
-gexpLikelihood  dimensionless   REAL    4       -999    Exponential fit likelihood factor
----------------------------------------------------------------------------------------
-gserRadius      arcsec          REAL    4       -999    Sersic radius
-gserRadiusErr   arcsed          REAL    4       -999    estimated error in Sersic radius
-gserFlux        adu/seconds     REAL    4       -999    Sersic Flux
-gserFluxErr     adu/seconds     REAL    4       -999    estimated error in serFlux
-gserAb          dimensionless   REAL    4       -999    Sersic axis ratio
-gserAbErr       dimensionlessn  REAL    4       -999    estimated error in Sersic axis ratio
-gserNu          dimensionlessn  REAL    4       -999    Sersic index
-gserNuErr       diemensionless  REAL    4       -999    estimated error in Sersic index
-gserPhi         degrees         REAL    4       -999    estmated phi of Sersic axis
-gserPhiErr      degrees         REAL    4       -999    estmated error of phi of Sersic axis
-graSerOff       dimensionless   REAL    4       -999    Offset in RA of Sersic fit from PSF RA
-gdecSerOff      dimensionless   REAL    4       -999    Offset in DEC of Sersic fit from PSF DEC
-graSerOffErr    dimensionless   REAL    4       -999    estimated error in raSerOff
-gdecSerOffErr   dimensionless   REAL    4       -999    estimated error in decSerOff
-gserCf          dimensionless   REAL    4       -999    Sersic fit coverage factor
-gserLikelihood  dimensionless   REAL    4       -999    Sersic fit likelihood factor
----------------------------------------------------------------------------------------
-gpetRadius      pixels          REAL    4       -999    Petrosian radius
-gpetRadiusErr   pixels          REAL    4       -999    estimated error inPetrosian radius
-gpetFlux        adu/sec         REAL    4       -999    Petrosian Flux
-gpetFluxErr     adu/sec         REAL    4       -999    estimated error in petFlux
-gpetR50         pixels          REAL    4       -999    Petrosian radius at 50% light
-gpetR50Err      pixels          REAL    4       -999    estimated error inPetrosian radius at 50% light
-gpetR90         pixels          REAL    4       -999    Petrosian radius at 90% light
-gpetR90Err      pixels          REAL    4       -999    estimated error in Petrosian radius at 90% light
-gpetCf          dimensionless   REAL    4       -999    Petrosian fit coverage factor
---------------------------------------------------------unconvolved
-gflxR1          adu/seconds     REAL    4       -999    Flux inside r = 1
-gflxR1Err       adu/seconds     REAL    4       -999    estimated error is flxR1
-gflxR1Std       adu/seconds     REAL    4       -999    estimated standard deviation in flxR1
-gflxR1Fill      dimensionless   REAL    4       -999    estimated filling factor at R1
-gflxR2          adu/seconds     REAL    4       -999    Flux inside r = 2
-gflxR2Err       adu/seconds     REAL    4       -999    estimated error is flxR2
-gflxR2Std       adu/seconds     REAL    4       -999    estimated standard deviation in flxR2
-gflxR2Fill      dimensionless   REAL    4       -999    estimated filling factor at R1
-gflxR3          adu/seconds     REAL    4       -999    Flux inside r = 3
-gflxR3Err       adu/seconds     REAL    4       -999    estimated error is flxR3
-gflxR3Std       adu/seconds     REAL    4       -999    estimated standard deviation in flxR3
-gflxR3Fill      dimensionless   REAL    4       -999    estimated filling factor at R3
-gflxR4          adu/seconds     REAL    4       -999    Flux inside r = 4
-gflxR4Err       adu/seconds     REAL    4       -999    estimated error is flxR4
-gflxR4Std       adu/seconds     REAL    4       -999    estimated standard deviation in flxR4
-gflxR4Fill      dimensionless   REAL    4       -999    estimated filling factor at R4
-gflxR5          adu/seconds     REAL    4       -999    Flux inside r = 5
-gflxR5Err       adu/seconds     REAL    4       -999    estimated error is flxR5
-gflxR5Std       adu/seconds     REAL    4       -999    estimated standard deviation in flxR5
-gflxR5Fill      dimensionless   REAL    4       -999    estimated filling factor at R5
-gflxR6          adu/seconds     REAL    4       -999    Flux inside r = 6
-gflxR6Err       adu/seconds     REAL    4       -999    estimated error is flxR6
-gflxR6Std       adu/seconds     REAL    4       -999    estimated standard deviation in flxR6
-gflxR6Fill      dimensionless   REAL    4       -999    estimated filling factor at R6
-gflxR7          adu/seconds     REAL    4       -999    Flux inside r = 7
-gflxR7Err       adu/seconds     REAL    4       -999    estimated error is flxR7
-gflxR7Std       adu/seconds     REAL    4       -999    estimated standard deviation in flxR7
-gflxR7Fill      dimensionless   REAL    4       -999    estimated filling factor at R7
-gflxR8          adu/seconds     REAL    4       -999    Flux inside r = 8
-gflxR8Err       adu/seconds     REAL    4       -999    estimated error is flxR8
-gflxR8Std       adu/seconds     REAL    4       -999    estimated standard deviation in flxR8
-gflxR8Fill      dimensionless   REAL    4       -999    estimated filling factor at R8
-gflxR9          adu/seconds     REAL    4       -999    Flux inside r = 9
-gflxR9Err       adu/seconds     REAL    4       -999    estimated error is flxR9
-gflxR9Std       adu/seconds     REAL    4       -999    estimated standard deviation in flxR9
-gflxR9Fill      dimensionless   REAL    4       -999    estimated filling factor at R9
-gflxR10         adu/seconds     REAL    4       -999    Flux inside r = 10
-gflxR10Err      adu/seconds     REAL    4       -999    estimated error is flxR10
-gflxR10Std      adu/seconds     REAL    4       -999    estimated standard deviation in flxR10
-gflxR10Fill     dimensionless   REAL    4       -999    estimated filling factor at R10
-----------------------------------------------------    convolved across all bands to 6 or 8 pixels
-gc1flxR1        adu/seconds     REAL    4       -999    Flux inside r = 1
-gc1flxR1Err     adu/seconds     REAL    4       -999    estimated error is c1flxR1
-gc1flxR1Std     adu/seconds     REAL    4       -999    estimated standard deviation in c1flxR1
-gc1flxR1Fill    dimensionless   REAL    4       -999    estimated filling factor at R1
-gc1flxR2        adu/seconds     REAL    4       -999    Flux inside r = 2
-gc1flxR2Err     adu/seconds     REAL    4       -999    estimated error is c1flxR2
-gc1flxR2Std     adu/seconds     REAL    4       -999    estimated standard deviation in c1flxR2
-gc1flxR2Fill    dimensionless   REAL    4       -999    estimated filling factor at R1
-gc1flxR3        adu/seconds     REAL    4       -999    Flux inside r = 3
-gc1flxR3Err     adu/seconds     REAL    4       -999    estimated error is c1flxR3
-gc1flxR3Std     adu/seconds     REAL    4       -999    estimated standard deviation in c1flxR3
-gc1flxR3Fill    dimensionless   REAL    4       -999    estimated filling factor at R3
-gc1flxR4        adu/seconds     REAL    4       -999    Flux inside r = 4
-gc1flxR4Err     adu/seconds     REAL    4       -999    estimated error is c1flxR4
-gc1flxR4Std     adu/seconds     REAL    4       -999    estimated standard deviation in c1flxR4
-gc1flxR4Fill    dimensionless   REAL    4       -999    estimated filling factor at R4
-gc1flxR5        adu/seconds     REAL    4       -999    Flux inside r = 5
-gc1flxR5Err     adu/seconds     REAL    4       -999    estimated error is c1flxR5
-gc1flxR5Std     adu/seconds     REAL    4       -999    estimated standard deviation in c1flxR5
-gc1flxR5Fill    dimensionless   REAL    4       -999    estimated filling factor at R5
-gc1flxR6        adu/seconds     REAL    4       -999    Flux inside r = 6
-gc1flxR6Err     adu/seconds     REAL    4       -999    estimated error is c1flxR6
-gc1flxR6Std     adu/seconds     REAL    4       -999    estimated standard deviation in c1flxR6
-gc1flxR6Fill    dimensionless   REAL    4       -999    estimated filling factor at R6
-gc1flxR7        adu/seconds     REAL    4       -999    Flux inside r = 7
-gc1flxR7Err     adu/seconds     REAL    4       -999    estimated error is c1flxR7
-gc1flxR7Std     adu/seconds     REAL    4       -999    estimated standard deviation in c1flxR7
-gc1flxR7Fill    dimensionless   REAL    4       -999    estimated filling factor at R7
-gc1flxR8        adu/seconds     REAL    4       -999    Flux inside r = 8
-gc1flxR8Err     adu/seconds     REAL    4       -999    estimated error is c1flxR8
-gc1flxR8Std     adu/seconds     REAL    4       -999    estimated standard deviation in c1flxR8
-gc1flxR8Fill    dimensionless   REAL    4       -999    estimated filling factor at R8
-gc1flxR9        adu/seconds     REAL    4       -999    Flux inside r = 9
-gc1flxR9Err     adu/seconds     REAL    4       -999    estimated error is c1flxR9
-gc1flxR9Std     adu/seconds     REAL    4       -999    estimated standard deviation in c1flxR9
-gc1flxR9Fill    dimensionless   REAL    4       -999    estimated filling factor at R9
-gc1flxR10       adu/seconds     REAL    4       -999    Flux inside r = 10
-gc1flxR10Err    adu/seconds     REAL    4       -999    estimated error is c1flxR10
-gc1flxR10Std    adu/seconds     REAL    4       -999    estimated standard deviation in c1flxR10
-gc1flxR10Fill   dimensionless   REAL    4       -999    estimated filling factor at R10
-gc2flxR1        adu/seconds     REAL    4       -999    Flux inside r = 1
-gc2flxR1Err     adu/seconds     REAL    4       -999    estimated error is c2flxR1
-gc2flxR1Std     adu/seconds     REAL    4       -999    estimated standard deviation in c2flxR1
-gc2flxR1Fill    dimensionless   REAL    4       -999    estimated filling factor at R1
-gc2flxR2        adu/seconds     REAL    4       -999    Flux inside r = 2
-gc2flxR2Err     adu/seconds     REAL    4       -999    estimated error is c2flxR2
-gc2flxR2Std     adu/seconds     REAL    4       -999    estimated standard deviation in c2flxR2
-gc2flxR2Fill    dimensionless   REAL    4       -999    estimated filling factor at R1
-gc2flxR3        adu/seconds     REAL    4       -999    Flux inside r = 3
-gc2flxR3Err     adu/seconds     REAL    4       -999    estimated error is c2flxR3
-gc2flxR3Std     adu/seconds     REAL    4       -999    estimated standard deviation in c2flxR3
-gc2flxR3Fill    dimensionless   REAL    4       -999    estimated filling factor at R3
-gc2flxR4        adu/seconds     REAL    4       -999    Flux inside r = 4
-gc2flxR4Err     adu/seconds     REAL    4       -999    estimated error is c2flxR4
-gc2flxR4Std     adu/seconds     REAL    4       -999    estimated standard deviation in c2flxR4
-gc2flxR4Fill    dimensionless   REAL    4       -999    estimated filling factor at R4
-gc2flxR5        adu/seconds     REAL    4       -999    Flux inside r = 5
-gc2flxR5Err     adu/seconds     REAL    4       -999    estimated error is c2flxR5
-gc2flxR5Std     adu/seconds     REAL    4       -999    estimated standard deviation in c2flxR5
-gc2flxR5Fill    dimensionless   REAL    4       -999    estimated filling factor at R5
-gc2flxR6        adu/seconds     REAL    4       -999    Flux inside r = 6
-gc2flxR6Err     adu/seconds     REAL    4       -999    estimated error is c2flxR6
-gc2flxR6Std     adu/seconds     REAL    4       -999    estimated standard deviation in c2flxR6
-gc2flxR6Fill    dimensionless   REAL    4       -999    estimated filling factor at R6
-gc2flxR7        adu/seconds     REAL    4       -999    Flux inside r = 7
-gc2flxR7Err     adu/seconds     REAL    4       -999    estimated error is c2flxR7
-gc2flxR7Std     adu/seconds     REAL    4       -999    estimated standard deviation in c2flxR7
-gc2flxR7Fill    dimensionless   REAL    4       -999    estimated filling factor at R7
-gc2flxR8        adu/seconds     REAL    4       -999    Flux inside r = 8
-gc2flxR8Err     adu/seconds     REAL    4       -999    estimated error is c2flxR8
-gc2flxR8Std     adu/seconds     REAL    4       -999    estimated standard deviation in c2flxR8
-gc2flxR8Fill    dimensionless   REAL    4       -999    estimated filling factor at R8
-gc2flxR9        adu/seconds     REAL    4       -999    Flux inside r = 9
-gc2flxR9Err     adu/seconds     REAL    4       -999    estimated error is c2flxR9
-gc2flxR9Std     adu/seconds     REAL    4       -999    estimated standard deviation in c2flxR9
-gc2flxR9Fill    dimensionless   REAL    4       -999    estimated filling factor at R9
-gc2flxR10       adu/seconds     REAL    4       -999    Flux inside r = 10
-gc2flxR10Err    adu/seconds     REAL    4       -999    estimated error is c2flxR10
-gc2flxR10Std    adu/seconds     REAL    4       -999    estimated standard deviation in c2flxR10
-gc2flxR10Fill   dimensionless   REAL    4       -999    estimated filling factor at R10
-
--- repeat for other filters with appropriate leading prefex.
-
--- [728 byte/filter/obj + 44 byte/obj]
-
Index: /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackModelFitDeV
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackModelFitDeV	(revision 37245)
+++ /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackModelFitDeV	(revision 37246)
@@ -1,7 +1,5 @@
 
 objID            dimensionless  BIGINT  8       NA      ODM object identifier
-gcObjID		 dimensionless	BIGINT	8	NA 	ODM galactic coordinates identifier
-surveyID         dimensionless  TINYINT 1       NA      survey flag identifier
-skyCellID        dimensionless  REAL    4       -999    single float giving PrimaryCell.SkyCell identifier 
+ippObjID         dimensionless  BIGINT  8       NA      object ID generated by IPP
 randomStackObjID dimensionless  BIGINT  8       NA      random stack id
 stackDetectRowID dimensionless  BIGINT  8       NA      identifies which of up to 5 possible stackdetctions this Row refers to: Primary, up to 3 Secondary, 1 best  
@@ -9,24 +7,21 @@
 bestDetection    dimensionless  TINYINT 1       255     identifies if this row is a best detection or not. Also set if only a primary detection exists.   
 --                                                      the Primary Dectection, 0 to 3 possible secondary dectections, and the "best" per filter.  
-dvoRegionID      dimensionless  INT     4       -999    identifier to dvo spatial region
-dataRelease      dimensionless  TINYINT 1       NA      Data release when this table was loaded
 -------------------------------------------------------- replicate below for all filters (grizy)
-ippObjID         dimensionless  BIGINT  8       NA      ipp object identifier
 gippDetectID    dimensionless   BIGINT  8       NA      ipp detect identifier
 gstackDetectID  dimensionless   BIGINT  8       NA      ODM detection identifier
 gstackMetaID    dimensionless   BIGINT  8       NA      stack identifier
 ----------------------------------------------------------------------------------------
-gdeVRadius      arcsec          REAL    4       -999    deVaucouleurs radius
-gdeVRadiusErr   arcsec          REAL    4       -999    estimated error in deVaucouleurs radius
-gdeVFlux        adu/seconds     REAL    4       -999    deVaucouleurs flux
-gdeVFluxErr     adu/seconds     REAL    4       -999    estimated error in deVaucouleurs flux
-gdeVAb          dimensionless   REAL    4       -999    deVaucoulerus axis ratio
-gdeVAbErr       dimensionless   REAL    4       -999    estimated error in deVaucoulerus axis ratio
-gdeVPhi         degrees         REAL    4       -999    estmated phi of deVaucouleurs axis. Degrees East of North.
-gdeVPhiErr      degrees         REAL    4       -999    estmated error of phi of deVaucouleurs axis
-graDeVOff       arcsec          REAL    4       -999    Offset in RA of deVaucouleurs fit from PSF RA
-gdecDeVOff      arcsec          REAL    4       -999    Offset in DEC of deVaucouleurs fit from PSF DEC
+gDeVRadius      arcsec          REAL    4       -999    DeVaucouleurs radius
+gDeVRadiusErr   arcsec          REAL    4       -999    estimated error in DeVaucouleurs radius
+gDeVMag         AB_mag          REAL    4       -999    DeVaucouleurs flux
+gDeVMagErr      AB_mag          REAL    4       -999    estimated error in DeVaucouleurs flux
+gDeVAb          dimensionless   REAL    4       -999    DeVaucoulerus axis ratio
+gDeVAbErr       dimensionless   REAL    4       -999    estimated error in DeVaucoulerus axis ratio
+gDeVPhi         degrees         REAL    4       -999    estmated phi of DeVaucouleurs axis. Degrees East of North.
+gDeVPhiErr      degrees         REAL    4       -999    estmated error of phi of DeVaucouleurs axis
+graDeVOff       arcsec          REAL    4       -999    Offset in RA of DeVaucouleurs fit from PSF RA
+gdecDeVOff      arcsec          REAL    4       -999    Offset in DEC of DeVaucouleurs fit from PSF DEC
 graDeVOffErr    arcsec          REAL    4       -999    estimated error in ra offset
 gdecDeVOffErr   arcsec          REAL    4       -999    estimated error in dec offset
-gdeVCf          dimensionless   REAL    4       -999    deVaucouleurs fit coverage factor
-gdeVLikelihood  dimensionless   REAL    4       -999    deVaucouleurs fit likelihood factor
+gDeVCf          dimensionless   REAL    4       -999    DeVaucouleurs fit coverage factor
+gDeVLikelihood  dimensionless   REAL    4       -999    DeVaucouleurs fit likelihood factor
Index: /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackModelFitDeV.txt
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackModelFitDeV.txt	(revision 37246)
+++ /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackModelFitDeV.txt	(revision 37246)
@@ -0,0 +1,28 @@
+
+objID            + from StackObjectThin			      
+ippObjID         + from StackObjectThin			      
+randomStackObjID + from StackObjectThin			      
+stackDetectRowID - PSPS					      
+primaryDetection - from StackObjectThin NOT YET TESTED		      
+bestDetection    - from StackObjectThin CANNOT BE SET until after PV3 
+--               
+---------------- 
+gippDetectID     + from StackObjectThin 
+gstackDetectID   + from StackObjectThin
+gstackMetaID     + from StackObjectThin
+---------------- 
+gDeVRadius       + cmf : EXT_WIDTH_MAJ
+gDeVRadiusErr    - cmf : EXT_WIDTH_MAJ_SIG ** NULL in cmf
+gDeVMag          + cmf : EXT_INST_MAG + 2.5log(exptime) + dvo.zp
+gDeVMagErr       + cmf : EXT_INST_MAG_SIG ** seems kind of small in CMF
+gDeVAb           + cmf : EXT_WIDTH_MAJ/EXT_WIDTH_MIN ** should this be Minor / Major?
+gDeVAbErr        - cmf : EXT_WIDTH_MIN_ERR
+gDeVPhi          + cmf : EXT_THETA
+gDeVPhiErr       - cmf : EXT_THETA_ERR
+gDeVRa           + cmf : use X_EXT and X_PSF, PLTSCALE to offset StackObjectThin.gra
+gDeVDec          + cmf : use Y_EXT and Y_PSF, PLTSCALE to offset StackObjectThin.gdec
+gDeVRaErr        + cmf : X_EXT_SIG * PLTSCALE					    
+gDeVDecErr       + cmf : Y_EXT_SIG * PLTSCALE					    
+gDeVCf           - ** I do not have a source for this in the CMF
+gDeVChisq        - cmf : EXT_CHISQ / EXT_NDOF
+-- gDeVLikelihood   - ** replace with chisq?
Index: /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackModelFitExp
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackModelFitExp	(revision 37245)
+++ /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackModelFitExp	(revision 37246)
@@ -1,7 +1,5 @@
 
 objID            dimensionless  BIGINT  8       NA      ODM object identifier
-gcObjID		 dimensionless	BIGINT	8	NA 	ODM galactic coordinates identifier
-surveyID         dimensionless  TINYINT 1       NA      survey flag identifier
-skyCellID        dimensionless  REAL    4       -999    single float giving PrimaryCell.SkyCell identifier 
+ippObjID         dimensionless  BIGINT  8       NA      object ID generated by IPP
 randomStackObjID dimensionless  BIGINT  8       NA      random stack id
 stackDetectRowID dimensionless  BIGINT  8       NA      identifies which of up to 5 possible stackdetctions this Row refers to: Primary, up to 3 Secondary, 1 best  
@@ -9,25 +7,22 @@
 bestDetection    dimensionless  TINYINT 1       255     identifies if this row is a best detection or not. Also set if only a primary detection exists.   
 --                                                      the Primary Dectection, 0 to 3 possible secondary dectections, and the "best" per filter.  
-dvoRegionID      dimensionless  INT     4       -999    identifier to dvo spatial region
-dataRelease      dimensionless  TINYINT 1       NA      Data release when this table was loaded
--------------------------------------------------------- replicate below for all filters (grizy)
-gippObjID         dimensionless  BIGINT  8       NA      ipp object identifier
+------------------------------------------------------- replicate below for all filters (grizy)
 gippDetectID    dimensionless   BIGINT  8       NA      ipp detect identifier
 gstackDetectID  dimensionless   BIGINT  8       NA      ODM detection identifier
 gstackMetaID    dimensionless   BIGINT  8       NA      stack identifier
 ----------------------------------------------------------------------------------------
-gexpRadius      arcsec          REAL    4       -999    Exponential fit radius
-gexpRadiusErr   arcsec          REAL    4       -999    estimated error in Exponential fit radius
-gexpFlux        adu/seconds     REAL    4       -999    Exponential fit flux
-gexpFluxErr     adu/seconds     REAL    4       -999    estimated error in expFlux
-gexpAb          dimensionless   REAL    4       -999    Exponential fit axis ratio
-gexpAbErr       dimensionless   REAL    4       -999    estimated error in Exponential fit axis ratio
-gexpPhi         degrees         REAL    4       -999    estmated phi of Exponential axis
-gexpPhiErr      degrees         REAL    4       -999    estmated error of phi of Exponential axis
-graExpOff       dimensionless   REAL    4       -999    Offset in RA of Exponential fit from PSF RA
-gdecExpOff      dimensionless   REAL    4       -999    Offset in DEC of Exponential fit from PSF DEC
-graExpOffErr    dimensionless   REAL    4       -999    estimated error in raExpOff
-gdecExpOffErr   dimensionless   REAL    4       -999    estimated error in decExpOff
-gexpCf          dimensionless   REAL    4       -999    Exponential fit coverage factor
-gexpLikelihood  dimensionless   REAL    4       -999    Exponential fit likelihood factor
-
+gExpRadius      arcsec          REAL    4       -999    Exponential fit radius
+gExpRadiusErr   arcsec          REAL    4       -999    estimated error in Exponential fit radius
+gExpMag         AB_mag          REAL    4       -999    Exponential fit flux
+gExpMagErr      AB_mag          REAL    4       -999    estimated error in expFlux
+gExpAb          dimensionless   REAL    4       -999    Exponential fit axis ratio (minor / major)
+gExpAbErr       dimensionless   REAL    4       -999    estimated error in Exponential fit axis ratio
+gExpPhi         degrees         REAL    4       -999    estmated phi of Exponential axis
+gExpPhiErr      degrees         REAL    4       -999    estmated error of phi of Exponential axis
+gExpRa          degrees         DOUBLE  8       -999    RA of Exponential fit
+gExpDec         degrees         DOUBLE  8       -999    DEC of Exponential fit
+gExpRaErr       arcsec          REAL    4       -999    estimated error in RA
+gExpDecErr      arcsec          REAL    4       -999    estimated error in DEC
+gExpCf          dimensionless   REAL    4       -999    Exponential fit coverage factor
+gExpChisq       dimensionless   REAL    4       -999    Exponential fit chi square 
+-- gExpLikelihood  dimensionless   REAL    4       -999    Exponential fit likelihood factor
Index: /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackModelFitExp.txt
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackModelFitExp.txt	(revision 37246)
+++ /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackModelFitExp.txt	(revision 37246)
@@ -0,0 +1,27 @@
+
+objID            + from StackObjectThin			      
+ippObjID         + from StackObjectThin			      
+randomStackObjID + from StackObjectThin			      
+stackDetectRowID - PSPS					      
+primaryDetection - from StackObjectThin NOT YET TESTED		      
+bestDetection    - from StackObjectThin CANNOT BE SET until after PV3 
+--               
+---------------- 
+gippDetectID     + from StackObjectThin 
+gstackDetectID   + from StackObjectThin
+gstackMetaID     + from StackObjectThin
+---------------- 
+gExpRadius       + cmf : EXT_WIDTH_MAJ
+gExpRadiusErr    - cmf : EXT_WIDTH_MAJ_SIG ** NULL in cmf
+gExpMag          + cmf : EXT_INST_MAG + 2.5log(exptime) + dvo.zp
+gExpMagErr       + cmf : EXT_INST_MAG_SIG ** seems kind of small in CMF
+gExpAb           + cmf : EXT_WIDTH_MIN/EXT_WIDTH_MAJ
+gExpAbErr        - cmf : EXT_WIDTH_MIN_ERR
+gExpPhi          + cmf : EXT_THETA ** in radians, not degrees (fixed, check)
+gExpPhiErr       - cmf : EXT_THETA_ERR
+gExpRa           + cmf : use X_EXT and X_PSF, PLTSCALE to offset StackObjectThin.gra
+gExpDec          + cmf : use Y_EXT and Y_PSF, PLTSCALE to offset StackObjectThin.gdec
+gExpRaErr        + cmf : X_EXT_SIG * PLTSCALE
+gExpDecErr       + cmf : Y_EXT_SIG * PLTSCALE
+gExpCf           - ** I do not have a source for this in the CMF
+gExpChisq        - cmf : EXT_CHISQ / EXT_NDOF
Index: /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackModelFitExtra
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackModelFitExtra	(revision 37246)
+++ /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackModelFitExtra	(revision 37246)
@@ -0,0 +1,21 @@
+
+objID            dimensionless  BIGINT  8       NA      ODM object identifier
+ippObjID         dimensionless  BIGINT  8       NA      object ID generated by IPP
+randomStackObjID dimensionless  BIGINT  8       NA      random stack id
+stackDetectRowID dimensionless  BIGINT  8       NA      identifies which of up to 5 possible stackdetctions this Row refers to: Primary, up to 3 Secondary, 1 best  
+primaryDetection dimensionless  TINYINT 1       255     identifies if this row is a primary stack detection. True about 80% of time. 
+bestDetection    dimensionless  TINYINT 1       255     identifies if this row is a best detection or not. Also set if only a primary detection exists.   
+--                                                      the Primary Dectection, 0 to 3 possible secondary dectections, and the "best" per filter.  
+-------------------------------------------------------- replicate below for all filters (grizy)
+gippDetectID    dimensionless   BIGINT  8       NA      ipp detect identifier
+gstackDetectID  dimensionless   BIGINT  8       NA      ODM detection identifier
+gstackMetaID    dimensionless   BIGINT  8       NA      stack identifier
+-------------------------------------------------------- 
+gS2             dimensionless   REAL    4       -999    (un)smoothness (Cheng 2012, Simard 2002)
+glogRT		dimensionless   REAL    4       -999    total residual (from ellipcally symmetric model)
+glogRA		dimensionless   REAL    4       -999    asymmetric residual (from ellipcally symmetric model)
+glogC           dimensionless   REAL    4       -999    concentration index  (Petrosian R_50 / R_90)
+glogA           dimensionless   REAL    4       -999    log of asymmetry index (Gyory & Bell 2010)
+gbumpy          dimensionless   REAL    4       -999    Blakeslee bumpiness
+ghalfLightRad   arcsec          REAL    4       -999    half-light radius
+-------------------------------------------------------- replicate below for all filters (grizy)
Index: unk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackModelFitFlx
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackModelFitFlx	(revision 37245)
+++ 	(revision )
@@ -1,58 +1,0 @@
-
-objID            dimensionless  BIGINT  8       NA      ODM object identifier
-gcObjID		 dimensionless	BIGINT	8	NA 	ODM galactic coordinates identifier
-surveyID         dimensionless  TINYINT 1       NA      survey flag identifier
-skyCellID        dimensionless  REAL    4       -999    single float giving PrimaryCell.SkyCell identifier 
-randomStackObjID dimensionless  BIGINT  8       NA      random stack id
-stackDetectRowID dimensionless  BIGINT  8       NA      identifies which of up to 5 possible stackdetctions this Row refers to: Primary, up to 3 Secondary, 1 best  
-primaryDetection dimensionless  TINYINT 1       255     identifies if this row is a primary stack detection. True about 80% of time. 
-bestDetection    dimensionless  TINYINT 1       255     identifies if this row is a best detection or not. Also set if only a primary detection exists.   
---                                                      the Primary Dectection, 0 to 3 possible secondary dectections, and the "best" per filter.  
-dvoRegionID      dimensionless  INT     4       -999    identifier to dvo spatial region
-dataRelease      dimensionless  TINYINT 1       NA      Data release when this table was loaded
--------------------------------------------------------- replicate below for all filters (grizy)
-gippObjID         dimensionless  BIGINT  8       NA      ipp object identifier
-gippDetectID    dimensionless   BIGINT  8       NA      ipp detect identifier
-gstackDetectID  dimensionless   BIGINT  8       NA      ODM detection identifier
-gstackMetaID    dimensionless   BIGINT  8       NA      stack identifier
-----------------------------------------------------------------------------------------
-gflxR1          adu/seconds     REAL    4       -999    Flux inside r = 1
-gflxR1Err       adu/seconds     REAL    4       -999    estimated error is flxR1
-gflxR1Std       adu/seconds     REAL    4       -999    estimated standard deviation in flxR1
-gflxR1Fill      dimensionless   REAL    4       -999    estimated filling factor at R1
-gflxR2          adu/seconds     REAL    4       -999    Flux inside r = 2
-gflxR2Err       adu/seconds     REAL    4       -999    estimated error is flxR2
-gflxR2Std       adu/seconds     REAL    4       -999    estimated standard deviation in flxR2
-gflxR2Fill      dimensionless   REAL    4       -999    estimated filling factor at R1
-gflxR3          adu/seconds     REAL    4       -999    Flux inside r = 3
-gflxR3Err       adu/seconds     REAL    4       -999    estimated error is flxR3
-gflxR3Std       adu/seconds     REAL    4       -999    estimated standard deviation in flxR3
-gflxR3Fill      dimensionless   REAL    4       -999    estimated filling factor at R3
-gflxR4          adu/seconds     REAL    4       -999    Flux inside r = 4
-gflxR4Err       adu/seconds     REAL    4       -999    estimated error is flxR4
-gflxR4Std       adu/seconds     REAL    4       -999    estimated standard deviation in flxR4
-gflxR4Fill      dimensionless   REAL    4       -999    estimated filling factor at R4
-gflxR5          adu/seconds     REAL    4       -999    Flux inside r = 5
-gflxR5Err       adu/seconds     REAL    4       -999    estimated error is flxR5
-gflxR5Std       adu/seconds     REAL    4       -999    estimated standard deviation in flxR5
-gflxR5Fill      dimensionless   REAL    4       -999    estimated filling factor at R5
-gflxR6          adu/seconds     REAL    4       -999    Flux inside r = 6
-gflxR6Err       adu/seconds     REAL    4       -999    estimated error is flxR6
-gflxR6Std       adu/seconds     REAL    4       -999    estimated standard deviation in flxR6
-gflxR6Fill      dimensionless   REAL    4       -999    estimated filling factor at R6
-gflxR7          adu/seconds     REAL    4       -999    Flux inside r = 7
-gflxR7Err       adu/seconds     REAL    4       -999    estimated error is flxR7
-gflxR7Std       adu/seconds     REAL    4       -999    estimated standard deviation in flxR7
-gflxR7Fill      dimensionless   REAL    4       -999    estimated filling factor at R7
-gflxR8          adu/seconds     REAL    4       -999    Flux inside r = 8
-gflxR8Err       adu/seconds     REAL    4       -999    estimated error is flxR8
-gflxR8Std       adu/seconds     REAL    4       -999    estimated standard deviation in flxR8
-gflxR8Fill      dimensionless   REAL    4       -999    estimated filling factor at R8
-gflxR9          adu/seconds     REAL    4       -999    Flux inside r = 9
-gflxR9Err       adu/seconds     REAL    4       -999    estimated error is flxR9
-gflxR9Std       adu/seconds     REAL    4       -999    estimated standard deviation in flxR9
-gflxR9Fill      dimensionless   REAL    4       -999    estimated filling factor at R9
-gflxR10         adu/seconds     REAL    4       -999    Flux inside r = 10
-gflxR10Err      adu/seconds     REAL    4       -999    estimated error is flxR10
-gflxR10Std      adu/seconds     REAL    4       -999    estimated standard deviation in flxR10
-gflxR10Fill     dimensionless   REAL    4       -999    estimated filling factor at R10
Index: unk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackModelFitFlxC1
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackModelFitFlxC1	(revision 37245)
+++ 	(revision )
@@ -1,60 +1,0 @@
-
-objID            dimensionless  BIGINT  8       NA      ODM object identifier
-gcObjID		 dimensionless	BIGINT	8	NA 	ODM galactic coordinates identifier
-surveyID         dimensionless  TINYINT 1       NA      survey flag identifier
-skyCellID        dimensionless  REAL    4       -999    single float giving PrimaryCell.SkyCell identifier 
-randomStackObjID dimensionless  BIGINT  8       NA      random stack id
-stackDetectRowID dimensionless  BIGINT  8       NA      identifies which of up to 5 possible stackdetctions this Row refers to: Primary, up to 3 Secondary, 1 best  
-primaryDetection dimensionless  TINYINT 1       255     identifies if this row is a primary stack detection. True about 80% of time. 
-bestDetection    dimensionless  TINYINT 1       255     identifies if this row is a best detection or not. Also set if only a primary detection exists.   
---                                                      the Primary Dectection, 0 to 3 possible secondary dectections, and the "best" per filter.  
-dvoRegionID      dimensionless  INT     4       -999    identifier to dvo spatial region
-dataRelease      dimensionless  TINYINT 1       NA      Data release when this table was loaded
--------------------------------------------------------- replicate below for all filters (grizy)
-gippObjID         dimensionless  BIGINT  8       NA      ipp object identifier
-gippDetectID    dimensionless   BIGINT  8       NA      ipp detect identifier
-gstackDetectID  dimensionless   BIGINT  8       NA      ODM detection identifier
-gstackMetaID    dimensionless   BIGINT  8       NA      stack identifier
-----------------------------------------------------------------------------------------
-gc1flxR1        adu/seconds     REAL    4       -999    Flux inside r = 1
-gc1flxR1Err     adu/seconds     REAL    4       -999    estimated error is c1flxR1
-gc1flxR1Std     adu/seconds     REAL    4       -999    estimated standard deviation in c1flxR1
-gc1flxR1Fill    dimensionless   REAL    4       -999    estimated filling factor at R1
-gc1flxR2        adu/seconds     REAL    4       -999    Flux inside r = 2
-gc1flxR2Err     adu/seconds     REAL    4       -999    estimated error is c1flxR2
-gc1flxR2Std     adu/seconds     REAL    4       -999    estimated standard deviation in c1flxR2
-gc1flxR2Fill    dimensionless   REAL    4       -999    estimated filling factor at R1
-gc1flxR3        adu/seconds     REAL    4       -999    Flux inside r = 3
-gc1flxR3Err     adu/seconds     REAL    4       -999    estimated error is c1flxR3
-gc1flxR3Std     adu/seconds     REAL    4       -999    estimated standard deviation in c1flxR3
-gc1flxR3Fill    dimensionless   REAL    4       -999    estimated filling factor at R3
-gc1flxR4        adu/seconds     REAL    4       -999    Flux inside r = 4
-gc1flxR4Err     adu/seconds     REAL    4       -999    estimated error is c1flxR4
-gc1flxR4Std     adu/seconds     REAL    4       -999    estimated standard deviation in c1flxR4
-gc1flxR4Fill    dimensionless   REAL    4       -999    estimated filling factor at R4
-gc1flxR5        adu/seconds     REAL    4       -999    Flux inside r = 5
-gc1flxR5Err     adu/seconds     REAL    4       -999    estimated error is c1flxR5
-gc1flxR5Std     adu/seconds     REAL    4       -999    estimated standard deviation in c1flxR5
-gc1flxR5Fill    dimensionless   REAL    4       -999    estimated filling factor at R5
-gc1flxR6        adu/seconds     REAL    4       -999    Flux inside r = 6
-gc1flxR6Err     adu/seconds     REAL    4       -999    estimated error is c1flxR6
-gc1flxR6Std     adu/seconds     REAL    4       -999    estimated standard deviation in c1flxR6
-gc1flxR6Fill    dimensionless   REAL    4       -999    estimated filling factor at R6
-gc1flxR7        adu/seconds     REAL    4       -999    Flux inside r = 7
-gc1flxR7Err     adu/seconds     REAL    4       -999    estimated error is c1flxR7
-gc1flxR7Std     adu/seconds     REAL    4       -999    estimated standard deviation in c1flxR7
-gc1flxR7Fill    dimensionless   REAL    4       -999    estimated filling factor at R7
-gc1flxR8        adu/seconds     REAL    4       -999    Flux inside r = 8
-gc1flxR8Err     adu/seconds     REAL    4       -999    estimated error is c1flxR8
-gc1flxR8Std     adu/seconds     REAL    4       -999    estimated standard deviation in c1flxR8
-gc1flxR8Fill    dimensionless   REAL    4       -999    estimated filling factor at R8
-gc1flxR9        adu/seconds     REAL    4       -999    Flux inside r = 9
-gc1flxR9Err     adu/seconds     REAL    4       -999    estimated error is c1flxR9
-gc1flxR9Std     adu/seconds     REAL    4       -999    estimated standard deviation in c1flxR9
-gc1flxR9Fill    dimensionless   REAL    4       -999    estimated filling factor at R9
-gc1flxR10       adu/seconds     REAL    4       -999    Flux inside r = 10
-gc1flxR10Err    adu/seconds     REAL    4       -999    estimated error is c1flxR10
-gc1flxR10Std    adu/seconds     REAL    4       -999    estimated standard deviation in c1flxR10
-gc1flxR10Fill   dimensionless   REAL    4       -999    estimated filling factor at R10
-
-
Index: unk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackModelFitFlxC2
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackModelFitFlxC2	(revision 37245)
+++ 	(revision )
@@ -1,60 +1,0 @@
-
-objID            dimensionless  BIGINT  8       NA      ODM object identifier
-gcObjID		 dimensionless	BIGINT	8	NA 	ODM galactic coordinates identifier
-surveyID         dimensionless  TINYINT 1       NA      survey flag identifier
-skyCellID        dimensionless  REAL    4       -999    single float giving PrimaryCell.SkyCell identifier 
-randomStackObjID dimensionless  BIGINT  8       NA      random stack id
-stackDetectRowID dimensionless  BIGINT  8       NA      identifies which of up to 5 possible stackdetctions this Row refers to: Primary, up to 3 Secondary, 1 best  
-primaryDetection dimensionless  TINYINT 1       255     identifies if this row is a primary stack detection. True about 80% of time. 
-bestDetection    dimensionless  TINYINT 1       255     identifies if this row is a best detection or not. Also set if only a primary detection exists.   
---                                                      the Primary Dectection, 0 to 3 possible secondary dectections, and the "best" per filter.  
-dvoRegionID      dimensionless  INT     4       -999    identifier to dvo spatial region
-dataRelease      dimensionless  TINYINT 1       NA      Data release when this table was loaded
--------------------------------------------------------- replicate below for all filters (grizy)
-gippObjID         dimensionless  BIGINT  8       NA      ipp object identifier
-gippDetectID    dimensionless   BIGINT  8       NA      ipp detect identifier
-gstackDetectID  dimensionless   BIGINT  8       NA      ODM detection identifier
-gstackMetaID    dimensionless   BIGINT  8       NA      stack identifier
-----------------------------------------------------------------------------------------
-gc2flxR1        adu/seconds     REAL    4       -999    Flux inside r = 1
-gc2flxR1Err     adu/seconds     REAL    4       -999    estimated error is c2flxR1
-gc2flxR1Std     adu/seconds     REAL    4       -999    estimated standard deviation in c2flxR1
-gc2flxR1Fill    dimensionless   REAL    4       -999    estimated filling factor at R1
-gc2flxR2        adu/seconds     REAL    4       -999    Flux inside r = 2
-gc2flxR2Err     adu/seconds     REAL    4       -999    estimated error is c2flxR2
-gc2flxR2Std     adu/seconds     REAL    4       -999    estimated standard deviation in c2flxR2
-gc2flxR2Fill    dimensionless   REAL    4       -999    estimated filling factor at R1
-gc2flxR3        adu/seconds     REAL    4       -999    Flux inside r = 3
-gc2flxR3Err     adu/seconds     REAL    4       -999    estimated error is c2flxR3
-gc2flxR3Std     adu/seconds     REAL    4       -999    estimated standard deviation in c2flxR3
-gc2flxR3Fill    dimensionless   REAL    4       -999    estimated filling factor at R3
-gc2flxR4        adu/seconds     REAL    4       -999    Flux inside r = 4
-gc2flxR4Err     adu/seconds     REAL    4       -999    estimated error is c2flxR4
-gc2flxR4Std     adu/seconds     REAL    4       -999    estimated standard deviation in c2flxR4
-gc2flxR4Fill    dimensionless   REAL    4       -999    estimated filling factor at R4
-gc2flxR5        adu/seconds     REAL    4       -999    Flux inside r = 5
-gc2flxR5Err     adu/seconds     REAL    4       -999    estimated error is c2flxR5
-gc2flxR5Std     adu/seconds     REAL    4       -999    estimated standard deviation in c2flxR5
-gc2flxR5Fill    dimensionless   REAL    4       -999    estimated filling factor at R5
-gc2flxR6        adu/seconds     REAL    4       -999    Flux inside r = 6
-gc2flxR6Err     adu/seconds     REAL    4       -999    estimated error is c2flxR6
-gc2flxR6Std     adu/seconds     REAL    4       -999    estimated standard deviation in c2flxR6
-gc2flxR6Fill    dimensionless   REAL    4       -999    estimated filling factor at R6
-gc2flxR7        adu/seconds     REAL    4       -999    Flux inside r = 7
-gc2flxR7Err     adu/seconds     REAL    4       -999    estimated error is c2flxR7
-gc2flxR7Std     adu/seconds     REAL    4       -999    estimated standard deviation in c2flxR7
-gc2flxR7Fill    dimensionless   REAL    4       -999    estimated filling factor at R7
-gc2flxR8        adu/seconds     REAL    4       -999    Flux inside r = 8
-gc2flxR8Err     adu/seconds     REAL    4       -999    estimated error is c2flxR8
-gc2flxR8Std     adu/seconds     REAL    4       -999    estimated standard deviation in c2flxR8
-gc2flxR8Fill    dimensionless   REAL    4       -999    estimated filling factor at R8
-gc2flxR9        adu/seconds     REAL    4       -999    Flux inside r = 9
-gc2flxR9Err     adu/seconds     REAL    4       -999    estimated error is c2flxR9
-gc2flxR9Std     adu/seconds     REAL    4       -999    estimated standard deviation in c2flxR9
-gc2flxR9Fill    dimensionless   REAL    4       -999    estimated filling factor at R9
-gc2flxR10       adu/seconds     REAL    4       -999    Flux inside r = 10
-gc2flxR10Err    adu/seconds     REAL    4       -999    estimated error is c2flxR10
-gc2flxR10Std    adu/seconds     REAL    4       -999    estimated standard deviation in c2flxR10
-gc2flxR10Fill   dimensionless   REAL    4       -999    estimated filling factor at R10
-
--- repeat for other filters with appropriate leading prefex.
Index: unk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackModelFitPet
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackModelFitPet	(revision 37245)
+++ 	(revision )
@@ -1,28 +1,0 @@
-
-objID            dimensionless  BIGINT  8       NA      ODM object identifier
-gcObjID		 dimensionless	BIGINT	8	NA 	ODM galactic coordinates identifier
-surveyID         dimensionless  TINYINT 1       NA      survey flag identifier
-skyCellID        dimensionless  REAL    4       -999    single float giving PrimaryCell.SkyCell identifier 
-randomStackObjID dimensionless  BIGINT  8       NA      random stack id
-stackDetectRowID dimensionless  BIGINT  8       NA      identifies which of up to 5 possible stackdetctions this Row refers to: Primary, up to 3 Secondary, 1 best  
-primaryDetection dimensionless  TINYINT 1       255     identifies if this row is a primary stack detection. True about 80% of time. 
-bestDetection    dimensionless  TINYINT 1       255     identifies if this row is a best detection or not. Also set if only a primary detection exists.   
---                                                      the Primary Dectection, 0 to 3 possible secondary dectections, and the "best" per filter.  
-dvoRegionID      dimensionless  INT     4       -999    identifier to dvo spatial region
-dataRelease      dimensionless  TINYINT 1       NA      Data release when this table was loaded
--------------------------------------------------------- replicate below for all filters (grizy)
-gippObjID         dimensionless  BIGINT  8       NA      ipp object identifier
-gippDetectID    dimensionless   BIGINT  8       NA      ipp detect identifier
-gstackDetectID  dimensionless   BIGINT  8       NA      ODM detection identifier
-gstackMetaID    dimensionless   BIGINT  8       NA      stack identifier
-----------------------------------------------------------------------------------------
-gpetRadius      pixels          REAL    4       -999    Petrosian radius
-gpetRadiusErr   pixels          REAL    4       -999    estimated error inPetrosian radius
-gpetFlux        adu/sec         REAL    4       -999    Petrosian Flux
-gpetFluxErr     adu/sec         REAL    4       -999    estimated error in petFlux
-gpetR50         pixels          REAL    4       -999    Petrosian radius at 50% light
-gpetR50Err      pixels          REAL    4       -999    estimated error inPetrosian radius at 50% light
-gpetR90         pixels          REAL    4       -999    Petrosian radius at 90% light
-gpetR90Err      pixels          REAL    4       -999    estimated error in Petrosian radius at 90% light
-gpetCf          dimensionless   REAL    4       -999    Petrosian fit coverage factor
-
Index: /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackModelFitSer
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackModelFitSer	(revision 37245)
+++ /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackModelFitSer	(revision 37246)
@@ -1,7 +1,5 @@
 
 objID            dimensionless  BIGINT  8       NA      ODM object identifier
-gcObjID		 dimensionless	BIGINT	8	NA 	ODM galactic coordinates identifier
-surveyID         dimensionless  TINYINT 1       NA      survey flag identifier
-skyCellID        dimensionless  REAL    4       -999    single float giving PrimaryCell.SkyCell identifier 
+ippObjID         dimensionless  BIGINT  8       NA      object ID generated by IPP
 randomStackObjID dimensionless  BIGINT  8       NA      random stack id
 stackDetectRowID dimensionless  BIGINT  8       NA      identifies which of up to 5 possible stackdetctions this Row refers to: Primary, up to 3 Secondary, 1 best  
@@ -9,22 +7,19 @@
 bestDetection    dimensionless  TINYINT 1       255     identifies if this row is a best detection or not. Also set if only a primary detection exists.   
 --                                                      the Primary Dectection, 0 to 3 possible secondary dectections, and the "best" per filter.  
-dvoRegionID      dimensionless  INT     4       -999    identifier to dvo spatial region
-dataRelease      dimensionless  TINYINT 1       NA      Data release when this table was loaded
 -------------------------------------------------------- replicate below for all filters (grizy)
-gippObjID         dimensionless  BIGINT  8       NA      ipp object identifier
 gippDetectID    dimensionless   BIGINT  8       NA      ipp detect identifier
 gstackDetectID  dimensionless   BIGINT  8       NA      ODM detection identifier
 gstackMetaID    dimensionless   BIGINT  8       NA      stack identifier
 ----------------------------------------------------------------------------------------
-gserRadius      arcsec          REAL    4       -999    Sersic radius
-gserRadiusErr   arcsed          REAL    4       -999    estimated error in Sersic radius
-gserFlux        adu/seconds     REAL    4       -999    Sersic Flux
-gserFluxErr     adu/seconds     REAL    4       -999    estimated error in serFlux
-gserAb          dimensionless   REAL    4       -999    Sersic axis ratio
-gserAbErr       dimensionlessn  REAL    4       -999    estimated error in Sersic axis ratio
-gserNu          dimensionlessn  REAL    4       -999    Sersic index
-gserNuErr       diemensionless  REAL    4       -999    estimated error in Sersic index
-gserPhi         degrees         REAL    4       -999    estmated phi of Sersic axis
-gserPhiErr      degrees         REAL    4       -999    estmated error of phi of Sersic axis
+gSerRadius      arcsec          REAL    4       -999    Sersic radius
+gSerRadiusErr   arcsed          REAL    4       -999    estimated error in Sersic radius
+gSerMag         AB_mag          REAL    4       -999    Sersic Flux
+gSerMagErr      AB_mag          REAL    4       -999    estimated error in serFlux
+gSerAb          dimensionless   REAL    4       -999    Sersic axis ratio
+gSerAbErr       dimensionlessn  REAL    4       -999    estimated error in Sersic axis ratio
+gSerNu          dimensionlessn  REAL    4       -999    Sersic index
+gSerNuErr       diemensionless  REAL    4       -999    estimated error in Sersic index
+gSerPhi         degrees         REAL    4       -999    estmated phi of Sersic axis
+gSerPhiErr      degrees         REAL    4       -999    estmated error of phi of Sersic axis
 graSerOff       dimensionless   REAL    4       -999    Offset in RA of Sersic fit from PSF RA
 gdecSerOff      dimensionless   REAL    4       -999    Offset in DEC of Sersic fit from PSF DEC
Index: /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackModelFitSer.txt
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackModelFitSer.txt	(revision 37246)
+++ /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackModelFitSer.txt	(revision 37246)
@@ -0,0 +1,30 @@
+
+objID            + from StackObjectThin			      
+ippObjID         + from StackObjectThin			      
+randomStackObjID + from StackObjectThin			      
+stackDetectRowID - PSPS					      
+primaryDetection - from StackObjectThin NOT YET TESTED		      
+bestDetection    - from StackObjectThin CANNOT BE SET until after PV3 
+--               
+---------------- 
+gippDetectID     + from StackObjectThin 
+gstackDetectID   + from StackObjectThin
+gstackMetaID     + from StackObjectThin
+---------------- 
+gSerRadius       + cmf : EXT_WIDTH_MAJ
+gSerRadiusErr    - cmf : EXT_WIDTH_MAJ_SIG ** NULL in cmf
+gSerMag          + cmf : EXT_INST_MAG + 2.5log(exptime) + dvo.zp
+gSerMagErr       + cmf : EXT_INST_MAG_SIG ** seems kind of small in CMF
+gSerAb           - cmf : EXT_WIDTH_MAJ/EXT_WIDTH_MIN ** should this be Minor / Major?
+gSerAbErr        - cmf : EXT_WIDTH_MIN_ERR
+gSerNu           + cmf : EXT_PAR_07
+gSerNuErr        - cmf : 0.1 ** NOTE this is hard-wired
+gSerPhi          - cmf : EXT_THETA ** in radians, not degrees
+gSerPhiErr       - cmf : EXT_THETA_ERR
+gSerRa           + cmf : use X_EXT and X_PSF, PLTSCALE to offset StackObjectThin.gra
+gSerDec          + cmf : use Y_EXT and Y_PSF, PLTSCALE to offset StackObjectThin.gdec
+gSerRaErr        + cmf : X_EXT_SIG * PLTSCALE					    
+gSerDecErr       + cmf : Y_EXT_SIG * PLTSCALE					    
+gSerCf           - ** I do not have a source for this in the CMF
+gSerChisq        - cmf : EXT_CHISQ / EXT_NDOF
+--gSerLikelihood   - ** replace with chisq?
Index: unk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackModelFitThin
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackModelFitThin	(revision 37245)
+++ 	(revision )
@@ -1,25 +1,0 @@
-
-objID            dimensionless  BIGINT  8       NA      ODM object identifier
-gcObjID		 dimensionless	BIGINT	8	NA 	ODM galactic coordinates identifier
-surveyID         dimensionless  TINYINT 1       NA      survey flag identifier
-skyCellID        dimensionless  REAL    4       -999    single float giving PrimaryCell.SkyCell identifier 
-randomStackObjID dimensionless  BIGINT  8       NA      random stack id
-stackDetectRowID dimensionless  BIGINT  8       NA      identifies which of up to 5 possible stackdetctions this Row refers to: Primary, up to 3 Secondary, 1 best  
-primaryDetection dimensionless  TINYINT 1       255     identifies if this row is a primary stack detection. True about 80% of time. 
-bestDetection    dimensionless  TINYINT 1       255     identifies if this row is a best detection or not. Also set if only a primary detection exists.   
---                                                      the Primary Dectection, 0 to 3 possible secondary dectections, and the "best" per filter.  
-dvoRegionID      dimensionless  INT     4       -999    identifier to dvo spatial region
-dataRelease      dimensionless  TINYINT 1       NA      Data release when this table was loaded
--------------------------------------------------------- replicate below for all filters (grizy)
-gS2             dimensionless   REAL    4       -999    (un)smoothness (Cheng 2012, Simard 2002)
-glogRT		dimensionless   REAL    4       -999    total residual (from ellipcally symmetric model)
-glogRA		dimensionless   REAL    4       -999    asymmetric residual (from ellipcally symmetric model)
-glogC           dimensionless   REAL    4       -999    concentration index  (Petrosian R_50 / R_90)
-glogA           dimensionless   REAL    4       -999    log of asymmetry index (Gyory & Bell 2010)
-gbumpy          dimensionless   REAL    4       -999    Blakeslee bumpiness
-ghalfLightRad   arcsec          REAL    4       -999    half-light radius
--------------------------------------------------------- replicate below for all filters (grizy)
-gippObjID         dimensionless  BIGINT  8       NA      ipp object identifier
-gippDetectID    dimensionless   BIGINT  8       NA      ipp detect identifier
-gstackDetectID  dimensionless   BIGINT  8       NA      ODM detection identifier
-gstackMetaID    dimensionless   BIGINT  8       NA      stack identifier
Index: unk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackObjectExtra
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackObjectExtra	(revision 37245)
+++ 	(revision )
@@ -1,47 +1,0 @@
-
-objID             dimensionless   BIGINT  8       NA      ODM object identifier
-gcObjID	  	  dimensionless	  BIGINT  8	  NA 	  ODM galactic coordinates identifier
-surveyID          dimensionless   TINYINT 1       NA      survey flag identifier
-skyCellID         dimensionless   REAL    4       -999    single float giving PrimaryCell.SkyCell identifier 
-randomStackObjID  dimensionless   BIGINT  8       NA      random stack id
-stackDetectRowID  dimensionless   BIGINT  8       NA      identifies which of up to 5 possible stackdetctions this Row refers to: Primary, up to 3 Secondary, 1 best  
-primaryDetection  dimensionless   TINYINT 1       255     identifies if this row is a primary stack detection. True about 80% of time. 
-bestDetection     dimensionless   TINYINT 1       255     identifies if this row is a best detection or not. Also set if only a primary detection exists.   
-                                                          the Primary Dectection, 0 to 3 possible secondary dectections, and the "best" per filter.  
-dvoRegionID       dimensionless   INT     4       -999    identifier to dvo spatial region
-dataRelease       dimensionless   TINYINT 1       NA      Data release when this detection was originally taken.
-------------------------------------------------------------------------------------------
--- attributes for all stack detections in all filters (these are currently forced anyway) 
--- Replicate the section below for each filter, changing the prefex ("g" in this example) 
-------------------------------------------------------------------------------------------
-gippObjID          dimensionless   BIGINT  8       NA      object ID generated by IPP
-gippDetectID      dimensionless   BIGINT  8       NA      detection ID generated by IPP
-gstackDetectID    dimensionless   BIGINT  8       NA      ODM detection identifier
-gstackMetaID      dimensionless   BIGINT  8       NA      stack identifier
-------------------------------------------------------------------------------------------
-gxPos             arcsec          REAL    4       -999    measured x in sky Cell from PSF fit
-gyPos             arcsec          REAL    4       -999    measured y in sky Cell from PSF fit
-gxPosErr          arcsec          REAL    4       -999    estimated error in x
-gyPosErr          arcsec          REAL    4       -999    estimated error in y
-gexpTime          seconds         REAL    4       -999    total exposure time (informational)
-gpsfMajorFWHM     arcsec          REAL    4       -999    PSF width in major axis
-gpsfMinorFWHM     arcsec          REAL    4       -999    PSF width in minor axis
-gpsfTheta         degrees         REAL    4       -999    PSF orientation angle. Degrees East of North.
-gpsfCore          dimensionless   REAL    4       -999    PSF core parameter [k in (1 + kz + z^1.66)]
-gpsfLikelihood    dimensionless   REAL    4       -999    PSF likelihood
-gpsfQf            dimensionless   REAL    4       -999    PSF coverage factor
-gpsfQfPerfect     dimensionless   REAL    4       -999    PSF-weighted fraction of arcsec totally unmasked
-gpsfChiSq         dimensionless   REAL    4       -999    PSF-weighted fraction of arcsec to.
-gmomentXX         arcsec^2        REAL    4       -999    moment XX
-gmomentXY         arcsec^2        REAL    4       -999    moment XY
-gmomentYY         arcsec^2        REAL    4       -999    moment YY
-gmomentR1         arcsec          REAL    4       -999    moment R1
-gmomentRH         arcsec          REAL    4       -999    moment RH - or half light radius (REMOVE)
-gPSFFlux     	  adu/sec         REAL    4       -999    g psf flux from stack
-gPSFFluxErr  	  adu/sec         REAL    4       -999    estimated error of g psf flux from stack
-gApFlux           adu/seconds     REAL    4       -999    Aperture magnitude
-gApFluxErr        adu/seconds     REAL    4       -999    Aperture magnitude error
-gApFillFac        dimensionless   REAL    4       -999    Aperture fill factor - ~ redundant with psfQF, keep?
-gKronFlux         adu/seconds     REAL    4       -999    Kron flux
-gKronFluxErr      adu/seconds     REAL    4       -999    Kron flux error
-gKronRad          arcsec          REAL    4       -999    Kron radius
Index: /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackObjectExtra.txt
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackObjectExtra.txt	(revision 37246)
+++ /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackObjectExtra.txt	(revision 37246)
@@ -0,0 +1,49 @@
+		  
+objID             | from StackObjectThin
+gcObjID	  	  | ** DROP
+ippObjID          | from StackObjectThin
+surveyID          | from StackObjectThin
+skyCellID         | from StackObjectThin
+randomStackObjID  | from StackObjectThin
+stackDetectRowID  | from StackObjectThin
+primaryDetection  | 
+bestDetection     | 
+                  | 
+dvoRegionID       | from StackObjectThin
+dataRelease       | from StackObjectThin
+------------------| 
+--                | 
+--                | 
+------------------| 
+gippDetectID      | from StackObjectThin
+gstackDetectID    | from StackObjectThin
+gstackMetaID      | from StackObjectThin
+------------------| 
+gxPos             | cmf X_PSF
+gyPos             | cmf Y_PSF
+gxPosErr          | cmf X_PSF_SIG
+gyPosErr          | cmf Y_PSF_SIG
+gpsfMajorFWHM     | cmf 
+gpsfMinorFWHM     | cmf 
+gpsfTheta         | cmf 
+gpsfCore          | cmf 
+gpsfLikelihood    | cmf 
+gpsfQf            | cmf 
+gpsfQfPerfect     | cmf 
+gpsfChiSq         | cmf 
+gmomentXX         | cmf 
+gmomentXY         | cmf 
+gmomentYY         | cmf 
+gmomentR1         | cmf 
+gmomentRH         | cmf 
+gPSFFlux     	  | cmf 
+gPSFFluxErr  	  | cmf 
+gApFlux           | cmf 
+gApFluxErr        | cmf 
+gApFillFac        | cmf 
+gKronFlux         | cmf 
+gKronFluxErr      | cmf 
+gKronRad          | cmf 
+gexpTime          | dvopsps
+gzp               | dvopsps
+
Index: /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackObjectRaw
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackObjectRaw	(revision 37246)
+++ /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackObjectRaw	(revision 37246)
@@ -0,0 +1,41 @@
+
+objID             dimensionless   BIGINT  8       NA      ODM object identifier
+ippObjID          dimensionless   BIGINT  8       NA      object ID generated by IPP
+randomStackObjID  dimensionless   BIGINT  8       NA      random stack id
+stackDetectRowID  dimensionless   BIGINT  8       NA      identifies which of up to 5 possible stackdetctions this Row refers to: Primary, up to 3 Secondary, 1 best  
+primaryDetection  dimensionless   TINYINT 1       255     identifies if this row is a primary stack detection. True about 80% of time. 
+bestDetection     dimensionless   TINYINT 1       255     identifies if this row is a best detection or not. Also set if only a primary detection exists.   
+                                                          the Primary Dectection, 0 to 3 possible secondary dectections, and the "best" per filter.  
+------------------------------------------------------------------------------------------
+gippDetectID      dimensionless   BIGINT  8       NA      detection ID generated by IPP
+gstackDetectID    dimensionless   BIGINT  8       NA      ODM detection identifier
+gstackMetaID      dimensionless   BIGINT  8       NA      stack identifier
+------------------------------------------------------------------------------------------
+gxPos             pixels          REAL    4       -999    measured x in sky Cell from PSF fit
+gyPos             pixels          REAL    4       -999    measured y in sky Cell from PSF fit
+gxPosErr          pixels          REAL    4       -999    estimated error in x
+gyPosErr          pixels          REAL    4       -999    estimated error in y
+gpsfMajorFWHM     arcsec          REAL    4       -999    PSF width in major axis
+gpsfMinorFWHM     arcsec          REAL    4       -999    PSF width in minor axis
+gpsfTheta         degrees         REAL    4       -999    PSF orientation angle. Degrees East of North.
+gpsfCore          dimensionless   REAL    4       -999    PSF core parameter [k in (1 + kz + z^1.66)]
+gpsfLikelihood    dimensionless   REAL    4       -999    PSF likelihood
+gpsfQf            dimensionless   REAL    4       -999    PSF coverage factor
+gpsfQfPerfect     dimensionless   REAL    4       -999    PSF-weighted fraction of arcsec totally unmasked
+gpsfChiSq         dimensionless   REAL    4       -999    PSF-weighted fraction of arcsec to.
+gmomentXX         arcsec^2        REAL    4       -999    moment XX
+gmomentXY         arcsec^2        REAL    4       -999    moment XY
+gmomentYY         arcsec^2        REAL    4       -999    moment YY
+gmomentR1         arcsec          REAL    4       -999    moment R1
+gmomentRH         arcsec          REAL    4       -999    moment RH - or half light radius (REMOVE)
+gPSFFlux     	  adu/sec         REAL    4       -999    g psf flux from stack
+gPSFFluxErr  	  adu/sec         REAL    4       -999    estimated error of g psf flux from stack
+gApFlux           adu/seconds     REAL    4       -999    Aperture magnitude
+gApFluxErr        adu/seconds     REAL    4       -999    Aperture magnitude error
+gApFillFac        dimensionless   REAL    4       -999    Aperture fill factor - ~ redundant with psfQF, keep?
+gKronFlux         adu/seconds     REAL    4       -999    Kron flux
+gKronFluxErr      adu/seconds     REAL    4       -999    Kron flux error
+gKronRad          arcsec          REAL    4       -999    Kron radius
+gexpTime          seconds         REAL    4       -999    total exposure time (informational)
+gzp               magnitude       REAL    4       0       zeropoint , no error given 
+gPlateScale       arcsec/pixel    REAL    4       0       plate scale
Index: /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackObjectRaw.txt
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackObjectRaw.txt	(revision 37246)
+++ /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackObjectRaw.txt	(revision 37246)
@@ -0,0 +1,42 @@
+
+objID             + from StackObjectThin
+ippObjID          + from StackObjectThin
+randomStackObjID  + from StackObjectThin
+stackDetectRowID  - PSPS
+primaryDetection  - from StackObjectThin NOT YET TESTED
+bestDetection     - from StackObjectThin CANNOT BE SET until after PV3
+                  
+------------------
+gippDetectID      + from StackObjectThin
+gstackDetectID    + from StackObjectThin
+gstackMetaID      + from StackObjectThin
+------------------
+gxPos             + cmf : X_PSF
+gyPos             + cmf : Y_PSF
+gxPosErr          + cmf : X_PSF_SIG
+gyPosErr          + cmf : Y_PSF_SIG
+gpsfMajorFWHM     + cmf : PSF_FWHM_MAJ
+gpsfMinorFWHM     + cmf : PSF_FWHM_MIN
+gpsfTheta         + cmf : PSF_THETA
+gpsfCore          + cmf : PSF_CORE
+gpsfLikelihood    - cmf : psfLikelihood(EXT_NSIGMA) ** problem with calculation? plot 
+gpsfQf            + cmf : PSF_QF
+gpsfQfPerfect     + cmf : PSF_QF_PERFECT
+gpsfChiSq         + cmf : PSF_CHISQ / PSF_NDOF
+gmomentXX         + cmf : MOMENTS_XX
+gmomentXY         + cmf : MOMENTS_XY
+gmomentYY         + cmf : MOMENTS_YY
+gmomentR1         + cmf : MOMENTS_R1
+gmomentRH         + cmf : MOMENTS_RH
+gPSFFlux     	  + cmf : PSF_INST_FLUX / exptime
+gPSFFluxErr  	  + cmf : PSF_INST_FLUX_SIG / exptime
+gApFlux           + cmf : AP_FLUX / exptime
+gApFluxErr        + cmf : AP_FLUX_SIG / exptime
+gApFillFac        + cmf : AP_NPIX / (3.14159265359 * POW(b.AP_MAG_RADIUS - 0.5, 2)) ** adjusted formula, re-check
+gApRadius         + cmf : AP_MAG_RADIUS
+gKronFlux         + cmf : KRON_FLUX / exptime
+gKronFluxErr      + cmf : KRON_FLUX_ERR / exptime
+gKronRad          + cmf : MOMENTS_R1 * 2.5
+gexpTime          + cmf : header EXPTIME
+gzp               + dvo : zp ** clarify in dvopsps
+gPlateScale       + cmf : PLTSCALE
Index: /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackObjectThin
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackObjectThin	(revision 37245)
+++ /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackObjectThin	(revision 37246)
@@ -1,39 +1,39 @@
 
-objID             dimensionless   BIGINT  8       NA      ODM object identifier
-gcObjID	  	  dimensionless	  BIGINT  8	  NA 	  ODM galactic coordinates identifier
-surveyID          dimensionless   TINYINT 1       NA      survey flag identifier
-skyCellID         dimensionless   REAL    4       -999    single float giving PrimaryCell.SkyCell identifier 
-randomStackObjID  dimensionless   BIGINT  8       NA      random stack id
-stackDetectRowID  dimensionless   BIGINT  8       NA      identifies which of up to 5 possible stackdetctions this Row refers to: Primary, up to 3 Secondary, 1 best  
-primaryDetection  dimensionless   TINYINT 1       255     identifies if this row is a primary stack detection. True about 80% of time. 
-bestDetection     dimensionless   TINYINT 1       255     identifies if this row is a best detection or not. Also set if only a primary detection exists.   
-                                                          the Primary Dectection, 0 to 3 possible secondary dectections, and the "best" per filter.  
-dvoRegionID       dimensionless   INT     4       -999    identifier to dvo spatial region
-dataRelease       dimensionless   TINYINT 1       NA      Data release when this detection was originally taken.
+objID             dimensionless   BIGINT   8       NA      ODM object identifier
+ippObjID          dimensionless   BIGINT   8       NA      object ID generated by IPP  [this is a per-object, not per-filter value]
+surveyID          dimensionless   TINYINT  1       NA      survey flag identifier
+tessID            dimensionless   TINYINT  1       -1      ID mapping to tessellation names (eg, RINGS.V3, MD01.V3, etc)
+projectionID      dimensionless   SMALLINT 2       -999    valid values 0 - < 10000
+skyCellID         dimensionless   TINYINT  1       255     valid values 0 - 143 (12x12 grid)
+randomStackObjID  dimensionless   BIGINT   8       NA      random stack id
+stackDetectRowID  dimensionless   BIGINT   8       NA      identifies which of up to 5 possible stackdetctions this Row refers to: Primary, up to 3 Secondary, 1 best  
+primaryDetection  dimensionless   TINYINT  1       255     identifies if this row is a primary stack detection. True about 80% of time. 
+bestDetection     dimensionless   TINYINT  1       255     identifies if this row is a best detection or not. Also set if only a primary detection exists.   
+--                                                         the Primary Dectection, 0 to 3 possible secondary dectections, and the "best" per filter.  
+dvoRegionID       dimensionless   INT      4       -999    identifier to dvo spatial region
+dataRelease       dimensionless   TINYINT  1       NA      Data release when this detection was originally taken.
 ------------------------------------------------------------------------------------------
 -- attributes for all stack detections in all filters (these are currently forced anyway) 
 -- Replicate the section below for each filter, changing the prefex ("g" in this example) 
 ------------------------------------------------------------------------------------------
-gippObjID      dimensionless   BIGINT  8       NA      object ID generated by IPP
-gippDetectID      dimensionless   BIGINT  8       NA      detection ID generated by IPP
-gstackDetectID    dimensionless   BIGINT  8       NA      ODM detection identifier
-gstackMetaID      dimensionless   BIGINT  8       NA      stack identifier
+gippDetectID      dimensionless   BIGINT   8       NA      detection ID generated by IPP
+gstackDetectID    dimensionless   BIGINT   8       NA      ODM detection identifier
+gstackMetaID      dimensionless   BIGINT   8       NA      stack identifier
 ------------------------------------------------------------------------------------------
-gra               degrees         FLOAT   8       NA      Right Ascension   
-gdec              degrees         FLOAT   8       NA      Declination       
-graErr            arcsec          REAL    4       NA      Right Ascension error
-gdecErr           arcsec          REAL    4       NA      Declination error  (same as RA error - need?)
-gzp               magnitude       REAL    4       0       zeropoint , no error given 
-gPSFMag      	  AB_magnitude    REAL    4       -999    g psf AB magnitude from stack
-gPSFMagErr   	  AB_magnitude    REAL    4       -999    estimated error of g psf AB magnitude from stack
-gApMag       	  AB_magnitude    REAL    4       -999    g Aperture AB magnitude from stack
-gApMagErr    	  AB_magnitude    REAL    4       -999    estimated error of g Ap Mag AB magnitude from stack
-gKronMag     	  AB_magnitude    REAL    4       -999    g kron AB magnitude from stack
-gKronMagErr  	  AB_magnitude    REAL    4       -999    estimated error of g kron AB magnitude from stack
-gsky              adu/secs/arcsec REAL    4       -999    PSF sky level at source (adu)
-gskyErr           adu/secs/arcsec REAL    4       -999    estimated error in sky
-ginfoFlag         dimensionless   INT     4       -999    indicator of strange propeties
-ginfoFlag2        dimensionless   INT     4       -999    indicator of strange propeties
-gnFrames          dimensionless   INT     4       -999    Number of frames contributing to source
+gra               degrees         FLOAT    8       NA      Right Ascension   
+gdec              degrees         FLOAT    8       NA      Declination       
+graErr            arcsec          REAL     4       NA      Right Ascension error
+gdecErr           arcsec          REAL     4       NA      Declination error  (same as RA error - need?)
+gPSFMag      	  AB_magnitude    REAL     4       -999    g psf AB magnitude from stack
+gPSFMagErr   	  AB_magnitude    REAL     4       -999    estimated error of g psf AB magnitude from stack
+gApMag       	  AB_magnitude    REAL     4       -999    g Aperture AB magnitude from stack
+gApMagErr    	  AB_magnitude    REAL     4       -999    estimated error of g Ap Mag AB magnitude from stack
+gKronMag     	  AB_magnitude    REAL     4       -999    g kron AB magnitude from stack
+gKronMagErr  	  AB_magnitude    REAL     4       -999    estimated error of g kron AB magnitude from stack
+gsky              adu/secs/arcsec REAL     4       -999    PSF sky level at source (adu)
+gskyErr           adu/secs/arcsec REAL     4       -999    estimated error in sky
+ginfoFlag         dimensionless   INT      4          0    informational bits
+ginfoFlag2        dimensionless   INT      4          0    informational bits
+gnFrames          dimensionless   INT      4       -999    Number of frames contributing to source
 
 -- [220 byte/filter/obj + 44 byte/obj]
Index: /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackObjectThin.txt
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackObjectThin.txt	(revision 37246)
+++ /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackObjectThin.txt	(revision 37246)
@@ -0,0 +1,39 @@
+		  
+-- fields marked with + below have been verified by EAM in the ippToPsps output mysql tables
+
+objID              + dvo = average.extID   [calculated in addstar]
+ippObjID           + dvo = average.objID + (average.catID << 32) [NOTE: this is a change in definition]
+surveyID           + ipptopsps : internal, from survey name
+tessID             + smf : TESS_ID (table mapping)
+projectionID       + smf : parse SKYCELL (skycell.NNN or skycell.MMMM.NNN)
+skycellID          + smf : parse SKYCELL (skycell.NNN or skycell.MMMM.NNN)
+randomStackObjID   + ipptopsps (RANDOM on sql into mysql)
+stackDetectRowID   - set by PSPS
+primaryDetection   + (dvo:measure.dbFlags >> 16)
+bestDetection      - dvo * THIS CANNOT BE SET UNTIL LATER (after PV3 initial ingest to psps)
+                    
+dvoRegionID        + dvo = measure.catID
+dataRelease        + ippToPsps : user input (skychunk.dataRelease)
+--
+--
+--
+--
+gippDetectID       + dvopsps.ippDetectID = dvo:measure.detID = smf / IPP_IDET
+gstackDetectID     + dvopsps.detectID = dvo:measure.extID [calculated in addstar: psps stack detect ID]
+gstackMetaID       + ipptopsps : gpc1 db, matches cmf IMAGEID
+--
+gra                + dvo = measure.ra
+gdec               + dvo = measure.dec
+graErr             + dvo = X_PSF_SIG * PLTSCALE
+gdecErr            + dvo = X_PSF_SIG * PLTSCALE
+gPSFMag      	   + dvo = measure.Mpsf
+gPSFMagErr   	   + dvo = measure.dMpsf
+gApMag       	   + dvo = measure.Map
+gApMagErr    	   + dvo = measure.dMap
+gKronMag     	   + dvo = measure.Mkron
+gKronMagErr  	   + dvo = measure.dMkron
+gsky               + smf : SKY / exptime
+gskyErr            + smf : SKY_SIGMA / exptime
+ginfoFlag          + smf : FLAGS
+ginfoFlag2         - smf + dvo : FLAGS2 | measure.flags << 13 *** we only include measure.dbflags, not secfilt.flags
+gnFrames           + smf : N_FRAMES
Index: /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackPetrosian
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackPetrosian	(revision 37246)
+++ /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackPetrosian	(revision 37246)
@@ -0,0 +1,22 @@
+
+objID            dimensionless  BIGINT  8       NA      ODM object identifier
+ippbjID		 dimensionless	BIGINT	8	NA 	object ID generated by IPP
+randomStackObjID dimensionless  BIGINT  8       NA      random stack id
+stackDetectRowID dimensionless  BIGINT  8       NA      identifies which of up to 5 possible stackdetctions this Row refers to: Primary, up to 3 Secondary, 1 best  
+primaryDetection dimensionless  TINYINT 1       255     identifies if this row is a primary stack detection. True about 80% of time. 
+bestDetection    dimensionless  TINYINT 1       255     identifies if this row is a best detection or not. Also set if only a primary detection exists.   
+--                                                      the Primary Dectection, 0 to 3 possible secondary dectections, and the "best" per filter.  
+-------------------------------------------------------- replicate below for all filters (grizy)
+gippDetectID    dimensionless   BIGINT  8       NA      ipp detect identifier
+gstackDetectID  dimensionless   BIGINT  8       NA      ODM detection identifier
+gstackMetaID    dimensionless   BIGINT  8       NA      stack identifier
+----------------------------------------------------------------------------------------
+gpetRadius      arcsec          REAL    4       -999    Petrosian radius
+gpetRadiusErr   arcsec          REAL    4       -999    estimated error inPetrosian radius
+gpetMag         AB_mag          REAL    4       -999    Petrosian Flux
+gpetMagErr      AB_mag          REAL    4       -999    estimated error in petFlux
+gpetR50         arcsec          REAL    4       -999    Petrosian radius at 50% light
+gpetR50Err      arcsec          REAL    4       -999    estimated error inPetrosian radius at 50% light
+gpetR90         arcsec          REAL    4       -999    Petrosian radius at 90% light
+gpetR90Err      arcsec          REAL    4       -999    estimated error in Petrosian radius at 90% light
+gpetCf          dimensionless   REAL    4       -999    Petrosian fit coverage factor
Index: /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackPetrosian.txt
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackPetrosian.txt	(revision 37246)
+++ /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/StackPetrosian.txt	(revision 37246)
@@ -0,0 +1,22 @@
+
+objID            + from StackObjectThin
+ippbjID		 + from StackObjectThin
+randomStackObjID + from StackObjectThin
+stackDetectRowID - PSPS
+primaryDetection - from StackObjectThin NOT YET TESTED		     
+bestDetection    - from StackObjectThin CANNOT BE SET until after PV3
+--                
+----------------  
+gippDetectID     + from StackObjectThin
+gstackDetectID   + from StackObjectThin
+gstackMetaID     + from StackObjectThin
+----------------  
+gpetRadius       + cmf : PETRO_RADIUS
+gpetRadiusErr    + cmf : PETRO_RADIUS_ERR
+gpetMag          + cmf : PETRO_MAG - header:FPA.ZP + dvo.zp
+gpetMagErr       + cmf : PETRO_MAG_ERR
+gpetR50          + cmf : PETRO_RADIUS_50
+gpetR50Err       + cmf : PETRO_RADIUS_50_ERR
+gpetR90          + cmf : PETRO_RADIUS_90
+gpetR90Err       + cmf : PETRO_RADIUS_90_ERR
+gpetCf           - cmf : PETRO_FILL ** consistently > 1.0?? [problem in cmf]
Index: /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/notes.txt
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/notes.txt	(revision 37246)
+++ /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/notes.txt	(revision 37246)
@@ -0,0 +1,22 @@
+
+tables processed by the different batch types:
+
+objectbatch.py:
+    ObjectThin
+    MeanObject
+
+detectionbatch.py:
+    Detection
+
+stackbatch.py:
+    StackObjectThin    - populated for all stack detections * checked
+    StackObjectRaw     - populated for all stack detections * checked
+    StackModelFitThin  - populated for Galactic Cap regions 
+    StackModelFitDeV   - populated for Galactic Cap regions * checked
+    StackModelFitExp   - populated for Galactic Cap regions * checked
+    StackModelFitSer   - populated for Galactic Cap regions * checked
+    StackApFlx	       - populated for all stack detections 
+    StackApFlxFull     - populated for Galactic Cap regions * checked
+    StackApFlxFullC1   - populated for Galactic Cap regions * checked
+    StackApFlxFullC2   - populated for Galactic Cap regions * checked
+    StackPetrosian     - populated for Galactic Cap regions * checked
Index: /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/schema18.notes.txt
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/schema18.notes.txt	(revision 37246)
+++ /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/Fundamental_IPP_Data_Product_Tables/schema18.notes.txt	(revision 37246)
@@ -0,0 +1,159 @@
+
+This document describes the new PSPS schema (18.0) and identifies existing problems.
+
+ObjectThin
+
+  Changes since Schema 16.0:
+  
+    * DROPPED gcObjID (concept rejected by DRAVG)
+    * replaced skycellID (REAL) with combination of tessID, projectionID, skycellID (1,2,1 byte INTs)
+    * replaced raMeanStd, decMeanStd (not calculated) with posMeanChisq
+
+  Concerns:
+
+    * objName is generated by SQL in ippToPsps and is probably fragile: move to dvopsps?
+    * fields calculated by PSPS and not tested (htmID, zoneID, cx,cy,cz, lambda,beta, l,b)
+    * nStackObjectRows is not calculated 
+    * should nStackDetections be split per filter?
+    * quality flag is currently the upper byte of dvo:average.flags, is this reasonable?
+    * consistency flag is hard-wired as 0
+    * raStack, etc are not yet calculated by relastro (set to match raMean, etc)
+
+MeanObject
+
+  Changes since Schema 16.0:
+  
+    * DROPPED gcObjID (concept rejected by DRAVG)
+    * CHANGED gFlags to be 4 byte not 8 byte (secfilt.flags is 4 byte)
+    * renamed fields to have consistent naming structure:
+      * gMeanTYPEMagVALUE, where TYPE = (PSF, Kron, Ap) and VALUE = (Err, Std, Min Max, Npt)
+
+  Concerns:
+
+    * NONE
+
+Detections
+
+  Changes since Schema 16.0:
+  
+    * ADDED   apRadius
+    * DROPPED gcObjID (concept rejected by DRAVG)
+    * DROPPED kronRadErr (not measured by psphot, probably not needed?)
+  
+  Concerns:
+  
+    * imageID : this is currently generated from expID + ccd X,Y.
+      shouldn't we use gpc1.chipImfile.chip_imfile_id? (IMAGE_ID in
+      header)
+    * double-check reported value for zero point (needs to include airmass term, etc)
+  
+  Implementation Changes:
+  
+    * raErr,decErr are now taken from the SMF file not from dvo (x,y errors truncated in dvo)
+    * dvoRegion now uses CAT_ID from dvopsps
+    * psfMajor,MinorFWHM use PSF_FWHM_MJA,MIN
+    * added PSF_CORE to smf
+    * apFlux, kronFlux use FLUX values directly from smf
+
+Stacks
+
+  Measurements related to the stacks are now split into 11 separate
+  tables depending on the measurements and, in some cases, the Galactic
+  latitude.  The granularity of the split is partly mandated by the
+  inability of PSPS or its ingest system to handle excessively wide
+  tables.  Note that in all of the tables below, a single row represents
+  the set of measurements from all 5 filters (grizy) for the aparition
+  of an astronomical object in a single skycell.  The primaryDetection
+  flag is set to identify the row which comes from the primary skycell
+  for that location on the sky.  
+  
+  Several of the tables are meant to be filled only for the Galactic cap
+  regions.  As of 2014.08.09, ippToPsps is not setting this limit.
+  These tables are:
+  
+      StackModelFitDeV   
+      StackModelFitExp   
+      StackModelFitSer   
+      StackModelFitExtra 
+      StackApFlxFull     
+      StackApFlxFullC1   
+      StackApFlxFullC2   
+      StackPetrosian     
+
+  Other general concerns:
+
+    * various size-related fields are reported in pixels not arcseconds.
+    
+    * I need to double-check the reported zero point and telluric
+      extinction values.
+    
+    * are we defining too many radial apertures?
+
+  The tables are divided as follows:
+  
+    StackObjectThin : basic properties of the stack object detection.
+      * stackDetectRowID : this field will be set by PSPS and cannot be
+                           tested in the ippToPsps code
+
+      * bestDetection    : this field cannot be set until the entire PSPS is
+                           populated.  this will be deferred until the end of
+                           the ingest.
+
+      * primaryDetection : NOT YET TESTED
+      * xinfoFlag2           : currently only includes bits from
+                               dvo:measure.dbflags but not dvo:secfilt.flags
+    
+    * NOTE : stackDetectRowID, bestDetection, primaryDetection are
+      inherited by the following tables from StackObjectThin, so the issue
+      above are present in all Stack tables
+    
+    StackObjectRaw : raw measurement values from the PSF fits
+      * xpsfLikelihood   : some values seem to be negative, which should
+                           not be allowed
+    
+    StackModelFitExtra : extra properties derived from extended source
+                         fits.  NOTE: this table is not being generated
+    
+    StackModelFitExp : Exponential model fit parameters
+     * xExpRadiusErr : EXT_WIDTH_MAJ_SIG is not being set in the CMF file
+     * xExpAbErr     : EXT_WIDTH_MIN_SIG is not being set in the CMF file
+     * xExpPhiErr    : not set in CMF
+     * xExpRa,Dec    : this position is currently an approximation based on
+                       X_EXT, X_PSF and the plate scale
+     * xExpRa,DecErr : circularly symmetric approximation based on S/N
+     * xExpCf        : not calculated in psphot
+     * xExpChisq     : the fit chisq is provided, not the likelihood
+    
+    StackModelFitDeV : DeVaucouleur model fit parameters
+     * NOTE same issues as for Exp
+    
+    StackModelFitSer : Sersic model fit parameters
+     * NOTE same issues as for Exp, also:
+     * xSerNuErr     : value is hard-wired at 0.1, and not well-measured
+                       in CMF
+    
+    StackApFlx : flux measured in radial apertures (only 3 radii; raw and
+                 both convolutions)
+    
+     * standard deviation fields (eg, gflxR3Std) are measured in psphot as
+       the standard deviation across the full object.  Should this perhaps
+       be a measurement of the standard deviation after the radial profile
+       is subtracted?
+    
+    StackApFlxFull : flux measured in radial apertures (raw, all radii)
+    
+     * see note above on Standard Deviation
+     * radius 10 is not measured or reported in the CMF
+    
+    StackApFlxFullC1 : flux measured in radial apertures (first convolution, all radii)
+    
+     * see note above on Standard Deviation
+     * radius 10 is not measured or reported in the CMF
+    
+    StackApFlxFullC2 : flux measured in radial apertures (second convolution, all radii)
+    
+     * see note above on Standard Deviation
+     * radius 10 is not measured or reported in the CMF
+    
+    StackPetrosian : petrosian analysis data
+     * xpetCf  : fill factor is mis-calculated in psphot (consistently > 1.0)
Index: /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/MetaData_Tables/FrameMeta
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/MetaData_Tables/FrameMeta	(revision 37245)
+++ /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/MetaData_Tables/FrameMeta	(revision 37246)
@@ -1,49 +1,49 @@
-frameID	dimensionless	INT	4	NA	unique exposure/frame identifier.
-frameName	dimensionless	VARCHAR(32)	32	NA	frame name provided by camera software
-surveyID	dimensionless	TINYINT	1	NA	survey flag identifier
-filterID	dimensionless	TINYINT	1	NA	filter identifier
-cameraID	dimensionless	SMALLINT	2	NA	camera identifier
-cameraConfigID	dimensionless	SMALLINT	2	NA	camera configuration identifier
-telescopeID	dimensionless	SMALLINT	2	NA	telescope identifier
-analysisVer	alphanumeric	VARCHAR(MAX)	8000		IPP software analysis release
-p1Recip	alphanumeric	VARCHAR(MAX)	8000		IPP phase 1 MD5 Checksum
-p2Recip	alphanumeric	VARCHAR(MAX)	8000		IPP phase 2 MD5 Checksum
-p3Recip	alphanumeric	VARCHAR(MAX)	8000		IPP phase 3 MD5 Checksum
-nOTA	alphanumeric	SMALLINT	2	-999	number of valid OTA/CCD images in this exposure
-photoScat	magnitude	REAL	4	-999	global photometric scatter
-numPhotoRef	dimensionless	INT	4	-999	number of photometric reference sources
-expStart	days	FLOAT	8	-999	exposure start time in MJD
-expTime	seconds	REAL	4	-999	exposure time
-airmass	dimensionless	REAL	4	-999	airmass at mid-exposure
-raBore	degrees	FLOAT	8	-999	RA of telescope boresight
-decBore	degrees	FLOAT	8	-999	DEC of telescope boresight
-ctype1	alphanumeric	VARCHAR(MAX)	8000		name of astrometric projection in RA
-ctype2		VARCHAR(MAX)	8000		name of astrometric projection in DEC
-crval1	degrees	FLOAT	8	-999	RA corresponding to reference pixel
-crval2	degrees	FLOAT	8	-999	DEC corresponding to reference pixel
-crpix1	pc001001	FLOAT	8	-999	reference pixel value for RA
-crpix2	dimensionless	FLOAT	8	-999	reference pixel value for DEC
-cdelt1	degrees/pixel	FLOAT	8	-999	scale factor for RA
-cdelt2	degrees/pixel	FLOAT	8	-999	scale factor for DEC
-pc001001	dimensionless	FLOAT	8	-999	elements of rotation/Dcale matrix
-pc001002	dimensionless	FLOAT	8	-999	elements of rotation/Dcale matrix
-pc002001	dimensionless	FLOAT	8	-999	elements of rotation/Dcale matrix
-pc002002	dimensionless	FLOAT	8	-999	elements of rotation/Dcale matrix
-polyOrder	dimensionless	TINYINT	1	255	polynomial order of astrometry fit
-pca1x3y0	dimensionless	FLOAT	8	-999	polynomial coefficients for the astrometric fit
-pca1x2y1	dimensionless	FLOAT	8	-999	polynomial coefficients for the astrometric fit
-pca1x1y2	dimensionless	FLOAT	8	-999	polynomial coefficients for the astrometric fit
-pca1x0y3	dimensionless	FLOAT	8	-999	polynomial coefficients for the astrometric fit
-pca1x2y0	dimensionless	FLOAT	8	-999	polynomial coefficients for the astrometric fit
-pca1x1y1	dimensionless	FLOAT	8	-999	polynomial coefficients for the astrometric fit
-pca1x0y2	dimensionless	FLOAT	8	-999	polynomial coefficients for the astrometric fit
-pca2x3y0	dimensionless	FLOAT	8	-999	polynomial coefficients for the astrometric fit
-pca2x2y1	dimensionless	FLOAT	8	-999	polynomial coefficients for the astrometric fit
-pca2x1y2	dimensionless	FLOAT	8	-999	polynomial coefficients for the astrometric fit
-pca2x0y3	dimensionless	FLOAT	8	-999	polynomial coefficients for the astrometric fit
-pca2x2y0	dimensionless	FLOAT	8	-999	polynomial coefficients for the astrometric fit
-pca2x1y1	dimensionless	FLOAT	8	-999	polynomial coefficients for the astrometric fit
-pca2x0y2	dimensionless	FLOAT	8	-999	polynomial coefficients for the astrometric fit
-calibModNum	dimensionless	SMALLINT	2	NA	calibration modification number
-batchID 	dimensionless	BIGINT	8	NA	batch ID 
-dataRelease	dimensionless	TINYINT	1	NA	Data release Version of this table
+frameID         dimensionless   INT             4       NA      unique exposure/frame identifier.
+frameName       dimensionless   VARCHAR(32)     32      NA      frame name provided by camera software
+surveyID        dimensionless   TINYINT         1       NA      survey flag identifier
+filterID        dimensionless   TINYINT         1       NA      filter identifier
+cameraID        dimensionless   SMALLINT        2       NA      camera identifier
+cameraConfigID  dimensionless   SMALLINT        2       NA      camera configuration identifier
+telescopeID     dimensionless   SMALLINT        2       NA      telescope identifier
+analysisVer     alphanumeric    VARCHAR(MAX)    8000    NA      IPP software analysis release
+p1Recip         alphanumeric    VARCHAR(MAX)    8000    NA      IPP phase 1 MD5 Checksum
+p2Recip         alphanumeric    VARCHAR(MAX)    8000    NA      IPP phase 2 MD5 Checksum
+p3Recip         alphanumeric    VARCHAR(MAX)    8000    NA      IPP phase 3 MD5 Checksum
+nOTA            alphanumeric    SMALLINT        2       -999    number of valid OTA/CCD images in this exposure
+photoScat       magnitude       REAL            4       -999    global photometric scatter
+numPhotoRef     dimensionless   INT             4       -999    number of photometric reference sources
+expStart        days            FLOAT           8       -999    exposure start time in MJD
+expTime         seconds         REAL            4       -999    exposure time
+airmass         dimensionless   REAL            4       -999    airmass at mid-exposure
+raBore          degrees         FLOAT           8       -999    RA of telescope boresight
+decBore         degrees         FLOAT           8       -999    DEC of telescope boresight
+ctype1          alphanumeric    VARCHAR(MAX)    8000    NA      name of astrometric projection in RA
+ctype2          alphanumeric    VARCHAR(MAX)    8000    NA      name of astrometric projection in DEC
+crval1          degrees         FLOAT           8       -999    RA corresponding to reference pixel
+crval2          degrees         FLOAT           8       -999    DEC corresponding to reference pixel
+crpix1          dimensionless   FLOAT           8       -999    reference pixel value for RA
+crpix2          dimensionless   FLOAT           8       -999    reference pixel value for DEC
+cdelt1          degrees/pixel   FLOAT           8       -999    scale factor for RA
+cdelt2          degrees/pixel   FLOAT           8       -999    scale factor for DEC
+pc001001        dimensionless   FLOAT           8       -999    elements of rotation/Dcale matrix
+pc001002        dimensionless   FLOAT           8       -999    elements of rotation/Dcale matrix
+pc002001        dimensionless   FLOAT           8       -999    elements of rotation/Dcale matrix
+pc002002        dimensionless   FLOAT           8       -999    elements of rotation/Dcale matrix
+polyOrder       dimensionless   TINYINT         1       255     polynomial order of astrometry fit
+pca1x3y0        dimensionless   FLOAT           8       -999    polynomial coefficients for the astrometric fit
+pca1x2y1        dimensionless   FLOAT           8       -999    polynomial coefficients for the astrometric fit
+pca1x1y2        dimensionless   FLOAT           8       -999    polynomial coefficients for the astrometric fit
+pca1x0y3        dimensionless   FLOAT           8       -999    polynomial coefficients for the astrometric fit
+pca1x2y0        dimensionless   FLOAT           8       -999    polynomial coefficients for the astrometric fit
+pca1x1y1        dimensionless   FLOAT           8       -999    polynomial coefficients for the astrometric fit
+pca1x0y2        dimensionless   FLOAT           8       -999    polynomial coefficients for the astrometric fit
+pca2x3y0        dimensionless   FLOAT           8       -999    polynomial coefficients for the astrometric fit
+pca2x2y1        dimensionless   FLOAT           8       -999    polynomial coefficients for the astrometric fit
+pca2x1y2        dimensionless   FLOAT           8       -999    polynomial coefficients for the astrometric fit
+pca2x0y3        dimensionless   FLOAT           8       -999    polynomial coefficients for the astrometric fit
+pca2x2y0        dimensionless   FLOAT           8       -999    polynomial coefficients for the astrometric fit
+pca2x1y1        dimensionless   FLOAT           8       -999    polynomial coefficients for the astrometric fit
+pca2x0y2        dimensionless   FLOAT           8       -999    polynomial coefficients for the astrometric fit
+calibModNum     dimensionless   SMALLINT        2       NA      calibration modification number
+batchID         dimensionless   BIGINT          8       NA      batch ID 
+dataRelease     dimensionless   TINYINT         1       NA      Data release Version of this table
Index: /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/MetaData_Tables/FrameMeta.txt
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/MetaData_Tables/FrameMeta.txt	(revision 37246)
+++ /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/MetaData_Tables/FrameMeta.txt	(revision 37246)
@@ -0,0 +1,50 @@
+frameID         | ipptopsps : gpc1.rawExp.exp_id
+frameName       | ipptopsps : gpc1.rawExp.exp_name
+surveyID        | ipptopsps : internal, from survey name
+filterID        | ipptopsps : internal, lookup from filter (grizy)
+cameraID        | ipptopsps : hardwired to 1 ***
+cameraConfigID  | ipptopsps : hardwired to 1 ***
+telescopeID     | ipptopsps : hardwired to 1 ***
+analysisVer     | ipptopsps : gpc1.camRun.software_ver
+p1Recip         | * NOT SET
+p2Recip         | * NOT SET
+p3Recip         | * NOT SET
+nOTA            | ipptopsps : count of OTAs
+photoScat       | cmf: ZPT_ERR
+numPhotoRef     | sum(cmf:NASTRO)
+expStart        | cmf:MJD-OBS
+expTime         | cmf:EXPREQ
+airmass         | cmf:AIRMASS
+raBore          | cmf:RA
+decBore         | cmf:DEC
+ctype1          | cmf:CTYPE1
+ctype2          | cmf:CTYPE2
+crval1          | cmf:CRVAL1  
+crval2          | cmf:CRVAL2  
+crpix1          | cmf:CRPIX1  
+crpix2          | cmf:CRPIX2  
+cdelt1          | cmf:CDELT1  
+cdelt2          | cmf:CDELT2  
+pc001001        | cmf:PC001001
+pc001002        | cmf:PC001002
+pc002001        | cmf:PC002001
+pc002002        | cmf:PC002002
+polyOrder       | cmf:NPLYTERM        
+pca1x3y0        | cmf:PCA1X3Y0
+pca1x2y1        | cmf:PCA1X2Y1
+pca1x1y2        | cmf:PCA1X1Y2
+pca1x0y3        | cmf:PCA1X0Y3
+pca1x2y0        | cmf:PCA1X2Y0
+pca1x1y1        | cmf:PCA1X1Y1
+pca1x0y2        | cmf:PCA1X0Y2
+pca2x3y0        | cmf:PCA2X3Y0
+pca2x2y1        | cmf:PCA2X2Y1
+pca2x1y2        | cmf:PCA2X1Y2
+pca2x0y3        | cmf:PCA2X0Y3
+pca2x2y0        | cmf:PCA2X2Y0
+pca2x1y1        | cmf:PCA2X1Y1
+pca2x0y2        | cmf:PCA2X0Y2
+calibModNum     | ipptopsps: hardwired to 0 ***
+batchID         | ipptopsps: internal
+dataRelease     | ipptopsps: user input (skychunk.dataRelease)
+
Index: /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/MetaData_Tables/ImageMeta
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/MetaData_Tables/ImageMeta	(revision 37245)
+++ /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/MetaData_Tables/ImageMeta	(revision 37246)
@@ -22,15 +22,12 @@
 psfWidMinor	arcsec		REAL	4	-999	model PSF parameters at chip center
 psfTheta	degrees		REAL	4	-999	model PSF parameters at chip center
-momentXX        pixels  	REAL    4       -999    moment XX
-momentXY        pixels  	REAL    4       -999    moment XY
-momentYY        pixels  	REAL    4       -999    moment YY
-momentM3C       pixels squared  REAL    4       -999    moment M3C
-momentM3S       pixels squared  REAL    4       -999    moment M3S
-momentM4C       pixels squared  REAL    4       -999    moment M4C
-momentM4S       pixels squared  REAL    4       -999    moment M4S
-momentR1        pixels  	REAL    4       -999    moment R1
-momentRH        sqrt pixels     REAL    4       -999    moment RH
-apResid		magnitide	REAL	4	-999	corrected aperture residual
-dapResid	magnitide	REAL	4	-999	scatter of aperture corrections
+momentMajor     pixels  	REAL    4       -999    momentMajor
+momentMinor     pixels  	REAL    4       -999    momentMinor
+momentM2C       pixels squared 	REAL    4       -999    momentM2C  
+momentM2S       pixels squared  REAL    4       -999    momentM2S  
+momentM3        pixels squared  REAL    4       -999    momentM3   
+momentM4        pixels squared  REAL    4       -999    momentM4   
+apResid		magnitude	REAL	4	-999	corrected aperture residual
+dapResid	magnitude	REAL	4	-999	scatter of aperture corrections
 detectorID	alphanumeric	VARCHAR(32)	32		identifier for actual CCD chip
 qaFlags		dimensionless	BIGINT	8	-999	Q/A flags for this OTA
Index: /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/MetaData_Tables/ImageMeta.txt
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/MetaData_Tables/ImageMeta.txt	(revision 37246)
+++ /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/MetaData_Tables/ImageMeta.txt	(revision 37246)
@@ -0,0 +1,71 @@
+imageID      | 	ipptopsps : expID x y (*** is this right???) (smf:IMAGEID / gpc1.chipRun.chip_image_id)_
+frameID	     | 	ipptopsps : gpc1.rawExp.exp_id
+ccdID	     | 	ipptopsps : from XYnn
+photoCalID   |  dvo:photcode (from photcode table)
+filterID     | 	ipptopsps : internal, lookup from filter (grizy)
+bias	     | 	gpc1.rawExp.bg *** WRONG!
+biasScat     | 	gpc1.rawExp.bg_stdev *** WRONG!
+sky	     | 	MSKY_MN
+skyScat	     | 	MSKY_SIG
+nDetect	     | 	ipptopsps : rows(Detection table)
+magSat	     | 	FSATUR
+completMag   | 	FLIMIT
+astroScat    | 	CERROR
+photoScat    | 	ZPT_OBS ** wrong
+numAstroRef  | 	NASTRO
+numPhotoRef  | 	NASTRO
+nx	     |  CNAXIS1	
+ny	     |  CNAXIS2	
+psfModelID   | 	** NOT SET
+psfFwhm	     | 	0.5*(FWHM_MAJ + FWHM_MIN)
+psfWidMajor  | 	FWHM_MAJ
+psfWidMinor  | 	FWHM_MIN
+psfTheta     | 	ANGLE
+momentMajor  |  IQ_FW1
+momentMinor  |  IQ_FW1
+momentM2C    |  IQ_M2C
+momentM2S    |  IQ_M2S
+momentM3     |  IQ_M3
+momentM4     |  IQ_M4
+apResid	     | 	APMIFIT
+dapResid     | 	DAPMIFIT
+detectorID   | 	DETECTOR
+qaFlags	     | 	dvo:image.flags
+detrend1     | 	DETREND.MASK
+detrend2     | 	DETREND.DARK
+detrend3     | 	DETREND.FLAT
+detrend4     | 	** NOT SET
+detrend5     | 	** NOT SET
+detrend6     | 	** NOT SET
+detrend7     | 	** NOT SET
+detrend8     | 	** NOT SET
+photoZero    | 	ZPT_OBS
+ctype1	     | 	CTYPE1
+ctype2	     | 	CTYPE2
+crval1	     | 	CRVAL1')
+crval2	     | 	CRVAL2')
+crpix1	     | 	CRPIX1')
+crpix2	     | 	CRPIX2')
+cdelt1	     | 	CDELT1')
+cdelt2	     | 	CDELT2')
+pc001001     | 	PC001001
+pc001002     | 	PC001002
+pc002001     | 	PC002001
+pc002002     | 	PC002002
+polyOrder    | 	NPLYTERM
+pca1x2y0     | 	PCA1X2Y0
+pca1x1y1     | 	PCA1X1Y1
+pca1x0y2     | 	PCA1X0Y2
+pca2x2y0     | 	PCA2X2Y0
+pca2x1y1     | 	PCA2X1Y1
+pca2x0y2     | 	PCA2X0Y2
+pca1x3y0     | 	PCA1X3Y0
+pca1x2y1     | 	PCA1X2Y1
+pca1x1y2     | 	PCA1X1Y2
+pca1x0y3     | 	PCA1X0Y3
+pca2x3y0     | 	PCA2X3Y0
+pca2x2y1     | 	PCA2X2Y1
+pca2x1y2     | 	PCA2X1Y2
+pca2x0y3     | 	PCA2X0Y3
+calibModNum  | 	ipptopsps: hardwired to 0 ***
+dataRelease  | 	ipptopsps: user input (skychunk.dataRelease)
Index: /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/MetaData_Tables/StackMeta
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/MetaData_Tables/StackMeta	(revision 37245)
+++ /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/MetaData_Tables/StackMeta	(revision 37246)
@@ -1,35 +1,37 @@
-stackMetaID dimensionless   BIGINT 8 NA stack identifier
-batchID     dimensionless   BIGINT 8 NA batch identifier
-surveyID    dimensionless   TINYINT 1 NA survey flag identifier
-filterID    dimensionless   TINYINT 1 NA fnilutemr eidriecnatl ifidier
-stackTypeID dimensionless   TINYINT 1 0 stack type identifier
-skyCellID   dimensionless   REAL 4 NA skycell region identifier 
-photoCalID  dimensionless   INT 4 NA photometry code
-magSat      dimensionless   REAL 4 -999 saturation magnitude level
-analVer     dimensionless   SMALLINT 2 -999 analysis version index
-expTime     seconds         REAL 4 -999 exposure time
-nP2Images   dimensionless   SMALLINT 2 -999 number of P2 images contributing to this cell
-completMag  magnitudes      REAL 4 -999 95% completion level in mag
-astroScat   dimensionless   REAL 4 -999 astrometric scatter for chip
-photoScat   dimensionless   REAL 4 -999 photometric scatter for chip
-nAstroRef   dimensionless   INT 4 -999 number of astrometric reference sources
-nPhoRef     dimensionless   INT 4 -999 number of photometric reference sources
-psfModelID  dimensionless   VARCHAR(MAX) 8000 PSF model identifier
-psfFwhm_mean arcsec         FLOAT 8 -999 mean PSF FWHM in the stack
-psfFwhm_max  arcsec         FLOAT 8 -999 maximum PSF FWHM in the stack 
-photoZero    magnitudes     REAL 4 -999 local derived photometric zero point
-photoColor   magnitudes     REAL 4 -999 local derived photometric color term
-ctype1       alphanumeric   VARCHAR(MAX) 8000 name of astrometric projection in RA
-ctype2       alphanumeric   VARCHAR(MAX) 8000 name of astrometric projection in DEC
-crval1       degrees        FLOAT 8 -999 RA corresponding to reference pixel
-crval2       degrees        FLOAT 8 -999 DEC corresponding to reference pixel
-crpix1       dimensionless  FLOAT 8 -999 reference pixel value for RA
-crpix2       dimensionless  FLOAT 8 -999 reference pixel value for DEC
-cdelt1       deg/pixel      FLOAT 8 -999 scale factor for RA
-cdelt2       deg/pixel      FLOAT 8 -999 scale factor for DEC
-pc001001     dimensionless  FLOAT 8 -999 elements of rotation/Dcale matrix 
-pc001002     dimensionless  FLOAT 8 -999 elements of rotation/Dcale matrix
-pc002001     dimensionless  FLOAT 8 -999 elements of rotation/Dcale matrix
-pc002002     dimensionless  FLOAT 8 -999 elements of rotation/Dcale matrix
-calibModNum  dimensionless  SMALLINT 2 NA calibration modification number
-dataRelease  dimensionless  TINYINT 1 NA Data release
+stackMetaID  dimensionless   BIGINT   8 NA stack identifier
+batchID      dimensionless   BIGINT   8 NA batch identifier
+surveyID     dimensionless   TINYINT  1 NA survey flag identifier
+filterID     dimensionless   TINYINT  1 NA filter number identifier
+stackTypeID  dimensionless   TINYINT  1 0 stack type identifier
+tessID       dimensionless   TINYINT  1       -1      ID mapping to tessellation names (eg, RINGS.V3, MD01.V3, etc)
+projectionID dimensionless   SMALLINT 2       -999    valid values 0 - < 10000
+skyCellID    dimensionless   TINYINT  1       255     valid values 0 - 143 (12x12 grid)
+photoCalID   dimensionless   INT      4 NA photometry code
+magSat       dimensionless   REAL     4 -999 saturation magnitude level
+analysisVer  dimensionless   INT      4 -999 analysis version index x
+expTime      seconds         REAL     4 -999 exposure time
+nP2Images    dimensionless   SMALLINT 2 -999 number of P2 images contributing to this cell 
+completMag   magnitudes      REAL     4 -999 95% completion level in mag
+astroScat    dimensionless   REAL     4 -999 astrometric scatter for chip
+photoScat    dimensionless   REAL     4 -999 photometric scatter for chip
+nAstroRef    dimensionless   INT      4 -999 number of astrometric reference sources
+nPhotomRef   dimensionless   INT      4 -999 number of photometric reference sources
+psfModelID   dimensionless   VARCHAR(MAX) 8000 PSF model identifier
+psfFwhm_mean arcsec          FLOAT 8 -999 mean PSF FWHM in the stack
+psfFwhm_max  arcsec          FLOAT 8 -999 maximum PSF FWHM in the stack 
+photoZero    magnitudes      REAL 4 -999 local derived photometric zero point
+photoColor   magnitudes      REAL 4 -999 local derived photometric color term
+ctype1       alphanumeric    VARCHAR(MAX) 8000 name of astrometric projection in RA
+ctype2       alphanumeric    VARCHAR(MAX) 8000 name of astrometric projection in DEC
+crval1       degrees         FLOAT 8 -999 RA corresponding to reference pixel
+crval2       degrees         FLOAT 8 -999 DEC corresponding to reference pixel
+crpix1       dimensionless   FLOAT 8 -999 reference pixel value for RA
+crpix2       dimensionless   FLOAT 8 -999 reference pixel value for DEC
+cdelt1       deg/pixel       FLOAT 8 -999 scale factor for RA
+cdelt2       deg/pixel       FLOAT 8 -999 scale factor for DEC
+pc001001     dimensionless   FLOAT 8 -999 elements of rotation/Dcale matrix 
+pc001002     dimensionless   FLOAT 8 -999 elements of rotation/Dcale matrix
+pc002001     dimensionless   FLOAT 8 -999 elements of rotation/Dcale matrix
+pc002002     dimensionless   FLOAT 8 -999 elements of rotation/Dcale matrix
+calibModNum  dimensionless   SMALLINT 2 NA calibration modification number
+dataRelease  dimensionless   TINYINT 1 NA Data release
Index: /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/MetaData_Tables/StackMeta.txt
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/MetaData_Tables/StackMeta.txt	(revision 37246)
+++ /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/MetaData_Tables/StackMeta.txt	(revision 37246)
@@ -0,0 +1,37 @@
+stackMetaID   | ipptopsps : gpc1 db, matches cmf IMAGEID
+batchID       | ipptopsps : internal
+surveyID      | ipptopsps : internal, from survey name
+filterID      | ipptopsps : internal, lookup from filter (grizy)
+stackTypeID   | ipptopsps : internal, *** hard-wired name ***
+tessID        | smf : TESS_ID (table mapping)
+projectionID  | smf : parse SKYCELL (skycell.NNN or skycell.MMMM.NNN)
+skycellID     | smf : parse SKYCELL (skycell.NNN or skycell.MMMM.NNN)
+photoCalID    | dvo.images : photcode
+magSat        | * NOT SET
+analysisVer   | gpc1.stackRun.software_ver [EAM: changed this name]
+expTime       | cmf header EXPTIME
+nP2Images     | [populateStackToImage] : counts inputs NOTE is this set reasonable?
+completMag    | * NOT SET
+astroScat     | * NOT SET
+photoScat     | * NOT SET
+nAstroRef     | * NOT SET
+nPhotomRef    | * NOT SET
+psfModelID    | cmf header PSFMODEL
+psfFwhm_mean  | cmf header FWHM_MAJ *** probably wrong value
+psfFwhm_max   | cmf header FW_MJ_UW *** name and definition are inconsistent
+photoZero     | cmf header FPA.ZP *** this is not dvo corrected)
+photoColor    | * NOT SET
+ctype1        | cmf header 
+ctype2        | cmf header 
+crval1        | cmf header 
+crval2        | cmf header 
+crpix1        | cmf header 
+crpix2        | cmf header 
+cdelt1        | cmf header 
+cdelt2        | cmf header 
+pc001001      | cmf header 
+pc001002      | cmf header 
+pc002001      | cmf header 
+pc002002      | cmf header 
+calibModNum   | * NOT SET
+dataRelease   | ipptopsps : user input (skychunk.dataRelease)
Index: /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/MetaData_Tables/TessellationType
===================================================================
--- /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/MetaData_Tables/TessellationType	(revision 37246)
+++ /trunk/ippToPsps/pspsschema/SchemaNew18.0/PSPS_TABLES/MetaData_Tables/TessellationType	(revision 37246)
@@ -0,0 +1,3 @@
+tessID 		        TINYINT		1	-999	stack type identifier
+name  		        VARCHAR(20)	20	NULL	stack type name
+description		VARCHAR(MAX)	8000	NULL	stack type description
Index: /trunk/ippToPsps/test/fulltest.sh
===================================================================
--- /trunk/ippToPsps/test/fulltest.sh	(revision 37245)
+++ /trunk/ippToPsps/test/fulltest.sh	(revision 37246)
@@ -1,5 +1,5 @@
 #!/bin/csh -f
 
-chmod +x *.dvo *.sh
+chmod +x mkgpc1data.dvo mkgpc1.sh
 
 # a bit crude : get the datadir path by interpollation of the PATH element for psconfig
@@ -14,4 +14,5 @@
 # before running this test, you must have a mysql user:
 # mkgpc1.sh user localhost eam eam
+
 set mkgpc1       = 1
 set initdb       = 1
@@ -157,5 +158,4 @@
   mysql -h localhost -u dvo -pdvo -e "create database ipptopsps_test"
   mysql -h localhost -u dvo -pdvo ipptopsps_test < $IPPTOPSPS_DATA/ippToPspsDbSchema.sql
-
 endif
 
@@ -168,31 +168,7 @@
   mysql -h localhost -u dvo -pdvo -e "drop database ipptopsps_test_scratch"
   mysql -h localhost -u dvo -pdvo -e "create database ipptopsps_test_scratch"
-  ippjython setupScratchDb.py -test
-endif
-
-#  `name` 
-#  `datastore_product` 
-#  `datastore_type` 
-#  `datastore_publish` 
-#  `dvo_label` 
-#  `dvo_location` 
-#  `min_ra` 
-#  `max_ra` 
-#  `min_dec` 
-#  `max_dec` 
-#  `box_size` 
-#  `base_path` 
-#  `data_release` 
-#  `delete_local` 
-#  `delete_datastore` 
-#  `delete_dxlayer` 
-#  `epoch` 
-#  `survey` 
-#  `psps_survey` 
-#  `queue_P2` 
-#  `queue_ST` 
-#  `queue_OB` 
-#  `active` 
-#  `parallel` 
+  ippjython setupScratchDb.py -test < /dev/null
+  if ($status) exit
+endif
 
 # this is poor : we need to queue something in order to generate an init batch
@@ -203,32 +179,38 @@
   echo " ---- make skychunk for IN batches ----"
 
-  ippjython queue.py -test edit <<EOF
-initbatch
-test_ds
-IPP_PSPS
-0
-none
-none
-0
-0
-0
-0
-2
-none
-0
-0
-1
-1
-2012-12-10 00:00:00.0
-3PI
-3PI
-0
-0
-0
-1
-0
-y
-y
-EOF
+  echo "initbatch              " >  initbatch.dat # skychunk name
+  echo "test_ds                " >> initbatch.dat # datastore_product
+  echo "IPP_PSPS               " >> initbatch.dat # datastore_type
+  echo "0                      " >> initbatch.dat # datastore_publish
+  echo "none                   " >> initbatch.dat # dvo_label
+  echo "none                   " >> initbatch.dat # dvo_location
+  echo "0                      " >> initbatch.dat # min_ra
+  echo "0                      " >> initbatch.dat # max_ra
+  echo "0                      " >> initbatch.dat # min_dec
+  echo "0                      " >> initbatch.dat # max_dec
+  echo "2                      " >> initbatch.dat # box_size
+  echo "none                   " >> initbatch.dat # base_path
+  echo "0                      " >> initbatch.dat # data_release
+  echo "0                      " >> initbatch.dat # delete_local
+  echo "1                      " >> initbatch.dat # delete_datastore
+  echo "1                      " >> initbatch.dat # delete_dxlayer
+  echo "2012-12-10 00:00:00.0  " >> initbatch.dat # epoch
+  echo "3PI                    " >> initbatch.dat # survey
+  echo "3PI                    " >> initbatch.dat # psps_survey
+  echo "0                      " >> initbatch.dat # queue_P2
+  echo "0                      " >> initbatch.dat # queue_ST
+  echo "0                      " >> initbatch.dat # queue_OB
+  echo "0                      " >> initbatch.dat # queue_DF
+  echo "0                      " >> initbatch.dat # queue_DO
+  echo "0                      " >> initbatch.dat # queue_FW
+  echo "0                      " >> initbatch.dat # queue_FO
+  echo "1                      " >> initbatch.dat # active
+  echo "0                      " >> initbatch.dat # parallel
+  echo "use_new                " >> initbatch.dat # P2_smf_version
+  echo "any                    " >> initbatch.dat # ST_cmf_version
+  echo "2000-01-01 00:00:00.0  " >> initbatch.dat # trange_start
+  echo "2020-01-01 00:00:00.0  " >> initbatch.dat # trange_end
+  cat initbatch.dat | ippjython queue.py -test edit
+  if ($status) exit
 
   echo ""
@@ -236,5 +218,6 @@
 
   rm -rf $OUTDIR/IN
-  ippjython loader.py -test initbatch init
+  ippjython loader.py -test initbatch init -simtest < /dev/null
+  if ($status) exit
 endif
 
@@ -244,32 +227,38 @@
   echo " ---- queue P2 batches ----"
 
-  ippjython queue.py -test edit <<EOF
-$queuename
-test_ds
-IPP_PSPS
-0
-catdir.cam
-$OUTDIR/catdir.cam
-9
-11
-19
-21
-2
-$OUTDIR
-0
-0
-1
-1
-2012-12-10 00:00:00.0
-3PI
-3PI
-1
-0
-0
-1
-0
-y
-y
-EOF
+  echo "$queuename	      " >  cambatch.dat # skychunk name
+  echo "test_ds		      " >> cambatch.dat # datastore_product
+  echo "IPP_PSPS	      " >> cambatch.dat # datastore_type
+  echo "0		      " >> cambatch.dat # datastore_publish
+  echo "catdir.cam	      " >> cambatch.dat # dvo_label
+  echo "$OUTDIR/catdir.cam    " >> cambatch.dat # dvo_location
+  echo "9		      " >> cambatch.dat # min_ra
+  echo "11		      " >> cambatch.dat # max_ra
+  echo "19		      " >> cambatch.dat # min_dec
+  echo "21		      " >> cambatch.dat # max_dec
+  echo "2		      " >> cambatch.dat # box_size
+  echo "$OUTDIR		      " >> cambatch.dat # base_path
+  echo "0		      " >> cambatch.dat # data_release
+  echo "0		      " >> cambatch.dat # delete_local
+  echo "1		      " >> cambatch.dat # delete_datastore
+  echo "1		      " >> cambatch.dat # delete_dxlayer
+  echo "2012-12-10 00:00:00.0 " >> cambatch.dat # epoch
+  echo "3PI		      " >> cambatch.dat # survey
+  echo "3PI		      " >> cambatch.dat # psps_survey
+  echo "1		      " >> cambatch.dat # queue_P2
+  echo "0		      " >> cambatch.dat # queue_ST
+  echo "0		      " >> cambatch.dat # queue_OB
+  echo "0                     " >> cambatch.dat # queue_DF
+  echo "0                     " >> cambatch.dat # queue_DO
+  echo "0                     " >> cambatch.dat # queue_FW
+  echo "0                     " >> cambatch.dat # queue_FO
+  echo "1                     " >> cambatch.dat # active
+  echo "0                     " >> cambatch.dat # parallel
+  echo "use_new               " >> cambatch.dat # P2_smf_version
+  echo "any                   " >> cambatch.dat # ST_cmf_version
+  echo "2000-01-01 00:00:00.0 " >> cambatch.dat # trange_start
+  echo "2020-01-01 00:00:00.0 " >> cambatch.dat # trange_end
+  cat cambatch.dat | ippjython queue.py -test edit -simtest
+  if ($status) exit
 endif
 
@@ -279,5 +268,6 @@
 
   rm -rf $OUTDIR/P2
-  ippjython loader.py -test $queuename once
+  ippjython loader.py -test $queuename once -simtest < /dev/null
+  if ($status) exit
 endif
 
@@ -290,32 +280,38 @@
     set stackqueuename = $queuename\_stk
   endif
-  ippjython queue.py -test edit <<EOF
-$stackqueuename
-test_ds
-IPP_PSPS
-0
-catdir.stk
-$OUTDIR/catdir.stk
-9
-11
-19
-21
-2
-$OUTDIR
-0
-0
-1
-1
-2012-12-10 00:00:00.0
-3PI
-3PI
-0
-1
-0
-1
-0
-y
-y
-EOF
+  echo "$stackqueuename	      " >  stackbatch.dat # skychunk name
+  echo "test_ds		      " >> stackbatch.dat # datastore_product
+  echo "IPP_PSPS	      " >> stackbatch.dat # datastore_type
+  echo "0		      " >> stackbatch.dat # datastore_publish
+  echo "catdir.stk	      " >> stackbatch.dat # dvo_label
+  echo "$OUTDIR/catdir.stk    " >> stackbatch.dat # dvo_location
+  echo "9		      " >> stackbatch.dat # min_ra
+  echo "11		      " >> stackbatch.dat # max_ra
+  echo "19		      " >> stackbatch.dat # min_dec
+  echo "21		      " >> stackbatch.dat # max_dec
+  echo "2		      " >> stackbatch.dat # box_size
+  echo "$OUTDIR		      " >> stackbatch.dat # base_path
+  echo "0		      " >> stackbatch.dat # data_release
+  echo "0		      " >> stackbatch.dat # delete_local
+  echo "1		      " >> stackbatch.dat # delete_datastore
+  echo "1		      " >> stackbatch.dat # delete_dxlayer
+  echo "2012-12-10 00:00:00.0 " >> stackbatch.dat # epoch
+  echo "3PI		      " >> stackbatch.dat # survey
+  echo "3PI		      " >> stackbatch.dat # psps_survey
+  echo "0		      " >> stackbatch.dat # queue_P2
+  echo "1		      " >> stackbatch.dat # queue_ST
+  echo "0		      " >> stackbatch.dat # queue_OB
+  echo "0                     " >> stackbatch.dat # queue_DF
+  echo "0                     " >> stackbatch.dat # queue_DO
+  echo "0                     " >> stackbatch.dat # queue_FW
+  echo "0                     " >> stackbatch.dat # queue_FO
+  echo "1                     " >> stackbatch.dat # active
+  echo "0                     " >> stackbatch.dat # parallel
+  echo "use_new               " >> stackbatch.dat # P2_smf_version
+  echo "any                   " >> stackbatch.dat # ST_cmf_version
+  echo "2000-01-01 00:00:00.0 " >> stackbatch.dat # trange_start
+  echo "2020-01-01 00:00:00.0 " >> stackbatch.dat # trange_end
+  cat stackbatch.dat | ippjython queue.py -test edit -simtest
+  if ($status) exit
 endif
 
@@ -328,5 +324,6 @@
   endif
   rm -rf $OUTDIR/ST
-  ippjython loader.py -test $stackqueuename once
+  ippjython loader.py -test $stackqueuename once -simtest < /dev/null
+  if ($status) exit
 endif
 
@@ -339,32 +336,38 @@
     set objectqueuename = $queuename\_obj
   endif
-  ippjython queue.py -test edit <<EOF
-$objectqueuename
-test_ds
-IPP_PSPS
-0
-catdir.stk
-$OUTDIR/catdir.stk
-9
-11
-19
-21
-2
-$OUTDIR
-0
-0
-1
-1
-2012-12-10 00:00:00.0
-3PI
-3PI
-0
-0
-1
-1
-0
-y
-y
-EOF
+  echo "$objectqueuename      " >  objectbatch.dat # skychunk name
+  echo "test_ds		      " >> objectbatch.dat # datastore_product
+  echo "IPP_PSPS	      " >> objectbatch.dat # datastore_type
+  echo "0		      " >> objectbatch.dat # datastore_publish
+  echo "catdir.cam	      " >> objectbatch.dat # dvo_label
+  echo "$OUTDIR/catdir.cam    " >> objectbatch.dat # dvo_location
+  echo "9		      " >> objectbatch.dat # min_ra
+  echo "11		      " >> objectbatch.dat # max_ra
+  echo "19		      " >> objectbatch.dat # min_dec
+  echo "21		      " >> objectbatch.dat # max_dec
+  echo "2		      " >> objectbatch.dat # box_size
+  echo "$OUTDIR		      " >> objectbatch.dat # base_path
+  echo "0		      " >> objectbatch.dat # data_release
+  echo "0		      " >> objectbatch.dat # delete_local
+  echo "1		      " >> objectbatch.dat # delete_datastore
+  echo "1		      " >> objectbatch.dat # delete_dxlayer
+  echo "2012-12-10 00:00:00.0 " >> objectbatch.dat # epoch
+  echo "3PI		      " >> objectbatch.dat # survey
+  echo "3PI		      " >> objectbatch.dat # psps_survey
+  echo "0		      " >> objectbatch.dat # queue_P2
+  echo "0		      " >> objectbatch.dat # queue_ST
+  echo "1		      " >> objectbatch.dat # queue_OB
+  echo "0                     " >> objectbatch.dat # queue_DF
+  echo "0                     " >> objectbatch.dat # queue_DO
+  echo "0                     " >> objectbatch.dat # queue_FW
+  echo "0                     " >> objectbatch.dat # queue_FO
+  echo "1                     " >> objectbatch.dat # active
+  echo "0                     " >> objectbatch.dat # parallel
+  echo "use_new               " >> objectbatch.dat # P2_smf_version
+  echo "any                   " >> objectbatch.dat # ST_cmf_version
+  echo "2000-01-01 00:00:00.0 " >> objectbatch.dat # trange_start
+  echo "2020-01-01 00:00:00.0 " >> objectbatch.dat # trange_end
+  cat objectbatch.dat | ippjython queue.py -test edit once -simtest
+  if ($status) exit
 endif
 
@@ -377,5 +380,7 @@
   endif
   rm -rf $OUTDIR/OB
-   ippjython loader.py -test $objectqueuename once
-endif
-
+
+  ippjython loader.py -test $objectqueuename once -simtest < /dev/null
+  if ($status) exit
+endif
+
Index: /trunk/ippToPsps/test/mkgpc1.sh
===================================================================
--- /trunk/ippToPsps/test/mkgpc1.sh	(revision 37245)
+++ /trunk/ippToPsps/test/mkgpc1.sh	(revision 37246)
@@ -47,5 +47,6 @@
    bg_stdev REAL,
    ra FLOAT,
-   decl FLOAT
+   decl FLOAT,
+   dateobs DATETIME 
   );
   CREATE TABLE chipRun (
@@ -88,7 +89,9 @@
   );
   CREATE TABLE stackSumSkyfile (
-   stack_id INT
+   stack_id INT,
+   mjd_obs DOUBLE
   );
   CREATE TABLE skycalRun (
+   sky_id INT,
    skycal_id INT,
    stack_id INT
@@ -155,5 +158,5 @@
   echo ntable: $ntable
   if ($ntable != 21) then
-    echo "expected 21 lines (19 tables), but got $ntable, not deleting"
+    echo "expected 21 lines (20 tables), but got $ntable, not deleting"
     exit 2
   endif
Index: /trunk/ippToPsps/test/mkgpc1data.dvo
===================================================================
--- /trunk/ippToPsps/test/mkgpc1data.dvo	(revision 37245)
+++ /trunk/ippToPsps/test/mkgpc1data.dvo	(revision 37246)
@@ -15,16 +15,16 @@
 # exp_id stack_id raw_file exp_file offset
 list imagedata
- 1 1 $OUTDIR/test.01  0.000 
- 2 1 $OUTDIR/test.02 -0.025
- 3 1 $OUTDIR/test.03  0.025
- 4 1 $OUTDIR/test.04  0.010
- 5 2 $OUTDIR/test.05  0.000 
- 6 2 $OUTDIR/test.06 -0.025
- 7 2 $OUTDIR/test.07  0.025
- 8 2 $OUTDIR/test.08  0.010
- 9 3 $OUTDIR/test.09  0.000 
-10 3 $OUTDIR/test.10 -0.025
-11 3 $OUTDIR/test.11  0.025
-12 3 $OUTDIR/test.12  0.010
+ 1 1 $OUTDIR/test.01  0.000 2010/01/01 01:00:00
+ 2 1 $OUTDIR/test.02 -0.025 2010/01/01 02:00:00
+ 3 1 $OUTDIR/test.03  0.025 2010/01/01 03:00:00
+ 4 1 $OUTDIR/test.04  0.010 2010/01/01 04:00:00
+ 5 2 $OUTDIR/test.05  0.000 2010/01/01 05:00:00
+ 6 2 $OUTDIR/test.06 -0.025 2010/01/01 06:00:00
+ 7 2 $OUTDIR/test.07  0.025 2010/01/01 07:00:00
+ 8 2 $OUTDIR/test.08  0.010 2010/01/01 08:00:00
+ 9 3 $OUTDIR/test.09  0.000 2010/01/01 09:00:00
+10 3 $OUTDIR/test.10 -0.025 2010/01/01 10:00:00
+11 3 $OUTDIR/test.11  0.025 2010/01/01 11:00:00
+12 3 $OUTDIR/test.12  0.010 2010/01/01 12:00:00
 end
 
@@ -39,6 +39,8 @@
   # mkcatdir.cam PS1_V3 PS1_V4
   # mkcatdir.stk PS1_V3 PS1_V4
-  mkcatdir.cam PS1_V4 PS1_V4
-  mkcatdir.stk PS1_V4 PS1_V4
+  # mkcatdir.cam PS1_V4 PS1_V4
+  # mkcatdir.stk PS1_V4 PS1_V4
+  mkcatdir.cam PS1_V5 PS1_V5
+  mkcatdir.stk PS1_V5 PS1_V5
   insert.stack.set
 end
@@ -94,5 +96,8 @@
     $offset = $word:3
 
-    ctimes -abs 2008/01/01,$i\:00:00 -var mjd
+    sprintf myDATE "%s" $word:4
+    sprintf myTIME "%s" $word:5
+    echo ctimes -abs $myDATE,$myTIME -var mjd
+    ctimes -abs $myDATE,$myTIME -var mjd
 
     # XXX for a simple test of ippToPsps, i need to generate smf files with some correspondence to gpc1 exposure smfs
@@ -142,5 +147,5 @@
 
     mkinput $offset $rawfile
-    exec mkcmf -no-noise -append $rawfile $cmffile -date 2008/1/1 -time $i\:00:00 -radec $RA $DEC -type $1 -imageID $ID -sourceID 0
+    exec mkcmf -photcode SIMTEST.r.Chip -no-noise -append $rawfile $cmffile -date $myDATE -time $myTIME -radec $RA $DEC -type $1 -imageID $ID -sourceID 0
 
     # keywords which are read from image extension
@@ -203,20 +208,23 @@
     end
 
-    if ($i == 5)
+    if (0 && ($i == 5))
       echo "NOTE: adding image $i 2x to DVO, but without detections : this simulates a failure in LAP dvo"
 
-      echo addstar -D CATDIR $catdir -D CAMERA simtest $cmffile -D CATFORMAT $2 -quick-airmass -image -dup-images
-      exec addstar -D CATDIR $catdir -D CAMERA simtest $cmffile -D CATFORMAT $2 -quick-airmass -image -dup-images
+      echo addstar -D SKY_DEPTH 4 -D CATDIR $catdir -D CAMERA simtest $cmffile -D CATFORMAT $2 -quick-airmass -image -dup-images
+      exec addstar -D SKY_DEPTH 4 -D CATDIR $catdir -D CAMERA simtest $cmffile -D CATFORMAT $2 -quick-airmass -image -dup-images
     end
 
-    if ($i == 7)
+    if (0 && ($i == 7))
       echo "NOTE: adding detections from image $i 2x to DVO, but with wrong photcode and duplicate image ID : this simulates a failure in LAP dvo"
-      echo addstar -D CATDIR $catdir -D CAMERA simtest $cmffile -D CATFORMAT $2 -quick-airmass -dup-images -image-id-override 7 -photcode 2MASS_J
-      exec addstar -D CATDIR $catdir -D CAMERA simtest $cmffile -D CATFORMAT $2 -quick-airmass -dup-images -image-id-override 7 -photcode 2MASS_J
+      echo addstar -D SKY_DEPTH 4 -D CATDIR $catdir -D CAMERA simtest $cmffile -D CATFORMAT $2 -quick-airmass -dup-images -image-id-override 7 -photcode 2MASS_J
+      exec addstar -D SKY_DEPTH 4 -D CATDIR $catdir -D CAMERA simtest $cmffile -D CATFORMAT $2 -quick-airmass -dup-images -image-id-override 7 -photcode 2MASS_J
     end
 
-    echo addstar -D CATDIR $catdir -D CAMERA simtest $cmffile -D CATFORMAT $2 -quick-airmass
-    exec addstar -D CATDIR $catdir -D CAMERA simtest $cmffile -D CATFORMAT $2 -quick-airmass
-  end
+    echo addstar -D SKY_DEPTH 4 -D CATDIR $catdir -D CAMERA simtest $cmffile -D CATFORMAT $2 -quick-airmass
+    exec addstar -D SKY_DEPTH 4 -D CATDIR $catdir -D CAMERA simtest $cmffile -D CATFORMAT $2 -quick-airmass
+  end
+
+  echo relphot -D CATDIR $catdir -region 8 12 18 22 -images g,r,i,z,y -update
+  exec relphot -D CATDIR $catdir -region 8 12 18 22 -images g,r,i,z,y -update
 
   if ($PARALLEL)
@@ -264,13 +272,21 @@
     $offset = $word:2
 
+    ## this is not generating photcodes recognized as stack by relphot
+
     mkinput $offset $rawfile
-    exec mkcmf $rawfile $cmffile -extname SkyChip -date 2008/1/1 -time $i\:00:00 -radec $RA $DEC -type $1 -imageID $ID -sourceID 1
+    exec mkcmf -photcode SIMTEST.r.SkyChip $rawfile $cmffile -extname SkyChip -date 2008/1/1 -time $i\:00:00 -radec $RA $DEC -type $1 -imageID $ID -sourceID 1
 
     # add some required header keywords:
     exec echo "HIERARCH FPA.ZP =          25. / Magnitude zero point" > tmp.hdr
+    exec echo "TESS_ID = 'RINGS.V3'" >> tmp.hdr
+    exec echo "SKYCELL = 'skycell.1133.081'" >> tmp.hdr
     exec fits_insert $cmffile tmp.hdr
 
-    exec addstar -D CATDIR $catdir -D CAMERA simtest $cmffile -D CATFORMAT $2 -quick-airmass
-  end
+    echo addstar -D SKY_DEPTH 4 -D CATDIR $catdir -D CAMERA simtest $cmffile -D CATFORMAT $2 -quick-airmass
+    exec addstar -D SKY_DEPTH 4 -D CATDIR $catdir -D CAMERA simtest $cmffile -D CATFORMAT $2 -quick-airmass
+  end
+
+  echo relphot -D CATDIR $catdir -region 8 12 18 22 -images g,r,i,z,y -update
+  exec relphot -D CATDIR $catdir -region 8 12 18 22 -images g,r,i,z,y -update
 
   if ($PARALLEL)
@@ -308,7 +324,10 @@
 
   # a single exposure
-  dbinsert rawExp (exp_id, exp_name, exp_time, bg, bg_stdev, ra, decl) values ($myID, "test.$myID", 10.0, 100.0, 2.0, {$RA*3.1415/180.0}, {$DEC*3.1415/180.0})
+  echo $myDATE
+  echo $myTIME 
+
+  dbinsert rawExp (exp_id, exp_name, exp_time, bg, bg_stdev, ra, decl, dateobs) values ($myID, "test.$myID", 10.0, 100.0, 2.0, {$RA*3.1415/180.0}, {$DEC*3.1415/180.0}, '$myDATE $myTIME')
   dbinsert chipRun (exp_id, chip_id) values ($myID, $myID)
-  dbinsert camRun (chip_id, cam_id, dist_group, software_ver) values ($myID, $myID, "testgroup", "testsoft")
+  dbinsert camRun (chip_id, cam_id, dist_group, software_ver) values ($myID, $myID, "testgroup", "38000M")
   dbinsert camProcessedExp (cam_id, path_base, fault) values ($myID, "$filename", 0)
   dbinsert fakeRun (fake_id, cam_id) values ($myID, $myID)
@@ -332,5 +351,11 @@
   $stkfile = $2
 
-  dbinsert stackRun (stack_id, skycell_id, filter, software_ver) values ($stkID, "skycell.0000.000", "g.00000", "testsoft")
+  dbinsert stackRun (stack_id, skycell_id, filter, software_ver) values ($stkID, "skycell.0000.000", "g.00000", "37500")
+
+  $TIMEFORMAT = mjd
+  $TIMEREF = 2001/01/01,00:00:00
+
+  $mjdsum = 0.0
+  $Nstk = 0
 
   for i 0 $imagedata:n
@@ -341,9 +366,18 @@
     $expID = $tmp:0
     $expfile = $tmp:2
+    sprintf myDATE "%s" $tmp:4
+    sprintf myTIME "%s" $tmp:5
     insert.exp $expID $expfile
     dbinsert stackInputSkyfile (stack_id, warp_id) values ($stkID, $expID)
-  end
-  dbinsert stackSumSkyfile (stack_id) values ($stkID)
-  dbinsert skycalRun (skycal_id, stack_id) values ($stkID, $stkID)
+
+    echo ctimes -abs $myDATE,$myTIME -var mjd
+         ctimes -abs $myDATE,$myTIME -var mjd
+    $mjdsum += $mjd
+    $Nstk ++
+  end
+  $mjd = $mjdsum / $Nstk
+
+  dbinsert stackSumSkyfile (stack_id, mjd_obs) values ($stkID, $mjd)
+  dbinsert skycalRun (sky_id, skycal_id, stack_id) values ($stkID, $stkID, $stkID)
   dbinsert skycalResult (skycal_id, path_base) values ($stkID, "$stkfile")
   
Index: /trunk/ippToPsps/test/mksasdata.dvo
===================================================================
--- /trunk/ippToPsps/test/mksasdata.dvo	(revision 37245)
+++ /trunk/ippToPsps/test/mksasdata.dvo	(revision 37246)
@@ -4,10 +4,24 @@
 
 if (not($?VERBOSE)) set VERBOSE = 0
+if (not($?PARALLEL)) set PARALLEL = 0
 
-$OUTDIR = sas12
+$OUTDIR = sasdata
+
+if (not($?KEEPDVO)) set KEEPDVO = 0
+
+list expfiles
+  sasdata/o5745g0495o.356867.cm.982612
+  sasdata/o5745g0507o.356882.cm.982626
+  sasdata/o5745g0517o.356892.cm.982636
+  sasdata/o5745g0527o.356909.cm.982650
+end
 
 macro mkfull
   init.db
-  mkcatdir
+  mkcatdir.cam
+  mkcatdir.stk
+  mkcal
+  mkgpc1.cam
+  mkgpc1.stk
 end
 
@@ -18,12 +32,8 @@
   $dbpass = dvo
 
-  # exposure center
-  $RA = 333.8
-  $DEC = 1.6
-
-  # stack center
-  # XXX the selected stack centers come from the input exposures, so I should use a gpc1 db with stacks associated with real exposures
-  $RA = 331.6
-  $DEC = -6.0
+  # are these used to find the exposures in any way?
+  # center of the test skycell
+  $RA = 333.5
+  $DEC = -5.0
 
   break -auto off
@@ -36,9 +46,9 @@
   # system-wide info
   dbinsert ippToPspsFake (my_id) values (2)
-  dbinsert skycell (radeg, decdeg, skycell_id) values ($RA, $DEC, "skycell.0000.000")
+  dbinsert skycell (radeg, decdeg, skycell_id) values ($RA, $DEC, "skycell.1225.070")
 end
 
 # create a populated catdir with a set of cmf files, save the filenames in list for use by insert.exp
-macro mkcatdir
+macro mkcatdir.cam
   if ($0 != 1)
     echo "mkcatdir"
@@ -49,44 +59,122 @@
 
   local catdir
-  $catdirbase = catdir.sas12
+  $catdirbase = catdir.sas.cam
+  $catdir = $OUTDIR/$catdirbase
+
+  exec rm -rf $catdir
+
+  for i 0 $expfiles:n
+    $expfile = $expfiles:$i
+
+    exec addstar -D CAMERA gpc1 -D CATDIR $catdir -D CATFORMAT PS1_V5 $expfile.smf -update
+  end
+  exec addstar -D CATDIR $catdir -region 330 340 -10 0 -resort
+end
+
+# create a populated catdir with a set of cmf files, save the filenames in list for use by insert.exp
+macro mkcatdir.stk
+  if ($0 != 1)
+    echo "mkcatdir"
+    break
+  end
+
+  mkdir $OUTDIR
+
+  local catdir
+  $catdirbase = catdir.sas.stk
   $catdir = $OUTDIR/$catdirbase
   exec rm -rf $catdir
 
-  $expfile = sas12.test.psps/o5745g0620o.356996.cm.473458
-  exec addstar -D CAMERA gpc1 -D CATDIR $catdir $expfile.smf
+  # a single stack
+  $stkfile = sasdata/RINGS.V3.skycell.1225.070.stk.3366216.skycal.1589960
+  exec addstar -D CAMERA gpc1 -D CATFORMAT PS1_V5 -D CATDIR $catdir $stkfile.cmf
+end
 
-  # are these used to find the exposures in any way?
-  $RA = 333.8
-  $DEC = 1.6
+macro mkcal
 
-  # a single exposure
-  $expID = 1
-  dbinsert rawExp (exp_id, exp_name, exp_time, bg, bg_stdev, ra, decl) values ($expID, "o5745g0620o", 10.0, 100.0, 2.0, {$RA*3.1415/180.0}, {$DEC*3.1415/180.0})
-  dbinsert chipRun (exp_id, chip_id) values ($expID, $expID)
-  dbinsert camRun (chip_id, cam_id, dist_group, software_ver) values ($expID, $expID, "testgroup", "testsoft")
-  dbinsert camProcessedExp (cam_id, path_base) values ($expID, "$expfile")
-  dbinsert fakeRun (fake_id, cam_id) values ($expID, $expID)
-  dbinsert warpRun (warp_id, fake_id) values ($expID, $expID)
-  dbinsert warpSkyCellMap (warp_id, skycell_id, class_id) values ($expID, "skycell.0000.000", "XY00")
-  dbinsert addRun (stage, state, stage_id, minidvodb_name) values ("cam", "full", $expID, "$catdirbase")
+  local catdir
+  $catdir = $OUTDIR/catdir.sas.cam
+
+  # merge the cam and stk databases together:
+  exec dvomerge $OUTDIR/catdir.sas.stk into $catdir
+
+  # run relphot
+  echo relphot -D CATDIR $catdir -region 330 340 -10 0 -images g,r,i,z,y -update -boundary-tree tess.3pi.fits
+  exec relphot -D CATDIR $catdir -region 330 340 -10 0 -images g,r,i,z,y -update -boundary-tree tess.3pi.fits
+
+  echo relastro -v -D CATDIR $catdir -images -update-chips -region 330 340 -10 0 -update
+  exec relastro -v -D CATDIR $catdir -images -update-chips -region 330 340 -10 0 -update
+end
+
+# create a populated catdir with a set of cmf files, save the filenames in list for use by insert.exp
+macro mkgpc1.cam
+  if ($0 != 1)
+    echo "mkgpc1.cam"
+    break
+  end
+
+  local catdirbase
+  $catdirbase = catdir.sas.cam
+
+  for i 0 $expfiles:n
+    $expfile = $expfiles:$i
+
+    # are these used to find the exposures in any way?
+    $RA = 333.9
+    $DEC = -3.8
+
+    # a single exposure
+    $expID = $i + 1
+    substr $expfile 8 11 expname
+
+    dbinsert rawExp (exp_id, exp_name, exp_time, bg, bg_stdev, ra, decl, dateobs) values ($expID, "$expname", 10.0, 100.0, 2.0, {$RA*3.1415/180.0}, {$DEC*3.1415/180.0}, "2010/01/01 00:00:00")
+    dbinsert chipRun (exp_id, chip_id) values ($expID, $expID)
+    dbinsert camRun (chip_id, cam_id, dist_group, software_ver) values ($expID, $expID, "testgroup", "38000M")
+    dbinsert camProcessedExp (cam_id, path_base, fault) values ($expID, "$expfile", 0)
+    dbinsert fakeRun (fake_id, cam_id) values ($expID, $expID)
+    dbinsert warpRun (warp_id, fake_id) values ($expID, $expID)
+    dbinsert warpSkyCellMap (warp_id, skycell_id, class_id) values ($expID, "skycell.1225.070", "XY00")
+    dbinsert addRun (add_id, stage, state, stage_id, minidvodb_name) values ($expID, "cam", "full", $expID, "$catdirbase")
+    dbinsert addProcessedExp (add_id, fault) values ($expID, 0)
+    
+    # catdirs for the exposures
+    dbinsert minidvodbRun (minidvodb_name, minidvodb_id, state) values ("$catdirbase", 1, "merged")
+    dbinsert minidvodbProcessed (minidvodb_id, fault) values (1, 0)
+    
+    dbinsert mergedvodbRun (minidvodb_id, merge_id, state, mergedvodb) values (1, 1, "full", "$catdirbase")
+    dbinsert mergedvodbProcessed (merge_id, fault) values (1, 0)
+  end
+end
+
+# create a populated catdir with a set of cmf files, save the filenames in list for use by insert.exp
+macro mkgpc1.stk
+  if ($0 != 1)
+    echo "mkgpc1.stk"
+    break
+  end
+
+  local catdirbase
+  $catdirbase = catdir.sas.cam
+
+  $TIMEFORMAT = mjd
+  $TIMEREF = 2001/01/01,00:00:00
+  ctimes -abs 2010/01/01,00:00:00 -var mjd
 
   # a single stack
-  $stkfile = sas12.test.psps/RINGS.V3.skycell.1225.070.stk.1032983.skycal.40531
-  exec addstar -D CAMERA gpc1 -D CATDIR $catdir $stkfile.cmf
+  $stkfile = sasdata/RINGS.V3.skycell.1225.070.stk.3366216.skycal.1589960
 
-  $stkID = 1
-  dbinsert stackRun (stack_id, skycell_id, filter, software_ver) values ($stkID, "skycell.0000.000", "g.00000", "testsoft")
+  break -auto off
+  $tmpline = `echo $stkfile.cmf | fields IMAGEID`
+  list words -split $tmpline
+  $stkID = $words:1
+  break -auto on
+
+  $expID = 1
+  dbinsert stackRun (stack_id, skycell_id, filter, software_ver) values ($stkID, "skycell.1225.070", "i.00000", "37500M")
   dbinsert stackInputSkyfile (stack_id, warp_id) values ($stkID, $expID)
-  dbinsert stackSumSkyfile (stack_id) values ($stkID)
-  dbinsert skycalRun (skycal_id, stack_id) values ($stkID, $stkID)
+  dbinsert stackSumSkyfile (stack_id, mjd_obs) values ($stkID, $mjd)
+  dbinsert skycalRun (sky_id, skycal_id, stack_id) values ($stkID, $stkID, $stkID)
   dbinsert skycalResult (skycal_id, path_base) values ($stkID, "$stkfile")
   dbinsert addRun (stage, state, stage_id, minidvodb_name) values ("skycal", "full", $stkID, "$catdirbase")
-
-  # catdirs for the exposures
-  dbinsert minidvodbRun (minidvodb_name, minidvodb_id, state) values ("$catdirbase", 1, "merged")
-  dbinsert minidvodbProcessed (minidvodb_id, fault) values (1, 0)
-  
-  dbinsert mergedvodbRun (minidvodb_id, merge_id, state, mergedvodb) values (1, 1, "full", "$catdirbase")
-  dbinsert mergedvodbProcessed (merge_id, fault) values (1, 0)
 
   # catdirs for the stack
Index: /trunk/ippToPsps/test/sascheck.v0.sql
===================================================================
--- /trunk/ippToPsps/test/sascheck.v0.sql	(revision 37246)
+++ /trunk/ippToPsps/test/sascheck.v0.sql	(revision 37246)
@@ -0,0 +1,25 @@
+
+-- get a set of measurements matched by detID
+select 
+   gra,
+   gdec,
+   objID,             
+   HEX(ippObjID),          
+   surveyID,          
+   tessID,            
+   projectionID,      
+   skyCellID,         
+   randomStackObjID,  
+   stackDetectRowID,  
+   primaryDetection,  
+-- bestDetection,     
+   dvoRegionID,       
+   dataRelease,       
+   gippDetectID,      
+   gstackDetectID,    
+   gstackMetaID,      
+   HEX(ginfoFlag),        
+   HEX(ginfoFlag2),       
+   gnFrames         
+from StackObjectThin 
+limit 50
Index: /trunk/ippToPsps/test/sascheck.v1.sql
===================================================================
--- /trunk/ippToPsps/test/sascheck.v1.sql	(revision 37246)
+++ /trunk/ippToPsps/test/sascheck.v1.sql	(revision 37246)
@@ -0,0 +1,44 @@
+-- compare g mags across stack tables
+select 
+       gra,
+       gdec,
+       graErr,
+       gdecErr,
+       gPSFMag,
+       gKronMag,
+       gApMag,
+       gExpMag,
+       gSerMag,
+       gDeVMag,
+       gpetMag,
+       gPSFMagErr,
+       gKronMagErr,
+       gApMagErr,
+       gExpMagErr,
+       gSerMagErr,
+       gDeVMagErr,
+       gpetMagErr,
+       gpsfLikelihood,    
+       gpsfQf,            
+       gpsfQfPerfect,     
+       gippDetectID
+       from StackObjectThin 
+       -- left join StackObjectRaw   using (gippDetectID)
+       -- left join StackModelFitExp using (gippDetectID)
+       -- left join StackModelFitDeV using (gippDetectID)
+       -- left join StackModelFitSer using (gippDetectID)
+       -- left join StackPetrosian   using (gippDetectID)
+       -- left join StackApFlxFull   using (gippDetectID)
+       -- left join StackApFlxFullC1 using (gippDetectID)
+       -- left join StackApFlxFullC2 using (gippDetectID)
+       join StackObjectRaw   using (gippDetectID)
+       join StackModelFitExp using (gippDetectID)
+       join StackModelFitDeV using (gippDetectID)
+       join StackModelFitSer using (gippDetectID)
+       join StackPetrosian   using (gippDetectID)
+       join StackApFlxFull   using (gippDetectID)
+       join StackApFlxFullC1 using (gippDetectID)
+       join StackApFlxFullC2 using (gippDetectID)
+       -- where (gippDetectID = 189)
+       -- where (gpsfQfPerfect > 0.85)
+       limit 50
Index: /trunk/ippToPsps/test/sascheck.v10.sql
===================================================================
--- /trunk/ippToPsps/test/sascheck.v10.sql	(revision 37246)
+++ /trunk/ippToPsps/test/sascheck.v10.sql	(revision 37246)
@@ -0,0 +1,28 @@
+-- compare g fluxes across tables
+select 
+       gra,
+       gdec,
+       gPSFFlux,
+       gApFlux,
+       gPSFFluxErr,
+       gApFluxErr,
+       gApFillFac,
+       StackApFlx.gflxR3 as gflxR3_v1,
+       StackApFlxFull.gflxR3 as gflxR3_v2,
+       StackApFlx.gflxR4 as gflxR4_v1,
+       StackApFlxFull.gflxR4 as gflxR4_v2,
+       StackApFlx.gflxR5 as gflxR5_v1,
+       StackApFlxFull.gflxR5 as gflxR5_v2,
+       StackApFlx.gflxR3Err as gflxR3Err_v1,
+       StackApFlxFull.gflxR3Err as gflxR3Err_v2,
+       StackApFlx.gflxR4Err as gflxR4Err_v1,
+       StackApFlxFull.gflxR4Err as gflxR4Err_v2,
+       StackApFlx.gflxR5Err as gflxR5Err_v1,
+       StackApFlxFull.gflxR5Err as gflxR5Err_v2,
+       gippDetectID
+       from StackObjectThin 
+       join StackObjectRaw   using (gippDetectID)
+       join StackApFlx       using (gippDetectID)
+       join StackApFlxFull   using (gippDetectID)
+       where gPSFFlux > 1000
+       limit 50
Index: /trunk/ippToPsps/test/sascheck.v11.sql
===================================================================
--- /trunk/ippToPsps/test/sascheck.v11.sql	(revision 37246)
+++ /trunk/ippToPsps/test/sascheck.v11.sql	(revision 37246)
@@ -0,0 +1,21 @@
+-- compare g fluxes across tables
+select 
+       gra,
+       gdec,
+       gPSFMag,
+       gPSFMagErr,
+       gpetRadius,    
+       gpetRadiusErr, 
+       gpetMag,      
+       gpetMagErr,   
+       gpetR50,       
+       gpetR50Err,    
+       gpetR90,       
+       gpetR90Err,    
+       gpetCf,        
+       gippDetectID
+       from StackObjectThin 
+       join StackObjectRaw   using (gippDetectID)
+       join StackPetrosian   using (gippDetectID)
+       where gPSFFlux > 1000
+       limit 50
Index: /trunk/ippToPsps/test/sascheck.v2.sql
===================================================================
--- /trunk/ippToPsps/test/sascheck.v2.sql	(revision 37246)
+++ /trunk/ippToPsps/test/sascheck.v2.sql	(revision 37246)
@@ -0,0 +1,29 @@
+-- compare g raw PSF values
+select 
+  gippDetectID,
+  gxPos,             
+  gyPos,             
+  gxPosErr,          
+  gyPosErr,          
+  gpsfMajorFWHM,     
+  gpsfMinorFWHM,     
+  gpsfTheta,         
+  gpsfCore,          
+  gpsfLikelihood,    
+  gpsfQf,            
+  gpsfQfPerfect,     
+  gpsfChiSq,         
+  gmomentXX,         
+  gmomentXY,         
+  gmomentYY,         
+  gmomentR1,         
+  gmomentRH,         
+  gApFillFac,        
+  gKronRad,          
+  gsky,
+  gskyErr,
+  gexpTime,          
+  gzp              
+  from StackObjectThin 
+  join StackObjectRaw using (gippDetectID)
+  limit 80
Index: /trunk/ippToPsps/test/sascheck.v3.sql
===================================================================
--- /trunk/ippToPsps/test/sascheck.v3.sql	(revision 37246)
+++ /trunk/ippToPsps/test/sascheck.v3.sql	(revision 37246)
@@ -0,0 +1,32 @@
+-- compare g fluxes across tables
+select 
+       gra,
+       gdec,
+       gPSFFlux,
+       gKronFlux,
+       gApFlux,
+       gPSFFluxErr,
+       gKronFluxErr,
+       gApFluxErr,
+       gApFillFac,
+       gflxR1,
+       gflxR2,
+       gflxR3,
+       gflxR4,
+       gflxR5,
+       gflxR6,
+       gflxR7,
+       gflxR8,
+       gflxR9,
+       gflxR10,
+       gippDetectID
+       from StackObjectThin 
+       join StackObjectRaw   using (gippDetectID)
+       join StackModelFitExp using (gippDetectID)
+       join StackModelFitDeV using (gippDetectID)
+       join StackModelFitSer using (gippDetectID)
+       join StackPetrosian   using (gippDetectID)
+       join StackApFlxFull   using (gippDetectID)
+       join StackApFlxFullC1 using (gippDetectID)
+       join StackApFlxFullC2 using (gippDetectID)
+       limit 50
Index: /trunk/ippToPsps/test/sascheck.v4.sql
===================================================================
--- /trunk/ippToPsps/test/sascheck.v4.sql	(revision 37246)
+++ /trunk/ippToPsps/test/sascheck.v4.sql	(revision 37246)
@@ -0,0 +1,38 @@
+-- compare g fluxes across tables
+select 
+       gra,
+       gdec,
+       gPSFFlux,
+       gKronFlux,
+       gApFlux,
+       gflxR1,
+       gc1flxR1,
+       gc2flxR1,
+       gflxR2,
+       gc1flxR2,
+       gc2flxR2,
+       gflxR3,
+       gc1flxR3,
+       gc2flxR3,
+       gflxR4,
+       gc1flxR4,
+       gc2flxR4,
+       gflxR5,
+       gc1flxR5,
+       gc2flxR5,
+       gPSFFluxErr,
+       gKronFluxErr,
+       gApFluxErr,
+       gApFillFac,
+       gpsfQfPerfect,
+       gippDetectID
+       from StackObjectThin 
+       join StackObjectRaw   using (gippDetectID)
+       join StackModelFitExp using (gippDetectID)
+       join StackModelFitDeV using (gippDetectID)
+       join StackModelFitSer using (gippDetectID)
+       join StackPetrosian   using (gippDetectID)
+       join StackApFlxFull   using (gippDetectID)
+       join StackApFlxFullC1 using (gippDetectID)
+       join StackApFlxFullC2 using (gippDetectID)
+       limit 50
Index: /trunk/ippToPsps/test/sascheck.v5.sql
===================================================================
--- /trunk/ippToPsps/test/sascheck.v5.sql	(revision 37246)
+++ /trunk/ippToPsps/test/sascheck.v5.sql	(revision 37246)
@@ -0,0 +1,32 @@
+-- compare g mags across stack tables
+select 
+       gra,
+       gdec,
+       gExpMag,
+       gSerMag,
+       gDeVMag,
+       gExpRadius,
+       gSerRadius,
+       gDeVRadius,
+       gExpAb,
+       gSerAb,
+       gDeVAb,
+       gExpPhi,
+       gSerPhi,
+       gDeVPhi,
+       gippDetectID
+       from StackObjectThin 
+       -- left join StackObjectRaw   using (gippDetectID)
+       -- left join StackModelFitExp using (gippDetectID)
+       -- left join StackModelFitDeV using (gippDetectID)
+       -- left join StackModelFitSer using (gippDetectID)
+       -- left join StackPetrosian   using (gippDetectID)
+       -- left join StackApFlxFull   using (gippDetectID)
+       -- left join StackApFlxFullC1 using (gippDetectID)
+       -- left join StackApFlxFullC2 using (gippDetectID)
+       join StackObjectRaw   using (gippDetectID)
+       join StackModelFitExp using (gippDetectID)
+       join StackModelFitDeV using (gippDetectID)
+       join StackModelFitSer using (gippDetectID)
+       -- where (gpsfQfPerfect > 0.85)
+       limit 50
Index: /trunk/ippToPsps/test/sascheck.v6.sql
===================================================================
--- /trunk/ippToPsps/test/sascheck.v6.sql	(revision 37246)
+++ /trunk/ippToPsps/test/sascheck.v6.sql	(revision 37246)
@@ -0,0 +1,25 @@
+-- compare g mags across stack tables
+select 
+       gra,
+       gdec,
+       gExpMag,
+       gExpMagErr,
+       gExpRadius,
+       gExpRadiusErr,
+       gExpAb,
+       gExpAbErr,
+       gExpPhi,
+       gExpPhiErr,
+       gExpRa,
+       gExpDec,
+       gExpRaErr,
+       gExpDecErr,
+       gExpCf,
+       gExpLikelihood,
+       gippDetectID
+       from StackObjectThin 
+       join StackModelFitExp using (gippDetectID)
+       join StackModelFitDeV using (gippDetectID)
+       join StackModelFitSer using (gippDetectID)
+       -- where (gpsfQfPerfect > 0.85)
+       limit 50
Index: /trunk/ippToPsps/test/sascheck.v7.sql
===================================================================
--- /trunk/ippToPsps/test/sascheck.v7.sql	(revision 37246)
+++ /trunk/ippToPsps/test/sascheck.v7.sql	(revision 37246)
@@ -0,0 +1,25 @@
+-- compare g mags across stack tables
+select 
+       gra,
+       gdec,
+       gDeVMag,
+       gDeVMagErr,
+       gDeVRadius,
+       gDeVRadiusErr,
+       gDeVAb,
+       gDeVAbErr,
+       gDeVPhi,
+       gDeVPhiErr,
+       gDeVRa,
+       gDeVDec,
+       gDeVRaErr,
+       gDeVDecErr,
+       gDeVCf,
+       gDeVLikelihood,
+       gippDetectID
+       from StackObjectThin 
+       join StackModelFitExp using (gippDetectID)
+       join StackModelFitDeV using (gippDetectID)
+       join StackModelFitSer using (gippDetectID)
+       -- where (gpsfQfPerfect > 0.85)
+       limit 50
Index: /trunk/ippToPsps/test/sascheck.v8.sql
===================================================================
--- /trunk/ippToPsps/test/sascheck.v8.sql	(revision 37246)
+++ /trunk/ippToPsps/test/sascheck.v8.sql	(revision 37246)
@@ -0,0 +1,27 @@
+-- compare g mags across stack tables
+select 
+       gra,
+       gdec,
+       gSerMag,
+       gSerMagErr,
+       gSerRadius,
+       gSerRadiusErr,
+       gSerAb,
+       gSerAbErr,
+       gSerNu,
+       gSerNuErr,
+       gSerPhi,
+       gSerPhiErr,
+       gSerRa,
+       gSerDec,
+       gSerRaErr,
+       gSerDecErr,
+       gSerCf,
+       gSerLikelihood,
+       gippDetectID
+       from StackObjectThin 
+       join StackModelFitExp using (gippDetectID)
+       join StackModelFitDeV using (gippDetectID)
+       join StackModelFitSer using (gippDetectID)
+       -- where (gpsfQfPerfect > 0.85)
+       limit 50
Index: /trunk/ippToPsps/test/sascheck.v9.sql
===================================================================
--- /trunk/ippToPsps/test/sascheck.v9.sql	(revision 37246)
+++ /trunk/ippToPsps/test/sascheck.v9.sql	(revision 37246)
@@ -0,0 +1,29 @@
+-- compare g fluxes across tables
+select 
+       gra,
+       gdec,
+       gxPos,
+       gyPos,
+       gPSFFlux,
+       gApFlux,
+       gPSFFluxErr,
+       gApFluxErr,
+       gApFillFac,
+       gflxR3,
+       gflxR4,
+       gflxR5,
+       gflxR3Err,
+       gflxR4Err,
+       gflxR5Err,
+       gflxR3Std,
+       gflxR4Std,
+       gflxR5Std,
+       gflxR3Fill,
+       gflxR4Fill,
+       gflxR5Fill,
+       gippDetectID
+       from StackObjectThin 
+       join StackObjectRaw   using (gippDetectID)
+       join StackApFlx       using (gippDetectID)
+       where gPSFFlux > 1000
+       limit 50
Index: /trunk/ippToPsps/test/sastest.sh
===================================================================
--- /trunk/ippToPsps/test/sastest.sh	(revision 37245)
+++ /trunk/ippToPsps/test/sastest.sh	(revision 37246)
@@ -1,9 +1,5 @@
 #!/bin/csh -f
 
-set stackqueuename = 0
-if ($#argv > 0) then
-  set stackqueuename = $1
-  echo "stackqueue: $stackqueuename"
-endif
+chmod +x mksasdata.dvo mkgpc1.sh
 
 # a bit crude : get the datadir path by interpolation of the PATH element for psconfig
@@ -19,18 +15,136 @@
 # mkgpc1.sh user localhost eam eam
 
-set mkgpc1      = 1
-set initdb      = 1
-set mkdummy     = 1
-set initscratch = 1
-set initbatch   = 1
-set camqueue    = 1
-set cambatch    = 1
-set stackqueue  = 0
-set stackbatch  = 0
-
-set OUTDIR = "sas12"
+set mkgpc1       = 1
+set initdb       = 1
+set mkdummy      = 1
+set initscratch  = 1
+set initbatch    = 1
+set camqueue     = 1
+set cambatch     = 1
+set stackqueue   = 1
+set stackbatch   = 1
+set objectqueue  = 1
+set objectbatch  = 1
+
+set targ = ($argv)
+set args = ""
+
+while ($#targ)
+ switch ("$targ[1]")
+  case -h
+  case -help
+    echo "USAGE: fulltest.sh [-XX] [+XX]"
+    echo " -XX : turn off features"
+    echo " +XX : turn on features"
+    echo "  features: all, mkgpc1, initdb, initscratch, initbatch, camera, stack, object"
+    exit 2
+  case -all
+    set mkgpc1       = 0
+    set initdb       = 0
+    set initscratch  = 0
+    set initbatch    = 0
+    set camqueue     = 0
+    set cambatch     = 0
+    set stackqueue   = 0
+    set stackbatch   = 0
+    set objectqueue  = 0
+    set objectbatch  = 0
+    breaksw;
+  case -mkgpc1
+    set mkgpc1 = 0
+    breaksw;
+  case -initdb
+    set initdb = 0
+    breaksw;
+  case -initscratch
+    set initscratch = 0
+    breaksw;
+  case -initbatch
+    set initbatch = 0
+    breaksw;
+  case -camera
+    set camqueue = 0
+    set cambatch = 0
+    breaksw;
+  case -stack
+    set stackqueue = 0
+    set stackbatch = 0
+    breaksw;
+  case -object
+    set objectqueue = 0
+    set objectbatch = 0
+    breaksw;
+  default:
+    set args=($args $targ[1]);
+    breaksw;
+  endsw
+  shift targ
+end
+
+set targ = ($args)
+set args = ""
+
+while ($#targ)
+ switch ("$targ[1]")
+  case +all
+    set mkgpc1       = 1
+    set initdb       = 1
+    set initscratch  = 1
+    set initbatch    = 1
+    set camqueue     = 1
+    set cambatch     = 1
+    set stackqueue   = 1
+    set stackbatch   = 1
+    set objectqueue  = 1
+    set objectbatch  = 1
+    breaksw;
+  case +mkgpc1
+    set mkgpc1 = 1
+    breaksw;
+  case +initdb
+    set initdb = 1
+    breaksw;
+  case +initscratch
+    set initscratch = 1
+    breaksw;
+  case +initbatch
+    set initbatch = 1
+    breaksw;
+  case "+camera"
+    set camqueue = 1
+    set cambatch = 1
+    breaksw;
+  case +stack
+    set stackqueue = 1
+    set stackbatch = 1
+    breaksw;
+  case +object
+    set objectqueue = 1
+    set objectbatch = 1
+    breaksw;
+  default:
+    set args=($args $targ[1]);
+    breaksw;
+  endsw
+  shift targ
+end
+
+if ($args[1] != "") then
+    echo "USAGE: sastest.sh [-XX] [+XX]"
+    echo " -XX : turn off features"
+    echo " +XX : turn on features"
+    echo "  features: all, mkgpc1, initdb, initscratch, initbatch, camera, stack, object"
+    exit 2
+endif
+
+set stackqueuename = 0
+set objectqueuename = 0
+
+set OUTDIR = "sasdata"
 set queuename = "test"
 
 if ($mkgpc1) then
+  echo ""
+  echo " ---- mksasdata.dvo : creating the dvo & gpc1 database entries ----"
   mksasdata.dvo
 endif
@@ -38,4 +152,6 @@
 # create the ipptopsps database
 if ($initdb) then 
+  echo ""
+  echo " ---- init ipptopsps_test ----"
 
   # does the database already exist?
@@ -43,5 +159,4 @@
   mysql -h localhost -u dvo -pdvo -e "create database ipptopsps_test"
   mysql -h localhost -u dvo -pdvo ipptopsps_test < $IPPTOPSPS_DATA/ippToPspsDbSchema.sql
-
 endif
 
@@ -52,89 +167,219 @@
   mysql -h localhost -u dvo -pdvo -e "drop database ipptopsps_scratch"
   mysql -h localhost -u dvo -pdvo -e "create database ipptopsps_scratch"
-  ippjython setupScratchDb.py -test
+  ippjython setupScratchDb.py -test < /dev/null
+  if ($status) exit
+endif
+
+# this is poor : we need to queue something in order to generate an init batch
+# this is because a skychunk carries the info about the datastore used to publish
+# the batch
+if ($initbatch) then
+  echo ""
+  echo " ---- make skychunk for IN batches ----"
+
+  echo "initbatch              " >  initbatch.dat # skychunk name
+  echo "test_ds                " >> initbatch.dat # datastore_product
+  echo "IPP_PSPS               " >> initbatch.dat # datastore_type
+  echo "0                      " >> initbatch.dat # datastore_publish
+  echo "none                   " >> initbatch.dat # dvo_label
+  echo "none                   " >> initbatch.dat # dvo_location
+  echo "0                      " >> initbatch.dat # min_ra
+  echo "0                      " >> initbatch.dat # max_ra
+  echo "0                      " >> initbatch.dat # min_dec
+  echo "0                      " >> initbatch.dat # max_dec
+  echo "2                      " >> initbatch.dat # box_size
+  echo "none                   " >> initbatch.dat # base_path
+  echo "0                      " >> initbatch.dat # data_release
+  echo "0                      " >> initbatch.dat # delete_local
+  echo "1                      " >> initbatch.dat # delete_datastore
+  echo "1                      " >> initbatch.dat # delete_dxlayer
+  echo "2012-12-10 00:00:00.0  " >> initbatch.dat # epoch
+  echo "3PI                    " >> initbatch.dat # survey
+  echo "3PI                    " >> initbatch.dat # psps_survey
+  echo "0                      " >> initbatch.dat # queue_P2
+  echo "0                      " >> initbatch.dat # queue_ST
+  echo "0                      " >> initbatch.dat # queue_OB
+  echo "0                      " >> initbatch.dat # queue_DF
+  echo "0                      " >> initbatch.dat # queue_DO
+  echo "0                      " >> initbatch.dat # queue_FW
+  echo "0                      " >> initbatch.dat # queue_FO
+  echo "1                      " >> initbatch.dat # active
+  echo "0                      " >> initbatch.dat # parallel
+  echo "use_new                " >> initbatch.dat # P2_smf_version
+  echo "any                    " >> initbatch.dat # ST_cmf_version
+  echo "2000-01-01 00:00:00.0  " >> initbatch.dat # trange_start
+  echo "2020-01-01 00:00:00.0  " >> initbatch.dat # trange_end
+  cat initbatch.dat | ippjython queue.py -test edit
+  if ($status) exit
+
+  echo ""
+  echo " ---- create init batch ----"
+
+  rm -rf $OUTDIR/IN
+  ippjython loader.py -test initbatch init < /dev/null
+  if ($status) exit
 endif
 
 # this code is sensitive to a previously existing database?
 if ($camqueue) then
-  ippjython queue.py -test edit <<EOF
-$queuename
-test_ds
-IPP_PSPS
-0
-catdir.sas12
-$OUTDIR/catdir.sas12
-330
-340
--8
-2
-1
-$OUTDIR
-0
-0
-1
-1
-2012-12-10 00:00:00.0
-3PI
-3PI
-1
-1
-1
-1
-0
-1
-y
-y
-EOF
-endif
-
-if ($initbatch) then
-  ippjython loader.py -test $queuename init
+  echo ""
+  echo " ---- queue P2 batches ----"
+
+  echo "$queuename	      " >  cambatch.dat # skychunk name
+  echo "test_ds		      " >> cambatch.dat # datastore_product
+  echo "IPP_PSPS	      " >> cambatch.dat # datastore_type
+  echo "0		      " >> cambatch.dat # datastore_publish
+  echo "catdir.sas.cam	      " >> cambatch.dat # dvo_label
+  echo "$OUTDIR/catdir.sas.cam" >> cambatch.dat # dvo_location
+  echo "330		      " >> cambatch.dat # min_ra
+  echo "340		      " >> cambatch.dat # max_ra
+  echo "-10		      " >> cambatch.dat # min_dec
+  echo "0		      " >> cambatch.dat # max_dec
+  echo "1		      " >> cambatch.dat # box_size
+  echo "$OUTDIR		      " >> cambatch.dat # base_path
+  echo "0		      " >> cambatch.dat # data_release
+  echo "0		      " >> cambatch.dat # delete_local
+  echo "1		      " >> cambatch.dat # delete_datastore
+  echo "1		      " >> cambatch.dat # delete_dxlayer
+  echo "2012-12-10 00:00:00.0 " >> cambatch.dat # epoch
+  echo "3PI		      " >> cambatch.dat # survey
+  echo "3PI		      " >> cambatch.dat # psps_survey
+  echo "1		      " >> cambatch.dat # queue_P2
+  echo "0		      " >> cambatch.dat # queue_ST
+  echo "0		      " >> cambatch.dat # queue_OB
+  echo "0                     " >> cambatch.dat # queue_DF
+  echo "0                     " >> cambatch.dat # queue_DO
+  echo "0                     " >> cambatch.dat # queue_FW
+  echo "0                     " >> cambatch.dat # queue_FO
+  echo "1                     " >> cambatch.dat # active
+  echo "0                     " >> cambatch.dat # parallel
+  echo "use_new               " >> cambatch.dat # P2_smf_version
+  echo "any                   " >> cambatch.dat # ST_cmf_version
+  echo "2000-01-01 00:00:00.0 " >> cambatch.dat # trange_start
+  echo "2020-01-01 00:00:00.0 " >> cambatch.dat # trange_end
+  cat cambatch.dat | ippjython queue.py -test edit
+  if ($status) exit
 endif
 
 if ($cambatch) then
-  ippjython loader.py -test $queuename once
+  echo ""
+  echo " ---- load P2 batches ----"
+
+  rm -rf $OUTDIR/P2
+  ippjython loader.py -test $queuename once < /dev/null
+  if ($status) exit
 endif
 
 # this code is sensitive to a previously existing database?
 if ($stackqueue) then
+  echo ""
+  echo " ---- queue ST batches ----"
+
   if ($stackqueuename == 0) then
     set stackqueuename = $queuename\_stk
   endif
-  ippjython queue.py -test edit <<EOF
-$stackqueuename
-test_ds
-IPP_PSPS
-0
-catdir.sas12
-$OUTDIR/catdir.sas12
-330
-340
--8
-2
-1
-$OUTDIR
-0
-0
-1
-1
-2012-12-10 00:00:00.0
-3PI
-3PI
-0
-1
-0
-1
-0
-1
-y
-y
-EOF
+  echo "$stackqueuename	      " >  stackbatch.dat # skychunk name
+  echo "test_ds		      " >> stackbatch.dat # datastore_product
+  echo "IPP_PSPS	      " >> stackbatch.dat # datastore_type
+  echo "0		      " >> stackbatch.dat # datastore_publish
+  echo "catdir.sas.cam	      " >> stackbatch.dat # dvo_label
+  echo "$OUTDIR/catdir.sas.cam" >> stackbatch.dat # dvo_location
+  echo "332		      " >> stackbatch.dat # min_ra
+  echo "335		      " >> stackbatch.dat # max_ra
+  echo "-6		      " >> stackbatch.dat # min_dec
+  echo "-4		      " >> stackbatch.dat # max_dec
+  echo "1		      " >> stackbatch.dat # box_size
+  echo "$OUTDIR		      " >> stackbatch.dat # base_path
+  echo "0		      " >> stackbatch.dat # data_release
+  echo "0		      " >> stackbatch.dat # delete_local
+  echo "1		      " >> stackbatch.dat # delete_datastore
+  echo "1		      " >> stackbatch.dat # delete_dxlayer
+  echo "2012-12-10 00:00:00.0 " >> stackbatch.dat # epoch
+  echo "3PI		      " >> stackbatch.dat # survey
+  echo "3PI		      " >> stackbatch.dat # psps_survey
+  echo "0		      " >> stackbatch.dat # queue_P2
+  echo "1		      " >> stackbatch.dat # queue_ST
+  echo "0		      " >> stackbatch.dat # queue_OB
+  echo "0                     " >> stackbatch.dat # queue_DF
+  echo "0                     " >> stackbatch.dat # queue_DO
+  echo "0                     " >> stackbatch.dat # queue_FW
+  echo "0                     " >> stackbatch.dat # queue_FO
+  echo "1                     " >> stackbatch.dat # active
+  echo "0                     " >> stackbatch.dat # parallel
+  echo "use_new               " >> stackbatch.dat # P2_smf_version
+  echo "any                   " >> stackbatch.dat # ST_cmf_version
+  echo "2000-01-01 00:00:00.0 " >> stackbatch.dat # trange_start
+  echo "2020-01-01 00:00:00.0 " >> stackbatch.dat # trange_end
+  cat stackbatch.dat | ippjython queue.py -test edit
+  if ($status) exit
 endif
 
 if ($stackbatch) then
+  echo ""
+  echo " ---- load ST batches ----"
+
   if ($stackqueuename == 0) then
     set stackqueuename = $queuename\_stk
   endif
-  ippjython loader.py -test $stackqueuename once
-endif
-
+  rm -rf $OUTDIR/ST
+  ippjython loader.py -test $stackqueuename once < /dev/null
+  if ($status) exit
+endif
+
+# this code is sensitive to a previously existing database?
+if ($objectqueue) then
+  echo ""
+  echo " ---- queue OB batches ----"
+
+  if ($objectqueuename == 0) then
+    set objectqueuename = $queuename\_obj
+  endif
+  echo "$objectqueuename       " >  objectbatch.dat # skychunk name
+  echo "test_ds		       " >> objectbatch.dat # datastore_product
+  echo "IPP_PSPS	       " >> objectbatch.dat # datastore_type
+  echo "0		       " >> objectbatch.dat # datastore_publish
+  echo "catdir.sas.cam	       " >> objectbatch.dat # dvo_label
+  echo "$OUTDIR/catdir.sas.cam " >> objectbatch.dat # dvo_location
+  echo "330		       " >> objectbatch.dat # min_ra
+  echo "340		       " >> objectbatch.dat # max_ra
+  echo "-10		       " >> objectbatch.dat # min_dec
+  echo "0		       " >> objectbatch.dat # max_dec
+  echo "2		       " >> objectbatch.dat # box_size
+  echo "$OUTDIR		       " >> objectbatch.dat # base_path
+  echo "0		       " >> objectbatch.dat # data_release
+  echo "0		       " >> objectbatch.dat # delete_local
+  echo "1		       " >> objectbatch.dat # delete_datastore
+  echo "1		       " >> objectbatch.dat # delete_dxlayer
+  echo "2012-12-10 00:00:00.0  " >> objectbatch.dat # epoch
+  echo "3PI		       " >> objectbatch.dat # survey
+  echo "3PI		       " >> objectbatch.dat # psps_survey
+  echo "0		       " >> objectbatch.dat # queue_P2
+  echo "0		       " >> objectbatch.dat # queue_ST
+  echo "1		       " >> objectbatch.dat # queue_OB
+  echo "0                      " >> objectbatch.dat # queue_DF
+  echo "0                      " >> objectbatch.dat # queue_DO
+  echo "0                      " >> objectbatch.dat # queue_FW
+  echo "0                      " >> objectbatch.dat # queue_FO
+  echo "1                      " >> objectbatch.dat # active
+  echo "0                      " >> objectbatch.dat # parallel
+  echo "use_new                " >> objectbatch.dat # P2_smf_version
+  echo "any                    " >> objectbatch.dat # ST_cmf_version
+  echo "2000-01-01 00:00:00.0  " >> objectbatch.dat # trange_start
+  echo "2020-01-01 00:00:00.0  " >> objectbatch.dat # trange_end
+  cat objectbatch.dat | ippjython queue.py -test edit once
+  if ($status) exit
+endif
+
+if ($objectbatch) then
+  echo ""
+  echo " ---- load OB batches ----"
+
+  if ($objectqueuename == 0) then
+    set objectqueuename = $queuename\_obj
+  endif
+  rm -rf $OUTDIR/OB
+
+  ippjython loader.py -test $objectqueuename once < /dev/null
+  if ($status) exit
+endif
+
