LSST Applications 27.0.0,g0265f82a02+469cd937ee,g02d81e74bb+21ad69e7e1,g1470d8bcf6+cbe83ee85a,g2079a07aa2+e67c6346a6,g212a7c68fe+04a9158687,g2305ad1205+94392ce272,g295015adf3+81dd352a9d,g2bbee38e9b+469cd937ee,g337abbeb29+469cd937ee,g3939d97d7f+72a9f7b576,g487adcacf7+71499e7cba,g50ff169b8f+5929b3527e,g52b1c1532d+a6fc98d2e7,g591dd9f2cf+df404f777f,g5a732f18d5+be83d3ecdb,g64a986408d+21ad69e7e1,g858d7b2824+21ad69e7e1,g8a8a8dda67+a6fc98d2e7,g99cad8db69+f62e5b0af5,g9ddcbc5298+d4bad12328,ga1e77700b3+9c366c4306,ga8c6da7877+71e4819109,gb0e22166c9+25ba2f69a1,gb6a65358fc+469cd937ee,gbb8dafda3b+69d3c0e320,gc07e1c2157+a98bf949bb,gc120e1dc64+615ec43309,gc28159a63d+469cd937ee,gcf0d15dbbd+72a9f7b576,gdaeeff99f8+a38ce5ea23,ge6526c86ff+3a7c1ac5f1,ge79ae78c31+469cd937ee,gee10cc3b42+a6fc98d2e7,gf1cff7945b+21ad69e7e1,gfbcc870c63+9a11dc8c8f
LSST Data Management Base Package
Loading...
Searching...
No Matches
Public Member Functions | List of all members
lsst::meas::astrom::sip::LeastSqFitter1d< FittingFunc > Class Template Reference

Fit an lsst::afw::math::Function1 object to a set of data points in one dimension. More...

#include <LeastSqFitter1d.h>

Public Member Functions

 LeastSqFitter1d (const std::vector< double > &x, const std::vector< double > &y, const std::vector< double > &s, int order)
 Fit a 1d polynomial to a set of data points z(x, y)
 
Eigen::VectorXd getParams ()
 Return the best fit parameters as an Eigen::Matrix.
 
Eigen::VectorXd getErrors ()
 Return the 1 sigma uncertainties in the best fit parameters as an Eigen::Matrix.
 
FittingFunc getBestFitFunction ()
 Return the best fit polynomial as a lsst::afw::math::Function1 object.
 
double valueAt (double x)
 Calculate the value of the function at a given point.
 
std::vector< double > residuals ()
 Return a vector of residuals of the fit (i.e the difference between the input y values, and the value of the fitting function at that point.
 
double getChiSq ()
 Return a measure of the goodness of fit.
 
double getReducedChiSq ()
 Return a measure of the goodness of fit.
 

Detailed Description

template<class FittingFunc>
class lsst::meas::astrom::sip::LeastSqFitter1d< FittingFunc >

Fit an lsst::afw::math::Function1 object to a set of data points in one dimension.

The class is templated over the kind of object to fit.

Input is a list of x ordinates for a set of points, the y coordinate, and the uncertainties, s. order is order of the polynomial to fit (e.g if the templated function is lsst::afw::math::PolynomialFunction1, then order=3 => fit a function of the form \(ax^2+bx+c\)

Template Parameters
FittingFuncThe 1d function to fit in both dimensions. Must inherit from lsst::afw::math::Function1
Parameters
xOrdinate of points to fit
yCo-ordinate of pionts to fit
s1 \(\sigma\) uncertainties in z
orderPolynomial order to fit
See also
LeastSqFitter1d

Definition at line 64 of file LeastSqFitter1d.h.

Constructor & Destructor Documentation

◆ LeastSqFitter1d()

template<class FittingFunc >
lsst::meas::astrom::sip::LeastSqFitter1d< FittingFunc >::LeastSqFitter1d ( const std::vector< double > & x,
const std::vector< double > & y,
const std::vector< double > & s,
int order )

Fit a 1d polynomial to a set of data points z(x, y)

Template Parameters
FittingFuncThe type of function to fit. This function extends the base class of lsst::afw::math::Function1
Parameters
xvector of x positions of data
yvector of y positions of data
sVector of measured uncertainties in the values of z
orderOrder of 2d function to fit

Definition at line 104 of file LeastSqFitter1d.h.

106 : _x(x), _y(y), _s(s), _order(order) {
107 if (order == 0) {
108 throw LSST_EXCEPT(pex::exceptions::RuntimeError, "Fit order must be >= 1");
109 }
110
111 _nData = _x.size();
112 if (_nData != static_cast<int>(_y.size())) {
113 throw LSST_EXCEPT(pex::exceptions::RuntimeError, "x and y vectors of different lengths");
114 }
115 if (_nData != static_cast<int>(_s.size())) {
116 throw LSST_EXCEPT(pex::exceptions::RuntimeError, "x and s vectors of different lengths");
117 }
118
119 if (_nData < _order) {
120 throw LSST_EXCEPT(pex::exceptions::RuntimeError, "Fewer data points than parameters");
121 }
122
123 initFunctions();
124
125 Eigen::MatrixXd design(_nData, _order);
126 Eigen::VectorXd rhs(_nData);
127 for (int i = 0; i < _nData; ++i) {
128 rhs[i] = y[i] / _s[i];
129 for (int j = 0; j < _order; ++j) {
130 design(i, j) = func1d(_x[i], j) / _s[i];
131 }
132 }
133 _svd.compute(design, Eigen::ComputeThinU | Eigen::ComputeThinV);
134 _par = _svd.solve(rhs);
135}
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
Definition Exception.h:48
int y
Definition SpanSet.cc:48
T size(T... args)
table::Key< int > order

Member Function Documentation

◆ getBestFitFunction()

template<class FittingFunc >
FittingFunc lsst::meas::astrom::sip::LeastSqFitter1d< FittingFunc >::getBestFitFunction ( )

Return the best fit polynomial as a lsst::afw::math::Function1 object.

Definition at line 160 of file LeastSqFitter1d.h.

160 {
161 // FittingFunc and LeastSqFitter disagree on the definition of order of a function.
162 // LSF says that a linear function is order 2 (two coefficients), FF says only 1
163 FittingFunc func(_order - 1);
164
165 for (int i = 0; i < _order; ++i) {
166 func.setParameter(i, _par(i));
167 }
168 return func;
169}

◆ getChiSq()

template<class FittingFunc >
double lsst::meas::astrom::sip::LeastSqFitter1d< FittingFunc >::getChiSq ( )

Return a measure of the goodness of fit.

\[ \chi_r^2 = \sum \left( \frac{y_i - f(x_i)}{s} \right)^2 \]

Definition at line 199 of file LeastSqFitter1d.h.

199 {
200 FittingFunc f = getBestFitFunction();
201
202 double chisq = 0;
203 for (int i = 0; i < _nData; ++i) {
204 double val = _y[i] - f(_x[i]);
205 val /= _s[i];
206 chisq += pow(val, 2);
207 }
208
209 return chisq;
210}
FittingFunc getBestFitFunction()
Return the best fit polynomial as a lsst::afw::math::Function1 object.
T pow(T... args)
ImageT val
Definition CR.cc:146

◆ getErrors()

template<class FittingFunc >
Eigen::VectorXd lsst::meas::astrom::sip::LeastSqFitter1d< FittingFunc >::getErrors ( )

Return the 1 sigma uncertainties in the best fit parameters as an Eigen::Matrix.

Definition at line 149 of file LeastSqFitter1d.h.

149 {
150 Eigen::ArrayXd variance(_order);
151 for (int i = 0; i < _order; ++i) {
152 variance[i] = _svd.matrixV().row(i).dot(
153 (_svd.singularValues().array().inverse().square() * _svd.matrixV().col(i).array()).matrix());
154 }
155 return variance.sqrt().matrix();
156}
afw::table::Key< afw::table::Array< VariancePixelT > > variance

◆ getParams()

template<class FittingFunc >
Eigen::VectorXd lsst::meas::astrom::sip::LeastSqFitter1d< FittingFunc >::getParams ( )

Return the best fit parameters as an Eigen::Matrix.

Definition at line 139 of file LeastSqFitter1d.h.

139 {
140 Eigen::VectorXd vec = Eigen::VectorXd::Zero(_order);
141 for (int i = 0; i < _order; ++i) {
142 vec(i) = _par(i);
143 }
144 return vec;
145}

◆ getReducedChiSq()

template<class FittingFunc >
double lsst::meas::astrom::sip::LeastSqFitter1d< FittingFunc >::getReducedChiSq ( )

Return a measure of the goodness of fit.

\[ \chi_r^2 = \sum \left( \frac{y_i - f(x_i)}{s} \right)^2 \div (N-p) \]

Where \( N \) is the number of data points, and \( p \) is the number of parameters in the fit

Definition at line 218 of file LeastSqFitter1d.h.

218 {
219 return getChiSq() / (double)(_nData - _order);
220}
double getChiSq()
Return a measure of the goodness of fit.

◆ residuals()

template<class FittingFunc >
std::vector< double > lsst::meas::astrom::sip::LeastSqFitter1d< FittingFunc >::residuals ( )

Return a vector of residuals of the fit (i.e the difference between the input y values, and the value of the fitting function at that point.

Definition at line 182 of file LeastSqFitter1d.h.

182 {
184 out.reserve(_nData);
185
186 FittingFunc f = getBestFitFunction();
187
188 for (int i = 0; i < _nData; ++i) {
189 out.push_back(_y[i] - f(_x[i]));
190 }
191
192 return out;
193}
T push_back(T... args)
T reserve(T... args)

◆ valueAt()

template<class FittingFunc >
double lsst::meas::astrom::sip::LeastSqFitter1d< FittingFunc >::valueAt ( double x)

Calculate the value of the function at a given point.

Definition at line 173 of file LeastSqFitter1d.h.

173 {
174 FittingFunc f = getBestFitFunction();
175
176 return f(x);
177}

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