Index: /trunk/Ohana/src/opihi/dvo/avextract.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/avextract.c	(revision 30611)
+++ /trunk/Ohana/src/opihi/dvo/avextract.c	(revision 30612)
@@ -44,5 +44,8 @@
 
   // parse skyregion options
-  if ((selection = SetRegionSelection (&argc, argv)) == NULL) goto escape;
+  if ((selection = SetRegionSelection (&argc, argv)) == NULL) {
+    print_error(); 
+    goto escape; 
+  }
 
   // command-line is of the form: avextract field,field, field [where (field op value)...]
@@ -68,4 +71,8 @@
   // construct the db Boolean math stack (frees cstack)
   stack = dbRPN (Ncstack, cstack, &Nstack);
+  if (Ncstack && !Nstack) {
+    print_error(); 
+    goto escape; 
+  }
 
   // add the skyregion limits to the where statement (or create)
Index: /trunk/Ohana/src/opihi/dvo/dbExtractImages.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/dbExtractImages.c	(revision 30611)
+++ /trunk/Ohana/src/opihi/dvo/dbExtractImages.c	(revision 30612)
@@ -241,8 +241,8 @@
 
     case IMAGE_NCAL:
-      value.Int = image[N].Mxxxx;
+      value.Int = image[N].nFitPhotom;
       break;
     case IMAGE_SKY:
-      value.Flt = image[N].Myyyy + 0x8000;
+      value.Flt = NAN;
       break;
     case IMAGE_FLAGS:
@@ -299,4 +299,27 @@
       value.Flt = (field->ID == IMAGE_X_UR_FP) ? x : y;
       break;
+
+    case IMAGE_X_ERR_SYS:
+      value.Flt = image[N].dXpixSys;
+      break;
+    case IMAGE_Y_ERR_SYS:
+      value.Flt = image[N].dXpixSys;
+      break;
+    case IMAGE_MAG_ERR_SYS:
+      value.Flt = image[N].dMagSys;
+      break;
+
+    case IMAGE_NFIT_PHOTOM:
+      value.Int = image[N].nFitPhotom;
+      break;
+    case IMAGE_NFIT_ASTROM:
+      value.Int = image[N].nFitAstrom;
+      break;
+    case IMAGE_NLINK_PHOTOM:
+      value.Int = image[N].nLinkPhotom;
+      break;
+    case IMAGE_NLINK_ASTROM:
+      value.Int = image[N].nLinkAstrom;
+      break;
   }
   return (value);
Index: /trunk/Ohana/src/opihi/dvo/dbExtractMeasures.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/dbExtractMeasures.c	(revision 30611)
+++ /trunk/Ohana/src/opihi/dvo/dbExtractMeasures.c	(revision 30612)
@@ -320,23 +320,23 @@
       break;
     case MEAS_FWHM: /* OK */
-      value.Flt = 0.01*(measure[0].FWx + measure[0].FWy) / 2.0;
+      value.Flt = FromShortPixels(measure[0].FWx + measure[0].FWy) / 2.0;
       break;
     case MEAS_FWHM_MAJ: /* OK */
-      value.Flt = 0.01*measure[0].FWx;
+      value.Flt = FromShortPixels(measure[0].FWx);
       break;
     case MEAS_FWHM_MIN: /* OK */
-      value.Flt = 0.01*measure[0].FWy;
+      value.Flt = FromShortPixels(measure[0].FWy);
       break;
     case MEAS_THETA: /* OK */
-      value.Flt = measure[0].theta;
+      value.Flt = FromShortDegrees(measure[0].theta);
       break;
     case MEAS_MXX: /* OK */
-      value.Flt = measure[0].Mxx;
+      value.Flt = FromShortPixels(measure[0].Mxx);
       break;
     case MEAS_MXY: /* OK */
-      value.Flt = measure[0].Mxy;
+      value.Flt = FromShortPixels(measure[0].Mxy);
       break;
     case MEAS_MYY: /* OK */
-      value.Flt = measure[0].Myy;
+      value.Flt = FromShortPixels(measure[0].Myy);
       break;
     case MEAS_DOPHOT: /* OK */
@@ -382,8 +382,11 @@
       break;
     case MEAS_XCCD_ERR: /* OK */
-      value.Flt = measure[0].dXccd / 100.0;
+      value.Flt = FromShortPixels(measure[0].dXccd);
       break;
     case MEAS_YCCD_ERR: /* OK */
