IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Jun 27, 2006, 3:56:58 PM (20 years ago)
Author:
Paul Price
Message:

Adding special handling for COMMENT and HISTORY keywords.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/src/fits/psFitsHeader.c

    r7540 r7713  
    77 *  @author Robert DeSonia, MHPCC
    88 *
    9  *  @version $Revision: 1.22 $ $Name: not supported by cvs2svn $
    10  *  @date $Date: 2006-06-13 22:28:02 $
     9 *  @version $Revision: 1.23 $ $Name: not supported by cvs2svn $
     10 *  @date $Date: 2006-06-28 01:56:58 $
    1111 *
    1212 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
     
    4040// List of the start of FITS header keys not to write (handled by cfitsio); NULL-terminated
    4141static char *noWriteFitsKeyStarts[] = {"NAXIS", "TTYPE", "TFORM", NULL};
     42
     43// List of FITS header keys to be written with fits_write_comment
    4244
    4345psMetadata* psFitsReadHeader(psMetadata* out,
     
    308310        }
    309311
    310         switch (item->type) {
    311         case PS_DATA_BOOL: {
    312                 int value = item->data.B;
    313                 fits_update_key(fits->fd, TLOGICAL, item->name, &value, item->comment, &status);
    314                 break;
    315             }
    316         case PS_DATA_S8:
    317             fits_update_key(fits->fd, TBYTE, item->name, &item->data.S8, item->comment, &status);
    318             break;
    319         case PS_DATA_S16:
    320             fits_update_key(fits->fd, TSHORT, item->name, &item->data.S16, item->comment, &status);
    321             break;
    322         case PS_DATA_S32:
    323             fits_update_key(fits->fd, TINT, item->name, &item->data.S32, item->comment, &status);
    324             break;
    325         case PS_DATA_U8: {
    326                 unsigned short int temp = item->data.U8;
    327                 fits_update_key(fits->fd, TUSHORT, item->name, &temp, item->comment, &status);
    328             }
    329             break;
    330         case PS_DATA_U16:
    331             fits_update_key(fits->fd, TUSHORT, item->name, &item->data.U16, item->comment, &status);
    332             break;
    333         case PS_DATA_U32:
    334             fits_update_key(fits->fd, TUINT, item->name, &item->data.U32, item->comment, &status);
    335             break;
    336         case PS_DATA_F32: {
    337                 int infCheck = 0;         // Result of isinf()
    338                 if (isnan(item->data.F32)) {
    339                     fits_update_key(fits->fd, TSTRING, item->name, "NaN", item->comment, &status);
    340                 } else if ((infCheck = isinf(item->data.F32)) != 0) {
    341                     if (infCheck == 1) {
    342                         fits_update_key(fits->fd, TSTRING, item->name, "Inf", item->comment, &status);
     312        if (strcmp(item->name, "COMMENT") == 0) {
     313            fits_write_comment(fits->fd, item->comment, &status);
     314        } else if (strcmp(item->name,  "HISTORY") == 0) {
     315            fits_write_history(fits->fd, item->comment, &status);
     316        } else {
     317            // A regular FITS header
     318            switch (item->type) {
     319            case PS_DATA_BOOL: {
     320                    int value = item->data.B;
     321                    fits_update_key(fits->fd, TLOGICAL, item->name, &value, item->comment, &status);
     322                    break;
     323                }
     324            case PS_DATA_S8:
     325                fits_update_key(fits->fd, TBYTE, item->name, &item->data.S8, item->comment, &status);
     326                break;
     327            case PS_DATA_S16:
     328                fits_update_key(fits->fd, TSHORT, item->name, &item->data.S16, item->comment, &status);
     329                break;
     330            case PS_DATA_S32:
     331                fits_update_key(fits->fd, TINT, item->name, &item->data.S32, item->comment, &status);
     332                break;
     333            case PS_DATA_U8: {
     334                    unsigned short int temp = item->data.U8;
     335                    fits_update_key(fits->fd, TUSHORT, item->name, &temp, item->comment, &status);
     336                }
     337                break;
     338            case PS_DATA_U16:
     339                fits_update_key(fits->fd, TUSHORT, item->name, &item->data.U16, item->comment, &status);
     340                break;
     341            case PS_DATA_U32:
     342                fits_update_key(fits->fd, TUINT, item->name, &item->data.U32, item->comment, &status);
     343                break;
     344            case PS_DATA_F32: {
     345                    int infCheck = 0;         // Result of isinf()
     346                    if (isnan(item->data.F32)) {
     347                        fits_update_key(fits->fd, TSTRING, item->name, "NaN", item->comment, &status);
     348                    } else if ((infCheck = isinf(item->data.F32)) != 0) {
     349                        if (infCheck == 1) {
     350                            fits_update_key(fits->fd, TSTRING, item->name, "Inf", item->comment, &status);
     351                        } else {
     352                            fits_update_key(fits->fd, TSTRING, item->name, "-Inf", item->comment, &status);
     353                        }
    343354                    } else {
    344                         fits_update_key(fits->fd, TSTRING, item->name, "-Inf", item->comment, &status);
     355                        fits_update_key(fits->fd, TFLOAT, item->name, &item->data.F32, item->comment, &status);
    345356                    }
    346                 } else {
    347                     fits_update_key(fits->fd, TFLOAT, item->name, &item->data.F32, item->comment, &status);
    348                 }
    349                 break;
    350             }
    351         case PS_DATA_F64: {
    352                 int infCheck = 0;         // Result of isinf()
    353                 if (isnan(item->data.F64)) {
    354                     fits_update_key(fits->fd, TSTRING, item->name, "NaN", item->comment, &status);
    355                 } else if ((infCheck = isinf(item->data.F64)) != 0) {
    356                     if (infCheck == 1) {
    357                         fits_update_key(fits->fd, TSTRING, item->name, "Inf", item->comment, &status);
     357                    break;
     358                }
     359            case PS_DATA_F64: {
     360                    int infCheck = 0;         // Result of isinf()
     361                    if (isnan(item->data.F64)) {
     362                        fits_update_key(fits->fd, TSTRING, item->name, "NaN", item->comment, &status);
     363                    } else if ((infCheck = isinf(item->data.F64)) != 0) {
     364                        if (infCheck == 1) {
     365                            fits_update_key(fits->fd, TSTRING, item->name, "Inf", item->comment, &status);
     366                        } else {
     367                            fits_update_key(fits->fd, TSTRING, item->name, "-Inf", item->comment, &status);
     368                        }
    358369                    } else {
    359                         fits_update_key(fits->fd, TSTRING, item->name, "-Inf", item->comment, &status);
     370                        fits_update_key(fits->fd, TDOUBLE, item->name, &item->data.F64, item->comment, &status);
    360371                    }
    361                 } else {
    362                     fits_update_key(fits->fd, TDOUBLE, item->name, &item->data.F64, item->comment, &status);
    363                 }
    364                 break;
    365             }
    366         case PS_DATA_STRING:
    367             fits_update_key(fits->fd, TSTRING, item->name, item->data.V, item->comment, &status);
    368             break;
    369         default:  // all other META types are ignored
    370             psLogMsg(__func__, PS_LOG_WARN, "Attempt to write metadata type %x to FITS header ignored.\n",
    371                      item->type);
    372             break;
     372                    break;
     373                }
     374            case PS_DATA_STRING:
     375                fits_update_key(fits->fd, TSTRING, item->name, item->data.V, item->comment, &status);
     376                break;
     377            default:  // all other META types are ignored
     378                psLogMsg(__func__, PS_LOG_WARN, "Attempt to write metadata type %x to FITS header ignored.\n",
     379                         item->type);
     380                break;
     381            }
    373382        }
    374383
Note: See TracChangeset for help on using the changeset viewer.