Index: trunk/psphot/src/psphotFitSourcesLinear.c
===================================================================
--- trunk/psphot/src/psphotFitSourcesLinear.c	(revision 16820)
+++ trunk/psphot/src/psphotFitSourcesLinear.c	(revision 17516)
@@ -158,4 +158,5 @@
     // set the sky, sky_x, sky_y components of border matrix
     SetBorderMatrixElements (border, readout, fitSources, CONSTANT_PHOTOMETRIC_WEIGHTS, SKY_FIT_ORDER);
+    psLogMsg ("psphot.ensemble", PS_LOG_MINUTIA, "set border: %f (%d elements)\n", psTimerMark ("psphot"), sparse->Nelem);
 
     psSparseConstraint constraint;
@@ -174,4 +175,5 @@
         skyfit = NULL;
     }
+    psLogMsg ("psphot.ensemble", PS_LOG_MINUTIA, "solve matrix: %f (%d elements)\n", psTimerMark ("psphot"), sparse->Nelem);
 
     // adjust I0 for fitSources and subtract
@@ -192,4 +194,5 @@
         source->mode |= PM_SOURCE_MODE_SUBTRACTED;
     }
+    psLogMsg ("psphot.ensemble", PS_LOG_MINUTIA, "sub models: %f (%d elements)\n", psTimerMark ("psphot"), sparse->Nelem);
 
     // measure chisq for each source
@@ -199,4 +202,5 @@
         pmSourceChisq (model, source->pixels, source->maskObj, source->weight, maskVal);
     }
+    psLogMsg ("psphot.ensemble", PS_LOG_MINUTIA, "get chisqs: %f (%d elements)\n", psTimerMark ("psphot"), sparse->Nelem);
 
     // psFree (index);
@@ -212,4 +216,6 @@
 }
 
+// XXX do we need this?
+
 // Calculate the weight terms for the sky fit component of the matrix.  This function operates
 // on the pixels which correspond to all of the sources of interest.  These elements fill in
@@ -222,4 +228,5 @@
     fullArray = psRegionForImage (readout->mask, fullArray);
     psImageMaskRegion (readout->mask, fullArray, "OR", PM_MASK_MARK);
+    psLogMsg ("psphot.ensemble", PS_LOG_INFO, "step 1: %f sec\n", psTimerMark ("psphot"));
 
     // turn off MARK for all object pixels
@@ -232,4 +239,5 @@
         psImageMaskCircle (source->maskView, x, y, model->radiusFit, "AND", PS_NOT_U8(PM_MASK_MARK));
     }
+    psLogMsg ("psphot.ensemble", PS_LOG_INFO, "step 2: %f sec\n", psTimerMark ("psphot"));
 
     // accumulate the image statistics from the masked regions
@@ -268,7 +276,9 @@
         }
     }
+    psLogMsg ("psphot.ensemble", PS_LOG_INFO, "step 3: %f sec\n", psTimerMark ("psphot"));
 
     // turn off MARK for all image pixels
     psImageMaskRegion (readout->mask, fullArray, "AND", PS_NOT_U8(PM_MASK_MARK));
+    psLogMsg ("psphot.ensemble", PS_LOG_INFO, "step 4: %f sec\n", psTimerMark ("psphot"));
 
     // set the Border T elements
@@ -287,4 +297,6 @@
         psSparseBorderElementT (border, 2, 2, y2);
     }
+    psLogMsg ("psphot.ensemble", PS_LOG_INFO, "step 5: %f sec\n", psTimerMark ("psphot"));
+
     return true;
 }
