Changeset 6874
- Timestamp:
- Apr 17, 2006, 12:00:35 PM (20 years ago)
- Location:
- trunk
- Files:
-
- 4 added
- 2 deleted
- 19 edited
-
psLib/src/astro/psCoord.h (modified) (2 diffs)
-
psLib/src/fits/psFitsImage.c (modified) (9 diffs)
-
psLib/src/fits/psFitsImage.h (modified) (3 diffs)
-
psLib/src/imageops/psImageStats.c (modified) (3 diffs)
-
psLib/src/imageops/psImageStats.h (modified) (2 diffs)
-
psLib/src/imageops/psImageStructManip.h (modified) (2 diffs)
-
psLib/src/math/Makefile.am (modified) (2 diffs)
-
psLib/src/math/psRegion.c (added)
-
psLib/src/math/psRegion.h (added)
-
psLib/src/math/psRegionForImage.c (added)
-
psLib/src/math/psRegionForImage.h (added)
-
psLib/src/mathtypes/psImage.c (modified) (4 diffs)
-
psLib/src/mathtypes/psImage.h (modified) (5 diffs)
-
psLib/src/psErrorText_en.dat (modified) (1 diff)
-
psLib/src/pslib_strict.h (modified) (2 diffs)
-
psLib/src/sys/psString.c (modified) (2 diffs)
-
psLib/src/sys/psString.h (modified) (2 diffs)
-
psLib/src/sys/psType.h (modified) (2 diffs)
-
psLib/src/types/psMetadata.c (modified) (8 diffs)
-
psLib/src/types/psMetadata.h (modified) (4 diffs)
-
psLib/src/types/psPixels.h (modified) (3 diffs)
-
psModules/src/astrom/pmFPAConstruct.c (modified) (1 diff)
-
psModules/src/objects/psEllipse.c (deleted)
-
psModules/src/objects/psEllipse.h (deleted)
-
psModules/src/pslib/psMetadataItemParse.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/astro/psCoord.h
r6230 r6874 11 11 * @author GLG, MHPCC 12 12 * 13 * @version $Revision: 1.5 0$ $Name: not supported by cvs2svn $14 * @date $Date: 2006-0 1-28 01:31:44$13 * @version $Revision: 1.51 $ $Name: not supported by cvs2svn $ 14 * @date $Date: 2006-04-17 22:00:03 $ 15 15 * 16 16 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 26 26 #include "psPolynomial.h" 27 27 #include "psPixels.h" 28 #include "psRegion.h" 28 29 //#include "psTime.h" 29 30 -
trunk/psLib/src/fits/psFitsImage.c
r6767 r6874 7 7 * @author Robert DeSonia, MHPCC 8 8 * 9 * @version $Revision: 1. 2$ $Name: not supported by cvs2svn $10 * @date $Date: 2006-04- 04 19:52:42$9 * @version $Revision: 1.3 $ $Name: not supported by cvs2svn $ 10 * @date $Date: 2006-04-17 22:00:03 $ 11 11 * 12 12 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 120 120 } 121 121 122 psImage* psFitsReadImage(psImage* output, // a psImage to recycle. 123 const psFits* fits, // the psFits object 122 psImage* psFitsReadImage(const psFits* fits, // the psFits object 124 123 psRegion region, // the region in the FITS image to read 125 124 int z) // the z-plane in the FITS image cube to read … … 140 139 psError(PS_ERR_BAD_PARAMETER_NULL, true, 141 140 PS_ERRORTEXT_psFits_NULL); 142 psFree(output);143 141 return NULL; 144 142 } … … 166 164 PS_ERRORTEXT_psFits_DATATYPE_UNKNOWN, 167 165 fitsErr); 168 psFree(output);169 166 return NULL; 170 167 } … … 176 173 PS_ERRORTEXT_psFits_IMAGE_DIM_UNKNOWN, 177 174 fitsErr); 178 psFree(output);179 175 return NULL; 180 176 } … … 185 181 PS_ERRORTEXT_psFits_IMAGE_DIMENSION_UNSUPPORTED, 186 182 nAxis); 187 psFree(output);188 183 return NULL; 189 184 } … … 195 190 PS_ERRORTEXT_psFits_IMAGE_SIZE_UNKNOWN, 196 191 fitsErr); 197 psFree(output);198 192 return NULL; 199 193 } … … 260 254 PS_ERRORTEXT_psFits_FITS_TYPE_UNSUPPORTED, 261 255 bitPix); 262 psFree(output); 263 return NULL; 264 } 265 266 output = psImageRecycle(output, 267 lastPixel[0]-firstPixel[0]+1, 268 lastPixel[1]-firstPixel[1]+1, 269 datatype); 270 271 if (output == NULL) { 272 psError(PS_ERR_UNKNOWN, false, 273 "Failed to allocate a properly sized image."); 274 return false; 275 } 256 return NULL; 257 } 258 259 psImage *output = psImageAlloc(lastPixel[0]-firstPixel[0]+1, 260 lastPixel[1]-firstPixel[1]+1, 261 datatype); 276 262 277 263 // n.b., this assumes contiguous image buffer … … 532 518 } 533 519 520 psArray *psFitsReadImageCube(const psFits *fits, psRegion region) 521 { 522 int nAxis = 0; // Number of axes 523 long nAxes[3]; // Number of pixels on each axis 524 int status = 0; // cfitsio status value 525 char fitsErr[80] = ""; // CFITSIO error message string 526 527 if (fits == NULL) { 528 psError(PS_ERR_BAD_PARAMETER_NULL, true, 529 PS_ERRORTEXT_psFits_NULL); 530 return NULL; 531 } 532 533 // Some of this replicates what is in psFitsReadImage, so it's a little inefficient. But it saves 534 // code replication, and should be sufficient for our needs. 535 536 if (fits_get_img_dim(fits->fd, &nAxis, &status) != 0) { 537 (void)fits_get_errstatus(status, fitsErr); 538 psError(PS_ERR_IO, true, 539 PS_ERRORTEXT_psFits_IMAGE_DIM_UNKNOWN, 540 fitsErr); 541 return NULL; 542 } 543 544 if (nAxis == 2) { 545 psArray *images = psArrayAlloc(1); // Single image plane 546 images->data[0] = psFitsReadImage(fits, region, 0); 547 return images; 548 } 549 if (nAxis == 3) { 550 if (fits_get_img_size(fits->fd, nAxis, nAxes, &status) != 0) { 551 (void)fits_get_errstatus(status, fitsErr); 552 psError(PS_ERR_IO, true, 553 PS_ERRORTEXT_psFits_IMAGE_SIZE_UNKNOWN, 554 fitsErr); 555 return NULL; 556 } 557 558 psArray *images = psArrayAlloc(nAxes[2]); // Array of image planes 559 for (int i = 0; i < nAxes[2]; i++) { 560 images->data[i] = psFitsReadImage(fits, region, i); 561 } 562 563 return images; 564 } 565 566 // Bad dimensionality 567 psError(PS_ERR_IO, true, PS_ERRORTEXT_psFits_IMAGE_DIMENSION_UNSUPPORTED, nAxis); 568 return NULL; 569 } 570 571 bool psFitsWriteImageCube(psFits *fits, psMetadata *header, const psArray *input, const char *extname) 572 { 573 if (fits == NULL) { 574 psError(PS_ERR_BAD_PARAMETER_NULL, true, 575 PS_ERRORTEXT_psFits_NULL); 576 return false; 577 } 578 579 if (input == NULL) { 580 psError(PS_ERR_BAD_PARAMETER_NULL, true, 581 PS_ERRORTEXT_psFits_IMAGE_NULL); 582 return false; 583 } 584 585 if (input->n == 0) { 586 psError(PS_ERR_BAD_PARAMETER_SIZE, true, PS_ERRORTEXT_psFits_ARRAY_EMPTY); 587 return false; 588 } 589 590 if (input->n == 1) { 591 // The problem reduces to one already solved 592 return psFitsWriteImage(fits, header, input->data[0], 1, extname); 593 } 594 595 // Check that all images are of the same size 596 psImage *testImage = input->data[0];// First image off the array 597 int numCols = testImage->numCols; // Number of columns 598 int numRows = testImage->numRows; // Number of rows 599 for (int i = 1; i < input->n; i++) { 600 testImage = input->data[i]; 601 if (testImage->numCols != numCols || testImage->numRows != numRows) { 602 psError(PS_ERR_BAD_PARAMETER_SIZE, true, PS_ERRORTEXT_psFits_ARRAY_SIZE_DIFFER); 603 return false; 604 } 605 } 606 607 // Need to check the header to make sure NAXIS and NAXIS[1-3] are correct 608 psMetadata *headerCopy = NULL; // Copy of header 609 if (header) { 610 headerCopy = psMemIncrRefCounter(header); 611 } else { 612 headerCopy = psMetadataAlloc(); 613 } 614 bool update = psMetadataAddS32(headerCopy, PS_LIST_HEAD, "NAXIS", PS_META_REPLACE, "Dimensionality", 3) && 615 psMetadataAddS32(headerCopy, PS_LIST_HEAD, "NAXIS1", PS_META_REPLACE, "Number of columns", numCols) && 616 psMetadataAddS32(headerCopy, PS_LIST_HEAD, "NAXIS2", PS_META_REPLACE, "Number of rows", numRows) && 617 psMetadataAddS32(headerCopy, PS_LIST_HEAD, "NAXIS3", PS_META_REPLACE, "Number of image planes", 618 input->n); 619 if (! update) { 620 psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psFits_METADATA_ADD_FAILED, 621 "NAXIS, NAXIS1, NAXIS2, NAXIS3"); 622 psFree(headerCopy); 623 return false; 624 } 625 626 // Now we can safely write the images out. 627 // The first is an psFitsImageWrite to create the extension. 628 // The next are psFitsImageUpdate to write into the extension. 629 if (! psFitsWriteImage(fits, headerCopy, input->data[0], input->n, extname)) { 630 psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psFits_WRITE_PLANE_FAILED, 0); 631 psFree(headerCopy); 632 return false; 633 } 634 psFree(headerCopy); // Free, or drop reference 635 636 for (int i = 1; i < input->n; i++) { 637 if (! psFitsUpdateImage(fits, input->data[i], 0, 0, i)) { 638 psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psFits_WRITE_PLANE_FAILED, i); 639 return false; 640 } 641 } 642 643 return true; 644 } 645 646 bool psFitsUpdateImageCube(psFits *fits, const psArray *input, int x0, int y0) 647 { 648 if (fits == NULL) { 649 psError(PS_ERR_BAD_PARAMETER_NULL, true, 650 PS_ERRORTEXT_psFits_NULL); 651 return false; 652 } 653 654 if (input == NULL) { 655 psError(PS_ERR_BAD_PARAMETER_NULL, true, 656 PS_ERRORTEXT_psFits_IMAGE_NULL); 657 return false; 658 } 659 660 if (input->n == 0) { 661 psError(PS_ERR_BAD_PARAMETER_SIZE, true, PS_ERRORTEXT_psFits_ARRAY_EMPTY); 662 return false; 663 } 664 665 for (int i = 0; i < input->n; i++) { 666 if (! psFitsUpdateImage(fits, input->data[i], x0, y0, i)) { 667 psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psFits_UPDATE_PLANE_FAILED, i); 668 return false; 669 } 670 } 671 672 return true; 673 } 674 -
trunk/psLib/src/fits/psFitsImage.h
r6767 r6874 7 7 * @author Robert DeSonia, MHPCC 8 8 * 9 * @version $Revision: 1. 2$ $Name: not supported by cvs2svn $10 * @date $Date: 2006-04- 04 19:52:42$9 * @version $Revision: 1.3 $ $Name: not supported by cvs2svn $ 10 * @date $Date: 2006-04-17 22:00:03 $ 11 11 * 12 12 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 32 32 */ 33 33 psImage* psFitsReadImage( 34 psImage* out, ///< a psImage to recycle.35 34 const psFits* fits, ///< the psFits object 36 35 psRegion region, ///< the region in the FITS image to read … … 78 77 ); 79 78 79 psArray *psFitsReadImageCube(const psFits *fits, psRegion region); 80 bool psFitsWriteImageCube(psFits *fits, psMetadata *header, const psArray *input, const char *extname); 81 bool psFitsUpdateImageCube(psFits *fits, const psArray *input, int x0, int y0); 82 80 83 /// @} 81 84 -
trunk/psLib/src/imageops/psImageStats.c
r6778 r6874 9 9 * @author GLG, MHPCC 10 10 * 11 * @version $Revision: 1.9 2$ $Name: not supported by cvs2svn $12 * @date $Date: 2006-04- 05 01:49:40$11 * @version $Revision: 1.93 $ $Name: not supported by cvs2svn $ 12 * @date $Date: 2006-04-17 22:00:03 $ 13 13 * 14 14 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 31 31 #include "psConstants.h" 32 32 #include "psErrorText.h" 33 #include "psRegion.h" 34 #include "psRegionForImage.h" 33 35 34 36 /// This routine must determine the various statistics for the image. … … 748 750 return -1; 749 751 }/* else if (col0 == col1 && row0 == row1) { 750 psError(PS_ERR_BAD_PARAMETER_VALUE, true,751 "Invalid psRegion specified. Region contains only 1 pixel.\n");752 return -1;753 }754 */752 psError(PS_ERR_BAD_PARAMETER_VALUE, true, 753 "Invalid psRegion specified. Region contains only 1 pixel.\n"); 754 return -1; 755 } 756 */ 755 757 x0 = col0; 756 758 x1 = col1; -
trunk/psLib/src/imageops/psImageStats.h
r5137 r6874 9 9 * @author GLG, MHPCC 10 10 * 11 * @version $Revision: 1.2 7$ $Name: not supported by cvs2svn $12 * @date $Date: 200 5-09-26 22:35:53 $11 * @version $Revision: 1.28 $ $Name: not supported by cvs2svn $ 12 * @date $Date: 2006-04-17 22:00:03 $ 13 13 * 14 14 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 22 22 #include "psStats.h" 23 23 #include "psPolynomial.h" 24 #include "psRegion.h" 24 25 25 26 /// @addtogroup ImageStats -
trunk/psLib/src/imageops/psImageStructManip.h
r4162 r6874 8 8 * @author Robert DeSonia, MHPCC 9 9 * 10 * @version $Revision: 1. 3$ $Name: not supported by cvs2svn $11 * @date $Date: 200 5-06-08 23:40:45$10 * @version $Revision: 1.4 $ $Name: not supported by cvs2svn $ 11 * @date $Date: 2006-04-17 22:00:03 $ 12 12 * 13 13 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 18 18 19 19 #include "psImage.h" 20 #include "psRegion.h" 20 21 21 22 /// @addtogroup Image -
trunk/psLib/src/math/Makefile.am
r6305 r6874 13 13 psMinimizePolyFit.c \ 14 14 psRandom.c \ 15 psRegion.c \ 16 psRegionForImage.c \ 15 17 psPolynomial.c \ 16 18 psSpline.c \ … … 31 33 psMinimizePolyFit.h \ 32 34 psRandom.h \ 35 psRegion.h \ 36 psRegionForImage.h \ 33 37 psPolynomial.h \ 34 38 psSpline.h \ -
trunk/psLib/src/mathtypes/psImage.c
r6778 r6874 9 9 * @author Ross Harman, MHPCC 10 10 * 11 * @version $Revision: 1.10 1$ $Name: not supported by cvs2svn $12 * @date $Date: 2006-04- 05 01:49:41$11 * @version $Revision: 1.102 $ $Name: not supported by cvs2svn $ 12 * @date $Date: 2006-04-17 22:00:03 $ 13 13 * 14 14 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 104 104 105 105 106 // XXX these have been moved to psRegion* in src/math/ 107 # if 0 106 108 psRegion psRegionSet(float x0, 107 109 float x1, … … 160 162 return psStringCopy(tmpText); 161 163 } 162 163 164 164 165 // set actual region based on image parameters: … … 227 228 return (region); 228 229 } 230 # endif /* commented-out psRegion functions */ 229 231 230 232 bool psImageInit (psImage *image,...) -
trunk/psLib/src/mathtypes/psImage.h
r6227 r6874 11 11 * @author Ross Harman, MHPCC 12 12 * 13 * @version $Revision: 1.7 4$ $Name: not supported by cvs2svn $14 * @date $Date: 2006-0 1-28 01:12:14$13 * @version $Revision: 1.75 $ $Name: not supported by cvs2svn $ 14 * @date $Date: 2006-04-17 22:00:03 $ 15 15 * 16 16 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 84 84 #define P_PSIMAGE_SET_TYPE(img,t) *(psMathType*)&img->type = t 85 85 86 // XXX moved to psRegion.h in src/math 87 # if 0 86 88 /** Basic image region structure. 87 89 * … … 97 99 } 98 100 psRegion; 101 # endif 99 102 100 103 /** Create an image of the specified size and type. … … 124 127 125 128 129 // XXX these have been moved to psRegion* in src/math 130 # if 0 126 131 /** Create a psRegion with the specified attributes. 127 132 * … … 184 189 double radius ///< radius of square 185 190 ); 191 # endif /* commented-out psRegions */ 186 192 187 193 /** Initializes the image with the given value. -
trunk/psLib/src/psErrorText_en.dat
r6766 r6874 147 147 psFits_METADATA_ADD_FAILED Failed to add metadata item, %s. 148 148 psFits_WRITE_FAILED Could not write data to file.\nCFITSIO Error: %s 149 psFits_WRITE_PLANE_FAILED Could not write image plane %d. 150 psFits_UPDATE_PLANE_FAILED Could not update image plane %d. 149 151 psFits_IMAGE_NULL The input psImage was NULL. Need a non-NULL psImage for operation to be performed. 152 psFits_ARRAY_EMPTY The input array was empty. 153 psFits_ARRAY_SIZE_DIFFER The sizes of images in the array differ. 150 154 psFits_METADATA_NULL The input psMetadata was NULL. Need a non-NULL psMetadata for operation to be performed. 151 155 psFits_METADATA_PTYPE_UNSUPPORTED A metadata item's primative type, %d, is not supported. -
trunk/psLib/src/pslib_strict.h
r6504 r6874 9 9 * @author Eric Van Alst, MHPCC 10 10 * 11 * @version $Revision: 1.1 5$ $Name: not supported by cvs2svn $12 * @date $Date: 2006-0 2-28 20:03:22$11 * @version $Revision: 1.16 $ $Name: not supported by cvs2svn $ 12 * @date $Date: 2006-04-17 22:00:03 $ 13 13 * 14 14 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 58 58 #include "psMinimizePolyFit.h" 59 59 #include "psRandom.h" 60 #include "psRegion.h" 61 #include "psRegionForImage.h" 60 62 #include "psPolynomial.h" 61 63 #include "psSpline.h" -
trunk/psLib/src/sys/psString.c
r6278 r6874 13 13 * @author David Robbins, MHPCC 14 14 * 15 * @version $Revision: 1.2 4$ $Name: not supported by cvs2svn $16 * @date $Date: 2006-0 2-01 20:40:56$15 * @version $Revision: 1.25 $ $Name: not supported by cvs2svn $ 16 * @date $Date: 2006-04-17 22:00:03 $ 17 17 * 18 18 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 214 214 } 215 215 216 // given the input string, search for all copies of the key, and replace with the replacement value 217 // the input string may be freed if not needed 218 char *psStringSubstitute (char *input, char *replace, char *key) 219 { 220 221 char *p; 222 223 if (key == NULL) 224 return input; 225 if (strlen(key) == 0) 226 return input; 227 228 while (true) { 229 p = strstr (input, key); 230 if (p == NULL) 231 return input; 232 233 // we have input = xxxkeyxxx 234 // we want output = xxxreplacexxx 235 236 // this is safe since we will subtract strlen(key) elements from input 237 char *output = psAlloc(strlen(input) + strlen(replace) + 1); 238 int Nc = p - input; 239 240 // copy the first segement into 'output' 241 strncpy (output, input, Nc); 242 243 // copy the key replacement to the start of the key 244 245 strcpy (&output[Nc], replace); 246 Nc += strlen (replace); 247 248 // copy the remainder to the end of the replacement 249 strcpy (&output[Nc], p + strlen(key)); 250 251 psFree (input); 252 input = output; 253 } 254 return input; 255 } 256 -
trunk/psLib/src/sys/psString.h
r6278 r6874 14 14 * @author David Robbins, MHPCC 15 15 * 16 * @version $Revision: 1.1 8$ $Name: not supported by cvs2svn $17 * @date $Date: 2006-0 2-01 20:40:56$16 * @version $Revision: 1.19 $ $Name: not supported by cvs2svn $ 17 * @date $Date: 2006-04-17 22:00:03 $ 18 18 * 19 19 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 103 103 ); 104 104 105 // given the input string, search for all copies of the key, and replace with the replacement value 106 // the input string may be freed if not needed 107 char *psStringSubstitute ( 108 char *input, ///< input string to be modified 109 char *replace, ///< replacement value 110 char *key ///< string to be replaced in input 111 ); 112 105 113 /** @} */// Doxygen - End of SystemGroup Functions 106 114 -
trunk/psLib/src/sys/psType.h
r6349 r6874 10 10 * @author Ross Harman, MHPCC 11 11 * 12 * @version $Revision: 1.4 6$ $Name: not supported by cvs2svn $13 * @date $Date: 2006-0 2-08 00:00:35$12 * @version $Revision: 1.47 $ $Name: not supported by cvs2svn $ 13 * @date $Date: 2006-04-17 22:00:03 $ 14 14 * 15 15 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 130 130 PS_DATA_POLYNOMIAL4D, ///< psPolynomial4D 131 131 PS_DATA_PROJECTION, ///< psProjection 132 PS_DATA_REGION, ///< psRegion 132 133 PS_DATA_SCALAR, ///< psScalar 133 134 PS_DATA_SPHERE, ///< psSphere -
trunk/psLib/src/types/psMetadata.c
r6548 r6874 12 12 * @author Ross Harman, MHPCC 13 13 * 14 * @version $Revision: 1.10 1$ $Name: not supported by cvs2svn $15 * @date $Date: 2006-0 3-08 21:09:16$14 * @version $Revision: 1.102 $ $Name: not supported by cvs2svn $ 15 * @date $Date: 2006-04-17 22:00:03 $ 16 16 * 17 17 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 293 293 case PS_DATA_POLYNOMIAL4D: // psPolynomial4D 294 294 case PS_DATA_PROJECTION: // psProjection 295 case PS_DATA_REGION: // psRegion 295 296 case PS_DATA_SCALAR: // psScalar 296 297 case PS_DATA_SPHERE: // psSphere … … 341 342 } 342 343 344 345 psMetadataItem *psMetadataItemCopy(const psMetadataItem *in 346 ) 347 { 348 PS_ASSERT_PTR_NON_NULL(in,NULL); 349 350 psMetadataItem *newItem = NULL; // New metadata item, to be returned 351 352 #define PS_METADATA_ITEM_COPY_CASE(NAME,TYPE) \ 353 case PS_DATA_##NAME: \ 354 newItem = psMetadataItemAlloc(in->name, PS_DATA_##NAME, in->comment, in->data.TYPE); \ 355 break; \ 356 357 switch (in->type) { 358 // Simple types 359 PS_METADATA_ITEM_COPY_CASE(BOOL,B); 360 PS_METADATA_ITEM_COPY_CASE(S8,S8); 361 PS_METADATA_ITEM_COPY_CASE(S16,S16); 362 PS_METADATA_ITEM_COPY_CASE(S32,S32); 363 PS_METADATA_ITEM_COPY_CASE(U8,U8); 364 PS_METADATA_ITEM_COPY_CASE(U16,U16); 365 PS_METADATA_ITEM_COPY_CASE(U32,U32); 366 PS_METADATA_ITEM_COPY_CASE(F32,F32); 367 PS_METADATA_ITEM_COPY_CASE(F64,F64); 368 PS_METADATA_ITEM_COPY_CASE(STRING,V); // This will copy the string, not point at it. 369 case PS_DATA_VECTOR: { 370 psVector *vecCopy = psVectorCopy(NULL, (psVector*)(in->data.V), 371 ((psVector*)(in->data.V))->type.type); 372 if (vecCopy == NULL) { 373 psError(PS_ERR_BAD_PARAMETER_NULL, false, 374 "Error copying vector. Vector skipped.\n"); 375 } else { 376 newItem = psMetadataItemAlloc(in->name, PS_DATA_VECTOR, in->comment, vecCopy); 377 psFree(vecCopy); // Drop reference 378 } 379 break; 380 } 381 case PS_DATA_TIME: { 382 psTime *timeCopy = p_psTimeCopy( (psTime*)(in->data.V) ); 383 if (timeCopy == NULL) { 384 psError(PS_ERR_BAD_PARAMETER_NULL, false, 385 "Error copying time. Time skipped.\n"); 386 } else { 387 newItem = psMetadataItemAlloc(in->name, PS_DATA_TIME, in->comment, timeCopy); 388 psFree(timeCopy); // Drop reference 389 } 390 break; 391 } 392 case PS_DATA_METADATA: { 393 // Metadata: copy the next level and stuff that in too 394 psMetadata *metadata = psMetadataCopy(NULL, in->data.md); 395 newItem = psMetadataItemAlloc(in->name, PS_DATA_METADATA, in->comment, metadata); 396 psFree(metadata); // Drop reference 397 break; 398 } 399 case PS_DATA_REGION: { 400 psRegion *region = in->data.V; // The region 401 psRegion *new = psRegionAlloc(region->x0, region->x1, region->y0, region->y1); // Copy of the region 402 newItem = psMetadataItemAlloc(in->name, PS_DATA_REGION, in->comment, new); 403 psFree(new); // Drop reference 404 break; 405 } 406 default: 407 // Other kinds of pointers 408 psLogMsg(__func__, PS_LOG_WARN, "Copying a pointer in the metadata item: %x\n", in->type); 409 newItem = psMetadataItemAlloc(in->name, in->type, in->comment, in->data.V); 410 break; 411 } 412 413 return newItem; 414 } 415 343 416 psMetadata *psMetadataCopy(psMetadata *out, 344 417 const psMetadata *in) … … 349 422 out = psMetadataAlloc(); 350 423 } 351 // psMetadataItem *item = NULL; 352 psMetadataIterator *iter = NULL; 353 iter = psMetadataIteratorAlloc(*(psMetadata**)&in, PS_LIST_HEAD, NULL); 354 /* 355 item = psMetadataGetAndIncrement(iter); 356 while (item != NULL) { 357 psMetadataAddItem(out, item, PS_LIST_TAIL, 0); 358 item = psMetadataGetAndIncrement(iter); 359 } 360 psFree(item); 361 psFree(iter); 362 return out; 363 */ 424 psMetadataIterator *iter = psMetadataIteratorAlloc(*(psMetadata**)&in, PS_LIST_HEAD, NULL); 364 425 psMetadataItem *inItem = NULL; 365 unsigned long numPointers = 0; // Number of pointers we were forced to copy366 426 while ((inItem = psMetadataGetAndIncrement(iter))) { 367 427 // Need to look for MULTI, which won't be picked up using the iterator. … … 370 430 if (multiCheckItem->type == PS_DATA_METADATA_MULTI) { 371 431 psTrace(__func__, 10, "MULTI: %s (%s)\n", inItem->name, inItem->comment); 372 flag = PS_ DATA_METADATA_MULTI;432 flag = PS_META_DUPLICATE_OK; 373 433 } 374 434 psTrace(__func__, 5, "Copying %s (%s)...\n", inItem->name, inItem->comment); 375 435 376 377 // case PS_TYPE_##NAME: 378 #define PS_METADATA_COPY_CASE(NAME,TYPE) \ 379 case PS_DATA_##NAME: \ 380 if (! psMetadataAdd(out, PS_LIST_TAIL, inItem->name, \ 381 PS_DATA_##NAME | flag, inItem->comment, inItem->data.TYPE)) { \ 382 psErrorStackPrint(stderr, "Error copying %s (%s) in the metadata\n", \ 383 inItem->name, inItem->comment); \ 384 } \ 385 break; 386 387 switch (inItem->type) { 388 // Numerical types 389 PS_METADATA_COPY_CASE(BOOL,B); 390 PS_METADATA_COPY_CASE(S8,S8); 391 PS_METADATA_COPY_CASE(S16,S16); 392 PS_METADATA_COPY_CASE(S32,S32); 393 PS_METADATA_COPY_CASE(U8,U8); 394 PS_METADATA_COPY_CASE(U16,U16); 395 PS_METADATA_COPY_CASE(U32,U32); 396 PS_METADATA_COPY_CASE(F32,F32); 397 PS_METADATA_COPY_CASE(F64,F64); 398 399 case PS_DATA_VECTOR: { 400 psVector *vecCopy = psVectorCopy(NULL, (psVector*)(inItem->data.V), 401 ((psVector*)(inItem->data.V))->type.type); 402 if (vecCopy == NULL) { 403 psError(PS_ERR_BAD_PARAMETER_NULL, false, 404 "Error copying vector. Vector skipped.\n"); 405 } else { 406 psMetadataAddVector(out, PS_LIST_TAIL, inItem->name, flag, 407 inItem->comment, vecCopy); 408 psFree(vecCopy); 409 } 410 break; 411 } 412 case PS_DATA_TIME: { 413 psTime *timeCopy = p_psTimeCopy( (psTime*)(inItem->data.V) ); 414 if (timeCopy == NULL) { 415 psError(PS_ERR_BAD_PARAMETER_NULL, false, 416 "Error copying time. Time skipped.\n"); 417 } else { 418 psMetadataAddTime(out, PS_LIST_TAIL, inItem->name, flag, 419 inItem->comment, timeCopy); 420 psFree(timeCopy); 421 } 422 break; 423 } 424 // String: relying on the fact that this will copy the string, not point at it. 425 case PS_DATA_STRING: 426 psMetadataAdd(out, PS_LIST_TAIL, inItem->name, PS_DATA_STRING | 427 flag, inItem->comment, inItem->data.V); 428 break; 429 // Metadata: copy the next level and stuff that in too 430 case PS_DATA_METADATA: { 431 psMetadata *metadata = psMetadataCopy(NULL, inItem->data.md); 432 psMetadataAdd(out, PS_LIST_TAIL, inItem->name, 433 PS_DATA_METADATA | flag, inItem->comment, metadata); 434 psFree(metadata); 435 break; 436 } 437 // Other kinds of pointers 438 default: 439 numPointers++; 440 psTrace(__func__, 10, "Copying a pointer in the metadata: %x\n", inItem->type); 441 psMetadataAdd(out, PS_LIST_TAIL, inItem->name, inItem->type | flag, 442 inItem->comment, inItem->data.V); 443 break; 444 } 436 // Copy the item and add it on 437 psMetadataItem *newItem = psMetadataItemCopy(inItem); // Copied item 438 if (!psMetadataAddItem(out, newItem, PS_LIST_TAIL, flag)) { 439 psErrorStackPrint(stderr, "Error copying %s (%s) in the metadata\n", inItem->name, 440 inItem->comment); 441 } 442 psFree(newItem); // Drop reference 445 443 } 446 444 psFree(iter); 447 448 if (numPointers > 0) {449 psLogMsg(__func__, PS_LOG_WARN,450 "Forced to copy %d pointers when copying metadata. Updating the "451 "copied psMetadata will affect the original!\n", numPointers);452 }453 445 454 446 return out; … … 528 520 } else { 529 521 // default is to error on duplicate entry. 522 if ((flags & PS_META_NO_REPLACE) != 0) { 523 return true; 524 } 530 525 psError(PS_ERR_BAD_PARAMETER_VALUE, true, 531 526 PS_ERRORTEXT_psMetadata_DUPLICATE_NOT_ALLOWED); … … 554 549 const char *name, 555 550 int format, 556 const char *comment, 557 ...) 551 const char *comment,...) 558 552 { 559 553 PS_ASSERT_PTR_NON_NULL(md,false); … … 1140 1134 psMetadataPrint(item->data.V, level + 1); 1141 1135 break; 1136 case PS_DATA_REGION: { 1137 psString region = psRegionToString(*(psRegion*)item->data.V); 1138 printf("%s", region); 1139 psFree(region); 1140 break; 1141 } 1142 case PS_DATA_LIST: 1143 printf("<a list of unknown contents>"); 1144 break; 1145 case PS_DATA_TIME: { 1146 psString time = psTimeToISO(item->data.V); 1147 printf("%s", time); 1148 psFree(time); 1149 break; 1150 } 1142 1151 default: 1152 printf("\n"); 1143 1153 psError(PS_ERR_IO, false, "Non-printable metadata type: %x\n", item->type); 1144 1154 } -
trunk/psLib/src/types/psMetadata.h
r6251 r6874 11 11 * @author Ross Harman, MHPCC 12 12 * 13 * @version $Revision: 1.7 4$ $Name: not supported by cvs2svn $14 * @date $Date: 2006-0 1-30 20:28:33 $13 * @version $Revision: 1.75 $ $Name: not supported by cvs2svn $ 14 * @date $Date: 2006-04-17 22:00:03 $ 15 15 * 16 16 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 59 59 PS_META_DEFAULT = 0, ///< default behaviour (duplicate entry is an error) 60 60 PS_META_REPLACE = 0x1000000, ///< allow entry to be replaced 61 PS_META_DUPLICATE_OK = 0x2000000, ///< allow duplicate entries 62 PS_META_NULL = 0x4000000 ///< psMetadataItem.data is a NULL value 61 PS_META_NO_REPLACE = 0x2000000, ///< duplicate entry is silently skipped 62 PS_META_DUPLICATE_OK = 0x4000000, ///< allow duplicate entries 63 PS_META_NULL = 0x8000000 ///< psMetadataItem.data is a NULL value 63 64 } psMetadataFlags; 64 65 … … 342 343 ); 343 344 345 /** Creates a new copy of a psMetadataItem. 346 * 347 * @return psMetadataItem*: the copy of the psMetadataItem 348 */ 349 psMetadataItem *psMetadataItemCopy(const psMetadataItem *in ///< metadata item to be copied 350 ); 351 352 344 353 /** Creates a new copy of all the psMetadataItems in the psMetadata collection, in, and 345 354 * returns them in out, or creates a new container if out is NULL. … … 939 948 940 949 950 psPolynomial2D *psPolynomial2DfromMD (psMetadata *folder); 951 bool psPolynomial2DtoMD (psMetadata *md, psPolynomial2D *poly, char *format, ...); 952 953 psPolynomial3D *psPolynomial3DfromMD (psMetadata *folder); 954 bool psPolynomial3DtoMD (psMetadata *md, psPolynomial3D *poly, char *format, ...); 955 956 psPolynomial4D *psPolynomial4DfromMD (psMetadata *folder); 957 bool psPolynomial4DtoMD (psMetadata *md, psPolynomial4D *poly, char *format, ...); 958 959 941 960 /// @} 942 961 -
trunk/psLib/src/types/psPixels.h
r6500 r6874 7 7 * @author Robert DeSonia, MHPCC 8 8 * 9 * @version $Revision: 1. 19$ $Name: not supported by cvs2svn $10 * @date $Date: 2006-0 2-28 02:53:03 $9 * @version $Revision: 1.20 $ $Name: not supported by cvs2svn $ 10 * @date $Date: 2006-04-17 22:00:03 $ 11 11 * 12 12 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 17 17 #include "psImage.h" 18 18 #include "psVector.h" 19 #include "psRegion.h" 19 20 20 21 /// @addtogroup Image … … 125 126 * 126 127 * psMaskToPixels shall return a psPixels consisting of the coordinates in 127 * the mask that match the maskVal. The out pixel list shall be modi ï¬ed if128 * the mask that match the maskVal. The out pixel list shall be modified if 128 129 * supplied, or allocated and returned if NULL. In hte event that mask is 129 130 * NULL, the function shall generate an error and return NULL. -
trunk/psModules/src/astrom/pmFPAConstruct.c
r6872 r6874 104 104 return NULL; 105 105 } 106 // XXX EAM test 107 fprintf (stderr, "phu name: %s == %s\n", keyword, name); 106 108 return psMetadataItemParseString(resultItem); 107 109 } -
trunk/psModules/src/pslib/psMetadataItemParse.c
r6872 r6874 1 1 #include <stdio.h> 2 2 #include "pslib.h" 3 4 # define PS_METADATA_ITEM_PARSE_NUMBER(INTYPE,OUTTYPE) \ 5 case PS_DATA_##INTYPE: { \ 6 return (ps##OUTTYPE)(item->data.INTYPE); } \ 3 7 4 8 psF32 psMetadataItemParseF32(psMetadataItem *item … … 6 10 { 7 11 switch (item->type) { 8 case PS_DATA_F32:9 return item->data.F32;10 case PS_DATA_F64:11 // Assume it's OK to truncate to floating point from double12 return (float)item->data.F64;13 case PS_DATA_S32:14 // Promote to float15 return (float)item->data.S32;12 PS_METADATA_ITEM_PARSE_NUMBER (F32, F32); 13 PS_METADATA_ITEM_PARSE_NUMBER (F64, F32); 14 PS_METADATA_ITEM_PARSE_NUMBER (S8, F32); 15 PS_METADATA_ITEM_PARSE_NUMBER (S16, F32); 16 PS_METADATA_ITEM_PARSE_NUMBER (S32, F32); 17 PS_METADATA_ITEM_PARSE_NUMBER (U8, F32); 18 PS_METADATA_ITEM_PARSE_NUMBER (U16, F32); 19 PS_METADATA_ITEM_PARSE_NUMBER (U32, F32); 16 20 default: 17 21 psError(PS_ERR_IO, true, "Item %s (%s) is not of floating point type (%x) --- treating as NaN.\n", … … 25 29 { 26 30 switch (item->type) { 27 case PS_TYPE_F64:28 return item->data.F64;29 case PS_TYPE_F32:30 // Promote to double31 return (double)item->data.F32;32 case PS_TYPE_S32:33 // Promote to double34 return (double)item->data.S32;31 PS_METADATA_ITEM_PARSE_NUMBER (F32, F64); 32 PS_METADATA_ITEM_PARSE_NUMBER (F64, F64); 33 PS_METADATA_ITEM_PARSE_NUMBER (S8, F64); 34 PS_METADATA_ITEM_PARSE_NUMBER (S16, F64); 35 PS_METADATA_ITEM_PARSE_NUMBER (S32, F64); 36 PS_METADATA_ITEM_PARSE_NUMBER (U8, F64); 37 PS_METADATA_ITEM_PARSE_NUMBER (U16, F64); 38 PS_METADATA_ITEM_PARSE_NUMBER (U32, F64); 35 39 default: 36 40 psError(PS_ERR_IO, true, "Item %s (%s) is not of double-precision floating point type (%x) " … … 61 65 } 62 66 67 # define PS_METADATA_ITEM_PARSE_STRING(TYPE,MODE) \ 68 case PS_DATA_##TYPE: { \ 69 psString value = NULL; \ 70 psStringAppend(&value, MODE, item->data.TYPE); \ 71 return value; } \ 72 63 73 psString psMetadataItemParseString(psMetadataItem *item 64 74 ) … … 67 77 case PS_DATA_STRING: 68 78 return psMemIncrRefCounter(item->data.V); 69 case PS_DATA_F32: { 70 psString value = NULL; // String to return71 psStringAppend(&value, "%f", item->data.F32);72 return value;73 }74 case PS_DATA_S32: {75 psString value = NULL; // String to return76 psStringAppend(&value, "%d", item->data.S32);77 return value;78 } 79 80 PS_METADATA_ITEM_PARSE_STRING(F32, "%f"); 81 PS_METADATA_ITEM_PARSE_STRING(F64, "%f"); 82 PS_METADATA_ITEM_PARSE_STRING(S8, "%d"); 83 PS_METADATA_ITEM_PARSE_STRING(S16, "%d"); 84 PS_METADATA_ITEM_PARSE_STRING(S32, "%d"); 85 PS_METADATA_ITEM_PARSE_STRING(U8, "%d"); 86 PS_METADATA_ITEM_PARSE_STRING(U16, "%d"); 87 PS_METADATA_ITEM_PARSE_STRING(U32, "%d"); 88 79 89 default: 80 90 psError(PS_ERR_IO, true, "Item %s (%s) is not of string type (%x) --- treating as " … … 84 94 } 85 95 96 97 # if 0 98 case PS_DATA_F32: 99 { 100 psString value = NULL; // String to return 101 psStringAppend(&value, "%f", item->data.F32); 102 return value; 103 } 104 case PS_DATA_S32: 105 { 106 psString value = NULL; // String to return 107 psStringAppend(&value, "%d", item->data.S32); 108 return value; 109 } 110 # endif
Note:
See TracChangeset
for help on using the changeset viewer.
