Index: /branches/eam_branches/ipp-20100621/Ohana/src/dvomerge/Makefile
===================================================================
--- /branches/eam_branches/ipp-20100621/Ohana/src/dvomerge/Makefile	(revision 28837)
+++ /branches/eam_branches/ipp-20100621/Ohana/src/dvomerge/Makefile	(revision 28838)
@@ -20,5 +20,5 @@
 dvomerge     : $(BIN)/dvoconvert.$(ARCH)
 
-all: dvomerge dvoconvert
+all: dvomerge dvoconvert dvosecfilt
 
 DVOMERGE = \
@@ -58,5 +58,17 @@
 $(BIN)/dvoconvert.$(ARCH) : $(DVOCONVERT)
 
-INSTALL = dvomerge dvoconvert
+DVOSECFILT = \
+$(SRC)/dvosecfilt.$(ARCH).o \
+$(SRC)/SetSignals.$(ARCH).o \
+$(SRC)/ConfigInit.$(ARCH).o \
+$(SRC)/Shutdown.$(ARCH).o \
+$(SRC)/help.$(ARCH).o \
+$(SRC)/args.$(ARCH).o
+
+$(DVOSECFILT)  : $(INC)/dvomerge.h
+
+$(BIN)/dvosecfilt.$(ARCH) : $(DVOSECFILT)
+
+INSTALL = dvomerge dvoconvert dvosecfilt
 
 # dependancy rules for binary code #########################
Index: /branches/eam_branches/ipp-20100621/Ohana/src/dvomerge/include/dvomerge.h
===================================================================
--- /branches/eam_branches/ipp-20100621/Ohana/src/dvomerge/include/dvomerge.h	(revision 28837)
+++ /branches/eam_branches/ipp-20100621/Ohana/src/dvomerge/include/dvomerge.h	(revision 28838)
@@ -54,4 +54,8 @@
 int  	   dvoconvert_args	  PROTO((int *argc, char **argv));
 
+void       dvosecfilt_usage       PROTO((void));
+void 	   dvosecfilt_help 	  PROTO((int argc, char **argv));
+int  	   dvosecfilt_args	  PROTO((int *argc, char **argv));
+
 int        SkyTablePopulatedRange PROTO((off_t *ns, off_t *ne, SkyTable *sky, off_t Nstart));
 
Index: /branches/eam_branches/ipp-20100621/Ohana/src/dvomerge/src/args.c
===================================================================
--- /branches/eam_branches/ipp-20100621/Ohana/src/dvomerge/src/args.c	(revision 28837)
+++ /branches/eam_branches/ipp-20100621/Ohana/src/dvomerge/src/args.c	(revision 28838)
@@ -32,2 +32,18 @@
   return TRUE;
 }
