Changeset 26432 for branches/eam_branches/20091201/ppSub/src/ppSubMakePSF.c
- Timestamp:
- Dec 15, 2009, 6:41:32 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/20091201/ppSub/src/ppSubMakePSF.c
r26318 r26432 61 61 return false; 62 62 } 63 63 64 pmReadout *photRO = pmFPAviewThisReadout(view, photFile->fpa); // Readout to photometer 65 66 // we need to remove any existing PSPHOT.SOURCES (why not do this in psphot?) 64 67 if (psMetadataLookup(photRO->analysis, "PSPHOT.SOURCES")) { 65 68 psMetadataRemoveKey(photRO->analysis, "PSPHOT.SOURCES"); 66 69 } 67 70 71 # ifdef TESTING 68 72 // XXX for testing, dump these images: 69 73 psphotSaveImage (NULL, photRO->image, "findpsf.im.fits"); 70 74 psphotSaveImage (NULL, photRO->variance, "findpsf.wt.fits"); 71 75 psphotSaveImage (NULL, photRO->mask, "findpsf.mk.fits"); 76 # endif 72 77 73 78 // Extract the loaded sources from the associated readout, and generate PSF … … 84 89 } 85 90 91 // save the resulting PSF information on the pmFPAfile PSPHOT.PSF.LOAD 92 pmFPAfile *psfFile = psMetadataLookupPtr(&mdok, config->files, "PSPHOT.PSF.LOAD"); // PSF file 93 if (!ppSubCopyPSF (psfFile, photFile, view)) { 94 psErrorStackPrint(stderr, "PSF was not generated"); 95 psWarning("PSF was not generated --- suspect bad data quality."); 96 ppSubDataQuality(data, psErrorCodeLast(), PPSUB_FILES_PHOT_SUB | PPSUB_FILES_PHOT_INV); 97 } 98 86 99 // Get rid of the generated header; it will be regenerated by the real photometry run 87 100 psMetadataRemoveKey(photRO->analysis, "PSPHOT.HEADER"); 88 89 if (!data->quality) {90 data->psf = psMemIncrRefCounter(psMetadataLookupPtr(NULL, photRO->parent->parent->analysis,91 "PSPHOT.PSF"));92 }93 101 94 102 psFree(view); … … 96 104 return true; 97 105 } 106 107 bool ppSubCopyPSF (pmFPAfile *output, pmFPAfile *input, pmFPAview *view) { 108 109 bool mdok = false; 110 111 pmChip *inputChip = pmFPAviewThisChip(view, input->fpa); // Chip with PSF info 112 pmChip *outputChip = pmFPAviewThisChip(view, output->fpa); // Chip to store PSF info 113 114 pmReadout *inputRO = pmFPAviewThisReadout(view, input->fpa); // Readout with PSF info 115 pmReadout *outputRO = pmFPAviewThisReadout(view, output->fpa); // Readout to store PSF info 116 117 if (!outputRO) { 118 pmCell *outputCell = pmFPAviewThisCell(view, output->fpa); 119 outputRO = pmReadoutAlloc(outputCell); 120 outputRO->image = psMemIncrRefCounter (inputRO->image); 121 } 122 123 // copy the PSF-related data to PSPHOT.PSF.LOAD for safe-keeping 124 psMetadata *psfRegions = psMetadataAlloc(); 125 126 int nRegions = psMetadataLookupS32 (&mdok, inputRO->analysis, "PSF.CLUMP.NREGIONS"); 127 if (!nRegions) { 128 psErrorStackPrint(stderr, "No PSF available"); 129 return false; 130 } 131 psMetadataAddS32 (psfRegions, PS_LIST_TAIL, "PSF.CLUMP.NREGIONS", PS_META_REPLACE, "psf clump regions", nRegions); 132 133 for (int i = 0; i < nRegions; i++) { 134 char fieldName[80]; 135 snprintf (fieldName, 80, "PSF.CLUMP.REGION.%03d", i); 136 psMetadata *regionMD = psMetadataLookupPtr (&mdok, inputRO->analysis, fieldName); 137 if (!regionMD) { 138 psWarning ("missing psf clump region metadata for entry %d", i); 139 continue; 140 } 141 psMetadataAddMetadata (psfRegions, PS_LIST_TAIL, fieldName, PS_META_REPLACE, "psf clump region", regionMD); 142 } 143 144 // XXX why am I replacing the entire analysis MD? 145 psFree(outputRO->analysis); 146 outputRO->analysis = psfRegions; 147 148 // copy the PSF model data 149 pmPSF *psf = psMetadataLookupPtr(NULL, inputChip->analysis, "PSPHOT.PSF"); // PSF for photometry 150 if (!psf) { 151 psErrorStackPrint(stderr, "No PSF available"); 152 return false; 153 } 154 psMetadataAddPtr(outputChip->analysis, PS_LIST_TAIL, "PSPHOT.PSF", PS_DATA_UNKNOWN | PS_META_REPLACE, "PSF from ppSubMakePSF", psf); 155 156 return true; 157 }
Note:
See TracChangeset
for help on using the changeset viewer.
