Changeset 36757 for trunk/psModules
- Timestamp:
- May 21, 2014, 9:37:09 AM (12 years ago)
- Location:
- trunk/psModules/src/objects
- Files:
-
- 3 edited
-
pmSourceIO.c (modified) (3 diffs)
-
pmSourceIO.h (modified) (1 diff)
-
pmSourceIO_CFF.c (modified) (13 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/src/objects/pmSourceIO.c
r36623 r36757 1202 1202 break; 1203 1203 1204 case PM_FPA_FILE_CFF: 1204 case PM_FPA_FILE_CFF: { 1205 // determine the output table format 1206 psMetadata *recipe = psMetadataLookupMetadata(&status, config->recipes, "PSPHOT"); 1207 if (!status) { 1208 psError(PS_ERR_UNKNOWN, true, "missing recipe PSPHOT in config data"); 1209 return false; 1210 } 1205 1211 // read in header, if not yet loaded 1206 1212 hdu = pmFPAviewThisHDU (view, file->fpa); … … 1244 1250 } 1245 1251 1246 sources = pmSourcesRead_CFF(file->fits, hdu->header );1252 sources = pmSourcesRead_CFF(file->fits, hdu->header, recipe); 1247 1253 1248 1254 psTrace("psModules.objects", 6, "read CMF table from %s : %s : %s", file->filename, headname, dataname); … … 1250 1256 psFree (dataname); 1251 1257 psFree (tableHeader); 1258 } 1252 1259 break; 1253 1260 -
trunk/psModules/src/objects/pmSourceIO.h
r36623 r36757 55 55 56 56 psArray *pmSourcesReadCMP (char *filename, psMetadata *header); 57 psArray *pmSourcesRead_CFF (psFits *fits, psMetadata *header );57 psArray *pmSourcesRead_CFF (psFits *fits, psMetadata *header, psMetadata *recipe); 58 58 bool pmSourcesWrite_CFF (pmReadout *readout, psFits *fits, psArray *sources, psMetadata *header, psMetadata *recipe); 59 59 -
trunk/psModules/src/objects/pmSourceIO_CFF.c
r36747 r36757 54 54 55 55 // read in sources readout from a cff fits file 56 psArray *pmSourcesRead_CFF (psFits *fits, psMetadata *header )56 psArray *pmSourcesRead_CFF (psFits *fits, psMetadata *header, psMetadata *recipe) 57 57 { 58 58 PS_ASSERT_PTR_NON_NULL(fits, false); … … 74 74 } 75 75 PS_ASSERT_INT_NONNEGATIVE(modelType, NULL); 76 77 pmModelType sersicModelType = pmModelClassGetType("PS_MODEL_SERSIC"); 78 pmModelType devModelType = pmModelClassGetType("PS_MODEL_DEV"); 79 80 psString modelForce = psMetadataLookupStr(&status, recipe, "EXT_MODEL_TYPE_FORCE"); 81 psF32 forceDevSersicMin = NAN; 82 bool forceAll = false; 83 int modelTypeForce = 0; 84 if (!strcmp(modelForce, "ALL")) { 85 forceAll = true; 86 } else if (!strcmp(modelForce, "PS_MODEL_SERSIC")) { 87 modelTypeForce = sersicModelType; 88 forceDevSersicMin = psMetadataLookupF32(&status, recipe, "EXT_MODEL_FORCE_DEV_SERSIC_MIN"); 89 } else { 90 modelTypeForce = pmModelClassGetType(modelForce); 91 PS_ASSERT_INT_NONNEGATIVE(modelTypeForce, NULL); 92 } 93 94 // skip extended model types for likely stars 95 // max value of KronMag - psfMag to keep ... 96 psF32 starCut = psMetadataLookupF32(&status, recipe, "EXT_MODEL_FORCE_MAGDIFF_MAX"); 97 if (!status) { 98 starCut = 0; 99 } 100 // ... unless SN is less than this value 101 psF32 SNMinForCut = psMetadataLookupF32(&status, recipe, "EXT_MODEL_FORCE_CUT_SN_MIN"); 102 if (!status) { 103 SNMinForCut = 10; 104 } 76 105 77 106 // We get the size of the table, and allocate the array of sources first because the table … … 116 145 float Rminor = psMetadataLookupF32 (&status, row, "R_MINOR"); 117 146 float theta = psMetadataLookupF32 (&status, row, "THETA"); 147 float chisq = psMetadataLookupF32 (&status, row, "CHISQ"); 148 float nDOF = psMetadataLookupF32 (&status, row, "NDOF"); 149 float magDiff = psMetadataLookupF32 (&status, row, "MAG_DIFF"); 150 psS16 modelFlags = psMetadataLookupS32 (&status, row, "MODEL_FLAGS"); 118 151 119 152 int galaxyModelType = psMetadataLookupS32(&status, row, "MODEL_TYPE"); 120 if (status ) {153 if (status && galaxyModelType >= 0) { 121 154 galaxyModelType = pmModelClassGetLocalType(galaxyModelType); 122 155 } else { … … 201 234 202 235 } 236 bool saveExtModelParams = false; 203 237 if (fitGalaxy && galaxyModelType >= 0) { 238 // skip likely stars 239 if (magDiff < starCut || SN < SNMinForCut) { 240 if (forceAll) { 241 saveExtModelParams = true; 242 } else if (galaxyModelType == modelTypeForce) { 243 // This is the model type that we are looking for 244 // proceed 245 saveExtModelParams = true; 246 } else if (modelTypeForce == sersicModelType && galaxyModelType == devModelType) { 247 // We're doing sersic models, if sersic index is greater than the recipe's minimum index 248 // do dev model as well 249 if (isfinite(forceDevSersicMin) || Sindex >= forceDevSersicMin) { 250 saveExtModelParams = true; 251 } 252 } else { 253 // not interested in this model 254 } 255 } 256 } 257 258 if (saveExtModelParams) { 204 259 if (!source->modelFits) { 205 260 source->modelFits = psArrayAllocEmpty (1); … … 223 278 } 224 279 280 model->chisq = chisq; 281 model->nDOF = nDOF; 282 model->flags = modelFlags; 283 225 284 psArrayAdd (source->modelFits, 1, model); 226 285 … … 288 347 psF32 xPos[MAX_ROWS_PER_SRC], yPos[MAX_ROWS_PER_SRC], flux[MAX_ROWS_PER_SRC]; 289 348 psF32 rMajor[MAX_ROWS_PER_SRC], rMinor[MAX_ROWS_PER_SRC], theta[MAX_ROWS_PER_SRC]; 349 psF32 chisq[MAX_ROWS_PER_SRC], nDOF[MAX_ROWS_PER_SRC]; 350 psS32 modelFlags[MAX_ROWS_PER_SRC]; 290 351 psS32 modelType[MAX_ROWS_PER_SRC]; 291 psF32 sersicIndex [MAX_ROWS_PER_SRC];352 psF32 sersicIndex = NAN; 292 353 bool fitGalaxy = false; 293 354 bool psfStar = (source->mode & PM_SOURCE_MODE_PSFSTAR) ? true : false; 294 355 int n_rows = 0; 295 356 296 psF32 SN = source->moments->KronFlux/source->moments->KronFluxErr; 357 psF32 kronFlux = source->moments->KronFlux; 358 psF32 SN = NAN; 359 psF32 magDiff = NAN; 360 if (isfinite(kronFlux) && isfinite(source->moments->KronFluxErr) && isfinite(source->psfMag)) { 361 SN = kronFlux/source->moments->KronFluxErr; 362 // kronMag - psfMag for use as star/glaxy separator 363 magDiff = -2.5 * log10(kronFlux) - source->psfMag ; 364 } 297 365 298 366 // start with psf model … … 312 380 theta[0] = 0; 313 381 modelType[0] = -1; 314 sersicIndex[0] = NAN; 382 sersicIndex = NAN; 383 chisq[0] = NAN; 384 nDOF[0] = NAN; 385 modelFlags[0] = 0; 315 386 316 387 if (source->modelFits != NULL) { … … 338 409 flux[n_rows] = pow(10.0, -0.4*model->mag); 339 410 modelType[n_rows] = model->type; 411 chisq[n_rows] = model->chisq; 412 nDOF[n_rows] = model->nDOF; 413 modelFlags[n_rows] = model->flags; 340 414 fitGalaxy = true; 341 415 if (model->params->n == 8) { 342 416 // this will save the sersic index in all models but that might 343 417 // be useful 344 sersicIndex [n_rows]= 0.5 / PAR[PM_PAR_7];418 sersicIndex = 0.5 / PAR[PM_PAR_7]; 345 419 } else { 346 sersicIndex [n_rows]= NAN;420 sersicIndex = NAN; 347 421 } 348 422 … … 393 467 flux[0] = pow(10.0, -0.4*model->mag); 394 468 modelType[0] = model->type; 469 chisq[0] = model->chisq; 470 nDOF[0] = model->nDOF; 471 modelFlags[0] = model->flags; 395 472 fitGalaxy = true; 396 473 if (model->type == sersicModelType) { 397 474 PS_ASSERT_FLOAT_LARGER_THAN(PAR[PM_PAR_7], 0.0, false); 398 sersicIndex [0]= 0.5 / PAR[PM_PAR_7];475 sersicIndex = 0.5 / PAR[PM_PAR_7]; 399 476 } 400 477 … … 404 481 // sersic index above the recipe limit. 405 482 if (jModelSelected == -1 && jModelDev >= 0 && isfinite(sersicMinDev) && 406 sersicIndex [0]> sersicMinDev) {483 sersicIndex > sersicMinDev) { 407 484 408 485 model = source->modelFits->data[jModelDev]; … … 419 496 flux[1] = pow(10.0, -0.4*model->mag); 420 497 modelType[1] = model->type; 421 sersicIndex[1] = NAN; 498 sersicIndex = NAN; 499 chisq[1] = model->chisq; 500 nDOF[1] = model->nDOF; 501 modelFlags[1] = model->flags; 422 502 n_rows = 2; 423 503 } … … 439 519 psMetadataAddF32 (row, PS_LIST_TAIL, "FLUX", 0, "flux per second", flux[j]/exptime); 440 520 psMetadataAddF32 (row, PS_LIST_TAIL, "SN", 0, "kron flux signal to noise", SN); 521 psMetadataAddF32 (row, PS_LIST_TAIL, "MAG_DIFF", 0, "psf mag - kron mag", magDiff); 441 522 psMetadataAddF32 (row, PS_LIST_TAIL, "AP_RADIUS", 0, "aperture radius", source->apRadius); 442 523 psMetadataAddF32 (row, PS_LIST_TAIL, "KRON_RADIUS", 0, "Kron radius", source->moments->Mrf * 2.5); … … 448 529 psMetadataAddF32 (row, PS_LIST_TAIL, "THETA", 0, "theta", theta[j]); 449 530 psMetadataAddS32 (row, PS_LIST_TAIL, "MODEL_TYPE", 0, "model type", modelType[j]); 450 psMetadataAddF32 (row, PS_LIST_TAIL, "INDEX", 0, "sersic index", sersicIndex[j]); 531 psMetadataAddF32 (row, PS_LIST_TAIL, "INDEX", 0, "sersic index", sersicIndex); 532 psMetadataAddF32 (row, PS_LIST_TAIL, "CHISQ", 0, "chisq", chisq[j]); 533 psMetadataAddF32 (row, PS_LIST_TAIL, "NDOF", 0, "n degrees of freedom", nDOF[j]); 534 psMetadataAddS32 (row, PS_LIST_TAIL, "MODEL_FLAGS", 0, "model flags", modelFlags[j]); 451 535 452 536 psArrayAdd(table, 100, row);
Note:
See TracChangeset
for help on using the changeset viewer.
