Index: /branches/eam_branches/ipp-20121219/Ohana/src/libautocode/def/measure-ps1-v4.d
===================================================================
--- /branches/eam_branches/ipp-20121219/Ohana/src/libautocode/def/measure-ps1-v4.d	(revision 34895)
+++ /branches/eam_branches/ipp-20121219/Ohana/src/libautocode/def/measure-ps1-v4.d	(revision 34896)
@@ -27,9 +27,9 @@
 
 # new field elements needed for Pan-STARRS:
-FIELD Xccd,           X_CCD,        float,          X coord on chip,               pixels
-FIELD Yccd,           Y_CCD,        float,          Y coord on chip,               pixels
+FIELD Xccd,           X_CCD,        float,          X coord on chip (raw value),  pixels
+FIELD Yccd,           Y_CCD,        float,          Y coord on chip (raw value),  pixels
 
-FIELD Xraw,           X_RAW,        float,          X coord before correction,     pixels
-FIELD Yraw,           Y_RAW,        float,          Y coord before correction,     pixels
+FIELD Xfix,           X_FIX,        float,          X coord after correction,     pixels
+FIELD Yfix,           Y_FIX,        float,          Y coord after correction,     pixels
 
 # could these be packed into fewer bits?
Index: /branches/eam_branches/ipp-20121219/Ohana/src/libautocode/def/measure.d
===================================================================
--- /branches/eam_branches/ipp-20121219/Ohana/src/libautocode/def/measure.d	(revision 34895)
+++ /branches/eam_branches/ipp-20121219/Ohana/src/libautocode/def/measure.d	(revision 34896)
@@ -27,9 +27,9 @@
 
 # new field elements needed for Pan-STARRS:
-FIELD Xccd,           X_CCD,        float,          X coord on chip,                pixels
-FIELD Yccd,           Y_CCD,        float,          Y coord on chip,                pixels
+FIELD Xccd,           X_CCD,        float,          X coord on chip (raw value),  pixels
+FIELD Yccd,           Y_CCD,        float,          Y coord on chip (raw value),  pixels
 
-FIELD Xraw,           X_RAW,        float,          X coord before correction,     pixels
-FIELD Yraw,           Y_RAW,        float,          Y coord before correction,     pixels
+FIELD Xfix,           X_FIX,        float,          X coord after correction,     pixels
+FIELD Yfix,           Y_FIX,        float,          Y coord after correction,     pixels
 
 # could these be packed into fewer bits?
Index: /branches/eam_branches/ipp-20121219/Ohana/src/libdvo/include/dvodb.h
===================================================================
--- /branches/eam_branches/ipp-20121219/Ohana/src/libdvo/include/dvodb.h	(revision 34895)
+++ /branches/eam_branches/ipp-20121219/Ohana/src/libdvo/include/dvodb.h	(revision 34896)
@@ -122,6 +122,6 @@
       MEAS_XCCD_ERR, 
       MEAS_YCCD_ERR, 
-      MEAS_XRAW, 
-      MEAS_YRAW, 
+      MEAS_XFIX, 
+      MEAS_YFIX, 
       MEAS_POS_SYS_ERR, 
       MEAS_XMOSAIC, 
Index: /branches/eam_branches/ipp-20121219/Ohana/src/libdvo/src/dbExtractMeasures.c
===================================================================
--- /branches/eam_branches/ipp-20121219/Ohana/src/libdvo/src/dbExtractMeasures.c	(revision 34895)
+++ /branches/eam_branches/ipp-20121219/Ohana/src/libdvo/src/dbExtractMeasures.c	(revision 34896)
@@ -443,9 +443,9 @@
 # endif
       break;
-    case MEAS_XRAW: /* OK */
-      value.Flt = measure[0].Xraw;
-      break;
-    case MEAS_YRAW: /* OK */
-      value.Flt = measure[0].Yraw;
+    case MEAS_XFIX: /* OK */
+      value.Flt = measure[0].Xfix;
+      break;
+    case MEAS_YFIX: /* OK */
+      value.Flt = measure[0].Yfix;
       break;
     case MEAS_XCCD_ERR: /* OK */
