Index: /trunk/psphot/src/models/pmModel_TEST1.c
===================================================================
--- /trunk/psphot/src/models/pmModel_TEST1.c	(revision 10264)
+++ /trunk/psphot/src/models/pmModel_TEST1.c	(revision 10265)
@@ -58,4 +58,5 @@
 }
 
+# if (0)
 // define the parameter limits
 bool PM_MODEL_LIMITS (psVector **beta_lim, psVector **params_min, psVector **params_max)
@@ -92,4 +93,69 @@
     return (TRUE);
 }
+# endif
+
+// define the parameter limits
+bool PM_MODEL_LIMITS (psMinConstraintMode mode, int nParam, float *params, float *beta) 
+{
+    float beta_lim, params_min, params_max;
+
+    switch (mode) {
+      case PS_MINIMIZE_BETA_LIMIT:
+	switch (nParam) {
+	  case PM_PAR_SKY:  beta_lim = 1000;  break;
+	  case PM_PAR_I0:   beta_lim = 3e6;   break;
+	  case PM_PAR_XPOS: beta_lim = 5;     break;
+	  case PM_PAR_YPOS: beta_lim = 5;     break;
+	  case PM_PAR_SXX:  beta_lim = 0.5;   break;
+	  case PM_PAR_SYY:  beta_lim = 0.5;   break;
+	  case PM_PAR_SXY:  beta_lim = 0.5;   break;
+	  default:
+	    psAbort ("psModules.pmModel_GAUSS", "invalid parameter %d for beta test", nParam);
+	}
+	if (fabs(beta[nParam]) > fabs(beta_lim)) {
+	    beta[nParam] = (beta[nParam] > 0) ? fabs(beta_lim) : -fabs(beta_lim);
+	    return false;
+	}
+	return true;
+      case PS_MINIMIZE_PARAM_MIN:
+	switch (nParam) {
+	  case PM_PAR_SKY:  params_min = -1000; break;
+	  case PM_PAR_I0:   params_min =     0; break;
+	  case PM_PAR_XPOS: params_min =  -100; break;
+	  case PM_PAR_YPOS: params_min =  -100; break;
+	  case PM_PAR_SXX:  params_min =   0.5; break;
+	  case PM_PAR_SYY:  params_min =   0.5; break;
+	  case PM_PAR_SXY:  params_min =  -5.0; break;
+	  default:
+	    psAbort ("psModules.pmModel_GAUSS", "invalid parameter %d for param min test", nParam);
+	}
+	if (params[nParam] < params_min) {
+	    params[nParam] = params_min;
+	    return false;
+	}
+	return true;
+      case PS_MINIMIZE_PARAM_MAX:
+	switch (nParam) {
+	  case PM_PAR_SKY:  params_max =   1e5; break;
+	  case PM_PAR_I0:   params_max =   1e8; break;
+	  case PM_PAR_XPOS: params_max =   1e4; break;
+	  case PM_PAR_YPOS: params_max =   1e4; break;
+	  case PM_PAR_SXX:  params_max =   100; break;
+	  case PM_PAR_SYY:  params_max =   100; break;
+	  case PM_PAR_SXY:  params_max =  +5.0; break;
+	  default:
+	    psAbort ("psModules.pmModel_GAUSS", "invalid parameter %d for param max test", nParam);
+	}
+	if (params[nParam] > params_max) {
+	    params[nParam] = params_max;
+	    return false;
+	}
+	return true;
+      default:
+	psAbort ("psModules.pmModel_GAUSS", "invalid choice for limits");
+    }
+    psAbort ("psModules.pmModel_GAUSS", "should not reach here");
+    return false;
+}
 
 // make an initial guess for parameters
@@ -123,5 +189,5 @@
 
     // Area is equivalent to 2 pi sigma^2
-    psEllipseAxes axes = psEllipseShapeToAxes (shape);
+    psEllipseAxes axes = psEllipseShapeToAxes (shape, 20.0);
     psF64 Area = 2.0 * M_PI * axes.major * axes.minor;
 
@@ -167,5 +233,5 @@
 
     // this estimates the radius assuming f(z) is roughly exp(-z)
-    psEllipseAxes axes = psEllipseShapeToAxes (shape);
+    psEllipseAxes axes = psEllipseShapeToAxes (shape, 20.0);
     psF64 radius = axes.major * sqrt (2.0 * log(params->data.F32[PM_PAR_I0] / flux));
 
