IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Mar 11, 2005, 10:38:56 AM (21 years ago)
Author:
desonia
Message:

made adjustments to psMetadata and added psFitsUpdateTable.

File:
1 edited

Legend:

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

    r3341 r3407  
    77 *  @author Robert DeSonia, MHPCC
    88 *
    9  *  @version $Revision: 1.20 $ $Name: not supported by cvs2svn $
    10  *  @date $Date: 2005-02-28 23:34:10 $
     9 *  @version $Revision: 1.21 $ $Name: not supported by cvs2svn $
     10 *  @date $Date: 2005-03-11 20:38:56 $
    1111 *
    1212 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
     
    9898        break;
    9999
     100    case PS_TYPE_BOOL:
    100101    case PS_TYPE_S8:
    101102        bitpix = BYTE_IMG;
     
    14501451        psError(PS_ERR_BAD_PARAMETER_NULL, true,
    14511452                PS_ERRORTEXT_psFits_NULL);
    1452         return NULL;
     1453        return false;
    14531454    }
    14541455
     
    16191620    return true;
    16201621}
     1622
     1623bool psFitsUpdateTable(psFits* fits,
     1624                       psMetadata* data,
     1625                       int row)
     1626{
     1627    int status = 0;
     1628
     1629    if (fits == NULL) {
     1630        psError(PS_ERR_BAD_PARAMETER_NULL, true,
     1631                PS_ERRORTEXT_psFits_NULL);
     1632        return false;
     1633    }
     1634
     1635    if (data == NULL) {
     1636        psError(PS_ERR_BAD_PARAMETER_NULL, true,
     1637                PS_ERRORTEXT_psFits_IMAGE_NULL);
     1638        return false;
     1639    }
     1640
     1641
     1642    // check to see if we even are positioned on a table HDU
     1643    int hdutype;
     1644    if ( fits_get_hdu_type(fits->p_fd,&hdutype, &status) != 0) {
     1645        char fitsErr[MAX_STRING_LENGTH];
     1646        (void)fits_get_errstatus(status, fitsErr);
     1647        psError(PS_ERR_IO, true,
     1648                PS_ERRORTEXT_psFits_GET_HDU_TYPE_FAILED,
     1649                fitsErr);
     1650        return false;
     1651    }
     1652    if (hdutype != ASCII_TBL && hdutype != BINARY_TBL) {
     1653        psError(PS_ERR_IO, true,
     1654                PS_ERRORTEXT_psFits_NOT_TABLE_TYPE);
     1655        return false;
     1656    }
     1657
     1658
     1659    psMetadataIterator* iter = psMetadataIteratorAlloc(data,PS_LIST_HEAD,NULL);
     1660
     1661    psMetadataItem* item;
     1662
     1663    while ( (item=psMetadataGetAndIncrement(iter)) != NULL) {
     1664        if (PS_META_IS_PRIMITIVE(item->type)) {
     1665            // operating on primitive data type, i.e., not a complex object
     1666            int colnum = 0;
     1667
     1668            if ( fits_get_colnum(fits->p_fd, CASESEN, item->name, &colnum, &status) == 0) {
     1669                // cooresponding column found in table
     1670                int dataType = 0;
     1671                convertPsTypeToFits(item->type, NULL, NULL, &dataType);
     1672
     1673                if (fits_write_col(fits->p_fd, dataType, colnum, row, 0,1,&item->data,&status) != 0) {
     1674                    char fitsErr[MAX_STRING_LENGTH];
     1675                    (void)fits_get_errstatus(status, fitsErr);
     1676                    psError(PS_ERR_IO, true,
     1677                            PS_ERRORTEXT_psFits_WRITE_FAILED,
     1678                            fits->filename, fitsErr);
     1679                    return false;
     1680                }
     1681            }
     1682        }
     1683    }
     1684
     1685    psFree(iter);
     1686
     1687    return true;
     1688}
Note: See TracChangeset for help on using the changeset viewer.