LSST Applications g0265f82a02+0e5473021a,g02d81e74bb+bd2ed33bd6,g1470d8bcf6+de7501a2e0,g14a832a312+ff425fae3c,g2079a07aa2+86d27d4dc4,g2305ad1205+91a32aca49,g295015adf3+762506a1ad,g2bbee38e9b+0e5473021a,g337abbeb29+0e5473021a,g3ddfee87b4+c34e8be1fa,g487adcacf7+5fae3daba8,g50ff169b8f+96c6868917,g52b1c1532d+585e252eca,g591dd9f2cf+ea1711114f,g5a732f18d5+53520f316c,g64a986408d+bd2ed33bd6,g858d7b2824+bd2ed33bd6,g8a8a8dda67+585e252eca,g99cad8db69+016a06b37a,g9ddcbc5298+9a081db1e4,ga1e77700b3+15fc3df1f7,ga8c6da7877+ef4e3a5875,gb0e22166c9+60f28cb32d,gb6a65358fc+0e5473021a,gba4ed39666+c2a2e4ac27,gbb8dafda3b+09e12c87ab,gc120e1dc64+bc2e06c061,gc28159a63d+0e5473021a,gcf0d15dbbd+c34e8be1fa,gdaeeff99f8+f9a426f77a,ge6526c86ff+508d0e0a30,ge79ae78c31+0e5473021a,gee10cc3b42+585e252eca,gf18bd8381d+8d59551888,gf1cff7945b+bd2ed33bd6,w.2024.16
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: