ATLAS Offline Software
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 
9 namespace MuonCalib {
11  init();
12  }
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  }
28  return m_nb_coefficients;
29  }
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 }
plotBeamSpotCompare.x1
x1
Definition: plotBeamSpotCompare.py:216
Amg::VectorX
Eigen::Matrix< double, Eigen::Dynamic, 1 > VectorX
Dynamic Vector - dynamic allocation.
Definition: EventPrimitives.h:30
Amg::MatrixX
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
Definition: EventPrimitives.h:27
MuonCalib::BaseFunctionFitter::coefficients
const Amg::VectorX & coefficients() const
get the coefficients determined by the fit to the sample points
Definition: BaseFunctionFitter.cxx:30
MuonCalib::BaseFunction::value
virtual double value(const int k, const double x) const =0
get the value of the k-th base function at x
THROW_EXCEPTION
#define THROW_EXCEPTION(MSG)
Definition: MMReadoutElement.cxx:48
MuonCalib::BaseFunction
Definition: BaseFunction.h:16
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:210
MuonCalib::BaseFunctionFitter::init
void init()
default initialization method
Definition: BaseFunctionFitter.cxx:16
MuonCalib::BaseFunctionFitter::m_A
Amg::MatrixX m_A
coefficient matrix for the fit
Definition: BaseFunctionFitter.h:44
MuonCalib::BaseFunctionFitter::set_number_of_coefficients
void set_number_of_coefficients(const unsigned nb_coefficients)
set the number of fit parameters (coefficients) of the base functions to nb_coefficients
Definition: BaseFunctionFitter.cxx:33
MuonCalib
CscCalcPed - algorithm that finds the Cathode Strip Chamber pedestals from an RDO.
Definition: CscCalcPed.cxx:22
MuonCalib::BaseFunctionFitter::fit_parameters
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...
Definition: BaseFunctionFitter.cxx:36
BaseFunctionFitter.h
MuonCalib::BaseFunctionFitter::m_alpha
Amg::VectorX m_alpha
coefficients of the base functions after the fit
Definition: BaseFunctionFitter.h:45
MuonCalib::BaseFunctionFitter::BaseFunctionFitter
BaseFunctionFitter()
default constructor, the number of fit parameters will be set to 5
Definition: BaseFunctionFitter.cxx:10
MuonCalib::BaseFunctionFitter::m_nb_coefficients
unsigned int m_nb_coefficients
number of coefficients
Definition: BaseFunctionFitter.h:43
MuonCalib::BaseFunctionFitter::m_b
Amg::VectorX m_b
m_A*m_alpha = m_b;
Definition: BaseFunctionFitter.h:46
get_generator_info.error
error
Definition: get_generator_info.py:40
pow
constexpr int pow(int base, int exp) noexcept
Definition: ap_fixedTest.cxx:15
fitman.k
k
Definition: fitman.py:528
MuonCalib::BaseFunctionFitter::number_of_coefficients
int number_of_coefficients() const
get the number of fit parameters (coefficients) of the base functions to be fitted
Definition: BaseFunctionFitter.cxx:27