Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:02:29

0001 // Original Author:  Jan Kašpar
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 }