-      value.Flt = measure[0].dYccd / 100.0;
+      value.Flt = FromShortPixels(measure[0].dYccd);
+      break;
+    case MEAS_POS_SYS_ERR: /* OK */
+      value.Flt = FromShortPixels(measure[0].dRsys);
       break;
     case MEAS_XMOSAIC: /* OK */
@@ -425,4 +428,7 @@
       value.Flt = measure[0].psfQual;
       break;
+    case MEAS_PSF_QF_PERFECT: /* OK */
+      value.Flt = NAN;
+      break;
     case MEAS_PSF_CHISQ: /* OK */
       value.Flt = measure[0].psfChisq;
Index: /trunk/Ohana/src/opihi/dvo/dbFields.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/dbFields.c	(revision 30611)
+++ /trunk/Ohana/src/opihi/dvo/dbFields.c	(revision 30612)
@@ -194,4 +194,5 @@
   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, "POS_SYS_ERR"))    ESCAPE (MEAS_POS_SYS_ERR,    MAG_NONE, OPIHI_FLT);
   if (!strcasecmp (fieldName, "XMOSAIC"))    	 ESCAPE (MEAS_XMOSAIC,        MAG_NONE, OPIHI_FLT);
   if (!strcasecmp (fieldName, "YMOSAIC"))    	 ESCAPE (MEAS_YMOSAIC,        MAG_NONE, OPIHI_FLT);
@@ -205,4 +206,5 @@
   if (!strcasecmp (fieldName, "IMAGEID"))    	 ESCAPE (MEAS_IMAGE_ID,       MAG_NONE, OPIHI_INT);
   if (!strcasecmp (fieldName, "PSF_QF"))     	 ESCAPE (MEAS_PSF_QF,         MAG_NONE, OPIHI_FLT);
+  if (!strcasecmp (fieldName, "PSF_QF_PERFECT")) ESCAPE (MEAS_PSF_QF_PERFECT, MAG_NONE, OPIHI_FLT);
   if (!strcasecmp (fieldName, "PSF_CHISQ"))  	 ESCAPE (MEAS_PSF_CHISQ,      MAG_NONE, OPIHI_FLT);
   if (!strcasecmp (fieldName, "PSF_NDOF"))  	 ESCAPE (MEAS_PSF_NDOF,       MAG_NONE, OPIHI_INT);
@@ -398,7 +400,6 @@
   if (!strcasecmp (fieldName, "trate"    )) ESCAPE (IMAGE_TRATE,     MAG_NONE, OPIHI_FLT);
 
-  // XXX : these are mapped to ridiculous things: Myyyy + 0x8000 and Mxxxx
   if (!strcasecmp (fieldName, "ncal"     )) ESCAPE (IMAGE_NCAL,      MAG_NONE, OPIHI_INT);
-  if (!strcasecmp (fieldName, "sky"      )) ESCAPE (IMAGE_SKY,       MAG_NONE, OPIHI_FLT);
+  if (!strcasecmp (fieldName, "sky"      )) ESCAPE (IMAGE_SKY,       MAG_NONE, OPIHI_FLT); // deprecated for now
 
   if (!strcasecmp (fieldName, "imflags"  )) ESCAPE (IMAGE_FLAGS,     MAG_NONE, OPIHI_INT);
@@ -427,4 +428,12 @@
   if (!strcasecmp (fieldName, "Y_UR_FP"  )) ESCAPE (IMAGE_Y_UR_FP,   MAG_NONE, OPIHI_FLT);
 
+  if (!strcasecmp (fieldName, "dX_SYS"  )) ESCAPE (IMAGE_X_ERR_SYS,  MAG_NONE, OPIHI_FLT);
+  if (!strcasecmp (fieldName, "dY_SYS"  )) ESCAPE (IMAGE_Y_ERR_SYS,  MAG_NONE, OPIHI_FLT);
+  if (!strcasecmp (fieldName, "dM_SYS"  )) ESCAPE (IMAGE_MAG_ERR_SYS,MAG_NONE, OPIHI_FLT);
+  if (!strcasecmp (fieldName, "NFIT_PHOTOM")) ESCAPE (IMAGE_NFIT_PHOTOM,MAG_NONE, OPIHI_INT);
+  if (!strcasecmp (fieldName, "NFIT_ASTROM")) ESCAPE (IMAGE_NFIT_ASTROM,MAG_NONE, OPIHI_INT);
+  if (!strcasecmp (fieldName, "NLINK_PHOTOM")) ESCAPE (IMAGE_NLINK_PHOTOM,MAG_NONE, OPIHI_INT);
+  if (!strcasecmp (fieldName, "NLINK_ASTROM")) ESCAPE (IMAGE_NLINK_ASTROM,MAG_NONE, OPIHI_INT);
+
   // for words that don't parse, try a photcode
   gprint (GP_ERR, "unknown field '%s' for image table in DVO database\n", fieldName);
