IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Jan 11, 2012, 2:23:07 PM (15 years ago)
Author:
eugene
Message:

generate a background model of the variance image for use in the model-based variance; finish the model-based variance analysis

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ipp-20111122/psphot/src/psphotFitSourcesLinear.c

    r33086 r33094  
    1212static bool SetBorderMatrixElements (psSparseBorder *border, pmReadout *readout, psArray *sources, bool constant_weights, int SKY_FIT_ORDER, psImageMaskType markVal);
    1313
    14 bool psphotGenerateModelVariance (pmConfig *config, const pmFPAview *view, int index, psMetadata *recipe, pmReadout *readout, psArray *sources);
     14bool psphotGenerateModelVariance (pmConfig *config, const pmFPAview *view, pmFPAfile *file, int index, psMetadata *recipe, pmReadout *readout, psArray *sources);
    1515pmSourceFitVarMode psphotGetFitVarMode (psMetadata *recipe);
    1616bool psphotFreeModelVariance (pmReadout *readout, psArray *sources);
     
    7474        if (fitVarMode == PM_SOURCE_PHOTFIT_MODEL_VAR) {
    7575            // generate the model variance image & source pointers
    76             if (!psphotGenerateModelVariance (config, view, i, recipe, readout, sources)) {
     76            if (!psphotGenerateModelVariance (config, view, file, i, recipe, readout, sources)) {
    7777                psError (PSPHOT_ERR_CONFIG, false, "failed to fit sources (linear) for %s entry %d", filerule, i);
    7878                return false;
     
    554554}
    555555
    556 bool psphotGenerateModelVariance (pmConfig *config, const pmFPAview *view, int index, psMetadata *recipe, pmReadout *readout, psArray *sources) {
     556bool psphotModelBackgroundReadout(psImage *model,  // Model image
     557                                  psImage *modelStdev, // Model stdev image
     558                                  psMetadata *analysis, // Analysis metadata for outputs
     559                                  pmReadout *readout, // Readout for which to generate a background model
     560                                  psImageBinning *binning, // Binning parameters
     561                                  const pmConfig *config,// Configuration
     562                                  bool useVarianceImage
     563    );
     564
     565bool psphotGenerateModelVariance (pmConfig *config, const pmFPAview *view, pmFPAfile *file, int index, psMetadata *recipe, pmReadout *readout, psArray *sources) {
    557566
    558567    bool status = false;
     
    573582    psImage *modelVar = psImageCopy (NULL, readout->variance, PS_TYPE_F32);
    574583
    575     // find the pmFPAfile for the readout (background model is saved on PSPHOT.BACKMDL regardless of 'filerule')
    576     pmFPAfile *backModelFile = pmFPAfileSelectSingle(config->files, "PSPHOT.BACKMDL", index); // File of interest
    577     assert (backModelFile);
    578 
    579     // find the background model readout from the correct location
    580     pmReadout *backModel = READOUT_OR_INTERNAL(view, backModelFile);
    581     psAssert (backModel, "this must exist");
    582 
    583584    // find the binning information
    584     psImageBinning *backBinning = psMetadataLookupPtr(&status, backModel->analysis, "PSPHOT.BACKGROUND.BINNING");
     585    psImageBinning *backBinning = psphotBackgroundBinning (modelVar, config);
    585586    assert (backBinning);
     587   
     588    psImage *varModel = psImageAlloc(backBinning->nXruff, backBinning->nYruff, PS_TYPE_F32); // Background model
     589    psImage *varModelStdev = psImageAlloc(backBinning->nXruff, backBinning->nYruff, PS_TYPE_F32); // Background model
     590
     591    if (!psphotModelBackgroundReadout(varModel, varModelStdev, NULL, readout, backBinning, config, true)) {
     592        psError(PS_ERR_UNKNOWN, false, "Unable to generate background model");
     593        psFree (varModel);
     594        psFree (varModelStdev);
     595        return false;
     596    }
    586597
    587598    // linear interpolation to full-scale
    588     if (!psImageUnbin (modelVar, backModel->image, backBinning)) {
    589         psError (PSPHOT_ERR_PROG, true, "inconsistent sizes for unbinning");
    590         return false;
    591     }
     599    if (!psImageUnbin (modelVar, varModel, backBinning)) {
     600        psError (PSPHOT_ERR_PROG, true, "inconsistent sizes for unbinning");
     601        psFree (varModel);
     602        psFree (varModelStdev);
     603        return false;
     604    }
     605
     606    psFree (varModel);
     607    psFree (varModelStdev);
    592608
    593609    // XXX for a test:
     
    609625        psAssert (!source->modelVar, "programming error : modelVar should be NULL here");
    610626        psAssert (source->modelFlux, "programming error : modelFlux should not be NULL here");
    611         source->modelVar = psImageSubset(readout->image, region);
     627        psAssert (source->modelFlux->data.F32, "programming error : modelFlux should not be NULL here");
     628        source->modelVar = psImageSubset(modelVar, region);
    612629
    613630        // add the source model to the model variance image
     
    615632    }
    616633
    617     // XXX add the readnoise to the image?  This is a bit problematic because I don't have the
    618     // per-cell information.  Alternatively, I could use the median of the variance image or
    619     // something equivalent to a background model to define the base level of the variance
    620 
    621634    // XXX for a test:
    622635    psphotSaveImage (NULL, modelVar, "model.var.fits");
    623     psphotSaveImage (NULL, readout->image, "image.var.fits");
     636    psphotSaveImage (NULL, readout->variance, "image.var.fits");
    624637
    625638    // we save the model variance for future reference
     
    638651    assert (modelVar);
    639652
     653    psMetadataRemoveKey (readout->analysis, "PSPHOT.MODEL.VAR");
     654
    640655    // clear modelVar pointers for all of the source models
    641656    for (int i = 0; i < sources->n; i++) {
     
    645660        psFree (source->modelVar);
    646661    }
    647     psFree (modelVar);
    648662
    649663    return true;
Note: See TracChangeset for help on using the changeset viewer.