IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 3025 for trunk/psLib/src


Ignore:
Timestamp:
Jan 17, 2005, 10:58:22 AM (22 years ago)
Author:
desonia
Message:

added test for psFitsReadTable.

Location:
trunk/psLib/src
Files:
17 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/src/astronomy/psMetadata.c

    r2985 r3025  
    1212*  @author Ross Harman, MHPCC
    1313*
    14 *  @version $Revision: 1.48 $ $Name: not supported by cvs2svn $
    15 *  @date $Date: 2005-01-13 23:27:06 $
     14*  @version $Revision: 1.49 $ $Name: not supported by cvs2svn $
     15*  @date $Date: 2005-01-17 20:58:20 $
    1616*
    1717*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    495495psMetadataLookupNumTYPE(F64)
    496496psMetadataLookupNumTYPE(S32)
     497psMetadataLookupNumTYPE(Bool)
    497498
    498499psMetadataItem* psMetadataGet(psMetadata *md, psS32 where)
  • trunk/psLib/src/astronomy/psMetadata.h

    r2975 r3025  
    1111*  @author Ross Harman, MHPCC
    1212*
    13 *  @version $Revision: 1.33 $ $Name: not supported by cvs2svn $
    14 *  @date $Date: 2005-01-13 21:09:39 $
     13*  @version $Revision: 1.34 $ $Name: not supported by cvs2svn $
     14*  @date $Date: 2005-01-17 20:58:20 $
    1515*
    1616*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    240240);
    241241
     242/** Find an item in the metadata collection based on key name and return its boolean value.
     243 *
     244 *  Items may be found in the metadata by providing a key. If the key is
     245 *  non-unique, the value of the first item is returned. If the item is not found, zero is
     246 *  returned.
     247 *
     248 * @return psBool : Value of metadata item.
     249 */
     250psBool psMetadataLookupBool(
     251    psMetadata *md,            ///< Metadata collection to lookup metadata item.
     252    const char *key,           ///< Name of metadata key.
     253    psBool *status              ///< Status of lookup.
     254);
     255
    242256/** Find an item in the metadata collection based on key name and return its integer value.
    243257 *
  • trunk/psLib/src/collections/psMetadata.c

    r2985 r3025  
    1212*  @author Ross Harman, MHPCC
    1313*
    14 *  @version $Revision: 1.48 $ $Name: not supported by cvs2svn $
    15 *  @date $Date: 2005-01-13 23:27:06 $
     14*  @version $Revision: 1.49 $ $Name: not supported by cvs2svn $
     15*  @date $Date: 2005-01-17 20:58:20 $
    1616*
    1717*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    495495psMetadataLookupNumTYPE(F64)
    496496psMetadataLookupNumTYPE(S32)
     497psMetadataLookupNumTYPE(Bool)
    497498
    498499psMetadataItem* psMetadataGet(psMetadata *md, psS32 where)
  • trunk/psLib/src/collections/psMetadata.h

    r2975 r3025  
    1111*  @author Ross Harman, MHPCC
    1212*
    13 *  @version $Revision: 1.33 $ $Name: not supported by cvs2svn $
    14 *  @date $Date: 2005-01-13 21:09:39 $
     13*  @version $Revision: 1.34 $ $Name: not supported by cvs2svn $
     14*  @date $Date: 2005-01-17 20:58:20 $
    1515*
    1616*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    240240);
    241241
     242/** Find an item in the metadata collection based on key name and return its boolean value.
     243 *
     244 *  Items may be found in the metadata by providing a key. If the key is
     245 *  non-unique, the value of the first item is returned. If the item is not found, zero is
     246 *  returned.
     247 *
     248 * @return psBool : Value of metadata item.
     249 */
     250psBool psMetadataLookupBool(
     251    psMetadata *md,            ///< Metadata collection to lookup metadata item.
     252    const char *key,           ///< Name of metadata key.
     253    psBool *status              ///< Status of lookup.
     254);
     255
    242256/** Find an item in the metadata collection based on key name and return its integer value.
    243257 *
  • trunk/psLib/src/collections/psVector.h

    r2204 r3025  
    1111 *  @author Ross Harman, MHPCC
    1212 *
    13  *  @version $Revision: 1.25 $ $Name: not supported by cvs2svn $
    14  *  @date $Date: 2004-10-27 00:57:31 $
     13 *  @version $Revision: 1.26 $ $Name: not supported by cvs2svn $
     14 *  @date $Date: 2005-01-17 20:58:21 $
    1515 *
    1616 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    3737
    3838    union {
     39        psBool B;               ///< Boolean data.
    3940        psU8* U8;               ///< Unsigned 8-bit integer data.
    4041        psU16* U16;             ///< Unsigned 16-bit integer data.
     
    6364/** Allocate a vector.
    6465 *
    65  *  Uses psLib memory allocation functions to create a vector collection of 
     66 *  Uses psLib memory allocation functions to create a vector collection of
    6667 *  data as defined by the psType type.
    6768 *
     
    7576/** Reallocate a vector.
    7677 *
    77  *  Uses psLib memory allocation functions to reallocate a vector collection 
    78  *  of data. The vector is reallocated according to the psType type member 
     78 *  Uses psLib memory allocation functions to reallocate a vector collection
     79 *  of data. The vector is reallocated according to the psType type member
    7980 *  contained within the vector.
    8081 *
     
    8990/** Recycle a vector.
    9091 *
    91  *  Uses psLib memory allocation functions to reallocate a vector collection 
    92  *  of data. The vector is reallocated according to the psElemType type 
     92 *  Uses psLib memory allocation functions to reallocate a vector collection
     93 *  of data. The vector is reallocated according to the psElemType type
    9394 *  parameter.
    9495 *
     
    107108/** Copy a vector, converting types.
    108109 *
    109  *  Performs a deep copy of the elements of one psVector to a new psVector, 
     110 *  Performs a deep copy of the elements of one psVector to a new psVector,
    110111 *  converting numeric types to a specified type.
    111112 *
     
    133134/** Creates an array of indices based on sort ordered of array.
    134135 *
    135  *  Sorts a vector and creates an integer array holding indices of 
    136  *  sorted float values based on pre-sort index positions. 
     136 *  Sorts a vector and creates an integer array holding indices of
     137 *  sorted float values based on pre-sort index positions.
    137138 *
    138139 *  @return  psVector*     vector of the indices of sort.
  • trunk/psLib/src/dataIO/psFileUtilsErrors.dat

    r2965 r3025  
    3434psFits_NOT_IMAGE_TYPE                  Current FITS HDU type must be an image.
    3535psFits_NOT_TABLE_TYPE                  Current FITS HDU type must be a table.
    36 psFits_TABLE_FIRSTROW_NULL             Can't create a table without the first row, where table column information is derived.
     36psFits_TABLE_EMPTY                     Can't create a table without any rows.
    3737psFits_CFITSIO_ERROR                   CFITSIO error: %s
    3838psFits_METATYPE_INVALID                Specified FITS metadata type, %c, is not supported.
  • trunk/psLib/src/dataIO/psFileUtilsErrors.h

    r2965 r3025  
    77 *  @author Robert DeSonia, MHPCC
    88 *
    9  *  @version $Revision: 1.7 $ $Name: not supported by cvs2svn $
    10  *  @date $Date: 2005-01-13 01:54:25 $
     9 *  @version $Revision: 1.8 $ $Name: not supported by cvs2svn $
     10 *  @date $Date: 2005-01-17 20:58:21 $
    1111 *
    1212 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    5656#define PS_ERRORTEXT_psFits_NOT_IMAGE_TYPE "Current FITS HDU type must be an image."
    5757#define PS_ERRORTEXT_psFits_NOT_TABLE_TYPE "Current FITS HDU type must be a table."
    58 #define PS_ERRORTEXT_psFits_TABLE_FIRSTROW_NULL "Can't create a table without the first row, where table column information is derived."
     58#define PS_ERRORTEXT_psFits_TABLE_EMPTY "Can't create a table without any rows."
    5959#define PS_ERRORTEXT_psFits_CFITSIO_ERROR "CFITSIO error: %s"
    6060#define PS_ERRORTEXT_psFits_METATYPE_INVALID "Specified FITS metadata type, %c, is not supported."
  • trunk/psLib/src/dataIO/psFits.c

    r2994 r3025  
    77 *  @author Robert DeSonia, MHPCC
    88 *
    9  *  @version $Revision: 1.10 $ $Name: not supported by cvs2svn $
    10  *  @date $Date: 2005-01-14 19:40:33 $
     9 *  @version $Revision: 1.11 $ $Name: not supported by cvs2svn $
     10 *  @date $Date: 2005-01-17 20:58:21 $
    1111 *
    1212 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    165165    switch (type) {
    166166    case PS_TYPE_BOOL:
    167         *fitsType = "1L";
     167        *fitsType = psStringCopy("1L");
    168168        break;
    169169    case PS_TYPE_S32:
    170         *fitsType = "1J";
     170        *fitsType = psStringCopy("1J");
    171171        break;
    172172    case PS_TYPE_F32:
    173         *fitsType = "1E";
     173        *fitsType = psStringCopy("1E");
    174174        break;
    175175    case PS_TYPE_F64:
    176         *fitsType = "1D";
     176        *fitsType = psStringCopy("1D");
    177177        break;
    178178        // XXX: Handle other types, e.g., Vectors, etc.
     
    10281028
    10291029    // the row parameter in the proper range?
    1030     if (row < 1 || row > numRows) {
     1030    if (row < 0 || row >= numRows) {
    10311031        psError(PS_ERR_BAD_PARAMETER_VALUE, true,
    10321032                PS_ERRORTEXT_psFits_ROW_INVALID,
     
    10561056        if (status == 0) {
    10571057
    1058             #define READ_TABLE_ROW_CASE(FITSTYPE, TYPE) \
     1058            #define READ_TABLE_ROW_CASE(FITSTYPE, NATIVETYPE, TYPE) \
    10591059        case FITSTYPE: { \
    1060                 ps##TYPE value; \
     1060                NATIVETYPE value; \
    10611061                int anynul = 0; \
    10621062                fits_read_col(fits->p_fd, FITSTYPE, col,row+1, \
     
    10641064                if (anynul == 0) { \
    10651065                    psMetadataAdd(data,PS_LIST_TAIL, name, \
    1066                                   PS_TYPE_S32, PS_META_PRIMITIVE, \
    1067                                   "", value); \
     1066                                  PS_TYPE_##TYPE, PS_META_PRIMITIVE, \
     1067                                  "", (ps##TYPE)value); \
    10681068                } \
    1069             } \
    1070             break;
     1069                break; \
     1070            }
    10711071
    10721072            switch (typecode) {
    10731073            case TBYTE:
    10741074            case TSHORT:
    1075                 READ_TABLE_ROW_CASE(TLONG, S32)
    1076                 READ_TABLE_ROW_CASE(TFLOAT, F32)
    1077                 READ_TABLE_ROW_CASE(TDOUBLE, F64)
     1075            case TLONGLONG:
     1076                READ_TABLE_ROW_CASE(TLONG, long, S32)
     1077                READ_TABLE_ROW_CASE(TFLOAT, float, F32)
     1078                READ_TABLE_ROW_CASE(TDOUBLE, double, F64)
     1079                READ_TABLE_ROW_CASE(TLOGICAL, bool, BOOL);
     1080            case TSTRING: {
     1081                    char* value;
     1082                    int anynul = 0;
     1083                    fits_read_col(fits->p_fd, TSTRING, col,row+1,
     1084                                  1, 1, NULL, &value, &anynul, &status);
     1085                    if (anynul == 0) {
     1086                        psMetadataAdd(data,PS_LIST_TAIL, name,
     1087                                      PS_TYPE_PTR, PS_META_STR,
     1088                                      "", value);
     1089                    }
     1090                    break;
     1091                }
    10781092            default:
    10791093                psTrace("psFits.psFitsReadTableRow", 2,
     
    12661280    // get the size of the FITS table
    12671281    long numRows = 0;
    1268     int numCols = 0;
    12691282    fits_get_num_rows(fits->p_fd, &numRows, &status);
    1270     fits_get_num_cols(fits->p_fd, &numCols, &status);
    12711283    if ( status != 0) {
    12721284        char fitsErr[MAX_STRING_LENGTH];
     
    12781290    }
    12791291
    1280     psArray* table = psArrayAlloc(numCols);
     1292    psArray* table = psArrayAlloc(numRows);
    12811293
    12821294    for (int row = 0; row < numRows; row++) {
     
    12931305{
    12941306    int status = 0;
     1307    psMetadataItem* item;
    12951308
    12961309    if (fits == NULL) {
     
    13071320
    13081321    int rows = table->n;
     1322    if (rows < 1) {
     1323        // no table data, what can I do?
     1324        psError(PS_ERR_BAD_PARAMETER_SIZE, true,
     1325                PS_ERRORTEXT_psFits_TABLE_EMPTY);
     1326        return false;
     1327    }
    13091328
    13101329    // find all the columns needed
    1311     psArray* columns = psArrayAlloc(16);
     1330    psArray* columns = psArrayAlloc(((psMetadata*)table->data[0])->list->size);
    13121331    columns->n=0;
    13131332
    13141333    // find the unique items in the array of metadata 'rows'
    1315     psMetadataItem* item;
    13161334    for (int row=0; row < rows; row++) {
    13171335        psMetadata* rowMeta = table->data[row];
     
    13291347                    }
    13301348                    if (! found) {
    1331                         psArrayAdd(columns, columns->nalloc, item);
     1349                        psArrayAdd(columns, columns->nalloc, psMemIncrRefCounter(item));
    13321350                    }
    13331351                }
     
    13471365    for (int n=0; n < columns->n; n++) {
    13481366        char* fitsType;
    1349         columnNames->data[n] = ((psMetadataItem*)columns->data[n])->name;
     1367        columnNames->data[n] = psMemIncrRefCounter(((psMetadataItem*)columns->data[n])->name);
    13501368        if ( ! convertPsTypeToBinaryTForm(((psMetadataItem*)columns->data[n])->pType,
    13511369                                          &fitsType)) {
     
    13661384                    &status);
    13671385
     1386    psFree(columnNames);
     1387    psFree(columnTypes);
     1388
    13681389    // fill in the table elements with data
    13691390    for (int n = 0; n < columns->n; n++) {
    13701391        int row;
    13711392        item = columns->data[n];
    1372         psArray* columnItems = psArrayAlloc(table->n);
    1373         for (row = 0; row < table->n; row++) {
    1374             columnItems->data[row] = psMetadataLookup(table->data[row],item->name);
    1375         }
    13761393
    13771394        if (item->type == PS_META_PRIMITIVE) {
     
    13801397            case PS_TYPE_S32:
    13811398                for (row = 0; row < table->n; row++) {
    1382                     col->data.S32[row] = item->data.S32;
     1399                    col->data.S32[row] = psMetadataLookupS32(
     1400                                             table->data[row],item->name,NULL);
    13831401                }
    13841402                fits_write_col_int(fits->p_fd,
    1385                                    n, // column number
     1403                                   n+1, // column number
    13861404                                   1, // firstrow
    13871405                                   1, // firstelem
     
    13921410            case PS_TYPE_F32:
    13931411                for (row = 0; row < table->n; row++) {
    1394                     col->data.F32[row] = item->data.F32;
     1412                    col->data.F32[row] = psMetadataLookupF32(
     1413                                             table->data[row],item->name,NULL);
    13951414                }
    13961415                fits_write_col_flt(fits->p_fd,
    1397                                    n, // column number
     1416                                   n+1, // column number
    13981417                                   1, // firstrow
    13991418                                   1, // firstelem
     
    14021421                                   &status);
    14031422                break;
    1404             case PS_TYPE_S64:
     1423            case PS_TYPE_F64:
    14051424                for (row = 0; row < table->n; row++) {
    1406                     col->data.F64[row] = item->data.F64;
     1425                    col->data.F64[row] = psMetadataLookupF64(
     1426                                             table->data[row],item->name,NULL);
    14071427                }
    14081428                fits_write_col_dbl(fits->p_fd,
    1409                                    n, // column number
     1429                                   n+1, // column number
    14101430                                   1, // firstrow
    14111431                                   1, // firstelem
     
    14141434                                   &status);
    14151435                break;
     1436            case PS_TYPE_BOOL:
     1437                for (row = 0; row < table->n; row++) {
     1438                    col->data.S8[row] = psMetadataLookupBool(
     1439                                            table->data[row],item->name,NULL);
     1440                }
     1441                fits_write_col_log(fits->p_fd,
     1442                                   n+1, // column number
     1443                                   1, // firstrow
     1444                                   1, // firstelem
     1445                                   table->n, // nelements
     1446                                   col->data.S8,
     1447                                   &status);
     1448                break;
    14161449            default:
    14171450                // XXX: error message
    1418                 psFree(col);
    1419                 psFree(columnItems);
    1420                 psFree(columnNames);
    1421                 psFree(columnTypes);
    1422                 psFree(columns);
    1423                 return false;
     1451                break;
    14241452            }
    1425 
     1453            psFree(col);
    14261454        } else if (item->type == PS_META_STR) {
    14271455            psArray* col = psArrayAlloc(table->n);
     
    14361464                               (char**)col->data,
    14371465                               &status);
    1438         }
    1439     }
     1466            psFree(col);
     1467        }
     1468    }
     1469
     1470    psFree(columns);
    14401471
    14411472    return true;
  • trunk/psLib/src/fileUtils/psFileUtilsErrors.dat

    r2965 r3025  
    3434psFits_NOT_IMAGE_TYPE                  Current FITS HDU type must be an image.
    3535psFits_NOT_TABLE_TYPE                  Current FITS HDU type must be a table.
    36 psFits_TABLE_FIRSTROW_NULL             Can't create a table without the first row, where table column information is derived.
     36psFits_TABLE_EMPTY                     Can't create a table without any rows.
    3737psFits_CFITSIO_ERROR                   CFITSIO error: %s
    3838psFits_METATYPE_INVALID                Specified FITS metadata type, %c, is not supported.
  • trunk/psLib/src/fileUtils/psFileUtilsErrors.h

    r2965 r3025  
    77 *  @author Robert DeSonia, MHPCC
    88 *
    9  *  @version $Revision: 1.7 $ $Name: not supported by cvs2svn $
    10  *  @date $Date: 2005-01-13 01:54:25 $
     9 *  @version $Revision: 1.8 $ $Name: not supported by cvs2svn $
     10 *  @date $Date: 2005-01-17 20:58:21 $
    1111 *
    1212 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    5656#define PS_ERRORTEXT_psFits_NOT_IMAGE_TYPE "Current FITS HDU type must be an image."
    5757#define PS_ERRORTEXT_psFits_NOT_TABLE_TYPE "Current FITS HDU type must be a table."
    58 #define PS_ERRORTEXT_psFits_TABLE_FIRSTROW_NULL "Can't create a table without the first row, where table column information is derived."
     58#define PS_ERRORTEXT_psFits_TABLE_EMPTY "Can't create a table without any rows."
    5959#define PS_ERRORTEXT_psFits_CFITSIO_ERROR "CFITSIO error: %s"
    6060#define PS_ERRORTEXT_psFits_METATYPE_INVALID "Specified FITS metadata type, %c, is not supported."
  • trunk/psLib/src/fileUtils/psFits.c

    r2994 r3025  
    77 *  @author Robert DeSonia, MHPCC
    88 *
    9  *  @version $Revision: 1.10 $ $Name: not supported by cvs2svn $
    10  *  @date $Date: 2005-01-14 19:40:33 $
     9 *  @version $Revision: 1.11 $ $Name: not supported by cvs2svn $
     10 *  @date $Date: 2005-01-17 20:58:21 $
    1111 *
    1212 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    165165    switch (type) {
    166166    case PS_TYPE_BOOL:
    167         *fitsType = "1L";
     167        *fitsType = psStringCopy("1L");
    168168        break;
    169169    case PS_TYPE_S32:
    170         *fitsType = "1J";
     170        *fitsType = psStringCopy("1J");
    171171        break;
    172172    case PS_TYPE_F32:
    173         *fitsType = "1E";
     173        *fitsType = psStringCopy("1E");
    174174        break;
    175175    case PS_TYPE_F64:
    176         *fitsType = "1D";
     176        *fitsType = psStringCopy("1D");
    177177        break;
    178178        // XXX: Handle other types, e.g., Vectors, etc.
     
    10281028
    10291029    // the row parameter in the proper range?
    1030     if (row < 1 || row > numRows) {
     1030    if (row < 0 || row >= numRows) {
    10311031        psError(PS_ERR_BAD_PARAMETER_VALUE, true,
    10321032                PS_ERRORTEXT_psFits_ROW_INVALID,
     
    10561056        if (status == 0) {
    10571057
    1058             #define READ_TABLE_ROW_CASE(FITSTYPE, TYPE) \
     1058            #define READ_TABLE_ROW_CASE(FITSTYPE, NATIVETYPE, TYPE) \
    10591059        case FITSTYPE: { \
    1060                 ps##TYPE value; \
     1060                NATIVETYPE value; \
    10611061                int anynul = 0; \
    10621062                fits_read_col(fits->p_fd, FITSTYPE, col,row+1, \
     
    10641064                if (anynul == 0) { \
    10651065                    psMetadataAdd(data,PS_LIST_TAIL, name, \
    1066                                   PS_TYPE_S32, PS_META_PRIMITIVE, \
    1067                                   "", value); \
     1066                                  PS_TYPE_##TYPE, PS_META_PRIMITIVE, \
     1067                                  "", (ps##TYPE)value); \
    10681068                } \
    1069             } \
    1070             break;
     1069                break; \
     1070            }
    10711071
    10721072            switch (typecode) {
    10731073            case TBYTE:
    10741074            case TSHORT:
    1075                 READ_TABLE_ROW_CASE(TLONG, S32)
    1076                 READ_TABLE_ROW_CASE(TFLOAT, F32)
    1077                 READ_TABLE_ROW_CASE(TDOUBLE, F64)
     1075            case TLONGLONG:
     1076                READ_TABLE_ROW_CASE(TLONG, long, S32)
     1077                READ_TABLE_ROW_CASE(TFLOAT, float, F32)
     1078                READ_TABLE_ROW_CASE(TDOUBLE, double, F64)
     1079                READ_TABLE_ROW_CASE(TLOGICAL, bool, BOOL);
     1080            case TSTRING: {
     1081                    char* value;
     1082                    int anynul = 0;
     1083                    fits_read_col(fits->p_fd, TSTRING, col,row+1,
     1084                                  1, 1, NULL, &value, &anynul, &status);
     1085                    if (anynul == 0) {
     1086                        psMetadataAdd(data,PS_LIST_TAIL, name,
     1087                                      PS_TYPE_PTR, PS_META_STR,
     1088                                      "", value);
     1089                    }
     1090                    break;
     1091                }
    10781092            default:
    10791093                psTrace("psFits.psFitsReadTableRow", 2,
     
    12661280    // get the size of the FITS table
    12671281    long numRows = 0;
    1268     int numCols = 0;
    12691282    fits_get_num_rows(fits->p_fd, &numRows, &status);
    1270     fits_get_num_cols(fits->p_fd, &numCols, &status);
    12711283    if ( status != 0) {
    12721284        char fitsErr[MAX_STRING_LENGTH];
     
    12781290    }
    12791291
    1280     psArray* table = psArrayAlloc(numCols);
     1292    psArray* table = psArrayAlloc(numRows);
    12811293
    12821294    for (int row = 0; row < numRows; row++) {
     
    12931305{
    12941306    int status = 0;
     1307    psMetadataItem* item;
    12951308
    12961309    if (fits == NULL) {
     
    13071320
    13081321    int rows = table->n;
     1322    if (rows < 1) {
     1323        // no table data, what can I do?
     1324        psError(PS_ERR_BAD_PARAMETER_SIZE, true,
     1325                PS_ERRORTEXT_psFits_TABLE_EMPTY);
     1326        return false;
     1327    }
    13091328
    13101329    // find all the columns needed
    1311     psArray* columns = psArrayAlloc(16);
     1330    psArray* columns = psArrayAlloc(((psMetadata*)table->data[0])->list->size);
    13121331    columns->n=0;
    13131332
    13141333    // find the unique items in the array of metadata 'rows'
    1315     psMetadataItem* item;
    13161334    for (int row=0; row < rows; row++) {
    13171335        psMetadata* rowMeta = table->data[row];
     
    13291347                    }
    13301348                    if (! found) {
    1331                         psArrayAdd(columns, columns->nalloc, item);
     1349                        psArrayAdd(columns, columns->nalloc, psMemIncrRefCounter(item));
    13321350                    }
    13331351                }
     
    13471365    for (int n=0; n < columns->n; n++) {
    13481366        char* fitsType;
    1349         columnNames->data[n] = ((psMetadataItem*)columns->data[n])->name;
     1367        columnNames->data[n] = psMemIncrRefCounter(((psMetadataItem*)columns->data[n])->name);
    13501368        if ( ! convertPsTypeToBinaryTForm(((psMetadataItem*)columns->data[n])->pType,
    13511369                                          &fitsType)) {
     
    13661384                    &status);
    13671385
     1386    psFree(columnNames);
     1387    psFree(columnTypes);
     1388
    13681389    // fill in the table elements with data
    13691390    for (int n = 0; n < columns->n; n++) {
    13701391        int row;
    13711392        item = columns->data[n];
    1372         psArray* columnItems = psArrayAlloc(table->n);
    1373         for (row = 0; row < table->n; row++) {
    1374             columnItems->data[row] = psMetadataLookup(table->data[row],item->name);
    1375         }
    13761393
    13771394        if (item->type == PS_META_PRIMITIVE) {
     
    13801397            case PS_TYPE_S32:
    13811398                for (row = 0; row < table->n; row++) {
    1382                     col->data.S32[row] = item->data.S32;
     1399                    col->data.S32[row] = psMetadataLookupS32(
     1400                                             table->data[row],item->name,NULL);
    13831401                }
    13841402                fits_write_col_int(fits->p_fd,
    1385                                    n, // column number
     1403                                   n+1, // column number
    13861404                                   1, // firstrow
    13871405                                   1, // firstelem
     
    13921410            case PS_TYPE_F32:
    13931411                for (row = 0; row < table->n; row++) {
    1394                     col->data.F32[row] = item->data.F32;
     1412                    col->data.F32[row] = psMetadataLookupF32(
     1413                                             table->data[row],item->name,NULL);
    13951414                }
    13961415                fits_write_col_flt(fits->p_fd,
    1397                                    n, // column number
     1416                                   n+1, // column number
    13981417                                   1, // firstrow
    13991418                                   1, // firstelem
     
    14021421                                   &status);
    14031422                break;
    1404             case PS_TYPE_S64:
     1423            case PS_TYPE_F64:
    14051424                for (row = 0; row < table->n; row++) {
    1406                     col->data.F64[row] = item->data.F64;
     1425                    col->data.F64[row] = psMetadataLookupF64(
     1426                                             table->data[row],item->name,NULL);
    14071427                }
    14081428                fits_write_col_dbl(fits->p_fd,
    1409                                    n, // column number
     1429                                   n+1, // column number
    14101430                                   1, // firstrow
    14111431                                   1, // firstelem
     
    14141434                                   &status);
    14151435                break;
     1436            case PS_TYPE_BOOL:
     1437                for (row = 0; row < table->n; row++) {
     1438                    col->data.S8[row] = psMetadataLookupBool(
     1439                                            table->data[row],item->name,NULL);
     1440                }
     1441                fits_write_col_log(fits->p_fd,
     1442                                   n+1, // column number
     1443                                   1, // firstrow
     1444                                   1, // firstelem
     1445                                   table->n, // nelements
     1446                                   col->data.S8,
     1447                                   &status);
     1448                break;
    14161449            default:
    14171450                // XXX: error message
    1418                 psFree(col);
    1419                 psFree(columnItems);
    1420                 psFree(columnNames);
    1421                 psFree(columnTypes);
    1422                 psFree(columns);
    1423                 return false;
     1451                break;
    14241452            }
    1425 
     1453            psFree(col);
    14261454        } else if (item->type == PS_META_STR) {
    14271455            psArray* col = psArrayAlloc(table->n);
     
    14361464                               (char**)col->data,
    14371465                               &status);
    1438         }
    1439     }
     1466            psFree(col);
     1467        }
     1468    }
     1469
     1470    psFree(columns);
    14401471
    14411472    return true;
  • trunk/psLib/src/fits/psFits.c

    r2994 r3025  
    77 *  @author Robert DeSonia, MHPCC
    88 *
    9  *  @version $Revision: 1.10 $ $Name: not supported by cvs2svn $
    10  *  @date $Date: 2005-01-14 19:40:33 $
     9 *  @version $Revision: 1.11 $ $Name: not supported by cvs2svn $
     10 *  @date $Date: 2005-01-17 20:58:21 $
    1111 *
    1212 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    165165    switch (type) {
    166166    case PS_TYPE_BOOL:
    167         *fitsType = "1L";
     167        *fitsType = psStringCopy("1L");
    168168        break;
    169169    case PS_TYPE_S32:
    170         *fitsType = "1J";
     170        *fitsType = psStringCopy("1J");
    171171        break;
    172172    case PS_TYPE_F32:
    173         *fitsType = "1E";
     173        *fitsType = psStringCopy("1E");
    174174        break;
    175175    case PS_TYPE_F64:
    176         *fitsType = "1D";
     176        *fitsType = psStringCopy("1D");
    177177        break;
    178178        // XXX: Handle other types, e.g., Vectors, etc.
     
    10281028
    10291029    // the row parameter in the proper range?
    1030     if (row < 1 || row > numRows) {
     1030    if (row < 0 || row >= numRows) {
    10311031        psError(PS_ERR_BAD_PARAMETER_VALUE, true,
    10321032                PS_ERRORTEXT_psFits_ROW_INVALID,
     
    10561056        if (status == 0) {
    10571057
    1058             #define READ_TABLE_ROW_CASE(FITSTYPE, TYPE) \
     1058            #define READ_TABLE_ROW_CASE(FITSTYPE, NATIVETYPE, TYPE) \
    10591059        case FITSTYPE: { \
    1060                 ps##TYPE value; \
     1060                NATIVETYPE value; \
    10611061                int anynul = 0; \
    10621062                fits_read_col(fits->p_fd, FITSTYPE, col,row+1, \
     
    10641064                if (anynul == 0) { \
    10651065                    psMetadataAdd(data,PS_LIST_TAIL, name, \
    1066                                   PS_TYPE_S32, PS_META_PRIMITIVE, \
    1067                                   "", value); \
     1066                                  PS_TYPE_##TYPE, PS_META_PRIMITIVE, \
     1067                                  "", (ps##TYPE)value); \
    10681068                } \
    1069             } \
    1070             break;
     1069                break; \
     1070            }
    10711071
    10721072            switch (typecode) {
    10731073            case TBYTE:
    10741074            case TSHORT:
    1075                 READ_TABLE_ROW_CASE(TLONG, S32)
    1076                 READ_TABLE_ROW_CASE(TFLOAT, F32)
    1077                 READ_TABLE_ROW_CASE(TDOUBLE, F64)
     1075            case TLONGLONG:
     1076                READ_TABLE_ROW_CASE(TLONG, long, S32)
     1077                READ_TABLE_ROW_CASE(TFLOAT, float, F32)
     1078                READ_TABLE_ROW_CASE(TDOUBLE, double, F64)
     1079                READ_TABLE_ROW_CASE(TLOGICAL, bool, BOOL);
     1080            case TSTRING: {
     1081                    char* value;
     1082                    int anynul = 0;
     1083                    fits_read_col(fits->p_fd, TSTRING, col,row+1,
     1084                                  1, 1, NULL, &value, &anynul, &status);
     1085                    if (anynul == 0) {
     1086                        psMetadataAdd(data,PS_LIST_TAIL, name,
     1087                                      PS_TYPE_PTR, PS_META_STR,
     1088                                      "", value);
     1089                    }
     1090                    break;
     1091                }
    10781092            default:
    10791093                psTrace("psFits.psFitsReadTableRow", 2,
     
    12661280    // get the size of the FITS table
    12671281    long numRows = 0;
    1268     int numCols = 0;
    12691282    fits_get_num_rows(fits->p_fd, &numRows, &status);
    1270     fits_get_num_cols(fits->p_fd, &numCols, &status);
    12711283    if ( status != 0) {
    12721284        char fitsErr[MAX_STRING_LENGTH];
     
    12781290    }
    12791291
    1280     psArray* table = psArrayAlloc(numCols);
     1292    psArray* table = psArrayAlloc(numRows);
    12811293
    12821294    for (int row = 0; row < numRows; row++) {
     
    12931305{
    12941306    int status = 0;
     1307    psMetadataItem* item;
    12951308
    12961309    if (fits == NULL) {
     
    13071320
    13081321    int rows = table->n;
     1322    if (rows < 1) {
     1323        // no table data, what can I do?
     1324        psError(PS_ERR_BAD_PARAMETER_SIZE, true,
     1325                PS_ERRORTEXT_psFits_TABLE_EMPTY);
     1326        return false;
     1327    }
    13091328
    13101329    // find all the columns needed
    1311     psArray* columns = psArrayAlloc(16);
     1330    psArray* columns = psArrayAlloc(((psMetadata*)table->data[0])->list->size);
    13121331    columns->n=0;
    13131332
    13141333    // find the unique items in the array of metadata 'rows'
    1315     psMetadataItem* item;
    13161334    for (int row=0; row < rows; row++) {
    13171335        psMetadata* rowMeta = table->data[row];
     
    13291347                    }
    13301348                    if (! found) {
    1331                         psArrayAdd(columns, columns->nalloc, item);
     1349                        psArrayAdd(columns, columns->nalloc, psMemIncrRefCounter(item));
    13321350                    }
    13331351                }
     
    13471365    for (int n=0; n < columns->n; n++) {
    13481366        char* fitsType;
    1349         columnNames->data[n] = ((psMetadataItem*)columns->data[n])->name;
     1367        columnNames->data[n] = psMemIncrRefCounter(((psMetadataItem*)columns->data[n])->name);
    13501368        if ( ! convertPsTypeToBinaryTForm(((psMetadataItem*)columns->data[n])->pType,
    13511369                                          &fitsType)) {
     
    13661384                    &status);
    13671385
     1386    psFree(columnNames);
     1387    psFree(columnTypes);
     1388
    13681389    // fill in the table elements with data
    13691390    for (int n = 0; n < columns->n; n++) {
    13701391        int row;
    13711392        item = columns->data[n];
    1372         psArray* columnItems = psArrayAlloc(table->n);
    1373         for (row = 0; row < table->n; row++) {
    1374             columnItems->data[row] = psMetadataLookup(table->data[row],item->name);
    1375         }
    13761393
    13771394        if (item->type == PS_META_PRIMITIVE) {
     
    13801397            case PS_TYPE_S32:
    13811398                for (row = 0; row < table->n; row++) {
    1382                     col->data.S32[row] = item->data.S32;
     1399                    col->data.S32[row] = psMetadataLookupS32(
     1400                                             table->data[row],item->name,NULL);
    13831401                }
    13841402                fits_write_col_int(fits->p_fd,
    1385                                    n, // column number
     1403                                   n+1, // column number
    13861404                                   1, // firstrow
    13871405                                   1, // firstelem
     
    13921410            case PS_TYPE_F32:
    13931411                for (row = 0; row < table->n; row++) {
    1394                     col->data.F32[row] = item->data.F32;
     1412                    col->data.F32[row] = psMetadataLookupF32(
     1413                                             table->data[row],item->name,NULL);
    13951414                }
    13961415                fits_write_col_flt(fits->p_fd,
    1397                                    n, // column number
     1416                                   n+1, // column number
    13981417                                   1, // firstrow
    13991418                                   1, // firstelem
     
    14021421                                   &status);
    14031422                break;
    1404             case PS_TYPE_S64:
     1423            case PS_TYPE_F64:
    14051424                for (row = 0; row < table->n; row++) {
    1406                     col->data.F64[row] = item->data.F64;
     1425                    col->data.F64[row] = psMetadataLookupF64(
     1426                                             table->data[row],item->name,NULL);
    14071427                }
    14081428                fits_write_col_dbl(fits->p_fd,
    1409                                    n, // column number
     1429                                   n+1, // column number
    14101430                                   1, // firstrow
    14111431                                   1, // firstelem
     
    14141434                                   &status);
    14151435                break;
     1436            case PS_TYPE_BOOL:
     1437                for (row = 0; row < table->n; row++) {
     1438                    col->data.S8[row] = psMetadataLookupBool(
     1439                                            table->data[row],item->name,NULL);
     1440                }
     1441                fits_write_col_log(fits->p_fd,
     1442                                   n+1, // column number
     1443                                   1, // firstrow
     1444                                   1, // firstelem
     1445                                   table->n, // nelements
     1446                                   col->data.S8,
     1447                                   &status);
     1448                break;
    14161449            default:
    14171450                // XXX: error message
    1418                 psFree(col);
    1419                 psFree(columnItems);
    1420                 psFree(columnNames);
    1421                 psFree(columnTypes);
    1422                 psFree(columns);
    1423                 return false;
     1451                break;
    14241452            }
    1425 
     1453            psFree(col);
    14261454        } else if (item->type == PS_META_STR) {
    14271455            psArray* col = psArrayAlloc(table->n);
     
    14361464                               (char**)col->data,
    14371465                               &status);
    1438         }
    1439     }
     1466            psFree(col);
     1467        }
     1468    }
     1469
     1470    psFree(columns);
    14401471
    14411472    return true;
  • trunk/psLib/src/mathtypes/psVector.h

    r2204 r3025  
    1111 *  @author Ross Harman, MHPCC
    1212 *
    13  *  @version $Revision: 1.25 $ $Name: not supported by cvs2svn $
    14  *  @date $Date: 2004-10-27 00:57:31 $
     13 *  @version $Revision: 1.26 $ $Name: not supported by cvs2svn $
     14 *  @date $Date: 2005-01-17 20:58:21 $
    1515 *
    1616 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    3737
    3838    union {
     39        psBool B;               ///< Boolean data.
    3940        psU8* U8;               ///< Unsigned 8-bit integer data.
    4041        psU16* U16;             ///< Unsigned 16-bit integer data.
     
    6364/** Allocate a vector.
    6465 *
    65  *  Uses psLib memory allocation functions to create a vector collection of 
     66 *  Uses psLib memory allocation functions to create a vector collection of
    6667 *  data as defined by the psType type.
    6768 *
     
    7576/** Reallocate a vector.
    7677 *
    77  *  Uses psLib memory allocation functions to reallocate a vector collection 
    78  *  of data. The vector is reallocated according to the psType type member 
     78 *  Uses psLib memory allocation functions to reallocate a vector collection
     79 *  of data. The vector is reallocated according to the psType type member
    7980 *  contained within the vector.
    8081 *
     
    8990/** Recycle a vector.
    9091 *
    91  *  Uses psLib memory allocation functions to reallocate a vector collection 
    92  *  of data. The vector is reallocated according to the psElemType type 
     92 *  Uses psLib memory allocation functions to reallocate a vector collection
     93 *  of data. The vector is reallocated according to the psElemType type
    9394 *  parameter.
    9495 *
     
    107108/** Copy a vector, converting types.
    108109 *
    109  *  Performs a deep copy of the elements of one psVector to a new psVector, 
     110 *  Performs a deep copy of the elements of one psVector to a new psVector,
    110111 *  converting numeric types to a specified type.
    111112 *
     
    133134/** Creates an array of indices based on sort ordered of array.
    134135 *
    135  *  Sorts a vector and creates an integer array holding indices of 
    136  *  sorted float values based on pre-sort index positions. 
     136 *  Sorts a vector and creates an integer array holding indices of
     137 *  sorted float values based on pre-sort index positions.
    137138 *
    138139 *  @return  psVector*     vector of the indices of sort.
  • trunk/psLib/src/sys/psType.h

    r2763 r3025  
    1111*  @author Ross Harman, MHPCC
    1212*
    13 *  @version $Revision: 1.26 $ $Name: not supported by cvs2svn $
    14 *  @date $Date: 2004-12-21 00:37:51 $
     13*  @version $Revision: 1.27 $ $Name: not supported by cvs2svn $
     14*  @date $Date: 2005-01-17 20:58:21 $
    1515*
    1616*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    7878
    7979typedef psU8 psMaskType;               ///< the C datatype for a mask image
    80 
     80typedef psBool psBOOL;                 ///< allow psBOOL to be used instead of psBool (for macros)
    8181
    8282#define PS_MIN_S8        INT8_MIN      /**< minimum valid psS8 value */
  • trunk/psLib/src/sysUtils/psType.h

    r2763 r3025  
    1111*  @author Ross Harman, MHPCC
    1212*
    13 *  @version $Revision: 1.26 $ $Name: not supported by cvs2svn $
    14 *  @date $Date: 2004-12-21 00:37:51 $
     13*  @version $Revision: 1.27 $ $Name: not supported by cvs2svn $
     14*  @date $Date: 2005-01-17 20:58:21 $
    1515*
    1616*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    7878
    7979typedef psU8 psMaskType;               ///< the C datatype for a mask image
    80 
     80typedef psBool psBOOL;                 ///< allow psBOOL to be used instead of psBool (for macros)
    8181
    8282#define PS_MIN_S8        INT8_MIN      /**< minimum valid psS8 value */
  • trunk/psLib/src/types/psMetadata.c

    r2985 r3025  
    1212*  @author Ross Harman, MHPCC
    1313*
    14 *  @version $Revision: 1.48 $ $Name: not supported by cvs2svn $
    15 *  @date $Date: 2005-01-13 23:27:06 $
     14*  @version $Revision: 1.49 $ $Name: not supported by cvs2svn $
     15*  @date $Date: 2005-01-17 20:58:20 $
    1616*
    1717*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    495495psMetadataLookupNumTYPE(F64)
    496496psMetadataLookupNumTYPE(S32)
     497psMetadataLookupNumTYPE(Bool)
    497498
    498499psMetadataItem* psMetadataGet(psMetadata *md, psS32 where)
  • trunk/psLib/src/types/psMetadata.h

    r2975 r3025  
    1111*  @author Ross Harman, MHPCC
    1212*
    13 *  @version $Revision: 1.33 $ $Name: not supported by cvs2svn $
    14 *  @date $Date: 2005-01-13 21:09:39 $
     13*  @version $Revision: 1.34 $ $Name: not supported by cvs2svn $
     14*  @date $Date: 2005-01-17 20:58:20 $
    1515*
    1616*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    240240);
    241241
     242/** Find an item in the metadata collection based on key name and return its boolean value.
     243 *
     244 *  Items may be found in the metadata by providing a key. If the key is
     245 *  non-unique, the value of the first item is returned. If the item is not found, zero is
     246 *  returned.
     247 *
     248 * @return psBool : Value of metadata item.
     249 */
     250psBool psMetadataLookupBool(
     251    psMetadata *md,            ///< Metadata collection to lookup metadata item.
     252    const char *key,           ///< Name of metadata key.
     253    psBool *status              ///< Status of lookup.
     254);
     255
    242256/** Find an item in the metadata collection based on key name and return its integer value.
    243257 *
Note: See TracChangeset for help on using the changeset viewer.