Changeset 17309
- Timestamp:
- Apr 2, 2008, 8:01:38 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branch_20080324/psModules/src/objects/pmSourceIO_PS1_DEV_1.c
r16819 r17309 3 3 * @author EAM, IfA 4 4 * 5 * @version $Revision: 1.9 $ $Name: not supported by cvs2svn $6 * @date $Date: 2008-0 3-05 01:08:08 $5 * @version $Revision: 1.9.2.1 $ $Name: not supported by cvs2svn $ 6 * @date $Date: 2008-04-03 06:01:38 $ 7 7 * 8 8 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 256 256 psArray *table; 257 257 psMetadata *row; 258 int i;259 258 psF32 *PAR, *dPAR; 260 psEllipseAxes axes;261 259 psF32 xPos, yPos; 262 260 psF32 xErr, yErr; … … 274 272 275 273 // we write out all sources, regardless of quality. the source flags tell us the state 276 for (i = 0; i < sources->n; i++) {274 for (int i = 0; i < sources->n; i++) { 277 275 // skip source if it is not a ext sourc 278 276 // XXX we have two places that extended source parameters are measured: … … 283 281 pmSource *source = sources->data[i]; 284 282 285 // choose the convolved EXT model, if available, otherwise the simple one 286 pmModel *model = source->modelConv; 287 if (model == NULL) { 288 model = source->modelEXT; 289 } 290 if (model == NULL) continue; 291 292 // XXX do we need to do this? 283 // skip sources without measurements 293 284 if (source->extpars == NULL) continue; 285 286 // we require a PSF model fit (ignore the real crud) 287 pmModel *model = source->modelPSF; 288 if (model == NULL) continue; 294 289 295 290 // XXX I need to split the extended models from the extended aperture measurements … … 301 296 yErr = dPAR[PM_PAR_YPOS]; 302 297 303 // XXX for the aperture values, I probably can / should just refer to the psf position and not write any of this304 axes = pmPSF_ModelToAxes (PAR, 20.0);305 306 298 row = psMetadataAlloc (); 299 307 300 // XXX we are not writing out the mode (flags) or the type (psf, ext, etc) 308 301 psMetadataAdd (row, PS_LIST_TAIL, "IPP_IDET", PS_DATA_U32, "IPP detection identifier index", source->seq); … … 311 304 psMetadataAdd (row, PS_LIST_TAIL, "X_EXT_SIG", PS_DATA_F32, "Sigma in EXT x coordinate", xErr); 312 305 psMetadataAdd (row, PS_LIST_TAIL, "Y_EXT_SIG", PS_DATA_F32, "Sigma in EXT y coordinate", yErr); 313 psMetadataAdd (row, PS_LIST_TAIL, "EXT_INST_MAG", PS_DATA_F32, "EXT fit instrumental magnitude", source->extMag); 314 psMetadataAdd (row, PS_LIST_TAIL, "EXT_INST_MAG_SIG", PS_DATA_F32, "Sigma of PSF instrumental magnitude", source->errMag); 315 316 // XXX these should be major and minor, not 'x' and 'y' 317 psMetadataAdd (row, PS_LIST_TAIL, "EXT_WIDTH_MAJ", PS_DATA_F32, "EXT width in x coordinate", axes.major); 318 psMetadataAdd (row, PS_LIST_TAIL, "EXT_WIDTH_MIN", PS_DATA_F32, "EXT width in y coordinate", axes.minor); 319 psMetadataAdd (row, PS_LIST_TAIL, "EXT_THETA", PS_DATA_F32, "EXT orientation angle", axes.theta); 320 321 // XXX at the moment, this will be a fixed sized table, but perhaps have multiple output formats depending on what is measured? 322 323 // other values that I need to report: 324 // R, Mag Petrosian, ..... 325 if (source->extpars) { 326 327 // Petrosian measurements 328 pmSourcePetrosianValues *petrosian = source->extpars->petrosian; 329 if (petrosian) { 330 psMetadataAdd (row, PS_LIST_TAIL, "PETRO_MAG", PS_DATA_F32, "Petrosian Magnitude", petrosian->mag); 331 psMetadataAdd (row, PS_LIST_TAIL, "PETRO_MAG_ERR", PS_DATA_F32, "Petrosian Magnitude Error", petrosian->magErr); 332 psMetadataAdd (row, PS_LIST_TAIL, "PETRO_RADIUS", PS_DATA_F32, "Petrosian Radius", petrosian->rad); 333 psMetadataAdd (row, PS_LIST_TAIL, "PETRO_RADIUS_ERR", PS_DATA_F32, "Petrosian Radius Error", petrosian->radErr); 334 } 335 336 // Kron measurements 337 pmSourceKronValues *kron = source->extpars->kron; 338 if (kron) { 339 psMetadataAdd (row, PS_LIST_TAIL, "KRON_MAG", PS_DATA_F32, "Kron Magnitude", kron->mag); 340 psMetadataAdd (row, PS_LIST_TAIL, "KRON_MAG_ERR", PS_DATA_F32, "Kron Magnitude Error", kron->magErr); 341 psMetadataAdd (row, PS_LIST_TAIL, "KRON_RADIUS", PS_DATA_F32, "Kron Radius", kron->rad); 342 psMetadataAdd (row, PS_LIST_TAIL, "KRON_RADIUS_ERR", PS_DATA_F32, "Kron Radius Error", kron->radErr); 343 } 344 345 // Isophot measurements 346 // XXX insert header data: isophotal level 347 pmSourceIsophotalValues *isophot = source->extpars->isophot; 348 if (isophot) { 349 psMetadataAdd (row, PS_LIST_TAIL, "ISOPHOT_MAG", PS_DATA_F32, "Isophot Magnitude", isophot->mag); 350 psMetadataAdd (row, PS_LIST_TAIL, "ISOPHOT_MAG_ERR", PS_DATA_F32, "Isophot Magnitude Error", isophot->magErr); 351 psMetadataAdd (row, PS_LIST_TAIL, "ISOPHOT_RADIUS", PS_DATA_F32, "Isophot Radius", isophot->rad); 352 psMetadataAdd (row, PS_LIST_TAIL, "ISOPHOT_RADIUS_ERR", PS_DATA_F32, "Isophot Radius Error", isophot->radErr); 353 } 354 355 pmSourceAnnuli *annuli = source->extpars->annuli; 356 if (annuli) { 357 psVector *fluxVal = annuli->flux; 358 psVector *fluxErr = annuli->fluxErr; 359 psVector *fluxVar = annuli->fluxVar; 360 361 for (int j = 0; j < fluxVal->n; j++) { 362 char name[32]; 363 sprintf (name, "FLUX_VAL_R_%02d", j); 364 psMetadataAdd (row, PS_LIST_TAIL, name, PS_DATA_F32, "flux value in annulus", fluxVal->data.F32[j]); 365 sprintf (name, "FLUX_ERR_R_%02d", j); 366 psMetadataAdd (row, PS_LIST_TAIL, name, PS_DATA_F32, "flux error in annulus", fluxErr->data.F32[j]); 367 sprintf (name, "FLUX_VAR_R_%02d", j); 368 psMetadataAdd (row, PS_LIST_TAIL, name, PS_DATA_F32, "flux stdev in annulus", fluxVar->data.F32[j]); 369 } 306 307 // Petrosian measurements 308 pmSourcePetrosianValues *petrosian = source->extpars->petrosian; 309 if (petrosian) { 310 psMetadataAdd (row, PS_LIST_TAIL, "PETRO_MAG", PS_DATA_F32, "Petrosian Magnitude", petrosian->mag); 311 psMetadataAdd (row, PS_LIST_TAIL, "PETRO_MAG_ERR", PS_DATA_F32, "Petrosian Magnitude Error", petrosian->magErr); 312 psMetadataAdd (row, PS_LIST_TAIL, "PETRO_RADIUS", PS_DATA_F32, "Petrosian Radius", petrosian->rad); 313 psMetadataAdd (row, PS_LIST_TAIL, "PETRO_RADIUS_ERR", PS_DATA_F32, "Petrosian Radius Error", petrosian->radErr); 314 } 315 316 // Kron measurements 317 pmSourceKronValues *kron = source->extpars->kron; 318 if (kron) { 319 psMetadataAdd (row, PS_LIST_TAIL, "KRON_MAG", PS_DATA_F32, "Kron Magnitude", kron->mag); 320 psMetadataAdd (row, PS_LIST_TAIL, "KRON_MAG_ERR", PS_DATA_F32, "Kron Magnitude Error", kron->magErr); 321 psMetadataAdd (row, PS_LIST_TAIL, "KRON_RADIUS", PS_DATA_F32, "Kron Radius", kron->rad); 322 psMetadataAdd (row, PS_LIST_TAIL, "KRON_RADIUS_ERR", PS_DATA_F32, "Kron Radius Error", kron->radErr); 323 } 324 325 // Isophot measurements 326 // XXX insert header data: isophotal level 327 pmSourceIsophotalValues *isophot = source->extpars->isophot; 328 if (isophot) { 329 psMetadataAdd (row, PS_LIST_TAIL, "ISOPHOT_MAG", PS_DATA_F32, "Isophot Magnitude", isophot->mag); 330 psMetadataAdd (row, PS_LIST_TAIL, "ISOPHOT_MAG_ERR", PS_DATA_F32, "Isophot Magnitude Error", isophot->magErr); 331 psMetadataAdd (row, PS_LIST_TAIL, "ISOPHOT_RADIUS", PS_DATA_F32, "Isophot Radius", isophot->rad); 332 psMetadataAdd (row, PS_LIST_TAIL, "ISOPHOT_RADIUS_ERR", PS_DATA_F32, "Isophot Radius Error", isophot->radErr); 333 } 334 335 pmSourceAnnuli *annuli = source->extpars->annuli; 336 if (annuli) { 337 psVector *fluxVal = annuli->flux; 338 psVector *fluxErr = annuli->fluxErr; 339 psVector *fluxVar = annuli->fluxVar; 340 341 for (int j = 0; j < fluxVal->n; j++) { 342 char name[32]; 343 sprintf (name, "FLUX_VAL_R_%02d", j); 344 psMetadataAdd (row, PS_LIST_TAIL, name, PS_DATA_F32, "flux value in annulus", fluxVal->data.F32[j]); 345 sprintf (name, "FLUX_ERR_R_%02d", j); 346 psMetadataAdd (row, PS_LIST_TAIL, name, PS_DATA_F32, "flux error in annulus", fluxErr->data.F32[j]); 347 sprintf (name, "FLUX_VAR_R_%02d", j); 348 psMetadataAdd (row, PS_LIST_TAIL, name, PS_DATA_F32, "flux stdev in annulus", fluxVar->data.F32[j]); 370 349 } 371 350 } … … 397 376 psArray *table; 398 377 psMetadata *row; 399 int i;400 378 psF32 *PAR, *dPAR; 401 379 psEllipseAxes axes; 402 380 psF32 xPos, yPos; 403 381 psF32 xErr, yErr; 382 char name[64]; 404 383 405 384 // create a header to hold the output data … … 415 394 416 395 // we write out all sources, regardless of quality. the source flags tell us the state 417 for (i = 0; i < sources->n; i++) { 418 // skip source if it is not a ext sourc 419 // XXX we have two places that extended source parameters are measured: 420 // psphotExtendedSources, which measures the aperture-like parameters and (potentially) the psf-convolved extended source models, 421 // psphotFitEXT, which does the simple extended source model fit (not psf-convolved) 422 // should we require both? 396 for (int i = 0; i < sources->n; i++) { 423 397 424 398 pmSource *source = sources->data[i]; 425 399 426 // XXX need to have an array of model fits; loop over the array and write out all 427 // which we calculated 428 429 // choose the convolved EXT model, if available, otherwise the simple one 430 // XXX should not need to choose: write both out 431 pmModel *model = source->modelConv; 432 if (model == NULL) { 433 model = source->modelEXT; 400 // XXX if no model fits are saved, write out modelEXT? 401 if (source->modelFits == NULL) continue; 402 403 // We have multiple sources : need to flag the one used to subtract the light (the 'best' model) 404 for (int j = 0; j < source->modelFits->n; j++) { 405 406 // choose the convolved EXT model, if available, otherwise the simple one 407 pmModel *model = source->modelFits->data[j]; 408 assert (model); 409 410 PAR = model->params->data.F32; 411 dPAR = model->dparams->data.F32; 412 xPos = PAR[PM_PAR_XPOS]; 413 yPos = PAR[PM_PAR_YPOS]; 414 xErr = dPAR[PM_PAR_XPOS]; 415 yErr = dPAR[PM_PAR_YPOS]; 416 417 axes = pmPSF_ModelToAxes (PAR, 20.0); 418 419 row = psMetadataAlloc (); 420 421 // XXX we are not writing out the mode (flags) or the type (psf, ext, etc) 422 psMetadataAdd (row, PS_LIST_TAIL, "IPP_IDET", PS_DATA_U32, "IPP detection identifier index", source->seq); 423 psMetadataAdd (row, PS_LIST_TAIL, "X_EXT", PS_DATA_F32, "EXT model x coordinate", xPos); 424 psMetadataAdd (row, PS_LIST_TAIL, "Y_EXT", PS_DATA_F32, "EXT model y coordinate", yPos); 425 psMetadataAdd (row, PS_LIST_TAIL, "X_EXT_SIG", PS_DATA_F32, "Sigma in EXT x coordinate", xErr); 426 psMetadataAdd (row, PS_LIST_TAIL, "Y_EXT_SIG", PS_DATA_F32, "Sigma in EXT y coordinate", yErr); 427 psMetadataAdd (row, PS_LIST_TAIL, "EXT_INST_MAG", PS_DATA_F32, "EXT fit instrumental magnitude", model->mag); 428 psMetadataAdd (row, PS_LIST_TAIL, "EXT_INST_MAG_SIG", PS_DATA_F32, "Sigma of PSF instrumental magnitude", model->magErr); 429 430 // XXX these should be major and minor, not 'x' and 'y' 431 psMetadataAdd (row, PS_LIST_TAIL, "EXT_WIDTH_MAJ", PS_DATA_F32, "EXT width in x coordinate", axes.major); 432 psMetadataAdd (row, PS_LIST_TAIL, "EXT_WIDTH_MIN", PS_DATA_F32, "EXT width in y coordinate", axes.minor); 433 psMetadataAdd (row, PS_LIST_TAIL, "EXT_THETA", PS_DATA_F32, "EXT orientation angle", axes.theta); 434 435 // write out the other generic parameters 436 for (int k = 0; k < model->params->n; k++) { 437 if (k == PM_PAR_I0) continue; 438 if (k == PM_PAR_XPOS) continue; 439 if (k == PM_PAR_YPOS) continue; 440 if (k == PM_PAR_SXX) continue; 441 if (k == PM_PAR_SXY) continue; 442 if (k == PM_PAR_SYY) continue; 443 444 snprintf (name, 64, "EXT_PAR_%02d", k); 445 psMetadataAdd (row, PS_LIST_TAIL, name, PS_DATA_F32, "", model->params->data.F32[k]); 446 } 447 448 // XXX other parameters which may be set. 449 // XXX flag / value to define the model 450 // XXX write out the model type, fit status flags 451 452 psArrayAdd (table, 100, row); 453 psFree (row); 434 454 } 435 if (model == NULL) continue;436 437 PAR = model->params->data.F32;438 dPAR = model->dparams->data.F32;439 xPos = PAR[PM_PAR_XPOS];440 yPos = PAR[PM_PAR_YPOS];441 xErr = dPAR[PM_PAR_XPOS];442 yErr = dPAR[PM_PAR_YPOS];443 444 axes = pmPSF_ModelToAxes (PAR, 20.0);445 446 row = psMetadataAlloc ();447 // XXX we are not writing out the mode (flags) or the type (psf, ext, etc)448 psMetadataAdd (row, PS_LIST_TAIL, "IPP_IDET", PS_DATA_U32, "IPP detection identifier index", source->seq);449 psMetadataAdd (row, PS_LIST_TAIL, "X_EXT", PS_DATA_F32, "EXT model x coordinate", xPos);450 psMetadataAdd (row, PS_LIST_TAIL, "Y_EXT", PS_DATA_F32, "EXT model y coordinate", yPos);451 psMetadataAdd (row, PS_LIST_TAIL, "X_EXT_SIG", PS_DATA_F32, "Sigma in EXT x coordinate", xErr);452 psMetadataAdd (row, PS_LIST_TAIL, "Y_EXT_SIG", PS_DATA_F32, "Sigma in EXT y coordinate", yErr);453 psMetadataAdd (row, PS_LIST_TAIL, "EXT_INST_MAG", PS_DATA_F32, "EXT fit instrumental magnitude", source->extMag);454 psMetadataAdd (row, PS_LIST_TAIL, "EXT_INST_MAG_SIG", PS_DATA_F32, "Sigma of PSF instrumental magnitude", source->errMag);455 456 // XXX these should be major and minor, not 'x' and 'y'457 psMetadataAdd (row, PS_LIST_TAIL, "EXT_WIDTH_MAJ", PS_DATA_F32, "EXT width in x coordinate", axes.major);458 psMetadataAdd (row, PS_LIST_TAIL, "EXT_WIDTH_MIN", PS_DATA_F32, "EXT width in y coordinate", axes.minor);459 psMetadataAdd (row, PS_LIST_TAIL, "EXT_THETA", PS_DATA_F32, "EXT orientation angle", axes.theta);460 461 // XXX other parameters which may be set.462 // XXX flag / value to define the model463 464 psArrayAdd (table, 100, row);465 psFree (row);466 455 } 467 456
Note:
See TracChangeset
for help on using the changeset viewer.
