Ejemplo n.º 1
0
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);
        }
    }
}
Ejemplo n.º 2
0
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);
}
Ejemplo n.º 3
0
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);
}
Ejemplo n.º 4
0
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;
}
Ejemplo n.º 5
0
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);
}