Index: trunk/Ohana/src/addstar/src/ReadStarsFITS.c
===================================================================
--- trunk/Ohana/src/addstar/src/ReadStarsFITS.c	(revision 37967)
+++ trunk/Ohana/src/addstar/src/ReadStarsFITS.c	(revision 37992)
@@ -4,23 +4,24 @@
 // (excluding SDSS data and reference database info, such as 2MASS)
 // NOTE: these must also be listed in MatchHeaders.c (line ~ 62)
-Stars     *Convert_SMPDATA	  PROTO((FTable *table, unsigned int *nstars));
-Stars     *Convert_PS1_DEV_0	  PROTO((FTable *table, unsigned int *nstars));
-Stars     *Convert_PS1_DEV_1	  PROTO((FTable *table, unsigned int *nstars));
-Stars     *Convert_PS1_V1	  PROTO((FTable *table, unsigned int *nstars));
-Stars     *Convert_PS1_V1_Alt	  PROTO((FTable *table, unsigned int *nstars));
-Stars     *Convert_PS1_V2	  PROTO((FTable *table, unsigned int *nstars));
-Stars     *Convert_PS1_V3	  PROTO((FTable *table, unsigned int *nstars));
-Stars     *Convert_PS1_V4	  PROTO((FTable *table, unsigned int *nstars));
-Stars     *Convert_PS1_V5	  PROTO((FTable *table, unsigned int *nstars));
-Stars     *Convert_PS1_V5_Lensing PROTO((FTable *table, unsigned int *nstars));
-Stars     *Convert_PS1_V5_Lensing_Alt PROTO((FTable *table, unsigned int *nstars));
-Stars     *Convert_PS1_SV1	  PROTO((FTable *table, unsigned int *nstars));
-Stars     *Convert_PS1_SV1_Alt	  PROTO((FTable *table, unsigned int *nstars));
-Stars     *Convert_PS1_SV2	  PROTO((FTable *table, unsigned int *nstars));
-Stars     *Convert_PS1_SV3	  PROTO((FTable *table, unsigned int *nstars));
-Stars     *Convert_PS1_SV4	  PROTO((FTable *table, unsigned int *nstars));
-Stars     *Convert_PS1_DV3        PROTO((FTable *table, unsigned int *nstars));
-Stars     *Convert_PS1_DV4        PROTO((FTable *table, unsigned int *nstars));
-Stars     *Convert_PS1_DV5        PROTO((FTable *table, unsigned int *nstars));
+Stars     *Convert_SMPDATA	     PROTO((FTable *table, unsigned int *nstars));
+Stars     *Convert_PS1_DEV_0	     PROTO((FTable *table, unsigned int *nstars));
+Stars     *Convert_PS1_DEV_1	     PROTO((FTable *table, unsigned int *nstars));
+Stars     *Convert_PS1_V1	     PROTO((FTable *table, unsigned int *nstars));
+Stars     *Convert_PS1_V1_Alt	     PROTO((FTable *table, unsigned int *nstars));
+Stars     *Convert_PS1_V2	     PROTO((FTable *table, unsigned int *nstars));
+Stars     *Convert_PS1_V3	     PROTO((FTable *table, unsigned int *nstars));
+Stars     *Convert_PS1_V4	     PROTO((FTable *table, unsigned int *nstars));
+Stars     *Convert_PS1_V5	     PROTO((FTable *table, unsigned int *nstars));
+Stars     *Convert_PS1_V5_R0_Lensing PROTO((FTable *table, unsigned int *nstars));
+Stars     *Convert_PS1_V5_R1_Lensing PROTO((FTable *table, unsigned int *nstars));
+Stars     *Convert_PS1_V5_R2_Lensing PROTO((FTable *table, unsigned int *nstars));
+Stars     *Convert_PS1_SV1	     PROTO((FTable *table, unsigned int *nstars));
+Stars     *Convert_PS1_SV1_Alt	     PROTO((FTable *table, unsigned int *nstars));
+Stars     *Convert_PS1_SV2	     PROTO((FTable *table, unsigned int *nstars));
+Stars     *Convert_PS1_SV3	     PROTO((FTable *table, unsigned int *nstars));
+Stars     *Convert_PS1_SV4	     PROTO((FTable *table, unsigned int *nstars));
+Stars     *Convert_PS1_DV3           PROTO((FTable *table, unsigned int *nstars));
+Stars     *Convert_PS1_DV4           PROTO((FTable *table, unsigned int *nstars));
+Stars     *Convert_PS1_DV5           PROTO((FTable *table, unsigned int *nstars));
 
 // given a file with the pointer at the start of the table block and the 
@@ -86,8 +87,11 @@
 	break;
       case 312:
-	stars = Convert_PS1_V5_Lensing_Alt (&table, &Nstars);
+	stars = Convert_PS1_V5_R0_Lensing (&table, &Nstars);
 	break;
       case 320:
