Index: /trunk/Ohana/src/tools/src/medianfilter.c
===================================================================
--- /trunk/Ohana/src/tools/src/medianfilter.c	(revision 14819)
+++ /trunk/Ohana/src/tools/src/medianfilter.c	(revision 14820)
@@ -9,5 +9,5 @@
 
   int i, j, k, n, Npixels, Npixin, Npixrd, Npixlast, N;
-  int Npass, NFILES, Nfiles;
+  int Npass, NFILES, Nfiles, Nvalid;
 
   char **filename;
@@ -15,9 +15,16 @@
   Matrix out,  *tmpmatr;
   float *list, *v, *O;
-  float fmin, fmax, Nval, sum;
+  float fmin, fmax, Nval, sum, MinValid;
 
   if ((N = get_argument (argc, argv, "-unsign"))) {
     remove_argument (N, &argc, argv);
     gfits_set_unsign_mode (TRUE);
+  }
+
+  MinValid = 1.0;
+  if ((N = get_argument (argc, argv, "-bad"))) {
+    remove_argument (N, &argc, argv);
+    MinValid = atof(argv[N]);
+    remove_argument (N, &argc, argv);
   }
 
@@ -64,8 +71,11 @@
   ALLOCATE (tmpmatr, Matrix, Nfiles);
   ALLOCATE (list, float, Nfiles);
+
+  /*
   Nval = 0;
   for (k = fmin*Nfiles; k < fmax*Nfiles; k++) {
     Nval += 1.0;
   }
+  */
 
   O = (float *) out.buffer;
@@ -87,12 +97,21 @@
     fprintf (stderr, "starting sorts\n");
     for (j = 0; j < Npixrd; j++, O++) {
+      Nvalid = 0;
       for (k = 0; k < Nfiles; k++) {
 	v = (float *)tmpmatr[k].buffer;
+	if (v[j] < MinValid) continue;
 	list[k] = v[j];
+	Nvalid ++;
       }
-      fsort (list, Nfiles);
+      if (Nvalid == 0) {
+	*O = 0.0;
+	continue;
+      }
+      fsort (list, Nvalid);
       sum = 0;
-      for (k = fmin*Nfiles; k < fmax*Nfiles; k++) {
+      Nval = 0;
+      for (k = fmin*Nvalid; k < fmax*Nvalid; k++) {
 	sum += list[k];
+	Nval ++;
       }
       *O = (sum / Nval);
