Index: trunk/Ohana/src/addstar/include/addstar.h
===================================================================
--- trunk/Ohana/src/addstar/include/addstar.h	(revision 24399)
+++ trunk/Ohana/src/addstar/include/addstar.h	(revision 24400)
@@ -263,4 +263,6 @@
 Stars     *Convert_PS1_DEV_1	  PROTO((FTable *table, int *nstars));
 Stars     *Convert_PS1_V1	  PROTO((FTable *table, int *nstars));
+Stars     *Convert_PS1_V1_Alt	  PROTO((FTable *table, int *nstars));
+Stars     *Convert_PS1_V2	  PROTO((FTable *table, int *nstars));
 
 int        InitStar               PROTO((Stars *star));
Index: trunk/Ohana/src/addstar/src/ReadStarsFITS.c
===================================================================
--- trunk/Ohana/src/addstar/src/ReadStarsFITS.c	(revision 24399)
+++ trunk/Ohana/src/addstar/src/ReadStarsFITS.c	(revision 24400)
@@ -43,4 +43,7 @@
     stars = Convert_PS1_V1 (&table, &Nstars);
   }
+  if (!strcmp (type, "PS1_V2")) {
+    stars = Convert_PS1_V2 (&table, &Nstars);
+  }
   if (stars == NULL) {
     fprintf (stderr, "ERROR: invalid table type %s\n", type);
@@ -188,4 +191,17 @@
   Stars *stars;
   CMF_PS1_V1 *ps1data;
+
+  // CMF_PS1_V1 was modified 2009.05.26 (r24251) to use doubles for ra & dec.  this was a
+  // mistake in two ways: a few format should have been defined (eg, CMF_PS1_V2), and the
+  // layout used did not have clean byte-boundaries for the corresponding structure.  The
+  // former means we have two varieties of CMF_PS1_V1 out there; the latter means that the
+  // autocode tools do not work to read in the new version, even if we recognize it.  Here we
+  // test for the existence of the broken version (table[0].headers[0].Naxis[0] == 136), and
+  // call a special conversion function if it is found.
+
+  if (table[0].header[0].Naxis[0] == 136) {
+      stars = Convert_PS1_V1_Alt (table, nstars);
+      return (stars);
+  }
 
   ps1data = gfits_table_get_CMF_PS1_V1 (table, &Nstars, NULL);
@@ -244,2 +260,136 @@
   return (stars);
 }
