static void image_keywords_from_fits(image_str *image, fitsfile *fits) { char card[FLEN_CARD]; int status = 0; fits_read_record(fits, 0, card, &status); while(TRUE){ char key[FLEN_KEYWORD]; char value[FLEN_VALUE]; char comment[FLEN_COMMENT]; int length = 0; image_keyword_str *kw = NULL; status = 0; fits_find_nextkey(fits, include_list, include_length, exclude_list, exclude_length, card, &status); if(status == KEY_NO_EXIST) break; fits_get_keyname(card, key, &length, &status); fits_parse_value(card, value, comment, &status); if(key[0] != '_'){ kw = image_keyword_add(image, key, value, comment); fits_get_keytype(value, &kw->type, &status); } } }
int addkey(char *outfile, char *keyword, char *keyvalue) { fitsfile *outfptr; /* FITS file pointer, defined in fitsio.h */ char card[FLEN_CARD], newcard[FLEN_CARD]; char oldvalue[FLEN_VALUE], comment[FLEN_COMMENT]; int status = 0; /* CFITSIO status value MUST be initialized to zero! */ int keytype; if (!fits_open_file(&outfptr, outfile, READWRITE, &status)) { if (fits_read_card(outfptr, keyword, card, &status)) { printf("Keyword does not exist\n"); card[0] = '\0'; comment[0] = '\0'; status = 0; /* reset status after error */ } else printf("%s\n",card); /* check if this is a protected keyword that must not be changed */ if (*card && fits_get_keyclass(card) == TYP_STRUC_KEY) { printf("Protected keyword cannot be modified.\n"); } else { /* get the comment string */ if (*card)fits_parse_value(card, oldvalue, comment, &status); /* construct template for new keyword */ strcpy(newcard, keyword); /* copy keyword name */ strcat(newcard, " = "); /* '=' value delimiter */ strcat(newcard, keyvalue); /* new value */ if (*comment) { strcat(newcard, " / "); /* comment delimiter */ strcat(newcard, comment); /* append the comment */ } /* reformat the keyword string to conform to FITS rules */ fits_parse_template(newcard, card, &keytype, &status); /* overwrite the keyword with the new value */ fits_update_card(outfptr, keyword, card, &status); printf("Keyword has been changed to:\n"); printf("%s\n",card); } fits_close_file(outfptr, &status); } /* open_file */ /* if error occured, print out error message */ if (status) fits_report_error(stderr, status); return(status); }
int main(int argc, char *argv[]) { fitsfile *fptr = 0; /* FITS file pointer, defined in fitsio.h */ char card[FLEN_CARD], newcard[FLEN_CARD]; char oldvalue[FLEN_VALUE], comment[FLEN_COMMENT]; int status = 0; /* CFITSIO status value MUST be initialized to zero! */ int keytype = 0; if (argc != 4) { fprintf(stderr, "Usage: %s filename[ext] keyword newvalue\n", argv[0]); fprintf(stderr, "\n"); fprintf(stderr, "Modify the value of a header keyword.\n"); fprintf(stderr, "\n"); fprintf(stderr, "Examples: \n"); fprintf(stderr, " %s file.fits dec 30.0 - set DEC = 30.0 \n", argv[0]); return (0); } if (!fits_open_file(&fptr, argv[1], READWRITE, &status)) { if (fits_read_card(fptr,argv[2], card, &status)) { fprintf(stderr, "Keyword does not exist\n"); return (1); } if (fits_get_keyclass(card) == TYP_STRUC_KEY) { fprintf(stderr, "Protected keyword cannot be modified\n"); return (1); } fits_parse_value(card, oldvalue, comment, &status); /* construct template for new keyword */ strcpy(newcard, argv[2]); /* copy keyword name */ strcat(newcard, " = "); /* '=' value delimiter */ strcat(newcard, argv[3]); /* new value */ if (*comment) { strcat(newcard, " / "); /* comment delimiter */ strcat(newcard, comment); /* append the comment */ } /* reformat the keyword string to conform to FITS rules */ fits_parse_template(newcard, card, &keytype, &status); /* overwrite the keyword with the new value */ fits_update_card(fptr, argv[2], card, &status); fits_close_file(fptr, &status); } /* open_file */ /* if error occured, print out error message */ if (status) { fits_report_error(stderr, status); } return (status); }
QMap<QString, QString> fitsKeys( fitsfile *fp, int HDU ) { QMap<QString, QString> keyMap; int ret = 0; int nHDU; int hduType; // try to seek to the desired HDU if (fits_get_num_hdus(fp, &nHDU, &ret)) { return keyMap; } if (HDU > nHDU) { return keyMap; } else { if (fits_movabs_hdu(fp, HDU, &hduType, &ret)) { return keyMap; } } // reset keyword pointer to beginning of HDU int rec = 0; char card[FLEN_CARD]; if (fits_read_record(fp, rec, card, &ret)) { return keyMap; } // go through all keys and add to the QMap QString theKey; QString theVal; char keyval[FLEN_VALUE]; char keycom[FLEN_COMMENT]; char keyname[FLEN_KEYWORD]; int keylen; while (!fits_find_nextkey(fp, NULL, 1, NULL, 0, card, &ret)) { fits_get_keyname(card, keyname, &keylen, &ret); fits_parse_value(card, keyval, keycom, &ret); theKey = keyname; theVal = keyval; keyMap.insert(theKey, theVal); } return keyMap; }
int main(int argc, char *argv[]) { fitsfile *fptr; /* FITS file pointer, defined in fitsio.h */ char card[FLEN_CARD], newcard[FLEN_CARD]; char oldvalue[FLEN_VALUE], comment[FLEN_COMMENT]; int status = 0; /* CFITSIO status value MUST be initialized to zero! */ int iomode, keytype; if (argc == 3) iomode = READONLY; else if ((argc == 4) || (argc == 5)) iomode = READWRITE; else { printf("Usage: modhead filename[ext] keyword newvalue [newcomment]\n"); printf("\n"); printf("Write or modify the value of a header keyword.\n"); printf("If 'newvalue' is not specified then just print \n"); printf("the current value. \n"); printf("\n"); printf("Examples: \n"); printf(" modhead file.fits dec - list the DEC keyword \n"); printf(" modhead file.fits dec 30.0 - set DEC = 30.0 \n"); printf(" modhead file.fits dec 30.0 \"The decline of civilization\" - set DEC = 30.0 and add a comment \n"); return(0); } if (!fits_open_file(&fptr, argv[1], iomode, &status)) { if (fits_read_card(fptr,argv[2], card, &status)) { printf("Keyword does not exist\n"); card[0] = '\0'; comment[0] = '\0'; status = 0; /* reset status after error */ } else printf("%s\n",card); if ((argc == 4) || (argc == 5)) /* write or overwrite the keyword */ { /* check if this is a protected keyword that must not be changed */ /* if (*card && fits_get_keyclass(card) == TYP_STRUC_KEY) { printf("Protected keyword cannot be modified.\n"); } else */ { /* get the comment string */ if (*card) fits_parse_value(card, oldvalue, comment, &status); /* construct template for new keyword */ strcpy(newcard, argv[2]); /* copy keyword name */ strcat(newcard, " = "); /* '=' value delimiter */ strcat(newcard, argv[3]); /* new value */ if (argc == 5) { strcat(newcard, " / "); /* comment delimiter */ strcat(newcard, argv[4]); /* append the comment */ } else if (*comment) { /* old comment */ strcat(newcard, " / "); /* comment delimiter */ strcat(newcard, comment); /* append the comment */ } /* reformat the keyword string to conform to FITS rules */ fits_parse_template(newcard, card, &keytype, &status); /* overwrite the keyword with the new value */ fits_update_card(fptr, argv[2], card, &status); printf("Keyword has been changed to:\n"); printf("%s\n",card); } } fits_close_file(fptr, &status); } /* if error occured, print out error message */ if (status) fits_report_error(stderr, status); return(status); }