LSSTApplications  18.0.0+106,18.0.0+50,19.0.0,19.0.0+1,19.0.0+10,19.0.0+11,19.0.0+13,19.0.0+17,19.0.0+2,19.0.0-1-g20d9b18+6,19.0.0-1-g425ff20,19.0.0-1-g5549ca4,19.0.0-1-g580fafe+6,19.0.0-1-g6fe20d0+1,19.0.0-1-g7011481+9,19.0.0-1-g8c57eb9+6,19.0.0-1-gb5175dc+11,19.0.0-1-gdc0e4a7+9,19.0.0-1-ge272bc4+6,19.0.0-1-ge3aa853,19.0.0-10-g448f008b,19.0.0-12-g6990b2c,19.0.0-2-g0d9f9cd+11,19.0.0-2-g3d9e4fb2+11,19.0.0-2-g5037de4,19.0.0-2-gb96a1c4+3,19.0.0-2-gd955cfd+15,19.0.0-3-g2d13df8,19.0.0-3-g6f3c7dc,19.0.0-4-g725f80e+11,19.0.0-4-ga671dab3b+1,19.0.0-4-gad373c5+3,19.0.0-5-ga2acb9c+2,19.0.0-5-gfe96e6c+2,w.2020.01
LSSTDataManagementBasePackage
Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | List of all members
lsst::jointcal::SimpleMagnitudeModel Class Reference

#include <SimplePhotometryModel.h>

Inheritance diagram for lsst::jointcal::SimpleMagnitudeModel:
lsst::jointcal::SimplePhotometryModel lsst::jointcal::PhotometryModel

Public Member Functions

 SimpleMagnitudeModel (CcdImageList const &ccdImageList, double errorPedestal_=0)
 
void offsetFittedStar (FittedStar &fittedStar, double delta) const override
 Offset the appropriate flux or magnitude (by -delta). More...
 
double computeResidual (CcdImage const &ccdImage, MeasuredStar const &measuredStar) const override
 Compute the residual between the model applied to a star and its associated fittedStar. More...
 
double transform (CcdImage const &ccdImage, MeasuredStar const &measuredStar) const override
 Return the on-sky transformed flux for measuredStar on ccdImage. More...
 
double transformError (CcdImage const &ccdImage, MeasuredStar const &measuredStar) const override
 Return the on-sky transformed flux uncertainty for measuredStar on ccdImage. More...
 
double getRefError (RefStar const &refStar) const override
 Return the refStar error appropriate for this model (e.g. fluxErr or magErr). More...
 
double computeRefResidual (FittedStar const &fittedStar, RefStar const &refStar) const override
 Return the fittedStar - refStar residual appropriate for this model (e.g. flux - flux or mag - mag). More...
 
std::shared_ptr< afw::image::PhotoCalibtoPhotoCalib (CcdImage const &ccdImage) const override
 Return the mapping of ccdImage represented as a PhotoCalib. More...
 
Eigen::Index assignIndices (std::string const &whatToFit, Eigen::Index firstIndex) override
 Assign indices in the full matrix to the parameters being fit in the mappings, starting at firstIndex. More...
 
void offsetParams (Eigen::VectorXd const &delta) override
 Offset the parameters by the provided amounts (by -delta). More...
 
void freezeErrorTransform () override
 Once this routine has been called, the error transform is not modified by offsetParams(). More...
 
void getMappingIndices (CcdImage const &ccdImage, IndexVector &indices) const override
 Get how this set of parameters (of length Npar()) map into the "grand" fit. More...
 
std::size_t getTotalParameters () const override
 Return the total number of parameters in this model. More...
 
void computeParameterDerivatives (MeasuredStar const &measuredStar, CcdImage const &ccdImage, Eigen::VectorXd &derivatives) const override
 Compute the parametric derivatives of this model. More...
 
void dump (std::ostream &stream=std::cout) const override
 Dump the contents of the transforms, for debugging. More...
 
std::size_t getNpar (CcdImage const &ccdImage) const
 Return the number of parameters in the mapping of CcdImage. More...
 
