Index: trunk/psModules/src/objects/pmSourceFitSet.c
===================================================================
--- trunk/psModules/src/objects/pmSourceFitSet.c	(revision 14652)
+++ trunk/psModules/src/objects/pmSourceFitSet.c	(revision 14846)
@@ -6,6 +6,6 @@
  *  @author GLG, MHPCC
  *
- *  @version $Revision: 1.4 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2007-08-24 00:11:02 $
+ *  @version $Revision: 1.5 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2007-09-15 01:52:12 $
  *
  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -64,12 +64,12 @@
 
     for (int i = 0; i < modelSet->n; i++) {
-	pmModel *model = modelSet->data[i];
-	
-	int nParams = pmModelClassParameterCount (model->type);
-
-	set->paramSet->data[i] = psVectorAlloc (nParams, PS_DATA_F32);
-	set->derivSet->data[i] = psVectorAlloc (nParams, PS_DATA_F32);
-
-	set->nParamSet += nParams;
+        pmModel *model = modelSet->data[i];
+
+        int nParams = pmModelClassParameterCount (model->type);
+
+        set->paramSet->data[i] = psVectorAlloc (nParams, PS_DATA_F32);
+        set->derivSet->data[i] = psVectorAlloc (nParams, PS_DATA_F32);
+
+        set->nParamSet += nParams;
     }
 
@@ -87,11 +87,11 @@
     int nParamBase = 0;
     for (int i = 0; i < thisSet->modelSet->n; i++) {
-	psVector *param = thisSet->paramSet->data[i];
-	if ((nParamBase <= nParam) && (nParam < nParamBase + param->n)) {
-	    nModel = i;
-	    nParamOne = nParam - nParamBase;
-	    break;
-	}
-	nParamBase += param->n;
+        psVector *param = thisSet->paramSet->data[i];
+        if ((nParamBase <= nParam) && (nParam < nParamBase + param->n)) {
+            nModel = i;
+            nParamOne = nParam - nParamBase;
+            break;
+        }
+        nParamBase += param->n;
     }
     assert (nModel > -1);
@@ -113,15 +113,15 @@
     int n = 0;
     for (int i = 0; i < set->paramSet->n; i++) {
-	
-	psVector *paramOne = set->paramSet->data[i];
-	psVector *derivOne = set->derivSet->data[i];
-	assert ((deriv == NULL) || (paramOne->n == derivOne->n));
-
-	for (int j = 0; j < paramOne->n; j++, n++) {
-	    param->data.F32[n] = paramOne->data.F32[j];
-	    if (deriv) {
-		deriv->data.F32[n] = derivOne->data.F32[j];
-	    }
-	}
+
+        psVector *paramOne = set->paramSet->data[i];
+        psVector *derivOne = set->derivSet->data[i];
+        assert ((deriv == NULL) || (paramOne->n == derivOne->n));
+
+        for (int j = 0; j < paramOne->n; j++, n++) {
+            param->data.F32[n] = paramOne->data.F32[j];
+            if (deriv) {
+                deriv->data.F32[n] = derivOne->data.F32[j];
+            }
+        }
     }
     return true;
@@ -135,15 +135,15 @@
     int n = 0;
     for (int i = 0; i < set->paramSet->n; i++) {
-	
-	psVector *paramOne = set->paramSet->data[i];
-	psVector *derivOne = set->derivSet->data[i];
-	assert ((deriv == NULL) || (paramOne->n == derivOne->n));
-
-	for (int j = 0; j < paramOne->n; j++, n++) {
-	    paramOne->data.F32[j] = param->data.F32[n];
-	    if (deriv) {
-		derivOne->data.F32[j] = deriv->data.F32[n];
-	    }
-	}
+
+        psVector *paramOne = set->paramSet->data[i];
+        psVector *derivOne = set->derivSet->data[i];
+        assert ((deriv == NULL) || (paramOne->n == derivOne->n));
+
+        for (int j = 0; j < paramOne->n; j++, n++) {
+            paramOne->data.F32[j] = param->data.F32[n];
+            if (deriv) {
+                derivOne->data.F32[j] = deriv->data.F32[n];
+            }
+        }
     }
     return true;
