IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Jul 30, 2009, 5:20:29 PM (17 years ago)
Author:
watersc1
Message:

Finished up my edits to the detrend cleanup, and some changes to my
copy of burntool and the pslib astrometry. Detrend cleanup has not
been tested yet. That's up next.

Location:
branches/czw_branch/cleanup
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/czw_branch/cleanup

  • branches/czw_branch/cleanup/psModules/src/detrend/pmFringeStats.c

    r24095 r24951  
    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//////////////////////////////////////////////////////////////////////////////////////////////////////////////
     
    822855    // Solve the least-squares equation
    823856    if (!psMatrixGJSolve(A, B)) {
    824         psError(PS_ERR_UNKNOWN, false, "Could not solve linear equations.  Returning NULL.\n");
     857        psLogMsg("psModules.detrend", PS_LOG_INFO, "Could not solve linear equations.  Returning NULL.\n");
     858        psFree(A);
     859        psFree(B);
    825860        return false;
    826861    }
Note: See TracChangeset for help on using the changeset viewer.