IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Jan 7, 2010, 5:07:54 PM (17 years ago)
Author:
eugene
Message:

upgrade psphot functions to work in the stack context (see doc/stack.txt)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/20091201/psphot/src/psphotModelBackground.c

    r26523 r26542  
    3030
    3131// Generate the background model
    32 static bool backgroundModel(psImage *model,  // Model image
    33                             psImage *modelStdev, // Model stdev image
    34                             psMetadata *analysis, // Analysis metadata for outputs
    35                             pmReadout *readout, // Readout for which to generate a background model
    36                             psImageBinning *binning, // Binning parameters
    37                             const pmConfig *config // Configuration
    38                             )
     32// generate the median in NxN boxes, clipping heavily
     33// linear interpolation to generate full-scale model
     34bool psphotModelBackgroundReadout(psImage *model,  // Model image
     35                                  psImage *modelStdev, // Model stdev image
     36                                  psMetadata *analysis, // Analysis metadata for outputs
     37                                  pmReadout *readout, // Readout for which to generate a background model
     38                                  psImageBinning *binning, // Binning parameters
     39                                  const pmConfig *config // Configuration
     40    )
    3941{
    4042    psTimerStart ("psphot.background");
     
    328330}
    329331
    330 // XXX these two functions are absurdly-named and very similar -- fix!
    331 
    332 psImage *psphotBackgroundModel(pmReadout *ro, const pmConfig *config)
    333 {
    334     PM_ASSERT_READOUT_NON_NULL(ro, NULL);
    335     PM_ASSERT_READOUT_IMAGE(ro, NULL);
     332// generate a background model for a single readout. do not save an associated pmFPAfile for possible output
     333psImage *psphotModelBackgroundReadoutNoFile(pmReadout *readout, const pmConfig *config)
     334{
     335    PM_ASSERT_READOUT_NON_NULL(readout, NULL);
     336    PM_ASSERT_READOUT_IMAGE(readout, NULL);
    336337    PS_ASSERT_PTR_NON_NULL(config, NULL);
    337338
    338     psImageBinning *binning = psphotBackgroundBinning(ro->image, config); // Image binning parameters
     339    psImageBinning *binning = psphotBackgroundBinning(readout->image, config); // Image binning parameters
    339340    psImage *model = psImageAlloc(binning->nXruff, binning->nYruff, PS_TYPE_F32); // Background model
    340341    psImage *modelStdev = psImageAlloc(binning->nXruff, binning->nYruff, PS_TYPE_F32); // Standard deviation
    341342
    342     if (!backgroundModel(model, modelStdev, ro->analysis, ro, binning, config)) {
     343    if (!psphotModelBackgroundReadout(model, modelStdev, readout->analysis, readout, binning, config)) {
    343344        psFree(model);
    344345        psFree(modelStdev);
     
    346347        return NULL;
    347348    }
    348 
    349349    psFree(modelStdev);
    350 
    351350    return model;
    352351}
    353352
    354 
    355 // generate the median in NxN boxes, clipping heavily
    356 // linear interpolation to generate full-scale model
    357 bool psphotModelBackground (pmConfig *config, const pmFPAview *view, const char *filename)
    358 {
    359     bool status = true;
    360 
     353// generate a background model for readout number index; save an associated pmFPAfile for possible output
     354bool psphotModelBackgroundReadoutFileIndex (pmConfig *config, const pmFPAview *view, const char *filename, int index)
     355{
    361356    // find the currently selected readout
    362     pmFPAfile *file = psMetadataLookupPtr (&status, config->files, filename);
     357    pmFPAfile *file = pmFPAfileSelectSingle(config->files, filename, index); // File of interest
     358    PS_ASSERT_PTR_NON_NULL (file, false);
     359
    363360    pmFPA *inFPA = file->fpa;
    364361    pmReadout *readout = pmFPAviewThisReadout(view, inFPA);
     
    368365    pmReadout *modelStdev = pmFPAGenerateReadout(config, view, "PSPHOT.BACKMDL.STDEV", inFPA, binning);
    369366
    370     if (!backgroundModel(model->image, modelStdev->image, model->analysis, readout, binning, config)) {
     367    if (!psphotModelBackgroundReadout(model->image, modelStdev->image, model->analysis, readout, binning, config)) {
    371368        psError(PS_ERR_UNKNOWN, false, "Unable to generate background model");
    372369        return false;
     
    378375
    379376// XXX supply filename or keep PSPHOT.INPUT fixed?
    380 bool psphotStackModelBackground (pmConfig *config, const pmFPAview *view)
    381 {
    382     bool status = true;
    383 
    384     int num = psMetadataAddS32 (&status, config->arguments, "INPUTS.NUM");
    385     psAbort (!status, "programming error: must define INPUTS.NUM");
     377bool psphotModelBackground (pmConfig *config, const pmFPAview *view)
     378{
     379    bool status = false;
     380
     381    int num = psMetadataLookupS32 (&status, config->arguments, "PSPHOT.INPUT.NUM");
     382    psAssert (status, "programming error: must define PSPHOT.INPUT.NUM");
    386383
    387384    // loop over the available readouts
    388385    for (int i = 0; i < num; i++) {
    389 
    390         pmFPAfile *file = pmFPAfileSelectSingle(config->files, "PSPHOT.INPUT", i); // File of interest
    391 
    392         // find the currently selected readout
    393         pmReadout  *readout = pmFPAviewThisReadout (view, file->fpa);
    394         PS_ASSERT_PTR_NON_NULL (readout, false);
    395 
    396         psImageBinning *binning = psphotBackgroundBinning(readout->image, config); // Image binning parameters
    397         pmReadout *model = pmFPAGenerateReadout(config, view, "PSPHOT.BACKMDL", inFPA, binning); // this needs to be a MULTI like PSPHOT.INPUT
    398         pmReadout *modelStdev = pmFPAGenerateReadout(config, view, "PSPHOT.BACKMDL.STDEV", inFPA, binning); // this needs to be a MULTI like PSPHOT.INPUT
    399 
    400         // XXX save results on model->analysis or readout->analysis??
    401         if (!backgroundModel(model->image, modelStdev->image, model->analysis, readout, binning, config)) {
    402             psError(PS_ERR_UNKNOWN, false, "Unable to generate background model");
     386        if (!psphotModelBackgroundReadoutFileIndex(config, view, "PSPHOT.INPUT", i)) {
     387            psError (PSPHOT_ERR_CONFIG, false, "failed to model background for PSPHOT.INPUT entry %d", i);
    403388            return false;
    404389        }
    405         npass ++;
    406390    }
    407391    return true;
Note: See TracChangeset for help on using the changeset viewer.