Index: /branches/eam_branches/ipp-20120627/psModules/src/objects/models/pmModel_TRAIL.c
===================================================================
--- /branches/eam_branches/ipp-20120627/psModules/src/objects/models/pmModel_TRAIL.c	(revision 34143)
+++ /branches/eam_branches/ipp-20120627/psModules/src/objects/models/pmModel_TRAIL.c	(revision 34144)
@@ -59,6 +59,6 @@
 
 // Lax parameter limits 
-static float paramsMinLax[] = { -1.0e3, 1.0e-2, -1.0e2, -1.0e2,  0.5, -0.1, -1.0 };
-static float paramsMaxLax[] = {  1.0e5, 1.0e+8, +1.0e4, +1.0e4, 50.0, +3.3 , 1.0 };
+static float paramsMinLax[] = { -1.0e3, 1.0e-2, -1.0e2, -1.0e2,  0.5, -3.3, -0.5 };
+static float paramsMaxLax[] = {  1.0e5, 1.0e+8, +1.0e4, +1.0e4, 50.0, +3.3 , 5.0 };
 
 // Moderate parameter limits
@@ -255,7 +255,8 @@
     if (!isfinite(axes.theta)) return false;
 
-    PAR[PM_PAR_LENGTH] = axes.major; // XXX major or 2*major?
-    PAR[PM_PAR_THETA] = axes.theta; // XXX theta or theta * RAD_DEG?
-    PAR[PM_PAR_SIGMA] = psfAxes.major; // XXX major or 0.5*major?
+    // axes.major is a sigma in the major direction; scale to 
+    PAR[PM_PAR_LENGTH] = 1.5*2.35*axes.major; // a tophat of length L has L = 1.5 * 2.35 * sigma
+    PAR[PM_PAR_THETA] = axes.theta; // theta in radians
+    PAR[PM_PAR_SIGMA] = psfAxes.major; // psf major axes (sigma of the psf)
 
     // set the model normalization
@@ -285,5 +286,6 @@
     psF32 *PAR = params->data.F32;
 
-    return (0.5*PAR[PM_PAR_LENGTH]);
+    // PAR_LENGTH is the unconvolved length.  add a bit for safety
+    return (0.5*PAR[PM_PAR_LENGTH] + 2);
 }
 
Index: /branches/eam_branches/ipp-20120627/psModules/src/objects/pmSourceFitModel.c
===================================================================
--- /branches/eam_branches/ipp-20120627/psModules/src/objects/pmSourceFitModel.c	(revision 34143)
+++ /branches/eam_branches/ipp-20120627/psModules/src/objects/pmSourceFitModel.c	(revision 34144)
@@ -182,4 +182,11 @@
         constraint->paramMask->data.PS_TYPE_VECTOR_MASK_DATA[PM_PAR_YPOS] = 1;
         constraint->paramMask->data.PS_TYPE_VECTOR_MASK_DATA[PM_PAR_SKY] = 1;
+        break;
+      case PM_SOURCE_FIT_TRAIL:
+        // special mode for pmModel_TRAIL: Io, Xo, Yo, Length, and Theta (not Io or Sigma)
+        nParams = params->n - 3;
+        psVectorInit (constraint->paramMask, 0);
+        constraint->paramMask->data.PS_TYPE_VECTOR_MASK_DATA[PM_PAR_SKY] = 1;
+        constraint->paramMask->data.PS_TYPE_VECTOR_MASK_DATA[PM_PAR_SIGMA] = 1;
         break;
       case PM_SOURCE_FIT_INDEX:
Index: /branches/eam_branches/ipp-20120627/psModules/src/objects/pmSourceFitModel.h
===================================================================
--- /branches/eam_branches/ipp-20120627/psModules/src/objects/pmSourceFitModel.h	(revision 34143)
+++ /branches/eam_branches/ipp-20120627/psModules/src/objects/pmSourceFitModel.h	(revision 34144)
@@ -22,4 +22,5 @@
     PM_SOURCE_FIT_INDEX,
     PM_SOURCE_FIT_NO_INDEX,
+    PM_SOURCE_FIT_TRAIL,
 } pmSourceFitMode;
 
Index: /branches/eam_branches/ipp-20120627/psModules/src/objects/pmSourceIO_CMF.c.in
===================================================================
--- /branches/eam_branches/ipp-20120627/psModules/src/objects/pmSourceIO_CMF.c.in	(revision 34143)
+++ /branches/eam_branches/ipp-20120627/psModules/src/objects/pmSourceIO_CMF.c.in	(revision 34144)
@@ -641,7 +641,19 @@
 
             // XXX these should be major and minor, not 'x' and 'y'
