Changeset 25870 for branches/eam_branches/20090820/psModules/src/objects
- Timestamp:
- Oct 18, 2009, 10:23:28 AM (17 years ago)
- Location:
- branches/eam_branches/20090820
- Files:
-
- 3 edited
-
. (modified) (1 prop)
-
psModules/src/objects/pmPSF_IO.c (modified) (3 diffs)
-
psModules/src/objects/pmPSFtryModel.c (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/20090820
-
branches/eam_branches/20090820/psModules/src/objects/pmPSF_IO.c
r21183 r25870 321 321 pmPSFClump psfClump; 322 322 323 // we now save clump parameters for each region : need to save all of those324 int nRegions = psMetadataLookupS32 (&status, recipe, "PSF.CLUMP.NREGIONS");325 psMetadataAddS32 (header, PS_LIST_TAIL, "PSF_CLN", PS_META_REPLACE, "number of psf clump regions", nRegions);326 for (int i = 0; i < nRegions; i++) {327 char regionName[64];328 snprintf (regionName, 64, "PSF.CLUMP.REGION.%03d", i);329 psMetadata *regionMD = psMetadataLookupPtr (&status, recipe, regionName);330 331 psfClump.X = psMetadataLookupF32 (&status, regionMD, "PSF.CLUMP.X"); assert (status);332 psfClump.Y = psMetadataLookupF32 (&status, regionMD, "PSF.CLUMP.Y"); assert (status);333 psfClump.dX = psMetadataLookupF32 (&status, regionMD, "PSF.CLUMP.DX"); assert (status);334 psfClump.dY = psMetadataLookupF32 (&status, regionMD, "PSF.CLUMP.DY"); assert (status);335 336 char key[16];337 snprintf (key, 9, "CLX_%03d", i);338 psMetadataAddF32 (header, PS_LIST_TAIL, key, PS_META_REPLACE, "psf clump center", psfClump.X);339 snprintf (key, 9, "CLY_%03d", i);340 psMetadataAddF32 (header, PS_LIST_TAIL, key, PS_META_REPLACE, "psf clump center", psfClump.Y);341 snprintf (key, 9, "CLDX_%03d", i);342 psMetadataAddF32 (header, PS_LIST_TAIL, key, PS_META_REPLACE, "psf clump size", psfClump.dX);343 snprintf (key, 9, "CLDY_%03d", i);344 psMetadataAddF32 (header, PS_LIST_TAIL, key, PS_META_REPLACE, "psf clump size", psfClump.dY);345 }323 // we now save clump parameters for each region : need to save all of those 324 int nRegions = psMetadataLookupS32 (&status, analysis, "PSF.CLUMP.NREGIONS"); 325 psMetadataAddS32 (header, PS_LIST_TAIL, "PSF_CLN", PS_META_REPLACE, "number of psf clump regions", nRegions); 326 for (int i = 0; i < nRegions; i++) { 327 char regionName[64]; 328 snprintf (regionName, 64, "PSF.CLUMP.REGION.%03d", i); 329 psMetadata *regionMD = psMetadataLookupPtr (&status, analysis, regionName); 330 331 psfClump.X = psMetadataLookupF32 (&status, regionMD, "PSF.CLUMP.X"); assert (status); 332 psfClump.Y = psMetadataLookupF32 (&status, regionMD, "PSF.CLUMP.Y"); assert (status); 333 psfClump.dX = psMetadataLookupF32 (&status, regionMD, "PSF.CLUMP.DX"); assert (status); 334 psfClump.dY = psMetadataLookupF32 (&status, regionMD, "PSF.CLUMP.DY"); assert (status); 335 336 char key[16]; 337 snprintf (key, 9, "CLX_%03d", i); 338 psMetadataAddF32 (header, PS_LIST_TAIL, key, PS_META_REPLACE, "psf clump center", psfClump.X); 339 snprintf (key, 9, "CLY_%03d", i); 340 psMetadataAddF32 (header, PS_LIST_TAIL, key, PS_META_REPLACE, "psf clump center", psfClump.Y); 341 snprintf (key, 9, "CLDX_%03d", i); 342 psMetadataAddF32 (header, PS_LIST_TAIL, key, PS_META_REPLACE, "psf clump size", psfClump.dX); 343 snprintf (key, 9, "CLDY_%03d", i); 344 psMetadataAddF32 (header, PS_LIST_TAIL, key, PS_META_REPLACE, "psf clump size", psfClump.dY); 345 } 346 346 347 347 // save the dimensions of each parameter … … 667 667 int nRegions = psMetadataLookupS32 (&status, header, "PSF_CLN"); 668 668 if (!status) { 669 // read old-style psf clump data670 671 char regionName[64];672 snprintf (regionName, 64, "PSF.CLUMP.REGION.000");673 psMetadataAddS32 (recipe, PS_LIST_TAIL, "PSF.CLUMP.NREGIONS", PS_META_REPLACE, "psf clump regions", 1);674 675 psMetadata *regionMD = psMetadataLookupPtr (&status, recipe, regionName);676 if (!regionMD) {677 regionMD = psMetadataAlloc();678 psMetadataAddMetadata (recipe, PS_LIST_TAIL, regionName, PS_META_REPLACE, "psf clump region", regionMD);679 psFree (regionMD);680 }681 682 // psf clump data683 pmPSFClump psfClump;684 685 psfClump.X = psMetadataLookupF32 (&status, header, "PSF_CLX" ); assert(status);686 psfClump.Y = psMetadataLookupF32 (&status, header, "PSF_CLY" ); assert(status);687 psfClump.dX = psMetadataLookupF32 (&status, header, "PSF_CLDX"); assert(status);688 psfClump.dY = psMetadataLookupF32 (&status, header, "PSF_CLDY"); assert(status);689 690 psMetadataAddF32 (regionMD, PS_LIST_TAIL, "PSF.CLUMP.X", PS_META_REPLACE, "psf clump center", psfClump.X);691 psMetadataAddF32 (regionMD, PS_LIST_TAIL, "PSF.CLUMP.Y", PS_META_REPLACE, "psf clump center", psfClump.Y);692 psMetadataAddF32 (regionMD, PS_LIST_TAIL, "PSF.CLUMP.DX", PS_META_REPLACE, "psf clump center", psfClump.dX);693 psMetadataAddF32 (regionMD, PS_LIST_TAIL, "PSF.CLUMP.DY", PS_META_REPLACE, "psf clump center", psfClump.dY);669 // read old-style psf clump data 670 671 char regionName[64]; 672 snprintf (regionName, 64, "PSF.CLUMP.REGION.000"); 673 psMetadataAddS32 (analysis, PS_LIST_TAIL, "PSF.CLUMP.NREGIONS", PS_META_REPLACE, "psf clump regions", 1); 674 675 psMetadata *regionMD = psMetadataLookupPtr (&status, analysis, regionName); 676 if (!regionMD) { 677 regionMD = psMetadataAlloc(); 678 psMetadataAddMetadata (analysis, PS_LIST_TAIL, regionName, PS_META_REPLACE, "psf clump region", regionMD); 679 psFree (regionMD); 680 } 681 682 // psf clump data 683 pmPSFClump psfClump; 684 685 psfClump.X = psMetadataLookupF32 (&status, header, "PSF_CLX" ); assert(status); 686 psfClump.Y = psMetadataLookupF32 (&status, header, "PSF_CLY" ); assert(status); 687 psfClump.dX = psMetadataLookupF32 (&status, header, "PSF_CLDX"); assert(status); 688 psfClump.dY = psMetadataLookupF32 (&status, header, "PSF_CLDY"); assert(status); 689 690 psMetadataAddF32 (regionMD, PS_LIST_TAIL, "PSF.CLUMP.X", PS_META_REPLACE, "psf clump center", psfClump.X); 691 psMetadataAddF32 (regionMD, PS_LIST_TAIL, "PSF.CLUMP.Y", PS_META_REPLACE, "psf clump center", psfClump.Y); 692 psMetadataAddF32 (regionMD, PS_LIST_TAIL, "PSF.CLUMP.DX", PS_META_REPLACE, "psf clump center", psfClump.dX); 693 psMetadataAddF32 (regionMD, PS_LIST_TAIL, "PSF.CLUMP.DY", PS_META_REPLACE, "psf clump center", psfClump.dY); 694 694 } else { 695 psMetadataAddS32 (recipe, PS_LIST_TAIL, "PSF.CLUMP.NREGIONS", PS_META_REPLACE, "psf clump regions", nRegions);696 697 for (int i = 0; i < nRegions; i++) {698 char key[10];699 char regionName[64];700 snprintf (regionName, 64, "PSF.CLUMP.REGION.%03d", i);701 702 psMetadata *regionMD = psMetadataLookupPtr (&status, recipe, regionName);703 if (!regionMD) {704 regionMD = psMetadataAlloc();705 psMetadataAddMetadata (recipe, PS_LIST_TAIL, regionName, PS_META_REPLACE, "psf clump region", regionMD);706 psFree (regionMD);707 }708 709 // psf clump data710 pmPSFClump psfClump;711 712 snprintf (key, 9, "CLX_%03d", i);713 psfClump.X = psMetadataLookupF32 (&status, header, key); assert(status);714 snprintf (key, 9, "CLY_%03d", i);715 psfClump.Y = psMetadataLookupF32 (&status, header, key); assert(status);716 snprintf (key, 9, "CLDX_%03d", i);717 psfClump.dX = psMetadataLookupF32 (&status, header, key); assert(status);718 snprintf (key, 9, "CLDY_%03d", i);719 psfClump.dY = psMetadataLookupF32 (&status, header, key); assert(status);720 721 psMetadataAddF32 (regionMD, PS_LIST_TAIL, "PSF.CLUMP.X", PS_META_REPLACE, "psf clump center", psfClump.X);722 psMetadataAddF32 (regionMD, PS_LIST_TAIL, "PSF.CLUMP.Y", PS_META_REPLACE, "psf clump center", psfClump.Y);723 psMetadataAddF32 (regionMD, PS_LIST_TAIL, "PSF.CLUMP.DX", PS_META_REPLACE, "psf clump center", psfClump.dX);724 psMetadataAddF32 (regionMD, PS_LIST_TAIL, "PSF.CLUMP.DY", PS_META_REPLACE, "psf clump center", psfClump.dY);725 }695 psMetadataAddS32 (recipe, PS_LIST_TAIL, "PSF.CLUMP.NREGIONS", PS_META_REPLACE, "psf clump regions", nRegions); 696 697 for (int i = 0; i < nRegions; i++) { 698 char key[10]; 699 char regionName[64]; 700 snprintf (regionName, 64, "PSF.CLUMP.REGION.%03d", i); 701 702 psMetadata *regionMD = psMetadataLookupPtr (&status, analysis, regionName); 703 if (!regionMD) { 704 regionMD = psMetadataAlloc(); 705 psMetadataAddMetadata (analysis, PS_LIST_TAIL, regionName, PS_META_REPLACE, "psf clump region", regionMD); 706 psFree (regionMD); 707 } 708 709 // psf clump data 710 pmPSFClump psfClump; 711 712 snprintf (key, 9, "CLX_%03d", i); 713 psfClump.X = psMetadataLookupF32 (&status, header, key); assert(status); 714 snprintf (key, 9, "CLY_%03d", i); 715 psfClump.Y = psMetadataLookupF32 (&status, header, key); assert(status); 716 snprintf (key, 9, "CLDX_%03d", i); 717 psfClump.dX = psMetadataLookupF32 (&status, header, key); assert(status); 718 snprintf (key, 9, "CLDY_%03d", i); 719 psfClump.dY = psMetadataLookupF32 (&status, header, key); assert(status); 720 721 psMetadataAddF32 (regionMD, PS_LIST_TAIL, "PSF.CLUMP.X", PS_META_REPLACE, "psf clump center", psfClump.X); 722 psMetadataAddF32 (regionMD, PS_LIST_TAIL, "PSF.CLUMP.Y", PS_META_REPLACE, "psf clump center", psfClump.Y); 723 psMetadataAddF32 (regionMD, PS_LIST_TAIL, "PSF.CLUMP.DX", PS_META_REPLACE, "psf clump center", psfClump.dX); 724 psMetadataAddF32 (regionMD, PS_LIST_TAIL, "PSF.CLUMP.DY", PS_META_REPLACE, "psf clump center", psfClump.dY); 725 } 726 726 } 727 727 … … 871 871 psFitsReadImageBuffer(psf->residuals->Ry, file->fits, fullImage, 2); // Desired pixels 872 872 } 873 // XXX notice that we are not saving the resid->mask873 // XXX notice that we are not saving the resid->mask 874 874 } 875 875 -
branches/eam_branches/20090820/psModules/src/objects/pmPSFtryModel.c
r25766 r25870 70 70 psFree(psfTry); 71 71 return NULL; 72 } 73 74 int orderMin = (options->psfTrendMode == PM_TREND_MAP) ? 1 : 0;72 } 73 74 // XXX set the min number of needed source more carefully (depends on psfTrendMode?) 75 75 int orderMax = PS_MAX (options->psfTrendNx, options->psfTrendNy); 76 77 // XXX set the min number of needed source more carefully (depends on psfTrendMode?)78 76 if ((sources->n < 15) && (orderMax >= 3)) orderMax = 2; 79 77 if ((sources->n < 11) && (orderMax >= 2)) orderMax = 1; 80 78 if ((sources->n < 8) && (orderMax >= 1)) orderMax = 0; 81 79 if ((sources->n < 3)) { 82 psError (PS_ERR_UNKNOWN, true, "failed to determine PSF parameters"); 83 return NULL; 80 psError (PS_ERR_UNKNOWN, true, "failed to determine PSF parameters"); 81 return NULL; 82 } 83 84 int orderMin; 85 if (options->psfTrendMode == PM_TREND_MAP) { 86 orderMin = 1; 87 orderMax = PS_MAX(orderMax, 1); 88 } else { 89 orderMin = 0; 84 90 } 85 91 … … 87 93 psVector *srcMask = psVectorCopy (NULL, psfTry->mask, PS_TYPE_VECTOR_MASK); 88 94 89 // we will save the PSF with the best fit (min systematic error) 95 // we will save the PSF with the best fit (min systematic error) 90 96 pmPSF *minPSF = NULL; 91 97 psVector *minMask = NULL; … … 96 102 int Ny = options->psfTrendNy; 97 103 for (int i = orderMin; i <= orderMax; i++) { 98 99 if (Nx > Ny) {100 options->psfTrendNx = i;101 options->psfTrendNy = PS_MAX (orderMin, (int)(i * (Ny / Nx) + 0.5));102 } else {103 options->psfTrendNy = i;104 options->psfTrendNx = PS_MAX (orderMin, (int)(i * (Nx / Ny) + 0.5));105 }106 107 // free existing data, if any108 psFree(psfTry->psf);109 psFree(psfTry->mask);110 111 // allocate a mask and a psf model using the current Nx,Ny order values;112 psfTry->psf = pmPSFAlloc (options);113 psfTry->mask = psVectorCopy (NULL, srcMask, PS_TYPE_VECTOR_MASK);114 115 // stage 2: construct a psf (pmPSF) from this collection of model fits, including the 2D variation116 if (!pmPSFtryMakePSF (psfTry)) {117 psError(PS_ERR_UNKNOWN, false, "failed to construct a psf model from collection of sources");118 psFree(psfTry);119 return NULL;120 }121 122 // stage 3: refit with fixed shape parameters, measure pmPSFtry->metric123 if (!pmPSFtryFitPSF (psfTry, options, maskVal, markVal)) {124 psError(PS_ERR_UNKNOWN, false, "failed to construct a psf model from collection of sources");125 psFree(psfTry);126 return NULL;127 }128 129 // stage 4: measure systematic error in pmPSFtry->metric130 if (!pmPSFtryMetric (psfTry)) {131 psError(PS_ERR_UNKNOWN, false, "failed to measure systematic error of metric");132 psFree(psfTry);133 return NULL;134 }135 136 if (!minPSF) {137 minPSF = psMemIncrRefCounter(psfTry->psf);138 minMask = psMemIncrRefCounter(psfTry->mask);139 }140 141 if (psfTry->psf->dApResid < minPSF->dApResid) {142 psFree (minPSF);143 psFree (minMask);144 minPSF = psMemIncrRefCounter(psfTry->psf);145 minMask = psMemIncrRefCounter(psfTry->mask);146 }104 105 if (Nx > Ny) { 106 options->psfTrendNx = i; 107 options->psfTrendNy = PS_MAX (orderMin, (int)(i * (Ny / Nx) + 0.5)); 108 } else { 109 options->psfTrendNy = i; 110 options->psfTrendNx = PS_MAX (orderMin, (int)(i * (Nx / Ny) + 0.5)); 111 } 112 113 // free existing data, if any 114 psFree(psfTry->psf); 115 psFree(psfTry->mask); 116 117 // allocate a mask and a psf model using the current Nx,Ny order values; 118 psfTry->psf = pmPSFAlloc (options); 119 psfTry->mask = psVectorCopy (NULL, srcMask, PS_TYPE_VECTOR_MASK); 120 121 // stage 2: construct a psf (pmPSF) from this collection of model fits, including the 2D variation 122 if (!pmPSFtryMakePSF (psfTry)) { 123 psError(PS_ERR_UNKNOWN, false, "failed to construct a psf model from collection of sources"); 124 psFree(psfTry); 125 return NULL; 126 } 127 128 // stage 3: refit with fixed shape parameters, measure pmPSFtry->metric 129 if (!pmPSFtryFitPSF (psfTry, options, maskVal, markVal)) { 130 psError(PS_ERR_UNKNOWN, false, "failed to construct a psf model from collection of sources"); 131 psFree(psfTry); 132 return NULL; 133 } 134 135 // stage 4: measure systematic error in pmPSFtry->metric 136 if (!pmPSFtryMetric (psfTry)) { 137 psError(PS_ERR_UNKNOWN, false, "failed to measure systematic error of metric"); 138 psFree(psfTry); 139 return NULL; 140 } 141 142 if (!minPSF) { 143 minPSF = psMemIncrRefCounter(psfTry->psf); 144 minMask = psMemIncrRefCounter(psfTry->mask); 145 } 146 147 if (psfTry->psf->dApResid < minPSF->dApResid) { 148 psFree (minPSF); 149 psFree (minMask); 150 minPSF = psMemIncrRefCounter(psfTry->psf); 151 minMask = psMemIncrRefCounter(psfTry->mask); 152 } 147 153 } 148 154 psFree (srcMask); … … 153 159 psfTry->psf = minPSF; 154 160 psfTry->mask = minMask; 155 161 156 162 // XXXXX this is probably not used any more. Are the chisq of the fits so bad? can we 157 163 // fix them by softening the errors on the brightest pixels?
Note:
See TracChangeset
for help on using the changeset viewer.
