Index: trunk/Ohana/src/libdvo/include/dvo.h
===================================================================
--- trunk/Ohana/src/libdvo/include/dvo.h	(revision 37995)
+++ trunk/Ohana/src/libdvo/include/dvo.h	(revision 38062)
@@ -555,4 +555,72 @@
 Measure *Measure_PS1_V4alt_ToInternal (Average *ave, Measure_PS1_V4alt *in, off_t Nvalues);
 
+typedef struct {
+  double           R;                    // RA at epoch (degrees)
+  double           D;                    // DEC at epoch (degrees)
+  float            M;                    // catalog mag (mag)
+  float            dM;                   // mag error (mag)
+  float            Map;                  // aperture mag (mag)
+  float            dMap;                 // aperture mag (mag)
+  float            Mkron;                // kron magnitude (mag)
+  float            dMkron;               // kron magnitude error (mag)
+  float            Mcal;                 // image cal mag (mag)
+  float            dMcal;                // systematic calibration error (mag)
+  float            dt;                   // exposure time (2.5*log(exptime))
+  float            FluxPSF;              // flux from psf fit (counts/sec)
+  float            dFluxPSF;             // error on psf flux (counts/sec)
+  float            FluxKron;             // flux from kron ap (counts/sec)
+  float            dFluxKron;            // error on kron flux (counts/sec)
+  float            FluxAp;               // flux from ap ap (counts/sec)
+  float            dFluxAp;              // error on ap flux (counts/sec)
+  float            airmass;              // (airmass - 1) (airmass)
+  float            az;                   // telescope azimuth
+  float            Xccd;                 // X coord on chip (raw value) (pixels)
+  float            Yccd;                 // Y coord on chip (raw value) (pixels)
+  float            Xfix;                 // X coord after correction (pixels)
+  float            Yfix;                 // Y coord after correction (pixels)
+  float            XoffKH;               // X offset from correction (pixels)
+  float            YoffKH;               // Y offset from correction (pixels)
+  float            XoffDCR;              // X offset from correction (pixels)
+  float            YoffDCR;              // Y offset from correction (pixels)
+  float            RoffGAL;              // RA offset from correction (arcsec)
+  float            DoffGAL;              // DEC offset from correction (arcsec)
+  float            Sky;                  // local estimate of sky flux (counts/sec)
+  float            dSky;                 // local estimate of sky flux (counts/sec)
+  int              t;                    // time in seconds (UNIX)
+  unsigned int     averef;               // reference to average entry      
+  unsigned int     detID;                // detection ID
+  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 (eg PSPS detID)
+  unsigned int     imageID;              // reference to DVO image ID
+  float            psfQF;                // psf coverage/quality factor
+  float            psfQFperf;            // psf coverage / quality factor (all mask bits)
+  float            psfChisq;             // psf fit chisq
+  int              psfNdof;              // psf degrees of freedom
+  int              psfNpix;              // psf number of pixels
+  int              photFlags2;           // flags supplied by photometry program
+  float            extNsigma;            // Nsigma deviation towards EXT
+  short            FWx;                  // object fwhm major axis (1/100 of pixels)
+  short            FWy;                  // object fwhm minor axis (1/100 of pixels )
+  short            theta;                // angle wrt ccd X dir ((0xffff/360) deg)
+  short            Mxx;                  // second moments in pixel coords (1/100 of pixels)
+  short            Mxy;                  // second moments in pixel coords (1/100 of pixels)
+  short            Myy;                  // second moments in pixel coords (1/100 of pixels)
+  unsigned short   t_msec;               // time fraction of second (milliseconds)
+  unsigned short   photcode;             // photcode
+  short            dXccd;                // X coord error on chip (1/100 of pixels)
+  short            dYccd;                // Y coord error on chip (1/100 of pixels)
+  short            dRsys;                // systematic error from astrom (1/100 of pixels)
+  short            posangle;             // position angle sky to chip ((0xffff/360) deg)
+  float            pltscale;             // plate scale (arcsec/pixel)
+  unsigned int     dbFlags;              // flags supplied by analysis in database
+  unsigned int     photFlags;            // flags supplied by photometry program
+  int              padding;              // padding to ensure 8byte blocks
+} Measure_PS1_V5alt;
+
+Measure *Measure_PS1_V5alt_ToInternal (Average *ave, Measure_PS1_V5alt *in, off_t Nvalues);
+int gfits_convert_Measure_PS1_V5alt (Measure_PS1_V5alt *data, off_t size, off_t nitems);
+Measure_PS1_V5alt *gfits_table_get_Measure_PS1_V5alt (FTable *ftable, off_t *Ndata, char *swapped);
+
 // alternate version of PS1_V5 (old dev version)
 typedef struct {
Index: trunk/Ohana/src/libdvo/include/dvodb.h
===================================================================
--- trunk/Ohana/src/libdvo/include/dvodb.h	(revision 37995)
+++ trunk/Ohana/src/libdvo/include/dvodb.h	(revision 38062)
@@ -178,4 +178,6 @@
       MEAS_XOFF_DCR, 
       MEAS_YOFF_DCR, 
+      MEAS_XOFF_CAM, 
+      MEAS_YOFF_CAM, 
       MEAS_ROFF_GAL, 
       MEAS_DOFF_GAL, 
@@ -237,5 +239,5 @@
       MEAS_RA_GALMODEL,      // model pm prediction
       MEAS_DEC_GALMODEL,     // model pm prediction
-};
+} dvoMeasureType;
 
 /* average fields */
@@ -289,5 +291,5 @@
       AVE_RA_GALMODEL,      // model pm prediction
       AVE_DEC_GALMODEL,     // model pm prediction
-};
+} dvoAverageType;
 
 //       AVE_NPHOT, 
@@ -365,5 +367,5 @@
       IMAGE_REF_COLOR_BLUE,
       IMAGE_REF_COLOR_RED
-};
+} dvoImageType;
 
 enum {DVO_TABLE_AVERAGE, DVO_TABLE_MEASURE, DVO_TABLE_IMAGE};
@@ -383,5 +385,5 @@
   int extract;
   int table;
-  int ID;
+  int ID; // may be either dvoMeasureType or dvoAverageType
 
   dvoMagSourceType magSource; // chip, (forced) warp, stack [only relevant for averages]
Index: trunk/Ohana/src/libdvo/src/dbExtractAverages.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dbExtractAverages.c	(revision 37995)
+++ trunk/Ohana/src/libdvo/src/dbExtractAverages.c	(revision 38062)
@@ -53,4 +53,5 @@
 
   // off_t i;
+  int n;
   dbValue value;
 
@@ -186,30 +187,7 @@
     case AVE_PHOT:
       // if we request mag:ave, use equiv for photcode (ie a given measure, say GPC1.g.XY01, will return g for mag:ave)
-      if  (field->photcode->type == PHOT_MAG) {
-	// this is an error
-	break;
-      }
-
-      // if we ask for 2MASS_K, etc (REF values), return NAN unless measure->code matches
-      if (field->photcode->type == PHOT_REF) {
-	// need to ensure measure exists.
-	break;
-      }
-
-      // if we ask for GPC1.g.XY03:rel, etc (DEP values), return NAN unless measure->code matches
-      if (field->photcode->type == PHOT_DEP) {
-	// again.
-	break;
-      }
-
-      /* in some cases below we need a measurement which matches the requested photcode.
-	 here is some sample code to find this.
-
-	  for (i = 0; i < average[0].Nmeasure; i++) {
-	    if (field->photcode->code != measure[i].photcode) continue;
-	    value.Flt = measure[i].M;
-	    break;
-	  }
-      */
+
+      // this is an error (no exposed photcodes should be of type PHOT_MAG)
+      if  (field->photcode->type == PHOT_MAG) break;
 
       switch (field->magOption) {
@@ -220,11 +198,37 @@
 	      break;
 	    case MAG_LEVEL_REF:
-	      // which measure is needed here?
-	      // PhotRef  (field->photcode, average, secfilt, measure, field->magClass, field->magSource); 
 	      break;
 	    case MAG_LEVEL_INST:
+	      // find an appropriate measure (if one exists)
+	      for (n = 0; n < average->Nmeasure; n++) {
+		if (field->photcode->code != measure[n].photcode) continue;
+		value.Flt = PhotInst (&measure[n], field->magClass); 
+		break;
+	      }
+	      break;
 	    case MAG_LEVEL_CAT:
+	      // find an appropriate measure (if one exists)
+	      for (n = 0; n < average->Nmeasure; n++) {
+		if (field->photcode->code != measure[n].photcode) continue;
+		value.Flt = PhotCat (&measure[n], field->magClass); 
+		break;
+	      }
+	      break;
 	    case MAG_LEVEL_SYS:
+	      // find an appropriate measure (if one exists)
+	      for (n = 0; n < average->Nmeasure; n++) {
+		if (field->photcode->code != measure[n].photcode) continue;
+		value.Flt = PhotSys  (&measure[n], average, secfilt, field->magClass); 
+		break;
+	      }
+	      break;
 	    case MAG_LEVEL_REL:
+	      // find an appropriate measure (if one exists)
+	      for (n = 0; n < average->Nmeasure; n++) {
+		if (field->photcode->code != measure[n].photcode) continue;
+		value.Flt = PhotRel (&measure[n], average, secfilt, field->magClass); 
+		break;
+	      }
+	      break;
 	    case MAG_LEVEL_CAL:
 	    case MAG_LEVEL_NONE:
@@ -243,4 +247,11 @@
 	    case MAG_LEVEL_SYS:
 	    case MAG_LEVEL_REL:
+	      // find an appropriate measure (if one exists)
+	      for (n = 0; n < average->Nmeasure; n++) {
+		if (field->photcode->code != measure[n].photcode) continue;
+		value.Flt = PhotErr (&measure[n], field->magClass); 
+		break;
+	      }
+	      break;
 	    case MAG_LEVEL_CAL:
 	    case MAG_LEVEL_NONE:
@@ -259,7 +270,35 @@
 	      break;
 	    case MAG_LEVEL_INST:
+	      // find an appropriate measure (if one exists)
+	      for (n = 0; n < average->Nmeasure; n++) {
+		if (field->photcode->code != measure[n].photcode) continue;
+		value.Flt = PhotFluxInst (&measure[n], field->magClass); 
+		break;
+	      }
+	      break;
 	    case MAG_LEVEL_CAT:
+	      // find an appropriate measure (if one exists)
+	      for (n = 0; n < average->Nmeasure; n++) {
+		if (field->photcode->code != measure[n].photcode) continue;
+		value.Flt = PhotFluxCat (&measure[n], field->magClass); 
+		break;
+	      }
+	      break;
 	    case MAG_LEVEL_SYS:
+	      // find an appropriate measure (if one exists)
+	      for (n = 0; n < average->Nmeasure; n++) {
+		if (field->photcode->code != measure[n].photcode) continue;
+		value.Flt = PhotFluxSys (&measure[n], average, secfilt, field->magClass); 
+		break;
+	      }
+	      break;
 	    case MAG_LEVEL_REL:
+	      // find an appropriate measure (if one exists)
+	      for (n = 0; n < average->Nmeasure; n++) {
+		if (field->photcode->code != measure[n].photcode) continue;
+		value.Flt = PhotFluxRel (&measure[n], average, secfilt, field->magClass); 
+		break;
+	      }
+	      break;
 	    case MAG_LEVEL_CAL:
 	    case MAG_LEVEL_NONE:
@@ -278,4 +317,11 @@
 	    case MAG_LEVEL_SYS:
 	    case MAG_LEVEL_REL:
+	      // find an appropriate measure (if one exists)
+	      for (n = 0; n < average->Nmeasure; n++) {
+		if (field->photcode->code != measure[n].photcode) continue;
+		value.Flt = PhotFluxInstErr (&measure[n], field->magClass); 
+		break;
+	      }
+	      break;
 	    case MAG_LEVEL_CAL:
 	    case MAG_LEVEL_NONE:
Index: trunk/Ohana/src/libdvo/src/dbExtractMeasures.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dbExtractMeasures.c	(revision 37995)
+++ trunk/Ohana/src/libdvo/src/dbExtractMeasures.c	(revision 38062)
@@ -573,4 +573,6 @@
     case MEAS_XOFF_DCR: { value.Flt = measure[0].XoffDCR; break; }
     case MEAS_YOFF_DCR: { value.Flt = measure[0].YoffDCR; break; }
+    case MEAS_XOFF_CAM: { value.Flt = measure[0].XoffCAM; break; }
+    case MEAS_YOFF_CAM: { value.Flt = measure[0].YoffCAM; break; }
     case MEAS_ROFF_GAL: { value.Flt = measure[0].RoffGAL; break; }
     case MEAS_DOFF_GAL: { value.Flt = measure[0].DoffGAL; break; }
Index: trunk/Ohana/src/libdvo/src/dbFields.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dbFields.c	(revision 37995)
+++ trunk/Ohana/src/libdvo/src/dbFields.c	(revision 38062)
@@ -480,4 +480,6 @@
   if (!strcasecmp (fieldName, "XOFF_DCR"))     	 ESCAPE (MEAS_XOFF_DCR,       OPIHI_FLT);
   if (!strcasecmp (fieldName, "YOFF_DCR"))     	 ESCAPE (MEAS_YOFF_DCR,       OPIHI_FLT);
+  if (!strcasecmp (fieldName, "XOFF_CAM"))     	 ESCAPE (MEAS_XOFF_CAM,       OPIHI_FLT);
+  if (!strcasecmp (fieldName, "YOFF_CAM"))     	 ESCAPE (MEAS_YOFF_CAM,       OPIHI_FLT);
   if (!strcasecmp (fieldName, "ROFF_GAL"))       ESCAPE (MEAS_ROFF_GAL,       OPIHI_FLT);
   if (!strcasecmp (fieldName, "DOFF_GAL"))       ESCAPE (MEAS_DOFF_GAL,       OPIHI_FLT);
Index: trunk/Ohana/src/libdvo/src/dvo_catalog.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_catalog.c	(revision 37995)
+++ trunk/Ohana/src/libdvo/src/dvo_catalog.c	(revision 38062)
@@ -273,4 +273,6 @@
  measure->XoffDCR   = NAN;
  measure->YoffDCR   = NAN;
+ measure->XoffCAM   = NAN;
+ measure->YoffCAM   = NAN;
  measure->RoffGAL   = NAN;
  measure->DoffGAL   = NAN;
Index: trunk/Ohana/src/libdvo/src/dvo_convert.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_convert.c	(revision 37995)
+++ trunk/Ohana/src/libdvo/src/dvo_convert.c	(revision 38062)
@@ -204,4 +204,20 @@
     free (tmpMeasure);
     *format = DVO_FORMAT_PS1_V4;
+    return (measure); 
+  }
+
+  // block to convert PV1_V5_0 tables (PS1_V5 made before the XoffCAM,YoffCAM addition)
+  if (!strcmp (extname, "DVO_MEASURE_PS1_V5") && (ftable[0].header[0].Naxis[0] == 232)) {
+    fprintf (stderr, "reading alt PS1_V5 format\n");
+    Measure_PS1_V5alt *tmpMeasure;
+    tmpMeasure = gfits_table_get_Measure_PS1_V5alt (ftable, Nmeasure, NULL);
+    if (!tmpMeasure) {
+      fprintf (stderr, "ERROR: failed to read measures\n");
+      exit (2);
+    }
+    myAssert (average, "conversion to internal needs average table");
+    measure = Measure_PS1_V5alt_ToInternal (average, tmpMeasure, *Nmeasure);
+    free (tmpMeasure);
+    *format = DVO_FORMAT_PS1_V5;
     return (measure); 
   }
