Index: trunk/psLib/test/dataManip/tst_psMinimize00.c
===================================================================
--- trunk/psLib/test/dataManip/tst_psMinimize00.c	(revision 1103)
+++ trunk/psLib/test/dataManip/tst_psMinimize00.c	(revision 1123)
@@ -11,7 +11,42 @@
 #include "psFunctions.h"
 #include "psMinimize.h"
+#include <math.h>
 #define NUM_DATA 10
 #define DATA_WIDTH 2
 #define NUM_PARAMS 4
+
+// The function is f(x) = (A * e^(lambda x)) + b
+
+float myFunc2(const psVector *restrict myData,
+              const psVector *restrict myParams)
+{
+    float x = myData->data.F32[0];
+    float A = myParams->data.F32[0];
+    float lambda = myParams->data.F32[1];
+    float b = myParams->data.F32[2];
+
+    return(A * exp(-lambda * x) + b);
+}
+
+float myFunc2Deriv(const psVector *restrict myData,
+                   const psVector *restrict myParams,
+                   int whichParamDeriv)
+{
+    float x = myData->data.F32[0];
+    float A = myParams->data.F32[0];
+    float lambda = myParams->data.F32[1];
+    float tmp = 0.0;
+
+    if (whichParamDeriv == 0) {
+        tmp = exp(-lambda * x);
+    } else if (whichParamDeriv == 1) {
+        tmp = -x * A * exp(-lambda * x);
+    } else if (whichParamDeriv == 2) {
+        tmp = 1.0;
+    }
+    return(tmp);
+}
+
+
 
 float myFunc(const psVector *restrict myData,
@@ -24,6 +59,11 @@
     float C = myParams->data.F32[2];
     float D = myParams->data.F32[3];
+    float tmp = 0.0;
 
-    return(A + (B*x) + (C*y) + (D*x*y));
+    tmp = A + (B*x) + (C*y) + (D*x*y);
+    printf("--------- myFunc((%.1f %.1f) %.1f %.1f %.1f %.1f) is %.1f ---------\n",
+           x, y, A, B, C, D, tmp);
+
+    return(tmp);
 }
 
@@ -45,4 +85,8 @@
         tmp = x * y;
     }
+
+    printf("--------- myFuncDeriv((%.1f %.1f) %.1f %.1f %.1f %.1f (%d)) is %.1f ---------\n",
+           x, y, myParams->data.F32[0], myParams->data.F32[1],
+           myParams->data.F32[2], myParams->data.F32[3], whichParamDeriv, tmp);
     return(tmp);
 }
@@ -63,4 +107,5 @@
     int testStatus = 0;
     int memLeaks = 0;
+    psVector *theParams = NULL;
 
     domain = psImageAlloc(DATA_WIDTH, NUM_DATA, PS_TYPE_F32);
@@ -71,5 +116,4 @@
     tmpVecPtr = psVectorAlloc(DATA_WIDTH, PS_TYPE_F32);
 
-    printf("FUCK: initialGuess->n is %d\n", initialGuess->n);
     // Build the data.
     initialGuess->data.F32[0] = 2.0;
@@ -77,4 +121,5 @@
     initialGuess->data.F32[2] = 4.0;
     initialGuess->data.F32[3] = 5.0;
+
     for (i = 0; i<NUM_DATA; i++) {
         for (j=0; j<DATA_WIDTH; j++) {
@@ -83,12 +128,18 @@
     }
     for (i = 0; i<NUM_DATA; i++) {
-        errors->data.F32[i] = 0.1;
+        errors->data.F32[i] = 1.0;
     }
 
+    printf("========== Setting Data Values ==========\n");
     for (i = 0; i<NUM_DATA; i++) {
         for (j=0; j<DATA_WIDTH; j++) {
-            tmpVecPtr->data.F32[i] = domain->data.F32[i][j];
+            tmpVecPtr->data.F32[j] = domain->data.F32[i][j];
         }
         data->data.F32[i] = myFunc(tmpVecPtr, initialGuess);
+    }
+
+    for (i=0;i<NUM_PARAMS;i++) {
+        initialGuess->data.F32[i] = 1.0;
+        initialGuess->data.F32[i]+= 10.0;
     }
 
@@ -97,12 +148,17 @@
                             "Calculate Histogram, no mask");
 
-    psMinimizeChi2(myFunc,
-                   myFuncDeriv,
-                   domain,
-                   data,
-                   errors,
-                   initialGuess,
-                   NULL,
-                   &chiSq);
+    theParams = psMinimizeChi2(myFunc2,
+                               myFunc2Deriv,
+                               domain,
+                               data,
+                               errors,
+                               initialGuess,
+                               NULL,
+                               &chiSq);
+    for (i=0;i<NUM_PARAMS;i++) {
+        printf("theParams[%d] is %.1f\n", i, theParams->data.F32[i]);
+    }
+
+
 
     printf("chiSq is %f\n", chiSq);
