Index: trunk/psphot/src/psphotSourceFits.c
===================================================================
--- trunk/psphot/src/psphotSourceFits.c	(revision 6753)
+++ trunk/psphot/src/psphotSourceFits.c	(revision 6851)
@@ -3,7 +3,8 @@
 // given a source with an existing modelPSF, attempt a full PSF fit, subtract if successful
 
-bool psphotFitPSF (pmReadout *readout, pmSource *source) { 
+bool psphotFitPSF (pmReadout *readout, pmSource *source, pmPSF *psf) { 
 
     float x, y;
+    double chiTrend;
 
     // save the PSF model from the Ensemble fit
@@ -18,6 +19,11 @@
     // fit PSF model (set/unset the pixel mask)
     psImageKeepCircle (source->mask, x, y, PSF->radiusTMP, "OR", PM_SOURCE_MASK_MARKED);
-    pmSourceFitModel (source, PSF, true);
+    pmSourceFitModel (source, PSF, PM_SOURCE_FIT_PSF);
     psImageKeepCircle (source->mask, x, y, PSF->radiusTMP, "AND", ~PM_SOURCE_MASK_MARKED);
+    
+    // correct model chisq for flux trend
+    chiTrend = psPolynomial1DEval (psf->ChiTrend, PSF->params->data.F32[1]);
+    PSF->chisqNorm = PSF->chisq / chiTrend;
+    // PSF->chisqNorm = PSF->chisq;
 
     // does the PSF model succeed?
@@ -60,8 +66,10 @@
 }
 
-bool psphotFitBlob (pmReadout *readout, pmSource *source, psArray *sources) { 
+bool psphotFitBlob (pmReadout *readout, pmSource *source, psArray *sources, pmPSF *psf) { 
 
     bool okEXT, okDBL;
     float chiEXT, chiDBL;
+    double chiTrend;
+    pmModel *ONE = NULL;
 
     // skip the source if we don't think it is extended
@@ -86,6 +94,19 @@
     okDBL  = psphotEvalDBL (tmpSrc, DBL->data[0]);
     okDBL &= psphotEvalDBL (tmpSrc, DBL->data[1]);
-    pmModel *ONE = DBL->data[0];
-    chiDBL = ONE->chisq / ONE->nDOF;
+
+    // correct first model chisqs for flux trend
+    ONE = DBL->data[0];
+    chiTrend = psPolynomial1DEval (psf->ChiTrend, ONE->params->data.F32[1]);
+    ONE->chisqNorm = ONE->chisq / chiTrend;
+    // ONE->chisqNorm = ONE->chisq;
+
+    // save chisq for double-star/galaxy comparison
+    chiDBL = ONE->chisqNorm;
+
+    // correct second model chisqs for flux trend
+    ONE = DBL->data[1];
+    chiTrend = psPolynomial1DEval (psf->ChiTrend, ONE->params->data.F32[1]);
+    ONE->chisqNorm = ONE->chisq / chiTrend;
+    // ONE->chisqNorm = ONE->chisq;
 
     psFree (tmpSrc); // XXX should I keep / save the flags set in the eval functions?
@@ -93,5 +114,5 @@
     if (okEXT && okDBL) {
 	psTrace ("psphot.blend", 5, "blob chisq: %f vs %f\n", chiEXT, chiDBL);
-	// XXX EAM : a bogus bias: need to examine this better
+	// XXX EAM : a bogus bias: need to examine this better 
 	if (3*chiEXT > chiDBL) goto keepDBL;
 	goto keepEXT;
@@ -188,7 +209,7 @@
     y = source->moments->y;
 
-    // fit EXT (not PSF) model (set/unset the pixel mask)
+    // fit PSF model (set/unset the pixel mask)
     psImageKeepCircle (source->mask, x, y, PSF->radiusTMP, "OR", PM_SOURCE_MASK_MARKED);
-    pmSourceFitSet (source, modelSet, true);
+    pmSourceFitSet (source, modelSet, PM_SOURCE_FIT_PSF);
     psImageKeepCircle (source->mask, x, y, PSF->radiusTMP, "AND", ~PM_SOURCE_MASK_MARKED);
 
@@ -210,5 +231,5 @@
     // fit EXT (not PSF) model (set/unset the pixel mask)
     psImageKeepCircle (source->mask, x, y, EXT->radiusTMP, "OR", PM_SOURCE_MASK_MARKED);
-    pmSourceFitModel (source, EXT, false);
+    pmSourceFitModel (source, EXT, PM_SOURCE_FIT_EXT);
     psImageKeepCircle (source->mask, x, y, EXT->radiusTMP, "AND", ~PM_SOURCE_MASK_MARKED);
 
@@ -216,5 +237,5 @@
 }
 
-bool psphotFitBlend (pmReadout *readout, pmSource *source) { 
+bool psphotFitBlend (pmReadout *readout, pmSource *source, pmPSF *psf) { 
 
     float x, y, dR;
@@ -222,5 +243,5 @@
     // if this source is not a possible blend, just fit as PSF
     if ((source->blends == NULL) || (source->mode & PM_SOURCE_MODE_SATSTAR)) {
-	bool status = psphotFitPSF (readout, source);
+	bool status = psphotFitPSF (readout, source, psf);
 	return status;
     }
@@ -273,6 +294,11 @@
     // fit PSF model (set/unset the pixel mask)
     psImageKeepCircle (source->mask, x, y, PSF->radiusTMP, "OR", PM_SOURCE_MASK_MARKED);
-    pmSourceFitSet (source, modelSet, true);
+    pmSourceFitSet (source, modelSet, PM_SOURCE_FIT_PSF);
     psImageKeepCircle (source->mask, x, y, PSF->radiusTMP, "AND", ~PM_SOURCE_MASK_MARKED);
+
+    // correct model chisq for flux trend
+    double chiTrend = psPolynomial1DEval (psf->ChiTrend, PSF->params->data.F32[1]);
+    PSF->chisqNorm = PSF->chisq / chiTrend;
+    // PSF->chisqNorm = PSF->chisq;
 
     // evaluate the blend objects, subtract if good, free otherwise
@@ -280,4 +306,9 @@
 	pmSource *src = sourceSet->data[i];
 	pmModel *model = modelSet->data[i];
+
+	// correct model chisq for flux trend
+	chiTrend = psPolynomial1DEval (psf->ChiTrend, model->params->data.F32[1]);
+	model->chisqNorm = model->chisq / chiTrend;
+	// model->chisqNorm = model->chisq;
 
 	// if we skip this one, free the corresponding blend entry model