PhotometryMappingBase const & getMapping (CcdImage const &ccdImage) const
 Get the mapping associated with ccdImage. More...
 
bool validate (CcdImageList const &ccdImageList, int ndof) const
 Return true if this is a "reasonable" model. More...
 
bool checkPositiveOnBBox (CcdImage const &ccdImage) const
 Check that the model is positive on the ccdImage bbox. More...
 
double getErrorPedestal ()
 
double tweakFluxError (jointcal::MeasuredStar const &measuredStar) const
 Add a fraction of the instrumental flux to the instrumental flux error, in quadrature. More...
 
double tweakMagnitudeError (jointcal::MeasuredStar const &measuredStar) const
 Add a small magnitude offset to the "instrumental magnitude" error, in quadrature. More...
 

Protected Types

typedef std::unordered_map< CcdImageKey, std::unique_ptr< PhotometryMapping > > MapType
 

Protected Member Functions

PhotometryMappingBasefindMapping (CcdImage const &ccdImage) const override
 Return the mapping associated with this ccdImage. More...
 

Protected Attributes

MapType _myMap
 
LOG_LOGGER _log
 lsst.logging instance, to be created by a subclass so that messages have consistent name. More...
 
double errorPedestal
 

Detailed Description

Definition at line 120 of file SimplePhotometryModel.h.

Member Typedef Documentation

◆ MapType

Definition at line 79 of file SimplePhotometryModel.h.

Constructor & Destructor Documentation

◆ SimpleMagnitudeModel()

lsst::jointcal::SimpleMagnitudeModel::SimpleMagnitudeModel ( CcdImageList const &  ccdImageList,
double  errorPedestal_ = 0 
)

Definition at line 131 of file SimplePhotometryModel.cc.

132  : SimplePhotometryModel(ccdImageList, LOG_GET("jointcal.SimpleMagnitudeModel"), errorPedestal_) {
133  for (auto const &ccdImage : ccdImageList) {
134  auto photoCalib = ccdImage->getPhotoCalib();
135  // Use the single-frame processing calibration from the PhotoCalib as the default.
136  double calib = utils::nanojanskyToABMagnitude(photoCalib->getCalibrationMean());
137  auto transform = std::make_shared<MagnitudeTransformSpatiallyInvariant>(calib);
138  _myMap.emplace(ccdImage->getHashKey(), std::make_unique<PhotometryMapping>(transform));
139  }
140  LOGLS_INFO(_log, "SimpleMagnitudeModel got " << _myMap.size() << " ccdImage mappings.");
141 }
SimplePhotometryModel(CcdImageList const &ccdImageList, LOG_LOGGER log, double errorPedestal_=0)
double transform(CcdImage const &ccdImage, MeasuredStar const &measuredStar) const override
Return the on-sky transformed flux for measuredStar on ccdImage.
#define LOGLS_INFO(logger, message)
Log a info-level message using an iostream-based interface.
Definition: Log.h:628
Key< int > calib
Definition: Exposure.cc:66
T size(T... args)
double nanojanskyToABMagnitude(double flux)
Convert a flux in nanojansky to AB magnitude.
Definition: Magnitude.cc:30
LOG_LOGGER _log
lsst.logging instance, to be created by a subclass so that messages have consistent name...
T emplace(T... args)
#define LOG_GET(logger)
Returns a Log object associated with logger.
Definition: Log.h:75

Member Function Documentation

◆ assignIndices()

Eigen::Index lsst::jointcal::SimplePhotometryModel::assignIndices ( std::string const &  whatToFit,
Eigen::Index  firstIndex 
)
overridevirtualinherited

Assign indices in the full matrix to the parameters being fit in the mappings, starting at firstIndex.

Parameters
[in]whatToFitString containing parameters to fit.
[in]firstIndexIndex to start assigning at.
Returns
The highest assigned index.

Implements lsst::jointcal::PhotometryModel.

Definition at line 38 of file SimplePhotometryModel.cc.

38  {
39  Eigen::Index ipar = firstIndex;
40  for (auto const &i : _myMap) {
41  auto mapping = i.second.get();
42  mapping->setIndex(ipar);
43  ipar += mapping->getNpar();
44  }
45  return ipar;
46 }

