Index: trunk/Ohana/src/libdvo/include/dvodb.h
===================================================================
--- trunk/Ohana/src/libdvo/include/dvodb.h	(revision 42793)
+++ trunk/Ohana/src/libdvo/include/dvodb.h	(revision 42821)
@@ -547,5 +547,5 @@
 
 dbValue      dbExtractAverages      PROTO((Average *average, SecFilt *secfilt, Measure *measure, Lensobj *lensobj, StarPar *starpar, GalPhot *galphot, dbField *field));
-dbValue      dbExtractMeasures      PROTO((Average *average, SecFilt *secfilt, Measure *measure, Lensing *lensing, StarPar *starpar, dbField *field));
+dbValue      dbExtractMeasures      PROTO((Average *average, SecFilt *secfilt, Lensobj *lensobj, Measure *measure, Lensing *lensing, StarPar *starpar, GalPhot *galphot, dbField *field));
 dbValue      dbExtractImages        PROTO((Image *image, off_t Nimage, off_t N, dbField *field));
 
Index: trunk/Ohana/src/libdvo/include/libdvo_astro.h
===================================================================
--- trunk/Ohana/src/libdvo/include/libdvo_astro.h	(revision 42793)
+++ trunk/Ohana/src/libdvo/include/libdvo_astro.h	(revision 42821)
@@ -20,4 +20,5 @@
   PROJ_TNX, // zenithal
   PROJ_DIS, // zenithal (TAN + polyterms)
+  PROJ_CAR, // cartesian (Plat-Carre)
   PROJ_LIN, // cartesian
   PROJ_PLY, // cartesian (allow polyterms)
Index: trunk/Ohana/src/libdvo/src/cmf-ps1-v5-r0.c
===================================================================
--- trunk/Ohana/src/libdvo/src/cmf-ps1-v5-r0.c	(revision 42793)
+++ trunk/Ohana/src/libdvo/src/cmf-ps1-v5-r0.c	(revision 42821)
@@ -96,14 +96,14 @@
     SWAP_BYTE (236); // SRC_CHIP_Y      
     SWAP_BYTE (238); // PADDING3        
-    SWAP_WORD (242); // MOMENTS_R1
-    SWAP_WORD (246); // MOMENTS_RH
-    SWAP_WORD (250); // KRON_FLUX
-    SWAP_WORD (254); // KRON_FLUX_ERR
-    SWAP_WORD (258); // KRON_FLUX_INNER
-    SWAP_WORD (262); // KRON_FLUX_OUTER
-    SWAP_WORD (266); // SKY_LIMIT_RAD
-    SWAP_WORD (270); // SKY_LIMIT_FLUX
-    SWAP_WORD (274); // SKY_LIMIT_SLOPE
-    SWAP_WORD (278); // FLAGS
+    SWAP_WORD (240); // MOMENTS_R1
+    SWAP_WORD (244); // MOMENTS_RH
+    SWAP_WORD (248); // KRON_FLUX
+    SWAP_WORD (252); // KRON_FLUX_ERR
+    SWAP_WORD (256); // KRON_FLUX_INNER
+    SWAP_WORD (260); // KRON_FLUX_OUTER
+    SWAP_WORD (264); // SKY_LIMIT_RAD
+    SWAP_WORD (268); // SKY_LIMIT_FLUX
+    SWAP_WORD (272); // SKY_LIMIT_SLOPE
+    SWAP_WORD (276); // FLAGS
     SWAP_WORD (280); // FLAGS2
     SWAP_BYTE (284); // N_FRAMES
Index: trunk/Ohana/src/libdvo/src/coordops.c
===================================================================
--- trunk/Ohana/src/libdvo/src/coordops.c	(revision 42793)
+++ trunk/Ohana/src/libdvo/src/coordops.c	(revision 42821)
@@ -1072,4 +1072,5 @@
   if (!strncmp(&ctype[4], "-TNX", 4)) return PROJ_TNX;
   if (!strncmp(&ctype[4], "-DIS", 4)) return PROJ_DIS;
