Index: trunk/Ohana/src/libdvo/doc/updates-psps.txt
===================================================================
--- trunk/Ohana/src/libdvo/doc/updates-psps.txt	(revision 34405)
+++ trunk/Ohana/src/libdvo/doc/updates-psps.txt	(revision 34405)
@@ -0,0 +1,17 @@
+
+2012.09.03 
+
+Things that we need to add to the DVO schema to support the desired PSPS stuff:
+
+* measure.psfQualPerfect (PSF_QF_PERFECT) [OK in ps1-v4]
+* average.stargal [add to ps1-v4, old average@ps1-v4 need to be read as average@ps1-v3]
+  (re-purpose average.Xp, which should be deprecated anyway)
+* error on kron radius : skipping this (is proportional to R1 / (S/N))
+
+Here is what I've done:
+* updated mksource.pl to handle the cmf series a bit more cleanly
+* added CMF_PS1_SV2 and CMF_PS1_DV3
+* added AP_FLUX and AP_FLUX_SIG to PS1_V4, PS1_SV2 formats
+* added RA_EXT, DEC_EXT, POSANGLE, PLTSCALE to PS1_DV3
+* PLTSCALE has parity +1 if image has sky parity, -1 for opposite parity
+
Index: trunk/Ohana/src/libdvo/include/dvo.h
===================================================================
--- trunk/Ohana/src/libdvo/include/dvo.h	(revision 34291)
+++ trunk/Ohana/src/libdvo/include/dvo.h	(revision 34405)
@@ -623,4 +623,5 @@
 int dvo_image_save_raw (FITS_DB *db, int VERBOSE);
 int dvo_image_addrows (FITS_DB *db, Image *new, off_t Nnew);
+int dvo_image_createID (Header *header);
 void dvo_image_create (FITS_DB *db, double ZeroPoint);
 
Index: trunk/Ohana/src/libdvo/src/dbExtractAverages.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dbExtractAverages.c	(revision 34291)
+++ trunk/Ohana/src/libdvo/src/dbExtractAverages.c	(revision 34405)
@@ -147,8 +147,4 @@
     case AVE_TRANGE:
       value.Flt = TimeValue (average[0].Trange, 0, TimeFormat);
-      break;
-
-    case AVE_Xp:
-      value.Flt = 0.01*average[0].Xp;
       break;
 
Index: trunk/Ohana/src/libdvo/src/dbExtractMeasures.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dbExtractMeasures.c	(revision 34291)
+++ trunk/Ohana/src/libdvo/src/dbExtractMeasures.c	(revision 34405)
@@ -303,4 +303,5 @@
     case MEAS_SECFILT_FLAGS: /* OK */
       equiv = GetPhotcodeEquivbyCode (measure[0].photcode);
+      if (!equiv) break;
       Nsec = GetPhotcodeNsec (equiv->code);
       if (Nsec == -1) break;
@@ -479,5 +480,5 @@
       break;
     case MEAS_PSF_QF: /* OK */
-      value.Flt = measure[0].psfQual;
+      value.Flt = measure[0].psfQF;
       break;
     case MEAS_PSF_QF_PERFECT: /* OK */
Index: trunk/Ohana/src/libdvo/src/dbFields.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dbFields.c	(revision 34291)
+++ trunk/Ohana/src/libdvo/src/dbFields.c	(revision 34405)
@@ -335,8 +335,4 @@
   if (!strcasecmp (fieldName, "EXTID_LO"))  ESCAPE (AVE_EXTID_LO,  MAG_NONE, OPIHI_INT);
 
-  // if (!strcasecmp (fieldName, "Xp"))      ESCAPE (AVE_Xp,        MAG_NONE, OPIHI_FLT);
-  // if (!strcasecmp (fieldName, "TYPE"))    ESCAPE (AVE_TYPE,      MAG_NONE, OPIHI_INT);
-  // for words that don't parse, try a photcode
-
   // check for code:mode in photcode name 
   code = ParsePhotcodeField (fieldName, &mode, MAG_AVE);
Index: trunk/Ohana/src/libdvo/src/dvo_catalog.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_catalog.c	(revision 34291)
+++ trunk/Ohana/src/libdvo/src/dvo_catalog.c	(revision 34405)
@@ -89,5 +89,5 @@
   average->Trange   	   = 0;
 