+
+Stars *Convert_PS1_V1_Alt (FTable *table, int *nstars) {
+
+  int i, Nstars;
+  double ZeroPt;
+  Stars *stars;
+  CMF_PS1_V2 *ps1data;
+
+  // CMF_PS1_V1 was modified 2009.05.26 (r24251) to use doubles for ra & dec.  this was a
+  // mistake in two ways: a few format should have been defined (eg, CMF_PS1_V2), and the
+  // layout used did not have clean byte-boundaries for the corresponding structure.  The
+  // former means we have two varieties of CMF_PS1_V1 out there; the latter means that the
+  // autocode tools do not work to read in the new version, even if we recognize it.  Here we
+  // test for the existence of the broken version (table[0].headers[0].Naxis[0] == 136), and
+  // call a special conversion function if it is found.
+
+  ps1data = gfits_table_get_CMF_PS1_V1_Alt (table, &Nstars, NULL);
+  ZeroPt = GetZeroPoint();
+
+  ALLOCATE (stars, Stars, Nstars);
+  for (i = 0; i < Nstars; i++) {
+    InitStar (&stars[i]);
+    stars[i].measure.Xccd       = ps1data[i].X;
+    stars[i].measure.Yccd       = ps1data[i].Y;
+    stars[i].measure.dXccd      = ShortPixels(ps1data[i].dX);
+    stars[i].measure.dYccd      = ShortPixels(ps1data[i].dY);
+
+    stars[i].measure.posangle   = ShortDegree(ps1data[i].posangle);
+    stars[i].measure.pltscale   = ps1data[i].pltscale;
+
+    if ((ps1data[i].M >= 0.0) || isnan(ps1data[i].M)) {
+	stars[i].measure.M      = NAN;
+    } else {
+	stars[i].measure.M      = ps1data[i].M + ZeroPt;
+    }
+    stars[i].measure.dM         = ps1data[i].dM;
+    stars[i].measure.dMcal      = ps1data[i].dMcal;
+    stars[i].measure.Map        = ps1data[i].Map + ZeroPt;
+		        
+    stars[i].measure.Sky        = ps1data[i].sky;
+    stars[i].measure.dSky       = ps1data[i].dSky;
+		        
+    stars[i].measure.psfChisq   = ps1data[i].psfChisq;
+    stars[i].measure.psfQual    = ps1data[i].psfQual;
+    stars[i].measure.psfNdof    = ps1data[i].psfNdof;
+    stars[i].measure.psfNpix    = ps1data[i].psfNpix;
+    stars[i].measure.crNsigma   = ps1data[i].crNsigma;
+    stars[i].measure.extNsigma  = ps1data[i].extNsigma;
+
+    stars[i].measure.FWx        = ShortPixels(ps1data[i].fx);
+    stars[i].measure.FWy        = ShortPixels(ps1data[i].fy);
+    stars[i].measure.theta      = ShortDegree(ps1data[i].df);
+
+    stars[i].measure.Mxx        = ShortPixels(ps1data[i].Mxx);
+    stars[i].measure.Mxy        = ShortPixels(ps1data[i].Mxy);
+    stars[i].measure.Myy        = ShortPixels(ps1data[i].Myy);
+		        
+    stars[i].measure.photFlags  = ps1data[i].flags;
+
+    // this is may optionally be replaced by the internal sequence (see FilterStars.c)
+    stars[i].measure.detID      = ps1data[i].detID; 
+
+    // the Average fields and the following Measure fields are set in FilterStars after
+    // the image metadata is in hand:  dR, dD, Mcal, dt, airmass, az, t, imageID, extID, 
+    // averef is set in find_matches, dbFlags is zero on ingest.
+
+    // the following fields are currently not being set anywhere: t_msec
+  }    
+  *nstars = Nstars;
+  return (stars);
+}
+
+Stars *Convert_PS1_V2 (FTable *table, int *nstars) {
+
+  int i, Nstars;
+  double ZeroPt;
+  Stars *stars;
+  CMF_PS1_V2 *ps1data;
+
+  ps1data = gfits_table_get_CMF_PS1_V2 (table, &Nstars, NULL);
+  ZeroPt = GetZeroPoint();
+
+  ALLOCATE (stars, Stars, Nstars);
+  for (i = 0; i < Nstars; i++) {
+    InitStar (&stars[i]);
+    stars[i].measure.Xccd       = ps1data[i].X;
+    stars[i].measure.Yccd       = ps1data[i].Y;
+    stars[i].measure.dXccd      = ShortPixels(ps1data[i].dX);
+    stars[i].measure.dYccd      = ShortPixels(ps1data[i].dY);
+
+    stars[i].measure.posangle   = ShortDegree(ps1data[i].posangle);
+    stars[i].measure.pltscale   = ps1data[i].pltscale;
+
+    if ((ps1data[i].M >= 0.0) || isnan(ps1data[i].M)) {
+	stars[i].measure.M      = NAN;
+    } else {
+	stars[i].measure.M      = ps1data[i].M + ZeroPt;
+    }
+    stars[i].measure.dM         = ps1data[i].dM;
+    stars[i].measure.dMcal      = ps1data[i].dMcal;
+    stars[i].measure.Map        = ps1data[i].Map + ZeroPt;
+		        
+    stars[i].measure.Sky        = ps1data[i].sky;
+    stars[i].measure.dSky       = ps1data[i].dSky;
+		        
+    stars[i].measure.psfChisq   = ps1data[i].psfChisq;
+    stars[i].measure.psfQual    = ps1data[i].psfQual;
+    stars[i].measure.psfNdof    = ps1data[i].psfNdof;
+    stars[i].measure.psfNpix    = ps1data[i].psfNpix;
+    stars[i].measure.crNsigma   = ps1data[i].crNsigma;
+    stars[i].measure.extNsigma  = ps1data[i].extNsigma;
+
+    stars[i].measure.FWx        = ShortPixels(ps1data[i].fx);
+    stars[i].measure.FWy        = ShortPixels(ps1data[i].fy);
+    stars[i].measure.theta      = ShortDegree(ps1data[i].df);
+
+    stars[i].measure.Mxx        = ShortPixels(ps1data[i].Mxx);
+    stars[i].measure.Mxy        = ShortPixels(ps1data[i].Mxy);
+    stars[i].measure.Myy        = ShortPixels(ps1data[i].Myy);
+		        
+    stars[i].measure.photFlags  = ps1data[i].flags;
+
+    // this is may optionally be replaced by the internal sequence (see FilterStars.c)
+    stars[i].measure.detID      = ps1data[i].detID; 
+
+    // the Average fields and the following Measure fields are set in FilterStars after
+    // the image metadata is in hand:  dR, dD, Mcal, dt, airmass, az, t, imageID, extID, 
+    // averef is set in find_matches, dbFlags is zero on ingest.
+
+    // the following fields are currently not being set anywhere: t_msec
+  }    
+  *nstars = Nstars;
+  return (stars);
+}
Index: trunk/Ohana/src/libautocode/Makefile.Targets
===================================================================
--- trunk/Ohana/src/libautocode/Makefile.Targets	(revision 24399)
+++ trunk/Ohana/src/libautocode/Makefile.Targets	(revision 24400)
@@ -48,4 +48,5 @@
 $(ASRC)/cmf-ps1-dev-1.$(ARCH).o \
 $(ASRC)/cmf-ps1-v1.$(ARCH).o \
