Index: /branches/eam_branches/ipp-20140904/Ohana/src/libdvo/include/dvo.h
===================================================================
--- /branches/eam_branches/ipp-20140904/Ohana/src/libdvo/include/dvo.h	(revision 37434)
+++ /branches/eam_branches/ipp-20140904/Ohana/src/libdvo/include/dvo.h	(revision 37435)
@@ -1018,3 +1018,31 @@
 int RegionHostFindNeighbors (RegionHostTable *table, int Nhost);
 
+# define LENSFIELD(NAME) float LensValue_##NAME (PhotCode *code, Lensobj *lensobj);
+
+LENSFIELD(X11_sm_obj);
+LENSFIELD(X12_sm_obj);
+LENSFIELD(X22_sm_obj);
+LENSFIELD(E1_sm_obj);
+LENSFIELD(E2_sm_obj);
+
+LENSFIELD(X11_sh_obj);
+LENSFIELD(X12_sh_obj);
+LENSFIELD(X22_sh_obj);
+LENSFIELD(E1_sh_obj);
+LENSFIELD(E2_sh_obj);
+
+LENSFIELD(X11_sm_psf);
+LENSFIELD(X12_sm_psf);
+LENSFIELD(X22_sm_psf);
+LENSFIELD(E1_sm_psf);
+LENSFIELD(E2_sm_psf);
+
+LENSFIELD(X11_sh_psf);
+LENSFIELD(X12_sh_psf);
+LENSFIELD(X22_sh_psf);
+LENSFIELD(E1_sh_psf);
+LENSFIELD(E2_sh_psf);
+
+# undef LENSFIELD
+
 # endif // DVO_H
Index: /branches/eam_branches/ipp-20140904/Ohana/src/libdvo/include/dvodb.h
===================================================================
--- /branches/eam_branches/ipp-20140904/Ohana/src/libdvo/include/dvodb.h	(revision 37434)
+++ /branches/eam_branches/ipp-20140904/Ohana/src/libdvo/include/dvodb.h	(revision 37435)
@@ -55,4 +55,38 @@
   MAG_OPTION_UC_DIST, 
   MAG_OPTION_FLAGS, 
+
+  MAG_OPTION_X11_SM_OBJ, 
+  MAG_OPTION_X12_SM_OBJ, 
+  MAG_OPTION_X22_SM_OBJ, 
+  MAG_OPTION_E1_SM_OBJ, 
+  MAG_OPTION_E2_SM_OBJ, 
+
+  MAG_OPTION_X11_SH_OBJ, 
+  MAG_OPTION_X12_SH_OBJ, 
+  MAG_OPTION_X22_SH_OBJ, 
+  MAG_OPTION_E1_SH_OBJ, 
+  MAG_OPTION_E2_SH_OBJ, 
+
+  MAG_OPTION_X11_SM_PSF, 
+  MAG_OPTION_X12_SM_PSF, 
+  MAG_OPTION_X22_SM_PSF, 
+  MAG_OPTION_E1_SM_PSF, 
+  MAG_OPTION_E2_SM_PSF, 
+
+  MAG_OPTION_X11_SH_PSF, 
+  MAG_OPTION_X12_SH_PSF, 
+  MAG_OPTION_X22_SH_PSF, 
+  MAG_OPTION_E1_SH_PSF, 
+  MAG_OPTION_E2_SH_PSF, 
+
+  MAG_OPTION_F_AP_R5, 
+  MAG_OPTION_F_ERR_AP_R5, 
+  MAG_OPTION_F_STDEV_AP_R5, 
+  MAG_OPTION_F_FILL_AP_R5, 
+
+  MAG_OPTION_F_AP_R6, 
+  MAG_OPTION_F_ERR_AP_R6, 
+  MAG_OPTION_F_STDEV_AP_R6, 
+  MAG_OPTION_F_FILL_AP_R6, 
 } dvoMagOptionType;
 
@@ -163,4 +197,24 @@
       MEAS_CENTER_OFFSET,
       MEAS_REF_COLOR,
+      MEAS_X11_SM_OBJ, 
+      MEAS_X12_SM_OBJ, 
+      MEAS_X22_SM_OBJ, 
+      MEAS_E1_SM_OBJ, 
+      MEAS_E2_SM_OBJ, 
+      MEAS_X11_SH_OBJ, 
+      MEAS_X12_SH_OBJ, 
+      MEAS_X22_SH_OBJ, 
+      MEAS_E1_SH_OBJ, 
+      MEAS_E2_SH_OBJ, 
+      MEAS_X11_SM_PSF, 
+      MEAS_X12_SM_PSF, 
+      MEAS_X22_SM_PSF, 
+      MEAS_E1_SM_PSF, 
+      MEAS_E2_SM_PSF, 
+      MEAS_X11_SH_PSF, 
+      MEAS_X12_SH_PSF, 
+      MEAS_X22_SH_PSF, 
+      MEAS_E1_SH_PSF, 
+      MEAS_E2_SH_PSF, 
 };
 
@@ -202,4 +256,14 @@
       AVE_REF_COLOR,
       AVE_PHOT, // photometry class of values
+      AVE_E_BV,		      // extinction (mags)
+      AVE_E_BV_ERR,
+      AVE_DISTANCE_MOD, // distance modulus (mags)
+      AVE_DISTANCE_MOD_ERR,
+      AVE_M_R,		      // absolute mag in r-band
+      AVE_M_R_ERR,
+      AVE_FEH,		      // metallicity
+      AVE_FEH_ERR,
+      AVE_URA_GALMODEL,      // model pm prediction
+      AVE_UDEC_GALMODEL,     // model pm prediction
 };
 
@@ -368,5 +432,5 @@
 int          ParseImageField        PROTO((dbField *field, char *fieldName));
 
