Changeset 18601 for trunk/psModules/src/camera/pmFPAfileFitsIO.c
- Timestamp:
- Jul 17, 2008, 12:38:15 PM (18 years ago)
- File:
-
- 1 edited
-
trunk/psModules/src/camera/pmFPAfileFitsIO.c (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/src/camera/pmFPAfileFitsIO.c
r18554 r18601 22 22 #include "pmFPAConstruct.h" 23 23 #include "pmDark.h" 24 25 pmFPA *pmFPAfileSuitableFPA(const pmFPAfile *file, const pmFPAview *view, const pmConfig *config) 26 { 27 PS_ASSERT_PTR_NON_NULL(file, NULL); 28 PS_ASSERT_PTR_NON_NULL(view, NULL); 24 #include "pmConcepts.h" 25 26 // Get a suitable FPA for the file; generate it if necessary 27 static pmFPA *suitableFPA(const pmFPAfile *file, // File for which to get FPA 28 const pmFPAview *view, // View at which to produce the FPA 29 pmConfig *config, // Configuration (for concepts update) 30 bool pixels // Worry about copying pixels? 31 ) 32 { 33 psAssert(file, "It's supposed to be here"); 34 psAssert(view, "It's supposed to be here"); 35 psAssert(config, "It's supposed to be here"); 29 36 30 37 if (!file->format) { // Working with the same output format as input format … … 86 93 switch (level) { 87 94 case PM_FPA_LEVEL_FPA: 88 if (!pmFPACopy(copy, file->fpa)) { 95 if ((pixels && !pmFPACopy(copy, file->fpa)) || 96 (!pixels && !pmFPACopyStructure(copy, file->fpa, 1, 1))) { 89 97 psError(PS_ERR_UNKNOWN, false, "Unable to copy FPA for format conversion.\n"); 90 98 return NULL; … … 94 102 pmChip *chip = pmFPAviewThisChip(view, copy); // Chip of interest 95 103 pmChip *srcChip = pmFPAviewThisChip(view, file->fpa); // Source chip 96 if (!pmChipCopy(chip, srcChip)) { 104 if ((pixels && !pmChipCopy(chip, srcChip)) || 105 (!pixels && !pmChipCopyStructure(chip, srcChip, 1, 1))) { 97 106 psError(PS_ERR_UNKNOWN, false, "Unable to copy chip for format conversion.\n"); 98 107 return false; … … 103 112 pmCell *cell = pmFPAviewThisCell(view, copy); // Cell of interest 104 113 pmCell *srcCell = pmFPAviewThisCell(view, file->fpa); // Source cell 105 if (!pmCellCopy(cell, srcCell)) { 114 if ((pixels && !pmCellCopy(cell, srcCell)) || 115 (!pixels && !pmCellCopyStructure(cell, srcCell, 1, 1))) { 106 116 psError(PS_ERR_UNKNOWN, false, "Unable to copy cell for format conversion.\n"); 107 117 return false; … … 115 125 } 116 126 127 // Unreachable 117 128 return NULL; 118 129 } 130 131 132 pmFPA *pmFPAfileSuitableFPA(const pmFPAfile *file, const pmFPAview *view, pmConfig *config, bool pixels) 133 { 134 PS_ASSERT_PTR_NON_NULL(file, NULL); 135 PS_ASSERT_PTR_NON_NULL(view, NULL); 136 PS_ASSERT_PTR_NON_NULL(config, NULL); 137 138 pmFPA *fpa = suitableFPA(file, view, config, pixels); // A suitable FPA for writing 139 if (!fpa) { 140 psError(PS_ERR_UNKNOWN, false, "Unable to produce suitable FPA."); 141 return NULL; 142 } 143 144 // Ensure headers and all are updated 145 // This is here so that the individual write functions (e.g., images, PSFs, sources, etc) don't have to 146 // take care of all this themselves (because they generally don't). 147 switch (file->type) { 148 case PM_FPA_FILE_IMAGE: 149 case PM_FPA_FILE_MASK: 150 case PM_FPA_FILE_WEIGHT: 151 case PM_FPA_FILE_HEADER: 152 case PM_FPA_FILE_FRINGE: 153 case PM_FPA_FILE_DARK: 154 case PM_FPA_FILE_CMP: 155 case PM_FPA_FILE_CMF: 156 case PM_FPA_FILE_PSF: 157 case PM_FPA_FILE_ASTROM_MODEL: 158 case PM_FPA_FILE_ASTROM_REFSTARS: { 159 pmHDU *hdu = pmFPAviewThisHDU(view, fpa); 160 if (hdu) { 161 if (!hdu->header) { 162 hdu->header = psMetadataAlloc(); 163 } 164 pmConfigConformHeader(hdu->header, file->format); 165 166 // whenever we write out a mask image, we should define the bits which represent mask concepts 167 if (file->type == PM_FPA_FILE_MASK) { 168 assert (hdu->header); 169 if (!pmConfigMaskWriteHeader(config, hdu->header)) { 170 psError(PS_ERR_UNKNOWN, false, 171 "failed to set the bitmask names in the PHU header for Image %s (%s)\n", 172 file->filename, file->name); 173 return false; 174 } 175 } 176 } 177 178 pmChip *chip = pmFPAviewThisChip(view, fpa); // Chip of interest, or NULL 179 pmCell *cell = pmFPAviewThisCell(view, fpa); // Cell of interest, or NULL 180 if (!pmFPAUpdateNames(fpa, chip, cell)) { 181 psError(PS_ERR_UNKNOWN, false, "Unable to update names in header."); 182 return false; 183 } 184 185 pmConceptSource sources = PM_CONCEPT_SOURCE_HEADER | PM_CONCEPT_SOURCE_CELLS | 186 PM_CONCEPT_SOURCE_DEFAULTS | PM_CONCEPT_SOURCE_DATABASE; // Concept sources to write 187 if (cell) { 188 if (!pmConceptsWriteCell(cell, sources, true, config)) { 189 psError(PS_ERR_IO, false, "Unable to write concepts for cell.\n"); 190 return false; 191 } 192 } else if (chip) { 193 if (!pmConceptsWriteChip(chip, sources, true, true, config)) { 194 psError(PS_ERR_IO, false, "Unable to write concepts for chip.\n"); 195 return false; 196 } 197 } else if (!pmConceptsWriteFPA(fpa, sources, true, config)) { 198 psError(PS_ERR_IO, false, "Unable to write concepts for FPA.\n"); 199 return false; 200 } 201 break; 202 } 203 default: 204 // No action 205 break; 206 } 207 208 return fpa; 119 209 } 120 210 … … 142 232 143 233 // given an already-opened fits file, write the table corresponding to the specified view 144 bool pmFPAviewWriteFitsTable(const pmFPAview *view, pmFPAfile *file, const char *name )145 { 146 PS_ASSERT_PTR_NON_NULL(view, false); 147 PS_ASSERT_PTR_NON_NULL(file, false); 148 149 pmFPA *fpa = file->fpa;// FPA of interest234 bool pmFPAviewWriteFitsTable(const pmFPAview *view, pmFPAfile *file, const char *name, pmConfig *config) 235 { 236 PS_ASSERT_PTR_NON_NULL(view, false); 237 PS_ASSERT_PTR_NON_NULL(file, false); 238 239 pmFPA *fpa = pmFPAfileSuitableFPA(file, view, config, false); // FPA of interest 150 240 psFits *fits = file->fits; // FITS file 151 241 … … 280 370 PS_ASSERT_PTR_NON_NULL(fits, false); 281 371 282 pmFPA *fpa = pmFPAfileSuitableFPA(file, view, config ); // FPA to write372 pmFPA *fpa = pmFPAfileSuitableFPA(file, view, config, true); // FPA to write 283 373 284 374 switch (pmFPAviewLevel(view)) { … … 489 579 490 580 // select or generate the desired fpa in the correct output format 491 pmFPA *fpa = pmFPAfileSuitableFPA(file, view, config );581 pmFPA *fpa = pmFPAfileSuitableFPA(file, view, config, false); 492 582 pmHDU *phu = pmFPAviewThisHDU(view, fpa); 493 583 if (!phu || !phu->blankPHU) { … … 499 589 // whenever we write out a mask image, we should define the bits which represent mask concepts 500 590 if (file->type == PM_FPA_FILE_MASK) { 501 assert (phu->header);502 if (!pmConfigMaskWriteHeader (config, phu->header)) {503 psError(PS_ERR_UNKNOWN, false, "failed to set the bitmask names in the PHU header for Image %s (%s)\n", file->filename, file->name);504 return false;505 }591 assert (phu->header); 592 if (!pmConfigMaskWriteHeader (config, phu->header)) { 593 psError(PS_ERR_UNKNOWN, false, "failed to set the bitmask names in the PHU header for Image %s (%s)\n", file->filename, file->name); 594 return false; 595 } 506 596 } 507 597
Note:
See TracChangeset
for help on using the changeset viewer.
