IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Apr 4, 2006, 9:52:55 AM (20 years ago)
Author:
desonia
Message:

modified API to match current SDRS.

File:
1 edited

Legend:

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

    r6354 r6767  
    77 *  @author Robert DeSonia, MHPCC
    88 *
    9  *  @version $Revision: 1.2 $ $Name: not supported by cvs2svn $
    10  *  @date $Date: 2006-02-08 01:03:34 $
     9 *  @version $Revision: 1.3 $ $Name: not supported by cvs2svn $
     10 *  @date $Date: 2006-04-04 19:52:42 $
    1111 *
    1212 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
     
    9090            switch (keyType) {
    9191            case 'X': // bit
     92            case 'B': // byte
     93                success = psMetadataAdd(out,
     94                                        PS_LIST_TAIL,
     95                                        keyName,
     96                                        PS_DATA_S8 | PS_META_DUPLICATE_OK,
     97                                        keyComment,
     98                                        atoi(keyValue));
     99                break;
    92100            case 'I': // short int.
     101                success = psMetadataAdd(out,
     102                                        PS_LIST_TAIL,
     103                                        keyName,
     104                                        PS_DATA_S16 | PS_META_DUPLICATE_OK,
     105                                        keyComment,
     106                                        (psS16)atoi(keyValue));
     107                break;
    93108            case 'J': // int.
    94             case 'B': // byte
    95109                success = psMetadataAdd(out,
    96110                                        PS_LIST_TAIL,
     
    100114                                        atoi(keyValue));
    101115                break;
    102             case 'U': // unsigned int. may not fit in a psS32
    103             case 'K': // long int. can't all fit in a psS32
     116            case 'U': // unsigned int.
     117                success = psMetadataAdd(out,
     118                                        PS_LIST_TAIL,
     119                                        keyName,
     120                                        PS_DATA_U32 | PS_META_DUPLICATE_OK,
     121                                        keyComment,
     122                                        atol(keyValue));
     123                break;
     124
     125            case 'K': // long int. can't all fit in a psS32, put in psF64
    104126            case 'F':
    105127                success = psMetadataAdd(out,
     
    167189}
    168190
    169 psMetadata* psFitsReadHeaderSet(const psFits* fits)
     191psMetadata* psFitsReadHeaderSet(psMetadata* out, const psFits* fits)
    170192{
    171193    if (fits == NULL) {
    172194        psError(PS_ERR_BAD_PARAMETER_NULL, true,
    173195                PS_ERRORTEXT_psFits_NULL);
     196        psFree(out);
    174197        return NULL;
    175198    }
    176199
    177     psMetadata* out = psMetadataAlloc();
     200    if (out == NULL) {
     201        out = psMetadataAlloc();
     202    }
    178203
    179204    int size = psFitsGetSize(fits);
     
    244269                break;
    245270            }
     271        case PS_DATA_S8:
     272            fits_update_key(fits->fd,
     273                            TBYTE,
     274                            item->name,
     275                            &item->data.S8,
     276                            item->comment,
     277                            &status);
     278            break;
     279        case PS_DATA_S16:
     280            fits_update_key(fits->fd,
     281                            TSHORT,
     282                            item->name,
     283                            &item->data.S16,
     284                            item->comment,
     285                            &status);
     286            break;
    246287        case PS_DATA_S32:
    247288            fits_update_key(fits->fd,
     
    249290                            item->name,
    250291                            &item->data.S32,
     292                            item->comment,
     293                            &status);
     294            break;
     295        case PS_DATA_U8: {
     296                unsigned short int temp = item->data.U8;
     297                fits_update_key(fits->fd,
     298                                TUSHORT,
     299                                item->name,
     300                                &temp,
     301                                item->comment,
     302                                &status);
     303            }
     304            break;
     305        case PS_DATA_U16:
     306            fits_update_key(fits->fd,
     307                            TUSHORT,
     308                            item->name,
     309                            &item->data.U16,
     310                            item->comment,
     311                            &status);
     312            break;
     313        case PS_DATA_U32:
     314            fits_update_key(fits->fd,
     315                            TUINT,
     316                            item->name,
     317                            &item->data.U32,
    251318                            item->comment,
    252319                            &status);
     
    290357    }
    291358
     359    psFree(iter);
     360
    292361    return true;
    293362}
    294363
     364bool psFitsHeaderValidate(psMetadata *header)
     365{
     366    bool valid = true;
     367    int status;
     368
     369    if (header == NULL) {
     370        psError(PS_ERR_BAD_PARAMETER_NULL, true,
     371                PS_ERRORTEXT_psFits_METADATA_NULL);
     372        return false;
     373    }
     374
     375    //transverse the metadata list and inspect at each key
     376
     377    psListIterator* iter = psListIteratorAlloc(header->list,PS_LIST_HEAD,true);
     378    psMetadataItem* item;
     379    while ( (item=psListGetAndIncrement(iter)) != NULL ) {
     380        psDataType type = item->type;
     381
     382        if (type > PS_DATA_STRING) { // i.e., a non-primitive type
     383            valid = false;
     384        }
     385
     386        if (strlen(item->name) > 8) {
     387            item->name[8] = '\0'; // truncate to 8 characters
     388        }
     389
     390        fits_uppercase(item->name); // make uppercase
     391
     392        // now, let's see if CFITSIO thinks this is a good keyword...
     393        status = 0;
     394        if (fits_test_keyword(item->name,&status) != 0) {
     395            valid = false;
     396        }
     397    }
     398
     399    psFree(iter);
     400
     401    return valid;
     402}
Note: See TracChangeset for help on using the changeset viewer.