-dbValue      dbExtractAverages      PROTO((Average *average, SecFilt *secfilt, Measure *measure, dbField *field));
+dbValue      dbExtractAverages      PROTO((Average *average, SecFilt *secfilt, Measure *measure, Lensobj *lensobj, StarPar *starpar, dbField *field));
 dbValue      dbExtractMeasures      PROTO((Average *average, SecFilt *secfilt, Measure *measure, dbField *field));
 dbValue      dbExtractImages        PROTO((Image *image, off_t Nimage, off_t N, dbField *field));
@@ -376,4 +440,8 @@
 int          dbAstroRegionLimits    PROTO((dbStack **stack, int *nstack, SkyRegionSelection *selection, int table));
 char        *strfloat               PROTO((float value));
+
+int dbFieldNeedMeasure (dbField *fields, int Nfields);
+int dbFieldNeedLensobj (dbField *fields, int Nfields);
+int dbFieldNeedStarpar (dbField *fields, int Nfields);
 
 void FreeImageSelection (void);
Index: /branches/eam_branches/ipp-20140904/Ohana/src/libdvo/src/dbExtractAverages.c
===================================================================
--- /branches/eam_branches/ipp-20140904/Ohana/src/libdvo/src/dbExtractAverages.c	(revision 37434)
+++ /branches/eam_branches/ipp-20140904/Ohana/src/libdvo/src/dbExtractAverages.c	(revision 37435)
@@ -50,5 +50,5 @@
 
 /* return average.field based on the selection */
-dbValue dbExtractAverages (Average *average, SecFilt *secfilt, Measure *measure, dbField *field) {
+dbValue dbExtractAverages (Average *average, SecFilt *secfilt, Measure *measure, Lensobj *lensobj, StarPar *starpar, dbField *field) {
 
   // off_t i;
@@ -306,7 +306,4 @@
 	  value.Flt = PhotUCdist (field->photcode, average, secfilt);
 	  break;
-	// XX case MAG_OPTION_STACK_DET_ID:
-	// XX   value.Int = PhotStackID (field->photcode, average, secfilt);
-	// XX   break;
 	case MAG_OPTION_FLAGS: {
 	  int Nsec = GetPhotcodeNsec (field->photcode->code);
@@ -315,8 +312,48 @@
 	  break;
 	}
+
+	  // g:X11_SM_OBJ, etc, are only valid for average 
+	case MAG_OPTION_X11_SM_OBJ: { value.Flt = LensValue_X11_sm_obj (field->photcode, lensobj); break; }
+	case MAG_OPTION_X12_SM_OBJ: { value.Flt = LensValue_X12_sm_obj (field->photcode, lensobj); break; }
+	case MAG_OPTION_X22_SM_OBJ: { value.Flt = LensValue_X22_sm_obj (field->photcode, lensobj); break; }
+	case MAG_OPTION_E1_SM_OBJ:  { value.Flt = LensValue_E1_sm_obj  (field->photcode, lensobj); break; }
+	case MAG_OPTION_E2_SM_OBJ:  { value.Flt = LensValue_E2_sm_obj  (field->photcode, lensobj); break; }
+
+	case MAG_OPTION_X11_SH_OBJ: { value.Flt = LensValue_X11_sh_obj (field->photcode, lensobj); break; }
+	case MAG_OPTION_X12_SH_OBJ: { value.Flt = LensValue_X12_sh_obj (field->photcode, lensobj); break; }
+	case MAG_OPTION_X22_SH_OBJ: { value.Flt = LensValue_X22_sh_obj (field->photcode, lensobj); break; }
+	case MAG_OPTION_E1_SH_OBJ:  { value.Flt = LensValue_E1_sh_obj  (field->photcode, lensobj); break; }
+	case MAG_OPTION_E2_SH_OBJ:  { value.Flt = LensValue_E2_sh_obj  (field->photcode, lensobj); break; }
+
+	case MAG_OPTION_X11_SM_PSF: { value.Flt = LensValue_X11_sm_psf (field->photcode, lensobj); break; }
+	case MAG_OPTION_X12_SM_PSF: { value.Flt = LensValue_X12_sm_psf (field->photcode, lensobj); break; }
+	case MAG_OPTION_X22_SM_PSF: { value.Flt = LensValue_X22_sm_psf (field->photcode, lensobj); break; }
+	case MAG_OPTION_E1_SM_PSF:  { value.Flt = LensValue_E1_sm_psf  (field->photcode, lensobj); break; }
+	case MAG_OPTION_E2_SM_PSF:  { value.Flt = LensValue_E2_sm_psf  (field->photcode, lensobj); break; }
+
+	case MAG_OPTION_X11_SH_PSF: { value.Flt = LensValue_X11_sh_psf (field->photcode, lensobj); break; }
+	case MAG_OPTION_X12_SH_PSF: { value.Flt = LensValue_X12_sh_psf (field->photcode, lensobj); break; }
+	case MAG_OPTION_X22_SH_PSF: { value.Flt = LensValue_X22_sh_psf (field->photcode, lensobj); break; }
+	case MAG_OPTION_E1_SH_PSF:  { value.Flt = LensValue_E1_sh_psf  (field->photcode, lensobj); break; }
+	case MAG_OPTION_E2_SH_PSF:  { value.Flt = LensValue_E2_sh_psf  (field->photcode, lensobj); break; }
+
 	case MAG_OPTION_NONE:
 	  break;
-      }
-      break;
+
+	default:
+	  break;
+      }
+      break;
+
+    case AVE_E_BV:             { value.Flt = starpar->Ebv;      break; }
+    case AVE_E_BV_ERR:         { value.Flt = starpar->dEbv;     break; }
+    case AVE_DISTANCE_MOD:     { value.Flt = starpar->DistMag;  break; }
+    case AVE_DISTANCE_MOD_ERR: { value.Flt = starpar->dDistMag; break; }
+    case AVE_M_R:     	       { value.Flt = starpar->M_r;      break; }
+    case AVE_M_R_ERR: 	       { value.Flt = starpar->dM_r;     break; }
+    case AVE_FEH:     	       { value.Flt = starpar->FeH;      break; }
+    case AVE_FEH_ERR: 	       { value.Flt = starpar->dFeH;     break; }
+    case AVE_URA_GALMODEL:     { value.Flt = starpar->uRA;      break; }
+    case AVE_UDEC_GALMODEL:    { value.Flt = starpar->uDEC;     break; }
 
     case AVE_TYPE:
