Index: /branches/eam_branches/ipp-20140610/Ohana/src/libdvo/include/dvodb.h
===================================================================
--- /branches/eam_branches/ipp-20140610/Ohana/src/libdvo/include/dvodb.h	(revision 37009)
+++ /branches/eam_branches/ipp-20140610/Ohana/src/libdvo/include/dvodb.h	(revision 37010)
@@ -191,9 +191,4 @@
       AVE_NMISS, 
       AVE_NPOS, 
-      AVE_NPHOT, 
-      AVE_NCODE, 
-      AVE_MAG, 
-      AVE_dMAG, 
-      AVE_Xm, 
       AVE_OBJ_FLAGS, 
       AVE_TYPE, 
@@ -204,5 +199,12 @@
       AVE_EXTID_LO,
       AVE_REF_COLOR,
+      AVE_PHOT, // photometry class of values
 };
+
+//       AVE_NPHOT, 
+//       AVE_NCODE, 
+//       AVE_MAG, 
+//       AVE_dMAG, 
+//       AVE_Xm, 
 
 enum {IMAGE_ZERO, 
@@ -359,5 +361,5 @@
 
 int          GetMagMode             PROTO((char *string));
-int          ParsePhotcodeField     PROTO((dbField *field, char *fieldName));
+int          ParsePhotcodeField     PROTO((dbField *field, char *fieldName, int fieldID));
 int          ParseMeasureField      PROTO((dbField *field, char *fieldName));
 int          ParseAverageField      PROTO((dbField *field, char *fieldName));
Index: /branches/eam_branches/ipp-20140610/Ohana/src/libdvo/src/dbExtractAverages.c
===================================================================
--- /branches/eam_branches/ipp-20140610/Ohana/src/libdvo/src/dbExtractAverages.c	(revision 37009)
+++ /branches/eam_branches/ipp-20140610/Ohana/src/libdvo/src/dbExtractAverages.c	(revision 37010)
@@ -181,6 +181,125 @@
       break;
 
+    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;
+      }
+
+      switch (field->magOption) {
+	case MAG_OPTION_MAG:
+	  switch (field->magLevel) {
+	    case MAG_LEVEL_AVE:
+	      value.Flt = PhotAve  (field->photcode, average, secfilt, field->magClass, field->magSource); 
+	      break;
+	    case MAG_LEVEL_REF:
+	      // why is measure needed here?
+	      // PhotRef  (field->photcode, average, secfilt, measure, field->magClass, field->magSource); 
+	      break;
+	    case MAG_LEVEL_INST:
+	    case MAG_LEVEL_CAT:
+	    case MAG_LEVEL_SYS:
+	    case MAG_LEVEL_REL:
+	    case MAG_LEVEL_CAL:
+	    case MAG_LEVEL_NONE:
+	      break;
+	  }
+	  break;
+
+	case MAG_OPTION_ERR:
+	  switch (field->magLevel) {
+	    case MAG_LEVEL_AVE:
+	    case MAG_LEVEL_REF:
+	      value.Flt = PhotAveErr (field->photcode, average, secfilt, field->magClass, field->magSource);  
+	      break;
+	    case MAG_LEVEL_INST:
+	    case MAG_LEVEL_CAT:
+	    case MAG_LEVEL_SYS:
+	    case MAG_LEVEL_REL:
+	    case MAG_LEVEL_CAL:
+	    case MAG_LEVEL_NONE:
+	      break;
+	  }
+	  break;
+
+	case MAG_OPTION_FLUX:
+	  switch (field->magLevel) {
+	    case MAG_LEVEL_AVE:
+	      value.Flt = PhotFluxAve  (field->photcode, average, secfilt, field->magClass, field->magSource); 
+	      break;
+	    case MAG_LEVEL_REF:
+	      // value.Flt = PhotFluxRef  (equiv, average, secfilt, measure, field->magClass, field->magSource); 
+	      break;
+	    case MAG_LEVEL_INST:
+	    case MAG_LEVEL_CAT:
+	    case MAG_LEVEL_SYS:
+	    case MAG_LEVEL_REL:
+	    case MAG_LEVEL_CAL:
+	    case MAG_LEVEL_NONE:
+	      break;
+	  }
+	  break;
+
+	case MAG_OPTION_FLUX_ERR:
+	  switch (field->magLevel) {
+	    case MAG_LEVEL_AVE:
+	    case MAG_LEVEL_REF:
+	      // value.Flt = PhotFluxAveErr (equiv, average, secfilt, field->magClass, field->magSource);  
+	      break;
+	    case MAG_LEVEL_INST:
+	    case MAG_LEVEL_CAT:
+	    case MAG_LEVEL_SYS:
+	    case MAG_LEVEL_REL:
+	    case MAG_LEVEL_CAL:
+	    case MAG_LEVEL_NONE:
+	      break;
+	  }
+	  break;
+
+	case MAG_OPTION_STDEV:
+	case MAG_OPTION_CHISQ:
+	case MAG_OPTION_MIN:
+	case MAG_OPTION_MAX:
+	case MAG_OPTION_NCODE: {
+	  int Nsec = GetPhotcodeNsec (field->photcode->code);
+	  if (Nsec == -1) break;
+	  value.Int = secfilt[Nsec].Ncode;
+	  break;
+	}
+	case MAG_OPTION_NPHOT: {
+	  int Nsec = GetPhotcodeNsec (field->photcode->code);
+	  if (Nsec == -1) break;
+	  value.Int = secfilt[Nsec].Nused;
+	  break;
+	}
+	case MAG_OPTION_UC_DIST:
+	case MAG_OPTION_STACK_DET_ID:
+	  value.Int = PhotStackID (field->photcode, average, secfilt);
+	  break;
+	case MAG_OPTION_FLAGS: {
+	  int Nsec = GetPhotcodeNsec (field->photcode->code);
+	  if (Nsec == -1) break;
+	  value.Int = secfilt[Nsec].flags;
+	  break;
+	}
+	case MAG_OPTION_NONE:
+	  break;
+      }
+      break;
+
 # if (0)
