Changeset 24836
- Timestamp:
- Jul 17, 2009, 1:13:04 PM (17 years ago)
- Location:
- trunk/psModules/src
- Files:
-
- 2 added
- 5 edited
-
camera/Makefile.am (modified) (2 diffs)
-
camera/pmFPAfileFringeIO.c (added)
-
camera/pmFPAfileFringeIO.h (added)
-
camera/pmFPAfileIO.c (modified) (3 diffs)
-
detrend/pmFringeStats.c (modified) (7 diffs)
-
detrend/pmFringeStats.h (modified) (2 diffs)
-
psmodules.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/src/camera/Makefile.am
r19695 r24836 23 23 pmFPAfileIO.c \ 24 24 pmFPAfileFitsIO.c \ 25 pmFPAfileFringeIO.c \ 25 26 pmFPAFlags.c \ 26 27 pmFPALevel.c \ … … 51 52 pmFPAfileIO.h \ 52 53 pmFPAfileFitsIO.h \ 54 pmFPAfileFringeIO.h \ 53 55 pmFPAFlags.h \ 54 56 pmFPALevel.h \ -
trunk/psModules/src/camera/pmFPAfileIO.c
r23576 r24836 23 23 #include "pmFPAWrite.h" 24 24 #include "pmFPAfileFitsIO.h" 25 #include "pmFPAfileFringeIO.h" 25 26 #include "pmSpan.h" 26 27 #include "pmFootprint.h" … … 192 193 status = pmFPAviewReadFitsImage(view, file, config); 193 194 if (status) { 194 if (!pmFPAviewReadF itsTable(view, file, "FRINGE")) {195 if (!pmFPAviewReadFringes(view, file)) { 195 196 psError(PS_ERR_UNKNOWN, false, "Unable to read fringe data from %s.\n", file->filename); 196 197 return false; … … 451 452 status = pmFPAviewWriteFitsImage (view, file, config); 452 453 if (status) { 453 if (!pmFPAviewWriteF itsTable(view, file, "FRINGE", config)) {454 if (!pmFPAviewWriteFringes(view, file, config)) { 454 455 psError(PS_ERR_UNKNOWN, false, "Unable to write fringe data from %s.\n", file->filename); 455 456 return false; -
trunk/psModules/src/detrend/pmFringeStats.c
r24095 r24836 464 464 for (long i = 0; i < fringes->n; i++) { 465 465 pmFringeStats *fringe = fringes->data[i]; // The fringe of interest 466 if (!fringe) { 467 psWarning ("skipping empty fringe stats for entry %ld -- video cell?\n", i); 468 continue; 469 } 466 470 pmFringeRegions *regions = fringe->regions; // The fringe regions 467 471 if (numPoints == 0) { … … 496 500 for (long i = 0; i < fringes->n; i++) { 497 501 pmFringeStats *fringe = fringes->data[i]; // The fringe of interest 502 if (!fringe) { 503 psWarning ("skipping empty fringe stats for entry %ld -- video cell?\n", i); 504 continue; 505 } 498 506 pmFringeRegions *regions = fringe->regions; // The fringe regions 499 507 // Copy the data over … … 520 528 ////////////////////////////////////////////////////////////////////////////////////////////////////////////// 521 529 522 bool pmFringesFormat(pmCell *cell,psMetadata *header, const psArray *fringes)523 { 524 PS_ASSERT_PTR_NON_NULL( cell, false);530 psArray *pmFringesFormatTable(psMetadata *header, const psArray *fringes) 531 { 532 PS_ASSERT_PTR_NON_NULL(header, false); 525 533 PS_ASSERT_ARRAY_NON_NULL(fringes, false); 526 534 … … 531 539 if (stats->regions != regions) { 532 540 psError(PS_ERR_BAD_PARAMETER_VALUE, true, "Regions for fringe statistics are not identical.\n"); 533 return false;541 return NULL; 534 542 } 535 543 } … … 557 565 // Vectors: x, y, mask, f, df 558 566 559 psMetadata *scalars = psMemIncrRefCounter(header); // Metadata to hold the scalars; will be the header 560 if (!scalars) { 561 scalars = psMetadataAlloc(); 562 } 563 psMetadataAddS32(scalars, PS_LIST_TAIL, "PSFRNGDX", PS_META_REPLACE, "Median box half-width", 564 regions->dX); 565 psMetadataAddS32(scalars, PS_LIST_TAIL, "PSFRNGDY", PS_META_REPLACE, "Median box half-height", 566 regions->dY); 567 psMetadataAddS32(scalars, PS_LIST_TAIL, "PSFRNGNX", PS_META_REPLACE, "Large-scale smoothing in x", 568 regions->nX); 569 psMetadataAddS32(scalars, PS_LIST_TAIL, "PSFRNGNY", PS_META_REPLACE, "Large-scale smoothing in y", 570 regions->nY); 571 psMetadataAdd(cell->analysis, PS_LIST_TAIL, "FRINGE.HEADER", PS_DATA_METADATA, 572 "Header for fringe data", scalars); 573 psFree(scalars); 574 567 psMetadataAddS32(header, PS_LIST_TAIL, "PSFRNGDX", PS_META_REPLACE, "Median box half-width", regions->dX); 568 psMetadataAddS32(header, PS_LIST_TAIL, "PSFRNGDY", PS_META_REPLACE, "Median box half-height", regions->dY); 569 psMetadataAddS32(header, PS_LIST_TAIL, "PSFRNGNX", PS_META_REPLACE, "Large-scale smoothing in x", regions->nX); 570 psMetadataAddS32(header, PS_LIST_TAIL, "PSFRNGNY", PS_META_REPLACE, "Large-scale smoothing in y", regions->nY); 575 571 576 572 psArray *table = psArrayAlloc(numRows); // The table … … 605 601 } 606 602 607 psMetadataAdd(cell->analysis, PS_LIST_TAIL, "FRINGE", PS_DATA_ARRAY, "Fringe data", table); 608 609 return true; 610 } 611 612 613 psArray *pmFringesParse(pmCell *cell) 614 { 615 PS_ASSERT_PTR_NON_NULL(cell, NULL); 603 return table; 604 } 605 606 psArray *pmFringesParseTable(psArray *table, psMetadata *header) 607 { 608 PS_ASSERT_PTR_NON_NULL(table, NULL); 609 PS_ASSERT_PTR_NON_NULL(header, NULL); 616 610 617 611 bool mdok; // Status of MD lookup 618 psMetadata *header = psMetadataLookupMetadata(&mdok, cell->analysis, "FRINGE.HEADER"); // Header619 if (!mdok || !header) {620 psError(PS_ERR_UNKNOWN, false, "Unable to find header for fringe data.\n");621 return NULL;622 }623 624 psArray *table = psMetadataLookupPtr(NULL, cell->analysis, "FRINGE"); // FITS table625 if (!table) {626 psError(PS_ERR_UNKNOWN, false, "Unable to find table for fringe data.\n");627 return NULL;628 }629 630 612 631 613 // Read the scalars from the header … … 722 704 } 723 705 706 bool pmFringesFormat(pmCell *cell, psMetadata *inHeader, const psArray *fringes) 707 { 708 PS_ASSERT_PTR_NON_NULL(cell, false); 709 PS_ASSERT_ARRAY_NON_NULL(fringes, false); 710 711 psMetadata *header = psMemIncrRefCounter(inHeader); // Metadata to hold the scalars; will be the header 712 if (!inHeader) { 713 inHeader = psMetadataAlloc(); 714 } 715 716 psArray *table = pmFringesFormatTable(header, fringes); 717 if (!table) { 718 psError (PS_ERR_UNKNOWN, false, "unable to generate table from fringes"); 719 psFree(header); 720 return NULL; 721 } 722 723 psMetadataAdd(cell->analysis, PS_LIST_TAIL, "FRINGE.HEADER", PS_DATA_METADATA, "Header for fringe data", header); 724 psFree(header); 725 726 psMetadataAdd(cell->analysis, PS_LIST_TAIL, "FRINGE.TABLE", PS_DATA_ARRAY, "Fringe data", table); 727 psFree(table); 728 729 return true; 730 } 731 732 psArray *pmFringesParse(pmCell *cell) 733 { 734 PS_ASSERT_PTR_NON_NULL(cell, NULL); 735 736 bool mdok; // Status of MD lookup 737 psMetadata *header = psMetadataLookupMetadata(&mdok, cell->analysis, "FRINGE.HEADER"); // Header 738 if (!mdok || !header) { 739 psError(PS_ERR_UNKNOWN, false, "Unable to find header for fringe data.\n"); 740 return NULL; 741 } 742 743 psArray *table = psMetadataLookupPtr(NULL, cell->analysis, "FRINGE.TABLE"); // FITS table 744 if (!table) { 745 psError(PS_ERR_UNKNOWN, false, "Unable to find table for fringe data.\n"); 746 return NULL; 747 } 748 749 psArray *fringes = pmFringesParseTable(table, header); 750 if (!fringes) { 751 psError(PS_ERR_UNKNOWN, false, "Unable to add parse the fringe table data"); 752 return NULL; 753 } 754 755 return fringes; 756 } 724 757 725 758 ////////////////////////////////////////////////////////////////////////////////////////////////////////////// -
trunk/psModules/src/detrend/pmFringeStats.h
r21183 r24836 142 142 ////////////////////////////////////////////////////////////////////////////////////////////////////////////// 143 143 144 /// Write an array of fringes measurements to a FITS table. 145 /// 146 /// Writes an array of fringe measurements for a cell as a FITS table in the analysis metadata. The array of 147 /// fringe statistics must all use the same fringe regions (or there is no point in storing them all 148 /// together). The header is supplemented with scalar values dX, dY, nX and nY (as PSFRNGDX, PSFRNGDY, 149 /// PSFRNGNX, PSFRNGNY) from the fringe regions, while the fringe coordinates and mask are written as a FITS 150 /// table (as x, y, mask, f, df; f and df are vectors). 144 /// Convert an array of fringes measurements to a psArray suitable for writing as a FITS table. 145 /// 146 /// Converts an array of fringe measurements for a cell into the corresponding rows of a FITS 147 /// table (array of psMetadata). The array of fringe statistics must all use the same fringe 148 /// regions (or there is no point in storing them all together). The header is supplemented 149 /// with scalar values dX, dY, nX and nY (as PSFRNGDX, PSFRNGDY, PSFRNGNX, PSFRNGNY) from the 150 /// fringe regions, while the fringe coordinates and mask are written as a FITS table rows (as 151 /// x, y, mask, f, df; f and df are vectors). Use psFitsTableWrite to save the resulting rows 152 /// to disk. 153 psArray *pmFringesFormatTable(psMetadata *header, const psArray *fringes); 154 155 156 /// Parses an array of fringes measurements from a FITS table. 157 /// 158 /// The fringes for the cell are read from the FITS table (array of psMetadata rows). The 159 /// table provides the region and the (possibly multiple) fringe statistics for that region. 160 /// The supplied header defines the scalar values dX, dY, nX and nY (as PSFRNGDX, PSFRNGDY, 161 /// PSFRNGNX, PSFRNGNY) 162 psArray *pmFringesParseTable(psArray *table, psMetadata *header); 163 164 /// Deprecated Function: converts the fringes to a FITS table (array of psMetadata) and saves 165 /// them on the cell->analysis; scalar values are dX, dY, nX and nY are written to the header 166 /// (as PSFRNGDX, PSFRNGDY, PSFRNGNX, PSFRNGNY) 151 167 bool pmFringesFormat(pmCell *cell, ///< Cell for which to write 152 168 psMetadata *header, ///< Header, or NULL … … 154 170 ); 155 171 156 /// Parses an array of fringes measurements from a FITS table. 157 /// 158 /// The fringes for the cell are read from the FITS table in the analysis metadata. The table provides the 159 /// region and the (possibly multiple) fringe statistics for that region. The current extension is used if 160 /// the extension name is not provided. 172 /// Deprecated Function: pulls a the header and FITS table (array of psMetadata) representing 173 /// the fringes from the cell->analysis and converts to fringe measurements 161 174 psArray *pmFringesParse(pmCell *cell ///< Cell for which to read fringes 162 175 ); 163 164 176 165 177 ////////////////////////////////////////////////////////////////////////////////////////////////////////////// -
trunk/psModules/src/psmodules.h
r23751 r24836 47 47 #include <pmFPAfileDefine.h> 48 48 #include <pmFPAfileFitsIO.h> 49 #include <pmFPAfileFringeIO.h> 49 50 #include <pmFPAfileIO.h> 50 51 #include <pmFPARead.h>
Note:
See TracChangeset
for help on using the changeset viewer.
