Index: /branches/eam_branches/ipp-20120627/Ohana/src/dvomerge/include/dvoverify.h
===================================================================
--- /branches/eam_branches/ipp-20120627/Ohana/src/dvomerge/include/dvoverify.h	(revision 34119)
+++ /branches/eam_branches/ipp-20120627/Ohana/src/dvomerge/include/dvoverify.h	(revision 34120)
@@ -34,4 +34,5 @@
 int    NNotSorted;
 int    CHECK_TOPLEVEL;
+int    LIST_MISSING;
 
 SkyRegion UserPatch;
@@ -48,2 +49,5 @@
 int CheckCatalogIndexes (char *filename,  SkyRegion *region);
 
+void InitFailures ();
+void AddFailures (char *filename);
+char **GetFailures (int *N);
Index: /branches/eam_branches/ipp-20120627/Ohana/src/dvomerge/src/dvoverify.c
===================================================================
--- /branches/eam_branches/ipp-20120627/Ohana/src/dvomerge/src/dvoverify.c	(revision 34119)
+++ /branches/eam_branches/ipp-20120627/Ohana/src/dvomerge/src/dvoverify.c	(revision 34120)
@@ -50,4 +50,12 @@
   dvoverify_catalogs (skylist, &Nbad);
 
+  int i, Nfailures;
+  char **failures = GetFailures (&Nfailures);
+
+  fprintf (stderr, "---- files with errors ---- \n");
+  for (i = 0; i < Nfailures; i++) {
+    fprintf (stderr, "%s\n", failures[i]);
+  }
+
   if (Nbad > 0) {
     fprintf (stderr, "ERROR: %d files are bad\n", Nbad);
Index: /branches/eam_branches/ipp-20120627/Ohana/src/dvomerge/src/dvoverify_args.c
===================================================================
--- /branches/eam_branches/ipp-20120627/Ohana/src/dvomerge/src/dvoverify_args.c	(revision 34119)
+++ /branches/eam_branches/ipp-20120627/Ohana/src/dvomerge/src/dvoverify_args.c	(revision 34120)
@@ -5,8 +5,7 @@
   int N;
 
-  VERBOSE = FALSE;
-  CHECKSORTED = FALSE;
   NNotSorted = 0;
 
+  VERBOSE = FALSE;
   if ((N = get_argument (*argc, argv, "-v"))) {
     VERBOSE = TRUE;
@@ -17,4 +16,6 @@
     remove_argument (N, argc, argv);
   }
+
+  CHECKSORTED = FALSE;
   if ((N = get_argument (*argc, argv, "-s"))) {
     CHECKSORTED = TRUE;
@@ -23,4 +24,10 @@
   if ((N = get_argument (*argc, argv, "-sorted"))) {
     CHECKSORTED = TRUE;
+    remove_argument (N, argc, argv);
+  }
+
+  LIST_MISSING = FALSE;
+  if ((N = get_argument (*argc, argv, "-list-missing"))) {
+    LIST_MISSING = TRUE;
     remove_argument (N, argc, argv);
   }
@@ -126,4 +133,10 @@
   }
 
+  LIST_MISSING = FALSE;
+  if ((N = get_argument (*argc, argv, "-list-missing"))) {
+    LIST_MISSING = TRUE;
+    remove_argument (N, argc, argv);
+  }
+
   // restrict to a portion of the sky
   UserPatch.Rmin = 0;
Index: /branches/eam_branches/ipp-20120627/Ohana/src/dvomerge/src/dvoverify_catalogs.c
===================================================================
--- /branches/eam_branches/ipp-20120627/Ohana/src/dvomerge/src/dvoverify_catalogs.c	(revision 34119)
+++ /branches/eam_branches/ipp-20120627/Ohana/src/dvomerge/src/dvoverify_catalogs.c	(revision 34120)
@@ -5,4 +5,6 @@
   int i;
   char filename[DVO_MAX_PATH];
+
+  InitFailures ();
 
   if (PARALLEL && !HOST_ID) {
@@ -29,4 +31,5 @@
       Nbad ++;
       skipIndexCheck = TRUE;
+      AddFailures (filename);
     }
 
@@ -34,4 +37,5 @@
     if (!VerifyTableFile (filename)) {
       Nbad ++;
+      AddFailures (filename);
     }
 
@@ -40,4 +44,5 @@
       Nbad ++;
       skipIndexCheck = TRUE;
+      AddFailures (filename);
     }
 
