IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Mar 13, 2006, 4:23:40 PM (20 years ago)
Author:
Paul Price
Message:

Getting code to compile; adding concept read to fpa construction and reading

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/rel10_ifa/psModules/src/astrom/pmConceptsRead.c

    r6570 r6575  
    44
    55#include "pmFPA.h"
     6#include "pmHDU.h"
     7#include "pmHDUGetLowest.h"
     8#include "pmConcepts.h"
    69#include "pmConceptsRead.h"
    710
     
    8891    default:
    8992        psError(PS_ERR_IO, true, "Concept %s (%s) is not of string type (%x) --- treating as "
    90                 "undefined.\n", name, item->comment, item->type);
     93                "undefined.\n", item->name, item->comment, item->type);
    9194        return psStringCopy("");
    9295    }
     
    98101// since the type is already known.
    99102static psMetadataItem *parsePlain(psMetadataItem *concept, // The concept to parse
    100                                   pmConceptSpec *spec // The concept specification
     103                                  psMetadataItem *pattern // The concept pattern
    101104                                 )
    102105{
    103     psMetadataItem *blank = spec->blank;// The blank specification, which carries the name, comment, type
    104     switch (blank->type) {
     106    switch (pattern->type) {
    105107    case PS_DATA_STRING: {
    106108            psString string = parseString(concept); // Get the string, so I can free it after it goes on the MDI
    107             psMetadataItem *item = psMetadataItemAllocStr(blank->name, blank->comment, string);
     109            psMetadataItem *item = psMetadataItemAllocStr(pattern->name, pattern->comment, string);
    108110            psFree(string);
    109111            return item;
    110112        }
    111113    case PS_DATA_S32:
    112         return psMetadataItemAllocS32(blank->name, blank->comment, parseS32(concept));
     114        return psMetadataItemAllocS32(pattern->name, pattern->comment, parseS32(concept));
    113115    case PS_DATA_F32:
    114         return psMetadataItemAllocF32(blank->name, blank->comment, parseF32(concept));
     116        return psMetadataItemAllocF32(pattern->name, pattern->comment, parseF32(concept));
    115117    case PS_DATA_F64:
    116         return psMetadataItemAllocF64(blank->name, blank->comment, parseF64(concept));
     118        return psMetadataItemAllocF64(pattern->name, pattern->comment, parseF64(concept));
    117119    default:
    118120        psLogMsg(__func__, PS_LOG_WARN, "Concept %s (%s) is not of a standard type (%x)\n",
    119                  blank->name, blank->comment, blank->type);
     121                 pattern->name, pattern->comment, pattern->type);
    120122        return NULL;
    121123    }
    122 }
    123 
    124 // Get the lowest HDU
    125 static pmHDU *getLowestHDU(pmFPA *fpa, // The FPA
    126                            pmChip *chip, // The chip, or NULL
    127                            pmCell *cell // The cell, or NULL
    128                           )
    129 {
    130     pmHDU *hdu = NULL;          // The HDU that's at the lowest level
    131     if (cell) {
    132         hdu = pmHDUFromCell(cell);
    133     } else if (chip) {
    134         hdu = pmHDUFromChip(chip);
    135     } else if (fpa) {
    136         hdu = pmHDUFromFPA(fpa);
    137     }
    138 
    139     return hdu;
    140124}
    141125
     
    154138        psMetadataItem *parsed = NULL;  // The parsed concept
    155139        if (spec->parse) {
    156             parsed = spec->parse(concept, spec, cameraFormat, fpa, chip, cell);
     140            parsed = spec->parse(concept, spec->blank, cameraFormat, fpa, chip, cell);
    157141        } else {
    158142            parsed = parsePlain(concept, spec->blank);
     
    160144
    161145        // Reformat so that everything's clean
    162         if (strcmp(spec->blank->name, parsedItem->name) != 0 ||
    163                 strcmp(spec->blank->comment, parsedItem->comment) != 0) {
     146        if (strcmp(spec->blank->name, parsed->name) != 0 ||
     147                strcmp(spec->blank->comment, parsed->comment) != 0) {
    164148            psMetadataItem *cleaned = NULL;     // Item that's been cleaned up --- correct name and comment
    165             switch (spec->type) {
     149            switch (spec->blank->type) {
    166150            case PS_DATA_STRING:
    167                 cleaned = psMetadataItemAllocStr(spec->blank->name, spec->blank->comment, concept->data.V);
     151                cleaned = psMetadataItemAllocStr(spec->blank->name, spec->blank->comment, parsed->data.V);
    168152                break;
    169153            case PS_DATA_S32:
    170                 cleaned = psMetadataItemAllocS32(spec->blank->name, spec->blank->comment, concept->data.S32);
     154                cleaned = psMetadataItemAllocS32(spec->blank->name, spec->blank->comment, parsed->data.S32);
    171155                break;
    172156            case PS_DATA_F32:
    173                 cleaned = psMetadataItemAllocF32(spec->blank->name, spec->blank->comment, concept->data.F32);
     157                cleaned = psMetadataItemAllocF32(spec->blank->name, spec->blank->comment, parsed->data.F32);
    174158                break;
    175159            case PS_DATA_F64:
    176                 cleaned = psMetadataItemAllocF64(spec->blank->name, spec->blank->comment, concept->data.F64);
     160                cleaned = psMetadataItemAllocF64(spec->blank->name, spec->blank->comment, parsed->data.F64);
    177161                break;
    178162            default:
    179163                cleaned = psMetadataItemAlloc(spec->blank->name, concept->type, spec->blank->comment,
    180                                               concept->data.V);
     164                                              parsed->data.V);
    181165            }
    182166            psFree(parsed);
     
    201185{
    202186    if (cell) {
    203         pmHDU *hdu = getLowestHDU(NULL, NULL, cell); // The HDU at the lowest level
     187        pmHDU *hdu = pmHDUGetLowest(NULL, NULL, cell); // The HDU at the lowest level
    204188        psMetadata *cameraFormat = hdu->format; // The camera format
    205189        psMetadata *cellConfig = cell->config; // The camera configuration for this cell
     
    214198                // Check the SOURCE
    215199                psString nameSource = NULL; // String with the concept name and ".SOURCE" added
    216                 psStringAppend(nameSource, "%s.SOURCE", name);
     200                psStringAppend(&nameSource, "%s.SOURCE", name);
    217201                bool mdok = true;       // Status of MD lookup
    218202                psString source = psMetadataLookupStr(&mdok, cell->config, nameSource); // The source
     
    248232                               )
    249233{
    250     bool mdok = true;               // Status of MD lookup
     234    pmHDU *hdu = pmHDUGetLowest(fpa, chip, cell); // The HDU at the lowest level
     235    psMetadata *cameraFormat = hdu->format; // The camera format
     236    bool mdok = true;                   // Status of MD lookup
    251237    psMetadata *defaults = psMetadataLookupMD(&mdok, cameraFormat, "DEFAULTS"); // The DEFAULTS spec
    252238    if (mdok && defaults) {
    253         pmHDU *hdu = getLowestHDU(fpa, chip, cell); // The HDU at the lowest level
     239        pmHDU *hdu = pmHDUGetLowest(fpa, chip, cell); // The HDU at the lowest level
    254240        psMetadata *cameraFormat = hdu->format; // The camera format
    255241        psMetadataIterator *specsIter = psMetadataIteratorAlloc(specs, PS_LIST_HEAD, NULL); // Iterator
     
    274260                             )
    275261{
    276     bool mdok = true;               // Status of MD lookup
     262    pmHDU *hdu = pmHDUGetLowest(fpa, chip, cell); // The HDU at the lowest level
     263    psMetadata *cameraFormat = hdu->format; // The camera format
     264    bool mdok = true;                   // Status of MD lookup
    277265    psMetadata *transSpec = psMetadataLookupMD(&mdok, cameraFormat, "TRANSLATION"); // The TRANSLATION spec
    278266    if (mdok && transSpec) {
    279         pmHDU *hdu = getLowestHDU(fpa, chip, cell); // The HDU at the lowest level
     267        pmHDU *hdu = pmHDUGetLowest(fpa, chip, cell); // The HDU at the lowest level
    280268        psMetadata *cameraFormat = hdu->format; // The camera format
    281269        psMetadataIterator *specsIter = psMetadataIteratorAlloc(specs, PS_LIST_HEAD, NULL); // Iterator
     
    285273            psString name = specItem->name; // The concept name
    286274            psString keywords = psMetadataLookupStr(&mdok, transSpec, name); // The FITS keywords
    287             if (mdok && strlen(keyword) > 0) {
     275            if (mdok && strlen(keywords) > 0) {
    288276                // In case there are multiple headers
    289277                psList *keys = psStringSplit(keywords, " ,;"); // List of keywords
     
    294282                } else {
    295283                    psListIterator *keysIter = psListIteratorAlloc(keys, PS_LIST_HEAD, false); // Iterator
    296                     psMetadataItem *key = NULL; // Item from iteration
    297                     psList *values = psListAlloc(void); // List containing the values
     284                    psString key = NULL; // Item from iteration
     285                    psList *values = psListAlloc(NULL); // List containing the values
    298286                    while ((key = psListGetAndIncrement(keysIter))) {
    299287                        psMetadataItem *value = psMetadataLookup(hdu->header, key);
     
    325313                               )
    326314{
    327     bool mdok = true;               // Status of MD lookup
     315    pmHDU *hdu = pmHDUGetLowest(fpa, chip, cell); // The HDU at the lowest level
     316    psMetadata *cameraFormat = hdu->format; // The camera format
     317    bool mdok = true;                   // Status of MD lookup
    328318    psMetadata *dbSpec = psMetadataLookupMD(&mdok, cameraFormat, "DATABSE"); // The DATABASE spec
    329319    if (mdok && dbSpec) {
    330         pmHDU *hdu = getLowestHDU(fpa, chip, cell); // The HDU at the lowest level
     320        pmHDU *hdu = pmHDUGetLowest(fpa, chip, cell); // The HDU at the lowest level
    331321        psMetadata *cameraFormat = hdu->format; // The camera format
    332322        psMetadataIterator *specsIter = psMetadataIteratorAlloc(specs, PS_LIST_HEAD, NULL); // Iterator
     
    338328            psMetadata *dbLookup = psMetadataLookupMD(&mdok, dbSpec, name);
    339329            if (mdok && dbLookup) {
    340                 const char *tableName = psMetadataLookupStr(&mdStatus, dbLookup, "TABLE"); // Table name
     330                const char *tableName = psMetadataLookupStr(&mdok, dbLookup, "TABLE"); // Table name
    341331                // Names of the "where" columns
    342                 const char *givenCols = psMetadataLookupStr(&mdStatus, dbLookup, "GIVENDBCOL");
     332                const char *givenCols = psMetadataLookupStr(&mdok, dbLookup, "GIVENDBCOL");
    343333                // Values of the "where" columns
    344                 const char *givenPS = psMetadataLookupStr(&mdStatus, dbLookup, "GIVENPS");
     334                const char *givenPS = psMetadataLookupStr(&mdok, dbLookup, "GIVENPS");
    345335
    346336                // Now, need to get the "given"s
     
    352342                        psLogMsg(__func__, PS_LOG_WARN,
    353343                                 "The GIVENDBCOL and GIVENPS entries for %s do not have "
    354                                  "the same number of entries --- ignored.\n", concept);
     344                                 "the same number of entries --- ignored.\n", name);
    355345                    } else {
    356346                        // Iterators for the lists
     
    359349                        char *column = NULL;    // Name of the column
    360350                        while ((column = psListGetAndIncrement(colsIter))) {
    361                             char *name = psListGetAndIncrement(valuesIter); // Name for the value
     351                            char *dependName = psListGetAndIncrement(valuesIter); // Name for the value
    362352                            if (!strlen(column) || !strlen(name)) {
    363353                                psLogMsg(__func__, PS_LOG_WARN, "One of the columns or value names for %s is "
    364                                          " empty --- ignored.\n", concept);
     354                                         " empty --- ignored.\n", name);
    365355                            } else {
    366356                                // Search for the value name
    367                                 psMetadataItem *item = pmConceptReadFromHeader(fpa, chip, cell, name);
    368                                 if (! item) {
    369                                     item = pmConceptReadFromDefault(fpa, chip, cell, name);
     357                                psMetadataItem *item = NULL; // The value
     358                                if (!item && cell) {
     359                                    item = psMetadataLookup(cell->concepts, dependName);
     360                                }
     361                                if (!item && chip) {
     362                                    item = psMetadataLookup(chip->concepts, dependName);
     363                                }
     364                                if (!item && fpa) {
     365                                    item = psMetadataLookup(fpa->concepts, dependName);
    370366                                }
    371367                                if (! item) {
    372368                                    psLogMsg(__func__, PS_LOG_ERROR, "Unable to find the value name %s for DB"
    373                                              " lookup on %s --- ignored.\n", name, concept);
     369                                             " lookup on %s --- ignored.\n", dependName, name);
    374370                                } else {
    375371                                    // We need to create a new psMetadataItem.  I don't think we can't
    376372                                    // simply hack the existing one, since that could conceivably cause
    377373                                    // memory leaks
    378                                     psMetadataItem *newItem = psMetadataItemAlloc(concept, item->type,
     374                                    psMetadataItem *newItem = psMetadataItemAlloc(name, item->type,
    379375                                                              item->comment,
    380376                                                              item->data.V);
     
    383379                                }
    384380                            }
    385                             psFree(name);
     381                            psFree(dependName);
    386382                            psFree(column);
    387383                        } // Iterating through the columns
     
    395391                        if (dbResult->n == 0) {
    396392                            psLogMsg(__func__, PS_LOG_WARN,
    397                                      "Unable to find any rows in DB for %s --- ignored\n", concept);
     393                                     "Unable to find any rows in DB for %s --- ignored\n", name);
    398394                        } else {
    399395                            if (dbResult-> n > 1) {
    400396                                psLogMsg(__func__, PS_LOG_WARN,
    401397                                         "Multiple rows returned in DB lookup for %s --- "
    402                                          " using the first one only.\n", concept);
     398                                         " using the first one only.\n", name);
    403399                            }
    404400                            conceptItem = (psMetadataItem*)dbResult->data[0];
     
    406402
    407403                        // Now we have the result
    408                         conceptParse(spec, headerItem, cameraFormat, target, fpa, chip, cell);
     404                        conceptParse(spec, conceptItem, cameraFormat, target, fpa, chip, cell);
    409405
    410406                    }
     
    425421
    426422
    427 #if 0
     423#ifdef OLD
    428424
    429425psMetadataItem *pmConceptReadFromCamera(pmCell *cell, // The cell
Note: See TracChangeset for help on using the changeset viewer.