Index: /trunk/Ohana/src/libdvo/include/dvo.h
===================================================================
--- /trunk/Ohana/src/libdvo/include/dvo.h	(revision 35101)
+++ /trunk/Ohana/src/libdvo/include/dvo.h	(revision 35102)
@@ -367,4 +367,6 @@
   float          Xccd;
   float          Yccd;
+  float          Xfix;
+  float          Yfix;
   float          dt;
   int   	 t;
@@ -658,4 +660,5 @@
 SkyTable  *SkyTableLoadOptimal 	   PROTO((char *catdir, char *SKYFILE, char *GSCFILE, int readwrite, int depth, int VERBOSE));
 int        SkyTableSetDepth    	   PROTO((SkyTable *sky, int depth));
+SkyList   *SkyRegionByCPT          PROTO((SkyTable *table, char *filename));
 SkyList   *SkyRegionByPoint    	   PROTO((SkyTable *table, int depth, double ra, double dec));
 SkyList   *SkyListByPoint      	   PROTO((SkyTable *table, double ra, double dec));
Index: /trunk/Ohana/src/libdvo/include/dvodb.h
===================================================================
--- /trunk/Ohana/src/libdvo/include/dvodb.h	(revision 35101)
+++ /trunk/Ohana/src/libdvo/include/dvodb.h	(revision 35102)
@@ -122,6 +122,6 @@
       MEAS_XCCD_ERR, 
       MEAS_YCCD_ERR, 
-      MEAS_XOFF, 
-      MEAS_YOFF, 
+      MEAS_XFIX, 
+      MEAS_YFIX, 
       MEAS_POS_SYS_ERR, 
       MEAS_XMOSAIC, 
@@ -250,4 +250,5 @@
       IMAGE_Y_ERR_SYS,
       IMAGE_MAG_ERR_SYS,
+      IMAGE_UBERCAL_DIST,
       IMAGE_NFIT_PHOTOM,
       IMAGE_NFIT_ASTROM,
Index: /trunk/Ohana/src/libdvo/src/HostTable.c
===================================================================
--- /trunk/Ohana/src/libdvo/src/HostTable.c	(revision 35101)
+++ /trunk/Ohana/src/libdvo/src/HostTable.c	(revision 35102)
@@ -243,4 +243,11 @@
   Nmax ++;
 
+  // need the list of connected hosts for exit test below
+  int Nrunning = 0;
+  for (i = 0; i < table->Nhosts; i++) {
+    if (!table->hosts[i].pid) continue; // any unconnected hosts should be skipped
+    Nrunning ++;
+  }
+
   int Nfound = 0;
 
@@ -262,4 +269,6 @@
     // we have some sockets to check, check sockets for all hosts
     for (i = 0; (status > 0) && (i < table->Nhosts); i++) {
+      if (!table->hosts[i].pid) continue; // any unconnected hosts should be skipped
+
       if (FALSE && FD_ISSET (table->hosts[i].stdio[HOST_STDIN], &wtSet)) {
 	// this host is waiting for input : this is an error, so exit
@@ -268,5 +277,5 @@
       }
       
-      if (FD_ISSET (table->hosts[i].stdio[HOST_STDOUT], &rdSet)) {
+      if ((table->hosts[i].stdio[HOST_STDOUT] > 0) && FD_ISSET (table->hosts[i].stdio[HOST_STDOUT], &rdSet)) {
 	// this host has waiting output : read to buffer, and dump if necessary
 	ReadtoIOBuffer (&table->hosts[i].stdout, table->hosts[i].stdio[HOST_STDOUT]);
@@ -282,5 +291,5 @@
       }
 
-      if (FD_ISSET (table->hosts[i].stdio[HOST_STDERR], &rdSet)) {
+      if ((table->hosts[i].stdio[HOST_STDERR] > 0) && FD_ISSET (table->hosts[i].stdio[HOST_STDERR], &rdSet)) {
 	// this host has waiting output : read to buffer, and dump if necessary
 	ReadtoIOBuffer (&table->hosts[i].stderr, table->hosts[i].stdio[HOST_STDERR]);
@@ -361,5 +370,5 @@
       }
       Nfound ++;
-      if (Nfound == table->Nhosts) goto escape; // we've harvested all jobs
+      if (Nfound == Nrunning) goto escape; // we've harvested all jobs
     }
   }
Index: /trunk/Ohana/src/libdvo/src/dbExtractImages.c
===================================================================
--- /trunk/Ohana/src/libdvo/src/dbExtractImages.c	(revision 35101)
+++ /trunk/Ohana/src/libdvo/src/dbExtractImages.c	(revision 35102)
@@ -328,4 +328,8 @@
       break;
 
+    case IMAGE_UBERCAL_DIST:
+      value.Int = image[N].ubercalDist;
+      break;
+
     case IMAGE_NFIT_PHOTOM:
       value.Int = image[N].nFitPhotom;
Index: /trunk/Ohana/src/libdvo/src/dbExtractMeasures.c
===================================================================
--- /trunk/Ohana/src/libdvo/src/dbExtractMeasures.c	(revision 35101)
+++ /trunk/Ohana/src/libdvo/src/dbExtractMeasures.c	(revision 35102)
@@ -443,9 +443,9 @@
 # endif
       break;
-    case MEAS_XOFF: /* OK */
-      value.Flt = measure[0].Xoff;
-      break;
-    case MEAS_YOFF: /* OK */
-      value.Flt = measure[0].Yoff;
+    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: /trunk/Ohana/src/libdvo/src/dbFields.c
===================================================================
--- /trunk/Ohana/src/libdvo/src/dbFields.c	(revision 35101)
+++ /trunk/Ohana/src/libdvo/src/dbFields.c	(revision 35102)
@@ -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, "XOFF"))       	 ESCAPE (MEAS_XOFF,           MAG_NONE, OPIHI_FLT);
-  if (!strcasecmp (fieldName, "YOFF"))       	 ESCAPE (MEAS_YOFF,           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);
@@ -473,4 +473,8 @@
   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, "UBERCAL_DIST")) ESCAPE (IMAGE_UBERCAL_DIST,MAG_NONE, OPIHI_INT);
