Changeset 6851 for trunk/psphot/src/psphotSourceFits.c
- Timestamp:
- Apr 12, 2006, 8:59:15 PM (20 years ago)
- File:
-
- 1 edited
-
trunk/psphot/src/psphotSourceFits.c (modified) (11 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psphot/src/psphotSourceFits.c
r6753 r6851 3 3 // given a source with an existing modelPSF, attempt a full PSF fit, subtract if successful 4 4 5 bool psphotFitPSF (pmReadout *readout, pmSource *source ) {5 bool psphotFitPSF (pmReadout *readout, pmSource *source, pmPSF *psf) { 6 6 7 7 float x, y; 8 double chiTrend; 8 9 9 10 // save the PSF model from the Ensemble fit … … 18 19 // fit PSF model (set/unset the pixel mask) 19 20 psImageKeepCircle (source->mask, x, y, PSF->radiusTMP, "OR", PM_SOURCE_MASK_MARKED); 20 pmSourceFitModel (source, PSF, true);21 pmSourceFitModel (source, PSF, PM_SOURCE_FIT_PSF); 21 22 psImageKeepCircle (source->mask, x, y, PSF->radiusTMP, "AND", ~PM_SOURCE_MASK_MARKED); 23 24 // correct model chisq for flux trend 25 chiTrend = psPolynomial1DEval (psf->ChiTrend, PSF->params->data.F32[1]); 26 PSF->chisqNorm = PSF->chisq / chiTrend; 27 // PSF->chisqNorm = PSF->chisq; 22 28 23 29 // does the PSF model succeed? … … 60 66 } 61 67 62 bool psphotFitBlob (pmReadout *readout, pmSource *source, psArray *sources ) {68 bool psphotFitBlob (pmReadout *readout, pmSource *source, psArray *sources, pmPSF *psf) { 63 69 64 70 bool okEXT, okDBL; 65 71 float chiEXT, chiDBL; 72 double chiTrend; 73 pmModel *ONE = NULL; 66 74 67 75 // skip the source if we don't think it is extended … … 86 94 okDBL = psphotEvalDBL (tmpSrc, DBL->data[0]); 87 95 okDBL &= psphotEvalDBL (tmpSrc, DBL->data[1]); 88 pmModel *ONE = DBL->data[0]; 89 chiDBL = ONE->chisq / ONE->nDOF; 96 97 // correct first model chisqs for flux trend 98 ONE = DBL->data[0]; 99 chiTrend = psPolynomial1DEval (psf->ChiTrend, ONE->params->data.F32[1]); 100 ONE->chisqNorm = ONE->chisq / chiTrend; 101 // ONE->chisqNorm = ONE->chisq; 102 103 // save chisq for double-star/galaxy comparison 104 chiDBL = ONE->chisqNorm; 105 106 // correct second model chisqs for flux trend 107 ONE = DBL->data[1]; 108 chiTrend = psPolynomial1DEval (psf->ChiTrend, ONE->params->data.F32[1]); 109 ONE->chisqNorm = ONE->chisq / chiTrend; 110 // ONE->chisqNorm = ONE->chisq; 90 111 91 112 psFree (tmpSrc); // XXX should I keep / save the flags set in the eval functions? … … 93 114 if (okEXT && okDBL) { 94 115 psTrace ("psphot.blend", 5, "blob chisq: %f vs %f\n", chiEXT, chiDBL); 95 // XXX EAM : a bogus bias: need to examine this better 116 // XXX EAM : a bogus bias: need to examine this better 96 117 if (3*chiEXT > chiDBL) goto keepDBL; 97 118 goto keepEXT; … … 188 209 y = source->moments->y; 189 210 190 // fit EXT (not PSF)model (set/unset the pixel mask)211 // fit PSF model (set/unset the pixel mask) 191 212 psImageKeepCircle (source->mask, x, y, PSF->radiusTMP, "OR", PM_SOURCE_MASK_MARKED); 192 pmSourceFitSet (source, modelSet, true);213 pmSourceFitSet (source, modelSet, PM_SOURCE_FIT_PSF); 193 214 psImageKeepCircle (source->mask, x, y, PSF->radiusTMP, "AND", ~PM_SOURCE_MASK_MARKED); 194 215 … … 210 231 // fit EXT (not PSF) model (set/unset the pixel mask) 211 232 psImageKeepCircle (source->mask, x, y, EXT->radiusTMP, "OR", PM_SOURCE_MASK_MARKED); 212 pmSourceFitModel (source, EXT, false);233 pmSourceFitModel (source, EXT, PM_SOURCE_FIT_EXT); 213 234 psImageKeepCircle (source->mask, x, y, EXT->radiusTMP, "AND", ~PM_SOURCE_MASK_MARKED); 214 235 … … 216 237 } 217 238 218 bool psphotFitBlend (pmReadout *readout, pmSource *source ) {239 bool psphotFitBlend (pmReadout *readout, pmSource *source, pmPSF *psf) { 219 240 220 241 float x, y, dR; … … 222 243 // if this source is not a possible blend, just fit as PSF 223 244 if ((source->blends == NULL) || (source->mode & PM_SOURCE_MODE_SATSTAR)) { 224 bool status = psphotFitPSF (readout, source );245 bool status = psphotFitPSF (readout, source, psf); 225 246 return status; 226 247 } … … 273 294 // fit PSF model (set/unset the pixel mask) 274 295 psImageKeepCircle (source->mask, x, y, PSF->radiusTMP, "OR", PM_SOURCE_MASK_MARKED); 275 pmSourceFitSet (source, modelSet, true);296 pmSourceFitSet (source, modelSet, PM_SOURCE_FIT_PSF); 276 297 psImageKeepCircle (source->mask, x, y, PSF->radiusTMP, "AND", ~PM_SOURCE_MASK_MARKED); 298 299 // correct model chisq for flux trend 300 double chiTrend = psPolynomial1DEval (psf->ChiTrend, PSF->params->data.F32[1]); 301 PSF->chisqNorm = PSF->chisq / chiTrend; 302 // PSF->chisqNorm = PSF->chisq; 277 303 278 304 // evaluate the blend objects, subtract if good, free otherwise … … 280 306 pmSource *src = sourceSet->data[i]; 281 307 pmModel *model = modelSet->data[i]; 308 309 // correct model chisq for flux trend 310 chiTrend = psPolynomial1DEval (psf->ChiTrend, model->params->data.F32[1]); 311 model->chisqNorm = model->chisq / chiTrend; 312 // model->chisqNorm = model->chisq; 282 313 283 314 // if we skip this one, free the corresponding blend entry model
Note:
See TracChangeset
for help on using the changeset viewer.