-  average->Xp        	   = 0;
+  average->stargal    	   = 0.0;
   average->Npos    	   = 0;
 
@@ -174,5 +174,5 @@
  measure->extID     = 0;
 
- measure->psfQual   = NAN;
+ measure->psfQF     = NAN;
  measure->psfChisq  = NAN;
  measure->psfNdof   = 0;
Index: trunk/Ohana/src/libdvo/src/dvo_convert_PS1_DEV_1.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_convert_PS1_DEV_1.c	(revision 34291)
+++ trunk/Ohana/src/libdvo/src/dvo_convert_PS1_DEV_1.c	(revision 34405)
@@ -27,5 +27,5 @@
     out[i].detID      = in[i].detID;
     out[i].imageID    = in[i].imageID;
-    out[i].psfQual    = in[i].psfQual;
+    out[i].psfQF      = in[i].psfQF;
     out[i].psfChisq   = in[i].psfChisq;
     out[i].crNsigma   = in[i].crNsigma;
@@ -65,4 +65,5 @@
     out[i].FluxKron   = NAN;
     out[i].dFluxKron  = NAN;
+    out[i].psfQFperf  = NAN;
   }
   return (out);
@@ -93,5 +94,5 @@
     out[i].detID      = in[i].detID;
     out[i].imageID    = in[i].imageID;
-    out[i].psfQual    = in[i].psfQual;
+    out[i].psfQF      = in[i].psfQF;
     out[i].psfChisq   = in[i].psfChisq;
     out[i].crNsigma   = in[i].crNsigma;
@@ -126,5 +127,4 @@
     out[i].R        	 = in[i].R;      
     out[i].D        	 = in[i].D;      
-    out[i].Xp       	 = in[i].Xp;     
     out[i].dR       	 = in[i].dR;
     out[i].dD       	 = in[i].dD;
@@ -159,4 +159,9 @@
     out[i].photFlagsUpper = 0;
     out[i].photFlagsLower = 0;
+
+    // added for PS1_V4 (Xp dropped in V4 onward, was not really used anyway)
+    out[i].psfQF         = NAN;
+    out[i].psfQFperf     = NAN;
+    out[i].stargal     	 = NAN;
   }
   return (out);
@@ -174,5 +179,4 @@
     out[i].R        	 = in[i].R;      
     out[i].D        	 = in[i].D;      
-    out[i].Xp       	 = in[i].Xp;     
     out[i].dR       	 = in[i].dR;
     out[i].dD       	 = in[i].dD;
Index: trunk/Ohana/src/libdvo/src/dvo_convert_PS1_DEV_2.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_convert_PS1_DEV_2.c	(revision 34291)
+++ trunk/Ohana/src/libdvo/src/dvo_convert_PS1_DEV_2.c	(revision 34405)
@@ -29,5 +29,5 @@
     out[i].detID      = in[i].detID;
     out[i].imageID    = in[i].imageID;
-    out[i].psfQual    = in[i].psfQual;
+    out[i].psfQF      = in[i].psfQF;
     out[i].psfChisq   = in[i].psfChisq;
     out[i].crNsigma   = in[i].crNsigma;
@@ -62,5 +62,6 @@
     out[i].FluxKron   = NAN;
     out[i].dFluxKron  = NAN;
-  }
+    out[i].psfQFperf  = NAN;
+ }
   return (out);
 }
@@ -92,5 +93,5 @@
     out[i].detID      = in[i].detID;
     out[i].imageID    = in[i].imageID;
-    out[i].psfQual    = in[i].psfQual;
+    out[i].psfQF      = in[i].psfQF;
     out[i].psfChisq   = in[i].psfChisq;
     out[i].crNsigma   = in[i].crNsigma;
@@ -130,5 +131,4 @@
     out[i].P        	 = in[i].P;
     out[i].dP       	 = in[i].dP;
-    out[i].Xp       	 = in[i].Xp;     
     out[i].Nmeasure      = in[i].Nmeasure;     
     out[i].Nmissing      = in[i].Nmissing;     
@@ -153,4 +153,9 @@
     out[i].photFlagsUpper = 0;
     out[i].photFlagsLower = 0;
