LSSTApplications  19.0.0-14-gb0260a2+72efe9b372,20.0.0+7927753e06,20.0.0+8829bf0056,20.0.0+995114c5d2,20.0.0+b6f4b2abd1,20.0.0+bddc4f4cbe,20.0.0-1-g253301a+8829bf0056,20.0.0-1-g2b7511a+0d71a2d77f,20.0.0-1-g5b95a8c+7461dd0434,20.0.0-12-g321c96ea+23efe4bbff,20.0.0-16-gfab17e72e+fdf35455f6,20.0.0-2-g0070d88+ba3ffc8f0b,20.0.0-2-g4dae9ad+ee58a624b3,20.0.0-2-g61b8584+5d3db074ba,20.0.0-2-gb780d76+d529cf1a41,20.0.0-2-ged6426c+226a441f5f,20.0.0-2-gf072044+8829bf0056,20.0.0-2-gf1f7952+ee58a624b3,20.0.0-20-geae50cf+e37fec0aee,20.0.0-25-g3dcad98+544a109665,20.0.0-25-g5eafb0f+ee58a624b3,20.0.0-27-g64178ef+f1f297b00a,20.0.0-3-g4cc78c6+e0676b0dc8,20.0.0-3-g8f21e14+4fd2c12c9a,20.0.0-3-gbd60e8c+187b78b4b8,20.0.0-3-gbecbe05+48431fa087,20.0.0-38-ge4adf513+a12e1f8e37,20.0.0-4-g97dc21a+544a109665,20.0.0-4-gb4befbc+087873070b,20.0.0-4-gf910f65+5d3db074ba,20.0.0-5-gdfe0fee+199202a608,20.0.0-5-gfbfe500+d529cf1a41,20.0.0-6-g64f541c+d529cf1a41,20.0.0-6-g9a5b7a1+a1cd37312e,20.0.0-68-ga3f3dda+5fca18c6a4,20.0.0-9-g4aef684+e18322736b,w.2020.45
LSSTDataManagementBasePackage
Public Member Functions | Protected Member Functions | List of all members
lsst::jointcal::FluxTransformChebyshev Class Reference

nth-order 2d Chebyshev photometry transform, times the input flux. More...

#include <PhotometryTransform.h>

Inheritance diagram for lsst::jointcal::FluxTransformChebyshev:
lsst::jointcal::PhotometryTransformChebyshev lsst::jointcal::PhotometryTransform

Public Member Functions

 FluxTransformChebyshev (size_t order, geom::Box2D const &bbox)
 
 FluxTransformChebyshev (ndarray::Array< double, 2, 2 > const &coefficients, geom::Box2D const &bbox)
 
double transform (double x, double y, double value) const override
 Return the transform of value at (x,y). More...
 