@@ -324,4 +361,6 @@
     case AVE_TYPEFRAC:
       break;
+
+
   }
   return (value);
Index: /branches/eam_branches/ipp-20140904/Ohana/src/libdvo/src/dbExtractMeasures.c
===================================================================
--- /branches/eam_branches/ipp-20140904/Ohana/src/libdvo/src/dbExtractMeasures.c	(revision 37434)
+++ /branches/eam_branches/ipp-20140904/Ohana/src/libdvo/src/dbExtractMeasures.c	(revision 37435)
@@ -249,4 +249,33 @@
 	case MAG_OPTION_UC_DIST:
 	case MAG_OPTION_FLAGS:
+	case MAG_OPTION_X11_SM_OBJ: 
+	case MAG_OPTION_X12_SM_OBJ: 
+	case MAG_OPTION_X22_SM_OBJ: 
+	case MAG_OPTION_E1_SM_OBJ: 
+	case MAG_OPTION_E2_SM_OBJ: 
+	case MAG_OPTION_X11_SH_OBJ: 
+	case MAG_OPTION_X12_SH_OBJ: 
+	case MAG_OPTION_X22_SH_OBJ: 
+	case MAG_OPTION_E1_SH_OBJ: 
+	case MAG_OPTION_E2_SH_OBJ: 
+	case MAG_OPTION_X11_SM_PSF: 
+	case MAG_OPTION_X12_SM_PSF: 
+	case MAG_OPTION_X22_SM_PSF: 
+	case MAG_OPTION_E1_SM_PSF: 
+	case MAG_OPTION_E2_SM_PSF: 
+	case MAG_OPTION_X11_SH_PSF: 
+	case MAG_OPTION_X12_SH_PSF: 
+	case MAG_OPTION_X22_SH_PSF: 
+	case MAG_OPTION_E1_SH_PSF: 
+	case MAG_OPTION_E2_SH_PSF: 
+	case MAG_OPTION_F_AP_R5: 
+	case MAG_OPTION_F_ERR_AP_R5: 
+	case MAG_OPTION_F_STDEV_AP_R5: 
+	case MAG_OPTION_F_FILL_AP_R5: 
+	case MAG_OPTION_F_AP_R6: 
+	case MAG_OPTION_F_ERR_AP_R6: 
+	case MAG_OPTION_F_STDEV_AP_R6: 
+	case MAG_OPTION_F_FILL_AP_R6: 
+
 	case MAG_OPTION_NONE:
 	  break;
Index: /branches/eam_branches/ipp-20140904/Ohana/src/libdvo/src/dbFields.c
===================================================================
--- /branches/eam_branches/ipp-20140904/Ohana/src/libdvo/src/dbFields.c	(revision 37434)
+++ /branches/eam_branches/ipp-20140904/Ohana/src/libdvo/src/dbFields.c	(revision 37435)
@@ -28,8 +28,64 @@
 }
 
