28 std::vector<const TrackParameters*>::const_iterator i_pbase;
34 double tmp_refFrameX = 0, tmp_refFrameY = 0, tmp_refFrameZ = 0;
35 double rxyMin = 1000000.;
45 if(msgLvl(MSG::WARNING))
msg()<<
"No InDet extrapolator given. Can't use TrackParameters!!!" <<
endmsg;
46 return StatusCode::FAILURE;
55 for (i_pbase = InpTrk.begin(); i_pbase != InpTrk.end(); ++i_pbase) {
57 perGlobalPos = (*i_pbase)->position();
61 tmp_refFrameX += perGlobalPos.x();
62 tmp_refFrameY += perGlobalPos.y();
63 tmp_refFrameZ += perGlobalPos.z();
73 tmpMat.
TrkPnt = (*i_pbase);
78 tmpMat.
TrkID = counter;
82 if(perGlobalPos.perp() < rxyMin){
83 rxyMin=perGlobalPos.perp();
88 if(counter == 0)
return StatusCode::FAILURE;
90 tmp_refFrameX /= counter;
91 tmp_refFrameY /= counter;
92 tmp_refFrameZ /= counter;
93 Amg::Vector3D refGVertex(tmp_refFrameX, tmp_refFrameY, tmp_refFrameZ);
103 double CovVertTrk[15];
104 std::fill(CovVertTrk, CovVertTrk+15, 0.);
106 for (i_pbase = InpTrk.begin(); i_pbase != InpTrk.end(); ++i_pbase) {
116 if(trkparN ==
nullptr)
return StatusCode::FAILURE;
118 if(mPer ==
nullptr) {
120 return StatusCode::FAILURE;
123 VectPerig = mPer->parameters();
131 return StatusCode::FAILURE;
143 if(std::abs(effectiveBMAG) < 0.01) effectiveBMAG = 0.01;
146 (
double)VectPerig[0], (
double)VectPerig[1],
147 (
double)VectPerig[2], (
double)VectPerig[3],
148 (
double)VectPerig[4], CovVertTrk,
153 if( trkparO==
nullptr ) {
155 if(state.
m_apar[ntrk][4]<0){
165 if(ntrk>=
NTrMaxVFit)
return StatusCode::FAILURE;
174 return StatusCode::SUCCESS;
184 std::vector<const NeutralParameters*>::const_iterator i_pbase;
188 double CovVertTrk[15];
189 double tmp_refFrameX = 0, tmp_refFrameY = 0, tmp_refFrameZ = 0;
190 double rxyMin = 1000000.;
200 if(msgLvl(MSG::WARNING))
msg()<<
"No InDet extrapolator given. Can't use TrackParameters!!!" <<
endmsg;
201 return StatusCode::FAILURE;
210 for (i_pbase = InpTrk.begin(); i_pbase != InpTrk.end(); ++i_pbase) {
212 perGlobalPos = (*i_pbase)->position();
214 if(std::abs(perGlobalPos.z()) >
m_IDsizeZ)
return StatusCode::FAILURE;
215 if(perGlobalPos.perp() >
m_IDsizeR)
return StatusCode::FAILURE;
217 tmp_refFrameX += perGlobalPos.x() ;
218 tmp_refFrameY += perGlobalPos.y() ;
219 tmp_refFrameZ += perGlobalPos.z() ;
234 tmpMat.
TrkID = counter;
237 if(perGlobalPos.perp()<rxyMin){
238 rxyMin = perGlobalPos.perp();
242 if(counter == 0)
return StatusCode::FAILURE;
244 tmp_refFrameX /= counter;
245 tmp_refFrameY /= counter;
246 tmp_refFrameZ /= counter;
247 Amg::Vector3D refGVertex (tmp_refFrameX, tmp_refFrameY, tmp_refFrameZ);
256 for (i_pbase = InpTrk.begin(); i_pbase != InpTrk.end(); ++i_pbase) {
258 if(neuparO ==
nullptr)
return StatusCode::FAILURE;
261 if(mPerN ==
nullptr) {
263 return StatusCode::FAILURE;
266 VectPerig = mPerN->parameters();
274 return StatusCode::FAILURE;
286 if(std::abs(effectiveBMAG) < 0.01) effectiveBMAG = 0.01;
289 (
double)VectPerig[0], (
double)VectPerig[1],
290 (
double)VectPerig[2], (
double)VectPerig[3],
291 (
double)VectPerig[4], CovVertTrk,
296 if(state.
m_apar[ntrk][4]<0){
305 if(ntrk>=
NTrMaxVFit)
return StatusCode::FAILURE;
314 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