Changeset 2974 for trunk/psLib/test/dataIO/tst_psFits.c
- Timestamp:
- Jan 13, 2005, 11:09:18 AM (22 years ago)
- File:
-
- 1 edited
-
trunk/psLib/test/dataIO/tst_psFits.c (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/test/dataIO/tst_psFits.c
r2968 r2974 6 6 * @author Robert DeSonia, MHPCC 7 7 * 8 * @version $Revision: 1. 4$ $Name: not supported by cvs2svn $9 * @date $Date: 2005-01-13 02:20:44$8 * @version $Revision: 1.5 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2005-01-13 21:09:18 $ 10 10 * 11 11 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 23 23 static psS32 tst_psFitsAlloc( void ); 24 24 static psS32 tst_psFitsMoveExtName( void ); // also tests psFitsGetExtName 25 static psS32 tst_psFitsMoveExtNum( void ); // also tests psFitsGetExtNum 25 static psS32 tst_psFitsMoveExtNum( void ); // also tests psFitsGetExtNum, psFitsGetSize 26 static psS32 tst_psFitsReadHeader( void ); 26 27 27 28 testDescription tests[] = { 28 29 {tst_psFitsAlloc, 801, "psFitsAlloc", 0, false}, 29 30 {tst_psFitsMoveExtName, 802, "psFitsMoveExtName", 0, false}, 31 {tst_psFitsMoveExtName, 802, "psFitsGetExtName", 0, true}, 30 32 {tst_psFitsMoveExtNum, 803, "psFitsMoveExtNum", 0, false}, 33 {tst_psFitsMoveExtNum, 803, "psFitsGetExtNum", 0, true}, 34 {tst_psFitsMoveExtNum, 803, "psFitsGetSize", 0, true}, 35 {tst_psFitsReadHeader, 0, "psFitsReadHeader", 0, false}, 31 36 {NULL} 32 37 }; … … 37 42 38 43 return ( ! runTestSuite( stderr, "psImage", tests, argc, argv ) ); 44 } 45 46 bool makeMulti(void) 47 { 48 49 if (access(multiFilename, F_OK) != 0) { 50 psFits* fitsFile = psFitsAlloc(multiFilename); 51 52 if (fitsFile == NULL) { 53 psError(PS_ERR_UNKNOWN, false, 54 "Could not create 'multi' FITS file."); 55 return false; 56 } 57 58 psImage* image = psImageAlloc(16,16,PS_TYPE_F32); 59 60 char extname[80]; 61 for (int lcv = 0; lcv < 8; lcv++) { 62 snprintf(extname,80,"ext-%d", lcv); 63 64 psMetadata* header = psMetadataAlloc(); 65 66 psMetadataAdd(header,PS_LIST_TAIL, "MYINT", 67 PS_TYPE_S32, PS_META_PRIMITIVE, 68 "psS32 Item", (psS32)lcv); 69 70 psMetadataAdd(header,PS_LIST_TAIL, "MYFLT", 71 PS_TYPE_F32, PS_META_PRIMITIVE, 72 "psF32 Item", (float)(1.0f/(float)(1+lcv))); 73 74 psMetadataAdd(header,PS_LIST_TAIL, "MYDBL", 75 PS_TYPE_F64, PS_META_PRIMITIVE, 76 "psF64 Item", (double)(1.0/(double)(1+lcv))); 77 78 psMetadataAdd(header,PS_LIST_TAIL, "MYBOOL", 79 PS_TYPE_BOOL, PS_META_PRIMITIVE, 80 "psBool Item", 81 (lcv%2 == 0)); 82 83 psMetadataAdd(header,PS_LIST_TAIL, "MYSTR", 84 PS_TYPE_PTR, PS_META_STR, 85 "String Item", 86 extname); 87 88 // set the pixels in the image 89 psBinaryOp(image,image,"=",psScalarAlloc(lcv,PS_TYPE_F32)); 90 if (! psFitsWriteImage(fitsFile,header,image,1) ) { 91 psError(PS_ERR_UNKNOWN, false, 92 "Could not write image."); 93 return false; 94 } 95 if (! psFitsSetExtName(fitsFile,extname) ) { 96 psError(PS_ERR_UNKNOWN, false, 97 "Could not write extension name."); 98 return false; 99 } 100 101 psFree(header); 102 } 103 psFree(image); 104 psFree(fitsFile); 105 } 106 107 return true; 39 108 } 40 109 … … 409 478 410 479 411 bool makeMulti(void) 480 481 static psS32 tst_psFitsReadHeader( void ) 412 482 { 413 414 if (access(multiFilename, F_OK) != 0) { 415 psFits* fitsFile = psFitsAlloc(multiFilename); 416 417 if (fitsFile == NULL) { 418 psError(PS_ERR_UNKNOWN, false, 419 "Could not create 'multi' FITS file."); 420 return false; 421 } 422 423 psImage* image = psImageAlloc(16,16,PS_TYPE_F32); 424 425 char extname[80]; 426 for (int lcv = 0; lcv < 8; lcv++) { 427 // set the pixels in the image 428 psBinaryOp(image,image,"=",psScalarAlloc(lcv,PS_TYPE_F32)); 429 if (! psFitsWriteImage(fitsFile,NULL,image,1) ) { 430 psError(PS_ERR_UNKNOWN, false, 431 "Could not write image."); 432 return false; 433 } 434 snprintf(extname,80,"ext-%d", lcv); 435 if (! psFitsSetExtName(fitsFile,extname) ) { 436 psError(PS_ERR_UNKNOWN, false, 437 "Could not write extension name."); 438 return false; 439 } 440 } 441 psFree(image); 442 psFree(fitsFile); 443 } 444 445 return true; 483 if (! makeMulti() ) { 484 return 1; 485 } 486 487 psFits* fits = psFitsAlloc(multiFilename); 488 489 int numHDUs = psFitsGetSize(fits); 490 491 if (numHDUs < 8) { 492 psError(PS_ERR_UNKNOWN,true, 493 "The 'multi' FITS file does not have multiple HDUs."); 494 return 2; 495 } 496 497 char extname[80]; 498 for (int hdunum = 0; hdunum < numHDUs; hdunum++) { 499 snprintf(extname,80,"ext-%d",hdunum); 500 501 psFitsMoveExtNum(fits,hdunum,false); 502 503 psMetadata* header = psFitsReadHeader(NULL,fits); 504 if (header == NULL) { 505 psError(PS_ERR_UNKNOWN, false, 506 "Failed to read header"); 507 return 3; 508 } 509 510 psMetadata* header2 = psMetadataAlloc(); 511 header2 = psFitsReadHeader(header2,fits); 512 if (header2 == NULL) { 513 psError(PS_ERR_UNKNOWN, false, 514 "Failed to read header"); 515 return 11; 516 } 517 518 if (header->list->size < 1 || header->list->size != header2->list->size) { 519 psError(PS_ERR_UNKNOWN, true, 520 "Reading the header given a NULL input psMetadata differed " 521 "from giving an existing psMetadata."); 522 return 12; 523 } 524 525 // check for the extra metadata items 526 psS32 intItem = psMetadataLookupS32(header, "MYINT",NULL); 527 psF32 fltItem = psMetadataLookupF32(header, "MYFLT",NULL); 528 psF64 dblItem = psMetadataLookupF64(header, "MYDBL",NULL); 529 psMetadataItem* boolItem = psMetadataLookup(header, "MYBOOL"); 530 char* strItem = psMetadataLookupPtr(header, "MYSTR",NULL); 531 532 if (intItem != hdunum) { 533 psError(PS_ERR_UNKNOWN, true, 534 "Failed to retrieve psS32 metadata item from file."); 535 return 20; 536 } 537 538 if (fabsf(fltItem - 1.0f/(float)(1+hdunum)) > FLT_EPSILON) { 539 psError(PS_ERR_UNKNOWN, true, 540 "Failed to retrieve psF32 metadata item from file. Got %f vs %f", 541 fltItem,1.0f/(float)(1+hdunum)); 542 return 21; 543 } 544 545 if (abs(dblItem - 1.0/(double)(1+hdunum)) > DBL_EPSILON) { 546 psError(PS_ERR_UNKNOWN, true, 547 "Failed to retrieve psF64 metadata item from file. Got %g vs %g", 548 dblItem, 1.0/(double)(1+hdunum)); 549 return 22; 550 } 551 552 if (boolItem == NULL || 553 boolItem->type != PS_META_PRIMITIVE || 554 boolItem->pType != PS_TYPE_BOOL) { 555 psError(PS_ERR_UNKNOWN, true, 556 "Failed to retrieve psBool metadata item from file."); 557 return 23; 558 } 559 560 if (strItem == NULL || strncmp(strItem,extname,strlen(extname)) != 0) { 561 psError(PS_ERR_UNKNOWN, true, 562 "Failed to retrieve string metadata item from file. Got '%s' vs '%s' (%d)", 563 strItem,extname,strlen(extname)); 564 return 24; 565 } 566 567 psFree(header); 568 psFree(header2); 569 } 570 571 psLogMsg(__func__,PS_LOG_INFO,"following should be an error (input psFits = NULL)"); 572 psMetadata* header = psFitsReadHeader(NULL,NULL); 573 574 if (header != NULL || psErrorGetStackSize() != 1) { 575 psError(PS_ERR_UNKNOWN, true, 576 "psFitsReadHeader didn't error on a NULL psFits."); 577 return 30; 578 } 579 580 581 psFree(fits); 582 583 return 0; 446 584 } 447
Note:
See TracChangeset
for help on using the changeset viewer.
