Index: trunk/psphot/src/psphotSourceFits.c
===================================================================
--- trunk/psphot/src/psphotSourceFits.c	(revision 34086)
+++ trunk/psphot/src/psphotSourceFits.c	(revision 34258)
@@ -463,4 +463,34 @@
     }
 
+# if (PS_TRACE_ON) 
+    if (psTraceGetLevel ("psphot") >= 6) {
+
+      // Moments-based shapes parameters
+      psEllipseMoments moments;
+      moments.x2 = source->moments->Mxx;
+      moments.xy = source->moments->Mxy;
+      moments.y2 = source->moments->Myy;
+      // force the axis ratio to be < 20.0
+      psEllipseAxes axes = psEllipseMomentsToAxes (moments, 20.0);
+
+      // PSF shape parameters
+      psEllipseShape psfShape;
+      psfShape.sx  = source->modelPSF->params->data.F32[PM_PAR_SXX] / M_SQRT2;
+      psfShape.sxy = source->modelPSF->params->data.F32[PM_PAR_SXY];
+      psfShape.sy  = source->modelPSF->params->data.F32[PM_PAR_SYY] / M_SQRT2;
+      psEllipseAxes psfAxes = psEllipseShapeToAxes (psfShape, 20.0);
+
+      fprintf (stderr, "--- guess values ---\n");
+      fprintf (stderr, "(x,y): %f, %f  Mxx: %f, Myy: %f, Mxy: %f -> major: %f, minor: %f, theta: %f (%f deg)\n", source->peak->xf, source->peak->yf, source->moments->Mxx, source->moments->Myy, source->moments->Mxy, axes.major, axes.minor, axes.theta, axes.theta*PS_DEG_RAD);
+      fprintf (stderr, "psf: major: %f, minor: %f, theta: %f (%f deg)\n", psfAxes.major, psfAxes.minor, psfAxes.theta, psfAxes.theta*PS_DEG_RAD);
+      for (int i = 0; i < model->params->n; i++) {
+	fprintf (stderr, "par %d: %f\n", i, model->params->data.F32[i]);
+      }
+    }
+    if (psTraceGetLevel ("psphot") >= 7) {
+      psTraceSetLevel("psLib.math.psMinimizeLMChi2", 5);
+    }
+# endif
+
     // for sersic models, use a grid search to choose an index, then float the params there
     if (modelType == pmModelClassGetType("PS_MODEL_SERSIC")) {
@@ -468,14 +498,26 @@
     }
 
+    options.mode = PM_SOURCE_FIT_EXT;
     if (modelType == pmModelClassGetType("PS_MODEL_SERSIC")) {
 	options.mode = PM_SOURCE_FIT_NO_INDEX;
-    } else {
-	options.mode = PM_SOURCE_FIT_EXT;
-    }
-
-    // psTraceSetLevel("psLib.math.psMinimizeLMChi2", 5);
+    }
+    if (modelType == pmModelClassGetType("PS_MODEL_TRAIL")) {
+	options.mode = PM_SOURCE_FIT_TRAIL;
+    }
+
     pmSourceFitModel (source, model, &options, maskVal);
-    // fprintf (stderr, "chisq: %f, nIter: %d, radius: %f, npix: %d\n", model->chisqNorm, model->nIter, model->fitRadius, model->nPix);
-    // psTraceSetLevel("psLib.math.psMinimizeLMChi2", 0);
+
+# if (PS_TRACE_ON) 
+    if (psTraceGetLevel ("psphot") >= 5) {
+      if (psTraceGetLevel ("psphot") >= 6) {
+	fprintf (stderr, "chisq: %f, nIter: %d, radius: %f, npix: %d\n", model->chisqNorm, model->nIter, model->fitRadius, model->nPix);
+      }
+      fprintf (stderr, "--- fitted values ---\n");
+      for (int i = 0; i < model->params->n; i++) {
+	fprintf (stderr, "par %d: %f\n", i, model->params->data.F32[i]);
+      }
+      psTraceSetLevel("psLib.math.psMinimizeLMChi2", 0);
+    }
+# endif
 
     return (model);