+
+    // added for PS1_V4 (Xp dropped in V4 onward, was not really used anyway)
+    out[i].psfQF         = NAN;
+    out[i].psfQFperf     = NAN;
+    out[i].stargal     	 = NAN;
   }
   return (out);
@@ -176,5 +181,4 @@
     out[i].P        	 = in[i].P;
     out[i].dP       	 = in[i].dP;
-    out[i].Xp       	 = in[i].Xp;     
     out[i].Nmeasure      = in[i].Nmeasure;     
     out[i].Nmissing      = in[i].Nmissing;     
Index: trunk/Ohana/src/libdvo/src/dvo_convert_PS1_REF.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_convert_PS1_REF.c	(revision 34291)
+++ trunk/Ohana/src/libdvo/src/dvo_convert_PS1_REF.c	(revision 34405)
@@ -33,5 +33,5 @@
     out[i].catID      = in[i].catID;
     out[i].extID      = 0;
-    out[i].psfQual    = 1.0; // we do not save a value, but some operations (relphot/average) filter on this value..
+    out[i].psfQF      = 1.0; // we do not save a value, but some operations (relphot/average) filter on this value..
     out[i].psfChisq   = NAN;
     out[i].psfNdof    = 0;
@@ -60,4 +60,5 @@
     out[i].FluxKron   = NAN;
     out[i].dFluxKron  = NAN;
+    out[i].psfQFperf  = NAN;
   }
   return (out);
@@ -105,5 +106,4 @@
     out[i].P        	 = NAN;
     out[i].dP       	 = NAN;
-    out[i].Xp       	 = NAN_S_SHORT;
     out[i].ChiSqAve    	 = NAN;
     out[i].ChiSqPM    	 = NAN;
@@ -126,4 +126,9 @@
     out[i].photFlagsUpper = 0;
     out[i].photFlagsLower = 0;
+
+    // added for PS1_V4 (Xp dropped in V4 onward, was not really used anyway)
+    out[i].psfQF         = NAN;
+    out[i].psfQFperf     = NAN;
+    out[i].stargal     	 = NAN;
   }
   return (out);
Index: trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V1.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V1.c	(revision 34291)
+++ trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V1.c	(revision 34405)
@@ -33,5 +33,5 @@
     out[i].catID      = in[i].catID;
     out[i].extID      = in[i].extID;
-    out[i].psfQual    = in[i].psfQual;
+    out[i].psfQF      = in[i].psfQF;
     out[i].psfChisq   = in[i].psfChisq;
     out[i].psfNdof    = in[i].psfNdof;
@@ -60,4 +60,5 @@
     out[i].FluxKron   = NAN;
     out[i].dFluxKron  = NAN;
+    out[i].psfQFperf  = NAN;
   }
   return (out);
@@ -94,5 +95,5 @@
     out[i].catID      = in[i].catID;
     out[i].extID      = in[i].extID;
-    out[i].psfQual    = in[i].psfQual;
+    out[i].psfQF      = in[i].psfQF;
     out[i].psfChisq   = in[i].psfChisq;
     out[i].psfNdof    = in[i].psfNdof;
@@ -137,5 +138,4 @@
     out[i].P        	 = in[i].P;
     out[i].dP       	 = in[i].dP;
-    out[i].Xp       	 = in[i].Xp;     
     out[i].ChiSqAve    	 = in[i].ChiSq;     
     out[i].ChiSqPM    	 = NAN;
@@ -158,4 +158,9 @@
     out[i].photFlagsUpper = 0;
     out[i].photFlagsLower = 0;
+
+    // added for PS1_V4 (Xp dropped in V4 onward, was not really used anyway)
+    out[i].psfQF         = NAN;
+    out[i].psfQFperf     = NAN;
+    out[i].stargal     	 = NAN;
   }
   return (out);
@@ -181,5 +186,4 @@
     out[i].P        	 = in[i].P;
     out[i].dP       	 = in[i].dP;
-    out[i].Xp       	 = in[i].Xp;     
     out[i].ChiSq    	 = in[i].ChiSqAve;     
     out[i].Npos       	 = in[i].Npos;     
