Index: /branches/eam_branches/ipp-20150112/Ohana/src/libdvo/include/dvodb.h
===================================================================
--- /branches/eam_branches/ipp-20150112/Ohana/src/libdvo/include/dvodb.h	(revision 37847)
+++ /branches/eam_branches/ipp-20150112/Ohana/src/libdvo/include/dvodb.h	(revision 37848)
@@ -236,5 +236,5 @@
       MEAS_RA_GALMODEL,      // model pm prediction
       MEAS_DEC_GALMODEL,     // model pm prediction
-};
+} dvoMeasureType;
 
 /* average fields */
@@ -288,5 +288,5 @@
       AVE_RA_GALMODEL,      // model pm prediction
       AVE_DEC_GALMODEL,     // model pm prediction
-};
+} dvoAverageType;
 
 //       AVE_NPHOT, 
@@ -364,5 +364,5 @@
       IMAGE_REF_COLOR_BLUE,
       IMAGE_REF_COLOR_RED
-};
+} dvoImageType;
 
 enum {DVO_TABLE_AVERAGE, DVO_TABLE_MEASURE, DVO_TABLE_IMAGE};
@@ -382,5 +382,5 @@
   int extract;
   int table;
-  int ID;
+  int ID; // may be either dvoMeasureType or dvoAverageType
 
   dvoMagSourceType magSource; // chip, (forced) warp, stack [only relevant for averages]
Index: /branches/eam_branches/ipp-20150112/Ohana/src/libdvo/src/dbExtractAverages.c
===================================================================
--- /branches/eam_branches/ipp-20150112/Ohana/src/libdvo/src/dbExtractAverages.c	(revision 37847)
+++ /branches/eam_branches/ipp-20150112/Ohana/src/libdvo/src/dbExtractAverages.c	(revision 37848)
@@ -53,4 +53,5 @@
 
   // off_t i;
+  int n;
   dbValue value;
 
@@ -186,30 +187,7 @@
     case AVE_PHOT:
       // if we request mag:ave, use equiv for photcode (ie a given measure, say GPC1.g.XY01, will return g for mag:ave)
-      if  (field->photcode->type == PHOT_MAG) {
-	// this is an error
-	break;
-      }
-
-      // if we ask for 2MASS_K, etc (REF values), return NAN unless measure->code matches
-      if (field->photcode->type == PHOT_REF) {
-	// need to ensure measure exists.
-	break;
-      }
-
-      // if we ask for GPC1.g.XY03:rel, etc (DEP values), return NAN unless measure->code matches
-      if (field->photcode->type == PHOT_DEP) {
-	// again.
-	break;
-      }
-
-      /* in some cases below we need a measurement which matches the requested photcode.
-	 here is some sample code to find this.
-
-	  for (i = 0; i < average[0].Nmeasure; i++) {
-	    if (field->photcode->code != measure[i].photcode) continue;
-	    value.Flt = measure[i].M;
-	    break;
-	  }
-      */
+
+      // this is an error (no exposed photcodes should be of type PHOT_MAG)
+      if  (field->photcode->type == PHOT_MAG) break;
 
       switch (field->magOption) {
@@ -220,11 +198,37 @@
 	      break;
 	    case MAG_LEVEL_REF:
-	      // which measure is needed here?
-	      // PhotRef  (field->photcode, average, secfilt, measure, field->magClass, field->magSource); 
 	      break;
 	    case MAG_LEVEL_INST:
+	      // find an appropriate measure (if one exists)
+	      for (n = 0; n < average->Nmeasure; n++) {
+		if (field->photcode->code != measure[n].photcode) continue;
+		value.Flt = PhotInst (&measure[n], field->magClass); 
+		break;
+	      }
+	      break;
 	    case MAG_LEVEL_CAT:
+	      // find an appropriate measure (if one exists)
+	      for (n = 0; n < average->Nmeasure; n++) {
+		if (field->photcode->code != measure[n].photcode) continue;
+		value.Flt = PhotCat (&measure[n], field->magClass); 
+		break;
+	      }
+	      break;
 	    case MAG_LEVEL_SYS:
+	      // find an appropriate measure (if one exists)
+	      for (n = 0; n < average->Nmeasure; n++) {
+		if (field->photcode->code != measure[n].photcode) continue;
+		value.Flt = PhotSys  (&measure[n], average, secfilt, field->magClass); 
+		break;
+	      }
+	      break;
 	    case MAG_LEVEL_REL:
+	      // find an appropriate measure (if one exists)
+	      for (n = 0; n < average->Nmeasure; n++) {
+		if (field->photcode->code != measure[n].photcode) continue;
+		value.Flt = PhotRel (&measure[n], average, secfilt, field->magClass); 
+		break;
+	      }
+	      break;
 	    case MAG_LEVEL_CAL:
 	    case MAG_LEVEL_NONE:
@@ -243,4 +247,11 @@
 	    case MAG_LEVEL_SYS:
 	    case MAG_LEVEL_REL:
+	      // find an appropriate measure (if one exists)
+	      for (n = 0; n < average->Nmeasure; n++) {
+		if (field->photcode->code != measure[n].photcode) continue;
+		value.Flt = PhotErr (&measure[n], field->magClass); 
+		break;
+	      }
+	      break;
 	    case MAG_LEVEL_CAL:
 	    case MAG_LEVEL_NONE:
@@ -259,7 +270,35 @@
 	      break;
 	    case MAG_LEVEL_INST:
+	      // find an appropriate measure (if one exists)
+	      for (n = 0; n < average->Nmeasure; n++) {
+		if (field->photcode->code != measure[n].photcode) continue;
+		value.Flt = PhotFluxInst (&measure[n], field->magClass); 
+		break;
+	      }
+	      break;
 	    case MAG_LEVEL_CAT:
+	      // find an appropriate measure (if one exists)
+	      for (n = 0; n < average->Nmeasure; n++) {
+		if (field->photcode->code != measure[n].photcode) continue;
+		value.Flt = PhotFluxCat (&measure[n], field->magClass); 
+		break;
+	      }
+	      break;
 	    case MAG_LEVEL_SYS:
+	      // find an appropriate measure (if one exists)
+	      for (n = 0; n < average->Nmeasure; n++) {
+		if (field->photcode->code != measure[n].photcode) continue;
+		value.Flt = PhotFluxSys (&measure[n], average, secfilt, field->magClass); 
+		break;
+	      }
+	      break;
 	    case MAG_LEVEL_REL:
+	      // find an appropriate measure (if one exists)
+	      for (n = 0; n < average->Nmeasure; n++) {
+		if (field->photcode->code != measure[n].photcode) continue;
+		value.Flt = PhotFluxRel (&measure[n], average, secfilt, field->magClass); 
+		break;
+	      }
+	      break;
 	    case MAG_LEVEL_CAL:
 	    case MAG_LEVEL_NONE:
@@ -278,4 +317,11 @@
 	    case MAG_LEVEL_SYS:
 	    case MAG_LEVEL_REL:
+	      // find an appropriate measure (if one exists)
+	      for (n = 0; n < average->Nmeasure; n++) {
+		if (field->photcode->code != measure[n].photcode) continue;
+		value.Flt = PhotFluxInstErr (&measure[n], field->magClass); 
+		break;
+	      }
+	      break;
 	    case MAG_LEVEL_CAL:
 	    case MAG_LEVEL_NONE:
