25 #ifndef LSST_JOINTCAL_PHOTOMETRY_TRANSFO_H 26 #define LSST_JOINTCAL_PHOTOMETRY_TRANSFO_H 55 virtual double transform(
double x,
double y,
double value)
const = 0;
61 virtual double transformError(
double x,
double y,
double value,
double valueErr)
const = 0;
77 virtual int getNpar()
const = 0;
87 virtual void offsetParams(Eigen::VectorXd
const &delta) = 0;
101 Eigen::Ref<Eigen::VectorXd> derivatives)
const = 0;
121 void offsetParams(Eigen::VectorXd
const &delta)
override { _value -= delta[0]; };
125 Eigen::VectorXd parameters(1);
126 parameters[0] = _value;
149 double transform(
double x,
double y,
double value)
const override {
return value * getValue(); }
152 double transformError(
double x,
double y,
double value,
double valueErr)
const override {
153 return getValue() * valueErr;
158 return std::make_shared<FluxTransfoSpatiallyInvariant>(getValue());
163 Eigen::Ref<Eigen::VectorXd> derivatives)
const override {
165 derivatives[0] = value;
181 double transform(
double x,
double y,
double mag)
const override {
return mag + getValue(); }
184 double transformError(
double x,
double y,
double value,
double valueErr)
const override {
190 return std::make_shared<MagnitudeTransfoSpatiallyInvariant>(getValue());
195 Eigen::Ref<Eigen::VectorXd> derivatives)
const override {
239 afw::geom::Box2D
const &bbox);
242 double transformError(
double x,
double y,
double value,
double valueErr)
const override {
return 0; }
248 int getNpar()
const override {
return _nParameters; }
251 void offsetParams(Eigen::VectorXd
const &delta)
override;
254 ndarray::Array<double, 2, 2>
getCoefficients()
const {
return ndarray::copy(_coefficients); }
261 afw::geom::Box2D
getBBox()
const {
return _bbox; }
269 double computeChebyshev(
double x,
double y)
const;
275 void computeChebyshevDerivatives(
double x,
double y, Eigen::Ref<Eigen::VectorXd> derivatives)
const;
278 afw::geom::Box2D _bbox;
279 afw::geom::AffineTransform _toChebyshevRange;
281 ndarray::Array<double, 2, 2> _coefficients;
282 ndarray::Size _order;
283 ndarray::Size _nParameters;
301 double transform(
double x,
double y,
double value)
const override {
302 return value * computeChebyshev(x, y);
307 Eigen::Ref<Eigen::VectorXd> derivatives)
const override {
308 computeChebyshevDerivatives(x, y, derivatives);
309 derivatives *= value;
314 return std::make_shared<FluxTransfoChebyshev>(getCoefficients(), getBBox());
330 double transform(
double x,
double y,
double value)
const override {
331 return value + computeChebyshev(x, y);
336 Eigen::Ref<Eigen::VectorXd> derivatives)
const override {
338 computeChebyshevDerivatives(x, y, derivatives);
343 return std::make_shared<FluxTransfoChebyshev>(getCoefficients(), getBBox());
350 #endif // LSST_JOINTCAL_PHOTOMETRY_TRANSFO_H
Photometric offset independent of position, defined as -2.5 * log(flux / fluxMag0).
double transform(double x, double y, double mag) const override
Return the transform of value at (x,y).
double transform(double x, double y, double value) const override
Return the transform of value at (x,y).
std::shared_ptr< PhotometryTransform > clone() const override
return a copy (allocated by new) of the transformation.
nth-order 2d Chebyshev photometry transform, times the input flux.
Photometric offset independent of position, defined as (fluxMag0)^-1.
MagnitudeTransfoChebyshev(size_t order, afw::geom::Box2D const &bbox)
std::shared_ptr< PhotometryTransform > clone() const override
return a copy (allocated by new) of the transformation.
double transform(double x, double y, double value) const override
Return the transform of value at (x,y).
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.
Class for a simple mapping implementing a generic AstrometryTransform.
MagnitudeTransfoSpatiallyInvariant(double value=0)
FluxTransfoSpatiallyInvariant(double value=1)
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.
FluxTransfoChebyshev(size_t order, afw::geom::Box2D const &bbox)
double transformError(double x, double y, double value, double valueErr) const override
Return the transformed valueErr at Point(x,y).
FluxTransfoChebyshev(ndarray::Array< double, 2, 2 > const &coefficients, afw::geom::Box2D const &bbox)
MagnitudeTransfoChebyshev(ndarray::Array< double, 2, 2 > const &coefficients, afw::geom::Box2D const &bbox)
std::shared_ptr< PhotometryTransform > clone() const override
return a copy (allocated by new) of the transformation.
double transform(double x, double y, double value) const override
Return the transform of value at (x,y).
std::shared_ptr< PhotometryTransform > clone() const override
return a copy (allocated by new) of the transformation.
double transformError(double x, double y, double value, double valueErr) const override
Return the transformed valueErr at Point(x,y).
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.
T setprecision(T... args)
nth-order 2d Chebyshev photometry transform, plus the input flux.
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.
UnaryFunctionT::result_type integrate(UnaryFunctionT func, typename UnaryFunctionT::argument_type const a, typename UnaryFunctionT::argument_type const b, double eps=1.0e-6)