Index: trunk/Ohana/src/opihi/dvo/dbFields.c
===================================================================
--- trunk/Ohana/src/opihi/dvo/dbFields.c	(revision 20936)
+++ trunk/Ohana/src/opihi/dvo/dbFields.c	(revision 21153)
@@ -30,15 +30,16 @@
 int GetMagMode (char *string) {
 
-  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, "chisq")) return (MAG_CHISQ);
-  if (!strcasecmp (string, "ncode")) return (MAG_NCODE);
-  if (!strcasecmp (string, "nphot")) return (MAG_NPHOT);
+  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, "photflags")) 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);
   return (MAG_NONE);
 }
@@ -75,12 +76,10 @@
   }
 
-
   // enforce compatibility
-  // XXX this is kind of poorly done
-  if ((code[0].type == PHOT_REF) && (*mode != MAG_ERR)) {
-    *mode = MAG_CAT;
-  }
-  if (code[0].type == PHOT_DEP) {
-    if (useDefault) {
+  if (useDefault) {
+    if (code[0].type == PHOT_REF) {
+      *mode = MAG_CAT;
+    }
+    if (code[0].type == PHOT_DEP) {
       *mode = MAG_REL;
     }
@@ -186,4 +185,5 @@
   if (!strcasecmp (fieldName, "DETID"))      ESCAPE (MEAS_DET_ID,     	  MAG_NONE, OPIHI_INT);
   if (!strcasecmp (fieldName, "OBJID"))      ESCAPE (MEAS_OBJ_ID,     	  MAG_NONE, OPIHI_INT);
+  if (!strcasecmp (fieldName, "CATID"))      ESCAPE (MEAS_CAT_ID,     	  MAG_NONE, OPIHI_INT);
   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);
@@ -206,5 +206,14 @@
   field->ID = MEAS_MAG;
   field->magMode = mode;
-  field->type = OPIHI_FLT;
+  switch (mode) {
+    case MAG_NCODE:
+    case MAG_NPHOT:
+    case MAG_PHOT_FLAGS:
+      field->type = OPIHI_INT;
+      break;
+    default:
+      field->type = OPIHI_FLT;
+      break;
+  }
   field->photcode = code;
   return (TRUE);
@@ -280,5 +289,14 @@
   field->ID = AVE_MAG;
   field->magMode = mode;
-  field->type = OPIHI_FLT;
+  switch (mode) {
+    case MAG_NCODE:
+    case MAG_NPHOT:
+    case MAG_PHOT_FLAGS:
+      field->type = OPIHI_INT;
+      break;
+    default:
+      field->type = OPIHI_FLT;
+      break;
+  }
   field->photcode = code;
   return (TRUE);
