Index: trunk/psModules/src/objects/models/pmModel_GAUSS.c
===================================================================
--- trunk/psModules/src/objects/models/pmModel_GAUSS.c	(revision 13773)
+++ trunk/psModules/src/objects/models/pmModel_GAUSS.c	(revision 13803)
@@ -104,4 +104,6 @@
         if (fabs(beta[nParam]) > fabs(beta_lim)) {
             beta[nParam] = (beta[nParam] > 0) ? fabs(beta_lim) : -fabs(beta_lim);
+	    psTrace ("psModules.objects", 5, "|beta[nParam==%d]| > |beta_lim|; %g v. %g",
+		     nParam, beta[nParam], beta_lim);
             return false;
         }
@@ -135,4 +137,6 @@
         if (params[nParam] < params_min) {
             params[nParam] = params_min;
+	    psTrace ("psModules.objects", 5, "params[nParam==%d] < params_min; %g v. %g",
+		     nParam, params[nParam], params_min);
             return false;
         }
@@ -166,4 +170,6 @@
         if (params[nParam] > params_max) {
             params[nParam] = params_max;
+	    psTrace ("psModules.objects", 5, "params[nParam==%d] > params_max; %g v. %g",
+		     nParam, params[nParam], params_max);
             return false;
         }
@@ -285,6 +291,13 @@
         if (psf->params_NEW->data[i] == NULL)
             continue;
-        PM_MODEL_LIMITS (PS_MINIMIZE_PARAM_MIN, i, out, NULL);
-        PM_MODEL_LIMITS (PS_MINIMIZE_PARAM_MAX, i, out, NULL);
+
+	bool status = true;
+        status &= PM_MODEL_LIMITS (PS_MINIMIZE_PARAM_MIN, i, out, NULL);
+        status &= PM_MODEL_LIMITS (PS_MINIMIZE_PARAM_MAX, i, out, NULL);
+	if (!status) {
+	    psTrace ("psModules.objects", 5, "Hitting parameter limits at (r,c) = (%.1f, %.1f)",
+		     in[PM_PAR_XPOS], in[PM_PAR_YPOS]);
+	    modelPSF->flags |= PM_MODEL_STATUS_LIMITS;
+	}
     }
     return(true);
Index: trunk/psModules/src/objects/models/pmModel_PGAUSS.c
===================================================================
--- trunk/psModules/src/objects/models/pmModel_PGAUSS.c	(revision 13773)
+++ trunk/psModules/src/objects/models/pmModel_PGAUSS.c	(revision 13803)
@@ -106,4 +106,6 @@
         if (fabs(beta[nParam]) > fabs(beta_lim)) {
             beta[nParam] = (beta[nParam] > 0) ? fabs(beta_lim) : -fabs(beta_lim);
+	    psTrace ("psModules.objects", 5, "|beta[nParam==%d]| > |beta_lim|; %g v. %g",
+		     nParam, beta[nParam], beta_lim);
             return false;
         }
@@ -137,4 +139,6 @@
         if (params[nParam] < params_min) {
             params[nParam] = params_min;
+	    psTrace ("psModules.objects", 5, "params[nParam==%d] < params_min; %g v. %g",
+		     nParam, params[nParam], params_min);
             return false;
         }
@@ -168,4 +172,6 @@
         if (params[nParam] > params_max) {
             params[nParam] = params_max;
+	    psTrace ("psModules.objects", 5, "params[nParam==%d] > params_max; %g v. %g",
+		     nParam, params[nParam], params_max);
             return false;
         }
@@ -305,6 +311,13 @@
         if (psf->params_NEW->data[i] == NULL)
             continue;
-        PM_MODEL_LIMITS (PS_MINIMIZE_PARAM_MIN, i, out, NULL);
-        PM_MODEL_LIMITS (PS_MINIMIZE_PARAM_MAX, i, out, NULL);
+
+	bool status = true;
+        status &= PM_MODEL_LIMITS (PS_MINIMIZE_PARAM_MIN, i, out, NULL);
+        status &= PM_MODEL_LIMITS (PS_MINIMIZE_PARAM_MAX, i, out, NULL);
+	if (!status) {
+	    psTrace ("psModules.objects", 5, "Hitting parameter limits at (r,c) = (%.1f, %.1f)",
+		     in[PM_PAR_XPOS], in[PM_PAR_YPOS]);
+	    modelPSF->flags |= PM_MODEL_STATUS_LIMITS;
+	}
     }
     return(true);