+int dbFieldNeedMeasure (dbField *fields, int Nfields) {
+  int i;
+  for (i = 0; i < Nfields; i++) {
+    if (fields[i].photcode == NULL) continue; // non-measure fields do not have a photcode
+    if (fields[i].photcode[0].type == PHOT_REF) return TRUE;
+    if (fields[i].photcode[0].type == PHOT_DEP) return TRUE;
+  }
+  return FALSE;
+}
+
+int dbFieldNeedLensobj (dbField *fields, int Nfields) {
+  int i;
+  for (i = 0; i < Nfields; i++) {
+    if (fields[i].magOption == MAG_OPTION_NONE) continue; // non-measure fields do not have a photcode
+
+    if (fields[i].magOption == MAG_OPTION_X11_SM_OBJ) return TRUE;
+    if (fields[i].magOption == MAG_OPTION_X12_SM_OBJ) return TRUE;
+    if (fields[i].magOption == MAG_OPTION_X22_SM_OBJ) return TRUE;
+    if (fields[i].magOption == MAG_OPTION_E1_SM_OBJ)  return TRUE;
+    if (fields[i].magOption == MAG_OPTION_E2_SM_OBJ)  return TRUE;
+    if (fields[i].magOption == MAG_OPTION_X11_SH_OBJ) return TRUE;
+    if (fields[i].magOption == MAG_OPTION_X12_SH_OBJ) return TRUE;
+    if (fields[i].magOption == MAG_OPTION_X22_SH_OBJ) return TRUE;
+    if (fields[i].magOption == MAG_OPTION_E1_SH_OBJ)  return TRUE;
+    if (fields[i].magOption == MAG_OPTION_E2_SH_OBJ)  return TRUE;
+    if (fields[i].magOption == MAG_OPTION_X11_SM_PSF) return TRUE;
+    if (fields[i].magOption == MAG_OPTION_X12_SM_PSF) return TRUE;
+    if (fields[i].magOption == MAG_OPTION_X22_SM_PSF) return TRUE;
+    if (fields[i].magOption == MAG_OPTION_E1_SM_PSF)  return TRUE;
+    if (fields[i].magOption == MAG_OPTION_E2_SM_PSF)  return TRUE;
+    if (fields[i].magOption == MAG_OPTION_X11_SH_PSF) return TRUE;
+    if (fields[i].magOption == MAG_OPTION_X12_SH_PSF) return TRUE;
+    if (fields[i].magOption == MAG_OPTION_X22_SH_PSF) return TRUE;
+    if (fields[i].magOption == MAG_OPTION_E1_SH_PSF)  return TRUE;
+    if (fields[i].magOption == MAG_OPTION_E2_SH_PSF)  return TRUE;
+  }
+  return FALSE;
+}
+
+int dbFieldNeedStarpar (dbField *fields, int Nfields) {
+  int i;
+  for (i = 0; i < Nfields; i++) {
+    if (fields[i].ID == AVE_E_BV)             return TRUE;
+    if (fields[i].ID == AVE_E_BV_ERR)         return TRUE;
+    if (fields[i].ID == AVE_DISTANCE_MOD)     return TRUE;
+    if (fields[i].ID == AVE_DISTANCE_MOD_ERR) return TRUE;
+    if (fields[i].ID == AVE_M_R)              return TRUE;
+    if (fields[i].ID == AVE_M_R_ERR)          return TRUE;
+    if (fields[i].ID == AVE_FEH)              return TRUE;
+    if (fields[i].ID == AVE_FEH_ERR)          return TRUE;
+    if (fields[i].ID == AVE_URA_GALMODEL)     return TRUE;
+    if (fields[i].ID == AVE_UDEC_GALMODEL)    return TRUE;
+  }
+  return FALSE;
+}
+
 dvoMagSourceType GetMagSource (char *string) {
 
-  if (!strcasecmp (string, "chip")) return (MAG_SRC_CHP);
-  if (!strcasecmp (string, "warp")) return (MAG_SRC_WRP);
+  if (!strcasecmp (string, "chip"))  return (MAG_SRC_CHP);
+  if (!strcasecmp (string, "warp"))  return (MAG_SRC_WRP);
   if (!strcasecmp (string, "stack")) return (MAG_SRC_STK);
 
@@ -66,89 +122,48 @@
 dvoMagOptionType GetMagOption (char *string) {
 
-  if (!strcasecmp (string, "mag"))          return (MAG_OPTION_MAG);
-  if (!strcasecmp (string, "err"))          return (MAG_OPTION_ERR);
-  if (!strcasecmp (string, "magerr"))       return (MAG_OPTION_ERR);
-  if (!strcasecmp (string, "flux"))         return (MAG_OPTION_FLUX);
-  if (!strcasecmp (string, "fluxerr"))      return (MAG_OPTION_FLUX_ERR);
-  if (!strcasecmp (string, "stdev"))        return (MAG_OPTION_STDEV);
-  if (!strcasecmp (string, "chisq"))        return (MAG_OPTION_CHISQ);
-  if (!strcasecmp (string, "min"))          return (MAG_OPTION_MIN);
-  if (!strcasecmp (string, "max"))          return (MAG_OPTION_MAX);
-  if (!strcasecmp (string, "ncode"))        return (MAG_OPTION_NCODE);
-  if (!strcasecmp (string, "nphot"))        return (MAG_OPTION_NPHOT);
-  if (!strcasecmp (string, "uc_dist"))      return (MAG_OPTION_UC_DIST);
-  if (!strcasecmp (string, "flags"))        return (MAG_OPTION_FLAGS);
+  if (!strcasecmp (string, "mag"))           return MAG_OPTION_MAG;
+  if (!strcasecmp (string, "err"))           return MAG_OPTION_ERR;
+  if (!strcasecmp (string, "magerr"))        return MAG_OPTION_ERR;
+  if (!strcasecmp (string, "flux"))          return MAG_OPTION_FLUX;
+  if (!strcasecmp (string, "fluxerr"))       return MAG_OPTION_FLUX_ERR;
+  if (!strcasecmp (string, "stdev"))         return MAG_OPTION_STDEV;
+  if (!strcasecmp (string, "chisq"))         return MAG_OPTION_CHISQ;
+  if (!strcasecmp (string, "min"))           return MAG_OPTION_MIN;
+  if (!strcasecmp (string, "max"))           return MAG_OPTION_MAX;
+  if (!strcasecmp (string, "ncode"))         return MAG_OPTION_NCODE;
+  if (!strcasecmp (string, "nphot"))         return MAG_OPTION_NPHOT;
+  if (!strcasecmp (string, "uc_dist"))       return MAG_OPTION_UC_DIST;
+  if (!strcasecmp (string, "flags"))         return MAG_OPTION_FLAGS;
+  if (!strcasecmp (string, "X11_SM_OBJ"))    return MAG_OPTION_X11_SM_OBJ; 
+  if (!strcasecmp (string, "X12_SM_OBJ"))    return MAG_OPTION_X12_SM_OBJ; 
+  if (!strcasecmp (string, "X22_SM_OBJ"))    return MAG_OPTION_X22_SM_OBJ; 
+  if (!strcasecmp (string, "E1_SM_OBJ"))     return MAG_OPTION_E1_SM_OBJ; 
+  if (!strcasecmp (string, "E2_SM_OBJ"))     return MAG_OPTION_E2_SM_OBJ; 
+  if (!strcasecmp (string, "X11_SH_OBJ"))    return MAG_OPTION_X11_SH_OBJ; 
+  if (!strcasecmp (string, "X12_SH_OBJ"))    return MAG_OPTION_X12_SH_OBJ; 
+  if (!strcasecmp (string, "X22_SH_OBJ"))    return MAG_OPTION_X22_SH_OBJ; 
+  if (!strcasecmp (string, "E1_SH_OBJ"))     return MAG_OPTION_E1_SH_OBJ; 
+  if (!strcasecmp (string, "E2_SH_OBJ"))     return MAG_OPTION_E2_SH_OBJ; 
+  if (!strcasecmp (string, "X11_SM_PSF"))    return MAG_OPTION_X11_SM_PSF; 
+  if (!strcasecmp (string, "X12_SM_PSF"))    return MAG_OPTION_X12_SM_PSF; 
+  if (!strcasecmp (string, "X22_SM_PSF"))    return MAG_OPTION_X22_SM_PSF; 
+  if (!strcasecmp (string, "E1_SM_PSF"))     return MAG_OPTION_E1_SM_PSF; 
+  if (!strcasecmp (string, "E2_SM_PSF"))     return MAG_OPTION_E2_SM_PSF; 
+  if (!strcasecmp (string, "X11_SH_PSF"))    return MAG_OPTION_X11_SH_PSF; 
+  if (!strcasecmp (string, "X12_SH_PSF"))    return MAG_OPTION_X12_SH_PSF; 
+  if (!strcasecmp (string, "X22_SH_PSF"))    return MAG_OPTION_X22_SH_PSF; 
+  if (!strcasecmp (string, "E1_SH_PSF"))     return MAG_OPTION_E1_SH_PSF; 
+  if (!strcasecmp (string, "E2_SH_PSF"))     return MAG_OPTION_E2_SH_PSF; 
+  // if (!strcasecmp (string, "F_AP_R5"))       return MAG_OPTION_F_AP_R5; 
+  // if (!strcasecmp (string, "F_ERR_AP_R5"))   return MAG_OPTION_F_ERR_AP_R5; 
+  // if (!strcasecmp (string, "F_STDEV_AP_R5")) return MAG_OPTION_F_STDEV_AP_R5; 
+  // if (!strcasecmp (string, "F_FILL_AP_R5"))  return MAG_OPTION_F_FILL_AP_R5; 
+  // if (!strcasecmp (string, "F_AP_R6"))       return MAG_OPTION_F_AP_R6; 
+  // if (!strcasecmp (string, "F_ERR_AP_R6"))   return MAG_OPTION_F_ERR_AP_R6; 
+  // if (!strcasecmp (string, "F_STDEV_AP_R6")) return MAG_OPTION_F_STDEV_AP_R6; 
+  // if (!strcasecmp (string, "F_FILL_AP_R6"))  return MAG_OPTION_F_FILL_AP_R6; 
 
   return MAG_OPTION_NONE;
 }
-
-# if (0)
-int GetMagMode (char *string) {
-
-  // these all imply PSF mags:
-  if (!strcasecmp (string, "inst"))        return (MAG_INST);
-  if (!strcasecmp (string, "cat"))         return (MAG_CAT);
-  if (!strcasecmp (string, "sys"))         return (MAG_SYS);
-  if (!strcasecmp (string, "rel"))         return (MAG_REL);
-  if (!strcasecmp (string, "cal"))         return (MAG_CAL);
-  if (!strcasecmp (string, "ave"))         return (MAG_AVE);
-  if (!strcasecmp (string, "ref"))         return (MAG_REF);
-  if (!strcasecmp (string, "err"))         return (MAG_ERR);
-  if (!strcasecmp (string, "aveerr"))      return (MAG_AVE_ERR);
-
-  // these are explicit PSF mags:
-  if (!strcasecmp (string, "psf_inst"))    return (MAG_INST);
-  if (!strcasecmp (string, "psf_cat"))     return (MAG_CAT);
-  if (!strcasecmp (string, "psf_sys"))     return (MAG_SYS);
-  if (!strcasecmp (string, "psf_rel"))     return (MAG_REL);
-  if (!strcasecmp (string, "psf_cal"))     return (MAG_CAL);
-  if (!strcasecmp (string, "psf_ave"))     return (MAG_AVE);
-  if (!strcasecmp (string, "psf_ref"))     return (MAG_REF);
-  if (!strcasecmp (string, "psf_err"))     return (MAG_ERR);
-  if (!strcasecmp (string, "psf_aveerr"))  return (MAG_AVE_ERR);
-
-  // these are aper mags:
-  if (!strcasecmp (string, "ap"))          return (MAG_APER);
-  if (!strcasecmp (string, "aper"))        return (MAG_APER);
-  if (!strcasecmp (string, "aperinst"))    return (MAG_APER_INST);
-  if (!strcasecmp (string, "aper_inst"))   return (MAG_APER_INST);
-  if (!strcasecmp (string, "aper_cat"))    return (MAG_APER_CAT);
-  if (!strcasecmp (string, "aper_sys"))    return (MAG_APER_SYS);
-  if (!strcasecmp (string, "aper_rel"))    return (MAG_APER_REL);
-  if (!strcasecmp (string, "aper_cal"))    return (MAG_APER_CAL);
-  if (!strcasecmp (string, "aper_ave"))    return (MAG_APER_AVE);
-  if (!strcasecmp (string, "aper_ref"))    return (MAG_APER_REF);
-  if (!strcasecmp (string, "aper_err"))    return (MAG_APER_ERR);
-
-  // these are kron mags:
-  if (!strcasecmp (string, "kron"))        return (MAG_KRON);
-  if (!strcasecmp (string, "kron_inst"))   return (MAG_KRON_INST);
-  if (!strcasecmp (string, "kron_cat"))    return (MAG_KRON_CAT);
-  if (!strcasecmp (string, "kron_sys"))    return (MAG_KRON_SYS);
-  if (!strcasecmp (string, "kron_rel"))    return (MAG_KRON_REL);
-  if (!strcasecmp (string, "kron_cal"))    return (MAG_KRON_CAL);
-  if (!strcasecmp (string, "kron_ave"))    return (MAG_KRON_AVE);
-  if (!strcasecmp (string, "kron_ref"))    return (MAG_KRON_REF);
-  if (!strcasecmp (string, "kron_err"))    return (MAG_KRON_ERR);
-  if (!strcasecmp (string, "kroninst"))    return (MAG_KRON_INST);
-  if (!strcasecmp (string, "kronerr"))     return (MAG_KRON_ERR);
-
-  // other fields:
-  if (!strcasecmp (string, "photflags"))   return (MAG_PHOT_FLAGS);
-  if (!strcasecmp (string, "flags"))       return (MAG_PHOT_FLAGS);
-  if (!strcasecmp (string, "chisq"))       return (MAG_CHISQ);
-  if (!strcasecmp (string, "ncode"))       return (MAG_NCODE);
-  if (!strcasecmp (string, "nphot"))       return (MAG_NPHOT);
-  if (!strcasecmp (string, "stdev"))       return (MAG_STDEV);
-  if (!strcasecmp (string, "min"))         return (MAG_MIN);
-  if (!strcasecmp (string, "max"))         return (MAG_MAX);
-  if (!strcasecmp (string, "ucdist"))      return (MAG_UC_DIST);
-  if (!strcasecmp (string, "fluxpsf"))     return (MAG_FLUX_PSF);
-  if (!strcasecmp (string, "fluxpsferr"))  return (MAG_FLUX_PSF_ERR);
-  if (!strcasecmp (string, "fluxkron"))    return (MAG_FLUX_KRON);
-  if (!strcasecmp (string, "fluxkronerr")) return (MAG_FLUX_KRON_ERR);
-  return (MAG_NONE);
-}
-# endif
 
 // field may be of the form mag:psf:inst:wrp.  except for the first subword, 
@@ -285,4 +300,5 @@
     fprintf (stderr, "ERROR: unknown mag/photocode argument %s\n", word);
     free (word);
+    return FALSE;
   }
 
