- Timestamp:
- Jan 11, 2012, 2:23:07 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/ipp-20111122/psphot/src/psphotFitSourcesLinear.c
r33086 r33094 12 12 static bool SetBorderMatrixElements (psSparseBorder *border, pmReadout *readout, psArray *sources, bool constant_weights, int SKY_FIT_ORDER, psImageMaskType markVal); 13 13 14 bool psphotGenerateModelVariance (pmConfig *config, const pmFPAview *view, int index, psMetadata *recipe, pmReadout *readout, psArray *sources);14 bool psphotGenerateModelVariance (pmConfig *config, const pmFPAview *view, pmFPAfile *file, int index, psMetadata *recipe, pmReadout *readout, psArray *sources); 15 15 pmSourceFitVarMode psphotGetFitVarMode (psMetadata *recipe); 16 16 bool psphotFreeModelVariance (pmReadout *readout, psArray *sources); … … 74 74 if (fitVarMode == PM_SOURCE_PHOTFIT_MODEL_VAR) { 75 75 // 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)) { 77 77 psError (PSPHOT_ERR_CONFIG, false, "failed to fit sources (linear) for %s entry %d", filerule, i); 78 78 return false; … … 554 554 } 555 555 556 bool psphotGenerateModelVariance (pmConfig *config, const pmFPAview *view, int index, psMetadata *recipe, pmReadout *readout, psArray *sources) { 556 bool 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 565 bool psphotGenerateModelVariance (pmConfig *config, const pmFPAview *view, pmFPAfile *file, int index, psMetadata *recipe, pmReadout *readout, psArray *sources) { 557 566 558 567 bool status = false; … … 573 582 psImage *modelVar = psImageCopy (NULL, readout->variance, PS_TYPE_F32); 574 583 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 interest577 assert (backModelFile);578 579 // find the background model readout from the correct location580 pmReadout *backModel = READOUT_OR_INTERNAL(view, backModelFile);581 psAssert (backModel, "this must exist");582 583 584 // find the binning information 584 psImageBinning *backBinning = ps MetadataLookupPtr(&status, backModel->analysis, "PSPHOT.BACKGROUND.BINNING");585 psImageBinning *backBinning = psphotBackgroundBinning (modelVar, config); 585 586 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 } 586 597 587 598 // 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); 592 608 593 609 // XXX for a test: … … 609 625 psAssert (!source->modelVar, "programming error : modelVar should be NULL here"); 610 626 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); 612 629 613 630 // add the source model to the model variance image … … 615 632 } 616 633 617 // XXX add the readnoise to the image? This is a bit problematic because I don't have the618 // per-cell information. Alternatively, I could use the median of the variance image or619 // something equivalent to a background model to define the base level of the variance620 621 634 // XXX for a test: 622 635 psphotSaveImage (NULL, modelVar, "model.var.fits"); 623 psphotSaveImage (NULL, readout-> image, "image.var.fits");636 psphotSaveImage (NULL, readout->variance, "image.var.fits"); 624 637 625 638 // we save the model variance for future reference … … 638 651 assert (modelVar); 639 652 653 psMetadataRemoveKey (readout->analysis, "PSPHOT.MODEL.VAR"); 654 640 655 // clear modelVar pointers for all of the source models 641 656 for (int i = 0; i < sources->n; i++) { … … 645 660 psFree (source->modelVar); 646 661 } 647 psFree (modelVar);648 662 649 663 return true;
Note:
See TracChangeset
for help on using the changeset viewer.