◆ checkPositiveOnBBox()

bool lsst::jointcal::PhotometryModel::checkPositiveOnBBox ( CcdImage const &  ccdImage) const
inherited

Check that the model is positive on the ccdImage bbox.

Parameters
ccdImageThe ccdImage to test.
Returns
True if the image is positive on a sampling of points of the ccdImage bbox.

Definition at line 49 of file PhotometryModel.cc.

49  {
50  bool check = true;
51  auto bbox = ccdImage.getImageFrame();
52  for (auto const &x : {bbox.xMin, bbox.getCenter().x, bbox.xMax})
53  for (auto const &y : {bbox.yMin, bbox.getCenter().y, bbox.yMax}) {
54  // flux, fluxErr, instFlux, instFluxErr all 1
56  star.setInstFluxAndErr(1, 1);
57  double result = transform(ccdImage, star);
58  // Don't short circuit so that we log every place the model is negative.
59  if (result < 0) {
60  LOGLS_WARN(_log, "CcdImage " << ccdImage.getName() << " is negative at (" << x << "," << y
61  << "): " << result);
62  check = false;
63  }
64  }
65  return check;
66 }
AmpInfoBoxKey bbox
Definition: Amplifier.cc:117
#define LOGLS_WARN(logger, message)
Log a warn-level message using an iostream-based interface.
Definition: Log.h:648
int y
Definition: SpanSet.cc:49
The base class for handling stars. Used by all matching routines.
Definition: BaseStar.h:50
objects measured on actual images.
Definition: MeasuredStar.h:46
double x
LOG_LOGGER _log
lsst.logging instance, to be created by a subclass so that messages have consistent name...
py::object result
Definition: _schema.cc:429
virtual double transform(CcdImage const &ccdImage, MeasuredStar const &measuredStar) const =0
Return the on-sky transformed flux for measuredStar on ccdImage.

◆ computeParameterDerivatives()

void lsst::jointcal::SimplePhotometryModel::computeParameterDerivatives ( MeasuredStar const &  measuredStar,
CcdImage const &  ccdImage,
Eigen::VectorXd &  derivatives 
) const
overridevirtualinherited

Compute the parametric derivatives of this model.

Parameters
[in]measuredStarThe measured star with the position and flux to compute at.
[in]ccdImageThe ccdImage containing the measured star, to find the correct mapping.
[out]derivativesThe computed derivatives. Must be pre-allocated to the correct size.

Implements lsst::jointcal::PhotometryModel.

Definition at line 76 of file SimplePhotometryModel.cc.

78  {
80  mapping->computeParameterDerivatives(measuredStar, measuredStar.getInstFlux(), derivatives);
81 }
PhotometryMappingBase * findMapping(CcdImage const &ccdImage) const override
Return the mapping associated with this ccdImage.

◆ computeRefResidual()

double lsst::jointcal::SimpleMagnitudeModel::computeRefResidual ( FittedStar const &  fittedStar,
RefStar const &  refStar 
) const
inlineoverridevirtual

Return the fittedStar - refStar residual appropriate for this model (e.g. flux - flux or mag - mag).

Implements lsst::jointcal::PhotometryModel.

Definition at line 142 of file SimplePhotometryModel.h.

142  {
143  return fittedStar.getMag() - refStar.getMag();
144  };

◆ computeResidual()

double lsst::jointcal::SimpleMagnitudeModel::computeResidual ( CcdImage const &  ccdImage,
MeasuredStar const &  measuredStar 
) const
overridevirtual

Compute the residual between the model applied to a star and its associated fittedStar.

\[ residual = Model(measuredStar) - fittedStar \]

Parameters
ccdImageThe ccdImage where measuredStar resides.
measuredStarThe measured star position to compute the residual of.
Returns
The residual.

Implements lsst::jointcal::PhotometryModel.

Definition at line 143 of file SimplePhotometryModel.cc.

144  {
145  return transform(ccdImage, measuredStar) - measuredStar.getFittedStar()->getMag();
146 }
double transform(CcdImage const &ccdImage, MeasuredStar const &measuredStar) const override
Return the on-sky transformed flux for measuredStar on ccdImage.

