LSST Applications g0b6bd0c080+a72a5dd7e6,g1182afd7b4+2a019aa3bb,g17e5ecfddb+2b8207f7de,g1d67935e3f+06cf436103,g38293774b4+ac198e9f13,g396055baef+6a2097e274,g3b44f30a73+6611e0205b,g480783c3b1+98f8679e14,g48ccf36440+89c08d0516,g4b93dc025c+98f8679e14,g5c4744a4d9+a302e8c7f0,g613e996a0d+e1c447f2e0,g6c8d09e9e7+25247a063c,g7271f0639c+98f8679e14,g7a9cd813b8+124095ede6,g9d27549199+a302e8c7f0,ga1cf026fa3+ac198e9f13,ga32aa97882+7403ac30ac,ga786bb30fb+7a139211af,gaa63f70f4e+9994eb9896,gabf319e997+ade567573c,gba47b54d5d+94dc90c3ea,gbec6a3398f+06cf436103,gc6308e37c7+07dd123edb,gc655b1545f+ade567573c,gcc9029db3c+ab229f5caf,gd01420fc67+06cf436103,gd877ba84e5+06cf436103,gdb4cecd868+6f279b5b48,ge2d134c3d5+cc4dbb2e3f,ge448b5faa6+86d1ceac1d,gecc7e12556+98f8679e14,gf3ee170dca+25247a063c,gf4ac96e456+ade567573c,gf9f5ea5b4d+ac198e9f13,gff490e6085+8c2580be5c,w.2022.27
LSST Data Management Base Package
Public Member Functions | Public Attributes | List of all members
ast::QuadApprox Class Reference

A quadratic approximation to a 2D Mapping. More...

#include <QuadApprox.h>

Public Member Functions

 QuadApprox (Mapping const &map, std::vector< double > const &lbnd, std::vector< double > const &ubnd, int nx=3, int ny=3)
 Obtain a quadratic approximation to a 2D Mapping. More...
 
 QuadApprox (QuadApprox const &)=default
 
 QuadApprox (QuadApprox &&)=default
 
QuadApproxoperator= (QuadApprox const &)=default
 
QuadApproxoperator= (QuadApprox &&)=default
 

Public Attributes

std::vector< double > fit
 A vector of coefficients of the quadratic approximation to the specified transformation. More...
 
double rms
 The RMS residual between the fit and the Mapping, summed over all Mapping outputs. More...
 

Detailed Description

A quadratic approximation to a 2D Mapping.

Construct the class to compute the contained fields:

Definition at line 36 of file QuadApprox.h.

Constructor & Destructor Documentation

◆ QuadApprox() [1/3]

ast::QuadApprox::QuadApprox ( Mapping const &  map,
std::vector< double > const &  lbnd,
std::vector< double > const &  ubnd,
int  nx = 3,
int  ny = 3 
)
explicit

Obtain a quadratic approximation to a 2D Mapping.

Compute the coefficients of a quadratic fit to the supplied Mapping over the input area specified by lbnd and ubnd. The Mapping must have 2 inputs, but may have any number of outputs. The i'th Mapping output is modeled as a quadratic function of the 2 inputs (x,y):

output_i = a_i_0 + a_i_1*x + a_i_2*y + a_i_3*x*y + a_i_4*x*x + a_i_5*y*y

The fit vector is set tothe values of the co-efficients a_0_0, a_0_1, etc.

Parameters
[in]mapMapping to fit.
[in]lbndThe lower bounds of a box defined within the input coordinate system of the Mapping. The number of elements in this vector should equal map.getNIn(). This box should specify the region over which the fit is to be performed.
[in]ubndThe upper bounds of the box specifying the region over which the fit is to be performed.
[in]nxThe number of points to place along the first Mapping input. The first point is at lbnd[0] and the last is at ubnd[0]". If a value less than three is supplied a value of three will be used.
[in]nyThe number of points to place along the second Mapping input. The first point is at lbnd[1] and the last is at ubnd[1]. If a value less than three is supplied a value of three will be used.
Exceptions
std::invalid_argumentif the mapping does not have 2 inputs, or if lbnd or ubnd do not each contain 2 elements.
std::runtime_errorif the fit cannot be computed.

Definition at line 31 of file QuadApprox.cc.

33 : fit(6 * map.getNOut()), rms(0) {
34 int const nIn = map.getNIn();
35 detail::assertEqual(nIn, "map.getNIn()", 2, "required nIn");
36 detail::assertEqual(lbnd.size(), "lbnd.size", static_cast<std::size_t>(nIn), "nIn");
37 detail::assertEqual(ubnd.size(), "ubnd.size", static_cast<std::size_t>(nIn), "nIn");
38 fit.reserve(6 * map.getNOut());
39 bool isok = astQuadApprox(map.getRawPtr(), lbnd.data(), ubnd.data(), nx, ny, fit.data(), &rms);
40 assertOK();
41 if (!isok) {
42 throw std::runtime_error("Failed to fit a quadratic approximation");
43 }
44}
double rms
The RMS residual between the fit and the Mapping, summed over all Mapping outputs.
Definition: QuadApprox.h:102
std::vector< double > fit
A vector of coefficients of the quadratic approximation to the specified transformation.
Definition: QuadApprox.h:98
T data(T... args)
void assertEqual(T1 val1, std::string const &descr1, T2 val2, std::string const &descr2)
Definition: utils.h:48
void assertOK(AstObject *rawPtr1=nullptr, AstObject *rawPtr2=nullptr)
Throw std::runtime_error if AST's state is bad.
Definition: base.cc:49
T reserve(T... args)
T size(T... args)

◆ QuadApprox() [2/3]

ast::QuadApprox::QuadApprox ( QuadApprox const &  )
default

◆ QuadApprox() [3/3]

ast::QuadApprox::QuadApprox ( QuadApprox &&  )
default

Member Function Documentation

◆ operator=() [1/2]

QuadApprox & ast::QuadApprox::operator= ( QuadApprox &&  )
default

◆ operator=() [2/2]

QuadApprox & ast::QuadApprox::operator= ( QuadApprox const &  )
default

Member Data Documentation

◆ fit

std::vector<double> ast::QuadApprox::fit

A vector of coefficients of the quadratic approximation to the specified transformation.

This vector will contain "6*NOut", elements: the first 6 elements hold the fit to the first Mapping output, the next 6 elements hold the fit to the second Mapping output, etc. So if the Mapping has 2 inputs and 2 outputs the quadratic approximation to the forward transformation is:

X_out = fit[0] + fit[1]*X_in + fit[2]*Y_in + fit[3]*X_in*Y_in +
        fit[4]*X_in*X_in + fit[5]*Y_in*Y_in
Y_out = fit[6] + fit[7]*X_in + fit[8]*Y_in + fit[9]*X_in*Y_in +
        fit[10]*X_in*X_in + fit[11]*Y_in*Y_in
X_out = fit(1) + fit(2)*X_in + fit(3)*Y_in + fit(4)*X_in*Y_in +
        fit(5)*X_in*X_in + fit(6)*Y_in*Y_in
Y_out = fit(7) + fit(8)*X_in + fit(9)*Y_in + fit(10)*X_in*Y_in +
        fit(11)*X_in*X_in + fit(12)*Y_in*Y_in

Definition at line 98 of file QuadApprox.h.

◆ rms

double ast::QuadApprox::rms

The RMS residual between the fit and the Mapping, summed over all Mapping outputs.

Definition at line 102 of file QuadApprox.h.


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