@@ -158,14 +158,14 @@
     int n = 0;
     for (int i = 0; i < set->paramSet->n; i++) {
-	
-	pmModel *model = set->modelSet->data[i];
-
-	for (int j = 0; j < model->params->n; j++, n++) {
+
+        pmModel *model = set->modelSet->data[i];
+
+        for (int j = 0; j < model->params->n; j++, n++) {
             if (psTraceGetLevel("psModules.objects") >= 4) {
                 fprintf (stderr, "%f ", param->data.F32[n]);
             }
-	    model->params->data.F32[j] = param->data.F32[n];
-	    model->dparams->data.F32[j] = dparam->data.F32[n];
-	}
+            model->params->data.F32[j] = param->data.F32[n];
+            model->dparams->data.F32[j] = dparam->data.F32[n];
+        }
         psTrace ("psModules.objects", 4, " src %d", i);
 
@@ -199,12 +199,12 @@
 
     for (int i = 0; i < thisSet->modelSet->n; i++) {
-	
-	pmModel *model = thisSet->modelSet->data[i];
-
-	psVector *paramOne = thisSet->paramSet->data[i];
-	psVector *derivOne = thisSet->derivSet->data[i];
-
-	chisqOne = model->modelFunc (derivOne, paramOne, x);
-	chisqSum += chisqOne;
+
+        pmModel *model = thisSet->modelSet->data[i];
+
+        psVector *paramOne = thisSet->paramSet->data[i];
+        psVector *derivOne = thisSet->derivSet->data[i];
+
+        chisqOne = model->modelFunc (derivOne, paramOne, x);
+        chisqSum += chisqOne;
     }
 
@@ -220,31 +220,31 @@
     int n = 0;
     for (int i = 0; i < set->paramSet->n; i++) {
-	psVector *paramOne = set->paramSet->data[i];
-
-	switch (mode) {
-	  case PM_SOURCE_FIT_NORM:
-	    // mask all but Xo,Yo,Io
-	    for (int j = 0; j < paramOne->n; j++) {
-		if (j == PM_PAR_I0) continue;
-		constraint->paramMask->data.U8[n + j] = 1;
-	    }
-	    break;
-	  case PM_SOURCE_FIT_PSF:
-	    // mask all but Xo,Yo,Io
-	    for (int j = 0; j < paramOne->n; j++) {
-		if (j == PM_PAR_XPOS) continue;
-		if (j == PM_PAR_YPOS) continue;
-		if (j == PM_PAR_I0) continue;
-		constraint->paramMask->data.U8[n + j] = 1;
-	    }
-	    break;
-	  case PM_SOURCE_FIT_EXT:
-	    // EXT model fits all params (except sky)
-	    constraint->paramMask->data.U8[n + PM_PAR_SKY] = 1;
-	    break;
-	  default:
-	    psAbort("invalid fitting mode");
-	}
-	n += paramOne->n;
+        psVector *paramOne = set->paramSet->data[i];
+
+        switch (mode) {
+          case PM_SOURCE_FIT_NORM:
+            // mask all but Xo,Yo,Io
+            for (int j = 0; j < paramOne->n; j++) {
+                if (j == PM_PAR_I0) continue;
+                constraint->paramMask->data.U8[n + j] = 1;
+            }
+            break;
+          case PM_SOURCE_FIT_PSF:
+            // mask all but Xo,Yo,Io
+            for (int j = 0; j < paramOne->n; j++) {
+                if (j == PM_PAR_XPOS) continue;
+                if (j == PM_PAR_YPOS) continue;
+                if (j == PM_PAR_I0) continue;
+                constraint->paramMask->data.U8[n + j] = 1;
+            }
+            break;
+          case PM_SOURCE_FIT_EXT:
+            // EXT model fits all params (except sky)
+            constraint->paramMask->data.U8[n + PM_PAR_SKY] = 1;
+            break;
+          default:
+            psAbort("invalid fitting mode");
+        }
+        n += paramOne->n;
     }
     return true;
@@ -343,8 +343,8 @@
         psTrace (__func__, 4, "insufficient valid pixels\n");
         psTrace("psModules.objects", 3, "---- %s() end : fail pixels ----\n", __func__);
-	for (int i = 0; i < modelSet->n; i++) {
-	    pmModel *model = modelSet->data[i];
-	    model->flags |= PM_MODEL_STATUS_BADARGS;
-	}
+        for (int i = 0; i < modelSet->n; i++) {
+            pmModel *model = modelSet->data[i];
+            model->flags |= PM_MODEL_STATUS_BADARGS;
+        }
         psFree (x);
         psFree (y);
@@ -353,5 +353,5 @@
         psFree(constraint);
         psFree (thisSet);
-	thisSet = NULL;
+        thisSet = NULL;
         return(false);
     }
@@ -382,5 +382,9 @@
             altmask->data.U8[i] = (constraint->paramMask->data.U8[i]) ? 0 : 1;
         }
-        psMinimizeGaussNewtonDelta(delta, params, altmask, x, y, yErr, pmSourceFitSetFunction);
+        if (!psMinimizeGaussNewtonDelta(delta, params, altmask, x, y, yErr, pmSourceFitSetFunction)) {
+            // Can we really do anything about it?
+            // It will happily continue on, but the presence of an error upsets the psphot cleanup
+            psErrorClear();
+        }
         for (int i = 0; i < dparams->n; i++) {
             if (!constraint->paramMask->data.U8[i])
