29 std::vector<const TrackParameters*>::const_iterator i_pbase;
35 double tmp_refFrameX = 0, tmp_refFrameY = 0, tmp_refFrameZ = 0;
36 double rxyMin = 1000000.;
46 if(msgLvl(MSG::WARNING))
msg()<<
"No InDet extrapolator given. Can't use TrackParameters!!!" <<
endmsg;
47 return StatusCode::FAILURE;
56 for (i_pbase = InpTrk.begin(); i_pbase != InpTrk.end(); ++i_pbase) {
58 perGlobalPos = (*i_pbase)->position();
62 tmp_refFrameX += perGlobalPos.x();
63 tmp_refFrameY += perGlobalPos.y();
64 tmp_refFrameZ += perGlobalPos.z();
74 tmpMat.
TrkPnt = (*i_pbase);
79 tmpMat.
TrkID = counter;
83 if(perGlobalPos.perp() < rxyMin){
84 rxyMin=perGlobalPos.perp();
89 if(counter == 0)
return StatusCode::FAILURE;
91 tmp_refFrameX /= counter;
92 tmp_refFrameY /= counter;
93 tmp_refFrameZ /= counter;
94 Amg::Vector3D refGVertex(tmp_refFrameX, tmp_refFrameY, tmp_refFrameZ);
104 double CovVertTrk[15];
105 std::fill(CovVertTrk, CovVertTrk+15, 0.);
107 for (i_pbase = InpTrk.begin(); i_pbase != InpTrk.end(); ++i_pbase) {
117 if(trkparN ==
nullptr)
return StatusCode::FAILURE;
119 if(mPer ==
nullptr) {
121 return StatusCode::FAILURE;
124 VectPerig = mPer->parameters();
130 if( !
convertAmg5SymMtx(mPer->covariance(), CovVertTrk) )
return StatusCode::FAILURE;
141 if(std::abs(effectiveBMAG) < 0.01) effectiveBMAG = 0.01;
144 (
double)VectPerig[0], (
double)VectPerig[1],
145 (
double)VectPerig[2], (
double)VectPerig[3],
146 (
double)VectPerig[4], CovVertTrk,
151 if( trkparO==
nullptr ) {
153 if(state.
m_apar[ntrk][4]<0){
163 if(ntrk>=
NTrMaxVFit)
return StatusCode::FAILURE;
172 return StatusCode::SUCCESS;
182 std::vector<const NeutralParameters*>::const_iterator i_pbase;
186 double CovVertTrk[15];
187 double tmp_refFrameX = 0, tmp_refFrameY = 0, tmp_refFrameZ = 0;
188 double rxyMin = 1000000.;
198 if(msgLvl(MSG::WARNING))
msg()<<
"No InDet extrapolator given. Can't use TrackParameters!!!" <<
endmsg;
199 return StatusCode::FAILURE;
208 for (i_pbase = InpTrk.begin(); i_pbase != InpTrk.end(); ++i_pbase) {
210 perGlobalPos = (*i_pbase)->position();
212 if(std::abs(perGlobalPos.z()) >
m_IDsizeZ)
return StatusCode::FAILURE;
213 if(perGlobalPos.perp() >
m_IDsizeR)
return StatusCode::FAILURE;
215 tmp_refFrameX += perGlobalPos.x() ;
216 tmp_refFrameY += perGlobalPos.y() ;
217 tmp_refFrameZ += perGlobalPos.z() ;
232 tmpMat.
TrkID = counter;
235 if(perGlobalPos.perp()<rxyMin){
236 rxyMin = perGlobalPos.perp();
241 if(counter == 0)
return StatusCode::FAILURE;
243 tmp_refFrameX /= counter;
244 tmp_refFrameY /= counter;
245 tmp_refFrameZ /= counter;
246 Amg::Vector3D refGVertex (tmp_refFrameX, tmp_refFrameY, tmp_refFrameZ);
255 for (i_pbase = InpTrk.begin(); i_pbase != InpTrk.end(); ++i_pbase) {
257 if(neuparO ==
nullptr)
return StatusCode::FAILURE;
260 if(mPerN ==
nullptr) {
262 return StatusCode::FAILURE;
265 VectPerig = mPerN->parameters();
271 if( !
convertAmg5SymMtx(mPerN->covariance(), CovVertTrk) )
return StatusCode::FAILURE;
281 if(std::abs(effectiveBMAG) < 0.01) effectiveBMAG = 0.01;
284 (
double)VectPerig[0], (
double)VectPerig[1],
285 (
double)VectPerig[2], (
double)VectPerig[3],
286 (
double)VectPerig[4], CovVertTrk,
291 if(state.
m_apar[ntrk][4]<0){
300 if(ntrk>=
NTrMaxVFit)
return StatusCode::FAILURE;
309 return StatusCode::SUCCESS;
const Amg::Vector3D & position() const
Access method for the position.
virtual const S & associatedSurface() const override final
Access to the Surface method.
const Amg::Vector3D & center() const
Returns the center position of the Surface.
VKalAtlasMagFld m_fitField
std::vector< double > m_MassInputParticles
long int m_ich[NTrMaxVFit]
double m_apar[NTrMaxVFit][5]
bool m_allowUltraDisplaced
double m_awgt[NTrMaxVFit][15]
const TrackParameters * m_globalFirstHit
std::vector< TrkMatControl > m_trkControl
StatusCode CvtTrackParameters(const std::vector< const TrackParameters * > &InpTrk, int &ntrk, State &state) const
const IExtrapolator * m_InDetExtrapolator
Pointer to Extrapolator AlgTool.
bool convertAmg5SymMtx(const AmgSymMatrix(5) *, double[15]) const
void VKalTransform(double MAG, double A0V, double ZV, double PhiV, double ThetaV, double PInv, const double[15], long int &Charge, double[5], double[15]) const
Gaudi::Property< double > m_IDsizeZ
Gaudi::Property< bool > m_firstMeasuredPoint
VKalExtPropagator * m_fitPropagator
Gaudi::Property< double > m_IDsizeR
StatusCode CvtNeutralParameters(const std::vector< const NeutralParameters * > &InpTrk, int &ntrk, State &state) const
virtual void getMagFld(const double, const double, const double, double &, double &, double &) override
void setAtlasMagRefFrame(double, double, double)
double getEffField(double bx, double by, double bz, double phi, double theta)
Eigen::Matrix< double, 3, 1 > Vector3D
::StatusCode StatusCode
StatusCode definition for legacy code.
constexpr double chargedPionMassInMeV
the mass of the charged pion (in MeV)
Ensure that the ATLAS eigen extensions are properly loaded.
ParametersT< TrackParametersDim, Charged, PerigeeSurface > Perigee
ParametersBase< NeutralParametersDim, Neutral > NeutralParameters
ParametersT< NeutralParametersDim, Neutral, PerigeeSurface > NeutralPerigee
ParametersBase< TrackParametersDim, Charged > TrackParameters
Amg::Vector3D trkRefGlobPos
const TrackParameters * TrkPnt
Amg::Vector3D trkSavedLocalVertex