◆ dump()

void lsst::jointcal::SimplePhotometryModel::dump ( std::ostream stream = std::cout) const
overridevirtualinherited

Dump the contents of the transforms, for debugging.

Implements lsst::jointcal::PhotometryModel.

Definition at line 83 of file SimplePhotometryModel.cc.

83  {
84  for (auto &i : _myMap) {
85  stream << i.first << ": ";
86  i.second->dump(stream);
87  stream << ", ";
88  }
89 }

◆ findMapping()

PhotometryMappingBase * lsst::jointcal::SimplePhotometryModel::findMapping ( CcdImage const &  ccdImage) const
overrideprotectedvirtualinherited

Return the mapping associated with this ccdImage.

Implements lsst::jointcal::PhotometryModel.

Definition at line 91 of file SimplePhotometryModel.cc.

91  {
92  auto i = _myMap.find(ccdImage.getHashKey());
93  if (i == _myMap.end())
94  throw LSST_EXCEPT(pex::exceptions::InvalidParameterError,
95  "SimplePhotometryModel cannot find CcdImage " + ccdImage.getName());
96  return i->second.get();
97 }
T end(T... args)
T find(T... args)
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
Definition: Exception.h:48

◆ freezeErrorTransform()

void lsst::jointcal::SimplePhotometryModel::freezeErrorTransform ( )
overridevirtualinherited

Once this routine has been called, the error transform is not modified by offsetParams().

The routine can be called when the mappings are roughly in place. After the call, the transformations used to propagate errors are no longer affected when updating the mappings. This allows an exactly linear fit, which can be necessary for some model+data combinations.

Implements lsst::jointcal::PhotometryModel.

Definition at line 55 of file SimplePhotometryModel.cc.

55  {
56  for (auto &i : _myMap) {
57  i.second->freezeErrorTransform();
58  }
59 }

◆ getErrorPedestal()

double lsst::jointcal::PhotometryModel::getErrorPedestal ( )
inlineinherited

Definition at line 191 of file PhotometryModel.h.

◆ getMapping()

PhotometryMappingBase const& lsst::jointcal::PhotometryModel::getMapping ( CcdImage const &  ccdImage) const
inlineinherited

Get the mapping associated with ccdImage.

Definition at line 156 of file PhotometryModel.h.

156  {
157  return *(findMapping(ccdImage));
158  }
virtual PhotometryMappingBase * findMapping(CcdImage const &ccdImage) const =0
Return a pointer to the mapping associated with this ccdImage.

◆ getMappingIndices()

void lsst::jointcal::SimplePhotometryModel::getMappingIndices ( CcdImage const &  ccdImage,
IndexVector indices 
) const
overridevirtualinherited

Get how this set of parameters (of length Npar()) map into the "grand" fit.

Parameters
[in]ccdImageThe ccdImage to look up.
[out]indicesThe indices of the mapping associated with ccdImage.

Implements lsst::jointcal::PhotometryModel.

Definition at line 61 of file SimplePhotometryModel.cc.

62  {
64  if (indices.size() < mapping->getNpar()) indices.resize(mapping->getNpar());
65  indices[0] = mapping->getIndex();
66 }
PhotometryMappingBase * findMapping(CcdImage const &ccdImage) const override
Return the mapping associated with this ccdImage.
T resize(T... args)
T size(T... args)

◆ getNpar()

std::size_t lsst::jointcal::PhotometryModel::getNpar ( CcdImage const &  ccdImage) const
inlineinherited

Return the number of parameters in the mapping of CcdImage.

Definition at line 153 of file PhotometryModel.h.

153 { return findMapping(ccdImage)->getNpar(); }
virtual std::size_t getNpar() const =0
Number of total parameters in this mapping.
virtual PhotometryMappingBase * findMapping(CcdImage const &ccdImage) const =0
Return a pointer to the mapping associated with this ccdImage.

◆ getRefError()

double lsst::jointcal::SimpleMagnitudeModel::getRefError ( RefStar const &  refStar) const
inlineoverridevirtual

