Index: /branches/eam_branches/ipp-20140904/Ohana/src/dvosplit/include/dvosplit.h
===================================================================
--- /branches/eam_branches/ipp-20140904/Ohana/src/dvosplit/include/dvosplit.h	(revision 37795)
+++ /branches/eam_branches/ipp-20140904/Ohana/src/dvosplit/include/dvosplit.h	(revision 37796)
@@ -22,4 +22,5 @@
 } AveLinks;
 
+int    FULL_TABLE;
 int    VERBOSE;
 char  *OUTDIR;
Index: /branches/eam_branches/ipp-20140904/Ohana/src/dvosplit/src/args.c
===================================================================
--- /branches/eam_branches/ipp-20140904/Ohana/src/dvosplit/src/args.c	(revision 37795)
+++ /branches/eam_branches/ipp-20140904/Ohana/src/dvosplit/src/args.c	(revision 37796)
@@ -57,4 +57,11 @@
   }
 
+  // override input catalog format (PS1_V1, PS1_REF, etc)
+  FULL_TABLE = FALSE;
+  if ((N = get_argument (argc, argv, "-full-table"))) {
+    remove_argument (N, &argc, argv);
+    FULL_TABLE = TRUE;
+  }
+
   /* extra error messages */
   VERBOSE = FALSE;
Index: /branches/eam_branches/ipp-20140904/Ohana/src/dvosplit/src/split_averages.c
===================================================================
--- /branches/eam_branches/ipp-20140904/Ohana/src/dvosplit/src/split_averages.c	(revision 37795)
+++ /branches/eam_branches/ipp-20140904/Ohana/src/dvosplit/src/split_averages.c	(revision 37796)
@@ -27,5 +27,5 @@
   incatalog[0].catflags = LOAD_AVES | LOAD_SECF;
 