-	stars = Convert_PS1_V5_Lensing (&table, &Nstars);
+	stars = Convert_PS1_V5_R1_Lensing (&table, &Nstars);
+	break;
+      case 328:
+	stars = Convert_PS1_V5_R2_Lensing (&table, &Nstars);
 	break;
       default:
@@ -864,5 +868,5 @@
 }
 
-Stars *Convert_PS1_V5_Lensing (FTable *table, unsigned int *nstars) {
+Stars *Convert_PS1_V5_R0_Lensing (FTable *table, unsigned int *nstars) {
 
   off_t Nstars; 
@@ -870,7 +874,7 @@
   double ZeroPt;
   Stars *stars;
-  CMF_PS1_V5_Lensing *ps1data;
-
-  ps1data = gfits_table_get_CMF_PS1_V5_Lensing (table, &Nstars, NULL);
+  CMF_PS1_V5_R0_Lensing *ps1data;
+
+  ps1data = gfits_table_get_CMF_PS1_V5_R0_Lensing (table, &Nstars, NULL);
   if (!ps1data) {
     fprintf (stderr, "skipping inconsistent entry\n");
@@ -989,5 +993,5 @@
 }
 
-Stars *Convert_PS1_V5_Lensing_Alt (FTable *table, unsigned int *nstars) {
+Stars *Convert_PS1_V5_R1_Lensing (FTable *table, unsigned int *nstars) {
 
   off_t Nstars; 
@@ -995,7 +999,7 @@
   double ZeroPt;
   Stars *stars;
-  CMF_PS1_V5_Lensing_Alt *ps1data;
-
-  ps1data = gfits_table_get_CMF_PS1_V5_Lensing_Alt (table, &Nstars, NULL);
+  CMF_PS1_V5_R1_Lensing *ps1data;
+
+  ps1data = gfits_table_get_CMF_PS1_V5_R1_Lensing (table, &Nstars, NULL);
   if (!ps1data) {
     fprintf (stderr, "skipping inconsistent entry\n");
@@ -1114,5 +1118,5 @@
 }
 
-Stars *Convert_PS1_SV1 (FTable *table, unsigned int *nstars) {
+Stars *Convert_PS1_V5_R2_Lensing (FTable *table, unsigned int *nstars) {
 
   off_t Nstars; 
@@ -1120,12 +1124,7 @@
   double ZeroPt;
   Stars *stars;
-  CMF_PS1_SV1 *ps1data;
-
-  if (table[0].header[0].Naxis[0] == 196) {
-    stars = Convert_PS1_SV1_Alt (table, nstars);
-    return (stars);
-  }
-
-  ps1data = gfits_table_get_CMF_PS1_SV1 (table, &Nstars, NULL);
+  CMF_PS1_V5_R2_Lensing *ps1data;
+
+  ps1data = gfits_table_get_CMF_PS1_V5_R2_Lensing (table, &Nstars, NULL);
   if (!ps1data) {
     fprintf (stderr, "skipping inconsistent entry\n");
@@ -1153,4 +1152,134 @@
     stars[i].measure.dMcal      = ps1data[i].dMcal;
     stars[i].measure.Map        = ps1data[i].Map + ZeroPt;
+    stars[i].measure.dMap       = (ps1data[i].apFlux > 0.0) ? fabs(ps1data[i].apFluxErr / ps1data[i].apFlux) : NAN;
+                        
+    stars[i].measure.Mkron      = (ps1data[i].kronFlux > 0.0) ? -2.5*log10(ps1data[i].kronFlux) + ZeroPt : NAN;
+    stars[i].measure.dMkron     = (ps1data[i].kronFlux > 0.0) ? ps1data[i].kronFluxErr / ps1data[i].kronFlux : NAN;
+                        
+    // these fluxes are converted from counts to counts/sec in FilterStars.c
+    stars[i].measure.FluxPSF    = GetFluxFromFluxOrMag (ps1data[i].Flux, ps1data[i].M); 
+    stars[i].measure.dFluxPSF   = GetFluxErrFromFluxOrMag (ps1data[i].dFlux, stars[i].measure.FluxPSF, ps1data[i].dM);
+    stars[i].measure.FluxKron   = ps1data[i].kronFlux;
+    stars[i].measure.dFluxKron  = ps1data[i].kronFluxErr;
+    stars[i].measure.FluxAp     = GetFluxFromFluxOrMag (ps1data[i].apFlux, ps1data[i].Map); 
+    stars[i].measure.dFluxAp    = GetFluxErrFromFluxOrMag (ps1data[i].apFluxErr, stars[i].measure.FluxAp, stars[i].measure.dMap);
+
+    stars[i].measure.Sky        = ps1data[i].sky;
+    stars[i].measure.dSky       = ps1data[i].dSky;
+                        
+    stars[i].measure.psfChisq   = ps1data[i].psfChisq;
+    stars[i].measure.psfQF      = ps1data[i].psfQF;
+    stars[i].measure.psfQFperf  = ps1data[i].psfQFperf;
+
+    stars[i].measure.psfNdof    = ps1data[i].psfNdof;
+    stars[i].measure.psfNpix    = ps1data[i].psfNpix;
+    stars[i].measure.extNsigma  = ps1data[i].extNsigma;
+
+    stars[i].measure.FWx        = ToShortPixels(ps1data[i].fx);
+    stars[i].measure.FWy        = ToShortPixels(ps1data[i].fy);
+    stars[i].measure.theta      = ToShortDegrees(ps1data[i].df);
+
+    stars[i].measure.Mxx        = ToShortPixels(ps1data[i].Mxx);
+    stars[i].measure.Mxy        = ToShortPixels(ps1data[i].Mxy);
+    stars[i].measure.Myy        = ToShortPixels(ps1data[i].Myy);
+                        
+    stars[i].measure.photFlags  = ps1data[i].flags;
+    stars[i].measure.photFlags2 = ps1data[i].flags2;
+
+    // this is may optionally be replaced by the internal sequence (see FilterStars.c)
+    stars[i].measure.detID      = ps1data[i].detID; 
+
+    ALLOCATE (stars[i].lensing, Lensing, 1);
+    dvo_lensing_init (stars[i].lensing);
+
+    stars[i].lensing->X11_sm_obj  = ps1data[i].X11_sm_obj;
+    stars[i].lensing->X12_sm_obj  = ps1data[i].X12_sm_obj;
+    stars[i].lensing->X22_sm_obj  = ps1data[i].X22_sm_obj;
+    stars[i].lensing->E1_sm_obj   = ps1data[i].E1_sm_obj;
+    stars[i].lensing->E2_sm_obj   = ps1data[i].E2_sm_obj;
+
+    stars[i].lensing->X11_sh_obj  = ps1data[i].X11_sh_obj;
+    stars[i].lensing->X12_sh_obj  = ps1data[i].X12_sh_obj;
+    stars[i].lensing->X22_sh_obj  = ps1data[i].X22_sh_obj;
+    stars[i].lensing->E1_sh_obj   = ps1data[i].E1_sh_obj;
+    stars[i].lensing->E2_sh_obj   = ps1data[i].E2_sh_obj;
+
+    stars[i].lensing->X11_sm_psf  = ps1data[i].X11_sm_psf;
+    stars[i].lensing->X12_sm_psf  = ps1data[i].X12_sm_psf;
+    stars[i].lensing->X22_sm_psf  = ps1data[i].X22_sm_psf;
+    stars[i].lensing->E1_sm_psf   = ps1data[i].E1_sm_psf;
+    stars[i].lensing->E2_sm_psf   = ps1data[i].E2_sm_psf;
+
+    stars[i].lensing->X11_sh_psf  = ps1data[i].X11_sh_psf;
+    stars[i].lensing->X12_sh_psf  = ps1data[i].X12_sh_psf;
+    stars[i].lensing->X22_sh_psf  = ps1data[i].X22_sh_psf;
+    stars[i].lensing->E1_sh_psf   = ps1data[i].E1_sh_psf;
+    stars[i].lensing->E2_sh_psf   = ps1data[i].E2_sh_psf;
+
+    // stars[i].lensing->F_ApR5    = ps1data[i].F_ApR5;
+    // stars[i].lensing->dF_ApR5   = ps1data[i].dF_ApR5;
+    // stars[i].lensing->sF_ApR5   = ps1data[i].sF_ApR5;
+    // stars[i].lensing->fF_ApR5   = ps1data[i].fF_ApR5;
+    // 
+    // stars[i].lensing->F_ApR6    = ps1data[i].F_ApR6;
+    // stars[i].lensing->dF_ApR6   = ps1data[i].dF_ApR6;
+    // stars[i].lensing->sF_ApR6   = ps1data[i].sF_ApR6;
+    // stars[i].lensing->fF_ApR6   = ps1data[i].fF_ApR6;
+
+    // this is may optionally be replaced by the internal sequence (see FilterStars.c)
+    stars[i].lensing->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_SV1 (FTable *table, unsigned int *nstars) {
+
+  off_t Nstars; 
+  unsigned int i;
+  double ZeroPt;
+  Stars *stars;
+  CMF_PS1_SV1 *ps1data;
+
+  if (table[0].header[0].Naxis[0] == 196) {
+    stars = Convert_PS1_SV1_Alt (table, nstars);
+    return (stars);
+  }
+
+  ps1data = gfits_table_get_CMF_PS1_SV1 (table, &Nstars, NULL);
+  if (!ps1data) {
+    fprintf (stderr, "skipping inconsistent entry\n");
+    return (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      = ToShortPixels(ps1data[i].dX);
+    stars[i].measure.dYccd      = ToShortPixels(ps1data[i].dY);
+
+    stars[i].measure.posangle   = ToShortDegrees(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.dMap       = ps1data[i].dM; // a proxy measure
                         
