Index: trunk/Ohana/src/opihi/cmd.astro/imfit-trail.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.astro/imfit-trail.c	(revision 41666)
+++ trunk/Ohana/src/opihi/cmd.astro/imfit-trail.c	(revision 42078)
@@ -4,11 +4,14 @@
 void  trailCL ();
 
+// fitted parameters:
 # define PAR_X      0
 # define PAR_Y      1
 # define PAR_THETA  2
-# define PAR_SIGMA  3
-# define PAR_LENGTH 4
-# define PAR_I0     5
-# define PAR_SKY    6
+# define PAR_LENGTH 3
+# define PAR_I0     4
+# define PAR_SKY    5
+
+// fixed parameters:
+# define PAR_SIGMA  0
 
 void trail_setup (char *name) {
@@ -18,6 +21,6 @@
   fitfunc = trailTD;
   imfit_cleanup = trailCL;
-  Npar = 7;
-  Nfpar = 0;
+  Npar  = 6;
+  Nfpar = 1;
 
   /* allocate free and fixed parameters */
@@ -30,9 +33,10 @@
   par[PAR_Y      ] = get_variable_default ("Yg",      0.0);
   par[PAR_THETA  ] = get_variable_default ("Tg",      0.0);
-  par[PAR_SIGMA  ] = get_variable_default ("Wg",      2.0);
   par[PAR_LENGTH ] = get_variable_default ("Lg",     10.0);
   par[PAR_I0     ] = get_variable_default ("Zpk", 10000.0);
   par[PAR_SKY    ] = get_variable_default ("Sg",      0.0);
   sky = &par[PAR_SKY];
+
+  fpar[PAR_SIGMA ] = get_variable_default ("Wg",      2.0);
 }
 
@@ -40,9 +44,10 @@
   set_variable ("Xg",  par[PAR_X     ]);
   set_variable ("Yg",  par[PAR_Y     ]);
-  set_variable ("Wg",  par[PAR_SIGMA ]);
   set_variable ("Tg",  par[PAR_THETA ]);
   set_variable ("Lg",  par[PAR_LENGTH]);
   set_variable ("Zpk", par[PAR_I0    ]);
   set_variable ("Sg",  par[PAR_SKY   ]);
+
+  set_variable ("Wg",  fpar[PAR_SIGMA]);
 }
 
@@ -54,5 +59,5 @@
   opihi_flt Y = y - par[PAR_Y];
   
-  opihi_flt S2 = 2.0 * SQ(par[PAR_SIGMA]);
+  opihi_flt S2 = 2.0 * SQ(fpar[PAR_SIGMA]);
 
   opihi_flt ST = sin(RAD_DEG*par[PAR_THETA]);
@@ -78,11 +83,14 @@
 
     // are these signs correct? I think so: (dR/dXo = -dR/dX); dRdX below is actually dR/dXo
+    // since X = X - par[PAR_X], dFoo/dXo = -dFoo/dX
     float dRdX = +ST;
     float dRdY = -CT;
-    float dRdT = -Y*ST - X*CT;
+    float dRdT = (-Y*ST - X*CT)*RAD_DEG;
+    // note PAR_THETA is in degrees
 
     float dGdX = dGdR * dRdX;
     float dGdY = dGdR * dRdY;
     float dGdT = dGdR * dRdT;
+    // dGdL is 0.0 because dRdL is 0.0 (R is not a function of L)
 
     // are these signs correct? I think so: (dR/dXo = -dR/dX); dRdX below is actually dR/dXo
@@ -96,5 +104,6 @@
     float dZmdL = -0.5 / sqrt(S2);
 
-    float dZpdT = (-X*ST + Y*CT) / sqrt(S2);
+    // note PAR_THETA is in degrees
+    float dZpdT = (-X*ST + Y*CT) * RAD_DEG / sqrt(S2);
     float dZmdT = dZpdT; // dZpdT = dZmdT
 
@@ -119,5 +128,4 @@
     // dGdL is 0.0 because dRdL is 0.0
     float dPdL = Gxy * (dEpdL - dEmdL);
-
     float dPdT = dGdT * (Ep - Em) + Gxy * (dEpdT - dEmdT);
 
@@ -127,5 +135,4 @@
     dpar[PAR_LENGTH] = par[PAR_I0] * dPdL;
     dpar[PAR_THETA]  = par[PAR_I0] * dPdT;
-    dpar[PAR_SIGMA]  = 0;	// we don't actually allow this to vary, so we do not need to calculate it
   }
 
