7#ifndef TRKVKALVRTFITTER_VKALVRTFITTER_H
8#define TRKVKALVRTFITTER_VKALVRTFITTER_H
10#include "GaudiKernel/ToolHandle.h"
36 typedef std::vector<double>
dvect;
38 class IMagneticFieldTool;
71 virtual StatusCode
initialize() override final;
72 virtual StatusCode
finalize() override final;
82 const EventContext& ctx,
87 const EventContext& ctx,
93 const EventContext& ctx,
98 const EventContext& ctx,
104 const EventContext& ctx,
109 const EventContext& ctx,
114 const EventContext& ctx,
120 const EventContext& ctx,
126 const EventContext& ctx,
130 const EventContext& ctx,
148 std::span<
const double> particleMass,
150 double massConstraint = 0.)
const override final;
153 std::span<
const double> particleMass,
155 double massConstraint = 0.)
const override final;
158 std::span<
const double> particleMass,
161 double massConstraint = 0.)
const override final;
165 bool FirstDecayAtPV = false)
const override final;
172 double massConstraint)
const override final;
177 const EventContext& ctx)
const override final;
183 TLorentzVector& Momentum,
190 bool ifCovV0 = false)
const override final;
195 TLorentzVector& Momentum,
202 bool ifCovV0 = false)
const override final;
208 TLorentzVector& Momentum,
215 bool ifCovV0 = false)
const override final;
218 const TLorentzVector& Momentum,
220 const long int& Charge,
252 bool = false)
const override final;
298 const long int Charge,
305 const long int Charge,
313 const long int Charge,
320 const long int Charge,
334 Gaudi::Property<double>
m_IDsizeR{
this,
"IDsizeR", 1150.0};
335 Gaudi::Property<double>
m_IDsizeZ{
this,
"IDsizeZ", 3000.0};
336 Gaudi::Property<double>
m_MSsizeR{
this,
"MSsizeR", 8000.0};
337 Gaudi::Property<double>
m_MSsizeZ{
this,
"MSsizeZ", 10000.0};
340 Gaudi::Property<std::vector<double>>
m_c_MassInputParticles{
this,
"InputParticleMasses", {},
"List of masses of input particles (pions assumed if absent)"};
342 ToolHandle<IExtrapolator>
m_extPropagator{
this,
"Extrapolator",
"",
"External propagator"};
346 "AtlasFieldCacheCondObj",
348 "Name of the Magnetic Field key" };
349 Gaudi::Property<bool>
m_firstMeasuredPoint{
this,
"FirstMeasuredPoint",
false,
"Use FirstMeasuredPoint strategy in fits"};
352 "Use radius of FirstMeasuredRadiusLimit as maximal vertex radius"};
353 Gaudi::Property<bool>
m_makeExtendedVertex{
this,
"MakeExtendedVertex",
false,
"Return VxCandidate with full covariance matrix"};
354 Gaudi::Property<bool>
m_useFixedField{
this,
"useFixedField",
false,
"Use fixed magnetic field instead of exact Atlas one"};
358 Gaudi::Property<bool>
m_useAprioriVertex{
this,
"useAprioriVertexCnst",
false,
"Use a priori vertex constraint"};
359 Gaudi::Property<bool>
m_useThetaCnst{
this,
"useThetaCnst",
false,
"Use angle dTheta=0 constraint"};
360 Gaudi::Property<bool>
m_usePhiCnst{
this,
"usePhiCnst",
false,
"Use angle dPhi=0 constraint"};
361 Gaudi::Property<bool>
m_usePointingCnst{
this,
"usePointingCnst",
false,
"Use pointing to other vertex constraint"};
362 Gaudi::Property<bool>
m_useZPointingCnst{
this,
"useZPointingCnst",
false,
"Use ZPointing to other vertex constraint"};
363 Gaudi::Property<bool>
m_usePassNear{
this,
"usePassNearCnst",
false,
"Use combined particle pass near other vertex constraint"};
364 Gaudi::Property<bool>
m_usePassWithTrkErr{
this,
"usePassWithTrkErrCnst",
false,
"Use pass near with combined particle errors constraint"};
471 static void makeSimpleCascade(std::vector< std::vector<int> > &, std::vector< std::vector<int> > &,
472 CascadeState& cstate) ;
473 static void printSimpleCascade(std::vector< std::vector<int> > &, std::vector< std::vector<int> > &,
474 const CascadeState& cstate) ;
475 static int findPositions(
const std::vector<int> &,
const std::vector<int> &, std::vector<int> &) ;
499 void initState (
const EventContext& ctx, State& state)
const;
521 const std::vector<dvect>&,
525 StatusCode
CvtPerigee(
const std::vector<const Perigee*>& list,
530 std::span<const xAOD::TrackParticle* const> list,
535 const std::vector<const xAOD::NeutralParticle*>& list,
540 const std::vector<const TrackParameters*>& InpTrk,
545 const std::vector<const NeutralParameters*>& InpTrk,
561 TLorentzVector& Momentum,
565 std::vector<std::vector<double>>& TrkAtVrt,
573 const std::vector<double>& VKPerigee,
574 const std::vector<double>& VKCov,
#define AmgSymMatrix(dim)
Base class for VKal state object.
Local cache for magnetic field (based on MagFieldServices/AtlasFieldSvcTLS.h).
Support class for PropertyMgr.
std::vector< const xAOD::TrackParticle * > m_partListForCascade
std::vector< double > m_partMassForCascade
std::vector< PartialMassConstraint > m_partMassCnstForCascade
std::vector< cascadeV > m_cascadeVList
VKalAtlasMagFld m_fitField
std::vector< double > m_partMassCnst
std::vector< double > m_MassInputParticles
long int m_ich[NTrMaxVFit]
MagField::AtlasFieldCache m_fieldCache
std::vector< double > m_ApproximateVertex
double m_apar[NTrMaxVFit][5]
std::vector< double > m_VertexForConstraint
bool m_allowUltraDisplaced
double m_awgt[NTrMaxVFit][15]
std::vector< double > m_CovVrtForConstraint
double m_parfs[NTrMaxVFit][3]
std::vector< std::vector< int > > m_partMassCnstTrk
std::unique_ptr< CascadeState > m_cascadeState
const TrackParameters * m_globalFirstHit
VKalVrtControl m_vkalFitControl
double m_massForConstraint
std::vector< double > m_ErrMtx
double m_cnstRadiusRef[2]
const EventContext * m_eventContext
std::vector< TrkMatControl > m_trkControl
bool m_frozenVersionForBTagging
static int getSimpleVIndex(const VertexID &, const CascadeState &cstate)
virtual std::unique_ptr< Trk::Perigee > CreatePerigee(const std::vector< double > &VKPerigee, const std::vector< double > &VKCov, IVKalState &istate) const override final
StatusCode CvtTrackParameters(const std::vector< const TrackParameters * > &InpTrk, int &ntrk, State &state) const
void VKalVrtConfigureFitterCore(int NTRK, State &state) const
TrkVKalVrtFitter(const std::string &t, const std::string &name, const IInterface *parent)
virtual std::unique_ptr< xAOD::Vertex > fit(const EventContext &ctx, const std::vector< const TrackParameters * > &perigeeList, const Amg::Vector3D &startingPoint) const override final
Interface for MeasuredPerigee with starting point.
const IExtrapolator * m_InDetExtrapolator
Pointer to Extrapolator AlgTool.
Gaudi::Property< bool > m_makeExtendedVertex
virtual void setMassInputParticles(const std::vector< double > &, IVKalState &istate) const override final
VertexID nextVertex(const std::vector< const xAOD::TrackParticle * > &list, std::span< const double > particleMass, IVKalState &istate, double massConstraint=0.) const override final
static int indexInV(const VertexID &, const CascadeState &cstate)
Gaudi::Property< double > m_MSsizeZ
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > m_fieldCacheCondObjInputKey
virtual void setCnstType(int, IVKalState &istate) const override final
bool convertAmg5SymMtx(const AmgSymMatrix(5) *, double[15]) const
static Amg::MatrixX * GiveFullMatrix(int NTrk, std::vector< double > &)
Gaudi::Property< bool > m_usePhiCnst
virtual StatusCode VKalVrtCvtTool(const Amg::Vector3D &Vertex, const TLorentzVector &Momentum, const dvect &CovVrtMom, const long int &Charge, dvect &Perigee, dvect &CovPerigee, IVKalState &istate) const override final
virtual void setCovVrtForConstraint(double XX, double XY, double YY, double XZ, double YZ, double ZZ, IVKalState &istate) const override final
virtual StatusCode VKalVrtFitFast(std::span< const xAOD::TrackParticle *const >, Amg::Vector3D &Vertex, double &minDZ, IVKalState &istate) const
StatusCode CvtPerigee(const std::vector< const Perigee * > &list, int &ntrk, State &state) const
virtual StatusCode VKalGetMassError(double &Mass, double &MassError, const IVKalState &istate) const override final
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
virtual void setVertexForConstraint(const xAOD::Vertex &, IVKalState &istate) const override final
Gaudi::Property< bool > m_usePointingCnst
Gaudi::Property< double > m_IDsizeZ
static int findPositions(const std::vector< int > &, const std::vector< int > &, std::vector< int > &)
ToolHandle< IExtrapolator > m_extPropagator
int VKalVrtFit3(int ntrk, Amg::Vector3D &Vertex, TLorentzVector &Momentum, long int &Charge, dvect &ErrorMatrix, dvect &Chi2PerTrk, std::vector< std::vector< double > > &TrkAtVrt, double &Chi2, State &state, bool ifCovV0) const
Gaudi::Property< int > m_IterationNumber
static const Perigee * GetPerigee(const TrackParameters *i_ntrk)
Gaudi::Property< bool > m_allowUltraDisplaced
Gaudi::Property< double > m_RobustScale
static void makeSimpleCascade(std::vector< std::vector< int > > &, std::vector< std::vector< int > > &, CascadeState &cstate)
void initState(const EventContext &ctx, State &state) const
virtual StatusCode initialize() override final
Gaudi::Property< std::vector< double > > m_c_CovVrtForConstraint
virtual StatusCode VKalGetFullCov(long int, dvect &CovMtx, IVKalState &istate, bool=false) const override final
Gaudi::Property< double > m_massForConstraint
VertexID startVertex(const std::vector< const xAOD::TrackParticle * > &list, std::span< const double > particleMass, IVKalState &istate, double massConstraint=0.) const override final
Interface for cascade fit.
virtual StatusCode VKalVrtFit(const std::vector< const xAOD::TrackParticle * > &, const std::vector< const xAOD::NeutralParticle * > &, Amg::Vector3D &Vertex, TLorentzVector &Momentum, long int &Charge, dvect &ErrorMatrix, dvect &Chi2PerTrk, std::vector< std::vector< double > > &TrkAtVrt, double &Chi2, IVKalState &istate, bool ifCovV0=false) const override final
Gaudi::Property< bool > m_frozenVersionForBTagging
Gaudi::Property< bool > m_firstMeasuredPoint
Gaudi::Property< int > m_Robustness
virtual double VKalGetImpact(const xAOD::TrackParticle *, const Amg::Vector3D &Vertex, const long int Charge, dvect &Impact, dvect &ImpactError, IVKalState &istate) const override final
static void printSimpleCascade(std::vector< std::vector< int > > &, std::vector< std::vector< int > > &, const CascadeState &cstate)
virtual StatusCode VKalGetTrkWeights(dvect &Weights, const IVKalState &istate) const override final
static int VKalGetNDOF(const State &state)
Gaudi::Property< bool > m_usePassWithTrkErr
Gaudi::Property< double > m_cascadeCnstPrecision
static void FillMatrixP(AmgSymMatrix(5)&, std::vector< double > &)
Gaudi::Property< bool > m_useZPointingCnst
Gaudi::Property< bool > m_useAprioriVertex
Gaudi::Property< bool > m_firstMeasuredRadiusLimit
Gaudi::Property< bool > m_useFixedField
std::unique_ptr< xAOD::Vertex > makeXAODVertex(int, const Amg::Vector3D &, const dvect &, const dvect &, const std::vector< dvect > &, double, State &state) const
virtual StatusCode finalize() override final
VxCascadeInfo * fitCascade(IVKalState &istate, const Vertex *primVertex=0, bool FirstDecayAtPV=false) const override final
StatusCode CvtTrackParticle(std::span< const xAOD::TrackParticle *const > list, int &ntrk, State &state) const
Gaudi::Property< bool > m_usePassNear
VKalExtPropagator * m_fitPropagator
friend class VKalExtPropagator
virtual void setApproximateVertex(double X, double Y, double Z, IVKalState &istate) const override final
Gaudi::Property< std::vector< double > > m_c_MassInputParticles
Gaudi::Property< std::vector< double > > m_c_VertexForConstraint
virtual void setMassForConstraint(double Mass, IVKalState &istate) const override final
Gaudi::Property< double > m_IterationPrecision
Gaudi::Property< double > m_IDsizeR
Gaudi::Property< bool > m_firstMeasuredPointLimit
virtual std::unique_ptr< IVKalState > makeState(const EventContext &ctx) const override final
virtual void setRobustness(int, IVKalState &istate) const override final
StatusCode CvtNeutralParticle(const std::vector< const xAOD::NeutralParticle * > &list, int &ntrk, State &state) const
Gaudi::Property< double > m_MSsizeR
StatusCode addMassConstraint(VertexID Vertex, const std::vector< const xAOD::TrackParticle * > &tracksInConstraint, const std::vector< VertexID > &verticesInConstraint, IVKalState &istate, double massConstraint) const override final
void VKalToTrkTrack(double curBMAG, double vp1, double vp2, double vp3, double &tp1, double &tp2, double &tp3) const
void setAthenaPropagator(const Trk::IExtrapolator *)
virtual void setRobustScale(double, IVKalState &istate) const override final
StatusCode CvtNeutralParameters(const std::vector< const NeutralParameters * > &InpTrk, int &ntrk, State &state) const
Gaudi::Property< bool > m_useThetaCnst
static int getCascadeNDoF(const CascadeState &cstate)
This class is a simplest representation of a vertex candidate.
Definition of ATLAS Math & Geometry primitives (Amg).
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
Eigen::Matrix< double, 3, 1 > Vector3D
=============================================================================
Ensure that the ATLAS eigen extensions are properly loaded.
ParametersT< TrackParametersDim, Charged, PerigeeSurface > Perigee
ParametersBase< NeutralParametersDim, Neutral > NeutralParameters
ParametersBase< TrackParametersDim, Charged > TrackParameters
std::vector< double > dvect
ICaloAffectedTool is abstract interface for tools checking if 4 mom is in calo affected region.
std::vector< VertexID > pseudoInVrt
std::vector< int > trkInVrt
Amg::Vector3D trkRefGlobPos
const TrackParameters * TrkPnt
Amg::Vector3D trkSavedLocalVertex
std::vector< VertexID > mergedIN
std::vector< VertexID > inPointingV
std::vector< int > trkInVrt