-    case AVE_MAG:
       switch (field->magMode) {
 	case MAG_AVE:
Index: /branches/eam_branches/ipp-20140610/Ohana/src/libdvo/src/dbFields.c
===================================================================
--- /branches/eam_branches/ipp-20140610/Ohana/src/libdvo/src/dbFields.c	(revision 37009)
+++ /branches/eam_branches/ipp-20140610/Ohana/src/libdvo/src/dbFields.c	(revision 37010)
@@ -156,10 +156,10 @@
 // field may be of the form mag:psf:inst:wrp.  except for the first subword, 
 // the words may be in any order
-int ParsePhotcodeField (dbField *field, char *fieldName) {
+int ParsePhotcodeField (dbField *field, char *fieldName, int fieldID) {
 
   int j;
 
   // defaults:
-  field->ID = MEAS_PHOT; // change if not true in the end?
+  field->ID = fieldID; // change if not true in the end?
 
   // check what options are provided.  do not allow duplicate types
@@ -455,5 +455,5 @@
 
   // check for code:mode in photcode name 
-  if (!ParsePhotcodeField (field, fieldName)) {
+  if (!ParsePhotcodeField (field, fieldName, MEAS_PHOT)) {
     gprint (GP_ERR, "unknown field '%s' for measurement table in DVO database\n", fieldName);
     return (FALSE);
@@ -528,5 +528,5 @@
 
   // check for code:mode in photcode name 
-  if (!ParsePhotcodeField (field, fieldName)) {
+  if (!ParsePhotcodeField (field, fieldName, AVE_PHOT)) {
     gprint (GP_ERR, "unknown field '%s' for average table in DVO database\n", fieldName);
     return (FALSE);
