Changeset 7235
- Timestamp:
- May 26, 2006, 4:09:18 PM (20 years ago)
- File:
-
- 1 edited
-
trunk/psLib/src/fits/psFitsHeader.c (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/fits/psFitsHeader.c
r7234 r7235 7 7 * @author Robert DeSonia, MHPCC 8 8 * 9 * @version $Revision: 1.1 3$ $Name: not supported by cvs2svn $10 * @date $Date: 2006-05-27 02:0 1:23$9 * @version $Revision: 1.14 $ $Name: not supported by cvs2svn $ 10 * @date $Date: 2006-05-27 02:09:18 $ 11 11 * 12 12 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 218 218 } 219 219 220 221 bool psFitsWriteHeader(psFits *fits, // The FITS file handle222 psMetadata *output // Metadata that is to be output into the FITS file223 )220 static bool fitsWriteHeader(psFits *fits, // The FITS file handle 221 psMetadata *output, // Metadata that is to be output into the FITS file 222 bool keyStarts // Write out the key starts? 223 ) 224 224 { 225 if (!fits) {226 psError(PS_ERR_BAD_PARAMETER_NULL, true, PS_ERRORTEXT_psFits_NULL);227 return false;228 }229 230 if (!output) {231 psError(PS_ERR_BAD_PARAMETER_NULL, true, PS_ERRORTEXT_psFits_METADATA_NULL);232 return false;233 }234 235 225 // Traverse the metadata list and add each key. 236 226 psListIterator* iter = psListIteratorAlloc(output->list, PS_LIST_HEAD, true); // Iterator … … 249 239 } 250 240 } 251 // Also block out TTYPEn, NAXISn, etc --- keywords that start with a certain sequence 252 for (int i = 0; noWriteFitsKeyStarts[i] && writeKey; i++) { 253 if (strncmp(item->name, noWriteFitsKeyStarts[i], strlen(noWriteFitsKeyStarts[i])) == 0) { 254 writeKey = false; 255 } 256 } 257 if (!writeKey) { 258 // Don't write it; skip to the next key 259 continue; 241 if (keyStarts) { 242 // Also block out TTYPEn, NAXISn, etc --- keywords that start with a certain sequence. 243 // We want to do this when writing an image or table, since it guarantees that the NAXISn etc 244 // that go in are correct. However, when we're writing a "blank" HDU (header only), we want to 245 // preserve NAXISn etc for reference, so we don't do this. 246 for (int i = 0; noWriteFitsKeyStarts[i] && writeKey; i++) { 247 if (strncmp(item->name, noWriteFitsKeyStarts[i], strlen(noWriteFitsKeyStarts[i])) == 0) { 248 writeKey = false; 249 } 250 } 251 if (!writeKey) { 252 // Don't write it; skip to the next key 253 continue; 254 } 260 255 } 261 256 … … 312 307 } 313 308 314 bool psFitsWrite Blank(psFits*fits,315 psMetadata*output316 )309 bool psFitsWriteHeader(psFits *fits, 310 psMetadata *output 311 ) 317 312 { 318 313 if (!fits) { … … 326 321 } 327 322 328 // Create a dummy image HDU for the primary HDU 329 int status = 0; // Status of cfitsio 330 fits_create_img(fits->fd, 16, 0, NULL, &status); 331 if (status) { 332 char fitsErr[MAX_STRING_LENGTH]; 333 (void)fits_get_errstatus(status, fitsErr); 334 psError(PS_ERR_IO, true, "Unable to create primary header.\n%s\n", fitsErr); 335 return false; 336 } 337 338 return psFitsWriteHeader(fits, output); 339 } 340 341 bool psFitsHeaderValidate(psMetadata *header) 342 { 343 if (header == NULL) { 344 psError(PS_ERR_BAD_PARAMETER_NULL, true, PS_ERRORTEXT_psFits_METADATA_NULL); 345 return false; 346 } 347 348 // Traverse the metadata list and inspect at each key 349 psListIterator* iter = psListIteratorAlloc(header->list, PS_LIST_HEAD, true); // Iterator 350 psMetadataItem* item; // Item from iteration 351 bool valid = true; // Are all items valid? 352 while ((item = psListGetAndIncrement(iter))) { 353 if (item->type > PS_DATA_STRING) { // i.e., a non-primitive type 354 valid = false; 355 } 356 357 if (strlen(item->name) > 8) { 358 item->name[8] = '\0'; // truncate to 8 characters 359 } 360 361 fits_uppercase(item->name); // make uppercase 362 363 // now, let's see if CFITSIO thinks this is a good keyword... 364 int status = 0; // Status from cfitsio calls 365 if (fits_test_keyword(item->name,&status) != 0) { 366 valid = false; 367 } 368 } 369 psFree(iter); 370 371 return valid; 372 } 323 return fitsWriteHeader(fits, output, true); 324 325 326 bool psFitsWriteBlank(psFits* fits, 327 psMetadata* output 328 ) { 329 if (!fits) { 330 psError(PS_ERR_BAD_PARAMETER_NULL, true, PS_ERRORTEXT_psFits_NULL); 331 return false; 332 } 333 334 if (!output) { 335 psError(PS_ERR_BAD_PARAMETER_NULL, true, PS_ERRORTEXT_psFits_METADATA_NULL); 336 return false; 337 } 338 339 // Create a dummy image HDU for the primary HDU 340 int status = 0; // Status of cfitsio 341 fits_create_img(fits->fd, 16, 0, NULL, &status); 342 if (status) { 343 char fitsErr[MAX_STRING_LENGTH]; 344 (void)fits_get_errstatus(status, fitsErr); 345 psError(PS_ERR_IO, true, "Unable to create primary header.\n%s\n", fitsErr); 346 return false; 347 } 348 349 return fitsWriteHeader(fits, output, false); 350 } 351 352 bool psFitsHeaderValidate(psMetadata *header) { 353 if (header == NULL) { 354 psError(PS_ERR_BAD_PARAMETER_NULL, true, PS_ERRORTEXT_psFits_METADATA_NULL); 355 return false; 356 } 357 358 // Traverse the metadata list and inspect at each key 359 psListIterator* iter = psListIteratorAlloc(header->list, PS_LIST_HEAD, true); // Iterator 360 psMetadataItem* item; // Item from iteration 361 bool valid = true; // Are all items valid? 362 while ((item = psListGetAndIncrement(iter))) { 363 if (item->type > PS_DATA_STRING) { // i.e., a non-primitive type 364 valid = false; 365 } 366 367 if (strlen(item->name) > 8) { 368 item->name[8] = '\0'; // truncate to 8 characters 369 } 370 371 fits_uppercase(item->name); // make uppercase 372 373 // now, let's see if CFITSIO thinks this is a good keyword... 374 int status = 0; // Status from cfitsio calls 375 if (fits_test_keyword(item->name,&status) != 0) { 376 valid = false; 377 } 378 } 379 psFree(iter); 380 381 return valid; 382 }
Note:
See TracChangeset
for help on using the changeset viewer.
