IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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//////////////////////////////////////////////////////////////////////////////////////////////////////////////
Note: See TracChangeset for help on using the changeset viewer.