IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 7910 for trunk/ppStats


Ignore:
Timestamp:
Jul 14, 2006, 3:58:46 PM (20 years ago)
Author:
Paul Price
Message:

Adding option of outputting concepts in addition to headers.

Location:
trunk/ppStats/src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/ppStats/src/ppStatsData.c

    r7902 r7910  
    1818    }
    1919    psFree(data->headers);
     20    psFree(data->concepts);
     21    psFree(data->stats);
     22
    2023    psFree(data->chips);
    2124    psFree(data->cells);
    22     psFree(data->stats);
    2325
    2426    return;
     
    3638    data->outFile = NULL;
    3739    data->inFPA = NULL;
     40
     41    data->headers = psListAlloc(NULL);
     42    data->concepts = psListAlloc(NULL);
     43    data->stats = psStatsAlloc(0);
     44    data->doStats = false;
     45
    3846    data->sample = 0;
    3947    data->maskVal = 0;
    40     data->headers = psListAlloc(NULL);
    4148    data->chips = psListAlloc(NULL);
    4249    data->cells = psListAlloc(NULL);
    43     data->stats = psStatsAlloc(0);
    44     data->doStats = false;
    4550
    4651    return data;
  • trunk/ppStats/src/ppStatsData.h

    r7902 r7910  
    1212    FILE *outFile;                      // Output file handle
    1313    pmFPA *inFPA;                       // Input FPA
    14     // Options
     14    // Stuff to output
     15    psStats *stats;                     // Statistics to calculate
     16    bool doStats;                       // Do statistics?
     17    psList *headers;                    // Headers to read
     18    psList *concepts;                   // Concepts to read
     19    // Options for input data
    1520    float sample;                       // Fraction of cell to sample for statistics
    1621    psMaskType maskVal;                 // Mask value for images
    17     psList *headers;                    // Headers to read
    1822    psList *chips;                      // Chips to look at
    1923    psList *cells;                      // Cells to look at
    20     psStats *stats;                     // Statistics to calculate
    21     bool doStats;                       // Do statistics?
    2224} ppStatsData;
    2325
  • trunk/ppStats/src/ppStatsLoop.c

    r7903 r7910  
    66
    77
    8 static void getHeaders(psMetadata *target, // Target for headers
    9                        psMetadata *source, // Source header
    10                        psListIterator *keywordsIter // Iterator for header keywords
     8static void getMetadata(psMetadata *target, // Target for metadata
     9                        psMetadata *source, // Source for metadata
     10                        psListIterator *iterator // Iterator for keywords
    1111    )
    1212{
    13     psListIteratorSet(keywordsIter, PS_LIST_HEAD);
    14     psString keyword;                    // Header from iteration
    15     while ((keyword = psListGetAndIncrement(keywordsIter))) {
    16         psMetadataAddItem(target, psMetadataLookup(source, keyword), PS_LIST_TAIL, 0);
     13    psListIteratorSet(iterator, PS_LIST_HEAD);
     14    psString name;                      // Name from iteration
     15    while ((name = psListGetAndIncrement(iterator))) {
     16        psMetadataItem *item = psMetadataLookup(source, name); // Item of interest, or NULL
     17        if (item) {
     18            psMetadataAddItem(target, item, PS_LIST_TAIL, 0);
     19        }
    1720    }
    1821    return;
     
    2629    psMetadata *fpaResults = psMetadataAlloc(); // Metadata to hold the FPA results
    2730
    28     psListIterator *headersIter = psListIteratorAlloc(data->headers, PS_LIST_HEAD, false); // Headers iterator
    29 
     31    // Iterators for the headers and concepts
     32    psListIterator *headersIter = psListIteratorAlloc(data->headers, PS_LIST_HEAD, false); // Headers
     33    psListIterator *conceptsIter = psListIteratorAlloc(data->concepts, PS_LIST_HEAD, false); // Concepts
    3034
    3135    // Iterate through the FPA
     
    3337    if (psListLength(data->headers) > 0 && fpa->hdu && pmFPAReadHeader(fpa, data->inFile)) {
    3438        pmHDU *hdu = fpa->hdu;          // HDU for headers
    35         getHeaders(fpaResults, hdu->header, headersIter);
     39        getMetadata(fpaResults, hdu->header, headersIter);
     40    }
     41    if (psListLength(data->concepts) > 0 &&
     42        pmConceptsReadFPA(fpa, PM_CONCEPT_SOURCE_ALL, false, config->database)) {
     43        getMetadata(fpaResults, fpa->concepts, conceptsIter);
    3644    }
    3745
     
    4755        if (psListLength(data->headers) > 0 && chip->hdu && pmChipReadHeader(chip, data->inFile)) {
    4856            pmHDU *hdu = chip->hdu;     // HDU for headers
    49             getHeaders(chipResults, hdu->header, headersIter);
     57            getMetadata(chipResults, hdu->header, headersIter);
     58        }
     59        if (psListLength(data->concepts) > 0 &&
     60            pmConceptsReadChip(chip, PM_CONCEPT_SOURCE_ALL, false, false, config->database)) {
     61            getMetadata(chipResults, chip->concepts, conceptsIter);
    5062        }
    5163
     
    6173            if (psListLength(data->headers) > 0 && cell->hdu && pmCellReadHeader(cell, data->inFile)) {
    6274                pmHDU *hdu = cell->hdu;     // HDU for headers
    63                 getHeaders(cellResults, hdu->header, headersIter);
     75                getMetadata(cellResults, hdu->header, headersIter);
    6476                psMetadataAdd(chipResults, PS_LIST_TAIL, cellName, PS_DATA_METADATA,
    6577                              "Results for cell", cellResults);
     78            }
     79            if (psListLength(data->concepts) > 0 &&
     80                pmConceptsReadCell(cell, PM_CONCEPT_SOURCE_ALL, false, config->database)) {
     81                getMetadata(cellResults, cell->concepts, conceptsIter);
    6682            }
    6783
     
    174190    pmFPAFreeData(fpa);
    175191    psFree(headersIter);
     192    psFree(conceptsIter);
    176193
    177194    psString output = psMetadataConfigFormat(fpaResults);
  • trunk/ppStats/src/ppStatsSetup.c

    r7903 r7910  
    3030    psMetadataAddStr(arguments, PS_LIST_TAIL, "-cell", PS_META_DUPLICATE_OK, "Cell to inspect", NULL);
    3131    psMetadataAddStr(arguments, PS_LIST_TAIL, "-header", PS_META_DUPLICATE_OK, "Header to look up", NULL);
     32    psMetadataAddStr(arguments, PS_LIST_TAIL, "-concept", PS_META_DUPLICATE_OK, "Concept to look up", NULL);
    3233    psMetadataAddBool(arguments, PS_LIST_TAIL, "-mean", 0, "Calculate sample mean", false);
    3334    psMetadataAddBool(arguments, PS_LIST_TAIL, "-stdev", 0, "Calculate sample standard deviation", false);
     
    7778    GET_LIST_FROM_ARGUMENTS("Cell", "-cell", data->cells);
    7879    GET_LIST_FROM_ARGUMENTS("Header", "-header", data->headers);
     80    GET_LIST_FROM_ARGUMENTS("Concept", "-concept", data->concepts);
    7981
    8082    // Set the statistics options
     
    102104
    103105    // Open the input file, determine the camera
    104     data->inFile = psFitsOpen(data->inName, "r");
    105     if (!data->inFile) {
    106         psError(PS_ERR_IO, false, "Unable to open input file %s\n", data->inName);
    107         goto die;
    108     }
    109     psMetadata *header = psFitsReadHeader(NULL, data->inFile); // The FITS (primary) header
    110     psMetadata *format = pmConfigCameraFormatFromHeader(config, header);
    111     if (!format) {
    112         psError(PS_ERR_UNKNOWN, false, "Unable to determine camera format for %s\n", data->inName);
    113         psFree(header);
    114         goto die;
    115     }
    116     data->inFPA = pmFPAConstruct(config->camera);
    117     if (!data->inFPA) {
    118         psError(PS_ERR_UNKNOWN, false, "Unable to construct FPA for %s\n", data->inName);
     106    {
     107        data->inFile = psFitsOpen(data->inName, "r");
     108        if (!data->inFile) {
     109            psError(PS_ERR_IO, false, "Unable to open input file %s\n", data->inName);
     110            goto die;
     111        }
     112        psMetadata *header = psFitsReadHeader(NULL, data->inFile); // The FITS (primary) header
     113        psMetadata *format = pmConfigCameraFormatFromHeader(config, header);
     114        if (!format) {
     115            psError(PS_ERR_UNKNOWN, false, "Unable to determine camera format for %s\n", data->inName);
     116            psFree(header);
     117            goto die;
     118        }
     119        data->inFPA = pmFPAConstruct(config->camera);
     120        if (!data->inFPA) {
     121            psError(PS_ERR_UNKNOWN, false, "Unable to construct FPA for %s\n", data->inName);
     122            psFree(header);
     123            psFree(format);
     124            goto die;
     125        }
     126        pmFPAview *view = pmFPAAddSourceFromHeader(data->inFPA, header, format);
    119127        psFree(header);
    120128        psFree(format);
    121         goto die;
    122     }
    123     pmFPAview *view = pmFPAAddSourceFromHeader(data->inFPA, header, format);
    124     psFree(header);
    125     psFree(format);
    126     if (!view) {
    127         psError(PS_ERR_UNKNOWN, false, "Unable to add input file %s to FPA.\n", data->inName);
    128         goto die;
    129     }
    130     psFree(view);
     129        if (!view) {
     130            psError(PS_ERR_UNKNOWN, false, "Unable to add input file %s to FPA.\n", data->inName);
     131            goto die;
     132        }
     133        psFree(view);
     134    }
    131135
    132136    // Open the output file
     
    174178
    175179    GET_LIST_FROM_RECIPE("CHIPS", data->chips);
    176     GET_LIST_FROM_RECIPE("CELLS", data->chips);
    177     GET_LIST_FROM_RECIPE("HEADER", data->chips);
     180    GET_LIST_FROM_RECIPE("CELLS", data->cells);
     181    GET_LIST_FROM_RECIPE("HEADER", data->headers);
     182    GET_LIST_FROM_RECIPE("CONCEPT", data->concepts);
    178183
    179184    // Parse the statistics options
Note: See TracChangeset for help on using the changeset viewer.