Return the refStar error appropriate for this model (e.g. fluxErr or magErr).

Implements lsst::jointcal::PhotometryModel.

Definition at line 139 of file SimplePhotometryModel.h.

139 { return refStar.getMagErr(); }

◆ getTotalParameters()

std::size_t lsst::jointcal::SimplePhotometryModel::getTotalParameters ( ) const
overridevirtualinherited

Return the total number of parameters in this model.

Implements lsst::jointcal::PhotometryModel.

Definition at line 68 of file SimplePhotometryModel.cc.

68  {
69  std::size_t total = 0;
70  for (auto &i : _myMap) {
71  total += i.second->getNpar();
72  }
73  return total;
74 }

◆ offsetFittedStar()

void lsst::jointcal::SimpleMagnitudeModel::offsetFittedStar ( FittedStar fittedStar,
double  delta 
) const
inlineoverridevirtual

Offset the appropriate flux or magnitude (by -delta).

Parameters
fittedStarThe star to update.
deltaThe amount to update by.

Implements lsst::jointcal::PhotometryModel.

Definition at line 125 of file SimplePhotometryModel.h.

125  {
126  fittedStar.getMag() -= delta;
127  }

◆ offsetParams()

void lsst::jointcal::SimplePhotometryModel::offsetParams ( Eigen::VectorXd const &  delta)
overridevirtualinherited

Offset the parameters by the provided amounts (by -delta).

The shifts are applied according to the indices given in assignIndices.

Parameters
[in]deltavector of offsets to apply

Implements lsst::jointcal::PhotometryModel.

Definition at line 48 of file SimplePhotometryModel.cc.

48  {
49  for (auto &i : _myMap) {
50  auto mapping = i.second.get();
51  mapping->offsetParams(delta.segment(mapping->getIndex(), mapping->getNpar()));
52  }
53 }

◆ toPhotoCalib()

std::shared_ptr< afw::image::PhotoCalib > lsst::jointcal::SimpleMagnitudeModel::toPhotoCalib ( CcdImage const &  ccdImage) const
overridevirtual

Return the mapping of ccdImage represented as a PhotoCalib.

Note
SimplePhotometryModel uses a spatially-invariant transform, so we can simplify the PhotoCalib.

Implements lsst::jointcal::PhotometryModel.

Definition at line 159 of file SimplePhotometryModel.cc.

159  {
160  // NOTE: photocalib is defined as `instFlux * calibration = flux`,
161  // so we have to convert the transform from magnitude space.
162  double calibration = utils::ABMagnitudeToNanojansky(findMapping(ccdImage)->getParameters()[0]);
163  auto oldPhotoCalib = ccdImage.getPhotoCalib();
164  return std::make_unique<afw::image::PhotoCalib>(calibration, oldPhotoCalib->getCalibrationErr());
165 }
PhotometryMappingBase * findMapping(CcdImage const &ccdImage) const override
Return the mapping associated with this ccdImage.
double ABMagnitudeToNanojansky(double magnitude)
Convert an AB magnitude to a flux in nanojansky.
Definition: Magnitude.cc:32

◆ transform()

double lsst::jointcal::SimpleMagnitudeModel::transform ( CcdImage const &  ccdImage,
MeasuredStar const &  measuredStar 
) const
overridevirtual

Return the on-sky transformed flux for measuredStar on ccdImage.

Parameters
[in]ccdImageThe ccdImage where measuredStar resides.
measuredStarThe measured star position to transform.
Returns
The on-sky flux transformed from instFlux at measuredStar's position.

Implements lsst::jointcal::PhotometryModel.

Definition at line 148 of file SimplePhotometryModel.cc.

148  {
149  auto mapping = findMapping(ccdImage);
150  return mapping->transform(star, star.getInstMag());
151 }
PhotometryMappingBase * findMapping(CcdImage const &ccdImage) const override
Return the mapping associated with this ccdImage.

◆ transformError()

double lsst::jointcal::SimpleMagnitudeModel::transformError ( CcdImage const &  ccdImage,
MeasuredStar const &  measuredStar 
) const
overridevirtual

Return the on-sky transformed flux uncertainty for measuredStar on ccdImage.