Index: /branches/eam_branches/ipp-20121219/Ohana/src/libdvo/src/dbFields.c
===================================================================
--- /branches/eam_branches/ipp-20121219/Ohana/src/libdvo/src/dbFields.c	(revision 34895)
+++ /branches/eam_branches/ipp-20121219/Ohana/src/libdvo/src/dbFields.c	(revision 34896)
@@ -217,6 +217,6 @@
   if (!strcasecmp (fieldName, "XCCD:ERR"))   	 ESCAPE (MEAS_XCCD_ERR,       MAG_NONE, OPIHI_FLT);
   if (!strcasecmp (fieldName, "YCCD:ERR"))   	 ESCAPE (MEAS_YCCD_ERR,       MAG_NONE, OPIHI_FLT);
-  if (!strcasecmp (fieldName, "XRAW"))       	 ESCAPE (MEAS_XRAW,           MAG_NONE, OPIHI_FLT);
-  if (!strcasecmp (fieldName, "YRAW"))       	 ESCAPE (MEAS_YRAW,           MAG_NONE, OPIHI_FLT);
+  if (!strcasecmp (fieldName, "XFIX"))       	 ESCAPE (MEAS_XFIX,           MAG_NONE, OPIHI_FLT);
+  if (!strcasecmp (fieldName, "YFIX"))       	 ESCAPE (MEAS_YFIX,           MAG_NONE, OPIHI_FLT);
   if (!strcasecmp (fieldName, "POS_SYS_ERR"))    ESCAPE (MEAS_POS_SYS_ERR,    MAG_NONE, OPIHI_FLT);
   if (!strcasecmp (fieldName, "XMOSAIC"))    	 ESCAPE (MEAS_XMOSAIC,        MAG_NONE, OPIHI_FLT);
Index: /branches/eam_branches/ipp-20121219/Ohana/src/libdvo/src/dvo_catalog.c
===================================================================
--- /branches/eam_branches/ipp-20121219/Ohana/src/libdvo/src/dvo_catalog.c	(revision 34895)
+++ /branches/eam_branches/ipp-20121219/Ohana/src/libdvo/src/dvo_catalog.c	(revision 34896)
@@ -161,6 +161,6 @@
  measure->Xccd      = NAN;
  measure->Yccd      = NAN;
- measure->Xraw      = NAN;
- measure->Yraw      = NAN;
+ measure->Xfix      = NAN;
+ measure->Yfix      = NAN;
 
  measure->Sky       = NAN;
Index: /branches/eam_branches/ipp-20121219/Ohana/src/libdvo/src/dvo_convert_PS1_V4.c
===================================================================
--- /branches/eam_branches/ipp-20121219/Ohana/src/libdvo/src/dvo_convert_PS1_V4.c	(revision 34895)
+++ /branches/eam_branches/ipp-20121219/Ohana/src/libdvo/src/dvo_convert_PS1_V4.c	(revision 34896)
@@ -31,6 +31,6 @@
     out[i].Xccd       = in[i].Xccd;
     out[i].Yccd       = in[i].Yccd;
-    out[i].Xraw       = in[i].Xraw;
-    out[i].Yraw       = in[i].Yraw;
+    out[i].Xfix       = in[i].Xfix;
+    out[i].Yfix       = in[i].Yfix;
     out[i].Sky        = in[i].Sky;
     out[i].dSky       = in[i].dSky;
@@ -94,6 +94,6 @@
     out[i].Xccd       = in[i].Xccd;
     out[i].Yccd       = in[i].Yccd;
-    out[i].Xraw       = in[i].Xraw;
-    out[i].Yraw       = in[i].Yraw;
+    out[i].Xfix       = in[i].Xfix;
+    out[i].Yfix       = in[i].Yfix;
     out[i].Sky        = in[i].Sky;
     out[i].dSky       = in[i].dSky;
Index: /branches/eam_branches/ipp-20121219/Ohana/src/uniphot/src/astrom_correction.c
===================================================================
--- /branches/eam_branches/ipp-20121219/Ohana/src/uniphot/src/astrom_correction.c	(revision 34895)
+++ /branches/eam_branches/ipp-20121219/Ohana/src/uniphot/src/astrom_correction.c	(revision 34896)
@@ -151,4 +151,8 @@
   double dx, a, b, value;
   
+  // saturate correction at high and low ends
+  if (X < x[0]) return y[0];
+  if (X > x[N-1]) return y[N-1];
+
   /* find correct element in array (x must be sorted) */
   lo = 0;