void computeParameterDerivatives (double x, double y, double value, Eigen::Ref< Eigen::VectorXd > derivatives) const override
 Compute the derivatives with respect to the parameters (i.e. More...
 
std::shared_ptr< PhotometryTransformclone () const override
 return a copy (allocated by new) of the transformation. More...
 
double transformError (double x, double y, double value, double valueErr) const override
 Return the transformed valueErr at Point(x,y). More...
 
double transformError (Point const &in, double value, double valueErr) const
 Return the transformed valueErr at Point(x,y). More...
 
void print (std::ostream &out) const override
 Print the transform coefficients to stream. More...
 
std::size_t getNpar () const override
 Return the number of parameters (used to compute chisq) More...
 
void offsetParams (Eigen::VectorXd const &delta) override
 Offset the parameters by some (negative) amount during fitting. More...
 
ndarray::Array< double, 2, 2 > getCoefficients () const
 Get a copy of the coefficients of the polynomials, as a 2d array (NOTE: layout is [y][x]) More...
 
Eigen::VectorXd getParameters () const override
 Get a copy of the parameters of this model, in the same order as offsetParams. More...
 
ndarray::Size getOrder () const
 
geom::Box2D getBBox () const
 
double mean (geom::Box2D const &bbox) const
 Compute the mean of this tranform on the bbox (default to our bbox). More...
 
double mean () const
 
double integrate (geom::Box2D const &bbox) const
 
double integrate () const
 
double transform (Point const &in, double value) const
 Return the transformed value at Point(x,y). More...
 

Protected Member Functions

double computeChebyshev (double x, double y) const
 Return the value of this polynomial at x,y. More...
 
void computeChebyshevDerivatives (double x, double y, Eigen::Ref< Eigen::VectorXd > derivatives) const
 Set the derivatives of this polynomial at x,y. More...
 

Detailed Description

nth-order 2d Chebyshev photometry transform, times the input flux.

Definition at line 302 of file PhotometryTransform.h.

Constructor & Destructor Documentation

◆ FluxTransformChebyshev() [1/2]

lsst::jointcal::FluxTransformChebyshev::FluxTransformChebyshev ( size_t  order,
geom::Box2D const &  bbox 
)
inline

Definition at line 304 of file PhotometryTransform.h.

305  : PhotometryTransformChebyshev(order, bbox, true) {}

◆ FluxTransformChebyshev() [2/2]

lsst::jointcal::FluxTransformChebyshev::FluxTransformChebyshev ( ndarray::Array< double, 2, 2 > const &  coefficients,
geom::Box2D const &  bbox 
)
inline

Definition at line 307 of file PhotometryTransform.h.

Member Function Documentation

◆ clone()

std::shared_ptr<PhotometryTransform> lsst::jointcal::FluxTransformChebyshev::clone ( ) const
inlineoverridevirtual

return a copy (allocated by new) of the transformation.

Implements lsst::jointcal::PhotometryTransform.

Definition at line 323 of file PhotometryTransform.h.

323  {
324  return std::make_shared<FluxTransformChebyshev>(getCoefficients(), getBBox());
325  }

◆ computeChebyshev()

double lsst::jointcal::PhotometryTransformChebyshev::computeChebyshev ( double  x,
double  y 
) const
protectedinherited

Return the value of this polynomial at x,y.

For use in the sublcass transform() methods.

Definition at line 224 of file PhotometryTransform.cc.

224  {
225  geom::Point2D p = _toChebyshevRange(geom::Point2D(x, y));
226  return evaluateFunction1d(RecursionArrayImitator(_coefficients, p.getX()), p.getY(),
227  _coefficients.getSize<0>());
228 }

◆ computeChebyshevDerivatives()

void lsst::jointcal::PhotometryTransformChebyshev::computeChebyshevDerivatives ( double  x,
double  y,
Eigen::Ref< Eigen::VectorXd >  derivatives 
) const
protectedinherited

Set the derivatives of this polynomial at x,y.

For use in the sublcass computeParameterDerivatives() methods.

Definition at line 230 of file PhotometryTransform.cc.

231  {
232  geom::Point2D p = _toChebyshevRange(geom::Point2D(x, y));
233  // Algorithm: compute all the individual components recursively (since we'll need them anyway),
234  // then combine them into the final answer vectors.
235  Eigen::VectorXd Tnx(_order + 1);
236  Eigen::VectorXd Tmy(_order + 1);
237  Tnx[0] = 1;
238  Tmy[0] = 1;
239  if (_order >= 1) {
240  Tnx[1] = p.getX();
241  Tmy[1] = p.getY();
242  }
243  for (ndarray::Size i = 2; i <= _order; ++i) {
244  Tnx[i] = 2 * p.getX() * Tnx[i - 1] - Tnx[i - 2];
245  Tmy[i] = 2 * p.getY() * Tmy[i - 1] - Tmy[i - 2];
246  }
247 
248  // NOTE: the indexing in this method and offsetParams must be kept consistent!
249  Eigen::VectorXd::Index k = 0;
250  for (ndarray::Size j = 0; j <= _order; ++j) {
251  ndarray::Size const iMax = _order - j; // to save re-computing `i+j <= order` every inner step.
252  for (ndarray::Size i = 0; i <= iMax; ++i, ++k) {
253  derivatives[k] = Tmy[j] * Tnx[i];
254  }
255  }
256 }

◆ computeParameterDerivatives()

void lsst::jointcal::FluxTransformChebyshev::computeParameterDerivatives ( double  x,
double  y,
double  value,
Eigen::Ref< Eigen::VectorXd >  derivatives 
) const
inlineoverridevirtual

Compute the derivatives with respect to the parameters (i.e.

the coefficients).

Parameters
[in]xThe x coordinate to compute at (in the appropriate units for this transform).
[in]yThe y coordinate to compute at (in the appropriate units for this transform).
[in]valueThe instrument flux or magnitude to compute the derivative at.
[out]derivativesThe computed derivatives, in the same order as the deltas in offsetParams.

Implements lsst::jointcal::PhotometryTransform.

Definition at line 316 of file PhotometryTransform.h.

317  {
318  computeChebyshevDerivatives(x, y, derivatives);
319  derivatives *= value;
320  }

◆ getBBox()

geom::Box2D lsst::jointcal::PhotometryTransformChebyshev::getBBox ( ) const
inlineinherited

Definition at line 263 of file PhotometryTransform.h.

263 { return _bbox; }

◆ getCoefficients()

ndarray::Array<double, 2, 2> lsst::jointcal::PhotometryTransformChebyshev::getCoefficients ( ) const
inlineinherited

Get a copy of the coefficients of the polynomials, as a 2d array (NOTE: layout is [y][x])

Definition at line 256 of file PhotometryTransform.h.

256 { return ndarray::copy(_coefficients); }

◆ getNpar()

std::size_t lsst::jointcal::PhotometryTransformChebyshev::getNpar ( ) const
inlineoverridevirtualinherited

Return the number of parameters (used to compute chisq)

Implements lsst::jointcal::PhotometryTransform.

Definition at line 250 of file PhotometryTransform.h.

250 { return _nParameters; }

◆ getOrder()

ndarray::Size lsst::jointcal::PhotometryTransformChebyshev::getOrder ( ) const
inlineinherited

Definition at line 261 of file PhotometryTransform.h.

261 { return _order; }

◆ getParameters()

Eigen::VectorXd lsst::jointcal::PhotometryTransformChebyshev::getParameters ( ) const
overridevirtualinherited

Get a copy of the parameters of this model, in the same order as offsetParams.

Implements lsst::jointcal::PhotometryTransform.

Definition at line 210 of file PhotometryTransform.cc.

210  {
211  Eigen::VectorXd parameters(_nParameters);
212  // NOTE: the indexing in this method and offsetParams must be kept consistent!
213  Eigen::VectorXd::Index k = 0;
214  for (ndarray::Size j = 0; j <= _order; ++j) {
215  ndarray::Size const iMax = _order - j; // to save re-computing `i+j <= order` every inner step.
216  for (ndarray::Size i = 0; i <= iMax; ++i, ++k) {
217  parameters[k] = _coefficients[j][i];
218  }
219  }
220 
221  return parameters;
222 }

◆ integrate() [1/2]

double lsst::jointcal::PhotometryTransformChebyshev::integrate ( ) const
inherited

Definition at line 193 of file PhotometryTransform.cc.

193  {
194  double result = 0;
195  double determinant = _bbox.getArea() / 4.0;
196  for (ndarray::Size j = 0; j < _coefficients.getSize<0>(); j++) {
197  for (ndarray::Size i = 0; i < _coefficients.getSize<1>(); i++) {
198  result += _coefficients[j][i] * integrateTn(i) * integrateTn(j);
199  }
200  }
201  return result * determinant;
202 }

◆ integrate() [2/2]

double lsst::jointcal::PhotometryTransformChebyshev::integrate ( geom::Box2D const &  bbox) const
inherited

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Definition at line 181 of file PhotometryTransform.cc.

181  {
182  double result = 0;
183 
184  result += oneIntegral(bbox.getMaxX(), bbox.getMaxY());
185  result += oneIntegral(bbox.getMinX(), bbox.getMinY());
186  result -= oneIntegral(bbox.getMaxX(), bbox.getMinY());
187  result -= oneIntegral(bbox.getMinX(), bbox.getMaxY());
188 
189  // scale factor due to the change of limits in the integral
190  return result / _toChebyshevRange.getLinear().computeDeterminant();
191 }

◆ mean() [1/2]

double lsst::jointcal::PhotometryTransformChebyshev::mean ( ) const
inherited

Definition at line 208 of file PhotometryTransform.cc.

208 { return integrate() / _bbox.getArea(); }

◆ mean() [2/2]

double lsst::jointcal::PhotometryTransformChebyshev::mean ( geom::Box2D const &  bbox) const
inherited

Compute the mean of this tranform on the bbox (default to our bbox).

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Definition at line 204 of file PhotometryTransform.cc.

204  {
205  return integrate(bbox) / bbox.getArea();
206 }

◆ offsetParams()

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

Offset the parameters by some (negative) amount during fitting.

Equivalent to flatten(parameters) -= delta

Ordering of delta is the same as the ordering of the derivatives returned from computeParameterDerivatives.

Implements lsst::jointcal::PhotometryTransform.

Definition at line 107 of file PhotometryTransform.cc.

107  {
108  // NOTE: the indexing in this method and computeParameterDerivatives must be kept consistent!
109  Eigen::VectorXd::Index k = 0;
110  for (ndarray::Size j = 0; j <= _order; ++j) {
111  ndarray::Size const iMax = _order - j; // to save re-computing `i+j <= order` every inner step.
112  for (ndarray::Size i = 0; i <= iMax; ++i, ++k) {
113  _coefficients[j][i] -= delta[k];
114  }
115  }
116 }

◆ print()

void lsst::jointcal::PhotometryTransformChebyshev::print ( std::ostream out) const
inlineoverridevirtualinherited

Print the transform coefficients to stream.

Implements lsst::jointcal::PhotometryTransform.

Definition at line 247 of file PhotometryTransform.h.

247 { out << "PhotometryTransformChebyshev: " << _coefficients; }

◆ transform() [1/2]

double lsst::jointcal::FluxTransformChebyshev::transform ( double  x,
double  y,
double  value 
) const
inlineoverridevirtual

Return the transform of value at (x,y).

Implements lsst::jointcal::PhotometryTransform.

Definition at line 311 of file PhotometryTransform.h.

311  {
312  return value * computeChebyshev(x, y);
313  }

◆ transform() [2/2]

double lsst::jointcal::PhotometryTransform::transform ( Point const &  in,
double  value 
) const
inlineinherited

Return the transformed value at Point(x,y).

Definition at line 58 of file PhotometryTransform.h.

58 { return transform(in.x, in.y, value); }

◆ transformError() [1/2]

double lsst::jointcal::PhotometryTransformChebyshev::transformError ( double  x,
double  y,
double  value,
double  valueErr 
) const
inlineoverridevirtualinherited

Return the transformed valueErr at Point(x,y).

Implements lsst::jointcal::PhotometryTransform.

Definition at line 244 of file PhotometryTransform.h.

244 { return 0; }

◆ transformError() [2/2]

double lsst::jointcal::PhotometryTransform::transformError ( Point const &  in,
double  value,
double  valueErr 
) const
inlineinherited

Return the transformed valueErr at Point(x,y).

Definition at line 64 of file PhotometryTransform.h.

64  {
65  return transformError(in.x, in.y, value, valueErr);
66  }

The documentation for this class was generated from the following file:
y
int y
Definition: SpanSet.cc:49
lsst::jointcal::PhotometryTransformChebyshev::PhotometryTransformChebyshev
PhotometryTransformChebyshev(size_t order, geom::Box2D const &bbox, bool identity)
Create a Chebyshev transform with terms up to order in (x*y).
Definition: PhotometryTransform.cc:91
coefficients
ndarray::Array< double const, 2, 2 > coefficients
Definition: ChebyshevBoundedField.cc:276
lsst::afw::math::integrateTn
double integrateTn(int n)
Definition: ChebyshevBoundedField.cc:290
x
double x
Definition: ChebyshevBoundedField.cc:277
lsst::geom::AffineTransform::getLinear
LinearTransform const & getLinear() const noexcept
Definition: AffineTransform.h:155
lsst::jointcal::PhotometryTransformChebyshev::getCoefficients
ndarray::Array< double, 2, 2 > getCoefficients() const
Get a copy of the coefficients of the polynomials, as a 2d array (NOTE: layout is [y][x])
Definition: PhotometryTransform.h:256
lsst::jointcal::PhotometryTransformChebyshev::getBBox
geom::Box2D getBBox() const
Definition: PhotometryTransform.h:263
lsst::jointcal::PhotometryTransformChebyshev::computeChebyshev
double computeChebyshev(double x, double y) const
Return the value of this polynomial at x,y.
Definition: PhotometryTransform.cc:224
result
py::object result
Definition: _schema.cc:429
lsst::jointcal::PhotometryTransform::transform
virtual double transform(double x, double y, double value) const =0
Return the transform of value at (x,y).
lsst::geom::LinearTransform::computeDeterminant
double computeDeterminant() const noexcept
Return the determinant of the 2x2 matrix.
Definition: LinearTransform.cc:54
lsst::jointcal::PhotometryTransformChebyshev::integrate
double integrate() const
Definition: PhotometryTransform.cc:193
lsst::geom::Point< double, 2 >
x
double x
Definition: PhotometryTransform.cc:69
lsst::geom::Box2D::getArea
double getArea() const noexcept
1-d interval accessors
Definition: Box.h:531
lsst::jointcal::PhotometryTransform::transformError
virtual double transformError(double x, double y, double value, double valueErr) const =0
Return the transformed valueErr at Point(x,y).
bbox
AmpInfoBoxKey bbox
Definition: Amplifier.cc:117
lsst::jointcal::PhotometryTransformChebyshev::computeChebyshevDerivatives
void computeChebyshevDerivatives(double x, double y, Eigen::Ref< Eigen::VectorXd > derivatives) const
Set the derivatives of this polynomial at x,y.
Definition: PhotometryTransform.cc:230