Index: trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V2.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V2.c	(revision 34291)
+++ trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V2.c	(revision 34405)
@@ -33,5 +33,5 @@
     out[i].catID      = in[i].catID;
     out[i].extID      = in[i].extID;
-    out[i].psfQual    = in[i].psfQual;
+    out[i].psfQF      = in[i].psfQF;
     out[i].psfChisq   = in[i].psfChisq;
     out[i].psfNdof    = in[i].psfNdof;
@@ -61,4 +61,5 @@
     out[i].FluxKron   = NAN;
     out[i].dFluxKron  = NAN;
+    out[i].psfQFperf  = NAN;
   }
   return (out);
@@ -95,5 +96,5 @@
     out[i].catID      = in[i].catID;
     out[i].extID      = in[i].extID;
-    out[i].psfQual    = in[i].psfQual;
+    out[i].psfQF      = in[i].psfQF;
     out[i].psfChisq   = in[i].psfChisq;
     out[i].psfNdof    = in[i].psfNdof;
@@ -138,5 +139,4 @@
     out[i].P        	 = in[i].P;
     out[i].dP       	 = in[i].dP;
-    out[i].Xp       	 = in[i].Xp;     
     out[i].ChiSqAve    	 = in[i].ChiSqAve;     
     out[i].ChiSqPM    	 = in[i].ChiSqPM;     
@@ -159,4 +159,9 @@
     out[i].photFlagsUpper = 0;
     out[i].photFlagsLower = 0;
+
+    // added for PS1_V4 (Xp dropped in V4 onward, was not really used anyway)
+    out[i].psfQF         = NAN;
+    out[i].psfQFperf     = NAN;
+    out[i].stargal     	 = NAN;
   }
   return (out);
@@ -182,5 +187,4 @@
     out[i].P        	 = in[i].P;
     out[i].dP       	 = in[i].dP;
-    out[i].Xp       	 = in[i].Xp;     
     out[i].ChiSqAve    	 = in[i].ChiSqAve;     
     out[i].ChiSqPM     	 = in[i].ChiSqPM;     
Index: trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V3.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V3.c	(revision 34291)
+++ trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V3.c	(revision 34405)
@@ -33,5 +33,5 @@
     out[i].catID      = in[i].catID;
     out[i].extID      = in[i].extID;
-    out[i].psfQual    = in[i].psfQual;
+    out[i].psfQF      = in[i].psfQF;
     out[i].psfChisq   = in[i].psfChisq;
     out[i].psfNdof    = in[i].psfNdof;
@@ -61,4 +61,5 @@
     out[i].FluxKron   = NAN;
     out[i].dFluxKron  = NAN;
+    out[i].psfQFperf  = NAN;
   }
   return (out);
@@ -95,5 +96,5 @@
     out[i].catID      = in[i].catID;
     out[i].extID      = in[i].extID;
-    out[i].psfQual    = in[i].psfQual;
+    out[i].psfQF      = in[i].psfQF;
     out[i].psfChisq   = in[i].psfChisq;
     out[i].psfNdof    = in[i].psfNdof;
@@ -138,5 +139,4 @@
     out[i].P        	 = in[i].P;
     out[i].dP       	 = in[i].dP;
-    out[i].Xp       	 = in[i].Xp;     
     out[i].ChiSqAve    	 = in[i].ChiSqAve;     
     out[i].ChiSqPM    	 = in[i].ChiSqPM;     
@@ -157,4 +157,9 @@
     out[i].catID 	 = in[i].catID;
     out[i].extID 	 = in[i].extID;
+
+    // added for PS1_V4 (Xp dropped in V4 onward, was not really used anyway)
+    out[i].psfQF         = NAN;
+    out[i].psfQFperf     = NAN;
+    out[i].stargal     	 = NAN;
   }
   return (out);
@@ -180,5 +185,4 @@
     out[i].P        	 = in[i].P;
     out[i].dP       	 = in[i].dP;
-    out[i].Xp       	 = in[i].Xp;     
     out[i].ChiSqAve    	 = in[i].ChiSqAve;     
     out[i].ChiSqPM     	 = in[i].ChiSqPM;     