Index: trunk/psModules/src/objects/models/pmModel_QGAUSS.c
===================================================================
--- trunk/psModules/src/objects/models/pmModel_QGAUSS.c	(revision 13773)
+++ trunk/psModules/src/objects/models/pmModel_QGAUSS.c	(revision 13803)
@@ -127,6 +127,6 @@
         if (fabs(beta[nParam]) > fabs(beta_lim)) {
             beta[nParam] = (beta[nParam] > 0) ? fabs(beta_lim) : -fabs(beta_lim);
-	    psError(PM_ERR_PSF, true, "|beta[nParam==%d]| > |beta_lim|; %g v. %g",
-		    nParam, beta[nParam], beta_lim);
+	    psTrace ("psModules.objects", 5, "|beta[nParam==%d]| > |beta_lim|; %g v. %g",
+		     nParam, beta[nParam], beta_lim);
             return false;
         }
@@ -163,6 +163,6 @@
         if (params[nParam] < params_min) {
             params[nParam] = params_min;
-	    psError(PM_ERR_PSF, true, "params[nParam==%d] < params_min; %g v. %g",
-		    nParam, params[nParam], params_min);
+	    psTrace ("psModules.objects", 5, "params[nParam==%d] < params_min; %g v. %g",
+		     nParam, params[nParam], params_min);
             return false;
         }
@@ -199,6 +199,6 @@
         if (params[nParam] > params_max) {
             params[nParam] = params_max;
-	    psError(PM_ERR_PSF, true, "params[nParam==%d] > params_max; %g v. %g",
-		    nParam, params[nParam], params_max);
+	    psTrace ("psModules.objects", 5, "params[nParam==%d] > params_max; %g v. %g",
+		     nParam, params[nParam], params_max);
             return false;
         }
@@ -372,13 +372,15 @@
             continue;
 
-        if (!PM_MODEL_LIMITS(PS_MINIMIZE_PARAM_MIN, i, out, NULL) ||
-	    !PM_MODEL_LIMITS(PS_MINIMIZE_PARAM_MAX, i, out, NULL)) {
-	    psError(PM_ERR_PSF, false, "Setting limits at (r,c) = (%.1f, %.1f)",
-		    in[PM_PAR_XPOS], in[PM_PAR_YPOS]);
-	    return false;
+	bool status = true;
+        status &= PM_MODEL_LIMITS(PS_MINIMIZE_PARAM_MIN, i, out, NULL);
+	status &= PM_MODEL_LIMITS(PS_MINIMIZE_PARAM_MAX, i, out, NULL);
+	if (!status) {
+	    psTrace ("psModules.objects", 5, "Hitting parameter limits at (r,c) = (%.1f, %.1f)",
+		     in[PM_PAR_XPOS], in[PM_PAR_YPOS]);
+	    modelPSF->flags |= PM_MODEL_STATUS_LIMITS;
 	}
     }
 
-    return(true);
+    return true;
 }
 
Index: trunk/psModules/src/objects/pmModel.c
===================================================================
--- trunk/psModules/src/objects/pmModel.c	(revision 13773)
+++ trunk/psModules/src/objects/pmModel.c	(revision 13803)
@@ -6,6 +6,6 @@
  *  @author EAM, IfA
  *
- *  @version $Revision: 1.11 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2007-04-26 01:45:35 $
+ *  @version $Revision: 1.12 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2007-06-13 23:41:51 $
  *
  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -59,5 +59,5 @@
     tmp->nIter = 0;
     tmp->radiusFit = 0;
-    tmp->status = PM_MODEL_UNTRIED;
+    tmp->flags = PM_MODEL_STATUS_NONE;
     tmp->residuals = NULL;		// XXX should the model own this memory?
 
@@ -86,8 +86,8 @@
     pmModel *new = pmModelAlloc (model->type);
 
