Index: trunk/psModules/src/objects/models/pmModel_GAUSS.c
===================================================================
--- trunk/psModules/src/objects/models/pmModel_GAUSS.c	(revision 11687)
+++ trunk/psModules/src/objects/models/pmModel_GAUSS.c	(revision 13064)
@@ -208,6 +208,6 @@
     psF32 *PAR = params->data.F32;
 
-    shape.sx  = PAR[PM_PAR_SXX] / sqrt(2.0);
-    shape.sy  = PAR[PM_PAR_SYY] / sqrt(2.0);
+    shape.sx  = PAR[PM_PAR_SXX] / M_SQRT2;
+    shape.sy  = PAR[PM_PAR_SYY] / M_SQRT2;
     shape.sxy = PAR[PM_PAR_SXY];
 
@@ -237,6 +237,6 @@
         return (1.0);
 
-    shape.sx  = PAR[PM_PAR_SXX] / sqrt(2.0);
-    shape.sy  = PAR[PM_PAR_SYY] / sqrt(2.0);
+    shape.sx  = PAR[PM_PAR_SXX] / M_SQRT2;
+    shape.sy  = PAR[PM_PAR_SYY] / M_SQRT2;
     shape.sxy = PAR[PM_PAR_SXY];
 
@@ -267,8 +267,14 @@
     }
 
-    // the 2D model for SXY actually fits SXY / (SXX^-2 + SYY^-2); correct here
-    out[PM_PAR_SXY] = pmPSF_SXYtoModel (out);
+    // the OLD 2D model for SXY actually fitted SXY / (SXX^-2 + SYY^-2); correct here
+    // out[PM_PAR_SXY] = pmPSF_SXYtoModel (out);
+
+    // the 2D PSF model fits polarization terms (E0,E1,E2)
+    // convert to shape terms (SXX,SYY,SXY)
+    // XXX user-defined value for limit?
+    pmPSF_FitToModel (out, 0.1);
 
     // apply the model limits here: this truncates excessive extrapolation
+    // XXX do we need to do this still?  should we put in asserts to test?
     for (int i = 0; i < psf->params_NEW->n; i++) {
         // apply the limits to all components or just the psf-model parameters?
Index: trunk/psModules/src/objects/models/pmModel_PGAUSS.c
===================================================================
--- trunk/psModules/src/objects/models/pmModel_PGAUSS.c	(revision 11687)
+++ trunk/psModules/src/objects/models/pmModel_PGAUSS.c	(revision 13064)
@@ -209,6 +209,6 @@
     psF32 *PAR = params->data.F32;
 
-    shape.sx  = PAR[PM_PAR_SXX] / sqrt(2.0);
-    shape.sy  = PAR[PM_PAR_SYY] / sqrt(2.0);
+    shape.sx  = PAR[PM_PAR_SXX] / M_SQRT2;
+    shape.sy  = PAR[PM_PAR_SYY] / M_SQRT2;
     shape.sxy = PAR[PM_PAR_SXY];
 
@@ -253,6 +253,6 @@
         return (1.0);
 
-    shape.sx  = PAR[PM_PAR_SXX] / sqrt(2.0);
-    shape.sy  = PAR[PM_PAR_SYY] / sqrt(2.0);
+    shape.sx  = PAR[PM_PAR_SXX] / M_SQRT2;
+    shape.sy  = PAR[PM_PAR_SYY] / M_SQRT2;
     shape.sxy = PAR[PM_PAR_SXY];
 
@@ -288,7 +288,20 @@
     }
 
-    // the 2D model for SXY actually fits SXY / (SXX^-2 + SYY^-2); correct here
-    out[PM_PAR_SXY] = pmPSF_SXYtoModel (out);
-
+    // the OLD 2D model for SXY actually fitted SXY / (SXX^-2 + SYY^-2); correct here
+    // out[PM_PAR_SXY] = pmPSF_SXYtoModel (out);
+
+    // the 2D PSF model fits polarization terms (E0,E1,E2)
+    // convert to shape terms (SXX,SYY,SXY)
+    pmPSF_FitToModel (out, 0.1);
+
+    // apply the model limits here: this truncates excessive extrapolation
+    // XXX do we need to do this still?  should we put in asserts to test?
+    for (int i = 0; i < psf->params_NEW->n; i++) {
+        // apply the limits to all components or just the psf-model parameters?
+        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);
+    }
     return(true);
 }
Index: trunk/psModules/src/objects/models/pmModel_QGAUSS.c
===================================================================
--- trunk/psModules/src/objects/models/pmModel_QGAUSS.c	(revision 11687)
+++ trunk/psModules/src/objects/models/pmModel_QGAUSS.c	(revision 13064)
@@ -238,6 +238,6 @@
     psF32 *PAR = params->data.F32;
 
-    shape.sx  = PAR[PM_PAR_SXX] / sqrt(2.0);
-    shape.sy  = PAR[PM_PAR_SYY] / sqrt(2.0);
+    shape.sx  = PAR[PM_PAR_SXX] / M_SQRT2;
+    shape.sy  = PAR[PM_PAR_SYY] / M_SQRT2;
     shape.sxy = PAR[PM_PAR_SXY];
 
@@ -284,6 +284,6 @@
         return (1.0);
 
-    shape.sx  = PAR[PM_PAR_SXX] / sqrt(2.0);
-    shape.sy  = PAR[PM_PAR_SYY] / sqrt(2.0);
+    shape.sx  = PAR[PM_PAR_SXX] / M_SQRT2;
+    shape.sy  = PAR[PM_PAR_SYY] / M_SQRT2;
     shape.sxy = PAR[PM_PAR_SXY];
 
@@ -345,8 +345,13 @@
     }
 
-    // the 2D model for SXY actually fits SXY / (SXX^-2 + SYY^-2); correct here
-    out[PM_PAR_SXY] = pmPSF_SXYtoModel (out);
+    // the OLD 2D model for SXY actually fitted SXY / (SXX^-2 + SYY^-2); correct here
+    // out[PM_PAR_SXY] = pmPSF_SXYtoModel (out);
+
+    // the 2D PSF model fits polarization terms (E0,E1,E2)
+    // convert to shape terms (SXX,SYY,SXY)
+    pmPSF_FitToModel (out, 0.1);
 
     // apply the model limits here: this truncates excessive extrapolation
+    // XXX do we need to do this still?  should we put in asserts to test?
     for (int i = 0; i < psf->params_NEW->n; i++) {
         // apply the limits to all components or just the psf-model parameters?