Index: trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V4.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V4.c	(revision 34291)
+++ trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V4.c	(revision 34405)
@@ -39,5 +39,6 @@
     out[i].catID      = in[i].catID;
     out[i].extID      = in[i].extID;
-    out[i].psfQual    = in[i].psfQual;
+    out[i].psfQF      = in[i].psfQF;
+    out[i].psfQFperf  = in[i].psfQFperf;
     out[i].psfChisq   = in[i].psfChisq;
     out[i].psfNdof    = in[i].psfNdof;
@@ -99,5 +100,6 @@
     out[i].catID      = in[i].catID;
     out[i].extID      = in[i].extID;
-    out[i].psfQual    = in[i].psfQual;
+    out[i].psfQF      = in[i].psfQF;
+    out[i].psfQFperf  = in[i].psfQFperf;
     out[i].psfChisq   = in[i].psfChisq;
     out[i].psfNdof    = in[i].psfNdof;
@@ -142,5 +144,7 @@
     out[i].P        	 = in[i].P;
     out[i].dP       	 = in[i].dP;
-    out[i].Xp       	 = in[i].Xp;     
+    out[i].psfQF         = in[i].psfQF;
+    out[i].psfQFperf     = in[i].psfQFperf;
+    out[i].stargal     	 = in[i].stargal;     
     out[i].ChiSqAve    	 = in[i].ChiSqAve;     
     out[i].ChiSqPM    	 = in[i].ChiSqPM;     
@@ -184,5 +188,7 @@
     out[i].P        	 = in[i].P;
     out[i].dP       	 = in[i].dP;
-    out[i].Xp       	 = in[i].Xp;     
+    out[i].psfQF         = in[i].psfQF;
+    out[i].psfQFperf     = in[i].psfQFperf;
+    out[i].stargal     	 = in[i].stargal;     
     out[i].ChiSqAve    	 = in[i].ChiSqAve;     
     out[i].ChiSqPM     	 = in[i].ChiSqPM;     
Index: trunk/Ohana/src/libdvo/src/dvo_convert_elixir.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_convert_elixir.c	(revision 34291)
+++ trunk/Ohana/src/libdvo/src/dvo_convert_elixir.c	(revision 34405)
@@ -35,5 +35,5 @@
     out[i].Sky       = 0;
     out[i].dSky      = 0;
-    out[i].psfQual   = 0;
+    out[i].psfQF     = 0;
     out[i].psfChisq  = 0;
     out[i].crNsigma  = 0;
@@ -72,4 +72,5 @@
     out[i].FluxKron   = NAN;
     out[i].dFluxKron  = NAN;
+    out[i].psfQFperf  = NAN;
   }
   return (out);
@@ -127,5 +128,4 @@
     out[i].R       	 = in[i].R;      
     out[i].D       	 = in[i].D;      
-    out[i].Xp      	 = in[i].Xp;     
 
     // changed for PANSTARRS_DEV_0 (moved from Average to Measure)
@@ -170,4 +170,9 @@
     out[i].photFlagsUpper = 0;
     out[i].photFlagsLower = 0;
+
+    // added for PS1_V4 (Xp dropped in V4 onward, was not really used anyway)
+    out[i].psfQF         = NAN;
+    out[i].psfQFperf     = NAN;
+    out[i].stargal     	 = NAN;
   }
   return (out);
@@ -185,5 +190,4 @@
     out[i].R       = in[i].R;      
     out[i].D       = in[i].D;      
-    out[i].Xp      = in[i].Xp;     
 
     // changed for PANSTARRS_DEV_0 (moved from Average to Measure)
Index: trunk/Ohana/src/libdvo/src/dvo_convert_loneos.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_convert_loneos.c	(revision 34291)
+++ trunk/Ohana/src/libdvo/src/dvo_convert_loneos.c	(revision 34405)
@@ -39,5 +39,5 @@
     out[i].Sky       = 0;
     out[i].dSky      = 0;
-    out[i].psfQual   = 0;
+    out[i].psfQF     = 0;
     out[i].psfChisq  = 0;
     out[i].crNsigma  = 0;
@@ -74,4 +74,5 @@
     out[i].FluxKron   = NAN;
     out[i].dFluxKron  = NAN;
+    out[i].psfQFperf  = NAN;
   }
   return (out);
