IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Jan 13, 2005, 9:50:45 AM (22 years ago)
Author:
desonia
Message:

* empty log message *

File:
1 edited

Legend:

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

    r2967 r2971  
    77 *  @author Robert DeSonia, MHPCC
    88 *
    9  *  @version $Revision: 1.6 $ $Name: not supported by cvs2svn $
    10  *  @date $Date: 2005-01-13 02:08:30 $
     9 *  @version $Revision: 1.7 $ $Name: not supported by cvs2svn $
     10 *  @date $Date: 2005-01-13 19:50:44 $
    1111 *
    1212 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    2525
    2626#define MAX_STRING_LENGTH 256  // maximum length string for FITS routines
     27
     28static char* standardFitsKeys[] = {
     29                                      "SIMPLE",
     30                                      "BITPIX",
     31                                      "NAXIS",
     32                                      "NAXIS1",
     33                                      "NAXIS2",
     34                                      "NAXIS3",
     35                                      "EXTEND",
     36                                      "COMMENT",
     37                                      "EXTNAME",
     38                                      "HDUNAME",
     39                                      NULL
     40                                  };
    2741
    2842static psElemType convertFitsToPsType(int datatype)
     
    457471    psBool tempBool;
    458472    psBool success;
     473    psBool stdKey;
    459474    for (int i = 1; i <= numKeys; i++) {
    460475
    461476        fits_read_keyn(fits->p_fd, i, keyName, keyValue, keyComment, &status);
    462         fits_get_keytype(keyValue, &keyType, &status);
     477
     478        stdKey = false;
     479
     480        int stdKeyIdx = 0;
     481        while (standardFitsKeys[stdKeyIdx] != NULL && ! stdKey) {
     482            if (strcmp(keyName,standardFitsKeys[stdKeyIdx++]) == 0) {
     483                stdKey = true;
     484            }
     485        }
     486
     487        if (keyValue[0] != 0) { // blank values are not handled by fits_get_keytype
     488            fits_get_keytype(keyValue, &keyType, &status);
     489        } else {
     490            keyType = 'C';
     491        }
    463492        if (status != 0) {
    464493            break;
    465494        }
    466495
    467         switch (keyType) {
    468         case 'I':
    469             success = psMetadataAdd(out,
    470                                     PS_LIST_TAIL,
    471                                     keyName,
    472                                     PS_TYPE_S32,
    473                                     PS_META_PRIMITIVE,
    474                                     keyComment,
    475                                     atoi(keyValue));
    476             break;
    477         case 'F':
    478             success = psMetadataAdd(out,
    479                                     PS_LIST_TAIL,
    480                                     keyName,
    481                                     PS_TYPE_F64,
    482                                     PS_META_PRIMITIVE,
    483                                     keyComment,
    484                                     atof(keyValue));
    485             break;
    486         case 'C':
    487             success = psMetadataAdd(out,
    488                                     PS_LIST_TAIL,
    489                                     keyName,
    490                                     PS_TYPE_U8,
    491                                     PS_META_STR,
    492                                     keyComment,
    493                                     keyValue);
    494             break;
    495         case 'L':
    496             tempBool = (keyValue[0] == 'T') ? 1 : 0;
    497             success = psMetadataAdd(out,
    498                                     PS_LIST_TAIL,
    499                                     keyName,
    500                                     PS_TYPE_BOOL,
    501                                     PS_META_PRIMITIVE,
    502                                     keyComment,
    503                                     tempBool);
    504             break;
    505         case 'U':
    506         case 'X':
    507         default:
    508             psError(PS_ERR_IO, true,
    509                     PS_ERRORTEXT_psFits_METATYPE_INVALID,
    510                     keyType);
    511             return out;
    512         }
    513 
    514         if (!success) {
    515             psError(PS_ERR_UNKNOWN, false,
    516                     PS_ERRORTEXT_psFits_METADATA_ADD_FAILED,
    517                     keyName);
    518             return out;
    519         }
     496        if (! stdKey) {
     497            switch (keyType) {
     498            case 'X': // bit
     499            case 'I': // short int.
     500            case 'J': // int.
     501            case 'B': // byte
     502                success = psMetadataAdd(out,
     503                                        PS_LIST_TAIL,
     504                                        keyName,
     505                                        PS_TYPE_S32,
     506                                        PS_META_PRIMITIVE,
     507                                        keyComment,
     508                                        atoi(keyValue));
     509                break;
     510            case 'U': // unsigned int. may not fit in a psS32
     511            case 'K': // long int. can't all fit in a psS32
     512            case 'F':
     513                success = psMetadataAdd(out,
     514                                        PS_LIST_TAIL,
     515                                        keyName,
     516                                        PS_TYPE_F64,
     517                                        PS_META_PRIMITIVE,
     518                                        keyComment,
     519                                        atof(keyValue));
     520                break;
     521            case 'C':
     522                success = psMetadataAdd(out,
     523                                        PS_LIST_TAIL,
     524                                        keyName,
     525                                        PS_TYPE_U8,
     526                                        PS_META_STR,
     527                                        keyComment,
     528                                        keyValue);
     529                break;
     530            case 'L':
     531                tempBool = (keyValue[0] == 'T') ? 1 : 0;
     532                success = psMetadataAdd(out,
     533                                        PS_LIST_TAIL,
     534                                        keyName,
     535                                        PS_TYPE_BOOL,
     536                                        PS_META_PRIMITIVE,
     537                                        keyComment,
     538                                        tempBool);
     539                break;
     540            default:
     541                psError(PS_ERR_IO, true,
     542                        PS_ERRORTEXT_psFits_METATYPE_INVALID,
     543                        keyType);
     544                return out;
     545            }
     546
     547            if (!success) {
     548                psError(PS_ERR_UNKNOWN, false,
     549                        PS_ERRORTEXT_psFits_METADATA_ADD_FAILED,
     550                        keyName);
     551                return out;
     552            }
     553        }
     554
    520555    }
    521556
Note: See TracChangeset for help on using the changeset viewer.