ATLAS Offline Software
Loading...
Searching...
No Matches
BaseFunctionFitter.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
6#include "GeoModelKernel/throwExcept.h"
7#include <cmath>
8
9namespace MuonCalib {
13 BaseFunctionFitter::BaseFunctionFitter(const unsigned nb_coefficients) {
14 init(nb_coefficients);
15 }
17
18 void BaseFunctionFitter::init(const unsigned nb_coefficients) {
19 m_A = Amg::MatrixX(nb_coefficients,nb_coefficients);
20 m_A.setZero();
21 m_b = Amg::VectorX(nb_coefficients);
22 m_b.setZero();
23 m_alpha = Amg::VectorX(nb_coefficients);
24 m_alpha.setZero();
25 m_nb_coefficients = nb_coefficients;
26 }
31 return m_alpha;
32 }
33 void BaseFunctionFitter::set_number_of_coefficients(const unsigned nb_coefficients) {
34 init(nb_coefficients);
35 }
36 void BaseFunctionFitter::fit_parameters(const std::vector<SamplePoint> & sample_point,
37 const unsigned int first_point,
38 const unsigned int last_point,
39 const BaseFunction& base_function) {
40 if (first_point<1 || first_point>sample_point.size()) {
41 THROW_EXCEPTION("BaseFunctionFitter::fit_parameters() - ERROR: Illegal first point "
42 <<first_point<<", must be >=1 and <="<<sample_point.size());
43 }
44 if (last_point<first_point || last_point>sample_point.size()) {
45 THROW_EXCEPTION("BaseFunctionFitter::fit_parameters() - ERROR: Illegal last point "<<last_point
46 <<", must be >="<<first_point<<" and <="<<sample_point.size());
47 }
48 // clear the objects //
50
51 for (unsigned j=0; j<m_nb_coefficients; ++j) {
52 for (unsigned p=j; p<m_nb_coefficients; ++p) {
53 for (unsigned k=first_point-1; k<last_point; ++k) {
54 m_A.fillSymmetric(j,p,m_A(j,p)+base_function.value(j,sample_point[k].x1())
55 *base_function.value(p,sample_point[k].x1()) /
56 std::pow(sample_point[k].error(), 2));
57 }
58 }
59 for (unsigned k=first_point-1; k<last_point; k++) {
60 m_b[j] = m_b[j]+sample_point[k].x2()* base_function.value(j, sample_point[k].x1()) /
61 std::pow(sample_point[k].error(), 2);
62 }
63 }
64 // perform the minimization //
65 m_alpha = m_A.inverse()*m_b;
66 }
67}
void init()
default initialization method
const Amg::VectorX & coefficients() const
get the coefficients determined by the fit to the sample points
BaseFunctionFitter()
default constructor, the number of fit parameters will be set to 5
int number_of_coefficients() const
get the number of fit parameters (coefficients) of the base functions to be fitted
void fit_parameters(const std::vector< SamplePoint > &sample_point, const unsigned int first_point, const unsigned int last_point, const BaseFunction &base_function)
perform a fit of the base functions (base_function) to the sample points as given in "sample_point" s...
Amg::VectorX m_b
m_A*m_alpha = m_b;
Amg::VectorX m_alpha
coefficients of the base functions after the fit
void set_number_of_coefficients(const unsigned nb_coefficients)
set the number of fit parameters (coefficients) of the base functions to nb_coefficients
Amg::MatrixX m_A
coefficient matrix for the fit
unsigned int m_nb_coefficients
number of coefficients
This is an abstract base class for a set of base functions for fits to sample points.
virtual double value(const int k, const double x) const =0
get the value of the k-th base function at x
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
Eigen::Matrix< double, Eigen::Dynamic, 1 > VectorX
Dynamic Vector - dynamic allocation.
CscCalcPed - algorithm that finds the Cathode Strip Chamber pedestals from an RDO.
#define THROW_EXCEPTION(MESSAGE)
Definition throwExcept.h:10