+  if (!strncmp(&ctype[4], "-CAR", 4)) return PROJ_CAR;
   if (!strncmp(&ctype[4], "-LIN", 4)) return PROJ_LIN;
   if (!strncmp(&ctype[0], "GENE", 4)) return PROJ_LIN; // note ctype[0]
@@ -1094,4 +1095,5 @@
     case PROJ_TNX: strcpy(&ctype[4], "-TNX"); return TRUE;
     case PROJ_DIS: strcpy(&ctype[4], "-DIS"); return TRUE;
+    case PROJ_CAR: strcpy(&ctype[4], "-CAR"); return TRUE;
     case PROJ_LIN: strcpy(&ctype[4], "-LIN"); return TRUE;
     case PROJ_PLY: strcpy(&ctype[4], "-PLY"); return TRUE;
@@ -1118,4 +1120,5 @@
     case PROJ_DIS:
       return PROJ_MODE_ZENITHAL;
+    case PROJ_CAR: 
     case PROJ_LIN: 
     case PROJ_PLY: 
Index: trunk/Ohana/src/libdvo/src/dbExtractMeasures.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dbExtractMeasures.c	(revision 42793)
+++ trunk/Ohana/src/libdvo/src/dbExtractMeasures.c	(revision 42821)
@@ -85,5 +85,5 @@
 
 /* return measure.field based on the selection */
