IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 12300


Ignore:
Timestamp:
Mar 7, 2007, 3:22:17 PM (19 years ago)
Author:
Paul Price
Message:

Images in the detrend database may be in different formats.
Therefore, in order to get a detrend matching the appropriate level,
we need to place a restriction on the class_id (class identifier,
which can be 'fpa', 'ccd00', or even 'ccd00:cell01'). To do this, we
have "detselect -search" return the file level (fpa/chip/cell) for the
detrend, so that we can provide the correct constraint on the class_id
(using "detselect -select"). Introduced a new metadata in the camera
configuration ("CLASSID") that provides rules for the class_id (e.g.,
"{CHIP.NAME}:{CELL.NAME}") according to the file level string.

Location:
trunk/psModules/src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/psModules/src/camera/pmFPAfileDefine.c

    r12152 r12300  
    880880        return NULL;
    881881    }
     882    file->detrend = results;
    882883
    883884    // replace the existing value of filextra with the selected detID
     
    889890    // file->fileLevel = results->level;
    890891
    891     psFree (results);
    892892    psFree (options);
    893893
  • trunk/psModules/src/camera/pmFPAfileIO.c

    r11801 r12300  
    225225    // get name from detrend database
    226226    // extrule expands to yield the class_id
    227     // filextra contains the desired -det_id detID -iteration iter string
     227    // file->detrend->detID contains the desired -det_id detID -iteration iter string
    228228    if (!strcasecmp (file->filename, "@DETDB")) {
    229         char *extra = pmFPAfileNameFromRule (file->extrule, file, view);
    230         if (extra == NULL) {
    231             psError(PS_ERR_IO, false, "error converting extrule to name %s\n", file->extrule);
    232             return false;
    233         }
    234         psTrace ("pmFPAfile", 6, "looking for detrend (%s, %s)\n", file->filextra, extra);
    235 
     229        if (!file->detrend) {
     230            psError(PS_ERR_UNEXPECTED_NULL, true, "Unable to find information about selected detrend.");
     231            return false;
     232        }
     233
     234        psString classId = NULL;        // The class identifier, to pass to pmDetrendFile
     235        psMetadata *menu = psMetadataLookupMetadata(&status, file->camera, "CLASSID"); // Menu of class IDs
     236        if (!status || !menu) {
     237            psWarning("Unable to find CLASSID metadata in camera configuration --- "
     238                      "assuming no class identifier required.");
     239        } else {
     240            const char *rule = psMetadataLookupStr(&status, menu, file->detrend->level); // Rule for class_id
     241            if (!status || !rule || strlen(rule) == 0) {
     242                psWarning("Unable to find %s in CLASSID within camera configuration --- "
     243                          "attempting to proceed without it.", file->detrend->level);
     244            } else {
     245                classId = pmFPAfileNameFromRule(rule, file, view);
     246                if (!classId) {
     247                    psError(PS_ERR_IO, false, "error converting extrule to name: %s\n", rule);
     248                    return false;
     249                }
     250            }
     251        }
     252        psTrace ("pmFPAfile", 6, "looking for detrend (%s, %s)\n", file->detrend->detID, classId);
    236253        psFree (file->filename);
    237         file->filename = pmDetrendFile(file->filextra, extra, config);
     254
     255        file->filename = pmDetrendFile(file->detrend->detID, classId, config);
    238256        if (file->filename == NULL) {
    239             psError(PS_ERR_IO, false, "failed to find a valid detrend image for detID %s : classID %s\n", file->filextra, extra);
    240             psFree (extra);
     257            psError(PS_ERR_IO, false, "failed to find a valid detrend image for detID %s : classID %s\n", file->detrend->detID, classId);
     258            psFree (classId);
    241259            return false;
    242260        }
    243261
    244262        psTrace ("pmFPAfile", 6, "got detrend file %s\n", file->filename);
    245         psFree (extra);
     263        psFree (classId);
    246264    }
    247265
  • trunk/psModules/src/detrend/pmDetrendDB.c

    r11876 r12300  
    4747    options->version  = NULL;
    4848    options->dettype  = NULL;
    49     options->exptime  = 0.0; 
    50     options->airmass  = 0.0; 
    51     options->dettemp  = 0.0; 
    52     options->twilight = 0.0; 
     49    options->exptime  = 0.0;
     50    options->airmass  = 0.0;
     51    options->dettemp  = 0.0;
     52    options->twilight = 0.0;
    5353
    5454    options->exptimeSet  = false; // not selected
     
    120120    char *type = NULL;
    121121    if (options->dettype) {
    122         type = psMemIncrRefCounter (options->dettype);
     122        type = psMemIncrRefCounter (options->dettype);
    123123    } else {
    124         type = pmDetrendTypeToString (options->type);
     124        type = pmDetrendTypeToString (options->type);
    125125    }
    126126    unsigned int nFail;
     
    189189
    190190    bool mdstatus;
    191     results->level = 0;
    192191    int detID = psMetadataLookupS32 (&mdstatus, md, "det_id");
     192    if (!mdstatus) {
     193        psError(PS_ERR_UNEXPECTED_NULL, true, "Unable to find det_id in output from detselect.");
     194        psLogMsg ("psModule.detrend", PS_LOG_ERROR, "detselect response:\n %s\n", buffer->data);
     195        goto failure;
     196    }
    193197    int iteration  = psMetadataLookupS32 (&mdstatus, md, "iteration");
     198    if (!mdstatus) {
     199        psError(PS_ERR_UNEXPECTED_NULL, true, "Unable to find iteration in output from detselect.");
     200        psLogMsg ("psModule.detrend", PS_LOG_ERROR, "detselect response:\n %s\n", buffer->data);
     201        goto failure;
     202    }
     203    psString fileLevel = psMetadataLookupStr(&mdstatus, md, "file_level");
     204    if (!mdstatus || !fileLevel || strlen(fileLevel) == 0) {
     205        psError(PS_ERR_UNEXPECTED_NULL, true, "Unable to find file_level in output from detselect.");
     206        psLogMsg ("psModule.detrend", PS_LOG_ERROR, "detselect response:\n %s\n", buffer->data);
     207        goto failure;
     208    }
    194209
    195210    results->detID = NULL; // it should be NULL already from the Alloc above
    196211    psStringAppend (&results->detID, " -det_id %d -iteration %d ", detID, iteration);
     212    results->level = psMemIncrRefCounter(fileLevel);
    197213
    198214    psTrace("psModules.detrend", 5, "generated detID %s\n", results->detID);
     
    225241
    226242    PS_ASSERT_PTR_NON_NULL(detID, NULL);
    227     PS_ASSERT_PTR_NON_NULL(classID, NULL);
    228243
    229244    bool status;
     
    232247
    233248    // generate the detselect command
    234     psStringAppend (&line, "detselect -select %s -class_id %s", detID, classID);
     249    psStringAppend (&line, "detselect -select %s", detID);
     250    if (classID && strlen(classID) > 0) {
     251        psStringAppend(&line, " -class_id %s", classID);
     252    }
    235253    pmConfigDatabaseCommand(&line, config);
    236254    pmConfigTraceCommand(&line);
  • trunk/psModules/src/detrend/pmDetrendDB.h

    r11876 r12300  
    99 * @author EAM, IfA
    1010 *
    11  * @version $Revision: 1.9 $ $Name: not supported by cvs2svn $
    12  * @date $Date: 2007-02-18 21:03:20 $
     11 * @version $Revision: 1.10 $ $Name: not supported by cvs2svn $
     12 * @date $Date: 2007-03-08 01:22:17 $
    1313 * Copyright 2004-2005 Institute for Astronomy, University of Hawaii
    1414 */
     
    3535} pmDetrendType;
    3636
    37 typedef struct
    38 {
    39     char *camera;                       // name of camera
    40     char *version;                      // optional version string
    41     char *filter;                       // name of filter
    42     char *dettype;                      // actual detrend type name
    43     float exptime;                      // exposure time (for dark, maybe flat & fringe)
    44     float airmass;                      // for fringe
    45     float dettemp;                      // for fringe
    46     float twilight;                     // hours (or seconds?) since/before nearest twilight
    47     psTime time;                        // time of input data
    48     pmDetrendType type;                 // type of detrend data
     37typedef struct {
     38    char *camera;                       // name of camera
     39    char *version;                      // optional version string
     40    char *filter;                       // name of filter
     41    char *dettype;                      // actual detrend type name
     42    float exptime;                      // exposure time (for dark, maybe flat & fringe)
     43    float airmass;                      // for fringe
     44    float dettemp;                      // for fringe
     45    float twilight;                     // hours (or seconds?) since/before nearest twilight
     46    psTime time;                        // time of input data
     47    pmDetrendType type;                 // type of detrend data
    4948
    5049    bool  exptimeSet;
     
    5251    bool  dettempSet;
    5352    bool  twilightSet;
    54 }
    55 pmDetrendSelectOptions;
     53} pmDetrendSelectOptions;
    5654
    57 typedef struct
    58 {
    59     char *detID;   // identifier of detrend run
    60     pmFPALevel level;   // level in FPA hierarchy of individual file
    61 }
    62 pmDetrendSelectResults;
    63 
    64 typedef struct
    65 {
    66     char *detID;   // identifier of detrend image
    67     char *classID;   // level in FPA hierarchy of individual file
    68 }
    69 pmDetrendFileOptions;
     55typedef struct {
     56    char *detID;                        // identifier of detrend run
     57    const char *level;                  // level in FPA hierarchy of individual file
     58} pmDetrendSelectResults;
    7059
    7160psString pmDetrendTypeToString (pmDetrendType type);
Note: See TracChangeset for help on using the changeset viewer.