IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 9437


Ignore:
Timestamp:
Oct 9, 2006, 3:04:45 PM (20 years ago)
Author:
magnier
Message:

fleshing out support for detselect

Location:
trunk/psModules/src/camera
Files:
2 edited

Legend:

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

    r9290 r9437  
    247247            formatName = words->data[1];
    248248            file->camera = pmConfigCameraByName(config, words->data[0]);
     249            // XXX do we need to save the camera name?
    249250            if (!file->camera) {
    250251                psError(PS_ERR_IO, false, "camera %s not found\n", (char *)words->data[0]);
     
    611612        return NULL;
    612613    }
     614    // a camera config is needed (as source of file rule)
     615    if (config->cameraName == NULL) {
     616        psAbort ("pmFPAfileDefine", "camera defined but not cameraName!");
     617    }
    613618
    614619    // find or define a pmFPAfile with this name
     
    633638    // detselect -camera (camera) -time (time) -type (type) [others]
    634639    // camera and time are functions of (pmFPA *input)
    635 
    636     // XXX does this do something NASTY to the stack??
     640    // XXX we need to get the time, but we don't have the CELL.TIME yet set (no CELL yet read)
     641    // add other options here f(pmFPA *input, type)
    637642    psTime *time = psTimeGetNow (PS_TIME_TAI);
    638 
    639     psString camera = psStringCopy ("megacam");
    640     pmDetrendSelectOptions *options = pmDetrendSelectOptionsAlloc(camera, *time, type);
    641     psFree (camera);
     643    pmDetrendSelectOptions *options = pmDetrendSelectOptionsAlloc(config->cameraName, *time, type);
    642644    psFree (time);
    643 
    644     // add other options here f(pmFPA *input, type)
    645645
    646646    // search for existing detrend data (detID)
    647647    pmDetrendSelectResults *results = pmDetrendSelect (options);
    648648    if (!results) {
    649         psLogMsg ("pmFPAfile", 2, "no matching detrend data");
    650         psError (PS_ERR_IO, true, "no matching detrend data");
     649        psError (PS_ERR_IO, false, "no matching detrend data");
    651650        return NULL;
    652651    }
  • trunk/psModules/src/camera/pmFPAfileIO.c

    r8879 r9437  
    3636
    3737    bool status;
    38     char *extra;
    3938    char *mode = NULL;
    4039    char *readMode = "r";
     
    7675    // indirect filenames
    7776    if (!strcasecmp (file->filename, "@FILES")) {
     77        char *extra = pmFPAfileNameFromRule (file->filextra, file, view);
     78        if (extra == NULL) {
     79            psError(PS_ERR_IO, false, "error converting extrule to name %s\n", file->extrule);
     80            return false;
     81        }
     82
    7883        psFree (file->filename);
    79         extra = pmFPAfileNameFromRule (file->filextra, file, view);
    8084        file->filename = psMetadataLookupStr (&status, file->names, extra);
    81         psFree (extra);
     85
    8286        if (file->filename == NULL) {
    8387            psError(PS_ERR_IO, true, "filename lookup error (@FILES) for %s : %s\n", file->filextra, extra);
     88            psFree (extra);
    8489            return false;
    8590        }
    8691        // psMetadataLookupStr just returns a view, file->filename must be protected
    8792        psMemIncrRefCounter (file->filename);
    88     }
     93        psFree (extra);
     94    }
     95
     96    // get name from detrend database
     97    // extrule expands to yield the class_id
     98    // filextra contains the desired -det_id detID -iteration iter string
    8999    if (!strcasecmp (file->filename, "@DETDB")) {
     100        char *extra = pmFPAfileNameFromRule (file->extrule, file, view);
     101        if (extra == NULL) {
     102            psError(PS_ERR_IO, false, "error converting extrule to name %s\n", file->extrule);
     103            return false;
     104        }
     105        psTrace ("pmFPAfile", 6, "looking for detrend (%s, %s)\n", file->filextra, extra);
     106
    90107        psFree (file->filename);
    91         extra = pmFPAfileNameFromRule (file->extrule, file, view);
    92         psTrace ("pmFPAfile", 6, "looking for detrend (%s, %s)\n", file->filextra, extra);
     108
    93109        file->filename = pmDetrendFile (file->filextra, extra);
     110        if (file->filename == NULL) {
     111            psError(PS_ERR_IO, false, "failed to find a valid detrend image for detID %s : classID %s\n", file->filextra, extra);
     112            psFree (extra);
     113            return false;
     114        }
     115
     116        // XXXX this is very ad-hoc
     117        // XXXX prepend the value config[WORKDIR] to the filename...
     118        char *workdir = psMetadataLookupStr (NULL, config->site, "WORKDIR");
     119        if (workdir) {
     120            psStringPrepend (&file->filename, "%s/", workdir);
     121        }
     122
    94123        psTrace ("pmFPAfile", 6, "got detrend file %s\n", file->filename);
    95124        psFree (extra);
    96         if (file->filename == NULL) {
    97             psError(PS_ERR_IO, true, "filename lookup error (@DETBD) for %s : %s\n", file->filextra, extra);
    98             return false;
    99         }
    100125    }
    101126    // if () "neb://" -> get from neb...
     
    571596    PS_ASSERT_PTR_NON_NULL(view, false);
    572597
    573     bool status = true;
    574598    psMetadata *files = config->files;
    575599
    576     // attempt to perform all create, read, write
     600    // attempt to perform all create, read, write, close operations
    577601    psMetadataItem *item = NULL;
    578602    psMetadataIterator *iter = psMetadataIteratorAlloc (files, PS_LIST_HEAD, NULL);
     
    584608            if (!pmFPAfileRead (file, view, config)) {
    585609                psError(PS_ERR_IO, false, "failed READ in FPA_BEFORE block for %s", file->name);
    586                 status = false;
     610                goto failure;
    587611            }
    588612            if (!pmFPAfileCreate(file, view)) {
    589613                psError(PS_ERR_IO, false, "failed CREATE in FPA_BEFORE block for %s", file->name);
    590                 status = false;
     614                goto failure;
    591615            }
    592616            break;
     
    594618            if (!pmFPAfileWrite (file, view, config)) {
    595619                psError(PS_ERR_IO, false, "failed WRITE in FPA_AFTER block for %s", file->name);
    596                 status = false;
     620                goto failure;
    597621            }
    598622            if (!pmFPAfileClose(file, view)) {
    599623                psError(PS_ERR_IO, false, "failed CLOSE in FPA_AFTER block for %s", file->name);
    600                 status = false;
     624                goto failure;
    601625            }
    602626            break;
     
    617641            if (!pmFPAfileFreeData(file, view)) {
    618642                psError(PS_ERR_IO, false, "failed FREE in FPA_AFTER block for %s", file->name);
    619                 status = false;
     643                goto failure;
    620644            }
    621645            break;
     
    625649    }
    626650    psFree (iter);
    627     return status;
    628 }
    629 
     651    return true;
     652
     653failure:
     654    psFree (iter);
     655    return false;
     656}
     657
Note: See TracChangeset for help on using the changeset viewer.