@@ -46,4 +51,5 @@
       if (!CheckCatalogIndexes(filename, skylist[0].regions[i])){
 	Nbad ++;
+	AddFailures (filename);
       }
     }
@@ -94,6 +100,7 @@
 
     char tmpline[DVO_MAX_PATH];
-    if (VERBOSE)     { snprintf (tmpline, DVO_MAX_PATH, "%s -v", command); strcpy (command, tmpline); }
-    if (CHECKSORTED) { snprintf (tmpline, DVO_MAX_PATH, "%s -s", command); strcpy (command, tmpline); }
+    if (VERBOSE)      { snprintf (tmpline, DVO_MAX_PATH, "%s -v", command); strcpy (command, tmpline); }
+    if (CHECKSORTED)  { snprintf (tmpline, DVO_MAX_PATH, "%s -s", command); strcpy (command, tmpline); }
+    if (LIST_MISSING) { snprintf (tmpline, DVO_MAX_PATH, "%s -list-missing", command); strcpy (command, tmpline); }
 
     fprintf (stderr, "command: %s\n", command);
@@ -131,5 +138,8 @@
   for (i = 0; i < table->Nhosts; i++) {
     FILE *results = fopen (table->hosts[i].results, "r");
-    myAssert (results, "cannot read result?");
+    if (!results) {
+      fprintf (stderr, "cannot read results for %d: %s\n", i, table->hosts[i].results);
+      continue;
+    }
     fscanf (results, "%*s %d %*s %d", &NbadHost, &NNotSortedHost);
     *Nbad += NbadHost;
Index: /branches/eam_branches/ipp-20120627/Ohana/src/dvomerge/src/dvoverify_client.c
===================================================================
--- /branches/eam_branches/ipp-20120627/Ohana/src/dvomerge/src/dvoverify_client.c	(revision 34119)
+++ /branches/eam_branches/ipp-20120627/Ohana/src/dvomerge/src/dvoverify_client.c	(revision 34120)
@@ -21,9 +21,15 @@
   dvoverify_catalogs (skylist, &Nbad);
 
+  // write result to file
   FILE *results = fopen (RESULTS, "w");
   fprintf (results, "Nbad: %d NNotSorted: %d\n", Nbad, NNotSorted);
+
+  int i, Nfailures;
+  char **failures = GetFailures (&Nfailures);
+  fprintf (results, "---- files with errors ---- \n");
+  for (i = 0; i < Nfailures; i++) {
+    fprintf (results, "%s\n", failures[i]);
+  }
   fclose (results);
-
-  // write result to file
 
   if (Nbad > 0) {
Index: /branches/eam_branches/ipp-20120627/Ohana/src/dvomerge/src/dvoverify_utils.c
===================================================================
--- /branches/eam_branches/ipp-20120627/Ohana/src/dvomerge/src/dvoverify_utils.c	(revision 34119)
+++ /branches/eam_branches/ipp-20120627/Ohana/src/dvomerge/src/dvoverify_utils.c	(revision 34120)
@@ -1,3 +1,22 @@
 # include "dvoverify.h"
+
+static int Nfailures = 0;
+static int NFAILURES = 100;
+static char **failures = NULL;
+
+void InitFailures () {
+  ALLOCATE (failures, char *, NFAILURES);
+}
+
+void AddFailures (char *filename) {
+  failures[Nfailures] = strcreate (filename);
+  Nfailures ++;
+  CHECK_REALLOCATE (failures, char *, NFAILURES, Nfailures, 100);
+}
+
+char **GetFailures (int *N) {
+  *N = Nfailures;
+  return failures;
+}
 
 int dvoverify_single (char *filename) {
@@ -46,4 +65,5 @@
       case ENOENT:
 	if (DEBUG) fprintf (stderr, "file does not exist, skipping %s\n", filename);
+	if (LIST_MISSING) return FALSE;
 	return TRUE;
       case ENOMEM:
