9 #include <top/reconstruction_cpp/ModuleAlignment.h>
11 #include <TRotation.h>
12 #include <TDecompChol.h>
35 m_COV.ResizeTo(numPar, numPar);
36 m_U.ResizeTo(numPar, numPar);
55 if (track.getModuleID() !=
m_moduleID)
return -2;
60 std::vector<double> first(
m_par.size(), 0);
61 TMatrixDSym second(
m_par.size());
68 if (ier != 0)
return ier;
70 std::vector<double> dpar(
m_par.size(), 0);
71 for (
size_t i = 0; i < dpar.size(); i++) {
72 for (
size_t k = 0; k < dpar.size(); k++) {
73 dpar[i] +=
m_COV[i][k] * first[k];
75 if (fabs(dpar[i]) >
m_maxDpar[i])
return ier;
78 for (
size_t i = 0; i < dpar.size(); i++) {
100 std::vector<float> pars;
101 for (
auto par :
m_par) pars.push_back(par);
107 std::vector<float> errors;
108 int numPar =
m_par.size();
109 for (
int i = 0; i < numPar; i++) {
110 errors.push_back(sqrt(
m_COV[i][i]));
117 TVector3 translation(par[0], par[1], par[2]);
119 rotation.RotateX(par[3]).RotateY(par[4]).RotateZ(par[5]);
121 if (not ok)
return 0;
124 if (not pdfConstructor.
isValid()) {
129 auto LL = pdfConstructor.
getLogL(par[6]);
139 if (not ok)
return false;
142 for (
size_t k = 0; k < par.size(); k++) {
147 if (not ok)
return false;
151 if (not ok)
return false;
153 first[k] = (fp - fm) / 2 /
m_steps[k];
154 second[k][k] = (fp - 2 * f0 + fm) / pow(
m_steps[k], 2);
159 for (
size_t k = 0; k < par.size(); k++) {
161 for (
size_t j = k + 1; j < par.size(); j++) {
167 if (not ok)
return false;
171 if (not ok)
return false;
176 if (not ok)
return false;
180 if (not ok)
return false;
182 second[j][k] = second[k][j] = (fpp - fmp - fpm + fmm) / 4 /
m_steps[k] /
m_steps[j];
201 for (
int i = 0; i <
m_U.GetNrows(); i++) {
204 for (
int k = 0; k <
m_U.GetNrows(); k++) {
206 A[ii][kk] =
m_U[i][k];
213 if (not chol.Decompose())
return 1;
217 for (
int i = 0; i <
m_U.GetNrows(); i++) {
220 for (
int k = 0; k <
m_U.GetNrows(); k++) {
222 m_COV[i][k] = A[ii][kk];
Provides a type-safe way to pass members of the chargedStableSet set.
int m_numUsedTracks
number of tracks used
TMatrixDSym m_U
matrix (neg.
bool derivatives(std::vector< double > &first, TMatrixDSym &second)
Calculates numerically first and second derivatives of log likelihood against the parameters.
TMatrixDSym m_COV
covariance matrix
std::vector< double > m_steps
step sizes
int m_numPhotons
number of photons used for log likelihood calculation
std::vector< bool > m_fixed
true if parameter is fixed
int m_numTracks
track counter
std::vector< std::string > m_parNames
parameter names
std::vector< float > getParameters() const
Returns alignment parameters.
std::vector< double > m_par
current parameter values
double getLogL(const std::vector< double > &par, bool &ok)
Returns log likelihood for given parameters Note: it changes helix parameters of TOPTrack object (m_t...
Const::ChargedStable m_hypothesis
particle hypothesis
bool m_valid
validity of results
void setSteps(double position, double angle, double time)
Sets steps for numerical calculation of derivatives.
int iterate(TOPTrack &track, const Const::ChargedStable &hypothesis)
Run a single alignment iteration, on success update alignment parameters.
std::vector< double > m_parInit
initial parameter values
int invertMatrixU()
Inverts matrix m_U using Cholesky decomposition.
std::vector< double > m_maxDpar
maximal parameter changes in one iteration
std::vector< float > getErrors() const
Returns errors on alignment parameters.
void reset()
Reset the object.
ModuleAlignment(PDFConstructor::EPDFOption opt=PDFConstructor::c_Rough)
Constructor.
TOPTrack * m_track
track parameters at TOP
PDFConstructor::EPDFOption m_opt
PDF option.
PDF construction and log likelihood determination for a given track and particle hypothesis.
LogL getLogL() const
Returns extended log likelihood (using the default time window)
bool isValid() const
Checks the object status.
EPDFOption
Signal PDF construction options.
Reconstructed track at TOP.
bool overrideTransformation(const TRotation &rotation, const TVector3 &translation)
Overrides transformation from local to nominal frame, which is by default obtained from DB.
Abstract base class for different kinds of events.