Index: /branches/dvo-mods-2007-02/Ohana/src/addstar/src/find_matches.c
===================================================================
--- /branches/dvo-mods-2007-02/Ohana/src/addstar/src/find_matches.c	(revision 12294)
+++ /branches/dvo-mods-2007-02/Ohana/src/addstar/src/find_matches.c	(revision 12295)
@@ -12,6 +12,9 @@
   Coords tcoords;
 
-  /* photcode data - must by of type DEP; options.photcode is equiv PRI/SEC photcode */
-  /* this function requires incoming stars to have the same (valid!) photcode.equiv value */
+  /* photcode data - must by of type DEP; options.photcode is equiv photcode for all input
+     images this function requires incoming stars to have the same photcode.equiv value.  if
+     this value is not a valid photcode (ie, 0), then no modification is made to the average 
+     magnitudes (Nsec will be -1) */
+
   Nsecfilt = GetPhotcodeNsecfilt ();
   Nsec     = GetPhotcodeNsec (options.photcode);
@@ -181,5 +184,5 @@
       catalog[0].measure[Nmeas].theta    = MIN ((0xffff/360.0)*stars[N].df, NO_MAG);
 	
-      /* set the average magnitude if not already set and photcode.equiv is valid */
+      /* set the average magnitude if not already set and if photcode.equiv is not 0 */
       /* in UPDATE mode, this value is not saved; use relphot to recalculate */
       if (Nsec > -1) { 
@@ -293,5 +296,5 @@
     /* XXX replace df here with theta, right? */
 
-    /* set the average magnitude if not already set and photcode.equiv is valid */
+    /* set the average magnitude if not already set and the photcode.equiv is not 0 */
     /* in UPDATE mode, this value is not saved; use relphot to recalculate */
     if (Nsec > -1) { 
Index: /branches/dvo-mods-2007-02/Ohana/src/addstar/src/find_matches_closest.c
===================================================================
--- /branches/dvo-mods-2007-02/Ohana/src/addstar/src/find_matches_closest.c	(revision 12294)
+++ /branches/dvo-mods-2007-02/Ohana/src/addstar/src/find_matches_closest.c	(revision 12295)
@@ -12,6 +12,9 @@
   int Nsecfilt, Nsec;
 
-  /* photcode data - must by of type DEP; options.photcode is equiv PRI/SEC photcode */
-  /* this function requires incoming stars to have the same photcode.equiv value */
+  /* photcode data - must by of type DEP; options.photcode is equiv photcode for all input
+     images this function requires incoming stars to have the same photcode.equiv value.  if
+     this value is not a valid photcode (ie, 0), then no modification is made to the average 
+     magnitudes (Nsec will be -1) */
+
   Nsecfilt = GetPhotcodeNsecfilt ();
   Nsec     = GetPhotcodeNsec (options.photcode);
@@ -199,5 +202,5 @@
     catalog[0].measure[Nmeas].theta    = MIN ((0xffff/360.0)*stars[N].df, NO_MAG);
 	
-    /* set the average magnitude if not already set and photcode.equiv is valid */
+    /* set the average magnitude if not already set and the photcode.equiv is not 0 */
     /* in UPDATE mode, this value is not saved; use relphot to recalculate */
     if (Nsec > -1) { 
@@ -290,5 +293,5 @@
     catalog[0].measure[Nmeas].theta    = MIN ((0xffff/360.0)*stars[N].df, NO_ERR);
 
-    /* set the average magnitude if not already set and photcode.equiv is valid */
+    /* set the average magnitude if not already set and the photcode.equiv is not 0 */
     /* in UPDATE mode, this value is not saved; use relphot to recalculate */
     if (Nsec > -1) { 
Index: /branches/dvo-mods-2007-02/Ohana/src/addstar/src/gstars.c
===================================================================
--- /branches/dvo-mods-2007-02/Ohana/src/addstar/src/gstars.c	(revision 12294)
+++ /branches/dvo-mods-2007-02/Ohana/src/addstar/src/gstars.c	(revision 12295)
@@ -7,5 +7,5 @@
   int i, j, Nfile, Nheader, NHEADER, Nimage, NIMAGE;
   int Nskip, Nhead, Ndata, done, status, mode, NinStars;
-  char **file;
+  char **file, *name;
   FILE *f;
   glob_t globList;
@@ -63,4 +63,9 @@
 
       ReadImageHeader (header, &image[i], photcode);
+      
+      /* find image rootname */
+      name = filebasename (file[i]);
+      snprintf (image[i].name, 32, name);
+      free (name);
     
       switch (mode) {
@@ -195,4 +200,7 @@
   if (VERBOSE) fprintf (stderr, "file %s has %d headers, including %d images\n", file[0], Nheader, Nimage);
 
+  /* find image rootname */
+  name = filebasename (file[0]);
+
   // now run through the images, interpret the headers and read the stars
   for (i = 0; i < Nimage; i++) {
@@ -201,4 +209,11 @@
       if (VERBOSE) fprintf (stderr, "reading header for %s (%s)\n", exthead[i], extdata[i]);
       ReadImageHeader (headers[Nhead], &image[i], 0);
+
+      // XXX use something to set the chip name? EXTNAME?
+      if (!strcmp(exthead[i], "PHU") && (Nimage == 1)) {
+	snprintf (image[i].name, 32, "%s", name);
+      } else {
+	snprintf (image[i].name, 32, "%s.%s", name, exthead[i]);
+      }
 
       // this is an error we should not encounter
@@ -217,4 +232,5 @@
       stars = MergeStars (stars, Nstars, inStars, image[i].nstar);
   }
+  free (name);
   *Nimages = Nimage;
   *images = image;
Index: /branches/dvo-mods-2007-02/Ohana/src/libdvo/src/LoadPhotcodesFITS.c
===================================================================
--- /branches/dvo-mods-2007-02/Ohana/src/libdvo/src/LoadPhotcodesFITS.c	(revision 12294)
+++ /branches/dvo-mods-2007-02/Ohana/src/libdvo/src/LoadPhotcodesFITS.c	(revision 12295)
@@ -74,9 +74,11 @@
   for (i = 0; i < Ncode; i++) {
     if (photcode[i].type == PHOT_DEP) {
-      Nsec = table[0].hashcode[photcode[i].equiv];
-      if ((Nsec >= Ncode) || (Nsec < 0)) {
-	fprintf (stderr, "reference for dependent photcode is not in photcodes\n");
-	free (photcode);
-	return FALSE;
+      if (photcode[i].equiv) {
+	Nsec = table[0].hashcode[photcode[i].equiv];
+	if ((Nsec >= Ncode) || (Nsec < 0)) {
+	  fprintf (stderr, "reference for dependent photcode is not in photcodes\n");
+	  free (photcode);
+	  return FALSE;
+	}
       }
       if (photcode[Nsec].type != PHOT_SEC) {
Index: /branches/dvo-mods-2007-02/Ohana/src/libdvo/src/LoadPhotcodesText.c
===================================================================
--- /branches/dvo-mods-2007-02/Ohana/src/libdvo/src/LoadPhotcodesText.c	(revision 12294)
+++ /branches/dvo-mods-2007-02/Ohana/src/libdvo/src/LoadPhotcodesText.c	(revision 12295)
@@ -52,4 +52,9 @@
     if (!strcmp (C1, "-")) { c1 = 0; }
     if (!strcmp (C2, "-")) { c2 = 0; }
+
+    if (!code) {
+	fprintf (stderr, "photcode values may not be 0: fix %s\n", name);
+	return (FALSE);
+    }
 
     photcode[Ncode].type = 0;
@@ -151,14 +156,17 @@
   for (i = 0; i < Ncode; i++) {
     if (photcode[i].type == PHOT_DEP) {
-      Nsec = table[0].hashcode[photcode[i].equiv];
-      if ((Nsec >= Ncode) || (Nsec < 0)) {
-	fprintf (stderr, "reference for dependent photcode is not in photcodes\n");
-	free (photcode);
-	return (FALSE);
-      }
-      if (photcode[Nsec].type != PHOT_SEC) {
-	fprintf (stderr, "reference for dependent photcode is not an average photcode\n");
-	free (photcode);
-	return (FALSE);
+      // photcode.equiv of 0 means "undefined"
+      if (photcode[i].equiv) {
+	Nsec = table[0].hashcode[photcode[i].equiv];
+	if ((Nsec >= Ncode) || (Nsec < 0)) {
+	  fprintf (stderr, "reference for dependent photcode is not a valid photcode\n");
+	  free (photcode);
+	  return (FALSE);
+	}
+	if (photcode[Nsec].type != PHOT_SEC) {
+	  fprintf (stderr, "reference for dependent photcode is not an average photcode\n");
+	  free (photcode);
+	  return (FALSE);
+	}
       }
     }
Index: /branches/dvo-mods-2007-02/Ohana/src/libdvo/src/dvo_photcode_ops.c
===================================================================
--- /branches/dvo-mods-2007-02/Ohana/src/libdvo/src/dvo_photcode_ops.c	(revision 12294)
+++ /branches/dvo-mods-2007-02/Ohana/src/libdvo/src/dvo_photcode_ops.c	(revision 12295)
@@ -173,8 +173,15 @@
 PhotCode *GetPhotcodebyNsec (int Nsec) {
   
+  int Ncode;
+  int Nseq;
+
   if (Nsec > photcodes[0].Nsecfilt) return (NULL);
   if (Nsec < 0) return (NULL);
   
-  return (&photcodes[0].code[photcodes[0].codeNsec[Nsec]]);
+  Ncode = photcodes[0].codeNsec[Nsec];
+  if (Ncode < 0) return (NULL);
+
+  Nseq = photcodes[0].hashcode[Ncode];
+  return (&photcodes[0].code[Nseq]);
 }
 
Index: /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/avextract.c
===================================================================
--- /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/avextract.c	(revision 12294)
+++ /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/avextract.c	(revision 12295)
@@ -4,5 +4,5 @@
   
   int i, j, m, N, NPTS, param;
-  int Nsec, mode;
+  int Nsecfilt, mode;
   char *RegionName, *RegionList, *p;
 
@@ -22,5 +22,5 @@
   /* load photcode information */
   if (!InitPhotcodes ()) goto escape;
-  Nsec = GetPhotcodeNsecfilt ();
+  Nsecfilt = GetPhotcodeNsecfilt ();
 
   /* interpret command-line options */
@@ -68,5 +68,5 @@
     for (j = 0; j < catalog.Naverage; j++) {
       m = catalog.average[j].offset;
-      vec[0].elements[N] = ExtractAverages (code, mode, &catalog.average[j], &catalog.secfilt[j*Nsec], &catalog.measure[m], param);
+      vec[0].elements[N] = ExtractAverages (code, mode, &catalog.average[j], &catalog.secfilt[j*Nsecfilt], &catalog.measure[m], param);
       N++;
       CHECK_REALLOCATE (vec[0].elements, float, NPTS, N, 2000);
Index: /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/calextract.c
===================================================================
--- /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/calextract.c	(revision 12294)
+++ /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/calextract.c	(revision 12295)
@@ -6,5 +6,5 @@
   
   int i, j, m, N, Nr, mode[2];
-  int Nsec, NSTAR;
+  int Nsecfilt, NSTAR;
   char *RegionName, *RegionList;
   double M1, M2, dM2, color;
@@ -26,5 +26,5 @@
   /* load photcode information */
   if (!InitPhotcodes ()) return (FALSE);
-  Nsec = GetPhotcodeNsecfilt ();
+  Nsecfilt = GetPhotcodeNsecfilt ();
 
   /* command line arguments */
@@ -78,5 +78,5 @@
       m = catalog.average[i].offset;
 
-      if (code[0][0].c1 && code[0][0].c2 && !PhotColor (&catalog.average[i], &catalog.secfilt[i*Nsec], &catalog.measure[m], code[0][0].c1, code[0][0].c2, &color)) continue;
+      if (code[0][0].c1 && code[0][0].c2 && !PhotColor (&catalog.average[i], &catalog.secfilt[i*Nsecfilt], &catalog.measure[m], code[0][0].c1, code[0][0].c2, &color)) continue;
 
       /* find data for filter 2 (PHOT_REF) */
@@ -91,5 +91,5 @@
 
       /* find data for filter 1 */
-      M1 = ExtractAverages (code[0], mode[0], &catalog.average[i], &catalog.secfilt[i*Nsec], &catalog.measure[m], AVE_MAG);
+      M1 = ExtractAverages (code[0], mode[0], &catalog.average[i], &catalog.secfilt[i*Nsecfilt], &catalog.measure[m], AVE_MAG);
       if (M1 == NO_MAG) continue;
 
@@ -99,10 +99,10 @@
       vec[NR ][0].elements[N] = catalog.average[i].R;
       vec[ND ][0].elements[N] = catalog.average[i].D;
-      vec[Nd1][0].elements[N] = ExtractAverages (code[0], mode[0], &catalog.average[i], &catalog.secfilt[i*Nsec], &catalog.measure[m], AVE_dMAG);
+      vec[Nd1][0].elements[N] = ExtractAverages (code[0], mode[0], &catalog.average[i], &catalog.secfilt[i*Nsecfilt], &catalog.measure[m], AVE_dMAG);
       vec[Nd2][0].elements[N] = dM2;
-      vec[Nx ][0].elements[N] = ExtractAverages (code[0], mode[0], &catalog.average[i], &catalog.secfilt[i*Nsec], &catalog.measure[m], AVE_Xm);
-      vec[Nc ][0].elements[N] = ExtractAverages (code[0], mode[0], &catalog.average[i], &catalog.secfilt[i*Nsec], &catalog.measure[m], AVE_NCODE);
-      vec[Np ][0].elements[N] = ExtractAverages (code[0], mode[0], &catalog.average[i], &catalog.secfilt[i*Nsec], &catalog.measure[m], AVE_NPHOT);
-      vec[Nt ][0].elements[N] = ExtractAverages (code[0], mode[0], &catalog.average[i], &catalog.secfilt[i*Nsec], &catalog.measure[m], AVE_NCRIT);
+      vec[Nx ][0].elements[N] = ExtractAverages (code[0], mode[0], &catalog.average[i], &catalog.secfilt[i*Nsecfilt], &catalog.measure[m], AVE_Xm);
+      vec[Nc ][0].elements[N] = ExtractAverages (code[0], mode[0], &catalog.average[i], &catalog.secfilt[i*Nsecfilt], &catalog.measure[m], AVE_NCODE);
+      vec[Np ][0].elements[N] = ExtractAverages (code[0], mode[0], &catalog.average[i], &catalog.secfilt[i*Nsecfilt], &catalog.measure[m], AVE_NPHOT);
+      vec[Nt ][0].elements[N] = ExtractAverages (code[0], mode[0], &catalog.average[i], &catalog.secfilt[i*Nsecfilt], &catalog.measure[m], AVE_NCRIT);
       N ++;
       if (N == NSTAR) {
Index: /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/calmextract.c
===================================================================
--- /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/calmextract.c	(revision 12294)
+++ /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/calmextract.c	(revision 12295)
@@ -7,5 +7,5 @@
   
   int i, j, k, m, N, N1, Nr, mode[2];
-  int NSTAR, Nstar, Nsec;
+  int NSTAR, Nstar, Nsecfilt;
   char *RegionName, *RegionList;
   double *M1, M2, dM2, color;
@@ -27,5 +27,5 @@
   /* load photcode information */
   if (!InitPhotcodes ()) goto escape;
-  Nsec = GetPhotcodeNsecfilt ();
+  Nsecfilt = GetPhotcodeNsecfilt ();
 
   /* command line arguments */
@@ -91,5 +91,5 @@
 
       /* PRI/SEC must have data for color term */
-      if (code[0][0].c1 && code[0][0].c2 && !PhotColor (&catalog.average[i], &catalog.secfilt[i*Nsec], &catalog.measure[m], code[0][0].c1, code[0][0].c2, &color)) continue;
+      if (code[0][0].c1 && code[0][0].c2 && !PhotColor (&catalog.average[i], &catalog.secfilt[i*Nsecfilt], &catalog.measure[m], code[0][0].c1, code[0][0].c2, &color)) continue;
 
       /* find data for filter 2 (REF) */
@@ -104,5 +104,5 @@
       
       /* find data for filter 1 */
-      M1 = ExtractMeasures (code[0], mode[0], &catalog.average[i], &catalog.secfilt[i*Nsec], &catalog.measure[m], &N1, MEAS_MAG);
+      M1 = ExtractMeasures (code[0], mode[0], &catalog.average[i], &catalog.secfilt[i*Nsecfilt], &catalog.measure[m], &N1, MEAS_MAG);
       if (N1 == 0) goto skip;
 
@@ -115,13 +115,13 @@
       }
 
-      ConcatMeasures (vec[Nt ], code[0], mode[0], &catalog.average[i], &catalog.secfilt[i*Nsec], &catalog.measure[m], N1, MEAS_TIME); 
-      ConcatMeasures (vec[Nz ], code[0], mode[0], &catalog.average[i], &catalog.secfilt[i*Nsec], &catalog.measure[m], N1, MEAS_AIRMASS); 
-      ConcatMeasures (vec[NT ], code[0], mode[0], &catalog.average[i], &catalog.secfilt[i*Nsec], &catalog.measure[m], N1, MEAS_EXPTIME); 
-      ConcatMeasures (vec[NP ], code[0], mode[0], &catalog.average[i], &catalog.secfilt[i*Nsec], &catalog.measure[m], N1, MEAS_PHOTCODE); 
-      ConcatMeasures (vec[Nd1], code[0], mode[0], &catalog.average[i], &catalog.secfilt[i*Nsec], &catalog.measure[m], N1, MEAS_dMAG); 
-      ConcatMeasures (vec[Nxc], code[0], mode[0], &catalog.average[i], &catalog.secfilt[i*Nsec], &catalog.measure[m], N1, MEAS_XCCD); 
-      ConcatMeasures (vec[Nyc], code[0], mode[0], &catalog.average[i], &catalog.secfilt[i*Nsec], &catalog.measure[m], N1, MEAS_YCCD); 
-      ConcatMeasures (vec[Nxm], code[0], mode[0], &catalog.average[i], &catalog.secfilt[i*Nsec], &catalog.measure[m], N1, MEAS_XMOSAIC); 
-      ConcatMeasures (vec[Nym], code[0], mode[0], &catalog.average[i], &catalog.secfilt[i*Nsec], &catalog.measure[m], N1, MEAS_YMOSAIC); 
+      ConcatMeasures (vec[Nt ], code[0], mode[0], &catalog.average[i], &catalog.secfilt[i*Nsecfilt], &catalog.measure[m], N1, MEAS_TIME); 
+      ConcatMeasures (vec[Nz ], code[0], mode[0], &catalog.average[i], &catalog.secfilt[i*Nsecfilt], &catalog.measure[m], N1, MEAS_AIRMASS); 
+      ConcatMeasures (vec[NT ], code[0], mode[0], &catalog.average[i], &catalog.secfilt[i*Nsecfilt], &catalog.measure[m], N1, MEAS_EXPTIME); 
+      ConcatMeasures (vec[NP ], code[0], mode[0], &catalog.average[i], &catalog.secfilt[i*Nsecfilt], &catalog.measure[m], N1, MEAS_PHOTCODE); 
+      ConcatMeasures (vec[Nd1], code[0], mode[0], &catalog.average[i], &catalog.secfilt[i*Nsecfilt], &catalog.measure[m], N1, MEAS_dMAG); 
+      ConcatMeasures (vec[Nxc], code[0], mode[0], &catalog.average[i], &catalog.secfilt[i*Nsecfilt], &catalog.measure[m], N1, MEAS_XCCD); 
+      ConcatMeasures (vec[Nyc], code[0], mode[0], &catalog.average[i], &catalog.secfilt[i*Nsecfilt], &catalog.measure[m], N1, MEAS_YCCD); 
+      ConcatMeasures (vec[Nxm], code[0], mode[0], &catalog.average[i], &catalog.secfilt[i*Nsecfilt], &catalog.measure[m], N1, MEAS_XMOSAIC); 
+      ConcatMeasures (vec[Nym], code[0], mode[0], &catalog.average[i], &catalog.secfilt[i*Nsecfilt], &catalog.measure[m], N1, MEAS_YMOSAIC); 
 
       for (j = 0; j < N1; j++, N++) {
Index: /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/ccd.c
===================================================================
--- /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/ccd.c	(revision 12294)
+++ /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/ccd.c	(revision 12295)
@@ -7,5 +7,5 @@
   int i, m, k, Npts, NPTS, N;
   int N1, N2, i1, i2, mode[4];
-  int Nsec, KeepNulls;
+  int Nsecfilt, KeepNulls;
 
   Catalog catalog;
@@ -24,5 +24,5 @@
   /* load photcode information */
   if (!InitPhotcodes ()) goto escape;
-  Nsec = GetPhotcodeNsecfilt ();
+  Nsecfilt = GetPhotcodeNsecfilt ();
 
   /* interpret command-line options */
@@ -76,9 +76,9 @@
 
       SetSelectionParam (0);
-      M1 = ExtractDMag (&code[0], &mode[0], &catalog.average[i], &catalog.secfilt[i*Nsec], &catalog.measure[m], &N1);
+      M1 = ExtractDMag (&code[0], &mode[0], &catalog.average[i], &catalog.secfilt[i*Nsecfilt], &catalog.measure[m], &N1);
       if (N1 == 0) goto skip;
 
       SetSelectionParam (2);
-      M2 = ExtractDMag (&code[2], &mode[2], &catalog.average[i], &catalog.secfilt[i*Nsec], &catalog.measure[m], &N2);
+      M2 = ExtractDMag (&code[2], &mode[2], &catalog.average[i], &catalog.secfilt[i*Nsecfilt], &catalog.measure[m], &N2);
       if (N2 == 0) {
 	if (KeepNulls) {
Index: /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/cmd.c
===================================================================
--- /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/cmd.c	(revision 12294)
+++ /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/cmd.c	(revision 12295)
@@ -7,5 +7,5 @@
   int i, j, m, i1, i3, N1, N3, N;
   int Npts, NPTS, mode[3];
-  int Nsec, KeepNulls;
+  int Nsecfilt, KeepNulls;
 
   PhotCode *code[3];
@@ -24,5 +24,5 @@
   /* load photcode information */
   if (!InitPhotcodes ()) goto escape;
-  Nsec = GetPhotcodeNsecfilt ();
+  Nsecfilt = GetPhotcodeNsecfilt ();
 
   /* interpret command-line options */
@@ -74,9 +74,9 @@
 
       SetSelectionParam (0);
-      M1 = ExtractDMag (code, mode, &catalog.average[i], &catalog.secfilt[i*Nsec], &catalog.measure[m], &N1);
+      M1 = ExtractDMag (code, mode, &catalog.average[i], &catalog.secfilt[i*Nsecfilt], &catalog.measure[m], &N1);
       if (N1 == 0) goto skip;
 
       SetSelectionParam (2);
-      M3 = ExtractMagnitudes (code[2], mode[2], &catalog.average[i], &catalog.secfilt[i*Nsec], &catalog.measure[m], &N3);
+      M3 = ExtractMagnitudes (code[2], mode[2], &catalog.average[i], &catalog.secfilt[i*Nsecfilt], &catalog.measure[m], &N3);
       if (N3 == 0) {
 	if (KeepNulls) {
Index: /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/ddmags.c
===================================================================
--- /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/ddmags.c	(revision 12294)
+++ /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/ddmags.c	(revision 12295)
@@ -7,5 +7,5 @@
   int i, m, k, N, Npts, NPTS;
   int N1, N2, i1, i2, mode[4];
-  int Nsec, KeepNulls;
+  int Nsecfilt, KeepNulls;
 
   Catalog catalog;
@@ -24,5 +24,5 @@
   /* load photcode information */
   if (!InitPhotcodes ()) goto escape;
-  Nsec = GetPhotcodeNsecfilt ();
+  Nsecfilt = GetPhotcodeNsecfilt ();
 
   /* interpret command-line options */
@@ -79,9 +79,9 @@
 
       SetSelectionParam (0);
-      M1 = ExtractDMag (&code[0], &mode[0], &catalog.average[i], &catalog.secfilt[i*Nsec], &catalog.measure[m], &N1);
+      M1 = ExtractDMag (&code[0], &mode[0], &catalog.average[i], &catalog.secfilt[i*Nsecfilt], &catalog.measure[m], &N1);
       if (N1 == 0) goto skip;
 
       SetSelectionParam (2);
-      M2 = ExtractDMag (&code[2], &mode[2], &catalog.average[i], &catalog.secfilt[i*Nsec], &catalog.measure[m], &N2);
+      M2 = ExtractDMag (&code[2], &mode[2], &catalog.average[i], &catalog.secfilt[i*Nsecfilt], &catalog.measure[m], &N2);
       if (N2 == 0) {
 	if (KeepNulls) {
Index: /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/dmagaves.c
===================================================================
--- /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/dmagaves.c	(revision 12294)
+++ /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/dmagaves.c	(revision 12295)
@@ -7,5 +7,5 @@
   int i, j, k, m, N1;
   int Npts, NPTS, param, mode[3];
-  int Nsec;
+  int Nsecfilt;
 
   PhotCode *code[3];
@@ -25,5 +25,5 @@
   /* load photcode information */
   if (!InitPhotcodes ()) goto escape;
-  Nsec = GetPhotcodeNsecfilt ();
+  Nsecfilt = GetPhotcodeNsecfilt ();
 
   /* interpret command-line options */
@@ -68,9 +68,9 @@
 
       SetSelectionParam (0);
-      M1 = ExtractDMag (code, mode, &catalog.average[i], &catalog.secfilt[i*Nsec], &catalog.measure[m], &N1);
+      M1 = ExtractDMag (code, mode, &catalog.average[i], &catalog.secfilt[i*Nsecfilt], &catalog.measure[m], &N1);
       if (N1 == 0) goto skip;
 
       SetSelectionParam (2);
-      M2 = ExtractAverages (code[2], mode[2], &catalog.average[i], &catalog.secfilt[i*Nsec], &catalog.measure[m], param);
+      M2 = ExtractAverages (code[2], mode[2], &catalog.average[i], &catalog.secfilt[i*Nsecfilt], &catalog.measure[m], param);
 
       for (k = 0; k < N1; k++) {
Index: /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/dmagmeas.c
===================================================================
--- /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/dmagmeas.c	(revision 12294)
+++ /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/dmagmeas.c	(revision 12295)
@@ -7,5 +7,5 @@
   int i, j, m, i1, i3, N1, N3, N;
   int Npts, NPTS, param, mode[3];
-  int Nsec, KeepNulls;
+  int Nsecfilt, KeepNulls;
 
   Catalog catalog;
@@ -25,5 +25,5 @@
   /* load photcode information */
   if (!InitPhotcodes ()) goto escape;
-  Nsec = GetPhotcodeNsecfilt ();
+  Nsecfilt = GetPhotcodeNsecfilt ();
 
   /* interpret command-line options */
@@ -76,9 +76,9 @@
 
       SetSelectionParam (0);
-      M1 = ExtractDMag (code, mode, &catalog.average[i], &catalog.secfilt[i*Nsec], &catalog.measure[m], &N1);
+      M1 = ExtractDMag (code, mode, &catalog.average[i], &catalog.secfilt[i*Nsecfilt], &catalog.measure[m], &N1);
       if (N1 == 0) goto skip;
 
       SetSelectionParam (2);
-      M3 = ExtractMeasures (code[2], mode[2], &catalog.average[i], &catalog.secfilt[i*Nsec], &catalog.measure[m], &N3, param);
+      M3 = ExtractMeasures (code[2], mode[2], &catalog.average[i], &catalog.secfilt[i*Nsecfilt], &catalog.measure[m], &N3, param);
       if (N3 == 0) {
 	if (KeepNulls) {
Index: /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/dmags.c
===================================================================
--- /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/dmags.c	(revision 12294)
+++ /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/dmags.c	(revision 12295)
@@ -7,5 +7,5 @@
   int i, j, m, i1, i3, N1, N3, N;
   int Npts, NPTS, mode[3];
-  int Nsec, KeepNulls;
+  int Nsecfilt, KeepNulls;
 
   PhotCode *code[3];
@@ -24,5 +24,5 @@
   /* load photcode information */
   if (!InitPhotcodes ()) goto escape;
-  Nsec = GetPhotcodeNsecfilt ();
+  Nsecfilt = GetPhotcodeNsecfilt ();
 
   /* interpret command-line options */
@@ -74,9 +74,9 @@
 
       SetSelectionParam (0);
-      M1 = ExtractDMag (code, mode, &catalog.average[i], &catalog.secfilt[i*Nsec], &catalog.measure[m], &N1);
+      M1 = ExtractDMag (code, mode, &catalog.average[i], &catalog.secfilt[i*Nsecfilt], &catalog.measure[m], &N1);
       if (N1 == 0) goto skip;
 
       SetSelectionParam (2);
-      M3 = ExtractMagnitudes (code[2], mode[2], &catalog.average[i], &catalog.secfilt[i*Nsec], &catalog.measure[m], &N3);
+      M3 = ExtractMagnitudes (code[2], mode[2], &catalog.average[i], &catalog.secfilt[i*Nsecfilt], &catalog.measure[m], &N3);
       if (N3 == 0) {
 	if (KeepNulls) {
Index: /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/dmt.c
===================================================================
--- /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/dmt.c	(revision 12294)
+++ /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/dmt.c	(revision 12295)
@@ -5,5 +5,5 @@
   
   int i, m, k, N, Ngraph, SaveVectors;
-  int Ns, Nsec, NPTS;
+  int Nsec, Nsecfilt, NPTS;
   double Radius;
   float dt1, dt2, dmt1, dmt2;
@@ -50,6 +50,6 @@
     return (FALSE);
   }
-  Nsec = GetPhotcodeNsecfilt();
-  Ns = GetPhotcodeNsec (code[0].code);
+  Nsecfilt = GetPhotcodeNsecfilt();
+  Nsec = GetPhotcodeNsec (code[0].code);
 
   Radius = MAX (fabs(graphsky.xmax), fabs(graphsky.ymax));
@@ -84,5 +84,5 @@
       if (catalog.average[i].Nm != 3) continue;
       m = catalog.average[i].offset;
-      M0 = (Ns == -1) ? NO_MAG : catalog.secfilt[i*Nsec+Ns].M;
+      M0 = catalog.secfilt[i*Nsecfilt+Nsec].M;
       M1 = PhotCat (&catalog.measure[m+0]);
       M2 = PhotCat (&catalog.measure[m+1]);
Index: /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/fitcolors.c
===================================================================
--- /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/fitcolors.c	(revision 12294)
+++ /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/fitcolors.c	(revision 12295)
@@ -12,5 +12,5 @@
   int i, k, m, N, NP1, NP2, NP, Np, Npts, NPTS;
   int N1, N2, i1, i2, mode[4];
-  int Nsec, status;
+  int Nsecfilt, status;
   void *oldsignal;
   char *RegionName, *RegionList;
@@ -43,5 +43,5 @@
   /* load photcode information */
   if (!InitPhotcodes ()) goto escape;
-  Nsec = GetPhotcodeNsecfilt ();
+  Nsecfilt = GetPhotcodeNsecfilt ();
 
   /* interpret command-line options */
@@ -218,9 +218,9 @@
 
 	  SetSelectionParam (0);
-	  M1 = ExtractDMag (&code[0], &mode[0], &catalog[k].average[i], &catalog[k].secfilt[i*Nsec], &catalog[k].measure[m], &N1);
+	  M1 = ExtractDMag (&code[0], &mode[0], &catalog[k].average[i], &catalog[k].secfilt[i*Nsecfilt], &catalog[k].measure[m], &N1);
 	  if (N1 == 0) goto skip_star;
 
 	  SetSelectionParam (2);
-	  M2 = ExtractDMag (&code[2], &mode[2], &catalog[k].average[i], &catalog[k].secfilt[i*Nsec], &catalog[k].measure[m], &N2);
+	  M2 = ExtractDMag (&code[2], &mode[2], &catalog[k].average[i], &catalog[k].secfilt[i*Nsecfilt], &catalog[k].measure[m], &N2);
 	  if (N2 == 0) goto skip_star;
 
Index: /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/fitsed.c
===================================================================
--- /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/fitsed.c	(revision 12294)
+++ /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/fitsed.c	(revision 12295)
@@ -25,5 +25,5 @@
   int *hashcode;
   int i, j, k, m, N, done, Nfit;
-  int Nsec, status;
+  int Nsecfilt, status;
   void *oldsignal;
   char *RegionName, *RegionList;
@@ -78,5 +78,5 @@
   /* load photcode information */
   if (!InitPhotcodes ()) goto escape;
-  Nsec = GetPhotcodeNsecfilt ();
+  Nsecfilt = GetPhotcodeNsecfilt ();
 
   /* interpret command-line options */
Index: /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/gstar.c
===================================================================
--- /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/gstar.c	(revision 12294)
+++ /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/gstar.c	(revision 12295)
@@ -1,5 +1,5 @@
 # include "dvoshell.h"
 
-void initPhotcodeSequence (int Nsec);
+void initPhotcodeSequence (int Nsecfilt);
 void freePhotcodeSequence ();
 void printPhotcodeSequence (Average *average, SecFilt *secfilt, int entry, int type);
@@ -11,5 +11,5 @@
   double Mcat, Mrel;
   float *RA, *DEC;
-  int i, j, k, m, N, *N1, Nsec, NPTS, QUIET;
+  int i, j, k, m, N, *N1, Nsecfilt, NPTS, QUIET;
   int Nstars, found, GetMeasures, Nlo, Nhi;
   int SaveVectors;
@@ -22,5 +22,5 @@
 
   if (!InitPhotcodes ()) return (FALSE);
-  Nsec = GetPhotcodeNsecfilt ();
+  Nsecfilt = GetPhotcodeNsecfilt ();
 
   QUIET = FALSE;
@@ -127,5 +127,5 @@
   }
 
-  initPhotcodeSequence (Nsec);
+  initPhotcodeSequence (Nsecfilt);
 
   for (i = Nlo; (i < catalog.Naverage) && !found; i++) {
@@ -144,17 +144,17 @@
       
 	/* filter names */
-	for (j = 0; j < Nsec + 1; j++) printPhotcodeSequence (&catalog.average[k], &catalog.secfilt[Nsec*k], j, 3);
+	for (j = 0; j < Nsecfilt; j++) printPhotcodeSequence (&catalog.average[k], &catalog.secfilt[Nsecfilt*k], j, 3);
 	gprint (GP_LOG, "\n");
 
 	/* average mags */
-	for (j = 0; j < Nsec + 1; j++) printPhotcodeSequence (&catalog.average[k], &catalog.secfilt[Nsec*k], j, 0);
+	for (j = 0; j < Nsecfilt; j++) printPhotcodeSequence (&catalog.average[k], &catalog.secfilt[Nsecfilt*k], j, 0);
 	gprint (GP_LOG, "\n");
 
 	/* average mag errors */
-	for (j = 0; j < Nsec + 1; j++) printPhotcodeSequence (&catalog.average[k], &catalog.secfilt[Nsec*k], j, 1);
+	for (j = 0; j < Nsecfilt; j++) printPhotcodeSequence (&catalog.average[k], &catalog.secfilt[Nsecfilt*k], j, 1);
 	gprint (GP_LOG, "\n");
 
 	/* average mag chisq */
-	for (j = 0; j < Nsec + 1; j++) printPhotcodeSequence (&catalog.average[k], &catalog.secfilt[Nsec*k], j, 2);
+	for (j = 0; j < Nsecfilt; j++) printPhotcodeSequence (&catalog.average[k], &catalog.secfilt[Nsecfilt*k], j, 2);
 	gprint (GP_LOG, "\n");
       }
@@ -165,5 +165,5 @@
 
 	  Mcat = PhotCat (&catalog.measure[m]);
-	  Mrel = PhotRel (&catalog.measure[m], &catalog.average[k], &catalog.secfilt[k*Nsec]);
+	  Mrel = PhotRel (&catalog.measure[m], &catalog.average[k], &catalog.secfilt[k*Nsecfilt]);
 
 	  if (GetMeasures && !QUIET) {
@@ -223,5 +223,5 @@
 static int *sequence = NULL;
 
-void initPhotcodeSequence (int Nsec) {
+void initPhotcodeSequence (int Nsecfilt) {
 
   int j;
@@ -230,9 +230,9 @@
 
   // sequence contains, in desired order, secfilt number (0 == pri)
-  ALLOCATE (sequence, int, Nsec + 1);
-  ALLOCATE (codeNumber, int, Nsec + 1);
+  ALLOCATE (sequence, int, Nsecfilt);
+  ALLOCATE (codeNumber, int, Nsecfilt);
   
   /* filter names -- primary code is 0 in this function */
-  for (j = 0; j < Nsec + 1; j++) {
+  for (j = 0; j < Nsecfilt; j++) {
     code = GetPhotcodebyNsec (j);
     codeNumber[j] = code[0].code;
@@ -240,5 +240,5 @@
   }
 
-  isort_pair (codeNumber, sequence, Nsec + 1);
+  isort_pair (codeNumber, sequence, Nsecfilt);
   free (codeNumber);
 }
@@ -254,5 +254,5 @@
   PhotCode *code;
 
-  seq = sequence[entry] - 1;
+  seq = sequence[entry];
 
   switch (type) {
@@ -282,7 +282,7 @@
 
     case 3: /* filter names */
-      code = GetPhotcodebyNsec (seq + 1);
-      gprint (GP_LOG, "%6s ", code[0].name);
-      break;
-  }
-}
+      code = GetPhotcodebyNsec (seq);
+      gprint (GP_LOG, "%-6s ", code[0].name);
+      break;
+  }
+}
Index: /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/lightcurve.c
===================================================================
--- /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/lightcurve.c	(revision 12294)
+++ /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/lightcurve.c	(revision 12295)
@@ -6,5 +6,5 @@
   float *RA, *DEC;
   int Nstars, found, PhotCodeSelect;
-  int i, j, k, m, N, NPTS, Nsec, RELPHOT, *N1, TimeFormat;
+  int i, j, k, m, N, NPTS, Nsecfilt, RELPHOT, *N1, TimeFormat;
   time_t TimeReference;
 
@@ -16,5 +16,5 @@
 
   if (!InitPhotcodes ()) return (FALSE);
-  Nsec = GetPhotcodeNsecfilt ();
+  Nsecfilt = GetPhotcodeNsecfilt ();
 
   if ((tvec = SelectVector ("tc", ANYVECTOR, TRUE)) == NULL) return (FALSE);
@@ -122,5 +122,5 @@
 	  mvec[0].elements[N] = PhotCat (&catalog.measure[m]);
 	} else {
-	  mvec[0].elements[N] = PhotRel (&catalog.measure[m], &catalog.average[k], &catalog.secfilt[k*Nsec]);
+	  mvec[0].elements[N] = PhotRel (&catalog.measure[m], &catalog.average[k], &catalog.secfilt[k*Nsecfilt]);
 	}
 	N++; 
Index: /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/mextract.c
===================================================================
--- /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/mextract.c	(revision 12294)
+++ /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/mextract.c	(revision 12295)
@@ -4,5 +4,5 @@
   
   int i, j, k, m, N, N1, NPTS;
-  int param, mode, Nsec;
+  int param, mode, Nsecfilt;
   char *RegionName, *RegionList, *p;
   double *M1;
@@ -23,5 +23,5 @@
   /* load photcode information */
   if (!InitPhotcodes ()) goto escape;
-  Nsec = GetPhotcodeNsecfilt ();
+  Nsecfilt = GetPhotcodeNsecfilt ();
 
   /* interpret command-line options */
@@ -57,5 +57,5 @@
     catalog.filename = skylist[0].filename[i];
     catalog.catflags = LOAD_AVES | LOAD_MEAS | LOAD_SECF;
-    catalog.Nsecfilt = Nsec;
+    catalog.Nsecfilt = Nsecfilt;
 
     // an error exit status here is a significant error
@@ -71,5 +71,5 @@
       M1 = NULL;
       m = catalog.average[j].offset;
-      M1 = ExtractMeasures (code, mode, &catalog.average[j], &catalog.secfilt[j*Nsec], &catalog.measure[m], &N1, param);
+      M1 = ExtractMeasures (code, mode, &catalog.average[j], &catalog.secfilt[j*Nsecfilt], &catalog.measure[m], &N1, param);
       for (k = 0; k < N1; k++) {
 	vec[0].elements[N] = M1[k];
Index: /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/paverage.c
===================================================================
--- /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/paverage.c	(revision 12294)
+++ /branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/paverage.c	(revision 12295)
@@ -31,5 +31,6 @@
   Rmax = graphmode.coords.crval1 + 182.0;
 
-  Nsec = -1;
+  // require a photcode?  default to 0?
+  Nsec = 0;
   if ((Narg = get_argument (argc, argv, "-p"))) {
     remove_argument (Narg, &argc, argv);
@@ -41,4 +42,8 @@
     remove_argument (Narg, &argc, argv);
     Nsec = GetPhotcodeNsec (photcode[0].code);
+    if (Nsec == -1) {
+	fprintf (stderr, "photcode %s is not an AVERAGE photcode\n", argv[Narg]);
+	return (FALSE);
+    }
   }
 
@@ -116,5 +121,5 @@
       while (average[i].R > Rmax) average[i].R -= 360.0;
 
-      mag = (Nsec == -1) ? NO_MAG : secfilt[i*Nsecfilt+Nsec].M;
+      mag = secfilt[i*Nsecfilt+Nsec].M;
       Zvec[Npts] = MIN (1.0, MAX (0.01, (mag - Mz) / Mr));
       if (LimExclude && (Zvec[Npts] > 0.99)) continue;
Index: /branches/dvo-mods-2007-02/Ohana/src/relastro/src/bcatalog.c
===================================================================
--- /branches/dvo-mods-2007-02/Ohana/src/relastro/src/bcatalog.c	(revision 12294)
+++ /branches/dvo-mods-2007-02/Ohana/src/relastro/src/bcatalog.c	(revision 12295)
@@ -105,9 +105,4 @@
   subcatalog[0].Nsecfilt = catalog[0].Nsecfilt;
 
-  // XXX really do this or not???
-  if (catalog[0].Naverage > 0) free (catalog[0].average);
-  if (catalog[0].Nmeasure > 0) free (catalog[0].measure);
-  if (catalog[0].Naverage > 0) free (catalog[0].secfilt);
-
   if (VERBOSE) {
     fprintf (stderr, "%d: using %d stars (%d measures) for catalog\n", i, 
Index: /branches/dvo-mods-2007-02/Ohana/src/relphot/src/bcatalog.c
===================================================================
--- /branches/dvo-mods-2007-02/Ohana/src/relphot/src/bcatalog.c	(revision 12294)
+++ /branches/dvo-mods-2007-02/Ohana/src/relphot/src/bcatalog.c	(revision 12295)
@@ -106,9 +106,4 @@
   subcatalog[0].Nsecfilt = catalog[0].Nsecfilt;
 
-  // XXX really do this or not???
-  if (catalog[0].Naverage > 0) free (catalog[0].average);
-  if (catalog[0].Nmeasure > 0) free (catalog[0].measure);
-  if (catalog[0].Naverage > 0) free (catalog[0].secfilt);
-
   if (VERBOSE) {
     fprintf (stderr, "%d: using %d stars (%d measures) for catalog\n", i, 
