Index: /branches/eam_rel9_b1/psLib/src/math/psMinimize.c
===================================================================
--- /branches/eam_rel9_b1/psLib/src/math/psMinimize.c	(revision 6027)
+++ /branches/eam_rel9_b1/psLib/src/math/psMinimize.c	(revision 6028)
@@ -10,6 +10,6 @@
  *  @author EAM, IfA
  *
- *  @version $Revision: 1.147.4.1.2.6 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2006-01-10 04:47:27 $
+ *  @version $Revision: 1.147.4.1.2.7 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2006-01-17 09:26:50 $
  *
  *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
@@ -206,4 +206,6 @@
 }
 
+# include "psAbort.h"
+
 // XXX EAM: this needs to respect the mask on params
 // alpha, beta, params are already allocated
@@ -246,4 +248,6 @@
         delta = ymodel - y->data.F32[i];
         chisq += PS_SQR(delta) * dy->data.F32[i];
+        // fprintf (stderr, "chi: %f : %f %f %f\n", chisq, ymodel, y->data.F32[i], dy->data.F32[i]);
+        // if (!isfinite(chisq)) psAbort ("min", "chi");
 
         for (int j = 0; j < params->n; j++) {
@@ -2951,14 +2955,14 @@
     }
     PS_ASSERT_VECTOR_NON_NULL(x, NULL);
-    PS_ASSERT_VECTORS_SIZE_EQUAL(f, y, NULL);
+    PS_ASSERT_VECTORS_SIZE_EQUAL(f, x, NULL);
     PS_ASSERT_VECTOR_TYPE_F32_OR_F64(x, NULL);
     PS_ASSERT_VECTOR_NON_NULL(y, NULL);
     PS_ASSERT_VECTORS_SIZE_EQUAL(f, y, NULL);
     PS_ASSERT_VECTOR_TYPE_F32_OR_F64(y, NULL);
-    PS_ASSERT_VECTOR_NON_NULL(f, NULL);
-    // PS_ASSERT_VECTORS_SIZE_EQUAL(f, f, NULL);
-    // PS_ASSERT_VECTOR_TYPE_F32_OR_F64(f, NULL);
+    PS_ASSERT_VECTOR_NON_NULL(z, NULL);
+    PS_ASSERT_VECTORS_SIZE_EQUAL(f, z, NULL);
+    PS_ASSERT_VECTOR_TYPE_F32_OR_F64(z, NULL);
     if (fErr != NULL) {
-        PS_ASSERT_VECTORS_SIZE_EQUAL(fErr, mask, NULL);
+        PS_ASSERT_VECTORS_SIZE_EQUAL(f, fErr, NULL);
         PS_ASSERT_VECTOR_TYPE_F32_OR_F64(fErr, NULL);
     }
@@ -3211,4 +3215,9 @@
     psFree(B);
 
+    if (Sums == NULL) {
+        psLogMsg (".psLib.VectorFitPolynomial3DOrd", 4, "all data has been clipped away\n");
+        return (myPoly);
+    }
+
     for (int ix = 0; ix < nXterm; ix++) {
         for (int iy = 0; iy < nYterm; iy++) {
@@ -3438,5 +3447,5 @@
     PS_ASSERT_PTR_NON_NULL(stats, NULL);
     PS_ASSERT_VECTOR_NON_NULL(f, NULL);
-    PS_ASSERT_VECTOR_TYPE(f, PS_TYPE_F32, NULL);
+    PS_ASSERT_VECTOR_TYPE_F32_OR_F64(f, NULL);
     if (mask != NULL) {
         PS_ASSERT_VECTORS_SIZE_EQUAL(f, mask, NULL);
@@ -3444,18 +3453,18 @@
     }
     PS_ASSERT_VECTOR_NON_NULL(x, NULL);
-    PS_ASSERT_VECTORS_SIZE_EQUAL(f, y, NULL);
-    PS_ASSERT_VECTOR_TYPE(x, PS_TYPE_F32, NULL);
+    PS_ASSERT_VECTORS_SIZE_EQUAL(f, x, NULL);
+    PS_ASSERT_VECTOR_TYPE_F32_OR_F64(x, NULL);
     PS_ASSERT_VECTOR_NON_NULL(y, NULL);
     PS_ASSERT_VECTORS_SIZE_EQUAL(f, y, NULL);
-    PS_ASSERT_VECTOR_TYPE(y, PS_TYPE_F32, NULL);
-    PS_ASSERT_VECTOR_NON_NULL(f, NULL);
-    PS_ASSERT_VECTORS_SIZE_EQUAL(f, f, NULL);
-    PS_ASSERT_VECTOR_TYPE(f, PS_TYPE_F32, NULL);
+    PS_ASSERT_VECTOR_TYPE_F32_OR_F64(y, NULL);
+    PS_ASSERT_VECTOR_NON_NULL(z, NULL);
+    PS_ASSERT_VECTORS_SIZE_EQUAL(f, z, NULL);
+    PS_ASSERT_VECTOR_TYPE_F32_OR_F64(z, NULL);
     PS_ASSERT_VECTOR_NON_NULL(t, NULL);
     PS_ASSERT_VECTORS_SIZE_EQUAL(f, t, NULL);
-    PS_ASSERT_VECTOR_TYPE(t, PS_TYPE_F32, NULL);
+    PS_ASSERT_VECTOR_TYPE_F32_OR_F64(t, NULL);
     if (fErr != NULL) {
         PS_ASSERT_VECTORS_SIZE_EQUAL(fErr, mask, NULL);
-        PS_ASSERT_VECTOR_TYPE(fErr, PS_TYPE_F32, NULL);
+        PS_ASSERT_VECTOR_TYPE_F32_OR_F64(fErr, NULL);
     }
 
@@ -3520,4 +3529,5 @@
                  Nkeep, x->n);
 
+        stats->clippedNvalues = Nkeep;
         psFree (fit);
     }