@@ -441,5 +457,28 @@
   if (!strcasecmp (fieldName, "FLAT"))    	 ESCAPE (MEAS_FLAT,           OPIHI_FLT);
   if (!strcasecmp (fieldName, "CENTER_OFFSET"))  ESCAPE (MEAS_CENTER_OFFSET,  OPIHI_FLT);
-  // if (!strcasecmp (fieldName, "FLUX"))       	 ESCAPE (MEAS_FLUX_PSF,       OPIHI_FLT);
+
+  // individual lensing measurements are not grouped by photcode:
+  if (!strcasecmp (fieldName, "X11_SM_OBJ"))     ESCAPE (MEAS_X11_SM_OBJ,  OPIHI_FLT);
+  if (!strcasecmp (fieldName, "X12_SM_OBJ"))     ESCAPE (MEAS_X12_SM_OBJ,  OPIHI_FLT);
+  if (!strcasecmp (fieldName, "X22_SM_OBJ"))     ESCAPE (MEAS_X22_SM_OBJ,  OPIHI_FLT);
+  if (!strcasecmp (fieldName, "E1_SM_OBJ"))      ESCAPE (MEAS_E1_SM_OBJ,  OPIHI_FLT);
+  if (!strcasecmp (fieldName, "E2_SM_OBJ"))      ESCAPE (MEAS_E2_SM_OBJ,  OPIHI_FLT);
+  if (!strcasecmp (fieldName, "X11_SH_OBJ"))     ESCAPE (MEAS_X11_SH_OBJ,  OPIHI_FLT);
+  if (!strcasecmp (fieldName, "X12_SH_OBJ"))     ESCAPE (MEAS_X12_SH_OBJ,  OPIHI_FLT);
+  if (!strcasecmp (fieldName, "X22_SH_OBJ"))     ESCAPE (MEAS_X22_SH_OBJ,  OPIHI_FLT);
+  if (!strcasecmp (fieldName, "E1_SH_OBJ"))      ESCAPE (MEAS_E1_SH_OBJ,  OPIHI_FLT);
+  if (!strcasecmp (fieldName, "E2_SH_OBJ"))      ESCAPE (MEAS_E2_SH_OBJ,  OPIHI_FLT);
+  if (!strcasecmp (fieldName, "X11_SM_PSF"))     ESCAPE (MEAS_X11_SM_PSF,  OPIHI_FLT);
+  if (!strcasecmp (fieldName, "X12_SM_PSF"))     ESCAPE (MEAS_X12_SM_PSF,  OPIHI_FLT);
+  if (!strcasecmp (fieldName, "X22_SM_PSF"))     ESCAPE (MEAS_X22_SM_PSF,  OPIHI_FLT);
+  if (!strcasecmp (fieldName, "E1_SM_PSF"))      ESCAPE (MEAS_E1_SM_PSF,  OPIHI_FLT);
+  if (!strcasecmp (fieldName, "E2_SM_PSF"))      ESCAPE (MEAS_E2_SM_PSF,  OPIHI_FLT);
+  if (!strcasecmp (fieldName, "X11_SH_PSF"))     ESCAPE (MEAS_X11_SH_PSF,  OPIHI_FLT);
+  if (!strcasecmp (fieldName, "X12_SH_PSF"))     ESCAPE (MEAS_X12_SH_PSF,  OPIHI_FLT);
+  if (!strcasecmp (fieldName, "X22_SH_PSF"))     ESCAPE (MEAS_X22_SH_PSF,  OPIHI_FLT);
+  if (!strcasecmp (fieldName, "E1_SH_PSF"))      ESCAPE (MEAS_E1_SH_PSF,  OPIHI_FLT);
+  if (!strcasecmp (fieldName, "E2_SH_PSF"))      ESCAPE (MEAS_E2_SH_PSF,  OPIHI_FLT);
+
+  // if (!strcasecmp (fieldName, "FLUX"))           ESCAPE (MEAS_FLUX_PSF,       OPIHI_FLT);
   // if (!strcasecmp (fieldName, "FLUX_ERR"))       ESCAPE (MEAS_FLUX_PSF_ERR,   OPIHI_FLT);
   // if (!strcasecmp (fieldName, "FLUX_PSF"))       ESCAPE (MEAS_FLUX_PSF,       OPIHI_FLT);
