Index: /trunk/psLib/src/math/psMinimizeLMM.c
===================================================================
--- /trunk/psLib/src/math/psMinimizeLMM.c	(revision 6900)
+++ /trunk/psLib/src/math/psMinimizeLMM.c	(revision 6901)
@@ -10,6 +10,6 @@
  *  @author EAM, IfA
  *
- *  @version $Revision: 1.11 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2006-03-06 20:40:50 $
+ *  @version $Revision: 1.12 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2006-04-19 18:31:17 $
  *
  *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
@@ -23,4 +23,5 @@
 #include <math.h>
 
+#include "psAbort.h"
 #include "psMinimizeLMM.h"
 #include "psImage.h"
@@ -177,5 +178,5 @@
     psF64 rcF64 = p_psMinLM_SetABX(alpha, beta, params, paramMask, x, y, dy, func);
     if (isnan(rcF64)) {
-        psError(PS_ERR_UNKNOWN, false, "p_psMinLM_SetABX() retruned a NAN.\n");
+        psError(PS_ERR_UNKNOWN, false, "p_psMinLM_SetABX() returned a NAN.\n");
         rc = false;
     }
@@ -184,5 +185,5 @@
     psBool rcBool = p_psMinLM_GuessABP(Alpha, delta, Params, alpha, beta, params, paramMask, NULL, NULL, NULL, 0.0);
     if (rcBool == false) {
-        psError(PS_ERR_UNKNOWN, false, "p_psMinLM_GuessABP() retruned FALSE.\n");
+        psError(PS_ERR_UNKNOWN, false, "p_psMinLM_GuessABP() returned FALSE.\n");
         rc = false;
     }
@@ -259,4 +260,10 @@
         delta = ymodel - y->data.F32[i];
         chisq += PS_SQR(delta) * dy->data.F32[i];
+        if (isnan(dy->data.F32[i]))
+            psAbort ("psMinLMM", "nan in weights");
+        if (isnan(delta))
+            psAbort ("psMinLMM", "nan in delta");
+        if (isnan(chisq))
+            psAbort ("psMinLMM", "nan in chisq");
 
         for (psS32 j = 0; j < params->n; j++) {
@@ -440,4 +447,9 @@
         // calculate Chisq for new guess, update Alpha & Beta
         Chisq = p_psMinLM_SetABX(Alpha, Beta, Params, paramMask, x, y, dy, func);
+        if (isnan(Chisq)) {
+            min->iter ++;
+            lambda *= 10.0;
+            continue;
+        }
 
         // XXX EAM alternate convergence criterion:
