Changeset 11176
- Timestamp:
- Jan 18, 2007, 6:56:07 PM (19 years ago)
- File:
-
- 1 edited
-
trunk/psphot/src/psphotSourceFits.c (modified) (16 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psphot/src/psphotSourceFits.c
r10268 r11176 3 3 // given a source with an existing modelPSF, attempt a full PSF fit, subtract if successful 4 4 // XXX this function does not call pmSourceFitModelInit : fix this? 5 6 static int NfitPSF = 0; 7 static int NfitBlend = 0; 8 static int NfitDBL = 0; 9 static int NfitEXT = 0; 10 11 bool psphotFitInit () { 12 psTimerStart ("psphot.fits"); 13 return true; 14 } 15 16 bool psphotFitSummary () { 17 18 fprintf (stderr, "fitted %5d psf, %5d blend, %5d ext, %5d dbl : %6.2f sec\n", 19 NfitPSF, NfitBlend, NfitEXT, NfitDBL, psTimerMark ("psphot.fits")); 20 return true; 21 } 5 22 6 23 bool psphotFitBlend (pmReadout *readout, pmSource *source, pmPSF *psf) { … … 14 31 } 15 32 psTrace ("psphot", 5, "trying blend...\n"); 33 return false; 16 34 17 35 // save the PSF model from the Ensemble fit 18 36 pmModel *PSF = pmModelCopy (source->modelPSF); 19 if (isnan(PSF->params->data.F32[1])) psAbort ("psphot", "nan in blend fit primary"); 20 21 x = PSF->params->data.F32[2]; 22 y = PSF->params->data.F32[3]; 37 38 if (isnan(PSF->params->data.F32[PM_PAR_I0])) psAbort ("psphot", "nan in blend fit primary"); 39 40 x = PSF->params->data.F32[PM_PAR_XPOS]; 41 y = PSF->params->data.F32[PM_PAR_YPOS]; 23 42 24 43 psArray *modelSet = psArrayAllocEmpty (source->blends->n + 1); … … 34 53 35 54 // find the blend which is furthest from source 36 dR = PS_MAX (dR, hypot (blend->peak->x - x, blend->peak->y- y));55 dR = PS_MAX (dR, hypot (blend->peak->xf - x, blend->peak->yf - y)); 37 56 38 57 // create the model and guess parameters for this blend … … 44 63 45 64 // XXX assume local sky is 0.0? 46 model->params->data.F32[1] = blend->moments->Peak - blend->moments->Sky; 47 if (isnan(model->params->data.F32[1])) psAbort ("psphot", "nan in blend fit"); 48 model->params->data.F32[2] = blend->peak->x; 49 model->params->data.F32[3] = blend->peak->y; 65 model->params->data.F32[PM_PAR_I0] = blend->peak->flux; 66 model->params->data.F32[PM_PAR_XPOS] = blend->peak->xf; 67 model->params->data.F32[PM_PAR_YPOS] = blend->peak->yf; 68 69 // these should never be invalid values 70 // XXX drop these tests eventually 71 if (isnan(model->params->data.F32[PM_PAR_I0])) psAbort ("psphot", "nan in blend fit"); 72 if (isnan(model->params->data.F32[PM_PAR_XPOS])) psAbort ("psphot", "nan in blend fit"); 73 if (isnan(model->params->data.F32[PM_PAR_YPOS])) psAbort ("psphot", "nan in blend fit"); 50 74 51 75 // add this blend to the list … … 66 90 67 91 // correct model chisq for flux trend 68 double chiTrend = psPolynomial1DEval (psf->ChiTrend, PSF->params->data.F32[ 1]);92 double chiTrend = psPolynomial1DEval (psf->ChiTrend, PSF->params->data.F32[PM_PAR_I0]); 69 93 PSF->chisqNorm = PSF->chisq / chiTrend; 70 94 … … 75 99 76 100 // correct model chisq for flux trend 77 chiTrend = psPolynomial1DEval (psf->ChiTrend, model->params->data.F32[ 1]);101 chiTrend = psPolynomial1DEval (psf->ChiTrend, model->params->data.F32[PM_PAR_I0]); 78 102 model->chisqNorm = model->chisq / chiTrend; 79 103 … … 92 116 blend->mode &= ~PM_SOURCE_MODE_TEMPSUB; 93 117 } 118 NfitBlend += modelSet->n; 119 94 120 // evaluate the primary object 95 121 if (!psphotEvalPSF (source, PSF)) { … … 117 143 double chiTrend; 118 144 145 NfitPSF ++; 146 119 147 // save the PSF model from the Ensemble fit 120 148 pmModel *PSF = pmModelCopy (source->modelPSF); … … 124 152 psphotCheckRadiusPSF (readout, source, PSF); 125 153 126 x = PSF->params->data.F32[ 2];127 y = PSF->params->data.F32[ 3];154 x = PSF->params->data.F32[PM_PAR_XPOS]; 155 y = PSF->params->data.F32[PM_PAR_YPOS]; 128 156 129 157 // fit PSF model (set/unset the pixel mask) … … 133 161 134 162 // correct model chisq for flux trend 135 chiTrend = psPolynomial1DEval (psf->ChiTrend, PSF->params->data.F32[ 1]);163 chiTrend = psPolynomial1DEval (psf->ChiTrend, PSF->params->data.F32[PM_PAR_I0]); 136 164 PSF->chisqNorm = PSF->chisq / chiTrend; 137 165 … … 239 267 psFree (DBL); 240 268 pmModelSub (source->pixels, source->mask, EXT, false, false); 241 psTrace ("psphot", 5, "blob as EXT: %f %f\n", EXT->params->data.F32[ 2], EXT->params->data.F32[3]);269 psTrace ("psphot", 5, "blob as EXT: %f %f\n", EXT->params->data.F32[PM_PAR_XPOS], EXT->params->data.F32[PM_PAR_YPOS]); 242 270 243 271 // save new model … … 252 280 pmModelSub (source->pixels, source->mask, (pmModel *) DBL->data[0], false, false); 253 281 pmModelSub (source->pixels, source->mask, (pmModel *) DBL->data[1], false, false); 254 psTrace ("psphot", 5, "blob as DBL: %f %f\n", ONE->params->data.F32[ 2], ONE->params->data.F32[3]);282 psTrace ("psphot", 5, "blob as DBL: %f %f\n", ONE->params->data.F32[PM_PAR_XPOS], ONE->params->data.F32[PM_PAR_YPOS]); 255 283 256 284 // drop old model, save new second model... … … 287 315 psArray *modelSet; 288 316 317 NfitDBL ++; 318 289 319 // make a guess at the position of the two sources 290 320 moments.x2 = source->moments->Sx; … … 305 335 306 336 DBL = pmModelCopy (PSF); 307 DBL->params->data.F32[ 1]*= 0.5;308 DBL->params->data.F32[ 2] = source->peak->xf + dx;309 DBL->params->data.F32[ 3] = source->peak->yf + dy;337 DBL->params->data.F32[PM_PAR_I0] *= 0.5; 338 DBL->params->data.F32[PM_PAR_XPOS] = source->peak->xf + dx; 339 DBL->params->data.F32[PM_PAR_YPOS] = source->peak->yf + dy; 310 340 modelSet->data[0] = DBL; 311 341 312 342 DBL = pmModelCopy (PSF); 313 DBL->params->data.F32[ 1]*= 0.5;314 DBL->params->data.F32[ 2] = source->peak->xf - dx;315 DBL->params->data.F32[ 3] = source->peak->yf - dy;343 DBL->params->data.F32[PM_PAR_I0] *= 0.5; 344 DBL->params->data.F32[PM_PAR_XPOS] = source->peak->xf - dx; 345 DBL->params->data.F32[PM_PAR_YPOS] = source->peak->yf - dy; 316 346 modelSet->data[1] = DBL; 317 347 … … 331 361 float x, y; 332 362 363 NfitEXT ++; 364 333 365 // use the source moments, etc to guess basic model parameters 334 366 pmModel *EXT = pmSourceModelGuess (source, modelTypeEXT); … … 337 369 psphotCheckRadiusEXT (readout, source, EXT); 338 370 339 x = EXT->params->data.F32[ 2];340 y = EXT->params->data.F32[ 3];371 x = EXT->params->data.F32[PM_PAR_XPOS]; 372 y = EXT->params->data.F32[PM_PAR_YPOS]; 341 373 342 374 if ((source->moments->Sx < 1e-3) || (source->moments->Sx < 1e-3)) {
Note:
See TracChangeset
for help on using the changeset viewer.