+
+/*** check for command line options ***/
+int dvosecfilt_args (int *argc, char **argv) {
+  
+  int N;
+
+  /* extra error messages */
+  VERBOSE = FALSE;
+  if ((N = get_argument (*argc, argv, "-v"))) {
+    VERBOSE = TRUE;
+    remove_argument (N, argc, argv);
+  }
+
+  if (*argc != 3) dvosecfilt_usage();
+  return TRUE;
+}
Index: /branches/eam_branches/ipp-20100621/Ohana/src/dvomerge/src/dvosecfilt.c
===================================================================
--- /branches/eam_branches/ipp-20100621/Ohana/src/dvomerge/src/dvosecfilt.c	(revision 28838)
+++ /branches/eam_branches/ipp-20100621/Ohana/src/dvomerge/src/dvosecfilt.c	(revision 28838)
@@ -0,0 +1,90 @@
+# include "dvomerge.h"
+
+// modify the number of average photcodes : change only secfilt tables in place
+int main (int argc, char **argv) {
+
+  char filename[256], *input;
+  off_t i, j, k, Nsecfilt, NsecInput, Nstart;
+  SkyTable *insky;
+  Catalog catalog;
+  SecFilt *insec, *outsec;
+
+  SetSignals ();
+  dvosecfilt_help (argc, argv);
+  ConfigInit (&argc, argv);
+  dvosecfilt_args (&argc, argv);
+
+  input = argv[1];
+  Nsecfilt = atoi(argv[2]);
+
+  // load the sky table for the existing database
+  insky = SkyTableLoadOptimal (input, NULL, NULL, FALSE, SKY_DEPTH_HST, VERBOSE);
+  SkyTableSetFilenames (insky, input, "cpt");
+
+  // loop over all input catalogs
+  for (i = 0; i < insky[0].Nregions; i++) {
+    if (!insky[0].regions[i].table) continue;
+    if (VERBOSE) fprintf (stderr, "table: %s\n", insky[0].regions[i].name);
+
+    // set the parameters which guide catalog open/load/create
+    catalog.filename  = insky[0].filename[i];
+    catalog.Nsecfilt  = 0;
+
+    // always load all of the data (if any exists)
+    catalog.catflags  = LOAD_SECF;
+    catalog.catformat = dvo_catalog_catformat (CATFORMAT);  // set the default catformat from config data
+    catalog.catmode   = dvo_catalog_catmode (CATMODE);      // set the default catmode from config data
+
+    if (!dvo_catalog_open (&catalog, &insky[0].regions[i], VERBOSE, "w")) {
+	fprintf (stderr, "ERROR: failure to open catalog file %s\n", filename);
+	exit (2);
+    }
+
+    if (catalog.Naves_disk == 0) {
+      dvo_catalog_unlock (&catalog);
+      dvo_catalog_free (&catalog);
+      continue;
+    }
+
+    if (Nsecfilt == catalog.Nsecfilt) {
+      dvo_catalog_unlock (&catalog);
+      dvo_catalog_free (&catalog);
+      continue;
+    }
+
+    NsecInput = catalog.Nsecfilt;
+    Nstart = MIN(Nsecfilt, NsecInput);
+
+    insec = catalog.secfilt;
+    ALLOCATE (outsec, SecFilt, catalog.Naves_disk * Nsecfilt);
+
+    for (k = 0; k < catalog.Naves_disk; k++) {
+      for (j = 0; (j < catalog.Nsecfilt) && (j < Nsecfilt); j++) {
+	outsec[k*Nsecfilt + j].M  = insec[k*NsecInput + j].M;
+	outsec[k*Nsecfilt + j].dM = insec[k*NsecInput + j].dM;
+	outsec[k*Nsecfilt + j].Xm = insec[k*NsecInput + j].Xm;
+	outsec[k*Nsecfilt + j].flags  = insec[k*NsecInput + j].flags;
+	outsec[k*Nsecfilt + j].Ncode  = insec[k*NsecInput + j].Ncode;
+	outsec[k*Nsecfilt + j].Nused  = insec[k*NsecInput + j].Nused;
+	outsec[k*Nsecfilt + j].M_20   = insec[k*NsecInput + j].M_20;
+	outsec[k*Nsecfilt + j].M_80   = insec[k*NsecInput + j].M_80;
+      }
+      for (j = Nstart; j < Nsecfilt; j++) {
+	outsec[k*Nsecfilt + j].M  = NAN;
+	outsec[k*Nsecfilt + j].dM = NAN;
+	outsec[k*Nsecfilt + j].Xm = NAN_S_SHORT;
+      }
+    }
+    free (catalog.secfilt);
+    catalog.secfilt = outsec;
+    catalog.Nsecfilt = Nsecfilt;
+    catalog.Nsecf_mem = Nsecfilt * catalog.Naves_disk;
+    catalog.Nsecf_disk = Nsecfilt * catalog.Naves_disk;
+
+    dvo_catalog_save (&catalog, VERBOSE);
+    dvo_catalog_unlock (&catalog);
+    dvo_catalog_free (&catalog);
+  }
+
+  exit (0);
+}
Index: /branches/eam_branches/ipp-20100621/Ohana/src/dvomerge/src/help.c
===================================================================
--- /branches/eam_branches/ipp-20100621/Ohana/src/dvomerge/src/help.c	(revision 28837)
+++ /branches/eam_branches/ipp-20100621/Ohana/src/dvomerge/src/help.c	(revision 28838)
@@ -10,4 +10,11 @@
 
   fprintf (stderr, "USAGE: dvoconvert (input) to (output)\n");
+
+  exit (2);
+}
+
+void dvosecfilt_usage(void) {
+
+  fprintf (stderr, "USAGE: dvosecfilt (input) -photcodes (photcodes.txt)\n");
 
   exit (2);
@@ -57,2 +64,23 @@
 }
 
+void dvosecfilt_help (int argc, char **argv) {
+
+  /* check for help request */
+  if (get_argument (argc, argv, "-help")) goto show_help;
+  if (get_argument (argc, argv, "-h"))    goto show_help;
+  return;
+
+show_help:
+
+  fprintf (stderr, "USAGE\n");
+  fprintf (stderr, "  dvosecfilt (input) (Nsecfilt)\n\n");
+
+  fprintf (stderr, "  change number of secfilt entries in photcode table (updates secfilt tables only)\n");
+ 
+  fprintf (stderr, "  optional flags:\n");
+  fprintf (stderr, "  -v                    	  : verbose mode\n");
+  fprintf (stderr, "  -help                 	  : this list\n");
+  fprintf (stderr, "  -h                    	  : this list\n\n");
+  exit (2);
+}
+