Index: /branches/eam_branches/ipp-20121219/Ohana/src/uniphot/src/update_catalog_setastrom.c
===================================================================
--- /branches/eam_branches/ipp-20121219/Ohana/src/uniphot/src/update_catalog_setastrom.c	(revision 34895)
+++ /branches/eam_branches/ipp-20121219/Ohana/src/uniphot/src/update_catalog_setastrom.c	(revision 34896)
@@ -15,19 +15,77 @@
   for (i = 0; i < catalog[0].Nmeasure; i++) {
 
+    Measure *measure = &catalog[0].measure[i];
+
     // XXX only do GPC1 data for now
-    if (catalog[0].measure[i].photcode < 10000) continue;
-    if (catalog[0].measure[i].photcode > 10600) continue;
+    if (measure[0].photcode < 10000) continue;
+    if (measure[0].photcode > 10600) continue;
       
-    double Xccd = catalog[0].measure[i].Xccd;
-    double Yccd = catalog[0].measure[i].Yccd;
-    double pltScale = fabs(catalog[0].measure[i].pltscale);
+    // XXX hardwire the list of chips to correct
+    // some notes:
+    // XY24 surpisingly does not need correction
+    // XY27 has poor astrometry with a weird correction for all mags
+    // XY36 surpisingly does not need correction
+    // XY67 has poor astrometry with a weird correction for all mags
+
+    int chipID = measure[0].photcode % 100;
+    switch (chipID) {
+      case 4:
+      case 5:
+      case 6:
+      case 14:
+      case 15:
+      case 16:
+      case 17:
+      case 25:
+      case 26:
+      case 34:
+      case 35:
+      case 37:
+      case 40:
+      case 41:
+      case 42:
+      case 43:
+      case 50:
+      case 51:
+      case 52:
+      case 53:
+      case 60:
+      case 61:
+      case 62:
+      case 63:
+      case 71:
+      case 72:
+      case 73:
+	break;
+      default:
+	measure[0].Xfix = measure[0].Xccd;
+	measure[0].Yfix = measure[0].Yccd;
+	continue;
+    }
+
+    double Xccd = measure[0].Xccd;
+    double Yccd = measure[0].Yccd;
+    double pltScale = fabs(measure[0].pltscale);
 
     // this is not needed, is it?
-    // double posAngle = FromShortDegrees(catalog[0].measure[i].posangle);
+    // double posAngle = FromShortDegrees(measure[0].posangle);
 
     // I need to know which chip we have.  use photcode assuming range
-    int chip = catalog[0].measure[i].photcode % 100;
+    int chip = measure[0].photcode % 100;
 
-    float Minst = PhotInst (&catalog[0].measure[i]);
+    // correction may be Minst or Minst + 5.0*log(fwhm
+    float fwhm_maj = FromShortPixels(measure[0].FWx);
+    float Minst = PhotInst (measure);
+    float MinstSB = Minst + 5.0*log10(fwhm_maj);
+
+    // I should validate that the spline I'm using is SB corrected not Minst...
+
+    // XXX this is very ad hoc.  the splines are measured based on an extraction from dvo
+    // the dvo values of fwhm_maj are sigmas (NOT FWHM!) in pixels.  
+    
+    // saturate fwhm_maj in the range 1.0 < fwhm_maj < 5.0
+    // (images with really odd psf probably have poor astrometry anyway...)
+    fwhm_maj = MIN(fwhm_maj,5.0);
+    fwhm_maj = MAX(fwhm_maj,1.0);
 
     double dX;
@@ -35,17 +93,16 @@
 
     // correction is in arcseconds
-    if (catalog[0].measure[i].t < timeRef) {
-      get_astrom_correction (0, chip, &dX, &dY, Minst);
+    if (measure[0].t < timeRef) {
+      get_astrom_correction (0, chip, &dX, &dY, MinstSB);
     } else {
-      get_astrom_correction (1, chip, &dX, &dY, Minst);
+      // XXX do not correct new data
+      // get_astrom_correction (1, chip, &dX, &dY, MinstSB);
+      dX = 0.0;
+      dY = 0.0;
     }
 
-    myAssert(!isfinite(catalog[0].measure[i].Xraw), "error: Xraw is not NAN, did we already correct?");
-    myAssert(!isfinite(catalog[0].measure[i].Yraw), "error: Yraw is not NAN, did we already correct?");
-    catalog[0].measure[i].Xraw = Xccd;
-    catalog[0].measure[i].Yraw = Yccd;
-
-    catalog[0].measure[i].Xccd = Xccd + dX / pltScale;
-    catalog[0].measure[i].Yccd = Yccd + dY / pltScale;
+    // do not modify the original Xccd,Yccd values
+    measure[0].Xfix = Xccd + dX / pltScale;
+    measure[0].Yfix = Yccd + dY / pltScale;
 
     found ++;