@@ -118,5 +119,4 @@
     out[i].R       	 = in[i].R;      
     out[i].D       	 = in[i].D;      
-    out[i].Xp      	 = in[i].Xp;     
 
     // added for ELIXIR
@@ -162,4 +162,9 @@
     out[i].photFlagsUpper = 0;
     out[i].photFlagsLower = 0;
+
+    // added for PS1_V4 (Xp dropped in V4 onward, was not really used anyway)
+    out[i].psfQF         = NAN;
+    out[i].psfQFperf     = NAN;
+    out[i].stargal     	 = NAN;
   }
   return (out);
@@ -177,5 +182,4 @@
     out[i].R       = in[i].R;      
     out[i].D       = in[i].D;      
-    out[i].Xp      = in[i].Xp;     
 
     // changed for PANSTARRS_DEV_0 (moved from Average to Measure)
Index: trunk/Ohana/src/libdvo/src/dvo_convert_panstarrs_DEV_0.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_convert_panstarrs_DEV_0.c	(revision 34291)
+++ trunk/Ohana/src/libdvo/src/dvo_convert_panstarrs_DEV_0.c	(revision 34405)
@@ -36,5 +36,5 @@
 
     // changed or added for PS1_DEV_1 (2008.02.26)
-    out[i].psfQual    = (in[i].psfQual == NAN_S_SHORT) ? NAN : in[i].psfQual;
+    out[i].psfQF      = (in[i].psfQF == NAN_S_SHORT) ? NAN : in[i].psfQF;
     out[i].dbFlags    = in[i].flags;
     out[i].detID      = in[i].detID_lo;
@@ -65,8 +65,9 @@
     out[i].Mkron      = NAN;
     out[i].dMkron     = NAN;
-    out[i].FluxPSF     = NAN;
-    out[i].dFluxPSF    = NAN;
-    out[i].FluxKron    = NAN;
-    out[i].dFluxKron   = NAN;
+    out[i].FluxPSF    = NAN;
+    out[i].dFluxPSF   = NAN;
+    out[i].FluxKron   = NAN;
+    out[i].dFluxKron  = NAN;
+    out[i].psfQFperf  = NAN;
   }
   return (out);
@@ -105,5 +106,5 @@
     // changed or added for PS1_DEV_1 (2008.02.26)
     out[i].flags      = in[i].dbFlags;
-    out[i].psfQual    = isnan(in[i].psfQual) ? NAN_S_SHORT : in[i].psfQual;
+    out[i].psfQF      = isnan(in[i].psfQF) ? NAN_S_SHORT : in[i].psfQF;
     out[i].detID_hi   = 0;
     out[i].detID_lo   = in[i].detID;
@@ -133,5 +134,4 @@
     out[i].R        	 = in[i].R;      
     out[i].D        	 = in[i].D;      
-    out[i].Xp       	 = in[i].Xp;     
     out[i].dR       	 = in[i].dR;
     out[i].dD       	 = in[i].dD;
@@ -166,4 +166,9 @@
     out[i].photFlagsUpper = 0;
     out[i].photFlagsLower = 0;
+
+    // added for PS1_V4 (Xp dropped in V4 onward, was not really used anyway)
+    out[i].psfQF         = NAN;
+    out[i].psfQFperf     = NAN;
+    out[i].stargal     	 = NAN;
   }
   return (out);
@@ -182,5 +187,4 @@
     out[i].R        = in[i].R;      
     out[i].D        = in[i].D;      
-    out[i].Xp       = in[i].Xp;     
     out[i].dR       = in[i].dR;
     out[i].dD       = in[i].dD;
Index: trunk/Ohana/src/libdvo/src/dvo_convert_panstarrs_DEV_1.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_convert_panstarrs_DEV_1.c	(revision 34291)
+++ trunk/Ohana/src/libdvo/src/dvo_convert_panstarrs_DEV_1.c	(revision 34405)
@@ -36,5 +36,5 @@
 
     // changed or added for PS1_DEV_1 (2008.02.26)
-    out[i].psfQual    = (in[i].psfQual == NAN_S_SHORT) ? NAN : in[i].psfQual;
+    out[i].psfQF      = (in[i].psfQF == NAN_S_SHORT) ? NAN : in[i].psfQF;
     out[i].dbFlags    = in[i].flags;
     out[i].detID      = in[i].detID_lo;
