10 std::cout <<
"Reading parameterization from file: \"" << filename <<
"\"" <<
'\n';
13 file.open(filename.data());
15 std::stringstream errorMsg;
16 errorMsg <<
"Parameterization::load(): \tCould not open parameterization file: \"" << filename <<
"\"";
17 throw std::runtime_error(errorMsg.str().data());
20 while (
file.peek() ==
'#') {
25 if (name ==
"m_xPositionInitIP") {
double value;
file >> value; std::cout <<
'\t' << name <<
": " << value <<
'\n';
m_positionInitIP[0] = value; }
26 if (name ==
"m_yPositionInitIP") {
double value;
file >> value; std::cout <<
'\t' << name <<
": " << value <<
'\n';
m_positionInitIP[1] = value; }
27 if (name ==
"m_zPositionInitIP") {
double value;
file >> value; std::cout <<
'\t' << name <<
": " << value <<
'\n';
m_positionInitIP[2] = value; }
28 if (name ==
"m_xSlopeInitIP") {
double value;
file >> value; std::cout <<
'\t' << name <<
": " << value <<
'\n';
m_slopeInitIP[0] = value; }
29 if (name ==
"m_ySlopeInitIP") {
double value;
file >> value; std::cout <<
'\t' << name <<
": " << value <<
'\n';
m_slopeInitIP[1] = value; }
30 if (name ==
"m_detectorPosition") {
double value;
file >> value; std::cout <<
'\t' << name <<
": " << value <<
'\n';
m_parametrizationPosition = value; }
31 if (name ==
"m_nominalEnergy") {
double value;
file >> value; std::cout <<
'\t' << name <<
": " << value <<
'\n';
m_energy = value; }
33 file.ignore(1000,
'\n');
36 std::vector<std::unique_ptr<TF1>> poly;
41 file.ignore(1000,
'\n');
42 std::vector<double> coef;
50 for (
int i = 0; i <= N; i++) {
52 std::stringstream errorMsg;
53 errorMsg <<
"Parameterization::load(): \tFile \"" << filename
54 <<
"\" does not contain a correct parameterization";
55 throw std::runtime_error(errorMsg.str().data());
59 coef.push_back(value);
62 file.ignore(1000,
'\n');
65 name.Form(
"pol%d", N);
66 auto temp = std::make_unique<TF1>(name, name);
67 for (
int iCoef = 0; iCoef <= N; ++iCoef) {
68 temp->SetParameter(iCoef, coef.at(iCoef));
72 if (iEqu == 1 or iEqu == 3) {
76 poly.push_back(std::move(temp));
84 std::cout <<
"Finished reading parameterization: \"" << filename <<
"\"\n\n";
115 return v0 + v1 + v2 + v3 + v4 + v5 + v6 + v7;
const TF1 * getPolynomial(int iPoly) const
Returns const raw poiner to polynomial of number iPoly.
double m_energy
Nominal energy of proton.
double evaluate(double x, double y, double z, double sx, double sy, double E) const
Evaluates value of function with given initial positions, slopes and energy.
double sy(double x0, double y0, double z0, double sx0, double sy0, double E) const
Evaluates value of vertical slope equation.
Parameterization(std::string_view filename)
Takes filename of parametrization file as argument.
std::array< double, 2 > m_slopeInitIP
Crossing angles in rad.
double x(double x0, double y0, double z0, double sx0, double sy0, double E) const
Evaluates value of horizontal position equation.
std::vector< std::unique_ptr< Equation > > m_equation
Vector of equations: 0 - x, 1 - y, 2 - sx, 3 - sy.
static constexpr int m_numberOfEquations
Number of equations - each for one measured value.
const Equation * getEquation(int iEqu) const
Returns const raw pointer to equation of number iEqu.
static constexpr int m_numberOfPolynomials
Number of polynomials in equation.
double m_energy
Nominal beam energy.
bool m_yIsUsed
True if y measurements are used in reconstruction.
double sx(double x0, double y0, double z0, double sx0, double sy0, double E) const
Evaluates value of horizontal slope equation.
double y(double x0, double y0, double z0, double sx0, double sy0, double E) const
Evaluates value of vertical position equation.
double m_parametrizationPosition
Position for which the parameterisation was performed.
std::array< double, 3 > m_positionInitIP
Initial vertex postition.
Header file for interface of SiGlobAlignDBTool used to read global alignment for database.