Changeset 13035 for trunk/psphot/src/psphotSourceFits.c
- Timestamp:
- Apr 25, 2007, 3:35:50 PM (19 years ago)
- File:
-
- 1 edited
-
trunk/psphot/src/psphotSourceFits.c (modified) (14 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psphot/src/psphotSourceFits.c
r12792 r13035 67 67 // these should never be invalid values 68 68 // XXX drop these tests eventually 69 if (isnan(model->params->data.F32[PM_PAR_I0])) psAbort("nan in blend fit");69 if (isnan(model->params->data.F32[PM_PAR_I0])) psAbort("nan in blend fit"); 70 70 if (isnan(model->params->data.F32[PM_PAR_XPOS])) psAbort("nan in blend fit"); 71 71 if (isnan(model->params->data.F32[PM_PAR_YPOS])) psAbort("nan in blend fit"); … … 83 83 84 84 // fit PSF model (set/unset the pixel mask) 85 psImageKeepCircle (source->mask, x, y, PSF->radiusFit, "OR", PM_MASK_MARK);86 85 pmSourceFitSet (source, modelSet, PM_SOURCE_FIT_PSF); 87 psImageKeepCircle (source->mask, x, y, PSF->radiusFit, "AND", PS_NOT_U8(PM_MASK_MARK));88 86 89 87 // correct model chisq for flux trend … … 110 108 blend->modelPSF = psMemIncrRefCounter (model); 111 109 psTrace ("psphot", 5, "fitted blend as PSF\n"); 112 pmModelSub (source->pixels, source->mask, model, false, false); 110 111 // build cached model and subtract 112 pmSourceCacheModel (blend); 113 pmSourceSub (blend, PM_MODEL_OP_FULL); 113 114 blend->mode |= PM_SOURCE_MODE_SUBTRACTED; 114 115 blend->mode &= ~PM_SOURCE_MODE_TEMPSUB; … … 127 128 psFree (sourceSet); 128 129 129 psTrace ("psphot", 5, "fitted primary as PSF\n"); 130 pmModelSub (source->pixels, source->mask, PSF, false, false); 130 // save the new, successful model 131 131 psFree (source->modelPSF); 132 132 source->modelPSF = PSF; 133 psTrace ("psphot", 5, "fitted primary as PSF\n"); 134 135 // build cached model and subtract 136 pmSourceCacheModel (source); 137 pmSourceSub (source, PM_MODEL_OP_FULL); 133 138 source->mode |= PM_SOURCE_MODE_SUBTRACTED; 134 139 source->mode &= ~PM_SOURCE_MODE_TEMPSUB; … … 138 143 bool psphotFitPSF (pmReadout *readout, pmSource *source, pmPSF *psf) { 139 144 140 float x, y;141 145 double chiTrend; 142 146 … … 150 154 psphotCheckRadiusPSF (readout, source, PSF); 151 155 152 x = PSF->params->data.F32[PM_PAR_XPOS];153 y = PSF->params->data.F32[PM_PAR_YPOS];154 155 156 // fit PSF model (set/unset the pixel mask) 156 psImageKeepCircle (source->mask, x, y, PSF->radiusFit, "OR", PM_MASK_MARK);157 157 pmSourceFitModel (source, PSF, PM_SOURCE_FIT_PSF); 158 psImageKeepCircle (source->mask, x, y, PSF->radiusFit, "AND", PS_NOT_U8(PM_MASK_MARK));159 158 160 159 // correct model chisq for flux trend … … 168 167 } 169 168 170 psTrace ("psphot", 5, "fitted as PSF\n");171 pmModelSub (source->pixels, source->mask, PSF, false, false);172 173 169 // free old model, save new model 174 170 psFree (source->modelPSF); 175 171 source->modelPSF = PSF; 176 172 psTrace ("psphot", 5, "fitted as PSF\n"); 173 174 // build cached model and subtract 175 pmSourceCacheModel (source); 176 pmSourceSub (source, PM_MODEL_OP_FULL); 177 177 source->mode |= PM_SOURCE_MODE_SUBTRACTED; 178 178 source->mode &= ~PM_SOURCE_MODE_TEMPSUB; … … 264 264 // sub EXT 265 265 psFree (DBL); 266 pmModelSub (source->pixels, source->mask, EXT, false, false);267 psTrace ("psphot", 5, "blob as EXT: %f %f\n", EXT->params->data.F32[PM_PAR_XPOS], EXT->params->data.F32[PM_PAR_YPOS]);268 266 269 267 // save new model 270 268 source->modelEXT = EXT; 269 270 // build cached model and subtract 271 pmSourceCacheModel (source); 272 pmSourceSub (source, PM_MODEL_OP_FULL); 273 psTrace ("psphot", 5, "blob as EXT: %f %f\n", EXT->params->data.F32[PM_PAR_XPOS], EXT->params->data.F32[PM_PAR_YPOS]); 274 271 275 source->mode |= PM_SOURCE_MODE_SUBTRACTED; 272 276 source->mode &= ~PM_SOURCE_MODE_TEMPSUB; … … 276 280 // sub DLB 277 281 psFree (EXT); 278 pmModelSub (source->pixels, source->mask, (pmModel *) DBL->data[0], false, false);279 pmModelSub (source->pixels, source->mask, (pmModel *) DBL->data[1], false, false);280 psTrace ("psphot", 5, "blob as DBL: %f %f\n", ONE->params->data.F32[PM_PAR_XPOS], ONE->params->data.F32[PM_PAR_YPOS]);281 282 282 283 // drop old model, save new second model... … … 288 289 289 290 // copy most data from the primary source (modelEXT, blends stay NULL) 290 pmSource *newSrc = pmSourceAlloc (); 291 newSrc->peak = psMemIncrRefCounter (source->peak); 292 newSrc->pixels = psMemIncrRefCounter (source->pixels); 293 newSrc->weight = psMemIncrRefCounter (source->weight); 294 newSrc->mask = psMemIncrRefCounter (source->mask); 295 newSrc->moments = psMemIncrRefCounter (source->moments); 291 // XXX use pmSourceCopy? 292 pmSource *newSrc = pmSourceCopy (source); 296 293 newSrc->modelPSF = psMemIncrRefCounter (DBL->data[1]); 297 newSrc->type = source->type; 298 newSrc->mode = source->mode; 294 295 // build cached models and subtract 296 pmSourceCacheModel (source); 297 pmSourceSub (source, PM_MODEL_OP_FULL); 298 pmSourceCacheModel (newSrc); 299 pmSourceSub (newSrc, PM_MODEL_OP_FULL); 300 psTrace ("psphot", 5, "blob as DBL: %f %f\n", ONE->params->data.F32[PM_PAR_XPOS], ONE->params->data.F32[PM_PAR_YPOS]); 301 299 302 psArrayAdd (sources, 100, newSrc); 300 303 psFree (newSrc); … … 306 309 psArray *psphotFitDBL (pmReadout *readout, pmSource *source) { 307 310 308 float x, y,dx, dy;311 float dx, dy; 309 312 pmModel *DBL; 310 313 pmModel *PSF; … … 344 347 modelSet->data[1] = DBL; 345 348 346 x = source->moments->x;347 y = source->moments->y;348 349 349 // fit PSF model (set/unset the pixel mask) 350 psImageKeepCircle (source->mask, x, y, PSF->radiusFit, "OR", PM_MASK_MARK);351 350 pmSourceFitSet (source, modelSet, PM_SOURCE_FIT_PSF); 352 psImageKeepCircle (source->mask, x, y, PSF->radiusFit, "AND", PS_NOT_U8(PM_MASK_MARK));353 354 351 return (modelSet); 355 352 } 356 353 357 354 pmModel *psphotFitEXT (pmReadout *readout, pmSource *source) { 358 359 float x, y;360 355 361 356 NfitEXT ++; … … 369 364 psphotCheckRadiusEXT (readout, source, EXT); 370 365 371 x = EXT->params->data.F32[PM_PAR_XPOS];372 y = EXT->params->data.F32[PM_PAR_YPOS];373 374 366 if ((source->moments->Sx < 1e-3) || (source->moments->Sx < 1e-3)) { 375 367 psTrace ("psphot", 5, "problem source: moments: %f %f\n", source->moments->Sx, source->moments->Sy); … … 377 369 378 370 // fit EXT (not PSF) model (set/unset the pixel mask) 379 psImageKeepCircle (source->mask, x, y, EXT->radiusFit, "OR", PM_MASK_MARK);380 371 pmSourceFitModel (source, EXT, PM_SOURCE_FIT_EXT); 381 psImageKeepCircle (source->mask, x, y, EXT->radiusFit, "AND", PS_NOT_U8(PM_MASK_MARK));382 383 372 return (EXT); 384 373 }
Note:
See TracChangeset
for help on using the changeset viewer.