@@ -524,4 +563,16 @@
   if (!strcasecmp (fieldName, "REF_COLOR"))   ESCAPE (AVE_REF_COLOR,   OPIHI_FLT);
 
+  if (!strcasecmp (fieldName, "E_BV"))             ESCAPE (AVE_E_BV          ,   OPIHI_FLT);
+  if (!strcasecmp (fieldName, "E_BV_ERR"))         ESCAPE (AVE_E_BV_ERR      ,   OPIHI_FLT);
+  if (!strcasecmp (fieldName, "DISTANCE_MOD"))     ESCAPE (AVE_DISTANCE_MOD  ,   OPIHI_FLT);
+  if (!strcasecmp (fieldName, "DISTANCE_MOD_ERR")) ESCAPE (AVE_DISTANCE_MOD_ERR, OPIHI_FLT);
+  if (!strcasecmp (fieldName, "M_R"))              ESCAPE (AVE_M_R           ,   OPIHI_FLT);
+  if (!strcasecmp (fieldName, "M_R_ERR"))          ESCAPE (AVE_M_R_ERR       ,   OPIHI_FLT);
+  if (!strcasecmp (fieldName, "FEH"))              ESCAPE (AVE_FEH           ,   OPIHI_FLT);
+  if (!strcasecmp (fieldName, "FEH_ERR"))          ESCAPE (AVE_FEH_ERR       ,   OPIHI_FLT);
+  if (!strcasecmp (fieldName, "URA_GALMODEL"))     ESCAPE (AVE_URA_GALMODEL  ,   OPIHI_FLT);
+  if (!strcasecmp (fieldName, "UDEC_GALMODEL"))    ESCAPE (AVE_UDEC_GALMODEL ,   OPIHI_FLT);
+
+
   // check for code:mode in photcode name 
   if (!ParsePhotcodeField (field, fieldName, AVE_PHOT)) {
Index: /branches/eam_branches/ipp-20140904/Ohana/src/libdvo/src/dvo_convert.c
===================================================================
--- /branches/eam_branches/ipp-20140904/Ohana/src/libdvo/src/dvo_convert.c	(revision 37434)
+++ /branches/eam_branches/ipp-20140904/Ohana/src/libdvo/src/dvo_convert.c	(revision 37435)
@@ -638,4 +638,6 @@
 // CONVERT_FORMAT ("DVO_STARPAR_PS1_V4",          PS1_V4,          PS1_V4);
   CONVERT_FORMAT ("DVO_STARPAR_PS1_V5",          PS1_V5,          PS1_V5);
+//  CONVERT_FORMAT ("DVO_STELLAR_PARAMS_PS1_V5",          PS1_V5,          PS1_V5);
+  // XXX fix in libauto: STELLAR_PARAMS to STARPAR
 # undef CONVERT_FORMAT
 
Index: /branches/eam_branches/ipp-20140904/Ohana/src/libdvo/src/dvo_photcode_ops.c
===================================================================
--- /branches/eam_branches/ipp-20140904/Ohana/src/libdvo/src/dvo_photcode_ops.c	(revision 37434)
+++ /branches/eam_branches/ipp-20140904/Ohana/src/libdvo/src/dvo_photcode_ops.c	(revision 37435)
@@ -1788,2 +1788,36 @@
   m2 = (Ns2 == -1) ? average[0].M : secfilt[Ns2].M;
 */
+
+/*** lensing *********************************************************************************/
+
+# define LENSFIELD(NAME) \
+  float LensValue_##NAME (PhotCode *code, Lensobj *lensobj) { \
+  if (code == NULL) return NAN; \
+  int Ns = photcodes->hashNsec[code->code]; \
+  float value = (Ns == -1) ? NAN : lensobj[Ns].NAME; \
+  return (value); \
+}
+
+LENSFIELD(X11_sm_obj);
+LENSFIELD(X12_sm_obj);
+LENSFIELD(X22_sm_obj);
+LENSFIELD(E1_sm_obj);
+LENSFIELD(E2_sm_obj);
+
+LENSFIELD(X11_sh_obj);
+LENSFIELD(X12_sh_obj);
+LENSFIELD(X22_sh_obj);
+LENSFIELD(E1_sh_obj);
+LENSFIELD(E2_sh_obj);
+
+LENSFIELD(X11_sm_psf);
+LENSFIELD(X12_sm_psf);
+LENSFIELD(X22_sm_psf);
+LENSFIELD(E1_sm_psf);
+LENSFIELD(E2_sm_psf);
+
+LENSFIELD(X11_sh_psf);
+LENSFIELD(X12_sh_psf);
+LENSFIELD(X22_sh_psf);
+LENSFIELD(E1_sh_psf);
+LENSFIELD(E2_sh_psf);
Index: /branches/eam_branches/ipp-20140904/Ohana/src/opihi/dvo/avextract.c
===================================================================
--- /branches/eam_branches/ipp-20140904/Ohana/src/opihi/dvo/avextract.c	(revision 37434)
+++ /branches/eam_branches/ipp-20140904/Ohana/src/opihi/dvo/avextract.c	(revision 37435)
@@ -5,5 +5,5 @@
   off_t i, j, n, m;
   int N, Npts, NPTS, last, next, state, Nfields, Nreturn, Ncstack, Nstack;
