Changeset 36281
- Timestamp:
- Nov 11, 2013, 11:20:15 AM (13 years ago)
- Location:
- branches/eam_branches/ipp-20130904/psModules/src/objects
- Files:
-
- 4 edited
-
pmPCM_MinimizeChisq.c (modified) (3 diffs)
-
pmPCMdata.c (modified) (10 diffs)
-
pmPCMdata.h (modified) (2 diffs)
-
pmSourceIO.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/ipp-20130904/psModules/src/objects/pmPCM_MinimizeChisq.c
r36276 r36281 473 473 # else 474 474 if (pcm->use1Dgauss) { 475 // do not use the threaded, mask-aware version of this code (psImageSmoothMaskPixelsThread): 476 // * the model flux is not masked 477 // * threading takes place above this level 478 pcm->modelConvFlux = psImageCopy (pcm->modelConvFlux, pcm->modelFlux, pcm->modelFlux->type.type); 479 480 // hard-wire this for now? 481 psImageSmoothCache_F32 (pcm->modelConvFlux, pcm->smdata1); 482 psImageSmoothCache_F32 (pcm->modelConvFlux, pcm->smdata2); 475 476 if (USE_1D_CACHE) { 477 // do not use the threaded, mask-aware version of this code (psImageSmoothMaskPixelsThread): 478 // * the model flux is not masked 479 // * threading takes place above this level 480 pcm->modelConvFlux = psImageCopy (pcm->modelConvFlux, pcm->modelFlux, pcm->modelFlux->type.type); 481 psImageSmoothCache_F32 (pcm->modelConvFlux, pcm->smdata); 482 } else { 483 pcm->modelConvFlux = psImageCopy (pcm->modelConvFlux, pcm->modelFlux, pcm->modelFlux->type.type); 484 psImageSmooth2dCache_F32 (pcm->modelConvFlux, pcm->smdata2d); 485 } 483 486 } else { 484 487 psImageConvolveKernel (pcm->modelConvFlux, pcm->modelFlux, NULL, 0, pcm->psfFFT); … … 495 498 # else 496 499 if (pcm->use1Dgauss) { 497 // do not use the threaded, mask-aware version of this code (psImageSmoothMaskPixelsThread): 498 // * the model flux is not masked 499 // * threading takes place above this level 500 dmodelConv = psImageCopy (dmodelConv, dmodel, dmodel->type.type); 501 psImageSmoothCache_F32 (dmodelConv, pcm->smdata1); 502 psImageSmoothCache_F32 (dmodelConv, pcm->smdata2); 500 if (USE_1D_GAUSS) { 501 // do not use the threaded, mask-aware version of this code (psImageSmoothMaskPixelsThread): 502 // * the model flux is not masked 503 // * threading takes place above this level 504 dmodelConv = psImageCopy (dmodelConv, dmodel, dmodel->type.type); 505 psImageSmoothCache_F32 (dmodelConv, pcm->smdata); 506 } else { 507 dmodelConv = psImageCopy (dmodelConv, dmodel, dmodel->type.type); 508 psImageSmooth2dCache_F32 (dmodelConv, pcm->smdata2d); 509 } 503 510 } else { 504 511 psImageConvolveKernel (dmodelConv, dmodel, NULL, 0, pcm->psfFFT); … … 516 523 517 524 if (pcm->use1Dgauss) { 518 // do not use the threaded, mask-aware version of this code (psImageSmoothMaskPixelsThread): 519 // * the model flux is not masked 520 // * threading takes place above this level 521 dmodelConv = psImageCopy (dmodelConv, dmodel, dmodel->type.type); 522 psImageSmoothCache_F32 (dmodelConv, pcm->smdata1); 523 psImageSmoothCache_F32 (dmodelConv, pcm->smdata2); 525 if (USE_1D_GAUSS) { 526 // do not use the threaded, mask-aware version of this code (psImageSmoothMaskPixelsThread): 527 // * the model flux is not masked 528 // * threading takes place above this level 529 dmodelConv = psImageCopy (dmodelConv, dmodel, dmodel->type.type); 530 psImageSmoothCache_F32 (dmodelConv, pcm->smdata); 531 } else { 532 dmodelConv = psImageCopy (dmodelConv, dmodel, dmodel->type.type); 533 psImageSmooth2dCache_F32 (dmodelConv, pcm->smdata2d); 534 } 524 535 } else { 525 536 psImageConvolveFFT (dmodelConv, dmodel, NULL, 0, pcm->psf); -
branches/eam_branches/ipp-20130904/psModules/src/objects/pmPCMdata.c
r36277 r36281 43 43 44 44 # define USE_DELTA_PSF 0 45 # define USE_1D_GAUSS 145 # define KERNEL_NSIGMA 3.0 46 46 47 47 static void pmPCMdataFree (pmPCMdata *pcm) { … … 104 104 // convolution with a Gaussian approximation to the kernel 105 105 pcm->use1Dgauss = false; 106 pcm->nsigma = 5.0;106 pcm->nsigma = KERNEL_NSIGMA; 107 107 pcm->sigma = 1.0; // this should be set to something sensible when the psf is known 108 108 … … 288 288 } 289 289 290 // set 2 gaussians (extend to more if interesting) 291 psImageSmoothCacheData *psImageSmoothCacheSetKernel (float *sigma1, float *sigma2, psImage *flux, pmModel *modelPSF) { 290 psImageSmoothCacheData *psImageSmoothCacheSetKernel (float *sigma, float *kappa, float nsigma, psImage *flux, pmModel *modelPSF) { 292 291 293 292 psAssert (modelPSF, "psf model must be defined"); … … 298 297 pmModelParamsToAxes (&axes, PAR[PM_PAR_SXX], PAR[PM_PAR_SXY], PAR[PM_PAR_SYY], useReff); 299 298 300 float nsigma = 5.0; 301 *sigma1 = NAN; 302 *sigma2 = NAN; 299 *sigma = NAN; 300 *kappa = NAN; 303 301 304 302 // XXX need to do this more carefully … … 306 304 float FWHM_MAJOR = 2*modelPSF->modelRadius (modelPSF->params, 0.5*PAR[PM_PAR_I0]); 307 305 float FWHM_MINOR = FWHM_MAJOR * (axes.minor / axes.major); 308 *sigma1 = 0.50 * (FWHM_MAJOR + FWHM_MINOR) / 2.35; 309 *sigma2 = 0.25 * (FWHM_MAJOR + FWHM_MINOR) / 2.35; 306 *sigma = 0.50 * (FWHM_MAJOR + FWHM_MINOR) / 2.35; 310 307 } 311 308 if (modelPSF->type == modelType_PS1_V1) { … … 323 320 if (modelPSF->type == modelType_PS1_V1) { 324 321 psImageSmoothCacheKernel_PS1_V1 (smdata, *sigma, *kappa); 322 } 323 324 return smdata; 325 } 326 327 psImageSmooth2dCacheData *psImageSmooth2dCacheSetKernel (float *sigma, float *kappa, float nsigma, psImage *flux, pmModel *modelPSF) { 328 329 psAssert (modelPSF, "psf model must be defined"); 330 331 psEllipseAxes axes; 332 bool useReff = pmModelUseReff (modelPSF->type); 333 psF32 *PAR = modelPSF->params->data.F32; 334 pmModelParamsToAxes (&axes, PAR[PM_PAR_SXX], PAR[PM_PAR_SXY], PAR[PM_PAR_SYY], useReff); 335 336 *sigma = NAN; 337 *kappa = NAN; 338 339 // XXX need to do this more carefully 340 if (modelPSF->type == modelType_GAUSS) { 341 float FWHM_MAJOR = 2*modelPSF->modelRadius (modelPSF->params, 0.5*PAR[PM_PAR_I0]); 342 float FWHM_MINOR = FWHM_MAJOR * (axes.minor / axes.major); 343 *sigma = 0.50 * (FWHM_MAJOR + FWHM_MINOR) / 2.35; 344 } 345 if (modelPSF->type == modelType_PS1_V1) { 346 *sigma = 0.5 * (axes.major + axes.minor); 347 *kappa = PAR[PM_PAR_7]; 348 } 349 psAssert (isfinite(*sigma), "invalid model type"); 350 351 // psImageSmoothCacheAlloc generates a structure but does not assign the smoothing vector 352 psImageSmooth2dCacheData *smdata = psImageSmooth2dCacheAlloc (nsigma); 353 354 if (modelPSF->type == modelType_GAUSS) { 355 // psImageSmooth2dCacheKernel_Gauss (smdata, *sigma); 356 } 357 if (modelPSF->type == modelType_PS1_V1) { 358 psImageSmooth2dCacheKernel_PS1_V1 (smdata, *sigma, *kappa); 325 359 } 326 360 … … 384 418 385 419 pcm->use1Dgauss = true; 386 pcm->smdata = psImageSmoothCacheSetKernel (&pcm->sigma, &pcm->kappa, source->pixels, source->modelPSF); 420 if (USE_1D_CACHE) { 421 pcm->smdata = psImageSmoothCacheSetKernel (&pcm->sigma, &pcm->kappa, pcm->nsigma, source->pixels, source->modelPSF); 422 } else { 423 pcm->smdata2d = psImageSmooth2dCacheSetKernel (&pcm->sigma, &pcm->kappa, pcm->nsigma, source->pixels, source->modelPSF); 424 } 387 425 388 426 # else … … 467 505 468 506 // If we have changed the window, we need to redefine the smoothing target vectors (but pcm->sigma,kappa,nsigma remain) 469 psFree(pcm->smdata); 470 pcm->smdata = psImageSmoothCacheAlloc (source->pixels, pcm->sigma, pcm->nsigma); 471 472 pmModel *modelPSF = source->modelPSF; 473 if (modelPSF->type == modelType_GAUSS) { 474 psImageSmoothCacheKernel_Gauss (pcm->smdata, pcm->sigma); 475 } 476 if (modelPSF->type == modelType_PS1_V1) { 477 psImageSmoothCacheKernel_PS1_V1 (pcm->smdata, pcm->sigma, pcm->kappa); 507 if (USE_1D_CACHE) { 508 psFree(pcm->smdata); 509 pcm->smdata = psImageSmoothCacheAlloc (source->pixels, pcm->sigma, pcm->nsigma); 510 511 pmModel *modelPSF = source->modelPSF; 512 if (modelPSF->type == modelType_GAUSS) { 513 psImageSmoothCacheKernel_Gauss (pcm->smdata, pcm->sigma); 514 } 515 if (modelPSF->type == modelType_PS1_V1) { 516 psImageSmoothCacheKernel_PS1_V1 (pcm->smdata, pcm->sigma, pcm->kappa); 517 } 518 } else { 519 psFree(pcm->smdata2d); 520 pcm->smdata2d = psImageSmooth2dCacheAlloc (pcm->nsigma); 521 522 pmModel *modelPSF = source->modelPSF; 523 if (modelPSF->type == modelType_GAUSS) { 524 // psImageSmooth2dCacheKernel_Gauss (pcm->smdata2d, pcm->sigma); 525 } 526 if (modelPSF->type == modelType_PS1_V1) { 527 psImageSmooth2dCacheKernel_PS1_V1 (pcm->smdata2d, pcm->sigma, pcm->kappa); 528 } 478 529 } 479 530 } … … 503 554 float sigma = NAN; 504 555 float kappa = NAN; 505 psImageSmoothCacheData *smdata = psImageSmoothCacheSetKernel (&sigma, &kappa, source->modelFlux, source->modelPSF); 506 507 psImageSmoothCache_F32 (source->modelFlux, smdata); 508 psFree (smdata); 509 556 557 if (USE_1D_CACHE) { 558 psImageSmoothCacheData *smdata = psImageSmoothCacheSetKernel (&sigma, &kappa, KERNEL_NSIGMA, source->modelFlux, source->modelPSF); 559 psImageSmoothCache_F32 (source->modelFlux, smdata); 560 psFree (smdata); 561 } else { 562 psImageSmooth2dCacheData *smdata = psImageSmooth2dCacheSetKernel (&sigma, &kappa, KERNEL_NSIGMA, source->modelFlux, source->modelPSF); 563 psImageSmooth2dCache_F32 (source->modelFlux, smdata); 564 psFree (smdata); 565 } 510 566 // old call: psImageSmooth (source->modelFlux, sigma, nsigma); 511 567 } else { … … 544 600 float sigma = NAN; 545 601 float kappa = NAN; 546 psImageSmoothCacheData *smdata = psImageSmoothCacheSetKernel (&sigma, &kappa, source->modelFlux, source->modelPSF); 547 548 psImageSmoothCache_F32 (source->modelFlux, smdata); 549 psFree (smdata); 550 602 603 if (USE_1D_CACHE) { 604 psImageSmoothCacheData *smdata = psImageSmoothCacheSetKernel (&sigma, &kappa, KERNEL_NSIGMA, source->modelFlux, source->modelPSF); 605 psImageSmoothCache_F32 (source->modelFlux, smdata); 606 psFree (smdata); 607 } else { 608 psImageSmooth2dCacheData *smdata = psImageSmooth2dCacheSetKernel (&sigma, &kappa, KERNEL_NSIGMA, source->modelFlux, source->modelPSF); 609 psImageSmooth2dCache_F32 (source->modelFlux, smdata); 610 psFree (smdata); 611 } 551 612 // old call: psImageSmooth (source->modelFlux, sigma, nsigma); 552 613 } else { -
branches/eam_branches/ipp-20130904/psModules/src/objects/pmPCMdata.h
r36276 r36281 14 14 /// @addtogroup Objects Object Detection / Analysis Functions 15 15 /// @{ 16 17 // XXX this is basically for testing -- when I am happy with the convolution process, I'll strip this out 18 # define USE_1D_CACHE 0 19 # define USE_1D_GAUSS 1 16 20 17 21 /** pmPCMdata : PSF Convolved Model data storage structure … … 40 44 bool use1Dgauss; 41 45 float kappa; 46 float sigma; 42 47 float nsigma; 43 48 -
branches/eam_branches/ipp-20130904/psModules/src/objects/pmSourceIO.c
r36270 r36281 646 646 647 647 case PM_FPA_FILE_CFF: { 648 // determine the output table format 649 psMetadata *recipe = psMetadataLookupMetadata(&status, config->recipes, "PSPHOT"); 650 if (!status) { 651 psError(PS_ERR_UNKNOWN, true, "missing recipe PSPHOT in config data"); 652 return false; 653 } 654 648 655 hdu = pmFPAviewThisHDU (view, fpa); 649 656 pmConfigConformHeader(hdu->header, file->format);
Note:
See TracChangeset
for help on using the changeset viewer.
