Changeset 15929 for trunk/psModules/src/camera/pmFPAfile.c
- Timestamp:
- Dec 26, 2007, 4:06:59 PM (18 years ago)
- File:
-
- 1 edited
-
trunk/psModules/src/camera/pmFPAfile.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/src/camera/pmFPAfile.c
r15665 r15929 21 21 static void pmFPAfileFree(pmFPAfile *file) 22 22 { 23 if (!file) { 24 return; 25 } 26 27 psTrace ("pmFPAfileFree", 5, "freeing %s\n", file->name); 28 psFree (file->fpa); 29 psFree (file->src); 30 psFree (file->readout); 31 psFree (file->names); 32 33 psFree (file->camera); 34 psFree (file->cameraName); 35 psFree (file->format); 36 psFree (file->formatName); 37 psFree (file->name); 38 39 if (file->fits != NULL) { 40 psFitsClose (file->fits); 41 } 42 psFree(file->compression); 43 44 psFree (file->filerule); 45 46 psFree (file->filesrc); 47 psFree (file->detrend); 48 49 psFree (file->filename); 50 psFree (file->extname); 51 23 if (!file) { 52 24 return; 25 } 26 27 psTrace ("pmFPAfileFree", 5, "freeing %s\n", file->name); 28 psFree (file->fpa); 29 psFree (file->src); 30 psFree (file->readout); 31 psFree (file->names); 32 33 psFree (file->camera); 34 psFree (file->cameraName); 35 psFree (file->format); 36 psFree (file->formatName); 37 psFree (file->name); 38 39 if (file->fits != NULL) { 40 psFitsClose (file->fits); 41 } 42 psFree(file->compression); 43 44 psFree (file->filerule); 45 46 psFree (file->filesrc); 47 psFree (file->detrend); 48 49 psFree (file->filename); 50 psFree (file->extname); 51 52 return; 53 53 } 54 54 55 55 pmFPAfile *pmFPAfileAlloc() 56 56 { 57 pmFPAfile *file = psAlloc(sizeof(pmFPAfile));58 psMemSetDeallocator(file, (psFreeFunc) pmFPAfileFree);59 60 file->wrote_phu = false;61 file->readout = NULL;62 file->header = NULL;63 64 file->fileLevel = PM_FPA_LEVEL_NONE;65 file->dataLevel = PM_FPA_LEVEL_NONE;66 file->freeLevel = PM_FPA_LEVEL_NONE;67 file->mosaicLevel = PM_FPA_LEVEL_NONE;68 69 file->type = PM_FPA_FILE_NONE;70 file->mode = PM_FPA_MODE_NONE;71 file->state = PM_FPA_STATE_CLOSED;72 73 file->fpa = NULL;74 file->fits = NULL;75 file->compression = NULL;76 file->bitpix = 0;77 file->floatType = PS_FITS_FLOAT_NONE;78 file->names = psMetadataAlloc();79 80 file->camera = NULL;81 file->cameraName = NULL;82 file->format = NULL;83 file->formatName = NULL;84 file->name = NULL;85 86 file->filerule = NULL;87 88 file->filename = NULL;89 file->extname = NULL;90 91 file->filesrc = NULL;92 file->detrend = NULL;93 94 file->xBin = 1;95 file->yBin = 1;96 file->src = NULL;97 98 file->save = false;99 100 return file;57 pmFPAfile *file = psAlloc(sizeof(pmFPAfile)); 58 psMemSetDeallocator(file, (psFreeFunc) pmFPAfileFree); 59 60 file->wrote_phu = false; 61 file->readout = NULL; 62 file->header = NULL; 63 64 file->fileLevel = PM_FPA_LEVEL_NONE; 65 file->dataLevel = PM_FPA_LEVEL_NONE; 66 file->freeLevel = PM_FPA_LEVEL_NONE; 67 file->mosaicLevel = PM_FPA_LEVEL_NONE; 68 69 file->type = PM_FPA_FILE_NONE; 70 file->mode = PM_FPA_MODE_NONE; 71 file->state = PM_FPA_STATE_CLOSED; 72 73 file->fpa = NULL; 74 file->fits = NULL; 75 file->compression = NULL; 76 file->bitpix = 0; 77 file->floatType = PS_FITS_FLOAT_NONE; 78 file->names = psMetadataAlloc(); 79 80 file->camera = NULL; 81 file->cameraName = NULL; 82 file->format = NULL; 83 file->formatName = NULL; 84 file->name = NULL; 85 86 file->filerule = NULL; 87 88 file->filename = NULL; 89 file->extname = NULL; 90 91 file->filesrc = NULL; 92 file->detrend = NULL; 93 94 file->xBin = 1; 95 file->yBin = 1; 96 file->src = NULL; 97 98 file->save = false; 99 100 return file; 101 101 } 102 102 … … 104 104 pmReadout *pmFPAfileThisReadout (psMetadata *files, const pmFPAview *view, const char *name) 105 105 { 106 PS_ASSERT_PTR_NON_NULL(files, false);107 PS_ASSERT_PTR_NON_NULL(view, false);108 PS_ASSERT_PTR_NON_NULL(name, false);109 PS_ASSERT_INT_POSITIVE(strlen(name), false);110 111 bool status;112 113 pmFPAfile *file = psMetadataLookupPtr (&status, files, name);114 if (file == NULL) {115 return NULL;116 }117 118 // internal files have the readout as a separate element:119 if (file->mode == PM_FPA_MODE_INTERNAL) {120 return file->readout;121 }122 123 pmReadout *readout = pmFPAviewThisReadout (view, file->fpa);124 return readout;106 PS_ASSERT_PTR_NON_NULL(files, false); 107 PS_ASSERT_PTR_NON_NULL(view, false); 108 PS_ASSERT_PTR_NON_NULL(name, false); 109 PS_ASSERT_INT_POSITIVE(strlen(name), false); 110 111 bool status; 112 113 pmFPAfile *file = psMetadataLookupPtr (&status, files, name); 114 if (file == NULL) { 115 return NULL; 116 } 117 118 // internal files have the readout as a separate element: 119 if (file->mode == PM_FPA_MODE_INTERNAL) { 120 return file->readout; 121 } 122 123 pmReadout *readout = pmFPAviewThisReadout (view, file->fpa); 124 return readout; 125 125 } 126 126 … … 128 128 pmCell *pmFPAfileThisCell (psMetadata *files, const pmFPAview *view, const char *name) 129 129 { 130 PS_ASSERT_PTR_NON_NULL(files, false);131 PS_ASSERT_PTR_NON_NULL(view, false);132 PS_ASSERT_PTR_NON_NULL(name, false);133 PS_ASSERT_INT_POSITIVE(strlen(name), false);134 135 bool status;136 137 pmFPAfile *file = psMetadataLookupPtr (&status, files, name);138 if (file == NULL) {139 return NULL;140 }141 142 // internal files have the readout as a separate element:143 if (file->mode == PM_FPA_MODE_INTERNAL) {144 return NULL;145 }146 147 pmCell *cell = pmFPAviewThisCell(view, file->fpa);148 return cell;130 PS_ASSERT_PTR_NON_NULL(files, false); 131 PS_ASSERT_PTR_NON_NULL(view, false); 132 PS_ASSERT_PTR_NON_NULL(name, false); 133 PS_ASSERT_INT_POSITIVE(strlen(name), false); 134 135 bool status; 136 137 pmFPAfile *file = psMetadataLookupPtr (&status, files, name); 138 if (file == NULL) { 139 return NULL; 140 } 141 142 // internal files have the readout as a separate element: 143 if (file->mode == PM_FPA_MODE_INTERNAL) { 144 return NULL; 145 } 146 147 pmCell *cell = pmFPAviewThisCell(view, file->fpa); 148 return cell; 149 149 } 150 150 … … 152 152 pmChip *pmFPAfileThisChip (psMetadata *files, const pmFPAview *view, const char *name) 153 153 { 154 PS_ASSERT_PTR_NON_NULL(files, false);155 PS_ASSERT_PTR_NON_NULL(view, false);156 PS_ASSERT_PTR_NON_NULL(name, false);157 PS_ASSERT_INT_POSITIVE(strlen(name), false);158 159 bool status;160 161 pmFPAfile *file = psMetadataLookupPtr (&status, files, name);162 if (file == NULL) {163 return NULL;164 }165 166 // internal files have the readout as a separate element:167 if (file->mode == PM_FPA_MODE_INTERNAL) {168 return NULL;169 }170 171 pmChip *chip = pmFPAviewThisChip (view, file->fpa);172 return chip;154 PS_ASSERT_PTR_NON_NULL(files, false); 155 PS_ASSERT_PTR_NON_NULL(view, false); 156 PS_ASSERT_PTR_NON_NULL(name, false); 157 PS_ASSERT_INT_POSITIVE(strlen(name), false); 158 159 bool status; 160 161 pmFPAfile *file = psMetadataLookupPtr (&status, files, name); 162 if (file == NULL) { 163 return NULL; 164 } 165 166 // internal files have the readout as a separate element: 167 if (file->mode == PM_FPA_MODE_INTERNAL) { 168 return NULL; 169 } 170 171 pmChip *chip = pmFPAviewThisChip (view, file->fpa); 172 return chip; 173 173 } 174 174 175 175 psString pmFPANameFromRule(const char *rule, const pmFPA *fpa, const pmFPAview *view) 176 176 { 177 PS_ASSERT_STRING_NON_EMPTY(rule, NULL);178 PS_ASSERT_PTR_NON_NULL(view, NULL);179 180 psString newName = NULL; // New name, to be returned181 newName = psStringCopy(rule);182 183 if (strstr (newName, "{FPA.NAME}") != NULL) {184 char *name = psMetadataLookupStr (NULL, fpa->concepts, "FPA.NAME");185 if (name != NULL) {186 psStringSubstitute(&newName, "fpa", "{FPA.NAME}");187 }188 }189 if (strstr (newName, "{CHIP.NAME}") != NULL) {190 pmChip *chip = pmFPAviewThisChip (view, fpa);191 if (chip != NULL) {192 char *name = psMetadataLookupStr (NULL, chip->concepts, "CHIP.NAME");193 if (name != NULL) {194 psStringSubstitute(&newName, name, "{CHIP.NAME}");195 }196 }197 }198 if (strstr (newName, "{CHIP.ID}") != NULL) {199 pmChip *chip = pmFPAviewThisChip (view, fpa);200 if (chip != NULL) {201 char *name = psMetadataLookupStr (NULL, chip->concepts, "CHIP.ID");202 if (name != NULL) {203 psStringSubstitute(&newName, name, "{CHIP.ID}");204 }205 }206 }207 if (strstr (newName, "{CHIP.N}") != NULL) {208 char *name = NULL;209 if (view->chip < 0) {210 psStringAppend (&name, "XX");211 } else {212 psStringAppend (&name, "%02d", view->chip);213 }214 psStringSubstitute(&newName, name, "{CHIP.N}");215 psFree (name);216 }217 if (strstr (newName, "{CELL.NAME}") != NULL) {218 pmCell *cell = pmFPAviewThisCell (view, fpa);219 if (cell != NULL) {220 char *name = psMetadataLookupStr (NULL, cell->concepts, "CELL.NAME");221 if (name != NULL) {222 psStringSubstitute(&newName, name, "{CELL.NAME}");223 }224 }225 }226 if (strstr (newName, "{CELL.N}") != NULL) {227 char *name = NULL;228 if (view->cell < 0) {229 psStringAppend (&name, "XX");230 } else {231 psStringAppend (&name, "%02d", view->cell);232 }233 psStringSubstitute(&newName, name, "{CELL.N}");234 }235 if (strstr (newName, "{EXTNAME}") != NULL) {236 pmHDU *hdu = pmFPAviewThisHDU (view, fpa);237 if (hdu->extname && *hdu->extname) {238 psStringSubstitute(&newName, hdu->extname, "{EXTNAME}");239 }240 }241 if (strstr (newName, "{FILTER}") != NULL) {242 if (fpa != NULL) {243 char *name = psMetadataLookupStr (NULL, fpa->concepts, "FPA.FILTER");244 if (name && *name) {245 psStringSubstitute(&newName, name, "{FILTER}");246 }247 }248 }249 if (strstr (newName, "{FILTER.ID}") != NULL) {250 if (fpa != NULL) {251 char *name = psMetadataLookupStr (NULL, fpa->concepts, "FPA.FILTERID");252 if (name && *name) {253 psStringSubstitute(&newName, name, "{FILTER.ID}");254 }255 }256 }257 if (strstr (newName, "{CAMERA}") != NULL) {258 if (fpa != NULL) {259 char *name = psMetadataLookupStr (NULL, fpa->concepts, "FPA.INSTRUMENT");260 if (name && *name) {261 psStringSubstitute(&newName, name, "{CAMERA}");262 }263 }264 }265 if (strstr (newName, "{INSTRUMENT}") != NULL) {266 if (fpa != NULL) {267 char *name = psMetadataLookupStr (NULL, fpa->concepts, "FPA.INSTRUMENT");268 if (name && *name) {269 psStringSubstitute(&newName, name, "{INSTRUMENT}");270 }271 }272 }273 if (strstr (newName, "{DETECTOR}") != NULL) {274 if (fpa != NULL) {275 char *name = psMetadataLookupStr (NULL, fpa->concepts, "FPA.DETECTOR");276 if (name && *name) {277 psStringSubstitute(&newName, name, "{DETECTOR}");278 }279 }280 }281 if (strstr (newName, "{TELESCOPE}") != NULL) {282 if (fpa != NULL) {283 char *name = psMetadataLookupStr (NULL, fpa->concepts, "FPA.TELESCOPE");284 if (name && *name) {285 psStringSubstitute(&newName, name, "{TELESCOPE}");286 }287 }288 }289 return newName;177 PS_ASSERT_STRING_NON_EMPTY(rule, NULL); 178 PS_ASSERT_PTR_NON_NULL(view, NULL); 179 180 psString newName = NULL; // New name, to be returned 181 newName = psStringCopy(rule); 182 183 if (strstr (newName, "{FPA.NAME}") != NULL) { 184 char *name = psMetadataLookupStr (NULL, fpa->concepts, "FPA.NAME"); 185 if (name != NULL) { 186 psStringSubstitute(&newName, "fpa", "{FPA.NAME}"); 187 } 188 } 189 if (strstr (newName, "{CHIP.NAME}") != NULL) { 190 pmChip *chip = pmFPAviewThisChip (view, fpa); 191 if (chip != NULL) { 192 char *name = psMetadataLookupStr (NULL, chip->concepts, "CHIP.NAME"); 193 if (name != NULL) { 194 psStringSubstitute(&newName, name, "{CHIP.NAME}"); 195 } 196 } 197 } 198 if (strstr (newName, "{CHIP.ID}") != NULL) { 199 pmChip *chip = pmFPAviewThisChip (view, fpa); 200 if (chip != NULL) { 201 char *name = psMetadataLookupStr (NULL, chip->concepts, "CHIP.ID"); 202 if (name != NULL) { 203 psStringSubstitute(&newName, name, "{CHIP.ID}"); 204 } 205 } 206 } 207 if (strstr (newName, "{CHIP.N}") != NULL) { 208 char *name = NULL; 209 if (view->chip < 0) { 210 psStringAppend (&name, "XX"); 211 } else { 212 psStringAppend (&name, "%02d", view->chip); 213 } 214 psStringSubstitute(&newName, name, "{CHIP.N}"); 215 psFree (name); 216 } 217 if (strstr (newName, "{CELL.NAME}") != NULL) { 218 pmCell *cell = pmFPAviewThisCell (view, fpa); 219 if (cell != NULL) { 220 char *name = psMetadataLookupStr (NULL, cell->concepts, "CELL.NAME"); 221 if (name != NULL) { 222 psStringSubstitute(&newName, name, "{CELL.NAME}"); 223 } 224 } 225 } 226 if (strstr (newName, "{CELL.N}") != NULL) { 227 char *name = NULL; 228 if (view->cell < 0) { 229 psStringAppend (&name, "XX"); 230 } else { 231 psStringAppend (&name, "%02d", view->cell); 232 } 233 psStringSubstitute(&newName, name, "{CELL.N}"); 234 } 235 if (strstr (newName, "{EXTNAME}") != NULL) { 236 pmHDU *hdu = pmFPAviewThisHDU (view, fpa); 237 if (hdu->extname && *hdu->extname) { 238 psStringSubstitute(&newName, hdu->extname, "{EXTNAME}"); 239 } 240 } 241 if (strstr (newName, "{FILTER}") != NULL) { 242 if (fpa != NULL) { 243 char *name = psMetadataLookupStr (NULL, fpa->concepts, "FPA.FILTER"); 244 if (name && *name) { 245 psStringSubstitute(&newName, name, "{FILTER}"); 246 } 247 } 248 } 249 if (strstr (newName, "{FILTER.ID}") != NULL) { 250 if (fpa != NULL) { 251 char *name = psMetadataLookupStr (NULL, fpa->concepts, "FPA.FILTERID"); 252 if (name && *name) { 253 psStringSubstitute(&newName, name, "{FILTER.ID}"); 254 } 255 } 256 } 257 if (strstr (newName, "{CAMERA}") != NULL) { 258 if (fpa != NULL) { 259 char *name = psMetadataLookupStr (NULL, fpa->concepts, "FPA.INSTRUMENT"); 260 if (name && *name) { 261 psStringSubstitute(&newName, name, "{CAMERA}"); 262 } 263 } 264 } 265 if (strstr (newName, "{INSTRUMENT}") != NULL) { 266 if (fpa != NULL) { 267 char *name = psMetadataLookupStr (NULL, fpa->concepts, "FPA.INSTRUMENT"); 268 if (name && *name) { 269 psStringSubstitute(&newName, name, "{INSTRUMENT}"); 270 } 271 } 272 } 273 if (strstr (newName, "{DETECTOR}") != NULL) { 274 if (fpa != NULL) { 275 char *name = psMetadataLookupStr (NULL, fpa->concepts, "FPA.DETECTOR"); 276 if (name && *name) { 277 psStringSubstitute(&newName, name, "{DETECTOR}"); 278 } 279 } 280 } 281 if (strstr (newName, "{TELESCOPE}") != NULL) { 282 if (fpa != NULL) { 283 char *name = psMetadataLookupStr (NULL, fpa->concepts, "FPA.TELESCOPE"); 284 if (name && *name) { 285 psStringSubstitute(&newName, name, "{TELESCOPE}"); 286 } 287 } 288 } 289 return newName; 290 290 } 291 291 … … 293 293 psString pmFPAfileNameFromRule(const char *rule, const pmFPAfile *file, const pmFPAview *view) 294 294 { 295 PS_ASSERT_PTR_NON_NULL(rule, NULL);296 PS_ASSERT_INT_POSITIVE(strlen(rule), NULL);297 PS_ASSERT_PTR_NON_NULL(file, NULL);298 PS_ASSERT_PTR_NON_NULL(view, NULL);299 300 psString newRule = NULL; // Rule to pass on to pmFPANameFromRule301 newRule = psStringCopy(rule);302 303 if (strstr(newRule, "{OUTPUT}") != NULL) {304 char *name = psMetadataLookupStr(NULL, file->names, "OUTPUT");305 if (name) {306 psStringSubstitute(&newRule, name, "{OUTPUT}");307 }308 }309 310 psString newName = pmFPANameFromRule(newRule, file->fpa, view); // New name, to be returned311 psFree(newRule);312 313 return newName;295 PS_ASSERT_PTR_NON_NULL(rule, NULL); 296 PS_ASSERT_INT_POSITIVE(strlen(rule), NULL); 297 PS_ASSERT_PTR_NON_NULL(file, NULL); 298 PS_ASSERT_PTR_NON_NULL(view, NULL); 299 300 psString newRule = NULL; // Rule to pass on to pmFPANameFromRule 301 newRule = psStringCopy(rule); 302 303 if (strstr(newRule, "{OUTPUT}") != NULL) { 304 char *name = psMetadataLookupStr(NULL, file->names, "OUTPUT"); 305 if (name) { 306 psStringSubstitute(&newRule, name, "{OUTPUT}"); 307 } 308 } 309 310 psString newName = pmFPANameFromRule(newRule, file->fpa, view); // New name, to be returned 311 psFree(newRule); 312 313 return newName; 314 314 } 315 315 … … 318 318 bool pmFPAfileCopyView (pmFPA *out, pmFPA *in, const pmFPAview *view) 319 319 { 320 PS_ASSERT_PTR_NON_NULL(out, false); 321 PS_ASSERT_PTR_NON_NULL(in, false); 322 PS_ASSERT_PTR_NON_NULL(view, false); 323 324 // pmFPAWrite takes care of all PHUs as needed 325 if (view->chip == -1) { 326 pmFPACopy (out, in); 327 return true; 328 } 329 if (view->chip >= in->chips->n) { 330 psError(PS_ERR_IO, true, "Requested chip == %d >= in->chips->n == %ld", view->chip, in->chips->n); 331 return false; 332 } 333 pmChip *inChip = in->chips->data[view->chip]; 334 pmChip *outChip = out->chips->data[view->chip]; 335 336 if (view->cell == -1) { 337 pmChipCopy (outChip, inChip); 338 return true; 339 } 340 if (view->cell >= inChip->cells->n) { 341 psError(PS_ERR_IO, true, "Requested cell == %d>= inChip->cells->n == %ld", 342 view->cell, inChip->cells->n); 343 return false; 344 } 345 pmCell *inCell = inChip->cells->data[view->cell]; 346 pmCell *outCell = outChip->cells->data[view->cell]; 347 348 if (view->readout == -1) { 349 pmCellCopy (outCell, inCell); 350 return true; 351 } 352 psError(PS_ERR_UNKNOWN, true, "Returning false"); 320 PS_ASSERT_PTR_NON_NULL(out, false); 321 PS_ASSERT_PTR_NON_NULL(in, false); 322 PS_ASSERT_PTR_NON_NULL(view, false); 323 324 // pmFPAWrite takes care of all PHUs as needed 325 if (view->chip == -1) { 326 pmFPACopy (out, in); 327 return true; 328 } 329 if (view->chip >= in->chips->n) { 330 psError(PS_ERR_IO, true, "Requested chip == %d >= in->chips->n == %ld", view->chip, in->chips->n); 353 331 return false; 354 355 // XXX add readout / segment equivalents 332 } 333 pmChip *inChip = in->chips->data[view->chip]; 334 pmChip *outChip = out->chips->data[view->chip]; 335 336 if (view->cell == -1) { 337 pmChipCopy (outChip, inChip); 338 return true; 339 } 340 if (view->cell >= inChip->cells->n) { 341 psError(PS_ERR_IO, true, "Requested cell == %d>= inChip->cells->n == %ld", 342 view->cell, inChip->cells->n); 343 return false; 344 } 345 pmCell *inCell = inChip->cells->data[view->cell]; 346 pmCell *outCell = outChip->cells->data[view->cell]; 347 348 if (view->readout == -1) { 349 pmCellCopy (outCell, inCell); 350 return true; 351 } 352 psError(PS_ERR_UNKNOWN, true, "Returning false"); 353 return false; 354 355 // XXX add readout / segment equivalents 356 356 } 357 357 358 358 // given an already-opened fits file, write the components corresponding 359 359 // to the specified view 360 bool pmFPAfileCopyStructureView (pmFPA *out, pmFPA *in, int xBin, int yBin, const pmFPAview *view) 361 { 362 bool status; 363 PS_ASSERT_PTR_NON_NULL(out, false); 364 PS_ASSERT_PTR_NON_NULL(in, false); 365 PS_ASSERT_PTR_NON_NULL(view, false); 366 367 // XXX this should be smarter (ie, only copy concepts from the current chips) 368 // but such a call is needed, so re-copy stuff rather than no copy 369 pmFPACopyConcepts (out, in); 370 371 // pmFPAWrite takes care of all PHUs as needed 372 if (view->chip == -1) { 373 status = pmFPACopyStructure (out, in, xBin, yBin); 374 return status; 375 } 376 if (view->chip >= in->chips->n) { 377 psError(PS_ERR_IO, true, "Requested chip == %d >= in->chips->n == %ld", view->chip, in->chips->n); 378 return false; 379 } 380 pmChip *inChip = in->chips->data[view->chip]; 381 pmChip *outChip = out->chips->data[view->chip]; 382 383 if (view->cell == -1) { 384 status = pmChipCopyStructure (outChip, inChip, xBin, yBin); 385 return status; 386 } 387 if (view->cell >= inChip->cells->n) { 388 psError(PS_ERR_IO, true, "Requested cell == %d>= inChip->cells->n == %ld", 389 view->cell, inChip->cells->n); 390 return false; 391 } 392 pmCell *inCell = inChip->cells->data[view->cell]; 393 pmCell *outCell = outChip->cells->data[view->cell]; 394 395 status = pmCellCopyStructure (outCell, inCell, xBin, yBin); 360 bool pmFPAfileCopyStructureView (pmFPA *out, const pmFPA *in, int xBin, int yBin, const pmFPAview *view) 361 { 362 bool status; 363 PS_ASSERT_PTR_NON_NULL(out, false); 364 PS_ASSERT_PTR_NON_NULL(in, false); 365 PS_ASSERT_PTR_NON_NULL(view, false); 366 367 // XXX this should be smarter (ie, only copy concepts from the current chips) 368 // but such a call is needed, so re-copy stuff rather than no copy 369 pmFPACopyConcepts (out, in); 370 371 // pmFPAWrite takes care of all PHUs as needed 372 if (view->chip == -1) { 373 status = pmFPACopyStructure (out, in, xBin, yBin); 396 374 return status; 375 } 376 if (view->chip >= in->chips->n) { 377 psError(PS_ERR_IO, true, "Requested chip == %d >= in->chips->n == %ld", view->chip, in->chips->n); 378 return false; 379 } 380 pmChip *inChip = in->chips->data[view->chip]; 381 pmChip *outChip = out->chips->data[view->chip]; 382 383 if (view->cell == -1) { 384 status = pmChipCopyStructure (outChip, inChip, xBin, yBin); 385 return status; 386 } 387 if (view->cell >= inChip->cells->n) { 388 psError(PS_ERR_IO, true, "Requested cell == %d>= inChip->cells->n == %ld", 389 view->cell, inChip->cells->n); 390 return false; 391 } 392 pmCell *inCell = inChip->cells->data[view->cell]; 393 pmCell *outCell = outChip->cells->data[view->cell]; 394 395 status = pmCellCopyStructure (outCell, inCell, xBin, yBin); 396 return status; 397 397 } 398 398 399 399 pmFPAfileType pmFPAfileTypeFromString(const char *type) 400 400 { 401 PS_ASSERT_STRING_NON_EMPTY(type, PM_FPA_FILE_NONE);402 403 if (!strcasecmp (type, "SX")) {404 return PM_FPA_FILE_SX;405 }406 if (!strcasecmp (type, "OBJ")) {407 return PM_FPA_FILE_OBJ;408 }409 if (!strcasecmp (type, "CMP")) {410 return PM_FPA_FILE_CMP;411 }412 if (!strcasecmp (type, "CMF")) {413 return PM_FPA_FILE_CMF;414 }415 if (!strcasecmp (type, "RAW")) {416 return PM_FPA_FILE_RAW;417 }418 if (!strcasecmp (type, "IMAGE")) {419 return PM_FPA_FILE_IMAGE;420 }421 if (!strcasecmp (type, "PSF")) {422 return PM_FPA_FILE_PSF;423 }424 if (!strcasecmp (type, "JPEG")) {425 return PM_FPA_FILE_JPEG;426 }427 if (!strcasecmp (type, "KAPA")) {428 return PM_FPA_FILE_KAPA;429 }430 if (!strcasecmp (type, "MASK")) {431 return PM_FPA_FILE_MASK;432 }433 if (!strcasecmp (type, "WEIGHT")) {434 return PM_FPA_FILE_WEIGHT;435 }436 if (!strcasecmp (type, "FRINGE")) {437 return PM_FPA_FILE_FRINGE;438 }439 if (!strcasecmp (type, "HEADER")) {440 return PM_FPA_FILE_HEADER;441 }442 if (!strcasecmp (type, "ASTROM")) {443 return PM_FPA_FILE_ASTROM;444 }445 446 return PM_FPA_FILE_NONE;401 PS_ASSERT_STRING_NON_EMPTY(type, PM_FPA_FILE_NONE); 402 403 if (!strcasecmp (type, "SX")) { 404 return PM_FPA_FILE_SX; 405 } 406 if (!strcasecmp (type, "OBJ")) { 407 return PM_FPA_FILE_OBJ; 408 } 409 if (!strcasecmp (type, "CMP")) { 410 return PM_FPA_FILE_CMP; 411 } 412 if (!strcasecmp (type, "CMF")) { 413 return PM_FPA_FILE_CMF; 414 } 415 if (!strcasecmp (type, "RAW")) { 416 return PM_FPA_FILE_RAW; 417 } 418 if (!strcasecmp (type, "IMAGE")) { 419 return PM_FPA_FILE_IMAGE; 420 } 421 if (!strcasecmp (type, "PSF")) { 422 return PM_FPA_FILE_PSF; 423 } 424 if (!strcasecmp (type, "JPEG")) { 425 return PM_FPA_FILE_JPEG; 426 } 427 if (!strcasecmp (type, "KAPA")) { 428 return PM_FPA_FILE_KAPA; 429 } 430 if (!strcasecmp (type, "MASK")) { 431 return PM_FPA_FILE_MASK; 432 } 433 if (!strcasecmp (type, "WEIGHT")) { 434 return PM_FPA_FILE_WEIGHT; 435 } 436 if (!strcasecmp (type, "FRINGE")) { 437 return PM_FPA_FILE_FRINGE; 438 } 439 if (!strcasecmp (type, "HEADER")) { 440 return PM_FPA_FILE_HEADER; 441 } 442 if (!strcasecmp (type, "ASTROM")) { 443 return PM_FPA_FILE_ASTROM; 444 } 445 446 return PM_FPA_FILE_NONE; 447 447 } 448 448 449 449 char *pmFPAfileStringFromType(pmFPAfileType type) 450 450 { 451 switch (type) {452 case PM_FPA_FILE_SX:453 return ("SX");454 case PM_FPA_FILE_OBJ:455 return ("OBJ");456 case PM_FPA_FILE_CMP:457 return ("CMP");458 case PM_FPA_FILE_CMF:459 return ("CMF");460 case PM_FPA_FILE_RAW:461 return ("RAW");462 case PM_FPA_FILE_IMAGE:463 return ("IMAGE");464 case PM_FPA_FILE_PSF:465 return ("PSF");466 case PM_FPA_FILE_JPEG:467 return ("JPEG");468 case PM_FPA_FILE_KAPA:469 return ("KAPA");470 case PM_FPA_FILE_MASK:471 return ("MASK");472 case PM_FPA_FILE_WEIGHT:473 return ("WEIGHT");474 case PM_FPA_FILE_FRINGE:475 return ("FRINGE");476 case PM_FPA_FILE_HEADER:477 return ("HEADER");478 case PM_FPA_FILE_ASTROM:479 return ("ASTROM");480 default:481 return ("NONE");482 }483 return ("NONE");484 } 451 switch (type) { 452 case PM_FPA_FILE_SX: 453 return ("SX"); 454 case PM_FPA_FILE_OBJ: 455 return ("OBJ"); 456 case PM_FPA_FILE_CMP: 457 return ("CMP"); 458 case PM_FPA_FILE_CMF: 459 return ("CMF"); 460 case PM_FPA_FILE_RAW: 461 return ("RAW"); 462 case PM_FPA_FILE_IMAGE: 463 return ("IMAGE"); 464 case PM_FPA_FILE_PSF: 465 return ("PSF"); 466 case PM_FPA_FILE_JPEG: 467 return ("JPEG"); 468 case PM_FPA_FILE_KAPA: 469 return ("KAPA"); 470 case PM_FPA_FILE_MASK: 471 return ("MASK"); 472 case PM_FPA_FILE_WEIGHT: 473 return ("WEIGHT"); 474 case PM_FPA_FILE_FRINGE: 475 return ("FRINGE"); 476 case PM_FPA_FILE_HEADER: 477 return ("HEADER"); 478 case PM_FPA_FILE_ASTROM: 479 return ("ASTROM"); 480 default: 481 return ("NONE"); 482 } 483 return ("NONE"); 484 }
Note:
See TracChangeset
for help on using the changeset viewer.