-  int Nsecfilt, VERBOSE, needMeasures;
+  int Nsecfilt, VERBOSE;
   char **cstack, name[1024];
   void *Signal;
@@ -137,5 +137,5 @@
   // this does all the work of re-packaging the command, calling it on the remote machines, then loading in the results
   if (PARALLEL && !HOST_ID) {
-      int status = HostTableParallelOps (skylist, argc, argv, RESULT_FILE, TRUE, 0, VERBOSE);
+    int status = HostTableParallelOps (skylist, argc, argv, RESULT_FILE, TRUE, 0, VERBOSE);
 
     dbFreeFields (fields, Nfields);
@@ -163,11 +163,8 @@
   }
 
-  // check the requested fields : are all average/secfilt entries, or do we need measures?
-  needMeasures = FALSE;
-  for (i = 0; !needMeasures && (i < Nfields); i++) {
-    if (fields[i].photcode == NULL) continue; // non-measure fields do not have a photcode
-    if (fields[i].photcode[0].type == PHOT_REF) needMeasures = TRUE;
-    if (fields[i].photcode[0].type == PHOT_DEP) needMeasures = TRUE;
-  }
+  // check the requested fields
+  int needMeasure = dbFieldNeedMeasure (fields, Nfields);
+  int needLensobj = dbFieldNeedLensobj (fields, Nfields);
+  int needStarpar = dbFieldNeedStarpar (fields, Nfields);
 
   // grab data from all selected sky regions