@@ -65,8 +65,9 @@
     out[i].Mkron      = NAN;
     out[i].dMkron     = NAN;
-    out[i].FluxPSF     = NAN;
-    out[i].dFluxPSF    = NAN;
-    out[i].FluxKron    = NAN;
-    out[i].dFluxKron   = NAN;
+    out[i].FluxPSF    = NAN;
+    out[i].dFluxPSF   = NAN;
+    out[i].FluxKron   = NAN;
+    out[i].dFluxKron  = NAN;
+    out[i].psfQFperf  = NAN;
   }
   return (out);
@@ -105,5 +106,5 @@
     // changed or added for PS1_DEV_1 (2008.02.26)
     out[i].flags      = in[i].dbFlags;
-    out[i].psfQual    = isnan(in[i].psfQual) ? NAN_S_SHORT : in[i].psfQual;
+    out[i].psfQF      = isnan(in[i].psfQF) ? NAN_S_SHORT : in[i].psfQF;
     out[i].detID_hi   = 0;
     out[i].detID_lo   = in[i].detID;
@@ -133,5 +134,4 @@
     out[i].R        	 = in[i].R;      
     out[i].D        	 = in[i].D;      
-    out[i].Xp       	 = in[i].Xp;     
     out[i].dR       	 = in[i].dR;
     out[i].dD       	 = in[i].dD;
@@ -166,4 +166,9 @@
     out[i].photFlagsUpper = 0;
     out[i].photFlagsLower = 0;
+
+    // added for PS1_V4 (Xp dropped in V4 onward, was not really used anyway)
+    out[i].psfQF         = NAN;
+    out[i].psfQFperf     = NAN;
+    out[i].stargal     	 = NAN;
   }
   return (out);
@@ -182,5 +187,4 @@
     out[i].R        = in[i].R;      
     out[i].D        = in[i].D;      
-    out[i].Xp       = in[i].Xp;     
     out[i].dR       = in[i].dR;
     out[i].dD       = in[i].dD;
Index: trunk/Ohana/src/libdvo/src/dvo_image.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_image.c	(revision 34291)
+++ trunk/Ohana/src/libdvo/src/dvo_image.c	(revision 34405)
@@ -200,4 +200,6 @@
   gfits_modify (&db[0].header, "NIMAGES", "%d", 1, 0);
   gfits_modify (&db[0].header, "ZERO_PT", "%lf", 1, ZeroPoint);
+  
+  dvo_image_createID (&db[0].header);
 
   if (db[0].format == DVO_FORMAT_INTERNAL)  	  gfits_modify (&db[0].header, "FORMAT", "%s", 1, "INTERNAL");
@@ -217,2 +219,45 @@
   return;
 }
+
+// given a dvo image db, add an ID to the header
+int dvo_image_createID (Header *header) {
+  
+  char dbID[33];
+
+  if (!header->buffer) return FALSE;
+
+  int status = gfits_scan (header, "DVO_DBID", "%s", 1, dbID);      
+  if (status) {
+    // do not add a DVO_DBID to a table which already has one
+    return TRUE;
+  }
+
+  // I have a header, I want to add ONE line.  double check there is enough space
+  char *p = gfits_header_field (header, "END", 1);
+  if (p == NULL) {
+    fprintf (stderr, "header is missing END\n");
+    return FALSE;
+  }
+  if (p - header->buffer + 80 == header->datasize) {
+    fprintf (stderr, "no free space in block, can't insert keyword\n");
+    return FALSE;
+  }
+
+  int start_size = header->datasize;
+
+  long A = time(NULL);
+  srand48(A);
+  
+  int i;
+  for (i = 0; i < 32; i++) {
+    sprintf (&dbID[i], "%1x", (int)(16.0*drand48()));
+  }
+
+  gfits_modify (header, "DVO_DBID", "%s", 1, dbID);      
+  if (start_size != header->datasize) {
+    fprintf (stderr, "error: header buffer grew? (%d to %d bytes)\n", (int) start_size, (int) header->datasize);
+    return FALSE;
+  }
+  return TRUE;
+}
+