+$(ASRC)/cmf-ps1-v2.$(ARCH).o \
 $(ASRC)/cmf-smpdata.$(ARCH).o \
 $(ASRC)/getstar-ps1-dev-0.$(ARCH).o \
@@ -107,4 +108,5 @@
 $(AINC)/cmf-ps1-dev-1.h \
 $(AINC)/cmf-ps1-v1.h \
+$(AINC)/cmf-ps1-v2.h \
 $(AINC)/cmf-smpdata.h \
 $(AINC)/getstar-ps1-dev-0.h \
Index: trunk/Ohana/src/libautocode/def/cmf-ps1-v1.d
===================================================================
--- trunk/Ohana/src/libautocode/def/cmf-ps1-v1.d	(revision 24399)
+++ trunk/Ohana/src/libautocode/def/cmf-ps1-v1.d	(revision 24400)
@@ -3,5 +3,5 @@
 EXTNAME CMF_PS1_V1
 TYPE    BINTABLE
-SIZE    136
+SIZE    128
 
 # elements of data structure / FITS table
@@ -11,6 +11,6 @@
 FIELD dX,      	 X_PSF_SIG,    	   float,    x coord error,         pixels
 FIELD dY,      	 Y_PSF_SIG,    	   float,    y coord error,         pixels
-FIELD RA,      	 RA_PSF,    	   double,   PSF RA coord,          degrees
-FIELD DEC,     	 DEC_PSF,    	   double,   PSF DEC coord,         degrees
+FIELD RA,      	 RA_PSF,    	   float,    PSF RA coord,          degrees
+FIELD DEC,     	 DEC_PSF,    	   float,    PSF DEC coord,         degrees
 FIELD posangle,  POSANGLE,    	   float,    Posangle at source,    degrees
 FIELD pltscale,  PLTSCALE,    	   float,    Plate Scale at source, arcsec/pixel
