IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 5168 for trunk/psLib/src/fits


Ignore:
Timestamp:
Sep 28, 2005, 10:02:49 AM (21 years ago)
Author:
desonia
Message:

added support for reading vectors from binary tables.

File:
1 edited

Legend:

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

    r5164 r5168  
    1 /** @file  psFits.cr
     1/** @file  psFits.c
    22 *
    33 *  @brief Contains Fits I/O routines
     
    77 *  @author Robert DeSonia, MHPCC
    88 *
    9  *  @version $Revision: 1.49 $ $Name: not supported by cvs2svn $
    10  *  @date $Date: 2005-09-28 02:37:58 $
     9 *  @version $Revision: 1.50 $ $Name: not supported by cvs2svn $
     10 *  @date $Date: 2005-09-28 20:02:46 $
    1111 *
    1212 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
     
    682682            psMetadataAddMetadata(out, PS_LIST_HEAD, name, 0, "FITS Header",
    683683                                  header);
    684         } else { // XXX: is this a warning or error?
    685             psLogMsg(__func__, PS_LOG_WARN,
    686                      "Failed to read HDU#%d header data.",
    687                      lcv);
     684        } else {
     685            psWarning("Failed to read HDU#%d header data.",
     686                      lcv);
    688687        }
    689688
     
    12491248            #define READ_TABLE_ROW_CASE(FITSTYPE, NATIVETYPE, TYPE) \
    12501249        case FITSTYPE: { \
    1251                 NATIVETYPE value = 0; \
    1252                 int anynul = 0; \
    1253                 fits_read_col(fits->fd, FITSTYPE, col,row+1, \
    1254                               1, 1, NULL, &value, &anynul, &status); \
    1255                 psTrace(".psFits.psFitsReadTableRow",5,"Column #%i, '%s', is type %i, repeat %i, Value = %g\n", \
    1256                         col, name, typecode, repeat, (double)value); \
    1257                 psMetadataAdd(data,PS_LIST_TAIL, name, \
    1258                               PS_DATA_##TYPE, \
    1259                               "", (ps##TYPE)value); \
     1250                if (repeat == 1) { \
     1251                    NATIVETYPE value; \
     1252                    int anynul = 0; \
     1253                    fits_read_col(fits->fd, FITSTYPE, col,row+1, \
     1254                                  1, 1, NULL, &value, &anynul, &status); \
     1255                    psTrace(".psFits.psFitsReadTableRow",5,"Column #%i, '%s', is type %i, repeat %i, Value = %g\n", \
     1256                            col, name, typecode, repeat, (double)value); \
     1257                    psMetadataAdd(data,PS_LIST_TAIL, name, \
     1258                                  PS_DATA_##TYPE, \
     1259                                  "", (ps##TYPE)value); \
     1260                } else { \
     1261                    psVector* value = psVectorAlloc(repeat,PS_DATA_##TYPE); \
     1262                    int anynul = 0; \
     1263                    fits_read_col(fits->fd, FITSTYPE, col,row+1, \
     1264                                  1, repeat, NULL, value->data.U8, &anynul, &status); \
     1265                    psMetadataAdd(data,PS_LIST_TAIL, name, \
     1266                                  PS_DATA_VECTOR, \
     1267                                  "", value); \
     1268                    psFree(value); \
     1269                } \
    12601270                break; \
    12611271            }
     
    12851295                }
    12861296            default:
     1297                psWarning("Data type (%d) not supportted for column %d",
     1298                          typecode, col);
     1299
    12871300                psTrace("psFits.psFitsReadTableRow", 2,
    12881301                        "Column %d or row %d was of a non primitive type, %d",
     
    15841597                        columns->data[n] = psMemIncrRefCounter(item);
    15851598                    }
     1599                } else {
     1600                    // unsupported type -- treating as an error
     1601                    psError(PS_ERR_BAD_PARAMETER_TYPE, true,
     1602                            "Unsupported data type (%d) for Metadata Item '%s' in row %d.",
     1603                            item->type, item->name, row);
     1604                    psFree(iter);
     1605                    psFree(columns);
     1606                    return false;
    15861607                }
    15871608            }
     
    15911612
    15921613    if (columns->n == 0) { // no table columns found
    1593         // XXX: Error?
     1614        psError(PS_ERR_BAD_PARAMETER_SIZE, true,
     1615                "Did not find any column data to write to a table.");
     1616        psFree(columns);
    15941617        return false;
    15951618    }
     
    15991622    psArray* columnTypes = psArrayAlloc(columns->n);
    16001623    for (int n=0; n < columns->n; n++) {
    1601         char* fitsType;
    16021624        columnNames->data[n] = psMemIncrRefCounter(((psMetadataItem*)columns->data[n])->name);
    16031625        if ( ! getMetadataTForm((psMetadataItem*)columns->data[n],
    1604                                 &fitsType,1) ) {
    1605             // XXX: error message
     1626                                (char**)&(columnTypes->data[n]),1) ) {
     1627            psError(PS_ERR_UNKNOWN, true,
     1628                    "Failed to determine the FITS data type of '%s' (type=%d).",
     1629                    columnNames->data[n],
     1630                    ((psMetadataItem*)columns->data[n])->type);
     1631            psFree(columns);
     1632            psFree(columnNames);
     1633            psFree(columnTypes);
    16061634            return false;
    16071635        }
    1608         columnTypes->data[n] = fitsType;
    16091636    }
    16101637
Note: See TracChangeset for help on using the changeset viewer.