7#ifndef TRKVKALVRTFITTER_VKALVRTFITTER_H
8#define TRKVKALVRTFITTER_VKALVRTFITTER_H
11#include "GaudiKernel/ToolHandle.h"
36 typedef std::vector<double>
dvect;
38 class IMagneticFieldTool;
75 virtual StatusCode
initialize() override final;
76 virtual StatusCode
finalize() override final;
104 const EventContext& ctx,
142 std::span<
const double> particleMass,
144 double massConstraint = 0.)
const override final;
147 std::span<
const double> particleMass,
149 double massConstraint = 0.)
const override final;
152 std::span<
const double> particleMass,
155 double massConstraint = 0.)
const override final;
159 bool FirstDecayAtPV = false)
const override final;
166 double massConstraint)
const override final;
171 const EventContext& ctx)
const override final;
177 TLorentzVector& Momentum,
184 bool ifCovV0 = false)
const override final;
189 TLorentzVector& Momentum,
196 bool ifCovV0 = false)
const override final;
202 TLorentzVector& Momentum,
209 bool ifCovV0 = false)
const override final;
212 const TLorentzVector& Momentum,
214 const long int& Charge,
246 bool = false)
const override final;
292 const long int Charge,
299 const long int Charge,
306 const long int Charge,
312 const long int Charge,
326 Gaudi::Property<double>
m_IDsizeR{
this,
"IDsizeR", 1150.0};
327 Gaudi::Property<double>
m_IDsizeZ{
this,
"IDsizeZ", 3000.0};
328 Gaudi::Property<double>
m_MSsizeR{
this,
"MSsizeR", 8000.0};
329 Gaudi::Property<double>
m_MSsizeZ{
this,
"MSsizeZ", 10000.0};
332 Gaudi::Property<std::vector<double>>
m_c_MassInputParticles{
this,
"InputParticleMasses", {},
"List of masses of input particles (pions assumed if absent)"};
334 ToolHandle<IExtrapolator>
m_extPropagator{
this,
"Extrapolator",
"",
"External propagator"};
338 "AtlasFieldCacheCondObj",
340 "Name of the Magnetic Field key" };
341 Gaudi::Property<bool>
m_firstMeasuredPoint{
this,
"FirstMeasuredPoint",
false,
"Use FirstMeasuredPoint strategy in fits"};
344 "Use radius of FirstMeasuredRadiusLimit as maximal vertex radius"};
345 Gaudi::Property<bool>
m_makeExtendedVertex{
this,
"MakeExtendedVertex",
false,
"Return VxCandidate with full covariance matrix"};
346 Gaudi::Property<bool>
m_useFixedField{
this,
"useFixedField",
false,
"Use fixed magnetic field instead of exact Atlas one"};
350 Gaudi::Property<bool>
m_useAprioriVertex{
this,
"useAprioriVertexCnst",
false,
"Use a priori vertex constraint"};
351 Gaudi::Property<bool>
m_useThetaCnst{
this,
"useThetaCnst",
false,
"Use angle dTheta=0 constraint"};
352 Gaudi::Property<bool>
m_usePhiCnst{
this,
"usePhiCnst",
false,
"Use angle dPhi=0 constraint"};
353 Gaudi::Property<bool>
m_usePointingCnst{
this,
"usePointingCnst",
false,
"Use pointing to other vertex constraint"};
354 Gaudi::Property<bool>
m_useZPointingCnst{
this,
"useZPointingCnst",
false,
"Use ZPointing to other vertex constraint"};
355 Gaudi::Property<bool>
m_usePassNear{
this,
"usePassNearCnst",
false,
"Use combined particle pass near other vertex constraint"};
356 Gaudi::Property<bool>
m_usePassWithTrkErr{
this,
"usePassWithTrkErrCnst",
false,
"Use pass near with combined particle errors constraint"};
463 static void makeSimpleCascade(std::vector< std::vector<int> > &, std::vector< std::vector<int> > &,
464 CascadeState& cstate) ;
465 static void printSimpleCascade(std::vector< std::vector<int> > &, std::vector< std::vector<int> > &,
466 const CascadeState& cstate) ;
467 static int findPositions(
const std::vector<int> &,
const std::vector<int> &, std::vector<int> &) ;
492 void initState (
const EventContext& ctx, State& state)
const;
519 const std::vector<dvect>&,
523 StatusCode
CvtPerigee(
const std::vector<const Perigee*>& list,
528 std::span<const xAOD::TrackParticle* const> list,
533 const std::vector<const xAOD::NeutralParticle*>& list,
538 const std::vector<const TrackParameters*>& InpTrk,
543 const std::vector<const NeutralParameters*>& InpTrk,
559 TLorentzVector& Momentum,
563 std::vector<std::vector<double>>& TrkAtVrt,
571 const std::vector<double>& VKPerigee,
572 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.
virtual std::unique_ptr< IVKalState > makeState(const EventContext &ctx) const =0
virtual std::unique_ptr< xAOD::Vertex > fit(const EventContext &ctx, const std::vector< const xAOD::TrackParticle * > &vectorTrk, const Amg::Vector3D &startingPoint) const
Interface for xAOD::TrackParticle with starting point Event Context aware interface.
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)
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
virtual xAOD::Vertex * fit(const std::vector< const TrackParameters * > &perigeeList, const Amg::Vector3D &startingPoint) const override final
Interface for MeasuredPerigee with starting point.
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
xAOD::Vertex * makeXAODVertex(int, const Amg::Vector3D &, const dvect &, const dvect &, const std::vector< dvect > &, double, State &state) const
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
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.
Vertex_v1 Vertex
Define the latest version of the vertex class.
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