Index: trunk/Ohana/src/libautocode/def/cmf-ps1-v2.d
===================================================================
--- trunk/Ohana/src/libautocode/def/cmf-ps1-v2.d	(revision 24400)
+++ trunk/Ohana/src/libautocode/def/cmf-ps1-v2.d	(revision 24400)
@@ -0,0 +1,78 @@
+# name of structure type
+STRUCT  CMF_PS1_V2
+EXTNAME CMF_PS1_V2
+TYPE    BINTABLE
+SIZE    136
+
+# elements of data structure / FITS table
+FIELD detID,     IPP_IDET,     	   unsigned int, detection ID
+FIELD X,      	 X_PSF,    	   float,    x coord,               pixels
+FIELD Y,      	 Y_PSF,    	   float,    y coord,               pixels
+FIELD dX,      	 X_PSF_SIG,    	   float,    x coord error,         pixels
+FIELD dY,      	 Y_PSF_SIG,    	   float,    y coord error,         pixels
+FIELD posangle,  POSANGLE,    	   float,    Posangle at source,    degrees
+FIELD pltscale,  PLTSCALE,    	   float,    Plate Scale at source, arcsec/pixel
+FIELD M,      	 PSF_INST_MAG,     float,    inst mags,             mags
+FIELD dM,     	 PSF_INST_MAG_SIG, float,    inst mag error,        mags
+FIELD Map,       AP_MAG_STANDARD,  float,    standard aperture mag, mags
+FIELD apRadius,  AP_MAG_RADIUS,    float,    radius used for fit,   pixels
+FIELD Mpeak,     PEAK_FLUX_AS_MAG, float,    peak flux as a mag,    mags
+FIELD Mcalib,    CAL_PSF_MAG,      float,    calibrated psf mag,    mags
+FIELD dMcal,     CAL_PSF_MAG_SIG,  float,    zero point scatter,    mags
+FIELD RA,      	 RA_PSF,    	   double,   PSF RA coord,          degrees
+FIELD DEC,     	 DEC_PSF,    	   double,   PSF DEC coord,         degrees
+FIELD sky,    	 SKY,              float,    sky flux,              cnts/sec
+FIELD dSky,    	 SKY_SIG,          float,    sky flux error,        cnts/sec
+FIELD psfChisq,  PSF_CHISQ,        float,    psf fit chisq
+FIELD crNsigma,  CR_NSIGMA,        float,    Nsigma deviations from PSF to CF
+FIELD extNsigma, EXT_NSIGMA,       float,    Nsigma deviations from PSF to EXT
+FIELD fx,     	 PSF_MAJOR,        float,    psf fit major axis,    pixels
+FIELD fy,     	 PSF_MINOR,        float,    psf fit minor axis,    pixels
+FIELD df,     	 PSF_THETA,        float,    ellipse angle,         degrees
+FIELD psfQual, 	 PSF_QF,           float,    quality factor
+FIELD psfNdof, 	 PSF_NDOF,         int,      psf degrees of freedom
+FIELD psfNpix, 	 PSF_NPIX,         int,      psf number of pixels
+FIELD Mxx,     	 MOMENTS_XX,       float,    second moment X,       pixels^2
+FIELD Mxy,     	 MOMENTS_XY,       float,    second moment Y,       pixels^2
+FIELD Myy,     	 MOMENTS_YY,       float,    second moment XY,      pixels^2
+FIELD flags,  	 FLAGS,            int,      analysis flags
+FIELD nFrames, 	 N_FRAMES,         short,    images overlapping peak
+FIELD padding,   PADDING,	   short,    padding for 8byte records
+
+# for an object in an image, we have three triplets that tell us about the shape:
+# second moments: Mxx, Mxy, Myy 
+# model shape parameters: F_major, F_minor, F_theta
+# centroid errors: sigma_X, sigma_Y, sigma_XY
+
+# IPP_IDET         1J  IPP_IDET,     	   unsigned i
+# X_PSF       	 1E  X_PSF,    	   float,        
+# Y_PSF       	 1E  Y_PSF,    	   float,        
+# X_PSF_SIG   	 1E  X_PSF_SIG,    	   float,        
+# Y_PSF_SIG   	 1E  Y_PSF_SIG,    	   float,        
+# RA_PSF      	 1E  RA_PSF,    	   float,        
+# DEC_PSF     	 1E  DEC_PSF,    	   float,        
+# POSANGLE    	 1E  POSANGLE,    	   float,        
+# PLTSCALE    	 1E  PLTSCALE,    	   float,        
+# PSF_INST_MAG	 1E  PSF_INST_MAG,     float,          
+# PSF_INST_MAG_SIG 1E  PSF_INST_MAG_SIG, float,        
+# AP_MAG_STANDARD  1E  AP_MAG_STANDARD,  float,        
+# AP_MAG_RADIUS    1E      
+# PEAK_FLUX_AS_MAG 1E  PEAK_FLUX_AS_MAG, float,        
+# CAL_PSF_MAG      1E  CAL_PSF_MAG,      float,        
+# CAL_PSF_MAG_SIG  1E  CAL_PSF_MAG_SIG,  float,        
+# SKY              1E  SKY,              float,        
+# SKY_SIGMA        1E  SKY_SIG,          float,        
+# PSF_CHISQ        1E  PSF_CHISQ,        float,        
+# CR_NSIGMA        1E  CR_NSIGMA,        float,        
+# EXT_NSIGMA       1E  EXT_NSIGMA,       float,        
+# PSF_MAJOR        1E  PSF_MAJOR,        float,        
+# PSF_MINOR        1E  PSF_MINOR,        float,        
+# PSF_THETA        1E  PSF_THETA,        float,        
+# PSF_QF           1E  PSF_QF,           float,        
+# PSF_NDOF         1J  PSF_NDOF,         int,          
+# PSF_NPIX         1J  PSF_NPIX,         int,          
+# MOMENTS_XX       1E  MOMENTS_XX,       float,        
+# MOMENTS_XY       1E  MOMENTS_XY,       float,        
+# MOMENTS_YY       1E  MOMENTS_YY,       float,        
+# N_FRAMES         1I  N_FRAMES,         short,        
+# FLAGS            1J  FLAGS,            int,          
Index: trunk/Ohana/src/libdvo/Makefile
===================================================================
--- trunk/Ohana/src/libdvo/Makefile	(revision 24399)
+++ trunk/Ohana/src/libdvo/Makefile	(revision 24400)
@@ -69,5 +69,6 @@
 $(SRC)/skyregion_io.$(ARCH).o    \
 $(SRC)/skyregion_gsc.$(ARCH).o    \