Index: trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V5.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V5.c	(revision 37995)
+++ trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V5.c	(revision 38062)
@@ -4,4 +4,1382 @@
 
 Measure *Measure_PS1_V5_ToInternal (Average *ave, Measure_PS1_V5 *in, off_t Nvalues) {
+
+  off_t i;
+  Measure *out;
+
+  ALLOCATE_ZERO (out, Measure, Nvalues);
+
+  for (i = 0; i < Nvalues; i++) {
+    dvo_measure_init (&out[i]);
+
+    out[i].R          = in[i].R;
+    out[i].D          = in[i].D;
+    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].Mkron      = in[i].Mkron;
+    out[i].dMkron     = in[i].dMkron;
+    out[i].Mcal       = in[i].Mcal;
+    out[i].dMcal      = in[i].dMcal;
+    out[i].dt         = in[i].dt;
+    out[i].FluxPSF    = in[i].FluxPSF;
+    out[i].dFluxPSF   = in[i].dFluxPSF;
+    out[i].FluxKron   = in[i].FluxKron;
+    out[i].dFluxKron  = in[i].dFluxKron;
+    out[i].FluxAp     = in[i].FluxAp;
+    out[i].dFluxAp    = in[i].dFluxAp;
+    out[i].airmass    = in[i].airmass;
+    out[i].az         = in[i].az;
+    out[i].Xccd       = in[i].Xccd;
+    out[i].Yccd       = in[i].Yccd;
+    out[i].Xfix       = in[i].Xfix;
+    out[i].Yfix       = in[i].Yfix;
+    out[i].XoffKH     = in[i].XoffKH;
+    out[i].YoffKH     = in[i].YoffKH;
+    out[i].XoffDCR    = in[i].XoffDCR;
+    out[i].YoffDCR    = in[i].YoffDCR;
+    out[i].XoffCAM    = in[i].XoffCAM;
+    out[i].YoffCAM    = in[i].YoffCAM;
+    out[i].RoffGAL    = in[i].RoffGAL;
+    out[i].DoffGAL    = in[i].DoffGAL;
+    out[i].Sky        = in[i].Sky;
+    out[i].dSky       = in[i].dSky;
+    out[i].t          = in[i].t;
+    out[i].averef     = in[i].averef;
+    out[i].detID      = in[i].detID;
+    out[i].objID      = in[i].objID;
+    out[i].catID      = in[i].catID;
+    out[i].extID      = in[i].extID;
+    out[i].imageID    = in[i].imageID;
+    out[i].psfQF      = in[i].psfQF;
+    out[i].psfQFperf  = in[i].psfQFperf;
+    out[i].psfChisq   = in[i].psfChisq;
+    out[i].psfNdof    = in[i].psfNdof;
+    out[i].psfNpix    = in[i].psfNpix;
+    out[i].extNsigma  = in[i].extNsigma;
+    out[i].FWx 	      = in[i].FWx;
+    out[i].FWy 	      = in[i].FWy;
+    out[i].theta      = in[i].theta;
+    out[i].Mxx 	      = in[i].Mxx;
+    out[i].Mxy 	      = in[i].Mxy;
+    out[i].Myy 	      = in[i].Myy;
+    out[i].t_msec     = in[i].t_msec;
+    out[i].photcode   = in[i].photcode;
+    out[i].dXccd      = in[i].dXccd;
+    out[i].dYccd      = in[i].dYccd;
+    out[i].dRsys      = in[i].dRsys;
+    out[i].posangle   = in[i].posangle;
+    out[i].pltscale   = in[i].pltscale;
+    out[i].dbFlags    = in[i].dbFlags;
+    out[i].photFlags  = in[i].photFlags;
+    out[i].photFlags2 = in[i].photFlags2;
+  }
+  return (out);
+}
+
+Measure_PS1_V5 *MeasureInternalTo_PS1_V5 (Average *ave, Measure *in, off_t Nvalues) {
+
+  off_t i;
+  Measure_PS1_V5 *out;
+
+  ALLOCATE_ZERO (out, Measure_PS1_V5, Nvalues);
+
+  for (i = 0; i < Nvalues; i++) {
+    out[i].R          = in[i].R;
+    out[i].D          = in[i].D;
+    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].Mkron      = in[i].Mkron;
+    out[i].dMkron     = in[i].dMkron;
+    out[i].Mcal       = in[i].Mcal;
+    out[i].dMcal      = in[i].dMcal;
+    out[i].dt         = in[i].dt;
+    out[i].FluxPSF    = in[i].FluxPSF;
+    out[i].dFluxPSF   = in[i].dFluxPSF;
+    out[i].FluxKron   = in[i].FluxKron;
+    out[i].dFluxKron  = in[i].dFluxKron;
+    out[i].FluxAp     = in[i].FluxAp;
+    out[i].dFluxAp    = in[i].dFluxAp;
+    out[i].airmass    = in[i].airmass;
+    out[i].az         = in[i].az;
+    out[i].Xccd       = in[i].Xccd;
+    out[i].Yccd       = in[i].Yccd;
+    out[i].Xfix       = in[i].Xfix;
+    out[i].Yfix       = in[i].Yfix;
+    out[i].XoffKH     = in[i].XoffKH;
+    out[i].YoffKH     = in[i].YoffKH;
+    out[i].XoffDCR    = in[i].XoffDCR;
+    out[i].YoffDCR    = in[i].YoffDCR;
+    out[i].XoffCAM    = in[i].XoffCAM;
+    out[i].YoffCAM    = in[i].YoffCAM;
+    out[i].RoffGAL    = in[i].RoffGAL;
+    out[i].DoffGAL    = in[i].DoffGAL;
+    out[i].Sky        = in[i].Sky;
+    out[i].dSky       = in[i].dSky;
+    out[i].t          = in[i].t;
+    out[i].averef     = in[i].averef;
+    out[i].detID      = in[i].detID;
+    out[i].objID      = in[i].objID;
+    out[i].catID      = in[i].catID;
+    out[i].extID      = in[i].extID;
+    out[i].imageID    = in[i].imageID;
+    out[i].psfQF      = in[i].psfQF;
+    out[i].psfQFperf  = in[i].psfQFperf;
+    out[i].psfChisq   = in[i].psfChisq;
+    out[i].psfNdof    = in[i].psfNdof;
+    out[i].psfNpix    = in[i].psfNpix;
+    out[i].extNsigma  = in[i].extNsigma;
+    out[i].FWx 	      = in[i].FWx;
+    out[i].FWy 	      = in[i].FWy;
+    out[i].theta      = in[i].theta;
+    out[i].Mxx 	      = in[i].Mxx;
+    out[i].Mxy 	      = in[i].Mxy;
+    out[i].Myy 	      = in[i].Myy;
+    out[i].t_msec     = in[i].t_msec;
+    out[i].photcode   = in[i].photcode;
+    out[i].dXccd      = in[i].dXccd;
+    out[i].dYccd      = in[i].dYccd;
+    out[i].dRsys      = in[i].dRsys;
+    out[i].posangle   = in[i].posangle;
+    out[i].pltscale   = in[i].pltscale;
+    out[i].dbFlags    = in[i].dbFlags;
+    out[i].photFlags  = in[i].photFlags;
+    out[i].photFlags2 = in[i].photFlags2;
+  }
+  return (out);
+}
+
+// 'primary' is needed to conform with the API for Loneos and Elixir, but is not used
+Average *Average_PS1_V5_ToInternal (Average_PS1_V5 *in, off_t Nvalues, SecFilt **primary) {
+
+  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].Nstarpar      = in[i].Nstarpar;     
+    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].starparOffset = in[i].starparOffset;
+    out[i].extendOffset  = in[i].extendOffset;
+
+    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;
+  }
+  return (out);
+}
+
+// 'primary' is needed to conform with the API for Loneos and Elixir, but is not used
+Average_PS1_V5 *AverageInternalTo_PS1_V5 (Average *in, off_t Nvalues, SecFilt *primary) {
+
+  off_t i;
+  Average_PS1_V5 *out;
+
+  ALLOCATE_ZERO (out, Average_PS1_V5, Nvalues);
+
+  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].Nstarpar       = in[i].Nstarpar;     
+    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].starparOffset  = in[i].starparOffset;
+    out[i].extendOffset   = in[i].extendOffset;
+			  
+    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;
+  }
+  return (out);
+}
+
+SecFilt *SecFilt_PS1_V5_ToInternal (SecFilt_PS1_V5 *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].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;      
+  }
+  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;      
+  }
+  return (out);
+}
+
+Lensing *Lensing_PS1_V5_R2_ToInternal (Lensing_PS1_V5_R2 *in, off_t Nvalues) {
+
+  off_t i;
+  Lensing *out;
+
+  ALLOCATE_ZERO (out, Lensing, Nvalues);
+
+  for (i = 0; i < Nvalues; i++) {
+    dvo_lensing_init (&out[i]);
+
+    out[i].X11_sm_obj  = in[i].X11_sm_obj;      
+    out[i].X12_sm_obj  = in[i].X12_sm_obj;      
+    out[i].X22_sm_obj  = in[i].X22_sm_obj;      
+    out[i].E1_sm_obj   = in[i].E1_sm_obj;      
+    out[i].E2_sm_obj   = in[i].E2_sm_obj;      
+	             	                 
+    out[i].X11_sh_obj  = in[i].X11_sh_obj;      
+    out[i].X12_sh_obj  = in[i].X12_sh_obj;      
+    out[i].X22_sh_obj  = in[i].X22_sh_obj;      
+    out[i].E1_sh_obj   = in[i].E1_sh_obj;      
+    out[i].E2_sh_obj   = in[i].E2_sh_obj;     
+	             	                 
+    out[i].X11_sm_psf  = in[i].X11_sm_psf;
+    out[i].X12_sm_psf  = in[i].X12_sm_psf;
+    out[i].X22_sm_psf  = in[i].X22_sm_psf;
+    out[i].E1_sm_psf   = in[i].E1_sm_psf;
+    out[i].E2_sm_psf   = in[i].E2_sm_psf;     
+	             	                 
+    out[i].X11_sh_psf  = in[i].X11_sh_psf;
+    out[i].X12_sh_psf  = in[i].X12_sh_psf;
+    out[i].X22_sh_psf  = in[i].X22_sh_psf;
+    out[i].E1_sh_psf   = in[i].E1_sh_psf;
+    out[i].E2_sh_psf   = in[i].E2_sh_psf;
+
+    out[i].E1_psf      = in[i].E1_psf;
+    out[i].E2_psf      = in[i].E2_psf;
+
+    out[i].F_ApR5      = in[i].F_ApR5;
+    out[i].dF_ApR5     = in[i].dF_ApR5;
+    out[i].sF_ApR5     = in[i].sF_ApR5;
+    out[i].fF_ApR5     = in[i].fF_ApR5;
+	               	            
+    out[i].F_ApR6      = in[i].F_ApR6;
+    out[i].dF_ApR6     = in[i].dF_ApR6;
+    out[i].sF_ApR6     = in[i].sF_ApR6;
+    out[i].fF_ApR6     = in[i].fF_ApR6;
+	          	            
+    out[i].detID       = in[i].detID;
+    out[i].objID       = in[i].objID;
+    out[i].catID       = in[i].catID;
+    out[i].averef      = in[i].averef;
+
+    out[i].imageID     = in[i].imageID;
+  }
+  return (out);
+}
+
+Lensing_PS1_V5_R2 *LensingInternalTo_PS1_V5_R2 (Lensing *in, off_t Nvalues) {
+
+  off_t i;
+  Lensing_PS1_V5_R2 *out;
+
+  ALLOCATE_ZERO (out, Lensing_PS1_V5, Nvalues);
+
+  for (i = 0; i < Nvalues; i++) {
+
+    out[i].X11_sm_obj  = in[i].X11_sm_obj;      
+    out[i].X12_sm_obj  = in[i].X12_sm_obj;      
+    out[i].X22_sm_obj  = in[i].X22_sm_obj;      
+    out[i].E1_sm_obj   = in[i].E1_sm_obj;      
+    out[i].E2_sm_obj   = in[i].E2_sm_obj;      
+	             	                 
+    out[i].X11_sh_obj  = in[i].X11_sh_obj;      
+    out[i].X12_sh_obj  = in[i].X12_sh_obj;      
+    out[i].X22_sh_obj  = in[i].X22_sh_obj;      
+    out[i].E1_sh_obj   = in[i].E1_sh_obj;      
+    out[i].E2_sh_obj   = in[i].E2_sh_obj;     
+	             	                 
+    out[i].X11_sm_psf  = in[i].X11_sm_psf;
+    out[i].X12_sm_psf  = in[i].X12_sm_psf;
+    out[i].X22_sm_psf  = in[i].X22_sm_psf;
+    out[i].E1_sm_psf   = in[i].E1_sm_psf;
+    out[i].E2_sm_psf   = in[i].E2_sm_psf;     
+	             	                 
+    out[i].X11_sh_psf  = in[i].X11_sh_psf;
+    out[i].X12_sh_psf  = in[i].X12_sh_psf;
+    out[i].X22_sh_psf  = in[i].X22_sh_psf;
+    out[i].E1_sh_psf   = in[i].E1_sh_psf;
+    out[i].E2_sh_psf   = in[i].E2_sh_psf;
+
+    out[i].E1_psf      = in[i].E1_psf;
+    out[i].E2_psf      = in[i].E2_psf;
+
+    out[i].F_ApR5      = in[i].F_ApR5;
+    out[i].dF_ApR5     = in[i].dF_ApR5;
+    out[i].sF_ApR5     = in[i].sF_ApR5;
+    out[i].fF_ApR5     = in[i].fF_ApR5;
+	               	            
+    out[i].F_ApR6      = in[i].F_ApR6;
+    out[i].dF_ApR6     = in[i].dF_ApR6;
+    out[i].sF_ApR6     = in[i].sF_ApR6;
+    out[i].fF_ApR6     = in[i].fF_ApR6;
+	          	            
+    out[i].detID       = in[i].detID;
+    out[i].objID       = in[i].objID;
+    out[i].catID       = in[i].catID;
+    out[i].averef      = in[i].averef;
+
+    out[i].imageID     = in[i].imageID;
+  }
+  return (out);
+}
+
+Lensobj *Lensobj_PS1_V5_ToInternal (Lensobj_PS1_V5 *in, off_t Nvalues) {
+
+  off_t i;
+  Lensobj *out;
+
+  ALLOCATE_ZERO (out, Lensobj, Nvalues);
+
+  for (i = 0; i < Nvalues; i++) {
+    dvo_lensobj_init (&out[i], FALSE);
+
+    out[i].X11_sm_obj  = in[i].X11_sm_obj;      
+    out[i].X12_sm_obj  = in[i].X12_sm_obj;      
+    out[i].X22_sm_obj  = in[i].X22_sm_obj;      
+    out[i].E1_sm_obj   = in[i].E1_sm_obj;      
+    out[i].E2_sm_obj   = in[i].E2_sm_obj;      
+	             	                 
+    out[i].X11_sh_obj  = in[i].X11_sh_obj;      
+    out[i].X12_sh_obj  = in[i].X12_sh_obj;      
+    out[i].X22_sh_obj  = in[i].X22_sh_obj;      
+    out[i].E1_sh_obj   = in[i].E1_sh_obj;      
+    out[i].E2_sh_obj   = in[i].E2_sh_obj;     
+	             	                 
+    out[i].X11_sm_psf  = in[i].X11_sm_psf;
+    out[i].X12_sm_psf  = in[i].X12_sm_psf;
+    out[i].X22_sm_psf  = in[i].X22_sm_psf;
+    out[i].E1_sm_psf   = in[i].E1_sm_psf;
+    out[i].E2_sm_psf   = in[i].E2_sm_psf;     
+	             	                 
+    out[i].X11_sh_psf  = in[i].X11_sh_psf;
+    out[i].X12_sh_psf  = in[i].X12_sh_psf;
+    out[i].X22_sh_psf  = in[i].X22_sh_psf;
+    out[i].E1_sh_psf   = in[i].E1_sh_psf;
+    out[i].E2_sh_psf   = in[i].E2_sh_psf;
+
+    out[i].F_ApR5      = in[i].F_ApR5;
+    out[i].dF_ApR5     = in[i].dF_ApR5;
+    out[i].sF_ApR5     = in[i].sF_ApR5;
+    out[i].fF_ApR5     = in[i].fF_ApR5;
+	               	            
+    out[i].F_ApR6      = in[i].F_ApR6;
+    out[i].dF_ApR6     = in[i].dF_ApR6;
+    out[i].sF_ApR6     = in[i].sF_ApR6;
+    out[i].fF_ApR6     = in[i].fF_ApR6;
+	          	            
+    out[i].gamma       = in[i].gamma;
+    out[i].E1          = in[i].E1;
+    out[i].E2          = in[i].E2;
+
+    out[i].objID       = in[i].objID;
+    out[i].catID       = in[i].catID;
+
+    out[i].photcode    = in[i].photcode;
+    out[i].Nmeas       = in[i].Nmeas;
+  }
+  return (out);
+}
+
+Lensobj_PS1_V5 *LensobjInternalTo_PS1_V5 (Lensobj *in, off_t Nvalues) {
+
+  off_t i;
+  Lensobj_PS1_V5 *out;
+
+  ALLOCATE_ZERO (out, Lensobj_PS1_V5, Nvalues);
+
+  for (i = 0; i < Nvalues; i++) {
+
+    out[i].X11_sm_obj  = in[i].X11_sm_obj;      
+    out[i].X12_sm_obj  = in[i].X12_sm_obj;      
+    out[i].X22_sm_obj  = in[i].X22_sm_obj;      
+    out[i].E1_sm_obj   = in[i].E1_sm_obj;      
+    out[i].E2_sm_obj   = in[i].E2_sm_obj;      
+	             	                 
+    out[i].X11_sh_obj  = in[i].X11_sh_obj;      
+    out[i].X12_sh_obj  = in[i].X12_sh_obj;      
+    out[i].X22_sh_obj  = in[i].X22_sh_obj;      
+    out[i].E1_sh_obj   = in[i].E1_sh_obj;      
+    out[i].E2_sh_obj   = in[i].E2_sh_obj;     
+	             	                 
+    out[i].X11_sm_psf  = in[i].X11_sm_psf;
+    out[i].X12_sm_psf  = in[i].X12_sm_psf;
+    out[i].X22_sm_psf  = in[i].X22_sm_psf;
+    out[i].E1_sm_psf   = in[i].E1_sm_psf;
+    out[i].E2_sm_psf   = in[i].E2_sm_psf;     
+	             	                 
+    out[i].X11_sh_psf  = in[i].X11_sh_psf;
+    out[i].X12_sh_psf  = in[i].X12_sh_psf;
+    out[i].X22_sh_psf  = in[i].X22_sh_psf;
+    out[i].E1_sh_psf   = in[i].E1_sh_psf;
+    out[i].E2_sh_psf   = in[i].E2_sh_psf;
+
+    out[i].F_ApR5      = in[i].F_ApR5;
+    out[i].dF_ApR5     = in[i].dF_ApR5;
+    out[i].sF_ApR5     = in[i].sF_ApR5;
+    out[i].fF_ApR5     = in[i].fF_ApR5;
+	               	            
+    out[i].F_ApR6      = in[i].F_ApR6;
+    out[i].dF_ApR6     = in[i].dF_ApR6;
+    out[i].sF_ApR6     = in[i].sF_ApR6;
+    out[i].fF_ApR6     = in[i].fF_ApR6;
+	          	            
+    out[i].gamma       = in[i].gamma;
+    out[i].E1          = in[i].E1;
+    out[i].E2          = in[i].E2;
+
+    out[i].objID       = in[i].objID;
+    out[i].catID       = in[i].catID;
+
+    out[i].photcode    = in[i].photcode;
+    out[i].Nmeas       = in[i].Nmeas;
+  }
+  return (out);
+}
+
+StarPar *StarPar_PS1_V5_ToInternal (StarPar_PS1_V5 *in, off_t Nvalues) {
+
+  off_t i;
+  StarPar *out;
+
+  ALLOCATE_ZERO (out, StarPar, Nvalues);
+
+  for (i = 0; i < Nvalues; i++) {
+    dvo_starpar_init (&out[i]);
+
+    out[i].R  	     = in[i].R;      
+    out[i].D  	     = in[i].D;      
+    out[i].galLat    = in[i].galLat;      
+    out[i].galLon    = in[i].galLon;      
+
+    out[i].Ebv       = in[i].Ebv     ;      
+    out[i].dEbv      = in[i].dEbv    ;      
+    out[i].DistMag   = in[i].DistMag ;      
+    out[i].dDistMag  = in[i].dDistMag;      
+    out[i].M_r       = in[i].M_r     ;      
+    out[i].dM_r      = in[i].dM_r    ;      
+    out[i].FeH       = in[i].FeH     ;      
+    out[i].dFeH      = in[i].dFeH    ;      
+    out[i].uRA       = in[i].uRA     ;      
+    out[i].uDEC      = in[i].uDEC    ;      
+
+    out[i].averef  = in[i].averef;
+    out[i].objID   = in[i].objID ;
+    out[i].catID   = in[i].catID ;
+  }
+  return (out);
+}
+
+StarPar_PS1_V5 *StarParInternalTo_PS1_V5 (StarPar *in, off_t Nvalues) {
+
+  off_t i;
+  StarPar_PS1_V5 *out;
+
+  ALLOCATE_ZERO (out, StarPar_PS1_V5, Nvalues);
+
+  for (i = 0; i < Nvalues; i++) {
+
+    out[i].R  	     = in[i].R;      
+    out[i].D  	     = in[i].D;      
+    out[i].galLat    = in[i].galLat;      
+    out[i].galLon    = in[i].galLon;      
+
+    out[i].Ebv       = in[i].Ebv     ;      
+    out[i].dEbv      = in[i].dEbv    ;      
+    out[i].DistMag   = in[i].DistMag ;      
+    out[i].dDistMag  = in[i].dDistMag;      
+    out[i].M_r       = in[i].M_r     ;      
+    out[i].dM_r      = in[i].dM_r    ;      
+    out[i].FeH       = in[i].FeH     ;      
+    out[i].dFeH      = in[i].dFeH    ;      
+    out[i].uRA       = in[i].uRA     ;      
+    out[i].uDEC      = in[i].uDEC    ;      
+
+    out[i].averef  = in[i].averef;
+    out[i].objID   = in[i].objID ;
+    out[i].catID   = in[i].catID ;
+  }
+  return (out);
+}
+
+# define RAW_IMAGE_NAME_LEN 117
+
+Image *Image_PS1_V5_ToInternal (Image_PS1_V5 *in, off_t Nvalues, off_t Nalloc) {
+
+  off_t i;
+  Image *out;
+
+  char *buffer;
+  ALLOCATE_ZERO (buffer, char, Nalloc);
+  out = (Image *) buffer;
+  // ALLOCATE_ZERO (out, Image, Nvalues);
+
+  for (i = 0; i < Nvalues; i++) {
+    // this is only safe because the initial 120 bytes in Coords match CoordsDisk
+    memcpy (&out[i].coords, &in[i].coords, sizeof(CoordsDisk));
+    out[i].coords.mosaic   = NULL;
+    out[i].coords.offsetMap = NULL;
+
+    // RAW_IMAGE_NAME_LEN == DVO_IMAGE_NAME_LEN
+    strncpy (out[i].name, in[i].name, RAW_IMAGE_NAME_LEN - 1);
+    out[i].name[RAW_IMAGE_NAME_LEN - 1] = 0; // force termination
+
+    out[i].tzero    	    = in[i].tzero;
+    out[i].nstar    	    = in[i].nstar;
+    out[i].secz	    	    = in[i].secz;
+    out[i].NX	    	    = in[i].NX;
+    out[i].NY	    	    = in[i].NY;
+    out[i].apmifit  	    = in[i].apmifit;
+    out[i].dapmifit 	    = in[i].dapmifit;
+    out[i].Mcal	    	    = in[i].Mcal;
+    out[i].dMcal    	    = in[i].dMcal;
+    out[i].Xm	    	    = in[i].Xm;
+    out[i].photcode   	    = in[i].photcode;
+    out[i].exptime  	    = in[i].exptime;
+    out[i].sidtime  	    = in[i].sidtime;
+    out[i].latitude  	    = in[i].latitude;
+
+    out[i].RAo  	    = in[i].RAo;
+    out[i].DECo  	    = in[i].DECo;
+    out[i].Radius  	    = in[i].Radius;
+    out[i].refColorBlue	    = in[i].refColorBlue;
+    out[i].refColorRed 	    = in[i].refColorRed;
+
+    out[i].detection_limit  = in[i].detection_limit;
+    out[i].saturation_limit = in[i].saturation_limit;
+    out[i].cerror	    = in[i].cerror;
+    out[i].fwhm_x	    = in[i].fwhm_x;
+    out[i].fwhm_y	    = in[i].fwhm_y;
+    out[i].trate	    = in[i].trate;
+    out[i].ccdnum	    = in[i].ccdnum;
+    out[i].flags	    = in[i].flags;
+    out[i].imageID	    = in[i].imageID;
+    out[i].parentID	    = in[i].parentID;
+    out[i].externID	    = in[i].externID;
+    out[i].sourceID	    = in[i].sourceID;
+
+    // as of 2011.02.03, the old Mx,My,..., Mxxxx,Myyyy have been deprecated and replaced
+    // with the following.  (no real databases used those values -- see
+    // libdvo/doc/dvo-images.txt)
+    out[i].nLinkAstrom	    = in[i].nLinkAstrom;
+    out[i].nLinkPhotom	    = in[i].nLinkPhotom;
+    out[i].ubercalDist	    = in[i].ubercalDist;
+    out[i].dXpixSys	    = in[i].dXpixSys;
+    out[i].dYpixSys	    = in[i].dYpixSys;
+    out[i].dMagSys	    = in[i].dMagSys;
+    out[i].nFitAstrom       = in[i].nFitAstrom;
+    out[i].nFitPhotom       = in[i].nFitPhotom;
+    out[i].photom_map_id    = in[i].photom_map_id;
+    out[i].astrom_map_id    = in[i].astrom_map_id;
+  }
+  return (out);
+}
+
+Image_PS1_V5 *ImageInternalTo_PS1_V5 (Image *in, off_t Nvalues) {
+
+  off_t i;
+  Image_PS1_V5 *out;
+
+  ALLOCATE_ZERO (out, Image_PS1_V5, Nvalues);
+
+  for (i = 0; i < Nvalues; i++) {
+    // this is only save because the initial 120 bytes in Coords match CoordsDisk
+    memcpy (&out[i].coords, &in[i].coords, sizeof(CoordsDisk));
+
+    // RAW_IMAGE_NAME_LEN == DVO_IMAGE_NAME_LEN
+    strncpy (out[i].name, in[i].name, RAW_IMAGE_NAME_LEN - 1);
+    out[i].name[RAW_IMAGE_NAME_LEN - 1] = 0; // force termination
+
+    out[i].tzero    	    = in[i].tzero;
+    out[i].nstar    	    = in[i].nstar;
+    out[i].secz	    	    = in[i].secz;
+    out[i].NX	    	    = in[i].NX;
+    out[i].NY	    	    = in[i].NY;
+    out[i].apmifit  	    = in[i].apmifit;
+    out[i].dapmifit 	    = in[i].dapmifit;
+    out[i].Mcal	    	    = in[i].Mcal;
+    out[i].dMcal    	    = in[i].dMcal;
+    out[i].Xm	    	    = in[i].Xm;
+    out[i].photcode   	    = in[i].photcode;
+    out[i].exptime  	    = in[i].exptime;
+    out[i].sidtime  	    = in[i].sidtime;
+    out[i].latitude  	    = in[i].latitude;
+
+    out[i].RAo  	    = in[i].RAo;
+    out[i].DECo  	    = in[i].DECo;
+    out[i].Radius  	    = in[i].Radius;
+    out[i].refColorBlue	    = in[i].refColorBlue;
+    out[i].refColorRed 	    = in[i].refColorRed;
+
+    out[i].detection_limit  = in[i].detection_limit;
+    out[i].saturation_limit = in[i].saturation_limit;
+    out[i].cerror	    = in[i].cerror;
+    out[i].fwhm_x	    = in[i].fwhm_x;
+    out[i].fwhm_y	    = in[i].fwhm_y;
+    out[i].trate	    = in[i].trate;
+    out[i].ccdnum	    = in[i].ccdnum;
+    out[i].flags	    = in[i].flags;
+    out[i].imageID	    = in[i].imageID;
+    out[i].parentID	    = in[i].parentID;
+    out[i].externID	    = in[i].externID;
+    out[i].sourceID	    = in[i].sourceID;
+
+    // as of 2011.02.03, the old Mx,My,..., Mxxxx,Myyyy have been deprecated and replaced
+    // with the following.  (no real databases used those values -- see
+    // libdvo/doc/dvo-images.txt)
+    out[i].nLinkAstrom	    = in[i].nLinkAstrom;
+    out[i].nLinkPhotom	    = in[i].nLinkPhotom;
+    out[i].ubercalDist	    = in[i].ubercalDist;
+    out[i].dXpixSys	    = in[i].dXpixSys;
+    out[i].dYpixSys	    = in[i].dYpixSys;
+    out[i].dMagSys	    = in[i].dMagSys;
+    out[i].nFitAstrom       = in[i].nFitAstrom;
+    out[i].nFitPhotom       = in[i].nFitPhotom;
+    out[i].photom_map_id    = in[i].photom_map_id;
+    out[i].astrom_map_id    = in[i].astrom_map_id;
+  }
+  return (out);
+}
+
+PhotCode *PhotCode_PS1_V5_To_Internal (PhotCode_PS1_V5 *in, off_t Nvalues) {
+
+  off_t i;
+  PhotCode *out;
+
+  ALLOCATE_ZERO (out, PhotCode, Nvalues);
+
+  for (i = 0; i < Nvalues; i++) {
+    strncpy (out[i].name, in[i].name, 31); // out[32], in[32]
+    out[i].name[31] = 0; // force termination
+
+    out[i].code  = in[i].code;         
+    out[i].type  = in[i].type;         
+    out[i].C     = in[i].C;            
+    out[i].dC 	 = in[i].dC;           
+    out[i].dX 	 = in[i].dX;           
+    out[i].K  	 = in[i].K;            
+    out[i].c1 	 = in[i].c1;           
+    out[i].c2 	 = in[i].c2;           
+    out[i].equiv = in[i].equiv;        
+    out[i].Nc    = in[i].Nc;           
+    memcpy (out[i].X, in[i].X, 4*sizeof(float));            
+
+    out[i].astromErrSys      = in[i].astromErrSys;
+    out[i].astromErrScale    = in[i].astromErrScale;
+    out[i].astromErrMagScale = in[i].astromErrMagScale;
+    out[i].photomErrSys      = in[i].photomErrSys;
+
+    out[i].photomPoorMask      = in[i].photomPoorMask;
+    out[i].photomBadMask       = in[i].photomBadMask;
+    out[i].astromPoorMask      = in[i].astromPoorMask;
+    out[i].astromBadMask       = in[i].astromBadMask;
+  }
+  return (out);
+}
+
+PhotCode_PS1_V5 *PhotCode_Internal_To_PS1_V5 (PhotCode *in, off_t Nvalues) {
+
+  off_t i;
+  PhotCode_PS1_V5 *out;
+
+  ALLOCATE_ZERO (out, PhotCode_PS1_V5, Nvalues);
+
+  for (i = 0; i < Nvalues; i++) {
+    strncpy (out[i].name, in[i].name, 31); // out[32], in[32]
+    out[i].name[31] = 0; // force termination
+
+    out[i].code  = in[i].code;         
+    out[i].type  = in[i].type;         
+    out[i].C     = in[i].C;            
+    out[i].dC 	 = in[i].dC;           
+    out[i].dX 	 = in[i].dX;           
+    out[i].K  	 = in[i].K;            
+    out[i].c1 	 = in[i].c1;           
+    out[i].c2 	 = in[i].c2;           
+    out[i].equiv = in[i].equiv;        
+    out[i].Nc    = in[i].Nc;           
+    memcpy (out[i].X, in[i].X, 4*sizeof(float));            
+
+    out[i].astromErrSys      = in[i].astromErrSys;
+    out[i].astromErrScale    = in[i].astromErrScale;
+    out[i].astromErrMagScale = in[i].astromErrMagScale;
+    out[i].photomErrSys      = in[i].photomErrSys;
+
+    out[i].photomPoorMask      = in[i].photomPoorMask;
+    out[i].photomBadMask       = in[i].photomBadMask;
+    out[i].astromPoorMask      = in[i].astromPoorMask;
+    out[i].astromBadMask       = in[i].astromBadMask;
+  }
+  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].starparOffset  = in[i].starparOffset;
+    out[i].extendOffset   = in[i].extendOffset;
+			  
+    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);
+}
+
+Lensing *Lensing_PS1_V5_R0_ToInternal (Lensing_PS1_V5_R0 *in, off_t Nvalues) {
+
+  off_t i;
+  Lensing *out;
+
+  ALLOCATE_ZERO (out, Lensing, Nvalues);
+
+  for (i = 0; i < Nvalues; i++) {
+    dvo_lensing_init (&out[i]);
+
+    out[i].X11_sm_obj  = in[i].X11_sm_obj;      
+    out[i].X12_sm_obj  = in[i].X12_sm_obj;      
+    out[i].X22_sm_obj  = in[i].X22_sm_obj;      
+    out[i].E1_sm_obj   = in[i].E1_sm_obj;      
+    out[i].E2_sm_obj   = in[i].E2_sm_obj;      
+	             	                 
+    out[i].X11_sh_obj  = in[i].X11_sh_obj;      
+    out[i].X12_sh_obj  = in[i].X12_sh_obj;      
+    out[i].X22_sh_obj  = in[i].X22_sh_obj;      
+    out[i].E1_sh_obj   = in[i].E1_sh_obj;      
+    out[i].E2_sh_obj   = in[i].E2_sh_obj;     
+	             	                 
+    out[i].X11_sm_psf  = in[i].X11_sm_psf;
+    out[i].X12_sm_psf  = in[i].X12_sm_psf;
+    out[i].X22_sm_psf  = in[i].X22_sm_psf;
+    out[i].E1_sm_psf   = in[i].E1_sm_psf;
+    out[i].E2_sm_psf   = in[i].E2_sm_psf;     
+	             	                 
+    out[i].X11_sh_psf  = in[i].X11_sh_psf;
+    out[i].X12_sh_psf  = in[i].X12_sh_psf;
+    out[i].X22_sh_psf  = in[i].X22_sh_psf;
+    out[i].E1_sh_psf   = in[i].E1_sh_psf;
+    out[i].E2_sh_psf   = in[i].E2_sh_psf;
+
+    out[i].F_ApR5      = in[i].F_ApR5;
+    out[i].dF_ApR5     = in[i].dF_ApR5;
+    out[i].sF_ApR5     = in[i].sF_ApR5;
+    out[i].fF_ApR5     = in[i].fF_ApR5;
+	               	            
+    out[i].F_ApR6      = in[i].F_ApR6;
+    out[i].dF_ApR6     = in[i].dF_ApR6;
+    out[i].sF_ApR6     = in[i].sF_ApR6;
+    out[i].fF_ApR6     = in[i].fF_ApR6;
+	          	            
+    out[i].detID       = in[i].detID;
+    out[i].objID       = in[i].objID;
+    out[i].catID       = in[i].catID;
+    out[i].averef      = in[i].averef;
+  }
+  return (out);
+}
+
+Lensing *Lensing_PS1_V5_R1_ToInternal (Lensing_PS1_V5_R1 *in, off_t Nvalues) {
+
+  off_t i;
+  Lensing *out;
+
+  ALLOCATE_ZERO (out, Lensing, Nvalues);
+
+  for (i = 0; i < Nvalues; i++) {
+    dvo_lensing_init (&out[i]);
+
+    out[i].X11_sm_obj  = in[i].X11_sm_obj;      
+    out[i].X12_sm_obj  = in[i].X12_sm_obj;      
+    out[i].X22_sm_obj  = in[i].X22_sm_obj;      
+    out[i].E1_sm_obj   = in[i].E1_sm_obj;      
+    out[i].E2_sm_obj   = in[i].E2_sm_obj;      
+	             	                 
+    out[i].X11_sh_obj  = in[i].X11_sh_obj;      
+    out[i].X12_sh_obj  = in[i].X12_sh_obj;      
+    out[i].X22_sh_obj  = in[i].X22_sh_obj;      
+    out[i].E1_sh_obj   = in[i].E1_sh_obj;      
+    out[i].E2_sh_obj   = in[i].E2_sh_obj;     
+	             	                 
+    out[i].X11_sm_psf  = in[i].X11_sm_psf;
+    out[i].X12_sm_psf  = in[i].X12_sm_psf;
+    out[i].X22_sm_psf  = in[i].X22_sm_psf;
+    out[i].E1_sm_psf   = in[i].E1_sm_psf;
+    out[i].E2_sm_psf   = in[i].E2_sm_psf;     
+	             	                 
+    out[i].X11_sh_psf  = in[i].X11_sh_psf;
+    out[i].X12_sh_psf  = in[i].X12_sh_psf;
+    out[i].X22_sh_psf  = in[i].X22_sh_psf;
+    out[i].E1_sh_psf   = in[i].E1_sh_psf;
+    out[i].E2_sh_psf   = in[i].E2_sh_psf;
+
+    out[i].F_ApR5      = in[i].F_ApR5;
+    out[i].dF_ApR5     = in[i].dF_ApR5;
+    out[i].sF_ApR5     = in[i].sF_ApR5;
+    out[i].fF_ApR5     = in[i].fF_ApR5;
+	               	            
+    out[i].F_ApR6      = in[i].F_ApR6;
+    out[i].dF_ApR6     = in[i].dF_ApR6;
+    out[i].sF_ApR6     = in[i].sF_ApR6;
+    out[i].fF_ApR6     = in[i].fF_ApR6;
+	          	            
+    out[i].detID       = in[i].detID;
+    out[i].objID       = in[i].objID;
+    out[i].catID       = in[i].catID;
+    out[i].averef      = in[i].averef;
+
+    out[i].imageID     = in[i].imageID;
+  }
+  return (out);
+}
+
+/********** PS1_V5alt measure ************/
+
+Measure *Measure_PS1_V5alt_ToInternal (Average *ave, Measure_PS1_V5alt *in, off_t Nvalues) {
 
   off_t i;
@@ -77,947 +1455,11 @@
 }
 