-dbValue dbExtractMeasures (Average *average, SecFilt *secfilt, Measure *measure, Lensing *lensing, StarPar *starpar, dbField *field) {
+dbValue dbExtractMeasures (Average *average, SecFilt *secfilt, Lensobj *lensobj, Measure *measure, Lensing *lensing, StarPar *starpar, GalPhot *galphot, dbField *field) {
 
   int Nsec;
@@ -264,63 +264,69 @@
 	  
 	  // the following values come from the mean lensobj table
-	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_E1_PSF: 
-	case MAG_OPTION_E2_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_F_AP_R7: 
-	case MAG_OPTION_F_ERR_AP_R7: 
-	case MAG_OPTION_F_STDEV_AP_R7: 
-	case MAG_OPTION_F_FILL_AP_R7: 
-	case MAG_OPTION_E1: 
-	case MAG_OPTION_E2: 
-
-	case MAG_OPTION_GAL_MAG:       
-	case MAG_OPTION_GAL_MAG_ERR:   
-	case MAG_OPTION_GAL_MAJ:       
-	case MAG_OPTION_GAL_MAJ_ERR:   
-	case MAG_OPTION_GAL_MIN:       
-	case MAG_OPTION_GAL_MIN_ERR:   
-	case MAG_OPTION_GAL_THETA:     
-	case MAG_OPTION_GAL_THETA_ERR: 
-	case MAG_OPTION_GAL_INDEX:     
-	case MAG_OPTION_GAL_CHISQ:     
-	case MAG_OPTION_GAL_NPIX:      
-	case MAG_OPTION_GAL_FLAGS:      
-	case MAG_OPTION_GAL_TYPE:      
-	case MAG_OPTION_GAL_OBJ_ID:
-	case MAG_OPTION_GAL_CAT_ID:
-	case MAG_OPTION_GAL_DET_ID:
-	case MAG_OPTION_GAL_IMAGE_ID:
-
-	case MAG_OPTION_NONE:
-	  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, average->Nlensobj); break; }
+	case MAG_OPTION_X12_SM_OBJ: { value.Flt = LensValue_X12_sm_obj (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_X22_SM_OBJ: { value.Flt = LensValue_X22_sm_obj (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_E1_SM_OBJ:  { value.Flt = LensValue_E1_sm_obj  (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_E2_SM_OBJ:  { value.Flt = LensValue_E2_sm_obj  (field->photcode, lensobj, average->Nlensobj); break; }
+
+	case MAG_OPTION_X11_SH_OBJ: { value.Flt = LensValue_X11_sh_obj (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_X12_SH_OBJ: { value.Flt = LensValue_X12_sh_obj (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_X22_SH_OBJ: { value.Flt = LensValue_X22_sh_obj (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_E1_SH_OBJ:  { value.Flt = LensValue_E1_sh_obj  (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_E2_SH_OBJ:  { value.Flt = LensValue_E2_sh_obj  (field->photcode, lensobj, average->Nlensobj); break; }
+
+	case MAG_OPTION_X11_SM_PSF: { value.Flt = LensValue_X11_sm_psf (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_X12_SM_PSF: { value.Flt = LensValue_X12_sm_psf (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_X22_SM_PSF: { value.Flt = LensValue_X22_sm_psf (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_E1_SM_PSF:  { value.Flt = LensValue_E1_sm_psf  (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_E2_SM_PSF:  { value.Flt = LensValue_E2_sm_psf  (field->photcode, lensobj, average->Nlensobj); break; }
+
+	case MAG_OPTION_X11_SH_PSF: { value.Flt = LensValue_X11_sh_psf (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_X12_SH_PSF: { value.Flt = LensValue_X12_sh_psf (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_X22_SH_PSF: { value.Flt = LensValue_X22_sh_psf (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_E1_SH_PSF:  { value.Flt = LensValue_E1_sh_psf  (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_E2_SH_PSF:  { value.Flt = LensValue_E2_sh_psf  (field->photcode, lensobj, average->Nlensobj); break; }
+
+	case MAG_OPTION_F_AP_R5:       { value.Flt = LensValue_F_ApR5  (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_F_ERR_AP_R5:   { value.Flt = LensValue_dF_ApR5 (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_F_STDEV_AP_R5: { value.Flt = LensValue_sF_ApR5 (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_F_FILL_AP_R5:  { value.Flt = LensValue_fF_ApR5 (field->photcode, lensobj, average->Nlensobj); break; }
+												
+	case MAG_OPTION_F_AP_R6:       { value.Flt = LensValue_F_ApR6  (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_F_ERR_AP_R6:   { value.Flt = LensValue_dF_ApR6 (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_F_STDEV_AP_R6: { value.Flt = LensValue_sF_ApR6 (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_F_FILL_AP_R6:  { value.Flt = LensValue_fF_ApR6 (field->photcode, lensobj, average->Nlensobj); break; }
+
+	case MAG_OPTION_F_AP_R7:       { value.Flt = LensValue_F_ApR7  (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_F_ERR_AP_R7:   { value.Flt = LensValue_dF_ApR7 (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_F_STDEV_AP_R7: { value.Flt = LensValue_sF_ApR7 (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_F_FILL_AP_R7:  { value.Flt = LensValue_fF_ApR7 (field->photcode, lensobj, average->Nlensobj); break; }
+
+	case MAG_OPTION_E1:  	       { value.Flt = LensValue_E1      (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_E2:  	       { value.Flt = LensValue_E2      (field->photcode, lensobj, average->Nlensobj); break; }
+
+	case MAG_OPTION_GAL_MAG:      { value.Flt = GalphotValue_GAL_MAG      (field->photcode, field->magClass, galphot, average->Ngalphot); break; }
+	case MAG_OPTION_GAL_MAG_ERR:  { value.Flt = GalphotValue_GAL_MAG_ERR  (field->photcode, field->magClass, galphot, average->Ngalphot); break; }
+	case MAG_OPTION_GAL_MAJ:      { value.Flt = GalphotValue_GAL_MAJ      (field->photcode, field->magClass, galphot, average->Ngalphot); break; }
+	case MAG_OPTION_GAL_MAJ_ERR:  { value.Flt = GalphotValue_GAL_MAJ_ERR  (field->photcode, field->magClass, galphot, average->Ngalphot); break; }
+	case MAG_OPTION_GAL_MIN:      { value.Flt = GalphotValue_GAL_MIN      (field->photcode, field->magClass, galphot, average->Ngalphot); break; }
+	case MAG_OPTION_GAL_MIN_ERR:  { value.Flt = GalphotValue_GAL_MIN_ERR  (field->photcode, field->magClass, galphot, average->Ngalphot); break; }
+	case MAG_OPTION_GAL_THETA:    { value.Flt = GalphotValue_GAL_THETA    (field->photcode, field->magClass, galphot, average->Ngalphot); break; }
+	case MAG_OPTION_GAL_THETA_ERR:{ value.Flt = GalphotValue_GAL_THETA_ERR(field->photcode, field->magClass, galphot, average->Ngalphot); break; }
+	case MAG_OPTION_GAL_INDEX:    { value.Flt = GalphotValue_GAL_INDEX    (field->photcode, field->magClass, galphot, average->Ngalphot); break; }
+	case MAG_OPTION_GAL_CHISQ:    { value.Flt = GalphotValue_GAL_CHISQ    (field->photcode, field->magClass, galphot, average->Ngalphot); break; }
+	case MAG_OPTION_GAL_NPIX:     { value.Flt = GalphotValue_GAL_NPIX     (field->photcode, field->magClass, galphot, average->Ngalphot); break; }
+	case MAG_OPTION_GAL_TYPE:     { value.Flt = GalphotValue_GAL_TYPE     (field->photcode, field->magClass, galphot, average->Ngalphot); break; }
+	case MAG_OPTION_GAL_FLAGS:    { value.Flt = GalphotValue_GAL_FLAGS    (field->photcode, field->magClass, galphot, average->Ngalphot); break; }
+
+	case MAG_OPTION_GAL_OBJ_ID:   { value.Flt = GalphotValue_GAL_OBJ_ID   (field->photcode, field->magClass, galphot, average->Ngalphot); break; }
+	case MAG_OPTION_GAL_CAT_ID:   { value.Flt = GalphotValue_GAL_CAT_ID   (field->photcode, field->magClass, galphot, average->Ngalphot); break; }
+	case MAG_OPTION_GAL_DET_ID:   { value.Flt = GalphotValue_GAL_DET_ID   (field->photcode, field->magClass, galphot, average->Ngalphot); break; }
+	case MAG_OPTION_GAL_IMAGE_ID: { value.Flt = GalphotValue_GAL_IMAGE_ID (field->photcode, field->magClass, galphot, average->Ngalphot); break; }
+
+	case MAG_OPTION_E1_PSF: break;
+	case MAG_OPTION_E2_PSF: break;
+	case MAG_OPTION_NONE: break;
       }
       break;
Index: trunk/Ohana/src/libdvo/src/dvo_photcode_utils.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_photcode_utils.c	(revision 42793)
+++ trunk/Ohana/src/libdvo/src/dvo_photcode_utils.c	(revision 42821)
@@ -1,3 +1,10 @@
 # include <dvo.h>
+
+/* the photcode table includes a number of SEC types, photcodes->Nsecfilt
+   hashNsec[code] returns the number in the sequence 0 - Nsecfilt for a given SEC code
+*/
+
+// these APIs originally just matched by number of the code, but they should
+// match by the *name* of the photcode (e.g., g = g)
 
 // Create a map between the secfilt values from one photcode table to another
@@ -11,20 +18,17 @@
   // loop over entries in the input table
   for (i = 0; i < NsecfiltIn; i++) {
-    int code  = input[0].codeNsec[i];
+    int inseq  = input[0].codeNsec[i];
+    myAssert (inseq > -1, "invalid SEC");
+    int incode   = input[0].hashcode[inseq];
     int entry = -1;
     // find the matching entry in the output table
     for (j = 0; j < NsecfiltOut; j++) {
-      int outcode = output[0].codeNsec[j];
-      if (code == outcode) {
-	 entry = j;
-	 break;
-      }
+      int outseq = output[0].codeNsec[j];
+      myAssert (outseq > -1, "invalid SEC");
+      int outcode   = output[0].hashcode[outseq];
+      if (strcmp (input[0].code[incode].name, output[0].code[outcode].name)) continue;
+      entry = j;
+      break;
     }
-    // if (entry == -1) {
-    //   // entry is missing fail (no printfs in this file)
-    //   free(map);
-    //   return(FALSE);
-    // }
-
     // if entry is still -1, we will skip this one (not map into the output db)
     map[i] = entry;
