IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 6575


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

Location:
branches/rel10_ifa/psModules/src/astrom
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • branches/rel10_ifa/psModules/src/astrom/Makefile.am

    r6573 r6575  
    88        pmFPARead.c \
    99        pmHDU.c \
     10        pmHDUGetLowest.c \
    1011        pmReadout.c \
    1112        pmConcepts.c \
     
    2728        pmFPARead.h \
    2829        pmHDU.h \
     30        pmHDUGetLowest.h \
    2931        pmReadout.h \
    3032        psAdditionals.h \
  • branches/rel10_ifa/psModules/src/astrom/pmConcepts.c

    r6570 r6575  
    8383        pmConceptsInit();
    8484    }
    85     psMetadataIterator *specsIter = psMetadataIteratorAlloc(*specs, PS_LIST_HEAD, NULL); // Iterator on specs
     85    psMetadataIterator *specsIter = psMetadataIteratorAlloc(specs, PS_LIST_HEAD, NULL); // Iterator on specs
    8686    psMetadataItem *specItem = NULL;    // Item from the specs metadata
    8787    while ((specItem = psMetadataGetAndIncrement(specsIter))) {
     
    122122    }
    123123    if (source & PM_CONCEPT_SOURCE_DATABASE || source == PM_CONCEPT_SOURCE_ALL) {
    124         pmConceptsReadFromHeader(specs, fpa, chip, cell, db, target);
     124        pmConceptsReadFromDatabase(specs, fpa, chip, cell, db, target);
    125125    }
    126126
     
    152152    }
    153153    if (source & PM_CONCEPT_SOURCE_DATABASE || source == PM_CONCEPT_SOURCE_ALL) {
    154         pmConceptsWriteToHeader(specs, fpa, chip, cell, db, concepts);
     154        pmConceptsWriteToDatabase(specs, fpa, chip, cell, db, concepts);
    155155    }
    156156
     
    179179// Read the concepts for a given FPA
    180180bool pmConceptsWriteFPA(pmFPA *fpa,     // FPA for which to write concepts
     181                        pmConceptSource source, // The source of the concepts to read
    181182                        psDB *db        // Database handle
    182183                       )
    183184{
    184185    psTrace("psModule.concepts", 5, "Writing FPA concepts: %x %x\n", conceptsFPA, fpa->concepts);
    185     return conceptsWrite(conceptsFPA, fpa, NULL, NULL, db, fpa->concepts);
     186    return conceptsWrite(conceptsFPA, fpa, NULL, NULL, source, db, fpa->concepts);
    186187}
    187188
     
    207208// Read the concepts for a given FPA
    208209bool pmConceptsWriteChip(pmChip *chip,  // Chip for which to write concepts
     210                         pmConceptSource source, // The source of the concepts to read
    209211                         psDB *db        // Database handle
    210212                        )
     
    212214    psTrace("psModule.concepts", 5, "Writing chip concepts: %x %x\n", conceptsChip, chip->concepts);
    213215    pmFPA *fpa = chip->parent;          // FPA to which the chip belongs
    214     return conceptsWrite(conceptsChip, fpa, chip, NULL, db, chip->concepts);
     216    return conceptsWrite(conceptsChip, fpa, chip, NULL, source, db, chip->concepts);
    215217}
    216218
     
    237239// Read the concepts for a given FPA
    238240bool pmConceptsWriteCell(pmCell *cell,  // FPA for which to write concepts
     241                         pmConceptSource source, // The source of the concepts to read
    239242                         psDB *db       // Database handle
    240243                        )
     
    243246    pmChip *chip = cell->parent;        // Chip to which the cell belongs
    244247    pmFPA *fpa = chip->parent;          // FPA to which the chip belongs
    245     return conceptsWrite(conceptsCell, fpa, chip, cell, db, cell->concepts);
     248    return conceptsWrite(conceptsCell, fpa, chip, cell, source, db, cell->concepts);
    246249}
    247250
     
    394397
    395398        // CELL.DARKTIME
    396         {Read
     399        {
    397400            psMetadataItem *cellDarktime = psMetadataItemAllocF32("CELL.DARKTIME",
    398401                                           "Time since flush (sec)", NAN);
     
    428431            psMetadataItem *cellXbin = psMetadataItemAllocS32("CELL.XBIN", "Binning in x", 0);
    429432            pmConceptRegister(cellXbin, (pmConceptParseFunc)pmConceptParse_CELL_Binning,
    430                               (pmConceptFormatFunc)pmConceptFormat_CELL_Binning, PM_CONCEPT_LEVEL_CELL);
     433                              (pmConceptFormatFunc)pmConceptFormat_CELL_XBIN, PM_CONCEPT_LEVEL_CELL);
    431434            psFree(cellXbin);
    432435        }
     
    436439            psMetadataItem *cellYbin = psMetadataItemAllocS32("CELL.YBIN", "Binning in y", 0);
    437440            pmConceptRegister(cellYbin, (pmConceptParseFunc)pmConceptParse_CELL_Binning,
    438                               (pmConceptFormatFunc)pmConceptFormat_CELL_Binning, PM_CONCEPT_LEVEL_CELL);
     441                              (pmConceptFormatFunc)pmConceptFormat_CELL_YBIN, PM_CONCEPT_LEVEL_CELL);
    439442            psFree(cellYbin);
    440443        }
  • branches/rel10_ifa/psModules/src/astrom/pmConcepts.h

    r6570 r6575  
    88
    99// Function to call to parse a concept once it has been read
    10 typedef psMetadataItem* (*pmConceptParseFunc)(psMetadataItem *concept, pmConceptSpec *spec, psMetadata *cameraFormat, pmFPA *fpa, pmChip *chip, pmCell *cell);
     10typedef psMetadataItem* (*pmConceptParseFunc)(psMetadataItem *concept, psMetadataItem *pattern, psMetadata *cameraFormat, pmFPA *fpa, pmChip *chip, pmCell *cell);
    1111// Function to call to format a concept for writing
    1212typedef psMetadataItem* (*pmConceptFormatFunc)(psMetadataItem *concept, psMetadata *cameraFormat, pmFPA *fpa, pmChip *chip, pmCell *cell);
  • 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
  • branches/rel10_ifa/psModules/src/astrom/pmConceptsRead.h

    r6448 r6575  
    44#include "pmFPA.h"
    55
     6
     7bool pmConceptsReadFromCamera(psMetadata *specs, // The concept specifications
     8                              pmCell *cell,  // The cell
     9                              psMetadata *target // Place into which to read the concepts
     10                             );
     11bool pmConceptsReadFromDefaults(psMetadata *specs, // The concept specifications
     12                                pmFPA *fpa, // The FPA
     13                                pmChip *chip, // The chip
     14                                pmCell *cell, // The cell
     15                                psMetadata *target // Place into which to read the concepts
     16                               );
     17bool pmConceptsReadFromHeader(psMetadata *specs, // The concept specifications
     18                              pmFPA *fpa, // The FPA
     19                              pmChip *chip, // The chip
     20                              pmCell *cell,  // The cell
     21                              psMetadata *target // Place into which to read the concepts
     22                             );
     23bool pmConceptsReadFromDatabase(psMetadata *specs, // The concept specifications
     24                                pmFPA *fpa, // The FPA
     25                                pmChip *chip, // The chip
     26                                pmCell *cell,  // The cell
     27                                psDB *db, // The database handle
     28                                psMetadata *target // Place into which to read the concepts
     29                               );
     30
     31
     32
     33
     34#ifdef OLD
    635psMetadataItem *pmConceptReadFromCamera(pmCell *cell, // The cell
    736                                        const char *concept // Name of concept
     
    6190                             const char *name // Name of the concept
    6291                            );
    63 
     92#endif
    6493
    6594#endif
  • branches/rel10_ifa/psModules/src/astrom/pmConceptsStandard.c

    r6570 r6575  
    11#include <stdio.h>
     2#include <assert.h>
    23
    34#include "pslib.h"
    45
     6#include "pmFPA.h"
    57#include "pmConceptsRead.h"
    68#include "pmConceptsWrite.h"
    7 #include "pmFPA.h"
    89#include "pmConceptsStandard.h"
    9 #include "psAdditionals.h"
    1010
    1111
     
    2121        psLogMsg(__func__, PS_LOG_WARN, "Assuming format for %s is HOURS.\n", pattern->name);
    2222        return M_PI / 12.0;
    23     } else if (strcmp(pattern->name, "FPA.DEC") == 0) {
     23    }
     24    if (strcmp(pattern->name, "FPA.DEC") == 0) {
    2425        psLogMsg(__func__, PS_LOG_WARN, "Assuming format for %s is DEGREES.\n", pattern->name);
    2526        return M_PI / 180.0;
    26     } else {
    27         psAbort("Should never ever get here.\n");
    28     }
     27    }
     28    psAbort(__func__, "Should never ever get here.\n");
     29    return NAN;
    2930}
    3031
     
    7374    psMetadata *formats = psMetadataLookupMD(&mdok, cameraFormat, "FORMATS");
    7475    if (mdok && formats) {
    75         psString format = psMetadataLookupStr(&mdok, formats, blank->name);
     76        psString format = psMetadataLookupStr(&mdok, formats, pattern->name);
    7677        if (mdok && strlen(format) > 0) {
    7778            if (strcasecmp(format, "HOURS") == 0) {
     
    9596
    9697// FPA.RA and FPA.DEC
    97 psMetadataItem *pmConceptFormat_FPA_Coords(psMetadataItem *concept, psMetadataItem *pattern, pmConceptSpec *spec, psMetadata *cameraFormat)
     98psMetadataItem *pmConceptFormat_FPA_Coords(psMetadataItem *concept, psMetadataItem *pattern, psMetadata *cameraFormat)
    9899{
    99100    assert(concept);
     
    128129    int big, medium;
    129130    float small;
    130     big = (int)ra;
     131    big = (int)coords;
    131132    medium = (int)(60.0*(coords - (double)big));
    132133    small = 3600.0*(coords - (double)big - 60.0 * (double)medium);
     
    146147    assert(pattern);
    147148
    148     psMetadata *cellConfig = cell->config; // The cell configuration
    149149    psRegion *trimsec = psAlloc(sizeof(psRegion)); // Make space for a psRegion (usually passed by value)
    150150
     
    166166    assert(cell);
    167167    assert(pattern);
    168     psMetadata *cellConfig = cell->config; // The cell configuration
    169168
    170169    psList *biassecs = psListAlloc(NULL); // List of bias sections
    171     psMetadataItem *item = psMetadataItemAlloc("CELL.BIASSEC", PS_DATA_LIST, "Bias sections", biassecs);
    172170    psFree(biassecs);               // Drop reference
    173171
     
    215213
    216214// CELL.XBIN and CELL.YBIN
    217 psMetadataItem *pmConceptParse_CELL_BINNING(psMetadataItem *concept, psMetadataItem *pattern, psMetadata *cameraFormat, pmFPA *fpa, pmChip *chip, pmCell *cell)
     215psMetadataItem *pmConceptParse_CELL_Binning(psMetadataItem *concept, psMetadataItem *pattern, psMetadata *cameraFormat, pmFPA *fpa, pmChip *chip, pmCell *cell)
    218216{
    219217    assert(concept);
     
    226224                sscanf(binString, "%d,%*d", &binning) != 1) ||
    227225                (strcmp(pattern->name, "CELL.YBIN") == 0 && sscanf(binString, "%*d %d", &binning) != 1 &&
    228                  sscanf(binString, "%*d,%d", &binning) != 1) {
    229                 psError(PS_ERR_IO, true, "Unable to parse string to get %s: %s\n", pattern->name, binString)
    230                     ;
    231                 }
    232             } else if (concept->type == PS_TYPE_S32) {
    233                 binning = concept->data.S32;
    234             } else {
    235                 psError(PS_ERR_IO, true, "Note sure how to parse %s of type %x --- assuming 1.\n", pattern->name,
    236                         binItem->type);
    237             }
    238 
    239             return psMetadataItemAllocS32(pattern->name, pattern->comment, binning);
     226                 sscanf(binString, "%*d,%d", &binning) != 1)) {
     227            psError(PS_ERR_IO, true, "Unable to parse string to get %s: %s\n", pattern->name, binString);
     228        }
     229    } else if (concept->type == PS_TYPE_S32) {
     230        binning = concept->data.S32;
     231    } else {
     232        psError(PS_ERR_IO, true, "Note sure how to parse %s of type %x --- assuming 1.\n", pattern->name,
     233                concept->type);
     234    }
     235
     236    return psMetadataItemAllocS32(pattern->name, pattern->comment, binning);
    240237}
    241238
     
    247244
    248245    psTimeType timeSys = PS_TIME_UTC;   // The time system
     246    psString sys = concept->data.V;     // The time system string
    249247    if (concept->type != PS_DATA_STRING || strlen(sys) <= 0) {
    250248        psError(PS_ERR_IO, true, "Can't interpret CELL.TIMESYS --- assuming UTC.\n");
     
    273271
    274272    // Need CELL.TIMESYS first
    275     bool mdok = false;                  // Result of MD lookup
     273    bool mdok = true;                  // Result of MD lookup
    276274    psTimeType timeSys = psMetadataLookupS32(&mdok, cell->concepts, "CELL.TIMESYS"); // The time system
    277275    if (!mdok) {
     
    281279
    282280    // Get format
    283     bool mdok = true;               // Status of MD lookup
    284281    psMetadata *formats = psMetadataLookupMD(&mdok, cameraFormat, "FORMATS");
    285282    if (!mdok || !formats) {
     
    446443    psRegion *trimsec = concept->data.V; // The trimsec region
    447444    psString trimsecString = psRegionToString(*trimsec);
    448     psMetadataItem *formatted = psMetadataItemAllocStr(trimsecItem->name, trimsecItem->comment,
     445    psMetadataItem *formatted = psMetadataItemAllocStr(concept->name, concept->comment,
    449446                                trimsecString);
    450447    psFree(trimsecString);
     
    543540    psFree(sys);
    544541
    545     return success;
     542    return newItem;
    546543}
    547544
     
    602599    }
    603600
    604     psError(PS_ERR_IO, true, "Not sure how to format concept CELL.TIME (%s)\n", dateTimeString);
     601    psError(PS_ERR_IO, true, "Not sure how to format concept CELL.TIME\n");
    605602    return NULL;
    606603}
    607604
    608 psMetadataItem *pmConceptFormat_CELL_Positions(psMetadataItem *concept, psMetadata *cameraFormat, pmFPA *fpa, pmChip *chip, pmCell *cell *db)
     605psMetadataItem *pmConceptFormat_CELL_Positions(psMetadataItem *concept, psMetadata *cameraFormat, pmFPA *fpa, pmChip *chip, pmCell *cell)
    609606{
    610607    assert(concept);
     
    612609
    613610    if (concept->type != PS_TYPE_S32) {
    614         psError(PS_ERR_IO, true, "Concept %s is not of type S32, as expected.\n", pattern->name);
     611        psError(PS_ERR_IO, true, "Concept %s is not of type S32, as expected.\n", concept->name);
    615612        return NULL;
    616613    }
  • branches/rel10_ifa/psModules/src/astrom/pmConceptsStandard.h

    r6570 r6575  
    55#include "pmFPA.h"
    66
     7
    78psMetadataItem *pmConceptParse_FPA_Coords(psMetadataItem *concept, psMetadataItem *pattern, psMetadata *cameraFormat, pmFPA *fpa, pmChip *chip, pmCell *cell);
    8 psMetadataItem *pmConceptFormat_FPA_Coords(psMetadataItem *concept, psMetadataItem *pattern, pmConceptSpec *spec, psMetadata *cameraFormat);
     9psMetadataItem *pmConceptFormat_FPA_Coords(psMetadataItem *concept, psMetadataItem *pattern, psMetadata *cameraFormat);
    910psMetadataItem *pmConceptParse_CELL_TRIMSEC(psMetadataItem *concept, psMetadataItem *pattern, psMetadata *cameraFormat, pmFPA *fpa, pmChip *chip, pmCell *cell);
    1011psMetadataItem *pmConceptParse_CELL_BIASSEC(psMetadataItem *concept, psMetadataItem *pattern, psMetadata *cameraFormat, pmFPA *fpa, pmChip *chip, pmCell *cell);
    11 psMetadataItem *pmConceptParse_CELL_BINNING(psMetadataItem *concept, psMetadataItem *pattern, psMetadata *cameraFormat, pmFPA *fpa, pmChip *chip, pmCell *cell);
     12psMetadataItem *pmConceptParse_CELL_Binning(psMetadataItem *concept, psMetadataItem *pattern, psMetadata *cameraFormat, pmFPA *fpa, pmChip *chip, pmCell *cell);
    1213psMetadataItem *pmConceptParse_CELL_TIMESYS(psMetadataItem *concept, psMetadataItem *pattern, psMetadata *cameraFormat, pmFPA *fpa, pmChip *chip, pmCell *cell);
    1314psMetadataItem *pmConceptParse_CELL_TIME(psMetadataItem *concept, psMetadataItem *pattern, psMetadata *cameraFormat, pmFPA *fpa, pmChip *chip, pmCell *cell);
     
    1920psMetadataItem *pmConceptFormat_CELL_TIMESYS(psMetadataItem *concept, psMetadata *cameraFormat, pmFPA *fpa, pmChip *chip, pmCell *cell);
    2021psMetadataItem *pmConceptFormat_CELL_TIME(psMetadataItem *concept, psMetadata *cameraFormat, pmFPA *fpa, pmChip *chip, pmCell *cell);
    21 psMetadataItem *pmConceptFormat_CELL_Positions(psMetadataItem *concept, psMetadata *cameraFormat, pmFPA *fpa, pmChip *chip, pmCell *cell *db);
     22psMetadataItem *pmConceptFormat_CELL_Positions(psMetadataItem *concept, psMetadata *cameraFormat, pmFPA *fpa, pmChip *chip, pmCell *cell);
    2223
    2324#endif
  • branches/rel10_ifa/psModules/src/astrom/pmConceptsWrite.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#include "psAdditionals.h"
     
    8992        return formatted;
    9093    }
     94    return NULL;
    9195}
    9296
     
    127131{
    128132    if (cell) {
    129         pmHDU *hdu = getLowestHDU(NULL, NULL, cell); // The HDU at the lowest level
     133        pmHDU *hdu = pmHDUGetLowest(NULL, NULL, cell); // The HDU at the lowest level
    130134        psMetadata *cameraFormat = hdu->format; // The camera format
    131135        psMetadataIterator *specsIter = psMetadataIteratorAlloc(specs, PS_LIST_HEAD, NULL); // Iterator
     
    142146                psMetadataItem *formatted = conceptFormat(spec, conceptItem, cameraFormat, NULL, NULL, cell);
    143147                psString nameSource = NULL; // String with the concept name and ".SOURCE" added
    144                 psStringAppend(nameSource, "%s.SOURCE", name);
     148                psStringAppend(&nameSource, "%s.SOURCE", name);
    145149                bool mdok = true;       // Status of MD lookup
    146150                psString source = psMetadataLookupStr(&mdok, cell->config, nameSource); // The source
     
    149153                        if (cameraItem->type != PS_DATA_STRING) {
    150154                            psLogMsg(__func__, PS_LOG_WARN, "Concept %s is specified by header, but is not "
    151                                      "of type STR --- ignored.\n", conceptItem->name)
     155                                     "of type STR --- ignored.\n", conceptItem->name);
    152156                            continue;
    153157                        }
     
    181185
    182186
    183 bool pmConceptsWriteToDefault(psMetadata *specs, // The concept specifications
    184                               pmFPA *fpa, // The FPA
    185                               pmChip *chip, // The chip
    186                               pmCell *cell, // The cell
    187                               psMetadata *concepts // The concepts
    188                              )
    189 {
    190     bool mdok = true;               // Status of MD lookup
     187bool pmConceptsWriteToDefaults(psMetadata *specs, // The concept specifications
     188                               pmFPA *fpa, // The FPA
     189                               pmChip *chip, // The chip
     190                               pmCell *cell, // The cell
     191                               psMetadata *concepts // The concepts
     192                              )
     193{
     194    pmHDU *hdu = pmHDUGetLowest(NULL, NULL, cell); // The HDU at the lowest level
     195    psMetadata *cameraFormat = hdu->format; // The camera format
     196    bool mdok = true;                   // Status of MD lookup
    191197    psMetadata *defaults = psMetadataLookupMD(&mdok, cameraFormat, "DEFAULTS"); // The DEFAULTS spec
    192198    if (mdok && defaults) {
    193         pmHDU *hdu = getLowestHDU(fpa, chip, cell); // The HDU at the lowest level
     199        pmHDU *hdu = pmHDUGetLowest(fpa, chip, cell); // The HDU at the lowest level
    194200        psMetadata *cameraFormat = hdu->format; // The camera format
    195201        psMetadataIterator *specsIter = psMetadataIteratorAlloc(specs, PS_LIST_HEAD, NULL); // Iterator
     
    202208                psMetadataItem *conceptItem = psMetadataLookup(concepts, name); // The item from the concepts
    203209                psMetadataItem *formatted = conceptFormat(spec, conceptItem, cameraFormat, fpa, chip, cell);
    204                 if (! compareConcepts(cameraItem, formatted)) {
     210                if (! compareConcepts(defaultItem, formatted)) {
    205211                    psLogMsg(__func__, PS_LOG_WARN, "Concept %s is specified by the DEFAULTS in the camera "
    206212                             "format, but the values don't match.\n");
     
    222228                            )
    223229{
    224     bool mdok = true;               // Status of MD lookup
     230    pmHDU *hdu = pmHDUGetLowest(NULL, NULL, cell); // The HDU at the lowest level
     231    psMetadata *cameraFormat = hdu->format; // The camera format
     232    bool mdok = true;                   // Status of MD lookup
    225233    psMetadata *translation = psMetadataLookupMD(&mdok, cameraFormat, "TRANSLATION"); // The TRANSLATION spec
    226234    if (mdok && translation) {
    227         pmHDU *hdu = getLowestHDU(fpa, chip, cell); // The HDU at the lowest level
     235        pmHDU *hdu = pmHDUGetLowest(fpa, chip, cell); // The HDU at the lowest level
    228236        psMetadata *cameraFormat = hdu->format; // The camera format
    229237        psMetadataIterator *specsIter = psMetadataIteratorAlloc(specs, PS_LIST_HEAD, NULL); // Iterator
     
    271279}
    272280
    273 
     281// XXX Warning: This code has not been tested at all
    274282bool pmConceptsWriteToDatabase(psMetadata *specs, // The concept specifications
    275283                               pmFPA *fpa, // The FPA
     
    280288                              )
    281289{
    282     bool mdok = true;               // Status of MD lookup
     290    pmHDU *hdu = pmHDUGetLowest(NULL, NULL, cell); // The HDU at the lowest level
     291    psMetadata *cameraFormat = hdu->format; // The camera format
     292    bool mdok = true;                   // Status of MD lookup
    283293    psMetadata *database = psMetadataLookupMD(&mdok, cameraFormat, "DATABASE"); // The DATABASE spec
    284294    if (mdok && database) {
    285         pmHDU *hdu = getLowestHDU(fpa, chip, cell); // The HDU at the lowest level
     295        pmHDU *hdu = pmHDUGetLowest(fpa, chip, cell); // The HDU at the lowest level
    286296        psMetadata *cameraFormat = hdu->format; // The camera format
    287297        psMetadataIterator *specsIter = psMetadataIteratorAlloc(specs, PS_LIST_HEAD, NULL); // Iterator
     
    291301            psString name = specItem->name; // The concept name
    292302
    293             psMetadataItem *dbItem = psMetadataLookup(&mdok, database, name); // The item from the DATABASE
     303            psMetadataItem *dbItem = psMetadataLookup(database, name); // The item from the DATABASE
    294304            if (dbItem) {
    295305                if (dbItem->type != PS_DATA_METADATA) {
     
    304314                psMetadata *dbLookup = dbItem->data.V; // How to look up the value of interest
    305315                // Name of the table
    306                 const char *tableName = psMetadataLookupStr(&mdStatus, dbLookup, "TABLE");
     316                const char *tableName = psMetadataLookupStr(&mdok, dbLookup, "TABLE");
    307317                // Name of "where" columns
    308                 const char *givenCols = psMetadataLookupStr(&mdStatus, dbLookup, "GIVENDBCOL");
     318                const char *givenCols = psMetadataLookupStr(&mdok, dbLookup, "GIVENDBCOL");
    309319                // Values for "where" columns
    310                 const char *givenPS = psMetadataLookupStr(&mdStatus, dbLookup, "GIVENPS");
     320                const char *givenPS = psMetadataLookupStr(&mdok, dbLookup, "GIVENPS");
    311321
    312322                // Now, need to get the "given"s
     
    318328                        psLogMsg(__func__, PS_LOG_WARN,
    319329                                 "The GIVENDBCOL and GIVENPS entries for %s do not have "
    320                                  "the same number of entries --- ignored.\n", concept);
     330                                 "the same number of entries --- ignored.\n", name);
    321331                    } else {
    322332                        // Iterators for the lists
     
    325335                        char *column = NULL;    // Name of the column
    326336                        while ((column = psListGetAndIncrement(colsIter))) {
    327                             char *name = psListGetAndIncrement(valuesIter); // Name for the value
     337                            char *dependName = psListGetAndIncrement(valuesIter); // Name for the value
    328338                            if (!strlen(column) || !strlen(name)) {
    329339                                psLogMsg(__func__, PS_LOG_WARN, "One of the columns or value names for %s is "
    330                                          " empty --- ignored.\n", concept);
     340                                         " empty --- ignored.\n", name);
    331341                            } else {
    332342                                // Search for the value name
    333                                 psMetadataItem *item = pmConceptReadFromHeader(fpa, chip, cell, name);
    334                                 if (! item) {
    335                                     item = pmConceptReadFromDefault(fpa, chip, cell, name);
     343                                psMetadataItem *item = NULL; // The value
     344                                if (!item && cell) {
     345                                    item = psMetadataLookup(cell->concepts, dependName);
     346                                }
     347                                if (!item && chip) {
     348                                    item = psMetadataLookup(chip->concepts, dependName);
     349                                }
     350                                if (!item && fpa) {
     351                                    item = psMetadataLookup(fpa->concepts, dependName);
    336352                                }
    337353                                if (! item) {
    338354                                    psLogMsg(__func__, PS_LOG_ERROR,
    339355                                             "Unable to find the value name %s for DB "
    340                                              " lookup on %s --- ignored.\n", name, concept);
     356                                             " lookup on %s --- ignored.\n", dependName, name);
    341357                                } else {
    342358                                    // We need to create a new psMetadataItem.  I don't think we can't simply
     
    346362                                }
    347363                            }
    348                             psFree(name);
     364                            psFree(dependName);
    349365                            psFree(column);
    350366                        } // Iterating through the columns
     
    357373                        if (! dbResult || dbResult->n == 0) {
    358374                            psLogMsg(__func__, PS_LOG_WARN, "Unable to find any rows in DB for %s --- "
    359                                      "ignored\n", concept->name);
     375                                     "ignored\n", name);
    360376                            return false;
    361377                        } else {
    362378                            if (dbResult->n > 1) {
    363379                                psLogMsg(__func__, PS_LOG_WARN, "Multiple rows returned in DB lookup for %s "
    364                                          "--- ignored.\n", concept->name);
     380                                         "--- ignored.\n", name);
    365381                            }
    366382                            // Update the DB
    367383                            psMetadata *update = psMetadataAlloc();
    368                             psMetadataAddItem(update, concept, PS_LIST_HEAD, 0);
     384                            psMetadataAddItem(update, conceptItem, PS_LIST_HEAD, 0);
    369385                            psDBUpdateRows(db, tableName, selection, update);
    370386                            psFree(update);
  • branches/rel10_ifa/psModules/src/astrom/pmConceptsWrite.h

    r6448 r6575  
    44#include "pslib.h"
    55#include "pmFPA.h"
     6
     7
     8
     9bool pmConceptsWriteToCamera(psMetadata *specs, // The concept specifications
     10                             pmCell *cell,   // The cell
     11                             psMetadata *concepts // The concepts
     12                            );
     13bool pmConceptsWriteToDefaults(psMetadata *specs, // The concept specifications
     14                               pmFPA *fpa, // The FPA
     15                               pmChip *chip, // The chip
     16                               pmCell *cell, // The cell
     17                               psMetadata *concepts // The concepts
     18                              );
     19bool pmConceptsWriteToHeader(psMetadata *specs, // The concept specifications
     20                             pmFPA *fpa, // The FPA
     21                             pmChip *chip, // The chip
     22                             pmCell *cell, // The cell
     23                             psMetadata *concepts // The concepts
     24                            );
     25bool pmConceptsWriteToDatabase(psMetadata *specs, // The concept specifications
     26                               pmFPA *fpa, // The FPA
     27                               pmChip *chip, // The chip
     28                               pmCell *cell, // The cell
     29                               psDB *db,// The database handle
     30                               psMetadata *concepts // The concepts
     31                              );
     32
     33
     34#ifdef OLD
    635
    736// Well, not really "write", but check to make sure it's there and matches
     
    4877
    4978#endif
     79
     80#endif
  • branches/rel10_ifa/psModules/src/astrom/pmFPAConstruct.c

    r6552 r6575  
    44
    55#include "pmFPA.h"
     6#include "pmConcepts.h"
    67#include "pmFPAConstruct.h"
    7 #include "psAdditionals.h"
    88
    99//////////////////////////////////////////////////////////////////////////////////////////////////////////////
     
    147147        while ((cellName = psListGetAndIncrement(cellNamesIter))) {
    148148            pmCell *cell = pmCellAlloc(chip, cellName); // New cell
     149            pmConceptsReadCell(cell, PM_CONCEPT_SOURCE_DEFAULTS, NULL);
    149150            psFree(cell);               // Drop reference
    150151        }
     152        pmConceptsReadChip(chip, PM_CONCEPT_SOURCE_DEFAULTS, NULL);
    151153        psFree(chip);                   // Drop reference
    152154        psFree(cellNamesIter);
    153155    }
    154156    psFree(componentsIter);
     157    pmConceptsReadFPA(fpa, PM_CONCEPT_SOURCE_DEFAULTS, NULL);
    155158
    156159    return fpa;
     
    241244            }
    242245            cell->config = psMemIncrRefCounter(cellData);
     246            pmConceptsReadCell(cell, PM_CONCEPT_SOURCE_CAMERA, NULL);
    243247        }
    244248    }
     
    291295                }
    292296                cell->config = psMemIncrRefCounter(cellData);
     297                pmConceptsReadCell(cell, PM_CONCEPT_SOURCE_CAMERA, NULL);
    293298            }
    294299
     
    332337                }
    333338                cell->config = psMemIncrRefCounter(cellData);
     339                pmConceptsReadCell(cell, PM_CONCEPT_SOURCE_CAMERA, NULL);
    334340            }
    335341
  • branches/rel10_ifa/psModules/src/astrom/pmFPARead.c

    r6552 r6575  
    189189    }
    190190
     191    pmConceptsReadCell(cell, PM_CONCEPT_SOURCE_HEADER, NULL);
     192
    191193    // Having read the cell, we now have to cut it up
    192194    psRegion *trimsec = psMetadataLookupPtr(NULL, cell->concepts, "CELL.TRIMSEC");
     
    218220            return false;
    219221        }
     222        pmConceptsReadChip(chip, PM_CONCEPT_SOURCE_HEADER, NULL);
    220223    }
    221224
     
    236239            return false;
    237240        }
     241        pmConceptsReadFPA(fpa, PM_CONCEPT_SOURCE_HEADER, NULL);
    238242    }
    239243
  • branches/rel10_ifa/psModules/src/astrom/pmHDU.c

    r6568 r6575  
    4141}
    4242
     43
    4344// Read the HDU
    4445// XXX: Add a region specifier?
Note: See TracChangeset for help on using the changeset viewer.