-Measure_PS1_V5 *MeasureInternalTo_PS1_V5 (Average *ave, Measure *in, off_t Nvalues) {
-
-  off_t i;
-  Measure_PS1_V5 *out;
-
-  ALLOCATE_ZERO (out, Measure_PS1_V5, Nvalues);
-
-  for (i = 0; i < Nvalues; i++) {
-    out[i].R          = in[i].R;
-    out[i].D          = in[i].D;
-    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].Mkron      = in[i].Mkron;
-    out[i].dMkron     = in[i].dMkron;
-    out[i].Mcal       = in[i].Mcal;
-    out[i].dMcal      = in[i].dMcal;
-    out[i].dt         = in[i].dt;
-    out[i].FluxPSF    = in[i].FluxPSF;
-    out[i].dFluxPSF   = in[i].dFluxPSF;
-    out[i].FluxKron   = in[i].FluxKron;
-    out[i].dFluxKron  = in[i].dFluxKron;
-    out[i].FluxAp     = in[i].FluxAp;
-    out[i].dFluxAp    = in[i].dFluxAp;
-    out[i].airmass    = in[i].airmass;
-    out[i].az         = in[i].az;
-    out[i].Xccd       = in[i].Xccd;
-    out[i].Yccd       = in[i].Yccd;
-    out[i].Xfix       = in[i].Xfix;
-    out[i].Yfix       = in[i].Yfix;
-    out[i].XoffKH     = in[i].XoffKH;
-    out[i].YoffKH     = in[i].YoffKH;
-    out[i].XoffDCR    = in[i].XoffDCR;
-    out[i].YoffDCR    = in[i].YoffDCR;
-    out[i].RoffGAL    = in[i].RoffGAL;
-    out[i].DoffGAL    = in[i].DoffGAL;
-    out[i].Sky        = in[i].Sky;
-    out[i].dSky       = in[i].dSky;
-    out[i].t          = in[i].t;
-    out[i].averef     = in[i].averef;
-    out[i].detID      = in[i].detID;
-    out[i].objID      = in[i].objID;
-    out[i].catID      = in[i].catID;
-    out[i].extID      = in[i].extID;
-    out[i].imageID    = in[i].imageID;
-    out[i].psfQF      = in[i].psfQF;
-    out[i].psfQFperf  = in[i].psfQFperf;
-    out[i].psfChisq   = in[i].psfChisq;
-    out[i].psfNdof    = in[i].psfNdof;
-    out[i].psfNpix    = in[i].psfNpix;
-    out[i].extNsigma  = in[i].extNsigma;
-    out[i].FWx 	      = in[i].FWx;
-    out[i].FWy 	      = in[i].FWy;
-    out[i].theta      = in[i].theta;
-    out[i].Mxx 	      = in[i].Mxx;
-    out[i].Mxy 	      = in[i].Mxy;
-    out[i].Myy 	      = in[i].Myy;
-    out[i].t_msec     = in[i].t_msec;
-    out[i].photcode   = in[i].photcode;
-    out[i].dXccd      = in[i].dXccd;
-    out[i].dYccd      = in[i].dYccd;
-    out[i].dRsys      = in[i].dRsys;
-    out[i].posangle   = in[i].posangle;
-    out[i].pltscale   = in[i].pltscale;
-    out[i].dbFlags    = in[i].dbFlags;
-    out[i].photFlags  = in[i].photFlags;
-    out[i].photFlags2 = in[i].photFlags2;
-  }
-  return (out);
-}
-
-// 'primary' is needed to conform with the API for Loneos and Elixir, but is not used
-Average *Average_PS1_V5_ToInternal (Average_PS1_V5 *in, off_t Nvalues, SecFilt **primary) {
-
-  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].Nstarpar      = in[i].Nstarpar;     
-    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].starparOffset = in[i].starparOffset;
-    out[i].extendOffset  = in[i].extendOffset;
-
-    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;
-  }
-  return (out);
-}
-
-// 'primary' is needed to conform with the API for Loneos and Elixir, but is not used
-Average_PS1_V5 *AverageInternalTo_PS1_V5 (Average *in, off_t Nvalues, SecFilt *primary) {
-
-  off_t i;
-  Average_PS1_V5 *out;
-
-  ALLOCATE_ZERO (out, Average_PS1_V5, Nvalues);
-
-  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].Nstarpar       = in[i].Nstarpar;     
-    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].starparOffset  = in[i].starparOffset;
-    out[i].extendOffset   = in[i].extendOffset;
-			  
-    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;
-  }
-  return (out);
-}
-
-SecFilt *SecFilt_PS1_V5_ToInternal (SecFilt_PS1_V5 *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].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;      
-  }
-  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;      
-  }
-  return (out);
-}
-
-Lensing *Lensing_PS1_V5_R2_ToInternal (Lensing_PS1_V5_R2 *in, off_t Nvalues) {
-
-  off_t i;
-  Lensing *out;
-
-  ALLOCATE_ZERO (out, Lensing, Nvalues);
-
-  for (i = 0; i < Nvalues; i++) {
-    dvo_lensing_init (&out[i]);
-
-    out[i].X11_sm_obj  = in[i].X11_sm_obj;      
-    out[i].X12_sm_obj  = in[i].X12_sm_obj;      
-    out[i].X22_sm_obj  = in[i].X22_sm_obj;      
-    out[i].E1_sm_obj   = in[i].E1_sm_obj;      
-    out[i].E2_sm_obj   = in[i].E2_sm_obj;      
-	             	                 
-    out[i].X11_sh_obj  = in[i].X11_sh_obj;      
-    out[i].X12_sh_obj  = in[i].X12_sh_obj;      
-    out[i].X22_sh_obj  = in[i].X22_sh_obj;      
-    out[i].E1_sh_obj   = in[i].E1_sh_obj;      
-    out[i].E2_sh_obj   = in[i].E2_sh_obj;     
-	             	                 
-    out[i].X11_sm_psf  = in[i].X11_sm_psf;
-    out[i].X12_sm_psf  = in[i].X12_sm_psf;
-    out[i].X22_sm_psf  = in[i].X22_sm_psf;
-    out[i].E1_sm_psf   = in[i].E1_sm_psf;
-    out[i].E2_sm_psf   = in[i].E2_sm_psf;     
-	             	                 
-    out[i].X11_sh_psf  = in[i].X11_sh_psf;
-    out[i].X12_sh_psf  = in[i].X12_sh_psf;
-    out[i].X22_sh_psf  = in[i].X22_sh_psf;
-    out[i].E1_sh_psf   = in[i].E1_sh_psf;
-    out[i].E2_sh_psf   = in[i].E2_sh_psf;
-
-    out[i].E1_psf      = in[i].E1_psf;
-    out[i].E2_psf      = in[i].E2_psf;
-
-    out[i].F_ApR5      = in[i].F_ApR5;
-    out[i].dF_ApR5     = in[i].dF_ApR5;
-    out[i].sF_ApR5     = in[i].sF_ApR5;
-    out[i].fF_ApR5     = in[i].fF_ApR5;
-	               	            
-    out[i].F_ApR6      = in[i].F_ApR6;
-    out[i].dF_ApR6     = in[i].dF_ApR6;
-    out[i].sF_ApR6     = in[i].sF_ApR6;
-    out[i].fF_ApR6     = in[i].fF_ApR6;
-	          	            
-    out[i].detID       = in[i].detID;
-    out[i].objID       = in[i].objID;
-    out[i].catID       = in[i].catID;
-    out[i].averef      = in[i].averef;
-
-    out[i].imageID     = in[i].imageID;
-  }
-  return (out);
-}
-
-Lensing_PS1_V5_R2 *LensingInternalTo_PS1_V5_R2 (Lensing *in, off_t Nvalues) {
-
-  off_t i;
-  Lensing_PS1_V5_R2 *out;
-
-  ALLOCATE_ZERO (out, Lensing_PS1_V5, Nvalues);
-
-  for (i = 0; i < Nvalues; i++) {
-
-    out[i].X11_sm_obj  = in[i].X11_sm_obj;      
-    out[i].X12_sm_obj  = in[i].X12_sm_obj;      
-    out[i].X22_sm_obj  = in[i].X22_sm_obj;      
-    out[i].E1_sm_obj   = in[i].E1_sm_obj;      
-    out[i].E2_sm_obj   = in[i].E2_sm_obj;      
-	             	                 
-    out[i].X11_sh_obj  = in[i].X11_sh_obj;      
-    out[i].X12_sh_obj  = in[i].X12_sh_obj;      
-    out[i].X22_sh_obj  = in[i].X22_sh_obj;      
-    out[i].E1_sh_obj   = in[i].E1_sh_obj;      
-    out[i].E2_sh_obj   = in[i].E2_sh_obj;     
-	             	                 
-    out[i].X11_sm_psf  = in[i].X11_sm_psf;
-    out[i].X12_sm_psf  = in[i].X12_sm_psf;
-    out[i].X22_sm_psf  = in[i].X22_sm_psf;
-    out[i].E1_sm_psf   = in[i].E1_sm_psf;
-    out[i].E2_sm_psf   = in[i].E2_sm_psf;     
-	             	                 
-    out[i].X11_sh_psf  = in[i].X11_sh_psf;
-    out[i].X12_sh_psf  = in[i].X12_sh_psf;
-    out[i].X22_sh_psf  = in[i].X22_sh_psf;
-    out[i].E1_sh_psf   = in[i].E1_sh_psf;
-    out[i].E2_sh_psf   = in[i].E2_sh_psf;
-
-    out[i].E1_psf      = in[i].E1_psf;
-    out[i].E2_psf      = in[i].E2_psf;
-
-    out[i].F_ApR5      = in[i].F_ApR5;
-    out[i].dF_ApR5     = in[i].dF_ApR5;
-    out[i].sF_ApR5     = in[i].sF_ApR5;
-    out[i].fF_ApR5     = in[i].fF_ApR5;
-	               	            
-    out[i].F_ApR6      = in[i].F_ApR6;
-    out[i].dF_ApR6     = in[i].dF_ApR6;
-    out[i].sF_ApR6     = in[i].sF_ApR6;
-    out[i].fF_ApR6     = in[i].fF_ApR6;
-	          	            
-    out[i].detID       = in[i].detID;
-    out[i].objID       = in[i].objID;
-    out[i].catID       = in[i].catID;
-    out[i].averef      = in[i].averef;
-
-    out[i].imageID     = in[i].imageID;
-  }
-  return (out);
-}
-
-Lensobj *Lensobj_PS1_V5_ToInternal (Lensobj_PS1_V5 *in, off_t Nvalues) {
-
-  off_t i;
-  Lensobj *out;
-
-  ALLOCATE_ZERO (out, Lensobj, Nvalues);
-
-  for (i = 0; i < Nvalues; i++) {
-    dvo_lensobj_init (&out[i], FALSE);
-
-    out[i].X11_sm_obj  = in[i].X11_sm_obj;      
-    out[i].X12_sm_obj  = in[i].X12_sm_obj;      
-    out[i].X22_sm_obj  = in[i].X22_sm_obj;      
-    out[i].E1_sm_obj   = in[i].E1_sm_obj;      
-    out[i].E2_sm_obj   = in[i].E2_sm_obj;      
-	             	                 
-    out[i].X11_sh_obj  = in[i].X11_sh_obj;      
-    out[i].X12_sh_obj  = in[i].X12_sh_obj;      
-    out[i].X22_sh_obj  = in[i].X22_sh_obj;      
-    out[i].E1_sh_obj   = in[i].E1_sh_obj;      
-    out[i].E2_sh_obj   = in[i].E2_sh_obj;     
-	             	                 
-    out[i].X11_sm_psf  = in[i].X11_sm_psf;
-    out[i].X12_sm_psf  = in[i].X12_sm_psf;
-    out[i].X22_sm_psf  = in[i].X22_sm_psf;
-    out[i].E1_sm_psf   = in[i].E1_sm_psf;
-    out[i].E2_sm_psf   = in[i].E2_sm_psf;     
-	             	                 
-    out[i].X11_sh_psf  = in[i].X11_sh_psf;
-    out[i].X12_sh_psf  = in[i].X12_sh_psf;
-    out[i].X22_sh_psf  = in[i].X22_sh_psf;
-    out[i].E1_sh_psf   = in[i].E1_sh_psf;
-    out[i].E2_sh_psf   = in[i].E2_sh_psf;
-
-    out[i].F_ApR5      = in[i].F_ApR5;
-    out[i].dF_ApR5     = in[i].dF_ApR5;
-    out[i].sF_ApR5     = in[i].sF_ApR5;
-    out[i].fF_ApR5     = in[i].fF_ApR5;
-	               	            
-    out[i].F_ApR6      = in[i].F_ApR6;
-    out[i].dF_ApR6     = in[i].dF_ApR6;
-    out[i].sF_ApR6     = in[i].sF_ApR6;
-    out[i].fF_ApR6     = in[i].fF_ApR6;
-	          	            
-    out[i].gamma       = in[i].gamma;
-    out[i].E1          = in[i].E1;
-    out[i].E2          = in[i].E2;
-
-    out[i].objID       = in[i].objID;
-    out[i].catID       = in[i].catID;
-
-    out[i].photcode    = in[i].photcode;
-    out[i].Nmeas       = in[i].Nmeas;
-  }
-  return (out);
-}
-
-Lensobj_PS1_V5 *LensobjInternalTo_PS1_V5 (Lensobj *in, off_t Nvalues) {
-
-  off_t i;
-  Lensobj_PS1_V5 *out;
-
-  ALLOCATE_ZERO (out, Lensobj_PS1_V5, Nvalues);
-
-  for (i = 0; i < Nvalues; i++) {
-
-    out[i].X11_sm_obj  = in[i].X11_sm_obj;      
-    out[i].X12_sm_obj  = in[i].X12_sm_obj;      
-    out[i].X22_sm_obj  = in[i].X22_sm_obj;      
-    out[i].E1_sm_obj   = in[i].E1_sm_obj;      
-    out[i].E2_sm_obj   = in[i].E2_sm_obj;      
-	             	                 
-    out[i].X11_sh_obj  = in[i].X11_sh_obj;      
-    out[i].X12_sh_obj  = in[i].X12_sh_obj;      
-    out[i].X22_sh_obj  = in[i].X22_sh_obj;      
-    out[i].E1_sh_obj   = in[i].E1_sh_obj;      
-    out[i].E2_sh_obj   = in[i].E2_sh_obj;     
-	             	                 
-    out[i].X11_sm_psf  = in[i].X11_sm_psf;
-    out[i].X12_sm_psf  = in[i].X12_sm_psf;
-    out[i].X22_sm_psf  = in[i].X22_sm_psf;
-    out[i].E1_sm_psf   = in[i].E1_sm_psf;
-    out[i].E2_sm_psf   = in[i].E2_sm_psf;     
-	             	                 
-    out[i].X11_sh_psf  = in[i].X11_sh_psf;
-    out[i].X12_sh_psf  = in[i].X12_sh_psf;
-    out[i].X22_sh_psf  = in[i].X22_sh_psf;
-    out[i].E1_sh_psf   = in[i].E1_sh_psf;
-    out[i].E2_sh_psf   = in[i].E2_sh_psf;
-
-    out[i].F_ApR5      = in[i].F_ApR5;
-    out[i].dF_ApR5     = in[i].dF_ApR5;
-    out[i].sF_ApR5     = in[i].sF_ApR5;
-    out[i].fF_ApR5     = in[i].fF_ApR5;
-	               	            
-    out[i].F_ApR6      = in[i].F_ApR6;
-    out[i].dF_ApR6     = in[i].dF_ApR6;
-    out[i].sF_ApR6     = in[i].sF_ApR6;
-    out[i].fF_ApR6     = in[i].fF_ApR6;
-	          	            
-    out[i].gamma       = in[i].gamma;
-    out[i].E1          = in[i].E1;
-    out[i].E2          = in[i].E2;
-
-    out[i].objID       = in[i].objID;
-    out[i].catID       = in[i].catID;
-
-    out[i].photcode    = in[i].photcode;
-    out[i].Nmeas       = in[i].Nmeas;
-  }
-  return (out);
-}
-
-StarPar *StarPar_PS1_V5_ToInternal (StarPar_PS1_V5 *in, off_t Nvalues) {
-
-  off_t i;
-  StarPar *out;
-
-  ALLOCATE_ZERO (out, StarPar, Nvalues);
-
-  for (i = 0; i < Nvalues; i++) {
-    dvo_starpar_init (&out[i]);
-
-    out[i].R  	     = in[i].R;      
-    out[i].D  	     = in[i].D;      
-    out[i].galLat    = in[i].galLat;      
-    out[i].galLon    = in[i].galLon;      
-
-    out[i].Ebv       = in[i].Ebv     ;      
-    out[i].dEbv      = in[i].dEbv    ;      
-    out[i].DistMag   = in[i].DistMag ;      
-    out[i].dDistMag  = in[i].dDistMag;      
-    out[i].M_r       = in[i].M_r     ;      
-    out[i].dM_r      = in[i].dM_r    ;      
-    out[i].FeH       = in[i].FeH     ;      
-    out[i].dFeH      = in[i].dFeH    ;      
-    out[i].uRA       = in[i].uRA     ;      
-    out[i].uDEC      = in[i].uDEC    ;      
-
-    out[i].averef  = in[i].averef;
-    out[i].objID   = in[i].objID ;
-    out[i].catID   = in[i].catID ;
-  }
-  return (out);
-}
-
-StarPar_PS1_V5 *StarParInternalTo_PS1_V5 (StarPar *in, off_t Nvalues) {
-
-  off_t i;
-  StarPar_PS1_V5 *out;
-
-  ALLOCATE_ZERO (out, StarPar_PS1_V5, Nvalues);
-
-  for (i = 0; i < Nvalues; i++) {
-
-    out[i].R  	     = in[i].R;      
-    out[i].D  	     = in[i].D;      
-    out[i].galLat    = in[i].galLat;      
-    out[i].galLon    = in[i].galLon;      
-
-    out[i].Ebv       = in[i].Ebv     ;      
-    out[i].dEbv      = in[i].dEbv    ;      
-    out[i].DistMag   = in[i].DistMag ;      
-    out[i].dDistMag  = in[i].dDistMag;      
-    out[i].M_r       = in[i].M_r     ;      
-    out[i].dM_r      = in[i].dM_r    ;      
-    out[i].FeH       = in[i].FeH     ;      
-    out[i].dFeH      = in[i].dFeH    ;      
-    out[i].uRA       = in[i].uRA     ;      
-    out[i].uDEC      = in[i].uDEC    ;      
-
-    out[i].averef  = in[i].averef;
-    out[i].objID   = in[i].objID ;
-    out[i].catID   = in[i].catID ;
-  }
-  return (out);
-}
-
-# define RAW_IMAGE_NAME_LEN 117
-
-Image *Image_PS1_V5_ToInternal (Image_PS1_V5 *in, off_t Nvalues, off_t Nalloc) {
-
-  off_t i;
-  Image *out;
-
-  char *buffer;
-  ALLOCATE_ZERO (buffer, char, Nalloc);
-  out = (Image *) buffer;
-  // ALLOCATE_ZERO (out, Image, Nvalues);
-
-  for (i = 0; i < Nvalues; i++) {
-    // this is only safe because the initial 120 bytes in Coords match CoordsDisk
-    memcpy (&out[i].coords, &in[i].coords, sizeof(CoordsDisk));
-    out[i].coords.mosaic   = NULL;
-    out[i].coords.offsetMap = NULL;
-
-    // RAW_IMAGE_NAME_LEN == DVO_IMAGE_NAME_LEN
-    strncpy (out[i].name, in[i].name, RAW_IMAGE_NAME_LEN - 1);
-    out[i].name[RAW_IMAGE_NAME_LEN - 1] = 0; // force termination
-
-    out[i].tzero    	    = in[i].tzero;
-    out[i].nstar    	    = in[i].nstar;
-    out[i].secz	    	    = in[i].secz;
-    out[i].NX	    	    = in[i].NX;
-    out[i].NY	    	    = in[i].NY;
-    out[i].apmifit  	    = in[i].apmifit;
-    out[i].dapmifit 	    = in[i].dapmifit;
-    out[i].Mcal	    	    = in[i].Mcal;
-    out[i].dMcal    	    = in[i].dMcal;
-    out[i].Xm	    	    = in[i].Xm;
-    out[i].photcode   	    = in[i].photcode;
-    out[i].exptime  	    = in[i].exptime;
-    out[i].sidtime  	    = in[i].sidtime;
-    out[i].latitude  	    = in[i].latitude;
-
-    out[i].RAo  	    = in[i].RAo;
-    out[i].DECo  	    = in[i].DECo;
-    out[i].Radius  	    = in[i].Radius;
-    out[i].refColorBlue	    = in[i].refColorBlue;
-    out[i].refColorRed 	    = in[i].refColorRed;
-
-    out[i].detection_limit  = in[i].detection_limit;
-    out[i].saturation_limit = in[i].saturation_limit;
-    out[i].cerror	    = in[i].cerror;
-    out[i].fwhm_x	    = in[i].fwhm_x;
-    out[i].fwhm_y	    = in[i].fwhm_y;
-    out[i].trate	    = in[i].trate;
-    out[i].ccdnum	    = in[i].ccdnum;
-    out[i].flags	    = in[i].flags;
-    out[i].imageID	    = in[i].imageID;
-    out[i].parentID	    = in[i].parentID;
-    out[i].externID	    = in[i].externID;
-    out[i].sourceID	    = in[i].sourceID;
-
-    // as of 2011.02.03, the old Mx,My,..., Mxxxx,Myyyy have been deprecated and replaced
-    // with the following.  (no real databases used those values -- see
-    // libdvo/doc/dvo-images.txt)
-    out[i].nLinkAstrom	    = in[i].nLinkAstrom;
-    out[i].nLinkPhotom	    = in[i].nLinkPhotom;
-    out[i].ubercalDist	    = in[i].ubercalDist;
-    out[i].dXpixSys	    = in[i].dXpixSys;
-    out[i].dYpixSys	    = in[i].dYpixSys;
-    out[i].dMagSys	    = in[i].dMagSys;
-    out[i].nFitAstrom       = in[i].nFitAstrom;
-    out[i].nFitPhotom       = in[i].nFitPhotom;
-    out[i].photom_map_id    = in[i].photom_map_id;
-    out[i].astrom_map_id    = in[i].astrom_map_id;
-  }
-  return (out);
-}
-
-Image_PS1_V5 *ImageInternalTo_PS1_V5 (Image *in, off_t Nvalues) {
-
-  off_t i;
-  Image_PS1_V5 *out;
-
-  ALLOCATE_ZERO (out, Image_PS1_V5, Nvalues);
-
-  for (i = 0; i < Nvalues; i++) {
-    // this is only save because the initial 120 bytes in Coords match CoordsDisk
-    memcpy (&out[i].coords, &in[i].coords, sizeof(CoordsDisk));
-
-    // RAW_IMAGE_NAME_LEN == DVO_IMAGE_NAME_LEN
-    strncpy (out[i].name, in[i].name, RAW_IMAGE_NAME_LEN - 1);
-    out[i].name[RAW_IMAGE_NAME_LEN - 1] = 0; // force termination
-
-    out[i].tzero    	    = in[i].tzero;
-    out[i].nstar    	    = in[i].nstar;
-    out[i].secz	    	    = in[i].secz;
-    out[i].NX	    	    = in[i].NX;
-    out[i].NY	    	    = in[i].NY;
-    out[i].apmifit  	    = in[i].apmifit;
-    out[i].dapmifit 	    = in[i].dapmifit;
-    out[i].Mcal	    	    = in[i].Mcal;
-    out[i].dMcal    	    = in[i].dMcal;
-    out[i].Xm	    	    = in[i].Xm;
-    out[i].photcode   	    = in[i].photcode;
-    out[i].exptime  	    = in[i].exptime;
-    out[i].sidtime  	    = in[i].sidtime;
-    out[i].latitude  	    = in[i].latitude;
-
-    out[i].RAo  	    = in[i].RAo;
-    out[i].DECo  	    = in[i].DECo;
-    out[i].Radius  	    = in[i].Radius;
-    out[i].refColorBlue	    = in[i].refColorBlue;
-    out[i].refColorRed 	    = in[i].refColorRed;
-
-    out[i].detection_limit  = in[i].detection_limit;
-    out[i].saturation_limit = in[i].saturation_limit;
-    out[i].cerror	    = in[i].cerror;
-    out[i].fwhm_x	    = in[i].fwhm_x;
-    out[i].fwhm_y	    = in[i].fwhm_y;
-    out[i].trate	    = in[i].trate;
-    out[i].ccdnum	    = in[i].ccdnum;
-    out[i].flags	    = in[i].flags;
-    out[i].imageID	    = in[i].imageID;
-    out[i].parentID	    = in[i].parentID;
-    out[i].externID	    = in[i].externID;
-    out[i].sourceID	    = in[i].sourceID;
-
-    // as of 2011.02.03, the old Mx,My,..., Mxxxx,Myyyy have been deprecated and replaced
-    // with the following.  (no real databases used those values -- see
-    // libdvo/doc/dvo-images.txt)
-    out[i].nLinkAstrom	    = in[i].nLinkAstrom;
-    out[i].nLinkPhotom	    = in[i].nLinkPhotom;
-    out[i].ubercalDist	    = in[i].ubercalDist;
-    out[i].dXpixSys	    = in[i].dXpixSys;
-    out[i].dYpixSys	    = in[i].dYpixSys;
-    out[i].dMagSys	    = in[i].dMagSys;
-    out[i].nFitAstrom       = in[i].nFitAstrom;
-    out[i].nFitPhotom       = in[i].nFitPhotom;
-    out[i].photom_map_id    = in[i].photom_map_id;
-    out[i].astrom_map_id    = in[i].astrom_map_id;
-  }
-  return (out);
-}
-
-PhotCode *PhotCode_PS1_V5_To_Internal (PhotCode_PS1_V5 *in, off_t Nvalues) {
-
-  off_t i;
-  PhotCode *out;
-
-  ALLOCATE_ZERO (out, PhotCode, Nvalues);
-
-  for (i = 0; i < Nvalues; i++) {
-    strncpy (out[i].name, in[i].name, 31); // out[32], in[32]
-    out[i].name[31] = 0; // force termination
-
-    out[i].code  = in[i].code;         
-    out[i].type  = in[i].type;         
-    out[i].C     = in[i].C;            
-    out[i].dC 	 = in[i].dC;           
-    out[i].dX 	 = in[i].dX;           
-    out[i].K  	 = in[i].K;            
-    out[i].c1 	 = in[i].c1;           
-    out[i].c2 	 = in[i].c2;           
-    out[i].equiv = in[i].equiv;        
-    out[i].Nc    = in[i].Nc;           
-    memcpy (out[i].X, in[i].X, 4*sizeof(float));            
-
-    out[i].astromErrSys      = in[i].astromErrSys;
-    out[i].astromErrScale    = in[i].astromErrScale;
-    out[i].astromErrMagScale = in[i].astromErrMagScale;
-    out[i].photomErrSys      = in[i].photomErrSys;
-
-    out[i].photomPoorMask      = in[i].photomPoorMask;
-    out[i].photomBadMask       = in[i].photomBadMask;
-    out[i].astromPoorMask      = in[i].astromPoorMask;
-    out[i].astromBadMask       = in[i].astromBadMask;
-  }
-  return (out);
-}
-
-PhotCode_PS1_V5 *PhotCode_Internal_To_PS1_V5 (PhotCode *in, off_t Nvalues) {
-
-  off_t i;
-  PhotCode_PS1_V5 *out;
-
-  ALLOCATE_ZERO (out, PhotCode_PS1_V5, Nvalues);
-
-  for (i = 0; i < Nvalues; i++) {
-    strncpy (out[i].name, in[i].name, 31); // out[32], in[32]
-    out[i].name[31] = 0; // force termination
-
-    out[i].code  = in[i].code;         
-    out[i].type  = in[i].type;         
-    out[i].C     = in[i].C;            
-    out[i].dC 	 = in[i].dC;           
-    out[i].dX 	 = in[i].dX;           
-    out[i].K  	 = in[i].K;            
-    out[i].c1 	 = in[i].c1;           
-    out[i].c2 	 = in[i].c2;           
-    out[i].equiv = in[i].equiv;        
-    out[i].Nc    = in[i].Nc;           
-    memcpy (out[i].X, in[i].X, 4*sizeof(float));            
-
-    out[i].astromErrSys      = in[i].astromErrSys;
-    out[i].astromErrScale    = in[i].astromErrScale;
-    out[i].astromErrMagScale = in[i].astromErrMagScale;
-    out[i].photomErrSys      = in[i].photomErrSys;
-
-    out[i].photomPoorMask      = in[i].photomPoorMask;
-    out[i].photomBadMask       = in[i].photomBadMask;
-    out[i].astromPoorMask      = in[i].astromPoorMask;
-    out[i].astromBadMask       = in[i].astromBadMask;
-  }
-  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].starparOffset  = in[i].starparOffset;
-    out[i].extendOffset   = in[i].extendOffset;
-			  
-    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) {
+int gfits_convert_Measure_PS1_V5alt (Measure_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);
+  if (size != 232) { 
+    fprintf (stderr, "WARNING: mismatch in data types Measure_PS1_V5alt: "OFF_T_FMT" vs %d\n",  size,  232);
     return (FALSE);
   }
@@ -1029,49 +1471,67 @@
 # ifdef BYTE_SWAP
   byte = (unsigned char *) data;
-  for (i = 0; i < nitems; i++, byte += 184) {
+  for (i = 0; i < nitems; i++, byte += 232) {
     /** 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
+    SWAP_WORD (16); // MAG
+    SWAP_WORD (20); // MAG_ERR
+    SWAP_WORD (24); // M_APER
+    SWAP_WORD (28); // M_APER_ERR
+    SWAP_WORD (32); // M_KRON
+    SWAP_WORD (36); // M_KRON_ERR
+    SWAP_WORD (40); // M_CAL
+    SWAP_WORD (44); // MAG_CAL_ERR
+    SWAP_WORD (48); // M_TIME
+    SWAP_WORD (52); // FLUX_PSF
+    SWAP_WORD (56); // FLUX_PSF_ERR
+    SWAP_WORD (60); // FLUX_KRON
+    SWAP_WORD (64); // FLUX_KRON_ERR
+    SWAP_WORD (68); // FLUX_AP
+    SWAP_WORD (72); // FLUX_AP_ERR
+    SWAP_WORD (76); // AIRMASS
+    SWAP_WORD (80); // AZ
+    SWAP_WORD (84); // X_CCD
+    SWAP_WORD (88); // Y_CCD
+    SWAP_WORD (92); // X_FIX
+    SWAP_WORD (96); // Y_FIX
+    SWAP_WORD (100); // X_OFF_KH
+    SWAP_WORD (104); // Y_OFF_KH
+    SWAP_WORD (108); // X_OFF_DCR
+    SWAP_WORD (112); // Y_OFF_DCR
+    SWAP_WORD (116); // R_OFF_GAL
+    SWAP_WORD (120); // D_OFF_GAL
+    SWAP_WORD (124); // SKY_FLUX
+    SWAP_WORD (128); // SKY_FLUX_ERR
+    SWAP_WORD (132); // TIME
+    SWAP_WORD (136); // AVE_REF
+    SWAP_WORD (140); // DET_ID
+    SWAP_WORD (144); // OBJ_ID
+    SWAP_WORD (148); // CAT_ID
+    SWAP_DBLE (152); // EXT_ID
+    SWAP_WORD (160); // IMAGE_ID
+    SWAP_WORD (164); // PSF_QF
+    SWAP_WORD (168); // PSF_QF_PEFECT
+    SWAP_WORD (172); // PSF_CHISQ
+    SWAP_WORD (176); // PSF_NDOF
+    SWAP_WORD (180); // PSF_NPIX
+    SWAP_WORD (184); // PHOT_FLAGS
+    SWAP_WORD (188); // EXT_NSIGMA
+    SWAP_BYTE (192); // FWHM_MAJOR
+    SWAP_BYTE (194); // FWHM_MINOR
+    SWAP_BYTE (196); // PSF_THETA
+    SWAP_BYTE (198); // MXX
+    SWAP_BYTE (200); // MXY
+    SWAP_BYTE (202); // MYY
+    SWAP_BYTE (204); // TIME_MSEC
+    SWAP_BYTE (206); // PHOTCODE
+    SWAP_BYTE (208); // X_CCD_ERR
+    SWAP_BYTE (210); // Y_CCD_ERR
+    SWAP_BYTE (212); // POS_SYS_ERR
+    SWAP_BYTE (214); // POSANGLE
+    SWAP_WORD (216); // PLTSCALE
+    SWAP_WORD (220); // DB_FLAGS
+    SWAP_WORD (224); // PHOT_FLAGS
+    SWAP_WORD (228); // PADDING
   }
 # endif  
@@ -1080,21 +1540,20 @@
 } 
 
-/*** 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) {
+Measure_PS1_V5alt *gfits_table_get_Measure_PS1_V5alt (FTable *ftable, off_t *Ndata, char *swapped) {
 
   int Ncols;
-  Average_PS1_V5alt *data;
+  Measure_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);
+  if (Ncols != 232) {
+    fprintf (stderr, "ERROR: mis-match in table size: width is %d but should be %d bytes\n", Ncols, 232);
     return NULL;
   }
 
   *Ndata = ftable[0].header[0].Naxis[1];
-  data = (Average_PS1_V5alt *) ftable[0].buffer;
+  data = (Measure_PS1_V5alt *) ftable[0].buffer;
   if ((swapped == NULL) || (*swapped == FALSE)) {
-    if (!gfits_convert_Average_PS1_V5alt (data, sizeof (Average_PS1_V5alt), *Ndata)) {
+    if (!gfits_convert_Measure_PS1_V5alt (data, sizeof (Measure_PS1_V5alt), *Ndata)) {
       return NULL;
     }
@@ -1105,272 +1564,3 @@
 }
 
-/****** 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);
-}
-
-Lensing *Lensing_PS1_V5_R0_ToInternal (Lensing_PS1_V5_R0 *in, off_t Nvalues) {
-
-  off_t i;
-  Lensing *out;
-
-  ALLOCATE_ZERO (out, Lensing, Nvalues);
-
-  for (i = 0; i < Nvalues; i++) {
-    dvo_lensing_init (&out[i]);
-
-    out[i].X11_sm_obj  = in[i].X11_sm_obj;      
-    out[i].X12_sm_obj  = in[i].X12_sm_obj;      
-    out[i].X22_sm_obj  = in[i].X22_sm_obj;      
-    out[i].E1_sm_obj   = in[i].E1_sm_obj;      
-    out[i].E2_sm_obj   = in[i].E2_sm_obj;      
-	             	                 
-    out[i].X11_sh_obj  = in[i].X11_sh_obj;      
-    out[i].X12_sh_obj  = in[i].X12_sh_obj;      
-    out[i].X22_sh_obj  = in[i].X22_sh_obj;      
-    out[i].E1_sh_obj   = in[i].E1_sh_obj;      
-    out[i].E2_sh_obj   = in[i].E2_sh_obj;     
-	             	                 
-    out[i].X11_sm_psf  = in[i].X11_sm_psf;
-    out[i].X12_sm_psf  = in[i].X12_sm_psf;
-    out[i].X22_sm_psf  = in[i].X22_sm_psf;
-    out[i].E1_sm_psf   = in[i].E1_sm_psf;
-    out[i].E2_sm_psf   = in[i].E2_sm_psf;     
-	             	                 
-    out[i].X11_sh_psf  = in[i].X11_sh_psf;
-    out[i].X12_sh_psf  = in[i].X12_sh_psf;
-    out[i].X22_sh_psf  = in[i].X22_sh_psf;
-    out[i].E1_sh_psf   = in[i].E1_sh_psf;
-    out[i].E2_sh_psf   = in[i].E2_sh_psf;
-
-    out[i].F_ApR5      = in[i].F_ApR5;
-    out[i].dF_ApR5     = in[i].dF_ApR5;
-    out[i].sF_ApR5     = in[i].sF_ApR5;
-    out[i].fF_ApR5     = in[i].fF_ApR5;
-	               	            
-    out[i].F_ApR6      = in[i].F_ApR6;
-    out[i].dF_ApR6     = in[i].dF_ApR6;
-    out[i].sF_ApR6     = in[i].sF_ApR6;
-    out[i].fF_ApR6     = in[i].fF_ApR6;
-	          	            
-    out[i].detID       = in[i].detID;
-    out[i].objID       = in[i].objID;
-    out[i].catID       = in[i].catID;
-    out[i].averef      = in[i].averef;
-  }
-  return (out);
-}
-
-Lensing *Lensing_PS1_V5_R1_ToInternal (Lensing_PS1_V5_R1 *in, off_t Nvalues) {
-
-  off_t i;
-  Lensing *out;
-
-  ALLOCATE_ZERO (out, Lensing, Nvalues);
-
-  for (i = 0; i < Nvalues; i++) {
-    dvo_lensing_init (&out[i]);
-
-    out[i].X11_sm_obj  = in[i].X11_sm_obj;      
-    out[i].X12_sm_obj  = in[i].X12_sm_obj;      
-    out[i].X22_sm_obj  = in[i].X22_sm_obj;      
-    out[i].E1_sm_obj   = in[i].E1_sm_obj;      
-    out[i].E2_sm_obj   = in[i].E2_sm_obj;      
-	             	                 
-    out[i].X11_sh_obj  = in[i].X11_sh_obj;      
-    out[i].X12_sh_obj  = in[i].X12_sh_obj;      
-    out[i].X22_sh_obj  = in[i].X22_sh_obj;      
-    out[i].E1_sh_obj   = in[i].E1_sh_obj;      
-    out[i].E2_sh_obj   = in[i].E2_sh_obj;     
-	             	                 
-    out[i].X11_sm_psf  = in[i].X11_sm_psf;
-    out[i].X12_sm_psf  = in[i].X12_sm_psf;
-    out[i].X22_sm_psf  = in[i].X22_sm_psf;
-    out[i].E1_sm_psf   = in[i].E1_sm_psf;
-    out[i].E2_sm_psf   = in[i].E2_sm_psf;     
-	             	                 
-    out[i].X11_sh_psf  = in[i].X11_sh_psf;
-    out[i].X12_sh_psf  = in[i].X12_sh_psf;
-    out[i].X22_sh_psf  = in[i].X22_sh_psf;
-    out[i].E1_sh_psf   = in[i].E1_sh_psf;
-    out[i].E2_sh_psf   = in[i].E2_sh_psf;
-
-    out[i].F_ApR5      = in[i].F_ApR5;
-    out[i].dF_ApR5     = in[i].dF_ApR5;
-    out[i].sF_ApR5     = in[i].sF_ApR5;
-    out[i].fF_ApR5     = in[i].fF_ApR5;
-	               	            
-    out[i].F_ApR6      = in[i].F_ApR6;
-    out[i].dF_ApR6     = in[i].dF_ApR6;
-    out[i].sF_ApR6     = in[i].sF_ApR6;
-    out[i].fF_ApR6     = in[i].fF_ApR6;
-	          	            
-    out[i].detID       = in[i].detID;
-    out[i].objID       = in[i].objID;
-    out[i].catID       = in[i].catID;
-    out[i].averef      = in[i].averef;
-
-    out[i].imageID     = in[i].imageID;
-  }
-  return (out);
-}
-
+
Index: trunk/Ohana/src/libdvo/src/dvo_tiny_values.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_tiny_values.c	(revision 37995)
+++ trunk/Ohana/src/libdvo/src/dvo_tiny_values.c	(revision 38062)
@@ -2,4 +2,5 @@
 
 void CopyAverageToTiny (AverageTiny *averageT, Average *average) {
+  memset (averageT, 0, sizeof(AverageTiny));
   averageT[0].R     	    = average[0].R;
   averageT[0].D     	    = average[0].D;
@@ -14,4 +15,5 @@
 
 void CopyMeasureToTiny (MeasureTiny *measureT, Measure *measure) {
+  memset (measureT, 0, sizeof(MeasureTiny));
   measureT[0].R          = measure[0].R;
   measureT[0].D          = measure[0].D;