-    new->chisq  = model->chisq;
-    new->nDOF   = model->nDOF;
-    new->nIter  = model->nIter;
-    new->status = model->status;
+    new->chisq     = model->chisq;
+    new->nDOF      = model->nDOF;
+    new->nIter     = model->nIter;
+    new->flags     = model->flags;
     new->radiusFit = model->radiusFit;
 
Index: trunk/psModules/src/objects/pmModel.h
===================================================================
--- trunk/psModules/src/objects/pmModel.h	(revision 13773)
+++ trunk/psModules/src/objects/pmModel.h	(revision 13803)
@@ -5,6 +5,6 @@
  * @author EAM, IfA
  *
- * @version $Revision: 1.9 $ $Name: not supported by cvs2svn $
- * @date $Date: 2007-05-10 19:48:35 $
+ * @version $Revision: 1.10 $ $Name: not supported by cvs2svn $
+ * @date $Date: 2007-06-13 23:41:51 $
  *
  * Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -21,9 +21,10 @@
 
 typedef enum {
-    PM_MODEL_UNTRIED,   ///< model fit not yet attempted
-    PM_MODEL_SUCCESS,   ///< model fit succeeded
-    PM_MODEL_NONCONVERGE,  ///< model fit did not converge
-    PM_MODEL_OFFIMAGE,   ///< model fit drove out of range
-    PM_MODEL_BADARGS   ///< model fit called with invalid args
+    PM_MODEL_STATUS_NONE         = 0x00, ///< model fit not yet attempted, no other info
+    PM_MODEL_STATUS_FITTED       = 0x01, ///< model fit completed
+    PM_MODEL_STATUS_NONCONVERGE  = 0x02, ///< model fit did not converge
+    PM_MODEL_STATUS_OFFIMAGE     = 0x04, ///< model fit drove out of range
+    PM_MODEL_STATUS_BADARGS      = 0x08, ///< model fit called with invalid args
+    PM_MODEL_STATUS_LIMITS       = 0x10  ///< model parameters hit limits
 } pmModelStatus;
 
@@ -58,5 +59,5 @@
     int nDOF;				///< number of degrees of freedom
     int nIter;				///< number of iterations to reach min
-    pmModelStatus status;		///< fit status
+    pmModelStatus flags;		///< model status flags
     float radiusFit;			///< fit radius actually used
     pmResiduals *residuals; 		///< normalized PSF residuals 
Index: trunk/psModules/src/objects/pmPSF.c
===================================================================
--- trunk/psModules/src/objects/pmPSF.c	(revision 13773)
+++ trunk/psModules/src/objects/pmPSF.c	(revision 13803)
@@ -6,6 +6,6 @@
  *  @author EAM, IfA
  *
- *  @version $Revision: 1.23 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2007-05-18 14:08:34 $
+ *  @version $Revision: 1.24 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2007-06-13 23:41:51 $
  *
  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -180,5 +180,5 @@
     // set model parameters for this source based on PSF information
     if (!modelFromPSFFunc (modelPSF, modelEXT, psf)) {
-	psError(PM_ERR_PSF, true, "Failed to set model params from PSF");
+	psError(PM_ERR_PSF, false, "Failed to set model params from PSF");
 	psFree(modelPSF);
 	return NULL;
Index: trunk/psModules/src/objects/pmPSFtry.c
===================================================================
--- trunk/psModules/src/objects/pmPSFtry.c	(revision 13773)
+++ trunk/psModules/src/objects/pmPSFtry.c	(revision 13803)
@@ -5,6 +5,6 @@
  *  @author EAM, IfA
  *
- *  @version $Revision: 1.41 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2007-05-25 00:16:03 $
+ *  @version $Revision: 1.42 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2007-06-13 23:41:51 $
  *
  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -155,4 +155,6 @@
         source->modelPSF = pmModelFromPSF (source->modelEXT, psfTry->psf);
 	if (source->modelPSF == NULL) {
+            psfTry->mask->data.U8[i] = PSFTRY_MASK_BAD_MODEL;
+	    abort();
 	    continue;
 	}
Index: trunk/psModules/src/objects/pmPSFtry.h
===================================================================
--- trunk/psModules/src/objects/pmPSFtry.h	(revision 13773)
+++ trunk/psModules/src/objects/pmPSFtry.h	(revision 13803)
@@ -6,6 +6,6 @@
  * @author EAM, IfA
  *
- * @version $Revision: 1.11 $ $Name: not supported by cvs2svn $
- * @date $Date: 2007-01-24 02:54:15 $
+ * @version $Revision: 1.12 $ $Name: not supported by cvs2svn $
+ * @date $Date: 2007-06-13 23:41:51 $
  * Copyright 2004 Maui High Performance Computing Center, University of Hawaii
  */
@@ -68,5 +68,6 @@
     PSFTRY_MASK_PSF_FAIL = 0x04,        ///< 3: psf model failed to converge
     PSFTRY_MASK_BAD_PHOT = 0x08,        ///< 4: invalid source photometry
-    PSFTRY_MASK_ALL      = 0x0f,        ///< Add comment.
+    PSFTRY_MASK_BAD_MODEL= 0x10,        ///< 5: could not build PSF from EXT (!??)
+    PSFTRY_MASK_ALL      = 0x1f,        ///< Add comment.
 } pmPSFtryMaskValues;
 
