ATLAS Offline Software
Loading...
Searching...
No Matches
InDetIterativeSecVtxFinderTool.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3*/
18
19//implemented using as template the InDetPriVxFinderTool class of A. Wildauer and F. Akesson
20
21#ifndef INDETPRIVXFINDERTOOL_INDETITERATIVESECVXFINDERTOOL_H
22#define INDETPRIVXFINDERTOOL_INDETITERATIVESECVXFINDERTOOL_H
23
32#include "GaudiKernel/ToolHandle.h"
33#include "GaudiKernel/ServiceHandle.h"
34#include "TrkTrack/TrackCollection.h" // type def ...
35#include "TrkParticleBase/TrackParticleBaseCollection.h" // type def ...
37// we may save out some private stuff
42#include <vector>
43
44
45class TTree;
46
47namespace Trk
48{
49
50 class Track;
52 class ITrackLink;
56}
57//
58//
59namespace InDet
60{
62
63// InnerDetector/InDetValidation/InDetVertexSplitter/InDetVertexSplitterHist
64// InnerDetector/InDetDigitization/FastSiDigitization/SiSmearedDigitizationTool
65// Tracking/TrkVertexFitter/TrkVertexSeedFinderUtils/share/ImagingSeedTuningAlg_jobOptions.py
66 class ATLAS_NOT_THREAD_SAFE InDetIterativeSecVtxFinderTool : public extends<AthAlgTool, ISecVertexFinder>
67 {
68
69public:
70
74 using extends::extends;
75 InDetIterativeSecVtxFinderTool(const std::string& t, const std::string& n, const IInterface* p);
76
80
82
83 StatusCode initialize() override;
84 StatusCode finalize() override;
85
86 std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*>
87 findVertex(const TrackCollection* trackTES) override;
88 std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*>
89 findVertex(const Trk::TrackParticleBaseCollection* trackTES) override;
90
96
97 std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*>
98 findVertex(const xAOD::TrackParticleContainer* trackParticles) override;
99 std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*>
100 findVertex( const std::vector<const xAOD::IParticle*> & inputTracks) override;
101
102 void setPriVtxPosition( double , double , double ) override;
103
104 int getModes1d( std::vector<int> *, std::vector<int> *, std::vector<int> * ) const ;
105
106 private:
107
108
109 std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*>
110 findVertex( const std::vector<Trk::ITrackLink*> & trackVector) ;
111
112 bool passHitsFilter( const Trk::TrackParameters* , float vtxR, float absvz ) const;
113
114 bool V0kine( const std::vector<Amg::Vector3D>&, const Amg::Vector3D &position , float & , float & ) const;
115
116
117 const std::vector<Amg::Vector3D> getVertexMomenta( xAOD::Vertex * myxAODVertex ) const ;
118// double MomentumDirection( int, const Amg::Vector3D & ) const ;
119
120
121 static double VrtVrtDist( xAOD::Vertex * v1, xAOD::Vertex * v2 ) ;
122
123 float removeTracksInBadSeed( xAOD::Vertex * myxAODVertex, std::vector<const Trk::TrackParameters*> & ) const ;
124
125 void FillXcheckdefauls() ;
126
127
129 mutable std::vector< Amg::Vector3D > m_TrkAtVtxMomenta ;
130
131// watch below for possible update from InDetIterativePriVxFinderTool
132
133 void removeCompatibleTracks(xAOD::Vertex * myxAODVertex,
134 std::vector<const Trk::TrackParameters*> & perigeesToFit,
135 std::vector<Trk::ITrackLink*> & seedTracks) const;
136
137 void removeAllFrom(std::vector<const Trk::TrackParameters*> & perigeesToFit,
138 std::vector<Trk::ITrackLink*> & seedTracks) const;
139
140// double compatibility(const Trk::TrackParameters& measPerigee,
141// const xAOD::Vertex & vertex ) const;
142 double compatibility(const Trk::TrackParameters& measPerigee,
143 const AmgSymMatrix(3) &covariancePosition , const Amg::Vector3D &position ) const ;
144 void countTracksAndNdf(xAOD::Vertex * myxAODVertex,
145 float & ndf, int & ntracks) const;
146
147
148
149 ToolHandle< Trk::AdaptiveVertexFitter > m_iVertexFitter{this, "VertexFitterTool", "Trk::AdaptiveVertexFitter","Vertex Fitter"};
150 ToolHandle< InDet::IInDetTrackSelectionTool > m_trkFilter{this, "BaseTrackSelector", "InDet::InDetTrackSelection", "base track selector"};
151 ToolHandle< InDet::IInDetTrackSelectionTool > m_SVtrkFilter{this, "SecVtxTrackSelector", "InDet::InDetSecVtxTrackSelection", "SV track selector"};
152 ToolHandle< Trk::IVertexSeedFinder > m_SeedFinder{this, "SeedFinder", "Trk::IndexedCrossDistancesSeedFinder", "seed finder"};
153 ToolHandle< Trk::IImpactPoint3dEstimator > m_ImpactPoint3dEstimator{this, "ImpactPoint3dEstimator", "Trk::ImpactPoint3dEstimator", "impact point estimator"};
154 ToolHandle< Trk::IVertexLinearizedTrackFactory > m_LinearizedTrackFactory{this, "LinearizedTrackFactory", "Trk::FullLinearizedTrackFactory", "linearized track factory"};
155
156
157 Gaudi::Property<int> m_filterLevel{this,"VertexFilterLevel",0,""} ;
158 Gaudi::Property<double> m_significanceCutSeeding{this, "significanceCutSeeding", 9., ""};
159 Gaudi::Property<double> m_maximumChi2cutForSeeding{this, "maxCompatibilityCutSeeding",18., ""};
160 Gaudi::Property<double> m_minWghtAtVtx{this, "minTrackWeightAtVtx",0.02, ""};
161 Gaudi::Property<double> m_maxVertices{this, "maxVertices",20, ""};
162 Gaudi::Property<double> m_CutHitsFilter{this, "TrackInnerOuterFraction",0.95, ""};
163 Gaudi::Property<float> m_privtxRef{this, "MomentumProjectionOnDirection",-999.9,""};
164 Gaudi::Property<float> m_minVtxDist{this, "SeedsMinimumDistance",0.1,""};
165 Gaudi::Property<bool> m_createSplitVertices{this, "createSplitVertices", false, ""};
166 Gaudi::Property<int> m_splitVerticesTrkInvFraction{this, "splitVerticesTrkInvFraction",2,""};
167
168 Gaudi::Property<bool> m_reassignTracksAfterFirstFit{this, "reassignTracksAfterFirstFit", true, ""};
169
170 Gaudi::Property<bool> m_doMaxTracksCut{this, "doMaxTracksCut", false, ""};
171 Gaudi::Property<unsigned int> m_maxTracks{this, "MaxTracks", 5000,""};
172
173 void SGError(const std::string& errService);
174
175 virtual void printParameterSettings();
176
177 TTree* m_OTree{} ;
178
179 long int m_evtNum{} ;
181
182 std::vector<int> *m_leastmodes{} ;
183 std::vector< std::vector < float > > * m_sdFsmwX{};
184 std::vector< std::vector < float > > * m_sdFsmwY{};
185 std::vector< std::vector < float > > * m_sdFsmwZ{};
186 std::vector< std::vector < float > > * m_sdcrsWght{};
187
188 std::vector<int> * m_nperiseed{} ;
189 std::vector < float > *m_seedX{} ;
190 std::vector < float > *m_seedY{} ;
191 std::vector < float > *m_seedZ{} ;
192 std::vector < float > *m_seedXYdist{} ;
193 std::vector < float > *m_seedZdist{} ;
194 std::vector < int > *m_seedac{} ;
195
196 mutable float m_v0mass{}, m_v0ee{}, m_dir{}, m_ndf{}, m_hif{} ;
197 mutable int m_ntracks{} ;
198 mutable std::vector< Amg::VectorX > m_trkdefiPars ;
199
200 };//end of class definitions
201}//end of namespace definitions
202#endif
203
#define AmgSymMatrix(dim)
DataVector< Trk::Track > TrackCollection
This typedef represents a collection of Trk::Track objects.
Define macros for attributes used to control the static checker.
#define ATLAS_NOT_THREAD_SAFE
getNoisyStrip() Find noisy strips from hitmaps and write out into xml/db formats
Interface for track selection tool.
ToolHandle< InDet::IInDetTrackSelectionTool > m_SVtrkFilter
void countTracksAndNdf(xAOD::Vertex *myxAODVertex, float &ndf, int &ntracks) const
double compatibility(const Trk::TrackParameters &measPerigee, const AmgSymMatrix(3) &covariancePosition, const Amg::Vector3D &position) const
std::vector< std::vector< float > > * m_sdcrsWght
ToolHandle< Trk::IImpactPoint3dEstimator > m_ImpactPoint3dEstimator
std::pair< xAOD::VertexContainer *, xAOD::VertexAuxContainer * > findVertex(const TrackCollection *trackTES) override
ToolHandle< Trk::AdaptiveVertexFitter > m_iVertexFitter
bool V0kine(const std::vector< Amg::Vector3D > &, const Amg::Vector3D &position, float &, float &) const
ToolHandle< Trk::IVertexSeedFinder > m_SeedFinder
Gaudi::Property< int > m_splitVerticesTrkInvFraction
Integer: 1./fraction of tracks to be assigned to the tag split vertex.
std::vector< std::vector< float > > * m_sdFsmwY
int getModes1d(std::vector< int > *, std::vector< int > *, std::vector< int > *) const
void removeCompatibleTracks(xAOD::Vertex *myxAODVertex, std::vector< const Trk::TrackParameters * > &perigeesToFit, std::vector< Trk::ITrackLink * > &seedTracks) const
std::vector< std::vector< float > > * m_sdFsmwZ
void setPriVtxPosition(double, double, double) override
const std::vector< Amg::Vector3D > getVertexMomenta(xAOD::Vertex *myxAODVertex) const
static double VrtVrtDist(xAOD::Vertex *v1, xAOD::Vertex *v2)
InDetIterativeSecVtxFinderTool(const std::string &t, const std::string &n, const IInterface *p)
bool passHitsFilter(const Trk::TrackParameters *, float vtxR, float absvz) const
void removeAllFrom(std::vector< const Trk::TrackParameters * > &perigeesToFit, std::vector< Trk::ITrackLink * > &seedTracks) const
ToolHandle< InDet::IInDetTrackSelectionTool > m_trkFilter
virtual ~InDetIterativeSecVtxFinderTool()=default
Destructor.
ToolHandle< Trk::IVertexLinearizedTrackFactory > m_LinearizedTrackFactory
float removeTracksInBadSeed(xAOD::Vertex *myxAODVertex, std::vector< const Trk::TrackParameters * > &) const
std::vector< std::vector< float > > * m_sdFsmwX
An Abstract Base Class for the LinearizedTrackFactories.
An abstract base class for implementation of Linearization point finders.
Eigen::Matrix< double, 3, 1 > Vector3D
Primary Vertex Finder.
Ensure that the ATLAS eigen extensions are properly loaded.
DataVector< TrackParticleBase > TrackParticleBaseCollection
ParametersBase< TrackParametersDim, Charged > TrackParameters
Vertex_v1 Vertex
Define the latest version of the vertex class.
TrackParticleContainer_v1 TrackParticleContainer
Definition of the current "TrackParticle container version".
void initialize()