File indexing completed on 2024-04-06 12:02:29
0001
0002
0003 #include "CondFormats/PPSObjects/interface/LHCInterpolatedOpticalFunctionsSet.h"
0004
0005
0006
0007 void LHCInterpolatedOpticalFunctionsSet::initializeSplines() {
0008 const unsigned int num_xi_vals = m_xi_values.size();
0009
0010 m_splines.resize(m_fcn_values.size());
0011 for (unsigned int i = 0; i < m_fcn_values.size(); ++i)
0012 m_splines[i] = std::make_shared<TSpline3>("", m_xi_values.data(), m_fcn_values[i].data(), num_xi_vals);
0013 }
0014
0015
0016
0017 void LHCInterpolatedOpticalFunctionsSet::transport(const LHCInterpolatedOpticalFunctionsSet::Kinematics &input,
0018 LHCInterpolatedOpticalFunctionsSet::Kinematics &output,
0019 bool calculateAngles) const {
0020 const double xi = input.xi;
0021
0022 output.x = m_splines[exd]->Eval(xi) + m_splines[evx]->Eval(xi) * input.x + m_splines[eLx]->Eval(xi) * input.th_x +
0023 m_splines[e14]->Eval(xi) * input.th_y;
0024
0025 output.th_x = (!calculateAngles) ? 0.
0026 : m_splines[expd]->Eval(xi) + m_splines[evpx]->Eval(xi) * input.x +
0027 m_splines[eLpx]->Eval(xi) * input.th_x + m_splines[e24]->Eval(xi) * input.th_y;
0028
0029 output.y = m_splines[eyd]->Eval(xi) + m_splines[evy]->Eval(xi) * input.y + m_splines[eLy]->Eval(xi) * input.th_y +
0030 m_splines[e32]->Eval(xi) * input.th_x;
0031
0032 output.th_y = (!calculateAngles) ? 0.
0033 : m_splines[eypd]->Eval(xi) + m_splines[evpy]->Eval(xi) * input.y +
0034 m_splines[eLpy]->Eval(xi) * input.th_y + m_splines[e42]->Eval(xi) * input.th_x;
0035
0036 output.xi = input.xi;
0037 }