-$(SRC)/skyregion_ops.$(ARCH).o
+$(SRC)/skyregion_ops.$(ARCH).o \
+$(SRC)/cmf-ps1-v1-alt.$(ARCH).o
 
 # $(SRC)/dvo_convert_panstarrs.$(ARCH).o \
Index: trunk/Ohana/src/libdvo/include/dvo.h
===================================================================
--- trunk/Ohana/src/libdvo/include/dvo.h	(revision 24399)
+++ trunk/Ohana/src/libdvo/include/dvo.h	(revision 24400)
@@ -184,4 +184,7 @@
   SkyRegion **regions;
 } SkyList;
+
+// special-case function:
+CMF_PS1_V2 *gfits_table_get_CMF_PS1_V1_Alt (FTable *ftable, int *Ndata, int *swapped);
 
 # if (0)
Index: trunk/Ohana/src/libdvo/src/cmf-ps1-v1-alt.c
===================================================================
--- trunk/Ohana/src/libdvo/src/cmf-ps1-v1-alt.c	(revision 24400)
+++ trunk/Ohana/src/libdvo/src/cmf-ps1-v1-alt.c	(revision 24400)
@@ -0,0 +1,126 @@
+# include "dvo.h"
+
+CMF_PS1_V2 *gfits_table_get_CMF_PS1_V1_Alt (FTable *ftable, int *Ndata, int *swapped) {
+
+  int i, nitems;
+  unsigned char *byte, *inbyte, *otbyte, tmp;
+  CMF_PS1_V2 *output;
+
+  /* provide initial values to avoid compiler warnings for non-BYTE_SWAP arch */
+  i = tmp = 0;
+  byte = NULL;
+
+  // this function is a special case : it must have Nx = 136
+  if (ftable[0].header[0].Naxis[0] != 136) { 
+    fprintf (stderr, "ERROR: wrong format for CMF_PS1_V1_Alt: %d vs %d\n", ftable[0].header[0].Naxis[0], 136);
+    exit (2);
+  }
+
+  *Ndata = ftable[0].header[0].Naxis[1];
+  nitems = ftable[0].header[0].Naxis[1];
+
+  if ((swapped == NULL) || (*swapped == FALSE)) {
+
+# ifdef BYTE_SWAP
+      // we need to do the byte swap before applying the table scaling:
+      byte = (unsigned char *) ftable[0].buffer;
+      for (i = 0; i < nitems; i++, byte += 136) {
+	  /** BYTE SWAP **/
+	  SWAP_WORD (0); // IPP_IDET
+	  SWAP_WORD (4); // X_PSF
+	  SWAP_WORD (8); // Y_PSF
+	  SWAP_WORD (12); // X_PSF_SIG
+	  SWAP_WORD (16); // Y_PSF_SIG
+	  SWAP_DBLE (20); // RA_PSF
+	  SWAP_DBLE (28); // DEC_PSF
+	  SWAP_WORD (36); // POSANGLE
+	  SWAP_WORD (40); // PLTSCALE
+	  SWAP_WORD (44); // PSF_INST_MAG
+	  SWAP_WORD (48); // PSF_INST_MAG_SIG
+	  SWAP_WORD (52); // AP_MAG_STANDARD
+	  SWAP_WORD (56); // AP_MAG_RADIUS
+	  SWAP_WORD (60); // PEAK_FLUX_AS_MAG
+	  SWAP_WORD (64); // CAL_PSF_MAG
+	  SWAP_WORD (68); // CAL_PSF_MAG_SIG
+	  SWAP_WORD (72); // SKY
+	  SWAP_WORD (76); // SKY_SIG
+	  SWAP_WORD (80); // PSF_CHISQ
+	  SWAP_WORD (84); // CR_NSIGMA
+	  SWAP_WORD (88); // EXT_NSIGMA
+	  SWAP_WORD (92); // PSF_MAJOR
+	  SWAP_WORD (96); // PSF_MINOR
+	  SWAP_WORD (100); // PSF_THETA
+	  SWAP_WORD (104); // PSF_QF
+	  SWAP_WORD (108); // PSF_NDOF
+	  SWAP_WORD (112); // PSF_NPIX
+	  SWAP_WORD (116); // MOMENTS_XX
+	  SWAP_WORD (120); // MOMENTS_XY
+	  SWAP_WORD (124); // MOMENTS_YY
+	  SWAP_WORD (128); // FLAGS
+	  SWAP_BYTE (132); // N_FRAMES
+	  SWAP_BYTE (134); // PADDING
+      }
+# endif  
+
+      gfits_table_scale_data (ftable);
+      if (swapped != NULL) *swapped = TRUE;
+  }
+
+  byte = (unsigned char *) ftable[0].buffer;
+
+  // allocate a new output data buffer
+  ALLOCATE (output, CMF_PS1_V2, nitems);
+  inbyte = (unsigned char *) byte;
+  otbyte = (unsigned char *) output;
+
+  // the data in the input table does not line up with the output structure: copy carefully.
+  for (i = 0; i < nitems; i++, inbyte += 136, otbyte += 136) {
+    memcpy (&otbyte[0],  &inbyte[0],  20);
+    memcpy (&otbyte[20], &inbyte[36], 36);
+    memcpy (&otbyte[56], &inbyte[20], 16);
+    memcpy (&otbyte[72], &inbyte[72], 62);
+  }
+
+  free (ftable[0].buffer);
+  ftable[0].buffer = output;
+
+  // XXX other mods to make ftable consistent with CMF_PS1_V2? (Nx, EXTNAME?)
+
+  return (output);
+} 
+
+// data organization (input vs output)
+//              FITS                       struct
+// WORD  0      IPP_IDET              0    IPP_IDET                
+// WORD  4      X_PSF                 4    X_PSF                   
+// WORD  8      Y_PSF                 8    Y_PSF                   
+// WORD  12     X_PSF_SIG             12   X_PSF_SIG               
+// WORD  16     Y_PSF_SIG             16   Y_PSF_SIG               
+// DBLE  20     RA_PSF                20   POSANGLE                
+// DBLE  28     DEC_PSF               24   PLTSCALE                
+// WORD  36     POSANGLE              28   PSF_INST_MAG            
+// WORD  40     PLTSCALE              32   PSF_INST_MAG_SIG        
+// WORD  44     PSF_INST_MAG          36   AP_MAG_STANDARD         
+// WORD  48     PSF_INST_MAG_SIG      40   AP_MAG_RADIUS           
+// WORD  52     AP_MAG_STANDARD       44   PEAK_FLUX_AS_MAG        
+// WORD  56     AP_MAG_RADIUS         48   CAL_PSF_MAG             
+// WORD  60     PEAK_FLUX_AS_MAG      52   CAL_PSF_MAG_SIG         
+// WORD  64     CAL_PSF_MAG           56   RA_PSF                  
+// WORD  68     CAL_PSF_MAG_SIG       64   DEC_PSF                 
+// WORD  72     SKY                   72   SKY                     
+// WORD  76     SKY_SIG               76   SKY_SIG                 
+// WORD  80     PSF_CHISQ             80   PSF_CHISQ               
+// WORD  84     CR_NSIGMA             84   CR_NSIGMA               
+// WORD  88     EXT_NSIGMA            88   EXT_NSIGMA              
+// WORD  92     PSF_MAJOR             92   PSF_MAJOR               
+// WORD  96     PSF_MINOR             96   PSF_MINOR               
+// WORD  100    PSF_THETA             100  PSF_THETA               
+// WORD  104    PSF_QF                104  PSF_QF                  
+// WORD  108    PSF_NDOF              108  PSF_NDOF                
+// WORD  112    PSF_NPIX              112  PSF_NPIX                
+// WORD  116    MOMENTS_XX            116  MOMENTS_XX              
+// WORD  120    MOMENTS_XY            120  MOMENTS_XY              
+// WORD  124    MOMENTS_YY            124  MOMENTS_YY              
+// WORD  128    FLAGS                 128  FLAGS                   
+// BYTE  132    N_FRAMES              132  N_FRAMES                
+// BYTE  134    PADDING               134  PADDING                 