Index: trunk/psModules/src/objects/pmSourceFitModel.c
===================================================================
--- trunk/psModules/src/objects/pmSourceFitModel.c	(revision 13773)
+++ trunk/psModules/src/objects/pmSourceFitModel.c	(revision 13803)
@@ -6,6 +6,6 @@
  *  @author GLG, MHPCC
  *
- *  @version $Revision: 1.21 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2007-04-26 01:20:29 $
+ *  @version $Revision: 1.22 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2007-06-13 23:41:51 $
  *
  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -157,5 +157,5 @@
     if (nPix <  nParams + 1) {
         psTrace ("psModules.objects", 4, "insufficient valid pixels\n");
-        model->status = PM_MODEL_BADARGS;
+        model->flags |= PM_MODEL_STATUS_BADARGS;
         psFree (x);
         psFree (y);
@@ -184,4 +184,6 @@
     model->nIter = myMin->iter;
     model->nDOF  = y->n - nParams;
+    model->flags |= PM_MODEL_STATUS_FITTED;
+    if (!fitStatus) model->flags |= PM_MODEL_STATUS_NONCONVERGE;
 
     // get the Gauss-Newton distance for fixed model parameters
@@ -207,11 +209,4 @@
     }
 
-    // set the model success or failure status
-    if (!fitStatus) {
-        model->status = PM_MODEL_NONCONVERGE;
-    } else {
-        model->status = PM_MODEL_SUCCESS;
-    }
-
     // models can go insane: reject these
     onPic &= (params->data.F32[PM_PAR_XPOS] >= source->pixels->col0);
@@ -220,5 +215,5 @@
     onPic &= (params->data.F32[PM_PAR_YPOS] <  source->pixels->row0 + source->pixels->numRows);
     if (!onPic) {
-        model->status = PM_MODEL_OFFIMAGE;
+        model->flags |= PM_MODEL_STATUS_OFFIMAGE;
     }
 
@@ -461,5 +456,5 @@
         psTrace (__func__, 4, "insufficient valid pixels\n");
         psTrace("psModules.objects", 3, "---- %s() end : fail pixels ----\n", __func__);
-        model->status = PM_MODEL_BADARGS;
+        model->flags |= PM_MODEL_STATUS_BADARGS;
         psFree (x);
         psFree (y);
@@ -529,5 +524,6 @@
 
         // set the model success or failure status
-        model->status = fitStatus ? PM_MODEL_SUCCESS : PM_MODEL_NONCONVERGE;
+	model->flags |= PM_MODEL_STATUS_FITTED;
+	if (!fitStatus) model->flags |= PM_MODEL_STATUS_NONCONVERGE;
 
         // models can go insane: reject these
@@ -536,7 +532,5 @@
         onPic &= (model->params->data.F32[PM_PAR_XPOS] >= source->pixels->row0);
         onPic &= (model->params->data.F32[PM_PAR_XPOS] <  source->pixels->row0 + source->pixels->numRows);
-        if (!onPic) {
-            model->status = PM_MODEL_OFFIMAGE;
-        }
+        if (!onPic) model->flags |= PM_MODEL_STATUS_OFFIMAGE;
     }
     psTrace ("psModules.objects", 4, "niter: %d, chisq: %f", myMin->iter, myMin->value);
