Index: trunk/psModules/src/objects/pmSourceFitModel.c
===================================================================
--- trunk/psModules/src/objects/pmSourceFitModel.c	(revision 6944)
+++ trunk/psModules/src/objects/pmSourceFitModel.c	(revision 6945)
@@ -6,6 +6,6 @@
  *  @author GLG, MHPCC
  *
- *  @version $Revision: 1.2 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2006-04-17 18:01:05 $
+ *  @version $Revision: 1.3 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2006-04-21 21:29:47 $
  *
  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -91,4 +91,5 @@
 
             psVector *coord = psVectorAlloc(2, PS_TYPE_F32);
+            coord->n = 2;
 
             // Convert i/j to image space:
@@ -123,4 +124,5 @@
     // set parameter mask based on fitting mode
     paramMask = psVectorAlloc (params->n, PS_TYPE_U8);
+    paramMask->n = params->n;
     psVectorInit (paramMask, 1);
 
@@ -175,4 +177,12 @@
     modelLimits (&constrain->paramDelta, &constrain->paramMin, &constrain->paramMax);
 
+    // force the floating parameters to fall within the contraint ranges
+    for (int i = 0; i < params->n; i++) {
+        if (constrain->paramMask->data.U8[i])
+            continue;
+        params->data.F32[i] = PS_MIN(constrain->paramMax->data.F32[i], params->data.F32[i]);
+        params->data.F32[i] = PS_MAX(constrain->paramMin->data.F32[i], params->data.F32[i]);
+    }
+
     psImage *covar = psImageAlloc (params->n, params->n, PS_TYPE_F64);
 
@@ -194,4 +204,5 @@
     if (paramMask != NULL) {
         psVector *delta = psVectorAlloc (params->n, PS_TYPE_F64);
+        delta->n = params->n;
         psMinimizeGaussNewtonDelta(delta, params, NULL, x, y, yErr, modelFunc);
         for (int i = 0; i < dparams->n; i++) {
@@ -257,4 +268,5 @@
     onePar = psVectorAlloc (nPar, PS_DATA_F32);
     oneDeriv = psVectorAlloc (nPar, PS_DATA_F32);
+    onePar->n = oneDeriv->n = nPar;
 
     return true;
@@ -341,4 +353,6 @@
     psVector *params = psVectorAlloc (nSrc*nPar + 1, PS_TYPE_F32);
     psVector *dparams = psVectorAlloc (nSrc*nPar + 1, PS_TYPE_F32);
+    params->n = params->nalloc;
+    dparams->n = dparams->nalloc;
 
     pmModelLimits modelLimits = pmModelLimits_GetFunction (model->type);
@@ -355,4 +369,8 @@
     constrain->paramMask = psVectorAlloc (nSrc*nPar + 1, PS_TYPE_U8);
     constrain->paramDelta = psVectorAlloc (nSrc*nPar + 1, PS_TYPE_F32);
+    constrain->paramMin->n = constrain->paramMin->nalloc;
+    constrain->paramMax->n = constrain->paramMax->nalloc;
+    constrain->paramMask->n = constrain->paramMask->nalloc;
+    constrain->paramDelta->n = constrain->paramDelta->nalloc;
 
     // set the parameter guesses and constraints for the multiple models
@@ -422,4 +440,12 @@
     }
 
+    // force the floating parameters to fall within the contraint ranges
+    for (int i = 0; i < params->n; i++) {
+        if (constrain->paramMask->data.U8[i])
+            continue;
+        params->data.F32[i] = PS_MIN(constrain->paramMax->data.F32[i], params->data.F32[i]);
+        params->data.F32[i] = PS_MAX(constrain->paramMin->data.F32[i], params->data.F32[i]);
+    }
+
     // maximum number of valid pixels
     psS32 nPix = source->pixels->numRows * source->pixels->numCols;
@@ -445,4 +471,5 @@
             }
             psVector *coord = psVectorAlloc(2, PS_TYPE_F32);
+            coord->n = 2;
 
             // Convert i/j to image space:
@@ -498,4 +525,5 @@
     if (constrain->paramMask != NULL) {
         psVector *delta = psVectorAlloc (params->n, PS_TYPE_F64);
+        delta->n = params->n;
         psMinimizeGaussNewtonDelta(delta, params, NULL, x, y, yErr, pmModelFitSet);
         for (int i = 0; i < dparams->n; i++) {