Identical to transform() until freezeErrorTransform() is called.

Parameters
[in]ccdImageThe ccdImage where measuredStar resides.
measuredStarThe measured star position to transform.
Returns
The on-sky flux transformed from instFlux at measuredStar's position.

Implements lsst::jointcal::PhotometryModel.

Definition at line 153 of file SimplePhotometryModel.cc.

153  {
154  auto mapping = findMapping(ccdImage);
155  double tempErr = tweakMagnitudeError(star);
156  return mapping->transformError(star, star.getInstMag(), tempErr);
157 }
PhotometryMappingBase * findMapping(CcdImage const &ccdImage) const override
Return the mapping associated with this ccdImage.
double tweakMagnitudeError(jointcal::MeasuredStar const &measuredStar) const
Add a small magnitude offset to the "instrumental magnitude" error, in quadrature.

◆ tweakFluxError()

double lsst::jointcal::PhotometryModel::tweakFluxError ( jointcal::MeasuredStar const &  measuredStar) const
inlineinherited

Add a fraction of the instrumental flux to the instrumental flux error, in quadrature.

Definition at line 194 of file PhotometryModel.h.

194  {
195  if (errorPedestal == 0) {
196  return measuredStar.getInstFluxErr();
197  } else {
198  return std::hypot(measuredStar.getInstFluxErr(), measuredStar.getInstFlux() * errorPedestal);
199  }
200  }
T hypot(T... args)

◆ tweakMagnitudeError()

double lsst::jointcal::PhotometryModel::tweakMagnitudeError ( jointcal::MeasuredStar const &  measuredStar) const
inlineinherited

Add a small magnitude offset to the "instrumental magnitude" error, in quadrature.

Definition at line 203 of file PhotometryModel.h.

203  {
204  if (errorPedestal == 0) {
205  return measuredStar.getInstMagErr();
206  } else {
207  return std::hypot(measuredStar.getInstMagErr(), errorPedestal);
208  }
209  }
T hypot(T... args)

◆ validate()

bool lsst::jointcal::PhotometryModel::validate ( CcdImageList const &  ccdImageList,
int  ndof 
) const
inherited

Return true if this is a "reasonable" model.

A valid photometry model is positive within each sensor's bounding box.

Parameters
ccdImageListThe ccdImages to test the model validity on.
ndofThe number of degrees of freedom in the fit, e.g. from Fitterbase.computeChi2().
Returns
True if the model is valid on all ccdImages.

Definition at line 33 of file PhotometryModel.cc.

33  {
34  bool check = true;
35  for (auto const &ccdImage : ccdImageList) {
36  // Don't short circuit so that we log every place the model is negative.
37  check &= checkPositiveOnBBox(*ccdImage);
38  }
39  if (ndof < 0) {
40  check &= false;
41  LOGLS_ERROR(_log, "This model only has "
42  << ndof << " degrees of freedom, with " << getTotalParameters()
43  << " total parameters. Reduce the model complexity (e.g. polynomial order)"
44  " to better match the number of measured sources.");
45  }
46  return check;
47 }
bool checkPositiveOnBBox(CcdImage const &ccdImage) const
Check that the model is positive on the ccdImage bbox.
virtual std::size_t getTotalParameters() const =0
Return the total number of parameters in this model.
LOG_LOGGER _log
lsst.logging instance, to be created by a subclass so that messages have consistent name...
#define LOGLS_ERROR(logger, message)
Log a error-level message using an iostream-based interface.
Definition: Log.h:668

Member Data Documentation

◆ _log

LOG_LOGGER lsst::jointcal::PhotometryModel::_log
protectedinherited

lsst.logging instance, to be created by a subclass so that messages have consistent name.

Definition at line 216 of file PhotometryModel.h.

◆ _myMap

MapType lsst::jointcal::SimplePhotometryModel::_myMap
protectedinherited

Definition at line 80 of file SimplePhotometryModel.h.

◆ errorPedestal

double lsst::jointcal::PhotometryModel::errorPedestal
protectedinherited

Definition at line 219 of file PhotometryModel.h.


The documentation for this class was generated from the following files: