Index: trunk/psModules/src/objects/models/pmModel_GAUSS.c
===================================================================
--- trunk/psModules/src/objects/models/pmModel_GAUSS.c	(revision 42092)
+++ trunk/psModules/src/objects/models/pmModel_GAUSS.c	(revision 42093)
@@ -203,5 +203,6 @@
 
     // set the shape parameters
-    if (!pmModelSetShape(&PAR[PM_PAR_SXX], &PAR[PM_PAR_SXY], &PAR[PM_PAR_SYY], source->moments, false)) {
+    // the last parameter is the scaling factor for Moments to shape parameter radius guess
+    if (!pmModelSetShape(&PAR[PM_PAR_SXX], &PAR[PM_PAR_SXY], &PAR[PM_PAR_SYY], source->moments, false, 1.0)) {
       return false;
     }
Index: trunk/psModules/src/objects/models/pmModel_HSC_V1.c
===================================================================
--- trunk/psModules/src/objects/models/pmModel_HSC_V1.c	(revision 42092)
+++ trunk/psModules/src/objects/models/pmModel_HSC_V1.c	(revision 42093)
@@ -223,5 +223,6 @@
 
     // set the shape parameters
-    if (!pmModelSetShape(&PAR[PM_PAR_SXX], &PAR[PM_PAR_SXY], &PAR[PM_PAR_SYY], source->moments, false)) {
+    // the last parameter is the scaling factor for Moments to shape parameter radius guess
+    if (!pmModelSetShape(&PAR[PM_PAR_SXX], &PAR[PM_PAR_SXY], &PAR[PM_PAR_SYY], source->moments, false, 1.0)) {
       return false;
     }
Index: trunk/psModules/src/objects/models/pmModel_PGAUSS.c
===================================================================
--- trunk/psModules/src/objects/models/pmModel_PGAUSS.c	(revision 42092)
+++ trunk/psModules/src/objects/models/pmModel_PGAUSS.c	(revision 42093)
@@ -204,5 +204,6 @@
 
     // set the shape parameters
-    if (!pmModelSetShape(&PAR[PM_PAR_SXX], &PAR[PM_PAR_SXY], &PAR[PM_PAR_SYY], source->moments, false)) {
+    // the last parameter is the scaling factor for Moments to shape parameter radius guess
+    if (!pmModelSetShape(&PAR[PM_PAR_SXX], &PAR[PM_PAR_SXY], &PAR[PM_PAR_SYY], source->moments, false, 1.0)) {
       return false;
     }
Index: trunk/psModules/src/objects/models/pmModel_PS1_V1.c
===================================================================
--- trunk/psModules/src/objects/models/pmModel_PS1_V1.c	(revision 42092)
+++ trunk/psModules/src/objects/models/pmModel_PS1_V1.c	(revision 42093)
@@ -223,5 +223,6 @@
 
     // set the shape parameters
-    if (!pmModelSetShape(&PAR[PM_PAR_SXX], &PAR[PM_PAR_SXY], &PAR[PM_PAR_SYY], source->moments, false)) {
+    // the last parameter is the scaling factor for Moments to shape parameter radius guess
+    if (!pmModelSetShape(&PAR[PM_PAR_SXX], &PAR[PM_PAR_SXY], &PAR[PM_PAR_SYY], source->moments, false, 1.0)) {
       return false;
     }
Index: trunk/psModules/src/objects/models/pmModel_QGAUSS.c
===================================================================
--- trunk/psModules/src/objects/models/pmModel_QGAUSS.c	(revision 42092)
+++ trunk/psModules/src/objects/models/pmModel_QGAUSS.c	(revision 42093)
@@ -224,5 +224,6 @@
 
     // set the shape parameters
-    if (!pmModelSetShape(&PAR[PM_PAR_SXX], &PAR[PM_PAR_SXY], &PAR[PM_PAR_SYY], source->moments, false)) {
+    // the last parameter is the scaling factor for Moments to shape parameter radius guess
+    if (!pmModelSetShape(&PAR[PM_PAR_SXX], &PAR[PM_PAR_SXY], &PAR[PM_PAR_SYY], source->moments, false, 1.5)) {
       return false;
     }
Index: trunk/psModules/src/objects/models/pmModel_RGAUSS.c
===================================================================
--- trunk/psModules/src/objects/models/pmModel_RGAUSS.c	(revision 42092)
+++ trunk/psModules/src/objects/models/pmModel_RGAUSS.c	(revision 42093)
@@ -213,5 +213,6 @@
 
     // set the shape parameters
-    if (!pmModelSetShape(&PAR[PM_PAR_SXX], &PAR[PM_PAR_SXY], &PAR[PM_PAR_SYY], source->moments, false)) {
+    // the last parameter is the scaling factor for Moments to shape parameter radius guess
+    if (!pmModelSetShape(&PAR[PM_PAR_SXX], &PAR[PM_PAR_SXY], &PAR[PM_PAR_SYY], source->moments, false, 2.0)) {
       return false;
     }
Index: trunk/psModules/src/objects/pmModelUtils.c
===================================================================
--- trunk/psModules/src/objects/pmModelUtils.c	(revision 42092)
+++ trunk/psModules/src/objects/pmModelUtils.c	(revision 42093)
@@ -179,5 +179,6 @@
 // Reff says if this is a model which uses R_eff (like exp or dev) instead of Sigma
 // set the parameter values SXX, SXY, SYY
-bool pmModelSetShape (float *Sxx, float *Sxy, float *Syy, pmMoments *moments, bool useReff) {
+// Scale allows some models to increase the guess size relative to Mxx,Myy
+bool pmModelSetShape (float *Sxx, float *Sxy, float *Syy, pmMoments *moments, bool useReff, float Scale) {
 
     psEllipseMoments emoments;
@@ -190,13 +191,19 @@
 
     if (!isfinite(axes.major)) return false;
-    if (axes.major == 0) return false;
     if (!isfinite(axes.minor)) return false;
     if (!isfinite(axes.theta)) return false;
-    if (axes.major == 0) return false;
-
+
+    // set a lower limit to avoid absurd solutions..
+    // NOTE: I should set the lower limit based on the PSF size, if known
+    float Rmajor = PS_MAX(1.0, Scale * axes.major);
+    float Rminor = Rmajor * (axes.minor / axes.major);
+    axes.major = Rmajor;
+    axes.minor = Rminor;
+
+    // EAM 2022.02.05 : Mrf is often much too large, disable this for now
     // Mxx, Mxy, Myy define the elliptical shape, but Mrf defines the width 
-    float scale = (isfinite(moments->Mrf) && (moments->Mrf > 0.0)) ? moments->Mrf / axes.major : 1.0;
-    axes.major *= scale;
-    axes.minor *= scale;
+    // float scale = (isfinite(moments->Mrf) && (moments->Mrf > 0.0)) ? moments->Mrf / axes.major : 1.0;
+    // axes.major *= scale;
+    // axes.minor *= scale;
 
     pmModelAxesToParams (Sxx, Sxy, Syy, axes, useReff);
Index: trunk/psModules/src/objects/pmModelUtils.h
===================================================================
--- trunk/psModules/src/objects/pmModelUtils.h	(revision 42092)
+++ trunk/psModules/src/objects/pmModelUtils.h	(revision 42093)
@@ -44,5 +44,5 @@
 bool pmModelSetPosition (float *Xo, float *Yo, pmSource *source);
 bool pmModelSetNorm (float *Io, pmSource *source);
-bool pmModelSetShape (float *Sxx, float *Sxy, float *Syy, pmMoments *moments, bool useReff);
+bool pmModelSetShape (float *Sxx, float *Sxy, float *Syy, pmMoments *moments, bool useReff, float Scale);
 
 bool pmModelUseReff (pmModelType type);
Index: trunk/psModules/src/objects/pmPSFtryModel.c
===================================================================
--- trunk/psModules/src/objects/pmPSFtryModel.c	(revision 42092)
+++ trunk/psModules/src/objects/pmPSFtryModel.c	(revision 42093)
@@ -151,9 +151,11 @@
         if (Nx > Ny) {
             options->psfTrendNx = i;
-            options->psfTrendNy = PS_MAX (orderMin, (int)(i * (Ny / Nx) + 0.5));
+            options->psfTrendNy = PS_MAX (orderMin, (int)(i * (Ny / (float) Nx) + 0.5));
         } else {
             options->psfTrendNy = i;
-            options->psfTrendNx = PS_MAX (orderMin, (int)(i * (Nx / Ny) + 0.5));
-        }
+            options->psfTrendNx = PS_MAX (orderMin, (int)(i * (Nx / (float) Ny) + 0.5));
+        }
+
+	fprintf (stderr, "fitting %d x %d model for PSF\n", options->psfTrendNx, options->psfTrendNy);
 
         // free existing data, if any
Index: trunk/psModules/src/objects/pmSourceFitModel.c
===================================================================
--- trunk/psModules/src/objects/pmSourceFitModel.c	(revision 42092)
+++ trunk/psModules/src/objects/pmSourceFitModel.c	(revision 42093)
@@ -69,4 +69,5 @@
     opt->chisqConvergence = true;
     opt->isInteractive = false;
+    opt->useReweighting = false;
 
     return opt;
@@ -251,4 +252,5 @@
     myMin->chisqConvergence = options->chisqConvergence;
     myMin->isInteractive = options->isInteractive;
+    myMin->useReweighting = options->useReweighting;
 
     psImage *covar = psImageAlloc (params->n, params->n, PS_TYPE_F32);
Index: trunk/psModules/src/objects/pmSourceFitModel.h
===================================================================
--- trunk/psModules/src/objects/pmSourceFitModel.h	(revision 42092)
+++ trunk/psModules/src/objects/pmSourceFitModel.h	(revision 42093)
@@ -40,4 +40,5 @@
     bool chisqConvergence; 
     bool isInteractive;
+    bool useReweighting;
 } pmSourceFitOptions;
 
Index: trunk/psModules/src/objects/pmSourceIO_CMF.c.in
===================================================================
--- trunk/psModules/src/objects/pmSourceIO_CMF.c.in	(revision 42092)
+++ trunk/psModules/src/objects/pmSourceIO_CMF.c.in	(revision 42093)
@@ -296,4 +296,5 @@
     // generate an FITS table using the array of columns defined above, with space for all rows
     psFitsTable *table = psFitsTableCreate (tableColumns, sources->n);
+    psFree (tableColumns); // we are now done with the definition of the table columns
 
     /************ write the data to the table *****************/