@@ -189,5 +186,7 @@
     catalog.filename = (HOST_ID || PARALLEL_LOCAL) ? hostfile : skylist[0].filename[i];
     catalog.catflags = LOAD_AVES | LOAD_SECF;
-    catalog.catflags |= needMeasures ? LOAD_MEAS : SKIP_MEAS;
+    catalog.catflags |= needMeasure ? LOAD_MEAS : SKIP_MEAS;
+    catalog.catflags |= needLensobj ? LOAD_LENSOBJ : SKIP_LENSOBJ;
+    catalog.catflags |= needStarpar ? LOAD_STARPAR : SKIP_STARPAR;
     catalog.Nsecfilt = 0;
 
@@ -205,10 +204,22 @@
       // XXX for measure values, this could be optimized for one loop over measures...
 
-      m = catalog.average[j].measureOffset;
-
       dbExtractAveragesInitAve ();  // reset counters for saved fields (costs very little)
 
+      Average *average = &catalog.average[j];
+
+      m = average->measureOffset;
+      Measure *measure = needMeasure ? &catalog.measure[m] : NULL;
+
+      m = average->lensobjOffset;
+      Lensobj *lensobj = needLensobj ? &catalog.lensobj[m] : NULL;
+
+      m = average->starparOffset;
+      StarPar *starpar = needStarpar ? &catalog.starpar[m] : NULL;
+
+      m = j*Nsecfilt;
+      SecFilt *secfilt = &catalog.secfilt[j*Nsecfilt];
+
       for (n = 0; n < Nfields; n++) {
-	values[n] = dbExtractAverages (&catalog.average[j], &catalog.secfilt[j*Nsecfilt], &catalog.measure[m], &fields[n]);
+	values[n] = dbExtractAverages (average, secfilt, measure, lensobj, starpar, &fields[n]);
       }
 
Index: /branches/eam_branches/ipp-20140904/Ohana/src/opihi/dvo/avmatch.c
===================================================================
--- /branches/eam_branches/ipp-20140904/Ohana/src/opihi/dvo/avmatch.c	(revision 37434)
+++ /branches/eam_branches/ipp-20140904/Ohana/src/opihi/dvo/avmatch.c	(revision 37435)
@@ -149,11 +149,8 @@
   }
 
-  // check the requested fields : are all average/secfilt entries, or do we need measures?
-  int needMeasures = FALSE;
-  for (i = 0; !needMeasures && (i < Nfields); i++) {
-    if (fields[i].photcode == NULL) continue; // assert this?
-    if (fields[i].photcode[0].type == PHOT_REF) needMeasures = TRUE;
-    if (fields[i].photcode[0].type == PHOT_DEP) needMeasures = TRUE;
-  }
+  // check the requested fields
+  int needMeasure = dbFieldNeedMeasure (fields, Nfields);
+  int needLensobj = dbFieldNeedLensobj (fields, Nfields);
+  int needStarpar = dbFieldNeedStarpar (fields, Nfields);
 
   /* create output storage vectors */
@@ -194,5 +191,7 @@
     catalog.filename = HOST_ID ? hostfile : skylist[0].filename[i];
     catalog.catflags = LOAD_AVES | LOAD_SECF;
-    catalog.catflags |= needMeasures ? LOAD_MEAS : SKIP_MEAS;
+    catalog.catflags |= needMeasure ? LOAD_MEAS    : SKIP_MEAS;
+    catalog.catflags |= needLensobj ? LOAD_LENSOBJ : SKIP_LENSOBJ;
+    catalog.catflags |= needStarpar ? LOAD_STARPAR : SKIP_STARPAR;
     catalog.Nsecfilt = 0;
 
@@ -219,10 +218,22 @@
       if (Ncat == -2) continue; // no matches to this point
 
-      m = catalog.average[Ncat].measureOffset;
+      Average *average = &catalog.average[Ncat];
+
+      m = average->measureOffset;
+      Measure *measure = needMeasure ? &catalog.measure[m] : NULL;
+
+      m = average->lensobjOffset;
+      Lensobj *lensobj = needLensobj ? &catalog.lensobj[m] : NULL;
+
+      m = average->starparOffset;
+      StarPar *starpar = needStarpar ? &catalog.starpar[m] : NULL;
+
+      m = j*Nsecfilt;
+      SecFilt *secfilt = &catalog.secfilt[j*Nsecfilt];
 
       // reset counters for saved fields, extract fields
       dbExtractAveragesInitAve (); 
       for (n = 0; n < Nfields; n++) {
-	values[n] = dbExtractAverages (&catalog.average[Ncat], &catalog.secfilt[Ncat*Nsecfilt], &catalog.measure[m], &fields[n]);
+	values[n] = dbExtractAverages (average, secfilt, measure, lensobj, starpar, &fields[n]);
       }
 
