Changeset 5993 for trunk/psphot/src/psphotSourceFits.c
- Timestamp:
- Jan 15, 2006, 8:30:16 AM (21 years ago)
- File:
-
- 1 edited
-
trunk/psphot/src/psphotSourceFits.c (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psphot/src/psphotSourceFits.c
r5828 r5993 41 41 42 42 43 static float GAL_MIN_SN;44 static float GAL_MOMENTS_RAD;45 static pmModelType modelType FLT;46 47 bool psphotInitLimits FLT (psMetadata *config, psStats *sky) {43 static float EXT_MIN_SN; 44 static float EXT_MOMENTS_RAD; 45 static pmModelType modelTypeEXT; 46 47 bool psphotInitLimitsEXT (psMetadata *config, psStats *sky) { 48 48 49 49 bool status; 50 50 51 // galaxymodel parameters52 GAL_MIN_SN = psMetadataLookupF32 (&status, config, "GAL_MIN_SN");53 GAL_MOMENTS_RAD = psMetadataLookupF32 (&status, config, "GAL_MOMENTS_RADIUS");54 55 // 'galaxy'model descriptions56 char *modelName FLT = psMetadataLookupPtr (&status, config, "GAL_MODEL");57 modelType FLT = pmModelSetType (modelNameFLT);58 psphotInitRadius FLT (config, sky, modelTypeFLT);51 // extended source model parameters 52 EXT_MIN_SN = psMetadataLookupF32 (&status, config, "EXT_MIN_SN"); 53 EXT_MOMENTS_RAD = psMetadataLookupF32 (&status, config, "EXT_MOMENTS_RADIUS"); 54 55 // extended source model descriptions 56 char *modelNameEXT = psMetadataLookupPtr (&status, config, "EXT_MODEL"); 57 modelTypeEXT = pmModelSetType (modelNameEXT); 58 psphotInitRadiusEXT (config, sky, modelTypeEXT); 59 59 60 60 return true; … … 63 63 bool psphotFitBlob (eamReadout *imdata, pmSource *source, psArray *sources) { 64 64 65 bool ok FLT, okDBL;66 float chi FLT, chiDBL;65 bool okEXT, okDBL; 66 float chiEXT, chiDBL; 67 67 68 68 // skip the source if we don't think it is extended … … 70 70 if (source->type == PM_SOURCE_DEFECT) return false; 71 71 if (source->type == PM_SOURCE_SATURATED) return false; 72 if (source->moments->SN < GAL_MIN_SN) return false;73 74 // recalculate the source moments using the larger galaxymoments radius75 if (!pmSourceMoments (source, GAL_MOMENTS_RAD)) return false;72 if (source->moments->SN < EXT_MIN_SN) return false; 73 74 // recalculate the source moments using the larger extended-source moments radius 75 if (!pmSourceMoments (source, EXT_MOMENTS_RAD)) return false; 76 76 77 77 psTrace ("psphot.blend", 5, "trying blob...\n"); … … 79 79 pmSource *tmpSrc = pmSourceAlloc (); 80 80 81 pmModel * FLT = psphotFitFLT (imdata, source);82 ok FLT = psphotEvalFLT (tmpSrc, FLT);83 chi FLT = FLT->chisq / FLT->nDOF;81 pmModel *EXT = psphotFitEXT (imdata, source); 82 okEXT = psphotEvalEXT (tmpSrc, EXT); 83 chiEXT = EXT->chisq / EXT->nDOF; 84 84 85 85 psArray *DBL = psphotFitDBL (imdata, source); … … 89 89 chiDBL = ONE->chisq / ONE->nDOF; 90 90 91 if (ok FLT && okDBL) {92 psTrace ("psphot.blend", 5, "blob chisq: %f vs %f\n", chi FLT, chiDBL);91 if (okEXT && okDBL) { 92 psTrace ("psphot.blend", 5, "blob chisq: %f vs %f\n", chiEXT, chiDBL); 93 93 // XXX EAM : a bogus bias: need to examine this better 94 if (3*chi FLT > chiDBL) goto keepDBL;95 goto keep FLT;96 } 97 98 if (ok FLT && !okDBL) goto keepFLT;99 if (!ok FLT && okDBL) goto keepDBL;94 if (3*chiEXT > chiDBL) goto keepDBL; 95 goto keepEXT; 96 } 97 98 if (okEXT && !okDBL) goto keepEXT; 99 if (!okEXT && okDBL) goto keepDBL; 100 100 return false; 101 101 102 keep FLT:103 // sub FLT104 pmSourceSubModel (source->pixels, source->mask, FLT, false, false);105 psTrace ("psphot.blend", 5, "blob as FLT: %f %f\n", FLT->params->data.F32[2], FLT->params->data.F32[3]);102 keepEXT: 103 // sub EXT 104 pmSourceSubModel (source->pixels, source->mask, EXT, false, false); 105 psTrace ("psphot.blend", 5, "blob as EXT: %f %f\n", EXT->params->data.F32[2], EXT->params->data.F32[3]); 106 106 107 107 // save new model 108 source->model FLT = FLT;108 source->modelEXT = EXT; 109 109 source->mode |= PM_SOURCE_SUBTRACTED; 110 110 source->mode &= ~PM_SOURCE_TEMPSUB; … … 168 168 y = PSF->params->data.F32[3]; 169 169 170 // fit FLT (not PSF) model (set/unset the pixel mask)170 // fit EXT (not PSF) model (set/unset the pixel mask) 171 171 psImageKeepCircle (source->mask, x, y, PSF->radius, "OR", PSPHOT_MASK_MARKED); 172 172 pmSourceFitSet (source, modelSet, true); … … 176 176 } 177 177 178 pmModel *psphotFit FLT (eamReadout *imdata, pmSource *source) {178 pmModel *psphotFitEXT (eamReadout *imdata, pmSource *source) { 179 179 180 180 float x, y; 181 181 182 182 // use the source moments, etc to guess basic model parameters 183 pmModel * FLT = pmSourceModelGuess (source, modelTypeFLT);184 185 psphotCheckRadius FLT (imdata, source, FLT);186 187 x = FLT->params->data.F32[2];188 y = FLT->params->data.F32[3];189 190 // fit FLT (not PSF) model (set/unset the pixel mask)191 psImageKeepCircle (source->mask, x, y, FLT->radius, "OR", PSPHOT_MASK_MARKED);192 pmSourceFitModel (source, FLT, false);193 psImageKeepCircle (source->mask, x, y, FLT->radius, "AND", ~PSPHOT_MASK_MARKED);194 195 return ( FLT);183 pmModel *EXT = pmSourceModelGuess (source, modelTypeEXT); 184 185 psphotCheckRadiusEXT (imdata, source, EXT); 186 187 x = EXT->params->data.F32[2]; 188 y = EXT->params->data.F32[3]; 189 190 // fit EXT (not PSF) model (set/unset the pixel mask) 191 psImageKeepCircle (source->mask, x, y, EXT->radius, "OR", PSPHOT_MASK_MARKED); 192 pmSourceFitModel (source, EXT, false); 193 psImageKeepCircle (source->mask, x, y, EXT->radius, "AND", ~PSPHOT_MASK_MARKED); 194 195 return (EXT); 196 196 } 197 197
Note:
See TracChangeset
for help on using the changeset viewer.