Index: /trunk/Ohana/src/opihi/dvo/gimages.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/gimages.c	(revision 30611)
+++ /trunk/Ohana/src/opihi/dvo/gimages.c	(revision 30612)
@@ -201,7 +201,5 @@
     }
 
-    /*** XXX we need to re-introduce the use of applyMcal
-    Mcal = applyMcal (&image[i], 2048.0, 2048.0);
-    ***/
+    // XXX Mcal = applyMcal (&image[i], 2048.0, 2048.0);
 
   got_spot:
Index: /trunk/Ohana/src/opihi/dvo/gstar.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/gstar.c	(revision 30611)
+++ /trunk/Ohana/src/opihi/dvo/gstar.c	(revision 30612)
@@ -222,6 +222,6 @@
 	    gprint (GP_LOG, "%5d ",    catalog.measure[m].photcode);
 	    gprint (GP_LOG, "%-20s ",  GetPhotcodeNamebyCode (catalog.measure[m].photcode));
- 	    gprint (GP_LOG, "%5.2f ",  0.01*catalog.measure[m].FWx);
-	    gprint (GP_LOG, "%5.2f ",  0.01*catalog.measure[m].FWy);
+ 	    gprint (GP_LOG, "%5.2f ",  FromShortPixels(catalog.measure[m].FWx));
+	    gprint (GP_LOG, "%5.2f ",  FromShortPixels(catalog.measure[m].FWy));
 
 	    if (FULL_OUTPUT) {
@@ -233,6 +233,6 @@
 		gprint (GP_LOG, "%f ", catalog.measure[m].Xccd);
 		gprint (GP_LOG, "%f ", catalog.measure[m].Yccd);
-		gprint (GP_LOG, "%d ", catalog.measure[m].dXccd);
-		gprint (GP_LOG, "%d ", catalog.measure[m].dYccd);
+		gprint (GP_LOG, "%f ", FromShortPixels(catalog.measure[m].dXccd));
+		gprint (GP_LOG, "%f ", FromShortPixels(catalog.measure[m].dYccd));
 		gprint (GP_LOG, "%f ", catalog.measure[m].Sky);
 		gprint (GP_LOG, "%f ", catalog.measure[m].dSky);
@@ -244,5 +244,5 @@
 		gprint (GP_LOG, "%f ", catalog.measure[m].crNsigma);
 		gprint (GP_LOG, "%f ", catalog.measure[m].extNsigma);
-		gprint (GP_LOG, "%f ", (360.0/(float)0xffff)*catalog.measure[m].theta);
+		gprint (GP_LOG, "%f ", FromShortDegrees(catalog.measure[m].theta));
 	    }
 	    gprint (GP_LOG, "\n");
Index: /trunk/Ohana/src/opihi/dvo/images.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/images.c	(revision 30611)
+++ /trunk/Ohana/src/opihi/dvo/images.c	(revision 30612)
@@ -223,11 +223,10 @@
       goto got_type;
     }
-    // For 'TrianglePts' (TRI-), we are using the Mx,My, etc terms to save the coordinates
-    // this means triangular images cannot carry photometric zero-point variations
+    // For 'TrianglePts' (TRI-), we are absurdly overloaded values otherwise not used
     if (typehash == TrianglePts) {
       Npts = 3;
-      x[0] = image[i].Mx;   y[0] = image[i].My;
-      x[1] = image[i].Mxxx; y[1] = image[i].Mxyy;
-      x[2] = image[i].Mxxy; y[2] = image[i].Myyy;
+      x[0] = image[0].dXpixSys;      y[0] = image[0].dYpixSys;
+      x[1] = image[0].dMagSys;       y[1] = image[0].nFitAstrom;
+      x[2] = image[0].photom_map_id; y[2] = image[0].astrom_map_id;
       goto got_type;
     }
Index: /trunk/Ohana/src/opihi/dvo/imextract.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/imextract.c	(revision 30611)
+++ /trunk/Ohana/src/opihi/dvo/imextract.c	(revision 30612)
@@ -62,4 +62,8 @@
   // construct the db Boolean math stack (frees cstack)
   stack = dbRPN (Ncstack, cstack, &Nstack);
+  if (Ncstack && !Nstack) {
+    print_error(); 
+    goto escape; 
+  }
 
   // add the skyregion limits to the where statement (or create)
