Changeset 25087
- Timestamp:
- Aug 17, 2009, 10:27:28 AM (17 years ago)
- File:
-
- 1 edited
-
trunk/psLib/src/fits/psFitsHeader.c (modified) (13 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/fits/psFitsHeader.c
r25002 r25087 50 50 51 51 // List of the start of FITS header keys not to write (handled by cfitsio); NULL-terminated 52 static const char *noWriteFitsKeyStarts[] = { "NAXIS", "TTYPE", "TFORM", NULL };52 static const char *noWriteFitsKeyStarts[] = { "NAXIS", "TTYPE", "TFORM", "TZERO", "TSCAL", NULL }; 53 53 54 54 // List of compressed FITS header keys not to write (handled by cfitsio); NULL-terminated … … 305 305 keyType = 'C'; 306 306 } 307 psTrace("psLib.fits", 3, "Reading keyword %s, type %c\n", keyName, keyType); 307 308 if (status != 0) { 308 309 break; … … 327 328 -INFINITY); 328 329 } else { 329 success = psMetadataAddS32(header, PS_LIST_TAIL, keyNameTrans, dupFlag, keyComment, 330 atoi(keyValue)); 330 long long value = atoll(keyValue); // Value 331 if (value > PS_MIN_S32 && value < PS_MAX_S32) { 332 success = psMetadataAddS32(header, PS_LIST_TAIL, keyNameTrans, dupFlag, keyComment, 333 value); 334 } else { 335 success = psMetadataAddS64(header, PS_LIST_TAIL, keyNameTrans, dupFlag, keyComment, 336 value); 337 } 331 338 } 332 339 break; … … 509 516 psMetadataItem *simpleItem = psMetadataLookup(output, "SIMPLE"); // SIMPLE in the header 510 517 if (simpleItem) { 511 if (simpleItem->type != PS_DATA_BOOL) { 512 psError(PS_ERR_BAD_PARAMETER_TYPE, true, "SIMPLE in a FITS header must be of boolean type: " 513 "not %x --- assuming FALSE.\n", simpleItem->type); 518 if (simpleItem->type != PS_DATA_BOOL || !simpleItem->data.B) { 514 519 int value = false; // Temporary holder for boolean 520 psWarning("Writing SIMPLE=F to FITS header by request"); 515 521 fits_update_key(fits->fd, TLOGICAL, "SIMPLE", &value, 516 522 "File does not conform to FITS standard", &status); 517 523 simple = false; 518 } else if (!simpleItem->data.B) {519 simple = false;520 int value = false; // Temporary holder for boolean521 fits_update_key(fits->fd, TLOGICAL, "SIMPLE", &value,522 "File does not conform to FITS standard", &status);523 524 } 524 525 // Uncompressed SIMPLE = T is taken care of by cfitsio. … … 546 547 char comment[FLEN_CARD]; // Comment for ZIMAGE; unused 547 548 int value; // Value for ZIMAGE; unused 549 psTrace("psLib.fits", 3, "Writing header ZSIMPLE to preserve PHU"); 548 550 fits_read_key(fits->fd, TLOGICAL, "ZIMAGE", &value, comment, &status); 549 551 fits_insert_key_log(fits->fd, "ZSIMPLE", simple, "Uncompressed file's conforms to FITS", &status); … … 575 577 if (keywordInList(name, noWriteCompressedKeys) || 576 578 (keyStarts && keywordStartsWith(name, noWriteCompressedKeyStarts))) { 579 psTrace("psLib.fits", 3, "Not writing FITS keyword %s", name); 577 580 continue; 578 581 } 579 582 } else if (keywordInList(name, noWriteCompressedKeys) || 580 583 (keyStarts && keywordStartsWith(name, noWriteCompressedKeyStarts))) { 584 psTrace("psLib.fits", 3, "Not writing FITS keyword %s", name); 581 585 continue; 582 586 } … … 584 588 if (keywordInList(name, noWriteFitsKeys) || 585 589 (keyStarts && keywordStartsWith(name, noWriteFitsKeyStarts))) { 590 psTrace("psLib.fits", 3, "Not writing FITS keyword %s", name); 586 591 continue; 587 592 } … … 592 597 psWarning("COMMENT header is not of type STRING (%x) --- ignored.", item->type); 593 598 } else { 599 psTrace("psLib.fits", 5, "Writing header COMMENT: %s", item->data.str); 594 600 fits_write_comment(fits->fd, item->data.str, &status); 595 601 } … … 598 604 psWarning("COMMENT header is not of type STRING (%x) --- ignored.", item->type); 599 605 } else { 606 psTrace("psLib.fits", 5, "Writing header HISTORY: %s", item->data.str); 600 607 fits_write_history(fits->fd, item->data.str, &status); 601 608 } … … 605 612 case PS_DATA_BOOL: { 606 613 int value = item->data.B; 614 psTrace("psLib.fits", 5, "Writing BOOL header %s: %d", name, value); 607 615 fits_update_key(fits->fd, TLOGICAL, name, &value, item->comment, &status); 608 616 break; 609 617 } 610 618 case PS_DATA_S8: 619 psTrace("psLib.fits", 5, "Writing S8 header %s: %d", name, (int)item->data.S8); 611 620 fits_update_key(fits->fd, TBYTE, name, &item->data.S8, item->comment, &status); 612 621 break; 613 622 case PS_DATA_S16: 623 psTrace("psLib.fits", 5, "Writing S16 header %s: %d", name, (int)item->data.S16); 614 624 fits_update_key(fits->fd, TSHORT, name, &item->data.S16, item->comment, &status); 615 625 break; 616 626 case PS_DATA_S32: 627 psTrace("psLib.fits", 5, "Writing S32 header %s: %d", name, (int)item->data.S32); 617 628 fits_update_key(fits->fd, TINT, name, &item->data.S32, item->comment, &status); 618 629 break; 619 630 case PS_DATA_S64: 631 psTrace("psLib.fits", 5, "Writing S64 header %s: %" PRId64, name, item->data.S64); 620 632 fits_update_key(fits->fd, TLONGLONG, name, &item->data.S64, item->comment, &status); 621 633 break; 622 634 case PS_DATA_U8: { 623 635 unsigned short int temp = item->data.U8; 636 psTrace("psLib.fits", 5, "Writing U8 header %s: %d", name, (int)item->data.U8); 624 637 fits_update_key(fits->fd, TUSHORT, name, &temp, item->comment, &status); 625 638 break; 626 639 } 627 640 case PS_DATA_U16: 641 psTrace("psLib.fits", 5, "Writing U16 header %s: %d", name, (int)item->data.U16); 628 642 fits_update_key(fits->fd, TUSHORT, name, &item->data.U16, item->comment, &status); 629 643 break; 630 644 case PS_DATA_U32: 645 psTrace("psLib.fits", 5, "Writing U32 header %s: %d", name, (unsigned int)item->data.U32); 631 646 fits_update_key(fits->fd, TUINT, name, &item->data.U32, item->comment, &status); 632 647 break; … … 639 654 } 640 655 psS64 temp = item->data.U64; // Signed version 656 psTrace("psLib.fits", 5, "Writing U64 header %s: %" PRIu64, name, item->data.U64); 641 657 fits_update_key(fits->fd, TLONGLONG, name, &temp, item->comment, &status); 642 658 break; 643 659 case PS_DATA_F32: { 644 660 int infCheck = 0; // Result of isinf() 661 psTrace("psLib.fits", 5, "Writing F32 header %s: %f", name, item->data.F32); 645 662 if (isnan(item->data.F32)) { 646 663 fits_update_key(fits->fd, TSTRING, name, "NaN", item->comment, &status); … … 659 676 case PS_DATA_F64: { 660 677 int infCheck = 0; // Result of isinf() 678 psTrace("psLib.fits", 5, "Writing F32 header %s: %lf", name, item->data.F64); 661 679 if (isnan(item->data.F64)) { 662 680 fits_update_key(fits->fd, TSTRING, name, "NaN", item->comment, &status); … … 674 692 } 675 693 case PS_DATA_STRING: 694 psTrace("psLib.fits", 5, "Writing STR header %s: %s", name, item->data.str); 676 695 fits_update_key(fits->fd, TSTRING, name, item->data.V, item->comment, &status); 677 696 break;
Note:
See TracChangeset
for help on using the changeset viewer.
