Index: /trunk/psphot/src/psphotSourceFits.c
===================================================================
--- /trunk/psphot/src/psphotSourceFits.c	(revision 11175)
+++ /trunk/psphot/src/psphotSourceFits.c	(revision 11176)
@@ -3,4 +3,21 @@
 // given a source with an existing modelPSF, attempt a full PSF fit, subtract if successful
 // XXX this function does not call pmSourceFitModelInit : fix this?
+
+static int NfitPSF = 0;
+static int NfitBlend = 0;
+static int NfitDBL = 0;
+static int NfitEXT = 0;
+
+bool psphotFitInit () {
+    psTimerStart ("psphot.fits");
+    return true;
+}
+
+bool psphotFitSummary () {
+
+    fprintf (stderr, "fitted %5d psf, %5d blend, %5d ext, %5d dbl : %6.2f sec\n", 
+	     NfitPSF, NfitBlend, NfitEXT, NfitDBL, psTimerMark ("psphot.fits"));
+    return true;
+}
 
 bool psphotFitBlend (pmReadout *readout, pmSource *source, pmPSF *psf) {
@@ -14,11 +31,13 @@
     }
     psTrace ("psphot", 5, "trying blend...\n");
+    return false;
 
     // save the PSF model from the Ensemble fit
     pmModel *PSF = pmModelCopy (source->modelPSF);
-    if (isnan(PSF->params->data.F32[1])) psAbort ("psphot", "nan in blend fit primary");
-
-    x = PSF->params->data.F32[2];
-    y = PSF->params->data.F32[3];
+
+    if (isnan(PSF->params->data.F32[PM_PAR_I0])) psAbort ("psphot", "nan in blend fit primary");
+
+    x = PSF->params->data.F32[PM_PAR_XPOS];
+    y = PSF->params->data.F32[PM_PAR_YPOS];
 
     psArray *modelSet = psArrayAllocEmpty (source->blends->n + 1);
@@ -34,5 +53,5 @@
 
         // find the blend which is furthest from source
-        dR = PS_MAX (dR, hypot (blend->peak->x - x, blend->peak->y - y));
+        dR = PS_MAX (dR, hypot (blend->peak->xf - x, blend->peak->yf - y));
 
         // create the model and guess parameters for this blend
@@ -44,8 +63,13 @@
 
         // XXX assume local sky is 0.0?
-        model->params->data.F32[1] = blend->moments->Peak - blend->moments->Sky;
-        if (isnan(model->params->data.F32[1])) psAbort ("psphot", "nan in blend fit");
-        model->params->data.F32[2] = blend->peak->x;
-        model->params->data.F32[3] = blend->peak->y;
+        model->params->data.F32[PM_PAR_I0] = blend->peak->flux;
+        model->params->data.F32[PM_PAR_XPOS] = blend->peak->xf;
+        model->params->data.F32[PM_PAR_YPOS] = blend->peak->yf;
+
+	// these should never be invalid values
+	// XXX drop these tests eventually
+        if (isnan(model->params->data.F32[PM_PAR_I0])) psAbort ("psphot", "nan in blend fit");
+        if (isnan(model->params->data.F32[PM_PAR_XPOS])) psAbort ("psphot", "nan in blend fit");
+        if (isnan(model->params->data.F32[PM_PAR_YPOS])) psAbort ("psphot", "nan in blend fit");
 
         // add this blend to the list
@@ -66,5 +90,5 @@
 
     // correct model chisq for flux trend
-    double chiTrend = psPolynomial1DEval (psf->ChiTrend, PSF->params->data.F32[1]);
+    double chiTrend = psPolynomial1DEval (psf->ChiTrend, PSF->params->data.F32[PM_PAR_I0]);
     PSF->chisqNorm = PSF->chisq / chiTrend;
 
@@ -75,5 +99,5 @@
 
         // correct model chisq for flux trend
-        chiTrend = psPolynomial1DEval (psf->ChiTrend, model->params->data.F32[1]);
+        chiTrend = psPolynomial1DEval (psf->ChiTrend, model->params->data.F32[PM_PAR_I0]);
         model->chisqNorm = model->chisq / chiTrend;
 
@@ -92,4 +116,6 @@
         blend->mode &= ~PM_SOURCE_MODE_TEMPSUB;
     }