+  if (!strcasecmp (fieldName, "UCDIST")) ESCAPE (IMAGE_UBERCAL_DIST,MAG_NONE, OPIHI_INT);
+
   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);
Index: /trunk/Ohana/src/libdvo/src/dvo_catalog.c
===================================================================
--- /trunk/Ohana/src/libdvo/src/dvo_catalog.c	(revision 35101)
+++ /trunk/Ohana/src/libdvo/src/dvo_catalog.c	(revision 35102)
@@ -161,6 +161,6 @@
  measure->Xccd      = NAN;
  measure->Yccd      = NAN;
- measure->Xoff      = 0.0;
- measure->Yoff      = 0.0;
+ measure->Xfix      = NAN;
+ measure->Yfix      = NAN;
 
  measure->Sky       = NAN;
Index: /trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V4.c
===================================================================
--- /trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V4.c	(revision 35101)
+++ /trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V4.c	(revision 35102)
@@ -31,6 +31,6 @@
     out[i].Xccd       = in[i].Xccd;
     out[i].Yccd       = in[i].Yccd;
-    out[i].Xoff       = in[i].Xoff;
-    out[i].Yoff       = in[i].Yoff;
+    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,4 +94,6 @@
     out[i].Xccd       = in[i].Xccd;
     out[i].Yccd       = in[i].Yccd;
+    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: /trunk/Ohana/src/libdvo/src/dvo_tiny_values.c
===================================================================
--- /trunk/Ohana/src/libdvo/src/dvo_tiny_values.c	(revision 35101)
+++ /trunk/Ohana/src/libdvo/src/dvo_tiny_values.c	(revision 35102)
@@ -20,4 +20,6 @@
   measureT[0].Xccd       = measure[0].Xccd;
   measureT[0].Yccd       = measure[0].Yccd;
+  measureT[0].Xfix       = measure[0].Xfix;
+  measureT[0].Yfix       = measure[0].Yfix;
   measureT[0].t          = measure[0].t;
   measureT[0].dt         = measure[0].dt;
Index: /trunk/Ohana/src/libdvo/src/skyregion_ops.c
===================================================================
--- /trunk/Ohana/src/libdvo/src/skyregion_ops.c	(revision 35101)
+++ /trunk/Ohana/src/libdvo/src/skyregion_ops.c	(revision 35102)
@@ -7,4 +7,54 @@
    If the region at the given depth is populated with an image table, then 'image' is TRUE.
    I have defined no accelerators other than the table hierarchy */
+
+/* given /path/file.ext return pointer to file.ext */
+char *filebasename_ptr (char *name) {
+ 
+  char *c;
+
+  c = strrchr (name, '/');
+  if (c) return (c+1);
+  return name;
+}
+
+/* find region which matches the named file */
+SkyList *SkyRegionByCPT (SkyTable *table, char *filename) {
+  
+  int i;
+  SkyList *list;
+
+  ALLOCATE (list, SkyList, 1);
+  ALLOCATE (list[0].regions,  SkyRegion *, 1);
+  ALLOCATE (list[0].filename,  char *, 1);
+  list[0].Nregions = 0;
+  list[0].ownElements = FALSE; // this list is only holding a view to the elements
+  strcpy (list[0].hosts, table[0].hosts);
+
+  // i'd like to select the region from the given cpt filename, but
+  // in a parallel environment, the filename does not match the canonical name
+  // i select the basename to match 
+
+  // we might have been given foo.cpt or just foo:
+  char *tgtbase = filebasename_ptr (filename);
+  int Ntgtbase = strlen(tgtbase);
+  if ((Ntgtbase > 4) && (!strcmp (&tgtbase[Ntgtbase - 4], ".cpt"))) {
+    Ntgtbase -= 4;
+  }
+
+  for (i = 0; i < table[0].Nregions; i++) {
+    char *regbase = filebasename_ptr (table[0].regions[i].name);
+    if (strncmp (regbase, tgtbase, Ntgtbase)) continue;
+
+    list[0].regions[0] = &table[0].regions[i];
+    list[0].filename[0] = table[0].filename[i];
+    list[0].Nregions = 1;
+    return (list);
+  }
+  
+  free (list[0].regions);
+  free (list[0].filename);
+  free (list);
+  return NULL;
+}
 
 /* find region which overlaps c at given depth (-1 : populated ) */