-            psMetadataAddF32 (row, PS_LIST_TAIL, "EXT_WIDTH_MAJ",    0, "EXT width in x coordinate",                  axes.major);
-            psMetadataAddF32 (row, PS_LIST_TAIL, "EXT_WIDTH_MIN",    0, "EXT width in y coordinate",                  axes.minor);
-            psMetadataAddF32 (row, PS_LIST_TAIL, "EXT_THETA",        0, "EXT orientation angle",                      axes.theta);
+	    if (model->type == pmModelClassGetType("PS_MODEL_TRAIL")) {
+	      psMetadataAddF32 (row, PS_LIST_TAIL, "EXT_WIDTH_MAJ",    0, "EXT width (major axis), length for trail", PAR[PM_PAR_LENGTH]);
+	      psMetadataAddF32 (row, PS_LIST_TAIL, "EXT_WIDTH_MIN",    0, "EXT width (minor axis), sigma for trail",  PAR[PM_PAR_SIGMA]);
+	      psMetadataAddF32 (row, PS_LIST_TAIL, "EXT_THETA",        0, "EXT orientation angle",                    PAR[PM_PAR_THETA]);
+	      psMetadataAddF32 (row, PS_LIST_TAIL, "EXT_WIDTH_MAJ_ERR",0, "EXT width error (major axis)",            dPAR[PM_PAR_LENGTH]);
+	      psMetadataAddF32 (row, PS_LIST_TAIL, "EXT_WIDTH_MIN_ERR",0, "EXT width error (minor axis)",            dPAR[PM_PAR_SIGMA]);
+	      psMetadataAddF32 (row, PS_LIST_TAIL, "EXT_THETA_ERR",    0, "EXT orientation angle (error)",           dPAR[PM_PAR_THETA]);
+	    } else {
+	      psMetadataAddF32 (row, PS_LIST_TAIL, "EXT_WIDTH_MAJ",    0, "EXT width (major axis), length for trail", axes.major);
+	      psMetadataAddF32 (row, PS_LIST_TAIL, "EXT_WIDTH_MIN",    0, "EXT width (minor axis), sigma for trail",  axes.minor);
+	      psMetadataAddF32 (row, PS_LIST_TAIL, "EXT_THETA",        0, "EXT orientation angle",                    axes.theta);
+	      psMetadataAddF32 (row, PS_LIST_TAIL, "EXT_WIDTH_MAJ_ERR",0, "EXT width error (major axis)",            dPAR[PM_PAR_LENGTH]);
+	      psMetadataAddF32 (row, PS_LIST_TAIL, "EXT_WIDTH_MIN_ERR",0, "EXT width error (minor axis)",            dPAR[PM_PAR_SIGMA]);
+	      psMetadataAddF32 (row, PS_LIST_TAIL, "EXT_THETA_ERR",    0, "EXT orientation angle (error)",           dPAR[PM_PAR_THETA]);
+	    }
 
             // write out the other generic parameters
Index: /branches/eam_branches/ipp-20120627/psModules/src/objects/pmSourceIO_CMF_PS1_SV1.c
===================================================================
--- /branches/eam_branches/ipp-20120627/psModules/src/objects/pmSourceIO_CMF_PS1_SV1.c	(revision 34143)
+++ /branches/eam_branches/ipp-20120627/psModules/src/objects/pmSourceIO_CMF_PS1_SV1.c	(revision 34144)
@@ -716,7 +716,13 @@
 
             // XXX these should be major and minor, not 'x' and 'y'
-            psMetadataAddF32 (row, PS_LIST_TAIL, "EXT_WIDTH_MAJ",    0, "EXT width in x coordinate",                  axes.major);
-            psMetadataAddF32 (row, PS_LIST_TAIL, "EXT_WIDTH_MIN",    0, "EXT width in y coordinate",                  axes.minor);
-            psMetadataAddF32 (row, PS_LIST_TAIL, "EXT_THETA",        0, "EXT orientation angle",                      axes.theta);
+	    if (model->type == pmModelClassGetType("PS_MODEL_TRAIL")) {
+	      psMetadataAddF32 (row, PS_LIST_TAIL, "EXT_WIDTH_MAJ",    0, "EXT width (major axis), length for trail", PAR[PM_PAR_LENGTH]);
+	      psMetadataAddF32 (row, PS_LIST_TAIL, "EXT_WIDTH_MIN",    0, "EXT width (minor axis), sigma for trail",  PAR[PM_PAR_SIGMA]);
+	      psMetadataAddF32 (row, PS_LIST_TAIL, "EXT_THETA",        0, "EXT orientation angle",                    PAR[PM_PAR_THETA]);
+	    } else {
+	      psMetadataAddF32 (row, PS_LIST_TAIL, "EXT_WIDTH_MAJ",    0, "EXT width (major axis), length for trail", axes.major);
+	      psMetadataAddF32 (row, PS_LIST_TAIL, "EXT_WIDTH_MIN",    0, "EXT width (minor axis), sigma for trail",  axes.minor);
+	      psMetadataAddF32 (row, PS_LIST_TAIL, "EXT_THETA",        0, "EXT orientation angle",                    axes.theta);
+	    }
 
             // write out the other generic parameters
