Index: /branches/eam_branches/ipp-20111122/Ohana/src/opihi/dvo/skycoverage.c
===================================================================
--- /branches/eam_branches/ipp-20111122/Ohana/src/opihi/dvo/skycoverage.c	(revision 33537)
+++ /branches/eam_branches/ipp-20111122/Ohana/src/opihi/dvo/skycoverage.c	(revision 33538)
@@ -1,9 +1,12 @@
 # include "dvoshell.h"
 
+// enum to define possible modes
+enum {COVERAGE, DENSITY, MIN_UBERCAL, MIN_DMAG_SYS, MIN_MCAL, MAX_MCAL};
+
 int wordhash (char *word);
 
 int skycoverage (int argc, char **argv) {
 
-  int WITH_MOSAIC, SOLO_MOSAIC, ShowDensity;
+  int WITH_MOSAIC, SOLO_MOSAIC, mode;
   off_t i, Nimage;
   int N, status, TimeSelect, ByName, xs, ys;
@@ -60,8 +63,24 @@
   }
 
-  ShowDensity = FALSE;
+  mode = COVERAGE;
   if ((N = get_argument (argc, argv, "-density"))) {
     remove_argument (N, &argc, argv);
-    ShowDensity = TRUE;
+    mode = DENSITY;
+  }
+  if ((N = get_argument (argc, argv, "-min-ubercal"))) {
+    remove_argument (N, &argc, argv);
+    mode = MIN_UBERCAL;
+  }
+  if ((N = get_argument (argc, argv, "-min-dmag-sys"))) {
+    remove_argument (N, &argc, argv);
+    mode = MIN_DMAG_SYS;
+  }
+  if ((N = get_argument (argc, argv, "-min-mcal"))) {
+    remove_argument (N, &argc, argv);
+    mode = MIN_MCAL;
+  }
+  if ((N = get_argument (argc, argv, "-max-mcal"))) {
+    remove_argument (N, &argc, argv);
+    mode = MAX_MCAL;
   }
 
@@ -194,4 +213,5 @@
   V = (float *)buf[0].matrix.buffer;
 
+  // init the V array (depends on mode)
   for (ys = 0; ys < Ny; ys++) {
     for (xs = 0; xs < Nx; xs++) {
@@ -199,8 +219,35 @@
       status &= (r >= 0);
       status &= (r <= 360);
+      // are we in a part of the projection covering the sky or not?
       if (status) {
-	V[ys*Nx + xs] = ShowDensity ?  0 : 2;
+	switch (mode) {
+	  case COVERAGE:
+	    V[ys*Nx + xs] = 2;
+	    break;
+	  case DENSITY:
+	    V[ys*Nx + xs] = 0;
+	    break;
+	  case MIN_UBERCAL:
+	  case MIN_DMAG_SYS:
+	  case MIN_MCAL:
+	    V[ys*Nx + xs] = 1E6;
+	    break;
+	  case MAX_MCAL:
+	    V[ys*Nx + xs] = -1E6;
+	    break;
+	}
       } else {
-	V[ys*Nx + xs] = ShowDensity ? NAN : 0;
+	switch (mode) {
+	  case COVERAGE:
+	    V[ys*Nx + xs] = 0;
+	    break;
+	  case DENSITY:
+	  case MIN_UBERCAL:
+	  case MIN_DMAG_SYS:
+	  case MIN_MCAL:
+	  case MAX_MCAL:
+	    V[ys*Nx + xs] = NAN;
+	    break;
+	}
       }
     }
@@ -257,8 +304,23 @@
 	  xs = (int)Xs;
 	  ys = (int)Ys;
-	  if (ShowDensity) {
+	  switch (mode) {
+	    case COVERAGE:
+	      V[ys*Nx + xs] = 1;
+	      break;
+	    case DENSITY:
 	      V[ys*Nx + xs] += 1;
-	  } else {
-	      V[ys*Nx + xs] = 1;
+	      break;
+	    case MIN_UBERCAL:
+	      V[ys*Nx + xs] = MIN(V[ys*Nx + xs], image[i].ubercalDist);
+	      break;
+	    case MIN_DMAG_SYS:
+	      V[ys*Nx + xs] = MIN(V[ys*Nx + xs], image[i].dMagSys);
+	      break;
+	    case MIN_MCAL:
+	      V[ys*Nx + xs] = MIN(V[ys*Nx + xs], image[i].Mcal);
+	      break;
+	    case MAX_MCAL:
+	      V[ys*Nx + xs] = MAX(V[ys*Nx + xs], image[i].Mcal);
+	      break;
 	  }
 	}
