Index: trunk/Ohana/src/opihi/cmd.data/imhist.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.data/imhist.c	(revision 38065)
+++ trunk/Ohana/src/opihi/cmd.data/imhist.c	(revision 38153)
@@ -3,12 +3,12 @@
 int imhist (int argc, char **argv) {
   
-  int i, j, N, Nbins, Quiet;
-  int sx, sy, nx, ny, bin;
-  float *V, delta;
-  double max, min, dx;
+  int i, j, N, Nbins;
+  int bin;
+  float *V;
+  double dx;
   Vector *vec1, *vec2;
   Buffer *buf;
 
-  Quiet = FALSE;
+  int Quiet = FALSE;
   if ((N = get_argument (argc, argv, "-q"))) {
     Quiet = TRUE;
@@ -20,5 +20,5 @@
   }
 
-  delta = 0;
+  float delta = 0;
   if ((N = get_argument (argc, argv, "-delta"))) {
     remove_argument (N, &argc, argv);
@@ -27,5 +27,11 @@
   }
 
-  min = max = 0.0;
+  int ClipNAN = FALSE;
+  if ((N = get_argument (argc, argv, "-clip-nan"))) {
+    remove_argument (N, &argc, argv);
+    ClipNAN = TRUE;
+  }  
+
+  double min = 0.0, max = 0.0;
   if ((N = get_argument (argc, argv, "-range"))) {
     remove_argument (N, &argc, argv);
@@ -36,6 +42,6 @@
   }
 
-  sx = sy = 0.0;
-  nx = ny = 0.0;
+  int sx = 0, sy = 0;
+  int nx = 0, ny = 0;
   if ((N = get_argument (argc, argv, "-region"))) {
     remove_argument (N, &argc, argv);
@@ -84,4 +90,5 @@
       V = (float *)(buf[0].matrix.buffer) + j*buf[0].matrix.Naxis[0] + sx; 
       for (i = 0; i < nx; i++, V++) {
+	if (ClipNAN && isnan(*V)) continue;
 	max = MAX (max, *V);
 	min = MIN (min, *V);
@@ -113,4 +120,5 @@
     V = (float *)(buf[0].matrix.buffer) + j*buf[0].matrix.Naxis[0] + sx; 
     for (i = 0; i < nx; i++, V++) {
+      if (ClipNAN && isnan(*V)) continue;
       bin = MAX (MIN (Nbins, (*V - min) / dx), 0);
       vec2[0].elements.Flt[bin] += 1.0;
Index: trunk/Ohana/src/opihi/lib.data/graphtools.c
===================================================================
--- trunk/Ohana/src/opihi/lib.data/graphtools.c	(revision 38065)
+++ trunk/Ohana/src/opihi/lib.data/graphtools.c	(revision 38153)
@@ -10,6 +10,7 @@
   if (xvec != NULL) {
     if (xvec->type == OPIHI_FLT) {
-      maxX = minX = xvec[0].elements.Flt[0];
-      for (i = 1; i < xvec[0].Nelements; i++) {
+      maxX = DBL_MIN;
+      minX = DBL_MAX;
+      for (i = 0; i < xvec[0].Nelements; i++) {
 	if (!finite(xvec[0].elements.Flt[i])) continue;
 	maxX = MAX (maxX, xvec[0].elements.Flt[i]);
@@ -19,5 +20,4 @@
       maxX = minX = xvec[0].elements.Int[0];
       for (i = 1; i < xvec[0].Nelements; i++) {
-	if (!finite(xvec[0].elements.Int[i])) continue;
 	maxX = MAX (maxX, xvec[0].elements.Int[i]);
 	minX = MIN (minX, xvec[0].elements.Int[i]);
@@ -33,6 +33,7 @@
   if (yvec != NULL) {
     if (yvec->type == OPIHI_FLT) {
-      maxY = minY = yvec[0].elements.Flt[0];
-      for (i = 1; i < yvec[0].Nelements; i++) {
+      maxY = DBL_MIN;
+      minY = DBL_MAX;
+      for (i = 0; i < yvec[0].Nelements; i++) {
 	if (!finite(yvec[0].elements.Flt[i])) continue;
 	maxY = MAX (maxY, yvec[0].elements.Flt[i]);
@@ -42,5 +43,4 @@
       maxY = minY = yvec[0].elements.Int[0];
       for (i = 1; i < yvec[0].Nelements; i++) {
-	if (!finite(yvec[0].elements.Int[i])) continue;
 	maxY = MAX (maxY, yvec[0].elements.Int[i]);
 	minY = MIN (minY, yvec[0].elements.Int[i]);
