IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 24836


Ignore:
Timestamp:
Jul 17, 2009, 1:13:04 PM (17 years ago)
Author:
eugene
Message:

changed fringe routines to store fringe stats on the cell analysis and convert to table on I/O; added pmFPAfileFringeIO functions

Location:
trunk/psModules/src
Files:
2 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/psModules/src/camera/Makefile.am

    r19695 r24836  
    2323        pmFPAfileIO.c \
    2424        pmFPAfileFitsIO.c \
     25        pmFPAfileFringeIO.c \
    2526        pmFPAFlags.c \
    2627        pmFPALevel.c \
     
    5152        pmFPAfileIO.h \
    5253        pmFPAfileFitsIO.h \
     54        pmFPAfileFringeIO.h \
    5355        pmFPAFlags.h \
    5456        pmFPALevel.h \
  • trunk/psModules/src/camera/pmFPAfileIO.c

    r23576 r24836  
    2323#include "pmFPAWrite.h"
    2424#include "pmFPAfileFitsIO.h"
     25#include "pmFPAfileFringeIO.h"
    2526#include "pmSpan.h"
    2627#include "pmFootprint.h"
     
    192193        status = pmFPAviewReadFitsImage(view, file, config);
    193194        if (status) {
    194             if (!pmFPAviewReadFitsTable(view, file, "FRINGE")) {
     195            if (!pmFPAviewReadFringes(view, file)) {
    195196                psError(PS_ERR_UNKNOWN, false, "Unable to read fringe data from %s.\n", file->filename);
    196197                return false;
     
    451452        status = pmFPAviewWriteFitsImage (view, file, config);
    452453        if (status) {
    453             if (!pmFPAviewWriteFitsTable(view, file, "FRINGE", config)) {
     454            if (!pmFPAviewWriteFringes(view, file, config)) {
    454455                psError(PS_ERR_UNKNOWN, false, "Unable to write fringe data from %s.\n", file->filename);
    455456                return false;
  • trunk/psModules/src/detrend/pmFringeStats.c

    r24095 r24836  
    464464    for (long i = 0; i < fringes->n; i++) {
    465465        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        }
    466470        pmFringeRegions *regions = fringe->regions; // The fringe regions
    467471        if (numPoints == 0) {
     
    496500    for (long i = 0; i < fringes->n; i++) {
    497501        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        }
    498506        pmFringeRegions *regions = fringe->regions; // The fringe regions
    499507        // Copy the data over
     
    520528//////////////////////////////////////////////////////////////////////////////////////////////////////////////
    521529
    522 bool pmFringesFormat(pmCell *cell, psMetadata *header, const psArray *fringes)
    523 {
    524     PS_ASSERT_PTR_NON_NULL(cell, false);
     530psArray *pmFringesFormatTable(psMetadata *header, const psArray *fringes)
     531{
     532    PS_ASSERT_PTR_NON_NULL(header, false);
    525533    PS_ASSERT_ARRAY_NON_NULL(fringes, false);
    526534
     
    531539        if (stats->regions != regions) {
    532540            psError(PS_ERR_BAD_PARAMETER_VALUE, true, "Regions for fringe statistics are not identical.\n");
    533             return false;
     541            return NULL;
    534542        }
    535543    }
     
    557565    // Vectors: x, y, mask, f, df
    558566
    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);
    575571
    576572    psArray *table = psArrayAlloc(numRows); // The table
     
    605601    }
    606602
    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
     606psArray *pmFringesParseTable(psArray *table, psMetadata *header)
     607{
     608    PS_ASSERT_PTR_NON_NULL(table, NULL);
     609    PS_ASSERT_PTR_NON_NULL(header, NULL);
    616610
    617611    bool mdok;                          // Status of MD lookup
    618     psMetadata *header = psMetadataLookupMetadata(&mdok, cell->analysis, "FRINGE.HEADER"); // Header
    619     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 table
    625     if (!table) {
    626         psError(PS_ERR_UNKNOWN, false, "Unable to find table for fringe data.\n");
    627         return NULL;
    628     }
    629 
    630612
    631613    // Read the scalars from the header
     
    722704}
    723705
     706bool 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
     732psArray *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}
    724757
    725758//////////////////////////////////////////////////////////////////////////////////////////////////////////////
  • trunk/psModules/src/detrend/pmFringeStats.h

    r21183 r24836  
    142142//////////////////////////////////////////////////////////////////////////////////////////////////////////////
    143143
    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.
     153psArray *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)
     162psArray *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)
    151167bool pmFringesFormat(pmCell *cell,   ///< Cell for which to write
    152168                     psMetadata *header, ///< Header, or NULL
     
    154170                    );
    155171
    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
    161174psArray *pmFringesParse(pmCell *cell ///< Cell for which to read fringes
    162175                       );
    163 
    164176
    165177//////////////////////////////////////////////////////////////////////////////////////////////////////////////
  • trunk/psModules/src/psmodules.h

    r23751 r24836  
    4747#include <pmFPAfileDefine.h>
    4848#include <pmFPAfileFitsIO.h>
     49#include <pmFPAfileFringeIO.h>
    4950#include <pmFPAfileIO.h>
    5051#include <pmFPARead.h>
Note: See TracChangeset for help on using the changeset viewer.