Index: /trunk/Ohana/src/opihi/dvo/imphot.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/imphot.c	(revision 30611)
+++ /trunk/Ohana/src/opihi/dvo/imphot.c	(revision 30612)
@@ -9,5 +9,5 @@
   char bufname[64];
   float *p;
-  double fx, fy, x, y, applyMcal();
+  double fx, fy, x, y;
   Image *image;
   Buffer *buf;
@@ -63,5 +63,6 @@
     for (y = 0; y < 200; y+=1.0) {
       for (x = 0; x < 100; x+=1.0, p++) {
-	*p = applyMcal (&image[subset[0]], (fx*x), (fy*y));
+	// *p = applyMcal (&image[subset[0]], (fx*x), (fy*y));
+	*p = image[subset[0]].Mcal;
       }
     }
@@ -70,4 +71,8 @@
   for (j = 0; j < Nsubset; j++) {
     i = subset[j];
+    gprint (GP_ERR, "%s: %f\n", image[i].name, image[i].Mcal);
+
+// XXX old code when we had the option of a 2D zero point model
+# if (0)      
     switch (image[i].order) {
     case 0:
@@ -90,4 +95,5 @@
       break;
     }
+# endif
   }
 
Index: /trunk/Ohana/src/opihi/dvo/mextract.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/mextract.c	(revision 30611)
+++ /trunk/Ohana/src/opihi/dvo/mextract.c	(revision 30612)
@@ -68,5 +68,5 @@
   // construct the db Boolean math stack (frees cstack)
   stack = dbRPN (Ncstack, cstack, &Nstack);
-  if ((Ncstack > 0) && (Nstack < 1)) {
+  if (Ncstack && !Nstack) {
     print_error ();
     goto escape;
Index: /trunk/Ohana/src/opihi/dvo/mmextract.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/mmextract.c	(revision 30611)
+++ /trunk/Ohana/src/opihi/dvo/mmextract.c	(revision 30612)
@@ -106,5 +106,5 @@
   // construct the db Boolean math stack (frees cstack)
   stack1 = dbRPN (Ncstack1, cstack1, &Nstack1);
-  if ((Ncstack1 > 0) && (Nstack1 < 1)) {
+  if (Ncstack1 && !Nstack1) {
     print_error ();
     goto escape;
@@ -113,5 +113,5 @@
   // construct the db Boolean math stack (frees cstack)
   stack2 = dbRPN (Ncstack2, cstack2, &Nstack2);
-  if ((Ncstack2 > 0) && (Nstack2 < 1)) {
+  if (Ncstack2 && !Nstack2) {
     print_error ();
     goto escape;
Index: /trunk/Ohana/src/opihi/dvo/photometry.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/photometry.c	(revision 30611)
+++ /trunk/Ohana/src/opihi/dvo/photometry.c	(revision 30612)
@@ -778,6 +778,6 @@
   } else {
     
-    if (0.01 * measure[0].FWx < 3.0) return (FALSE);
-    if (0.01 * measure[0].FWx > 10.0) return (FALSE);
+    if (FromShortPixels(measure[0].FWx < 3.0)) return (FALSE);
+    if (FromShortPixels(measure[0].FWx > 10.0)) return (FALSE);
 
     return (TRUE);
@@ -810,5 +810,5 @@
     Nm = 0;
     for (i = 0; i < average[0].Nmeasure; i++) {
-      fwhm = measure[i].FWx / 100.0;
+      fwhm = FromShortPixels(measure[i].FWx);
       switch (FWHMsign) {
 	case 0:
@@ -1166,5 +1166,5 @@
       break;
     case MEAS_FWHM: /* OK */
-      value = 0.01*measure[0].FWx;
+      value = FromShortPixels(measure[0].FWx);
       break;
     case MEAS_DB_FLAGS: /* ? */
Index: /trunk/Ohana/src/opihi/dvo/skycat.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/skycat.c	(revision 30611)
+++ /trunk/Ohana/src/opihi/dvo/skycat.c	(revision 30612)
@@ -36,5 +36,5 @@
 
   if (argc != 1) {
-    gprint (GP_ERR, "USAGE: skycat [-all]\n");
+    gprint (GP_ERR, "USAGE: skycat [-all] [-depth depth] [-v]\n");
     return (FALSE);
   }
@@ -116,4 +116,6 @@
 
   r = ohana_normalize_angle (r);
+  while (r < Rmin) { r += 360.0; }
+  while (r > Rmax) { r -= 360.0; }
 
   if (*leftside == -1) {
