Changeset 3025
- Timestamp:
- Jan 17, 2005, 10:58:22 AM (22 years ago)
- Location:
- trunk/psLib
- Files:
-
- 22 edited
-
psLib.kdevses (modified) (1 diff)
-
src/astronomy/psMetadata.c (modified) (2 diffs)
-
src/astronomy/psMetadata.h (modified) (2 diffs)
-
src/collections/psMetadata.c (modified) (2 diffs)
-
src/collections/psMetadata.h (modified) (2 diffs)
-
src/collections/psVector.h (modified) (7 diffs)
-
src/dataIO/psFileUtilsErrors.dat (modified) (1 diff)
-
src/dataIO/psFileUtilsErrors.h (modified) (2 diffs)
-
src/dataIO/psFits.c (modified) (17 diffs)
-
src/fileUtils/psFileUtilsErrors.dat (modified) (1 diff)
-
src/fileUtils/psFileUtilsErrors.h (modified) (2 diffs)
-
src/fileUtils/psFits.c (modified) (17 diffs)
-
src/fits/psFits.c (modified) (17 diffs)
-
src/mathtypes/psVector.h (modified) (7 diffs)
-
src/sys/psType.h (modified) (2 diffs)
-
src/sysUtils/psType.h (modified) (2 diffs)
-
src/types/psMetadata.c (modified) (2 diffs)
-
src/types/psMetadata.h (modified) (2 diffs)
-
test/dataIO/tst_psFits.c (modified) (10 diffs)
-
test/dataIO/verified/tst_psFits.stderr (modified) (1 diff)
-
test/fileUtils/tst_psFits.c (modified) (10 diffs)
-
test/fileUtils/verified/tst_psFits.stderr (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/psLib.kdevses
r2965 r3025 4 4 <DocsAndViews NumberOfDocuments="8" > 5 5 <Doc0 NumberOfViews="1" URL="file:/home/desonia/psLib/test/fileUtils/tst_psFits.c" > 6 <View0 line="22"Type="Source" />6 <View0 Type="Source" /> 7 7 </Doc0> 8 8 <Doc1 NumberOfViews="1" URL="file:/home/desonia/psLib/src/fileUtils/psFits.h" > 9 <View0 line="166"Type="Source" />9 <View0 Type="Source" /> 10 10 </Doc1> 11 11 <Doc2 NumberOfViews="1" URL="file:/home/desonia/psLib/src/fileUtils/psFits.c" > 12 <View0 line="257"Type="Source" />12 <View0 Type="Source" /> 13 13 </Doc2> 14 14 <Doc3 NumberOfViews="1" URL="file:/home/desonia/psLib/src/image/psImage.h" > 15 <View0 line="0"Type="Source" />15 <View0 Type="Source" /> 16 16 </Doc3> 17 17 <Doc4 NumberOfViews="1" URL="file:/home/desonia/psLib/src/image/psImageIO.c" > 18 <View0 line="20"Type="Source" />18 <View0 Type="Source" /> 19 19 </Doc4> 20 20 <Doc5 NumberOfViews="1" URL="file:/home/desonia/psLib/src/fileUtils/psFileUtilsErrors.dat" > 21 <View0 line="20"Type="Source" />21 <View0 Type="Source" /> 22 22 </Doc5> 23 23 <Doc6 NumberOfViews="1" URL="file:/home/desonia/psLib/src/image/psImageErrors.dat" > 24 <View0 line="57"Type="Source" />24 <View0 Type="Source" /> 25 25 </Doc6> 26 26 <Doc7 NumberOfViews="1" URL="file:/home/desonia/psLib/src/sysUtils/psLogMsg.h" > 27 <View0 line=" 0" Type="Source" />27 <View0 line="36" Type="Source" /> 28 28 </Doc7> 29 29 </DocsAndViews> -
trunk/psLib/src/astronomy/psMetadata.c
r2985 r3025 12 12 * @author Ross Harman, MHPCC 13 13 * 14 * @version $Revision: 1.4 8$ $Name: not supported by cvs2svn $15 * @date $Date: 2005-01-1 3 23:27:06$14 * @version $Revision: 1.49 $ $Name: not supported by cvs2svn $ 15 * @date $Date: 2005-01-17 20:58:20 $ 16 16 * 17 17 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 495 495 psMetadataLookupNumTYPE(F64) 496 496 psMetadataLookupNumTYPE(S32) 497 psMetadataLookupNumTYPE(Bool) 497 498 498 499 psMetadataItem* psMetadataGet(psMetadata *md, psS32 where) -
trunk/psLib/src/astronomy/psMetadata.h
r2975 r3025 11 11 * @author Ross Harman, MHPCC 12 12 * 13 * @version $Revision: 1.3 3$ $Name: not supported by cvs2svn $14 * @date $Date: 2005-01-1 3 21:09:39$13 * @version $Revision: 1.34 $ $Name: not supported by cvs2svn $ 14 * @date $Date: 2005-01-17 20:58:20 $ 15 15 * 16 16 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 240 240 ); 241 241 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 */ 250 psBool 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 242 256 /** Find an item in the metadata collection based on key name and return its integer value. 243 257 * -
trunk/psLib/src/collections/psMetadata.c
r2985 r3025 12 12 * @author Ross Harman, MHPCC 13 13 * 14 * @version $Revision: 1.4 8$ $Name: not supported by cvs2svn $15 * @date $Date: 2005-01-1 3 23:27:06$14 * @version $Revision: 1.49 $ $Name: not supported by cvs2svn $ 15 * @date $Date: 2005-01-17 20:58:20 $ 16 16 * 17 17 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 495 495 psMetadataLookupNumTYPE(F64) 496 496 psMetadataLookupNumTYPE(S32) 497 psMetadataLookupNumTYPE(Bool) 497 498 498 499 psMetadataItem* psMetadataGet(psMetadata *md, psS32 where) -
trunk/psLib/src/collections/psMetadata.h
r2975 r3025 11 11 * @author Ross Harman, MHPCC 12 12 * 13 * @version $Revision: 1.3 3$ $Name: not supported by cvs2svn $14 * @date $Date: 2005-01-1 3 21:09:39$13 * @version $Revision: 1.34 $ $Name: not supported by cvs2svn $ 14 * @date $Date: 2005-01-17 20:58:20 $ 15 15 * 16 16 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 240 240 ); 241 241 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 */ 250 psBool 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 242 256 /** Find an item in the metadata collection based on key name and return its integer value. 243 257 * -
trunk/psLib/src/collections/psVector.h
r2204 r3025 11 11 * @author Ross Harman, MHPCC 12 12 * 13 * @version $Revision: 1.2 5$ $Name: not supported by cvs2svn $14 * @date $Date: 200 4-10-27 00:57:31 $13 * @version $Revision: 1.26 $ $Name: not supported by cvs2svn $ 14 * @date $Date: 2005-01-17 20:58:21 $ 15 15 * 16 16 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 37 37 38 38 union { 39 psBool B; ///< Boolean data. 39 40 psU8* U8; ///< Unsigned 8-bit integer data. 40 41 psU16* U16; ///< Unsigned 16-bit integer data. … … 63 64 /** Allocate a vector. 64 65 * 65 * Uses psLib memory allocation functions to create a vector collection of 66 * Uses psLib memory allocation functions to create a vector collection of 66 67 * data as defined by the psType type. 67 68 * … … 75 76 /** Reallocate a vector. 76 77 * 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 79 80 * contained within the vector. 80 81 * … … 89 90 /** Recycle a vector. 90 91 * 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 93 94 * parameter. 94 95 * … … 107 108 /** Copy a vector, converting types. 108 109 * 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, 110 111 * converting numeric types to a specified type. 111 112 * … … 133 134 /** Creates an array of indices based on sort ordered of array. 134 135 * 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. 137 138 * 138 139 * @return psVector* vector of the indices of sort. -
trunk/psLib/src/dataIO/psFileUtilsErrors.dat
r2965 r3025 34 34 psFits_NOT_IMAGE_TYPE Current FITS HDU type must be an image. 35 35 psFits_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.36 psFits_TABLE_EMPTY Can't create a table without any rows. 37 37 psFits_CFITSIO_ERROR CFITSIO error: %s 38 38 psFits_METATYPE_INVALID Specified FITS metadata type, %c, is not supported. -
trunk/psLib/src/dataIO/psFileUtilsErrors.h
r2965 r3025 7 7 * @author Robert DeSonia, MHPCC 8 8 * 9 * @version $Revision: 1. 7$ $Name: not supported by cvs2svn $10 * @date $Date: 2005-01-1 3 01:54:25$9 * @version $Revision: 1.8 $ $Name: not supported by cvs2svn $ 10 * @date $Date: 2005-01-17 20:58:21 $ 11 11 * 12 12 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 56 56 #define PS_ERRORTEXT_psFits_NOT_IMAGE_TYPE "Current FITS HDU type must be an image." 57 57 #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." 59 59 #define PS_ERRORTEXT_psFits_CFITSIO_ERROR "CFITSIO error: %s" 60 60 #define PS_ERRORTEXT_psFits_METATYPE_INVALID "Specified FITS metadata type, %c, is not supported." -
trunk/psLib/src/dataIO/psFits.c
r2994 r3025 7 7 * @author Robert DeSonia, MHPCC 8 8 * 9 * @version $Revision: 1.1 0$ $Name: not supported by cvs2svn $10 * @date $Date: 2005-01-1 4 19:40:33$9 * @version $Revision: 1.11 $ $Name: not supported by cvs2svn $ 10 * @date $Date: 2005-01-17 20:58:21 $ 11 11 * 12 12 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 165 165 switch (type) { 166 166 case PS_TYPE_BOOL: 167 *fitsType = "1L";167 *fitsType = psStringCopy("1L"); 168 168 break; 169 169 case PS_TYPE_S32: 170 *fitsType = "1J";170 *fitsType = psStringCopy("1J"); 171 171 break; 172 172 case PS_TYPE_F32: 173 *fitsType = "1E";173 *fitsType = psStringCopy("1E"); 174 174 break; 175 175 case PS_TYPE_F64: 176 *fitsType = "1D";176 *fitsType = psStringCopy("1D"); 177 177 break; 178 178 // XXX: Handle other types, e.g., Vectors, etc. … … 1028 1028 1029 1029 // the row parameter in the proper range? 1030 if (row < 1 || row >numRows) {1030 if (row < 0 || row >= numRows) { 1031 1031 psError(PS_ERR_BAD_PARAMETER_VALUE, true, 1032 1032 PS_ERRORTEXT_psFits_ROW_INVALID, … … 1056 1056 if (status == 0) { 1057 1057 1058 #define READ_TABLE_ROW_CASE(FITSTYPE, TYPE) \1058 #define READ_TABLE_ROW_CASE(FITSTYPE, NATIVETYPE, TYPE) \ 1059 1059 case FITSTYPE: { \ 1060 ps##TYPE value; \1060 NATIVETYPE value; \ 1061 1061 int anynul = 0; \ 1062 1062 fits_read_col(fits->p_fd, FITSTYPE, col,row+1, \ … … 1064 1064 if (anynul == 0) { \ 1065 1065 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); \ 1068 1068 } \ 1069 }\1070 break;1069 break; \ 1070 } 1071 1071 1072 1072 switch (typecode) { 1073 1073 case TBYTE: 1074 1074 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 } 1078 1092 default: 1079 1093 psTrace("psFits.psFitsReadTableRow", 2, … … 1266 1280 // get the size of the FITS table 1267 1281 long numRows = 0; 1268 int numCols = 0;1269 1282 fits_get_num_rows(fits->p_fd, &numRows, &status); 1270 fits_get_num_cols(fits->p_fd, &numCols, &status);1271 1283 if ( status != 0) { 1272 1284 char fitsErr[MAX_STRING_LENGTH]; … … 1278 1290 } 1279 1291 1280 psArray* table = psArrayAlloc(num Cols);1292 psArray* table = psArrayAlloc(numRows); 1281 1293 1282 1294 for (int row = 0; row < numRows; row++) { … … 1293 1305 { 1294 1306 int status = 0; 1307 psMetadataItem* item; 1295 1308 1296 1309 if (fits == NULL) { … … 1307 1320 1308 1321 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 } 1309 1328 1310 1329 // find all the columns needed 1311 psArray* columns = psArrayAlloc( 16);1330 psArray* columns = psArrayAlloc(((psMetadata*)table->data[0])->list->size); 1312 1331 columns->n=0; 1313 1332 1314 1333 // find the unique items in the array of metadata 'rows' 1315 psMetadataItem* item;1316 1334 for (int row=0; row < rows; row++) { 1317 1335 psMetadata* rowMeta = table->data[row]; … … 1329 1347 } 1330 1348 if (! found) { 1331 psArrayAdd(columns, columns->nalloc, item);1349 psArrayAdd(columns, columns->nalloc, psMemIncrRefCounter(item)); 1332 1350 } 1333 1351 } … … 1347 1365 for (int n=0; n < columns->n; n++) { 1348 1366 char* fitsType; 1349 columnNames->data[n] = ((psMetadataItem*)columns->data[n])->name;1367 columnNames->data[n] = psMemIncrRefCounter(((psMetadataItem*)columns->data[n])->name); 1350 1368 if ( ! convertPsTypeToBinaryTForm(((psMetadataItem*)columns->data[n])->pType, 1351 1369 &fitsType)) { … … 1366 1384 &status); 1367 1385 1386 psFree(columnNames); 1387 psFree(columnTypes); 1388 1368 1389 // fill in the table elements with data 1369 1390 for (int n = 0; n < columns->n; n++) { 1370 1391 int row; 1371 1392 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 }1376 1393 1377 1394 if (item->type == PS_META_PRIMITIVE) { … … 1380 1397 case PS_TYPE_S32: 1381 1398 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); 1383 1401 } 1384 1402 fits_write_col_int(fits->p_fd, 1385 n , // column number1403 n+1, // column number 1386 1404 1, // firstrow 1387 1405 1, // firstelem … … 1392 1410 case PS_TYPE_F32: 1393 1411 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); 1395 1414 } 1396 1415 fits_write_col_flt(fits->p_fd, 1397 n , // column number1416 n+1, // column number 1398 1417 1, // firstrow 1399 1418 1, // firstelem … … 1402 1421 &status); 1403 1422 break; 1404 case PS_TYPE_ S64:1423 case PS_TYPE_F64: 1405 1424 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); 1407 1427 } 1408 1428 fits_write_col_dbl(fits->p_fd, 1409 n , // column number1429 n+1, // column number 1410 1430 1, // firstrow 1411 1431 1, // firstelem … … 1414 1434 &status); 1415 1435 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; 1416 1449 default: 1417 1450 // XXX: error message 1418 psFree(col); 1419 psFree(columnItems); 1420 psFree(columnNames); 1421 psFree(columnTypes); 1422 psFree(columns); 1423 return false; 1451 break; 1424 1452 } 1425 1453 psFree(col); 1426 1454 } else if (item->type == PS_META_STR) { 1427 1455 psArray* col = psArrayAlloc(table->n); … … 1436 1464 (char**)col->data, 1437 1465 &status); 1438 } 1439 } 1466 psFree(col); 1467 } 1468 } 1469 1470 psFree(columns); 1440 1471 1441 1472 return true; -
trunk/psLib/src/fileUtils/psFileUtilsErrors.dat
r2965 r3025 34 34 psFits_NOT_IMAGE_TYPE Current FITS HDU type must be an image. 35 35 psFits_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.36 psFits_TABLE_EMPTY Can't create a table without any rows. 37 37 psFits_CFITSIO_ERROR CFITSIO error: %s 38 38 psFits_METATYPE_INVALID Specified FITS metadata type, %c, is not supported. -
trunk/psLib/src/fileUtils/psFileUtilsErrors.h
r2965 r3025 7 7 * @author Robert DeSonia, MHPCC 8 8 * 9 * @version $Revision: 1. 7$ $Name: not supported by cvs2svn $10 * @date $Date: 2005-01-1 3 01:54:25$9 * @version $Revision: 1.8 $ $Name: not supported by cvs2svn $ 10 * @date $Date: 2005-01-17 20:58:21 $ 11 11 * 12 12 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 56 56 #define PS_ERRORTEXT_psFits_NOT_IMAGE_TYPE "Current FITS HDU type must be an image." 57 57 #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." 59 59 #define PS_ERRORTEXT_psFits_CFITSIO_ERROR "CFITSIO error: %s" 60 60 #define PS_ERRORTEXT_psFits_METATYPE_INVALID "Specified FITS metadata type, %c, is not supported." -
trunk/psLib/src/fileUtils/psFits.c
r2994 r3025 7 7 * @author Robert DeSonia, MHPCC 8 8 * 9 * @version $Revision: 1.1 0$ $Name: not supported by cvs2svn $10 * @date $Date: 2005-01-1 4 19:40:33$9 * @version $Revision: 1.11 $ $Name: not supported by cvs2svn $ 10 * @date $Date: 2005-01-17 20:58:21 $ 11 11 * 12 12 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 165 165 switch (type) { 166 166 case PS_TYPE_BOOL: 167 *fitsType = "1L";167 *fitsType = psStringCopy("1L"); 168 168 break; 169 169 case PS_TYPE_S32: 170 *fitsType = "1J";170 *fitsType = psStringCopy("1J"); 171 171 break; 172 172 case PS_TYPE_F32: 173 *fitsType = "1E";173 *fitsType = psStringCopy("1E"); 174 174 break; 175 175 case PS_TYPE_F64: 176 *fitsType = "1D";176 *fitsType = psStringCopy("1D"); 177 177 break; 178 178 // XXX: Handle other types, e.g., Vectors, etc. … … 1028 1028 1029 1029 // the row parameter in the proper range? 1030 if (row < 1 || row >numRows) {1030 if (row < 0 || row >= numRows) { 1031 1031 psError(PS_ERR_BAD_PARAMETER_VALUE, true, 1032 1032 PS_ERRORTEXT_psFits_ROW_INVALID, … … 1056 1056 if (status == 0) { 1057 1057 1058 #define READ_TABLE_ROW_CASE(FITSTYPE, TYPE) \1058 #define READ_TABLE_ROW_CASE(FITSTYPE, NATIVETYPE, TYPE) \ 1059 1059 case FITSTYPE: { \ 1060 ps##TYPE value; \1060 NATIVETYPE value; \ 1061 1061 int anynul = 0; \ 1062 1062 fits_read_col(fits->p_fd, FITSTYPE, col,row+1, \ … … 1064 1064 if (anynul == 0) { \ 1065 1065 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); \ 1068 1068 } \ 1069 }\1070 break;1069 break; \ 1070 } 1071 1071 1072 1072 switch (typecode) { 1073 1073 case TBYTE: 1074 1074 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 } 1078 1092 default: 1079 1093 psTrace("psFits.psFitsReadTableRow", 2, … … 1266 1280 // get the size of the FITS table 1267 1281 long numRows = 0; 1268 int numCols = 0;1269 1282 fits_get_num_rows(fits->p_fd, &numRows, &status); 1270 fits_get_num_cols(fits->p_fd, &numCols, &status);1271 1283 if ( status != 0) { 1272 1284 char fitsErr[MAX_STRING_LENGTH]; … … 1278 1290 } 1279 1291 1280 psArray* table = psArrayAlloc(num Cols);1292 psArray* table = psArrayAlloc(numRows); 1281 1293 1282 1294 for (int row = 0; row < numRows; row++) { … … 1293 1305 { 1294 1306 int status = 0; 1307 psMetadataItem* item; 1295 1308 1296 1309 if (fits == NULL) { … … 1307 1320 1308 1321 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 } 1309 1328 1310 1329 // find all the columns needed 1311 psArray* columns = psArrayAlloc( 16);1330 psArray* columns = psArrayAlloc(((psMetadata*)table->data[0])->list->size); 1312 1331 columns->n=0; 1313 1332 1314 1333 // find the unique items in the array of metadata 'rows' 1315 psMetadataItem* item;1316 1334 for (int row=0; row < rows; row++) { 1317 1335 psMetadata* rowMeta = table->data[row]; … … 1329 1347 } 1330 1348 if (! found) { 1331 psArrayAdd(columns, columns->nalloc, item);1349 psArrayAdd(columns, columns->nalloc, psMemIncrRefCounter(item)); 1332 1350 } 1333 1351 } … … 1347 1365 for (int n=0; n < columns->n; n++) { 1348 1366 char* fitsType; 1349 columnNames->data[n] = ((psMetadataItem*)columns->data[n])->name;1367 columnNames->data[n] = psMemIncrRefCounter(((psMetadataItem*)columns->data[n])->name); 1350 1368 if ( ! convertPsTypeToBinaryTForm(((psMetadataItem*)columns->data[n])->pType, 1351 1369 &fitsType)) { … … 1366 1384 &status); 1367 1385 1386 psFree(columnNames); 1387 psFree(columnTypes); 1388 1368 1389 // fill in the table elements with data 1369 1390 for (int n = 0; n < columns->n; n++) { 1370 1391 int row; 1371 1392 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 }1376 1393 1377 1394 if (item->type == PS_META_PRIMITIVE) { … … 1380 1397 case PS_TYPE_S32: 1381 1398 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); 1383 1401 } 1384 1402 fits_write_col_int(fits->p_fd, 1385 n , // column number1403 n+1, // column number 1386 1404 1, // firstrow 1387 1405 1, // firstelem … … 1392 1410 case PS_TYPE_F32: 1393 1411 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); 1395 1414 } 1396 1415 fits_write_col_flt(fits->p_fd, 1397 n , // column number1416 n+1, // column number 1398 1417 1, // firstrow 1399 1418 1, // firstelem … … 1402 1421 &status); 1403 1422 break; 1404 case PS_TYPE_ S64:1423 case PS_TYPE_F64: 1405 1424 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); 1407 1427 } 1408 1428 fits_write_col_dbl(fits->p_fd, 1409 n , // column number1429 n+1, // column number 1410 1430 1, // firstrow 1411 1431 1, // firstelem … … 1414 1434 &status); 1415 1435 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; 1416 1449 default: 1417 1450 // XXX: error message 1418 psFree(col); 1419 psFree(columnItems); 1420 psFree(columnNames); 1421 psFree(columnTypes); 1422 psFree(columns); 1423 return false; 1451 break; 1424 1452 } 1425 1453 psFree(col); 1426 1454 } else if (item->type == PS_META_STR) { 1427 1455 psArray* col = psArrayAlloc(table->n); … … 1436 1464 (char**)col->data, 1437 1465 &status); 1438 } 1439 } 1466 psFree(col); 1467 } 1468 } 1469 1470 psFree(columns); 1440 1471 1441 1472 return true; -
trunk/psLib/src/fits/psFits.c
r2994 r3025 7 7 * @author Robert DeSonia, MHPCC 8 8 * 9 * @version $Revision: 1.1 0$ $Name: not supported by cvs2svn $10 * @date $Date: 2005-01-1 4 19:40:33$9 * @version $Revision: 1.11 $ $Name: not supported by cvs2svn $ 10 * @date $Date: 2005-01-17 20:58:21 $ 11 11 * 12 12 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 165 165 switch (type) { 166 166 case PS_TYPE_BOOL: 167 *fitsType = "1L";167 *fitsType = psStringCopy("1L"); 168 168 break; 169 169 case PS_TYPE_S32: 170 *fitsType = "1J";170 *fitsType = psStringCopy("1J"); 171 171 break; 172 172 case PS_TYPE_F32: 173 *fitsType = "1E";173 *fitsType = psStringCopy("1E"); 174 174 break; 175 175 case PS_TYPE_F64: 176 *fitsType = "1D";176 *fitsType = psStringCopy("1D"); 177 177 break; 178 178 // XXX: Handle other types, e.g., Vectors, etc. … … 1028 1028 1029 1029 // the row parameter in the proper range? 1030 if (row < 1 || row >numRows) {1030 if (row < 0 || row >= numRows) { 1031 1031 psError(PS_ERR_BAD_PARAMETER_VALUE, true, 1032 1032 PS_ERRORTEXT_psFits_ROW_INVALID, … … 1056 1056 if (status == 0) { 1057 1057 1058 #define READ_TABLE_ROW_CASE(FITSTYPE, TYPE) \1058 #define READ_TABLE_ROW_CASE(FITSTYPE, NATIVETYPE, TYPE) \ 1059 1059 case FITSTYPE: { \ 1060 ps##TYPE value; \1060 NATIVETYPE value; \ 1061 1061 int anynul = 0; \ 1062 1062 fits_read_col(fits->p_fd, FITSTYPE, col,row+1, \ … … 1064 1064 if (anynul == 0) { \ 1065 1065 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); \ 1068 1068 } \ 1069 }\1070 break;1069 break; \ 1070 } 1071 1071 1072 1072 switch (typecode) { 1073 1073 case TBYTE: 1074 1074 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 } 1078 1092 default: 1079 1093 psTrace("psFits.psFitsReadTableRow", 2, … … 1266 1280 // get the size of the FITS table 1267 1281 long numRows = 0; 1268 int numCols = 0;1269 1282 fits_get_num_rows(fits->p_fd, &numRows, &status); 1270 fits_get_num_cols(fits->p_fd, &numCols, &status);1271 1283 if ( status != 0) { 1272 1284 char fitsErr[MAX_STRING_LENGTH]; … … 1278 1290 } 1279 1291 1280 psArray* table = psArrayAlloc(num Cols);1292 psArray* table = psArrayAlloc(numRows); 1281 1293 1282 1294 for (int row = 0; row < numRows; row++) { … … 1293 1305 { 1294 1306 int status = 0; 1307 psMetadataItem* item; 1295 1308 1296 1309 if (fits == NULL) { … … 1307 1320 1308 1321 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 } 1309 1328 1310 1329 // find all the columns needed 1311 psArray* columns = psArrayAlloc( 16);1330 psArray* columns = psArrayAlloc(((psMetadata*)table->data[0])->list->size); 1312 1331 columns->n=0; 1313 1332 1314 1333 // find the unique items in the array of metadata 'rows' 1315 psMetadataItem* item;1316 1334 for (int row=0; row < rows; row++) { 1317 1335 psMetadata* rowMeta = table->data[row]; … … 1329 1347 } 1330 1348 if (! found) { 1331 psArrayAdd(columns, columns->nalloc, item);1349 psArrayAdd(columns, columns->nalloc, psMemIncrRefCounter(item)); 1332 1350 } 1333 1351 } … … 1347 1365 for (int n=0; n < columns->n; n++) { 1348 1366 char* fitsType; 1349 columnNames->data[n] = ((psMetadataItem*)columns->data[n])->name;1367 columnNames->data[n] = psMemIncrRefCounter(((psMetadataItem*)columns->data[n])->name); 1350 1368 if ( ! convertPsTypeToBinaryTForm(((psMetadataItem*)columns->data[n])->pType, 1351 1369 &fitsType)) { … … 1366 1384 &status); 1367 1385 1386 psFree(columnNames); 1387 psFree(columnTypes); 1388 1368 1389 // fill in the table elements with data 1369 1390 for (int n = 0; n < columns->n; n++) { 1370 1391 int row; 1371 1392 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 }1376 1393 1377 1394 if (item->type == PS_META_PRIMITIVE) { … … 1380 1397 case PS_TYPE_S32: 1381 1398 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); 1383 1401 } 1384 1402 fits_write_col_int(fits->p_fd, 1385 n , // column number1403 n+1, // column number 1386 1404 1, // firstrow 1387 1405 1, // firstelem … … 1392 1410 case PS_TYPE_F32: 1393 1411 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); 1395 1414 } 1396 1415 fits_write_col_flt(fits->p_fd, 1397 n , // column number1416 n+1, // column number 1398 1417 1, // firstrow 1399 1418 1, // firstelem … … 1402 1421 &status); 1403 1422 break; 1404 case PS_TYPE_ S64:1423 case PS_TYPE_F64: 1405 1424 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); 1407 1427 } 1408 1428 fits_write_col_dbl(fits->p_fd, 1409 n , // column number1429 n+1, // column number 1410 1430 1, // firstrow 1411 1431 1, // firstelem … … 1414 1434 &status); 1415 1435 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; 1416 1449 default: 1417 1450 // XXX: error message 1418 psFree(col); 1419 psFree(columnItems); 1420 psFree(columnNames); 1421 psFree(columnTypes); 1422 psFree(columns); 1423 return false; 1451 break; 1424 1452 } 1425 1453 psFree(col); 1426 1454 } else if (item->type == PS_META_STR) { 1427 1455 psArray* col = psArrayAlloc(table->n); … … 1436 1464 (char**)col->data, 1437 1465 &status); 1438 } 1439 } 1466 psFree(col); 1467 } 1468 } 1469 1470 psFree(columns); 1440 1471 1441 1472 return true; -
trunk/psLib/src/mathtypes/psVector.h
r2204 r3025 11 11 * @author Ross Harman, MHPCC 12 12 * 13 * @version $Revision: 1.2 5$ $Name: not supported by cvs2svn $14 * @date $Date: 200 4-10-27 00:57:31 $13 * @version $Revision: 1.26 $ $Name: not supported by cvs2svn $ 14 * @date $Date: 2005-01-17 20:58:21 $ 15 15 * 16 16 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 37 37 38 38 union { 39 psBool B; ///< Boolean data. 39 40 psU8* U8; ///< Unsigned 8-bit integer data. 40 41 psU16* U16; ///< Unsigned 16-bit integer data. … … 63 64 /** Allocate a vector. 64 65 * 65 * Uses psLib memory allocation functions to create a vector collection of 66 * Uses psLib memory allocation functions to create a vector collection of 66 67 * data as defined by the psType type. 67 68 * … … 75 76 /** Reallocate a vector. 76 77 * 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 79 80 * contained within the vector. 80 81 * … … 89 90 /** Recycle a vector. 90 91 * 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 93 94 * parameter. 94 95 * … … 107 108 /** Copy a vector, converting types. 108 109 * 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, 110 111 * converting numeric types to a specified type. 111 112 * … … 133 134 /** Creates an array of indices based on sort ordered of array. 134 135 * 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. 137 138 * 138 139 * @return psVector* vector of the indices of sort. -
trunk/psLib/src/sys/psType.h
r2763 r3025 11 11 * @author Ross Harman, MHPCC 12 12 * 13 * @version $Revision: 1.2 6$ $Name: not supported by cvs2svn $14 * @date $Date: 200 4-12-21 00:37:51 $13 * @version $Revision: 1.27 $ $Name: not supported by cvs2svn $ 14 * @date $Date: 2005-01-17 20:58:21 $ 15 15 * 16 16 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 78 78 79 79 typedef psU8 psMaskType; ///< the C datatype for a mask image 80 80 typedef psBool psBOOL; ///< allow psBOOL to be used instead of psBool (for macros) 81 81 82 82 #define PS_MIN_S8 INT8_MIN /**< minimum valid psS8 value */ -
trunk/psLib/src/sysUtils/psType.h
r2763 r3025 11 11 * @author Ross Harman, MHPCC 12 12 * 13 * @version $Revision: 1.2 6$ $Name: not supported by cvs2svn $14 * @date $Date: 200 4-12-21 00:37:51 $13 * @version $Revision: 1.27 $ $Name: not supported by cvs2svn $ 14 * @date $Date: 2005-01-17 20:58:21 $ 15 15 * 16 16 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 78 78 79 79 typedef psU8 psMaskType; ///< the C datatype for a mask image 80 80 typedef psBool psBOOL; ///< allow psBOOL to be used instead of psBool (for macros) 81 81 82 82 #define PS_MIN_S8 INT8_MIN /**< minimum valid psS8 value */ -
trunk/psLib/src/types/psMetadata.c
r2985 r3025 12 12 * @author Ross Harman, MHPCC 13 13 * 14 * @version $Revision: 1.4 8$ $Name: not supported by cvs2svn $15 * @date $Date: 2005-01-1 3 23:27:06$14 * @version $Revision: 1.49 $ $Name: not supported by cvs2svn $ 15 * @date $Date: 2005-01-17 20:58:20 $ 16 16 * 17 17 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 495 495 psMetadataLookupNumTYPE(F64) 496 496 psMetadataLookupNumTYPE(S32) 497 psMetadataLookupNumTYPE(Bool) 497 498 498 499 psMetadataItem* psMetadataGet(psMetadata *md, psS32 where) -
trunk/psLib/src/types/psMetadata.h
r2975 r3025 11 11 * @author Ross Harman, MHPCC 12 12 * 13 * @version $Revision: 1.3 3$ $Name: not supported by cvs2svn $14 * @date $Date: 2005-01-1 3 21:09:39$13 * @version $Revision: 1.34 $ $Name: not supported by cvs2svn $ 14 * @date $Date: 2005-01-17 20:58:20 $ 15 15 * 16 16 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 240 240 ); 241 241 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 */ 250 psBool 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 242 256 /** Find an item in the metadata collection based on key name and return its integer value. 243 257 * -
trunk/psLib/test/dataIO/tst_psFits.c
r2993 r3025 6 6 * @author Robert DeSonia, MHPCC 7 7 * 8 * @version $Revision: 1. 6$ $Name: not supported by cvs2svn $9 * @date $Date: 2005-01-1 4 19:21:55$8 * @version $Revision: 1.7 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2005-01-17 20:58:22 $ 10 10 * 11 11 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 19 19 20 20 static bool makeMulti(void); // implicitly tests psFitsSetExtName 21 static bool makeTable(void); 21 22 const char* multiFilename = "multi.fits"; 23 const char* tableFilename = "table.fits"; 24 const int tableNumRows = 10; 22 25 23 26 static psS32 tst_psFitsAlloc( void ); … … 26 29 static psS32 tst_psFitsReadHeader( void ); 27 30 static psS32 tst_psFitsReadHeaderSet( void ); 31 static psS32 tst_psFitsReadTable( void ); 28 32 29 33 testDescription tests[] = { … … 35 39 {tst_psFitsMoveExtNum, 803, "psFitsGetSize", 0, true}, 36 40 {tst_psFitsReadHeader, 804, "psFitsReadHeader", 0, false}, 37 {tst_psFitsReadHeaderSet, 0, "psFitsReadHeaderSet", 0, false}, 41 {tst_psFitsReadHeaderSet,805, "psFitsReadHeaderSet", 0, false}, 42 {tst_psFitsReadTable,809, "psFitsReadTable", 0, false}, 38 43 {NULL} 39 44 }; … … 110 115 } 111 116 117 bool makeTable(void) 118 { 119 120 if (access(tableFilename, F_OK) != 0) { 121 psFits* fitsFile = psFitsAlloc(tableFilename); 122 123 if (fitsFile == NULL) { 124 psError(PS_ERR_UNKNOWN, false, 125 "Could not create 'table' FITS file."); 126 return false; 127 } 128 129 // make the PHU an image (per FITS standard, it must be) 130 psImage* image = psImageAlloc(16,16,PS_TYPE_F32); 131 132 if (! psFitsWriteImage(fitsFile,NULL,image,1) ) { 133 psError(PS_ERR_UNKNOWN, false, 134 "Could not write PHU image."); 135 return false; 136 } 137 138 psFree(image); 139 140 // build a table structure 141 psArray* table = psArrayAlloc(tableNumRows); 142 table->n = 0; 143 for (int row = 0; row < tableNumRows; row++) { 144 psMetadata* header = psMetadataAlloc(); 145 146 psMetadataAdd(header,PS_LIST_TAIL, "MYINT", 147 PS_TYPE_S32, PS_META_PRIMITIVE, 148 "psS32 Item", (psS32)row); 149 150 psMetadataAdd(header,PS_LIST_TAIL, "MYFLT", 151 PS_TYPE_F32, PS_META_PRIMITIVE, 152 "psF32 Item", (float)(1.0f/(float)(1+row))); 153 154 psMetadataAdd(header,PS_LIST_TAIL, "MYDBL", 155 PS_TYPE_F64, PS_META_PRIMITIVE, 156 "psF64 Item", (double)(1.0/(double)(1+row))); 157 158 psMetadataAdd(header,PS_LIST_TAIL, "MYBOOL", 159 PS_TYPE_BOOL, PS_META_PRIMITIVE, 160 "psBool Item", 161 (row%2 == 0)); 162 163 psArrayAdd(table,0,header); 164 } 165 166 psFitsWriteTable(fitsFile, NULL, table, "table-1"); 167 168 psFree(table); 169 psFree(fitsFile); 170 } 171 172 return true; 173 } 174 112 175 psS32 tst_psFitsAlloc( void ) 113 176 { … … 176 239 psFits* fits = psFitsAlloc(multiFilename); 177 240 241 if (fits == NULL) { 242 psError(PS_ERR_UNKNOWN, false, 243 "psFitsAlloc returned NULL on existing file."); 244 return 1; 245 } 246 178 247 int numHDUs = psFitsGetSize(fits); 179 248 … … 290 359 291 360 psFits* fits = psFitsAlloc(multiFilename); 361 362 if (fits == NULL) { 363 psError(PS_ERR_UNKNOWN, false, 364 "psFitsAlloc returned NULL on existing file."); 365 return 1; 366 } 292 367 293 368 int numHDUs = psFitsGetSize(fits); … … 489 564 psFits* fits = psFitsAlloc(multiFilename); 490 565 566 if (fits == NULL) { 567 psError(PS_ERR_UNKNOWN, false, 568 "psFitsAlloc returned NULL on existing file."); 569 return 1; 570 } 571 491 572 int numHDUs = psFitsGetSize(fits); 492 573 … … 594 675 psFits* fits = psFitsAlloc(multiFilename); 595 676 677 if (fits == NULL) { 678 psError(PS_ERR_UNKNOWN, false, 679 "psFitsAlloc returned NULL on existing file."); 680 return 1; 681 } 682 596 683 int numHDUs = psFitsGetSize(fits); 597 684 … … 701 788 return 0; 702 789 } 790 791 static psS32 tst_psFitsReadTable( void ) 792 { 793 794 795 if (! makeTable() ) { 796 return 1; 797 } 798 799 psFits* fits = psFitsAlloc(tableFilename); 800 801 if (fits == NULL) { 802 psError(PS_ERR_UNKNOWN, false, 803 "psFitsAlloc returned NULL on existing file."); 804 return 1; 805 } 806 807 psFitsMoveExtNum(fits,1,false); 808 809 psArray* table = psFitsReadTable(fits); 810 811 if (table == NULL) { 812 psError(PS_ERR_UNKNOWN, false, 813 "psFitsReadTable returned NULL unexpectedly."); 814 return 2; 815 } 816 817 if (table->n != tableNumRows) { 818 psError(PS_ERR_UNKNOWN, false, 819 "Expected %d rows, but read %d.", 820 tableNumRows, table->n); 821 return 3; 822 } 823 824 825 for (int row = 0; row < table->n; row++) { 826 psMetadata* rowData = table->data[row]; 827 828 psS32 intItem = psMetadataLookupS32(rowData, "MYINT",NULL); 829 psF32 fltItem = psMetadataLookupF32(rowData, "MYFLT",NULL); 830 psF64 dblItem = psMetadataLookupF64(rowData, "MYDBL",NULL); 831 psBool boolItem = psMetadataLookupBool(rowData, "MYBOOL",NULL); 832 833 if (intItem != row) { 834 psError(PS_ERR_UNKNOWN, true, 835 "Failed to retrieve psS32 metadata item from file. Got %d vs %d", 836 intItem, row); 837 return 20; 838 } 839 840 if (fabsf(fltItem - 1.0f/(float)(1+row)) > FLT_EPSILON) { 841 psError(PS_ERR_UNKNOWN, true, 842 "Failed to retrieve psF32 metadata item from file. Got %f vs %f", 843 fltItem,1.0f/(float)(1+row)); 844 return 21; 845 } 846 847 if (abs(dblItem - 1.0/(double)(1+row)) > DBL_EPSILON) { 848 psError(PS_ERR_UNKNOWN, true, 849 "Failed to retrieve psF64 metadata item from file. Got %g vs %g", 850 dblItem, 1.0/(double)(1+row)); 851 return 22; 852 } 853 854 if (boolItem != (row%2 == 0)) { 855 psError(PS_ERR_UNKNOWN, true, 856 "Failed to retrieve psBool metadata item from file."); 857 return 23; 858 } 859 860 } 861 862 psFree(table); 863 psFree(fits); 864 865 psArray* nullTest = psFitsReadTable(NULL); 866 867 if (nullTest != NULL || psErrorGetStackSize() != 1) { 868 psError(PS_ERR_UNKNOWN, true, 869 "psFitsReadTable returned non-NULL when given NULL."); 870 return 30; 871 } 872 873 return 0; 874 } -
trunk/psLib/test/dataIO/verified/tst_psFits.stderr
r2993 r3025 91 91 ---> TESTPOINT PASSED (psImage{psFitsReadHeaderSet} | tst_psFits.c) 92 92 93 /***************************** TESTPOINT ******************************************\ 94 * TestFile: tst_psFits.c * 95 * TestPoint: psImage{psFitsReadTable} * 96 * TestType: Positive * 97 \**********************************************************************************/ 98 99 <DATE><TIME>|<HOST>|E|psFitsReadTable (psFits.c:<LINENO>) 100 The input psFits object can not NULL. 101 102 ---> TESTPOINT PASSED (psImage{psFitsReadTable} | tst_psFits.c) 103 -
trunk/psLib/test/fileUtils/tst_psFits.c
r2993 r3025 6 6 * @author Robert DeSonia, MHPCC 7 7 * 8 * @version $Revision: 1. 6$ $Name: not supported by cvs2svn $9 * @date $Date: 2005-01-1 4 19:21:55$8 * @version $Revision: 1.7 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2005-01-17 20:58:22 $ 10 10 * 11 11 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 19 19 20 20 static bool makeMulti(void); // implicitly tests psFitsSetExtName 21 static bool makeTable(void); 21 22 const char* multiFilename = "multi.fits"; 23 const char* tableFilename = "table.fits"; 24 const int tableNumRows = 10; 22 25 23 26 static psS32 tst_psFitsAlloc( void ); … … 26 29 static psS32 tst_psFitsReadHeader( void ); 27 30 static psS32 tst_psFitsReadHeaderSet( void ); 31 static psS32 tst_psFitsReadTable( void ); 28 32 29 33 testDescription tests[] = { … … 35 39 {tst_psFitsMoveExtNum, 803, "psFitsGetSize", 0, true}, 36 40 {tst_psFitsReadHeader, 804, "psFitsReadHeader", 0, false}, 37 {tst_psFitsReadHeaderSet, 0, "psFitsReadHeaderSet", 0, false}, 41 {tst_psFitsReadHeaderSet,805, "psFitsReadHeaderSet", 0, false}, 42 {tst_psFitsReadTable,809, "psFitsReadTable", 0, false}, 38 43 {NULL} 39 44 }; … … 110 115 } 111 116 117 bool makeTable(void) 118 { 119 120 if (access(tableFilename, F_OK) != 0) { 121 psFits* fitsFile = psFitsAlloc(tableFilename); 122 123 if (fitsFile == NULL) { 124 psError(PS_ERR_UNKNOWN, false, 125 "Could not create 'table' FITS file."); 126 return false; 127 } 128 129 // make the PHU an image (per FITS standard, it must be) 130 psImage* image = psImageAlloc(16,16,PS_TYPE_F32); 131 132 if (! psFitsWriteImage(fitsFile,NULL,image,1) ) { 133 psError(PS_ERR_UNKNOWN, false, 134 "Could not write PHU image."); 135 return false; 136 } 137 138 psFree(image); 139 140 // build a table structure 141 psArray* table = psArrayAlloc(tableNumRows); 142 table->n = 0; 143 for (int row = 0; row < tableNumRows; row++) { 144 psMetadata* header = psMetadataAlloc(); 145 146 psMetadataAdd(header,PS_LIST_TAIL, "MYINT", 147 PS_TYPE_S32, PS_META_PRIMITIVE, 148 "psS32 Item", (psS32)row); 149 150 psMetadataAdd(header,PS_LIST_TAIL, "MYFLT", 151 PS_TYPE_F32, PS_META_PRIMITIVE, 152 "psF32 Item", (float)(1.0f/(float)(1+row))); 153 154 psMetadataAdd(header,PS_LIST_TAIL, "MYDBL", 155 PS_TYPE_F64, PS_META_PRIMITIVE, 156 "psF64 Item", (double)(1.0/(double)(1+row))); 157 158 psMetadataAdd(header,PS_LIST_TAIL, "MYBOOL", 159 PS_TYPE_BOOL, PS_META_PRIMITIVE, 160 "psBool Item", 161 (row%2 == 0)); 162 163 psArrayAdd(table,0,header); 164 } 165 166 psFitsWriteTable(fitsFile, NULL, table, "table-1"); 167 168 psFree(table); 169 psFree(fitsFile); 170 } 171 172 return true; 173 } 174 112 175 psS32 tst_psFitsAlloc( void ) 113 176 { … … 176 239 psFits* fits = psFitsAlloc(multiFilename); 177 240 241 if (fits == NULL) { 242 psError(PS_ERR_UNKNOWN, false, 243 "psFitsAlloc returned NULL on existing file."); 244 return 1; 245 } 246 178 247 int numHDUs = psFitsGetSize(fits); 179 248 … … 290 359 291 360 psFits* fits = psFitsAlloc(multiFilename); 361 362 if (fits == NULL) { 363 psError(PS_ERR_UNKNOWN, false, 364 "psFitsAlloc returned NULL on existing file."); 365 return 1; 366 } 292 367 293 368 int numHDUs = psFitsGetSize(fits); … … 489 564 psFits* fits = psFitsAlloc(multiFilename); 490 565 566 if (fits == NULL) { 567 psError(PS_ERR_UNKNOWN, false, 568 "psFitsAlloc returned NULL on existing file."); 569 return 1; 570 } 571 491 572 int numHDUs = psFitsGetSize(fits); 492 573 … … 594 675 psFits* fits = psFitsAlloc(multiFilename); 595 676 677 if (fits == NULL) { 678 psError(PS_ERR_UNKNOWN, false, 679 "psFitsAlloc returned NULL on existing file."); 680 return 1; 681 } 682 596 683 int numHDUs = psFitsGetSize(fits); 597 684 … … 701 788 return 0; 702 789 } 790 791 static psS32 tst_psFitsReadTable( void ) 792 { 793 794 795 if (! makeTable() ) { 796 return 1; 797 } 798 799 psFits* fits = psFitsAlloc(tableFilename); 800 801 if (fits == NULL) { 802 psError(PS_ERR_UNKNOWN, false, 803 "psFitsAlloc returned NULL on existing file."); 804 return 1; 805 } 806 807 psFitsMoveExtNum(fits,1,false); 808 809 psArray* table = psFitsReadTable(fits); 810 811 if (table == NULL) { 812 psError(PS_ERR_UNKNOWN, false, 813 "psFitsReadTable returned NULL unexpectedly."); 814 return 2; 815 } 816 817 if (table->n != tableNumRows) { 818 psError(PS_ERR_UNKNOWN, false, 819 "Expected %d rows, but read %d.", 820 tableNumRows, table->n); 821 return 3; 822 } 823 824 825 for (int row = 0; row < table->n; row++) { 826 psMetadata* rowData = table->data[row]; 827 828 psS32 intItem = psMetadataLookupS32(rowData, "MYINT",NULL); 829 psF32 fltItem = psMetadataLookupF32(rowData, "MYFLT",NULL); 830 psF64 dblItem = psMetadataLookupF64(rowData, "MYDBL",NULL); 831 psBool boolItem = psMetadataLookupBool(rowData, "MYBOOL",NULL); 832 833 if (intItem != row) { 834 psError(PS_ERR_UNKNOWN, true, 835 "Failed to retrieve psS32 metadata item from file. Got %d vs %d", 836 intItem, row); 837 return 20; 838 } 839 840 if (fabsf(fltItem - 1.0f/(float)(1+row)) > FLT_EPSILON) { 841 psError(PS_ERR_UNKNOWN, true, 842 "Failed to retrieve psF32 metadata item from file. Got %f vs %f", 843 fltItem,1.0f/(float)(1+row)); 844 return 21; 845 } 846 847 if (abs(dblItem - 1.0/(double)(1+row)) > DBL_EPSILON) { 848 psError(PS_ERR_UNKNOWN, true, 849 "Failed to retrieve psF64 metadata item from file. Got %g vs %g", 850 dblItem, 1.0/(double)(1+row)); 851 return 22; 852 } 853 854 if (boolItem != (row%2 == 0)) { 855 psError(PS_ERR_UNKNOWN, true, 856 "Failed to retrieve psBool metadata item from file."); 857 return 23; 858 } 859 860 } 861 862 psFree(table); 863 psFree(fits); 864 865 psArray* nullTest = psFitsReadTable(NULL); 866 867 if (nullTest != NULL || psErrorGetStackSize() != 1) { 868 psError(PS_ERR_UNKNOWN, true, 869 "psFitsReadTable returned non-NULL when given NULL."); 870 return 30; 871 } 872 873 return 0; 874 } -
trunk/psLib/test/fileUtils/verified/tst_psFits.stderr
r2993 r3025 91 91 ---> TESTPOINT PASSED (psImage{psFitsReadHeaderSet} | tst_psFits.c) 92 92 93 /***************************** TESTPOINT ******************************************\ 94 * TestFile: tst_psFits.c * 95 * TestPoint: psImage{psFitsReadTable} * 96 * TestType: Positive * 97 \**********************************************************************************/ 98 99 <DATE><TIME>|<HOST>|E|psFitsReadTable (psFits.c:<LINENO>) 100 The input psFits object can not NULL. 101 102 ---> TESTPOINT PASSED (psImage{psFitsReadTable} | tst_psFits.c) 103
Note:
See TracChangeset
for help on using the changeset viewer.