-  if (incatalog[0].catmode == DVO_MODE_SPLIT) {
+  if ((incatalog[0].catmode == DVO_MODE_SPLIT) && !FULL_TABLE) {
     Nblocks = incatalog[0].Naves_disk / NROWS;
     if (incatalog[0].Naves_disk % NROWS) Nblocks ++;
@@ -36,14 +36,13 @@
   for (block = 0; block < Nblocks; block++) {
 
-    if (incatalog[0].catmode == DVO_MODE_SPLIT) {
+    if ((incatalog[0].catmode == DVO_MODE_SPLIT) && !FULL_TABLE) {
       // read up to NROWS at a time
       dvo_catalog_load_segment (incatalog, VERBOSE, block*NROWS, NROWS);
       fprintf (stderr, "splitting %s (averages) .. %d of %d\n", incatalog[0].filename, block, Nblocks);
+      assert (block*NROWS == incatalog[0].Naves_off);
     } else {
       dvo_catalog_load (incatalog, VERBOSE);
       fprintf (stderr, "splitting %s (averages)\n", incatalog[0].filename);
     }
-
-    assert (block*NROWS == incatalog[0].Naves_off);
 
     // distribute data to the output catalogs
@@ -54,4 +53,8 @@
       inD = incatalog[0].average[ave].D;
 
+      if (incatalog[0].average[ave].Nmeasure == 0) {
+	fprintf (stderr, "WARNING: object with no measurements, skipping %d (%f, %f)\n", averef, inR, inD);
+	continue;
+      }
       // which of the outcatalogs contains this coordinate?
 
@@ -98,25 +101,29 @@
 
     // write out the new values
-    for (cat = 0; cat < outlist[0].Nregions; cat++) {
-      outcatalogs[cat].catflags = LOAD_AVES | LOAD_SECF;
+    if (!FULL_TABLE) {
+      for (cat = 0; cat < outlist[0].Nregions; cat++) {
+	outcatalogs[cat].catflags = LOAD_AVES | LOAD_SECF;
 
-      dvo_catalog_save (&outcatalogs[cat], VERBOSE);
-      // fprintf (stderr, "secfilt: %d %d %d %d\n", outcatalogs[cat].Nsecf_mem, outcatalogs[cat].Nsecf_disk, outcatalogs[cat].Nsecf_off, outcatalogs[cat].Naverage, outcatalogs[cat].Nsecfilt);
+	dvo_catalog_save (&outcatalogs[cat], VERBOSE);
+	// fprintf (stderr, "secfilt: %d %d %d %d\n", outcatalogs[cat].Nsecf_mem, outcatalogs[cat].Nsecf_disk, outcatalogs[cat].Nsecf_off, outcatalogs[cat].Naverage, outcatalogs[cat].Nsecfilt);
 
-      // advance the pointers and free the current data
-      // XXX these should be done within save segment:
-      outcatalogs[cat].Naves_disk += outcatalogs[cat].Naverage;
-      outcatalogs[cat].Naves_off  += outcatalogs[cat].Naverage;
-      outcatalogs[cat].Nsecf_disk += outcatalogs[cat].Nsecfilt * outcatalogs[cat].Naverage;
-      outcatalogs[cat].Nsecf_off  += outcatalogs[cat].Nsecfilt * outcatalogs[cat].Naverage;
-      outcatalogs[cat].Nsecfilt    = Nsecfilt;
+	// advance the pointers and free the current data
+	// XXX these should be done within save segment:
+	outcatalogs[cat].Naves_disk += outcatalogs[cat].Naverage;
+	outcatalogs[cat].Naves_off  += outcatalogs[cat].Naverage;
+	outcatalogs[cat].Nsecf_disk += outcatalogs[cat].Nsecfilt * outcatalogs[cat].Naverage;
+	outcatalogs[cat].Nsecf_off  += outcatalogs[cat].Nsecfilt * outcatalogs[cat].Naverage;
+	outcatalogs[cat].Nsecfilt    = Nsecfilt;
 
-      outcatalogs[cat].Naverage    = 0;
-      outcatalogs[cat].Nsecf_mem   = 0;
+	outcatalogs[cat].Naverage    = 0;
+	outcatalogs[cat].Nsecf_mem   = 0;
+      }
     }
   }
 
-  for (cat = 0; cat < outlist[0].Nregions; cat++) {
-    dvo_catalog_free_data (&outcatalogs[cat]);
+  if (!FULL_TABLE) {
+    for (cat = 0; cat < outlist[0].Nregions; cat++) {
+      dvo_catalog_free_data (&outcatalogs[cat]);
+    }
   }
 
Index: /branches/eam_branches/ipp-20140904/Ohana/src/dvosplit/src/split_measures.c
===================================================================
--- /branches/eam_branches/ipp-20140904/Ohana/src/dvosplit/src/split_measures.c	(revision 37795)
+++ /branches/eam_branches/ipp-20140904/Ohana/src/dvosplit/src/split_measures.c	(revision 37796)
@@ -27,5 +27,5 @@
   // }
 
-  if (incatalog[0].catmode == DVO_MODE_SPLIT) {
+  if ((incatalog[0].catmode == DVO_MODE_SPLIT) && !FULL_TABLE) {
     Nblocks = incatalog[0].Nmeas_disk / NROWS;
     if (incatalog[0].Nmeas_disk % NROWS) Nblocks ++;
@@ -37,13 +37,12 @@
 
     // read up to NROWS at a time
-    if (incatalog[0].catmode == DVO_MODE_SPLIT) {
+    if ((incatalog[0].catmode == DVO_MODE_SPLIT) && !FULL_TABLE) {
       dvo_catalog_load_segment (incatalog, VERBOSE, block*NROWS, NROWS);
       fprintf (stderr, "splitting %s (measures) .. %d of %d\n", incatalog[0].filename, block, Nblocks);
+      assert (block*NROWS == incatalog[0].Nmeas_off);
     } else {
       dvo_catalog_load (incatalog, VERBOSE);
       fprintf (stderr, "splitting %s (measures)\n", incatalog[0].filename);
     }
-
-    assert (block*NROWS == incatalog[0].Nmeas_off);
 
     for (meas = 0; meas < incatalog[0].Nmeasure; meas++) {
@@ -52,7 +51,14 @@
       Ncat = outcat[averef];
 
+      int averef_out = outref[averef];
+      if (averef_out >= outcatalogs[Ncat].Naverage) {
+	fprintf (stderr, "mismatch 1\n");
+	abort();
+      }
+
       Nout = outcatalogs[Ncat].Nmeasure;
       outcatalogs[Ncat].measure[Nout] = incatalog[0].measure[meas];
       outcatalogs[Ncat].measure[Nout].averef = outref[averef];
+
       outcatalogs[Ncat].Nmeasure++;
 
@@ -64,12 +70,20 @@
     dvo_catalog_free_data (incatalog);
 
+    if (!FULL_TABLE) {
+      for (cat = 0; cat < outlist[0].Nregions; cat++) {
+	outcatalogs[cat].catflags = LOAD_MEAS;
+	dvo_catalog_save (&outcatalogs[cat], VERBOSE);
+
+	outcatalogs[cat].Nmeas_disk += outcatalogs[cat].Nmeasure;
+	outcatalogs[cat].Nmeas_off  += outcatalogs[cat].Nmeasure;
+	outcatalogs[cat].Nmeasure    = 0;
+      }
+    }
+  }
+
+  if (FULL_TABLE) {
     for (cat = 0; cat < outlist[0].Nregions; cat++) {
-      outcatalogs[cat].catflags = LOAD_MEAS;
+      outcatalogs[cat].catflags = LOAD_AVES | LOAD_SECF | LOAD_MEAS;
       dvo_catalog_save (&outcatalogs[cat], VERBOSE);
-
-      outcatalogs[cat].Nmeas_disk += outcatalogs[cat].Nmeasure;
-      outcatalogs[cat].Nmeas_off  += outcatalogs[cat].Nmeasure;
-      outcatalogs[cat].Nmeasure    = 0;
-
     }
   }