+    NfitBlend += modelSet->n;
+
     // evaluate the primary object
     if (!psphotEvalPSF (source, PSF)) {
@@ -117,4 +143,6 @@
     double chiTrend;
 
+    NfitPSF ++;
+
     // save the PSF model from the Ensemble fit
     pmModel *PSF = pmModelCopy (source->modelPSF);
@@ -124,6 +152,6 @@
     psphotCheckRadiusPSF (readout, source, PSF);
 
-    x = PSF->params->data.F32[2];
-    y = PSF->params->data.F32[3];
+    x = PSF->params->data.F32[PM_PAR_XPOS];
+    y = PSF->params->data.F32[PM_PAR_YPOS];
 
     // fit PSF model (set/unset the pixel mask)
@@ -133,5 +161,5 @@
 
     // correct model chisq for flux trend
-    chiTrend = psPolynomial1DEval (psf->ChiTrend, PSF->params->data.F32[1]);
+    chiTrend = psPolynomial1DEval (psf->ChiTrend, PSF->params->data.F32[PM_PAR_I0]);
     PSF->chisqNorm = PSF->chisq / chiTrend;
 
@@ -239,5 +267,5 @@
     psFree (DBL);
     pmModelSub (source->pixels, source->mask, EXT, false, false);
-    psTrace ("psphot", 5, "blob as EXT: %f %f\n", EXT->params->data.F32[2], EXT->params->data.F32[3]);
+    psTrace ("psphot", 5, "blob as EXT: %f %f\n", EXT->params->data.F32[PM_PAR_XPOS], EXT->params->data.F32[PM_PAR_YPOS]);
 
     // save new model
@@ -252,5 +280,5 @@
     pmModelSub (source->pixels, source->mask, (pmModel *) DBL->data[0], false, false);
     pmModelSub (source->pixels, source->mask, (pmModel *) DBL->data[1], false, false);
-    psTrace ("psphot", 5, "blob as DBL: %f %f\n", ONE->params->data.F32[2], ONE->params->data.F32[3]);
+    psTrace ("psphot", 5, "blob as DBL: %f %f\n", ONE->params->data.F32[PM_PAR_XPOS], ONE->params->data.F32[PM_PAR_YPOS]);
 
     // drop old model, save new second model...
@@ -287,4 +315,6 @@
     psArray *modelSet;
 
+    NfitDBL ++;
+
     // make a guess at the position of the two sources
     moments.x2 = source->moments->Sx;
@@ -305,13 +335,13 @@
 
     DBL = pmModelCopy (PSF);
-    DBL->params->data.F32[1] *= 0.5;
-    DBL->params->data.F32[2] = source->peak->xf + dx;
-    DBL->params->data.F32[3] = source->peak->yf + dy;
+    DBL->params->data.F32[PM_PAR_I0]  *= 0.5;
+    DBL->params->data.F32[PM_PAR_XPOS] = source->peak->xf + dx;
+    DBL->params->data.F32[PM_PAR_YPOS] = source->peak->yf + dy;
     modelSet->data[0] = DBL;
 
     DBL = pmModelCopy (PSF);
-    DBL->params->data.F32[1] *= 0.5;
-    DBL->params->data.F32[2] = source->peak->xf - dx;
-    DBL->params->data.F32[3] = source->peak->yf - dy;
+    DBL->params->data.F32[PM_PAR_I0]  *= 0.5;
+    DBL->params->data.F32[PM_PAR_XPOS] = source->peak->xf - dx;
+    DBL->params->data.F32[PM_PAR_YPOS] = source->peak->yf - dy;
     modelSet->data[1] = DBL;
 
@@ -331,4 +361,6 @@
     float x, y;
 
+    NfitEXT ++;
+
     // use the source moments, etc to guess basic model parameters
     pmModel *EXT = pmSourceModelGuess (source, modelTypeEXT);
@@ -337,6 +369,6 @@
     psphotCheckRadiusEXT (readout, source, EXT);
 
-    x = EXT->params->data.F32[2];
-    y = EXT->params->data.F32[3];
+    x = EXT->params->data.F32[PM_PAR_XPOS];
+    y = EXT->params->data.F32[PM_PAR_YPOS];
 
     if ((source->moments->Sx < 1e-3) || (source->moments->Sx < 1e-3)) {
