21 #ifndef INDETPRIVXFINDERTOOL_INDETITERATIVESECVXFINDERTOOL_H
22 #define INDETPRIVXFINDERTOOL_INDETITERATIVESECVXFINDERTOOL_H
32 #include "GaudiKernel/ToolHandle.h"
33 #include "GaudiKernel/ServiceHandle.h"
51 class TrackParticleBase;
53 class IVertexSeedFinder;
54 class IImpactPoint3dEstimator;
55 class IVertexLinearizedTrackFactory;
61 class IInDetTrackSelectionTool;
74 using extends::extends;
86 std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*>
88 std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*>
97 std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*>
99 std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*>
100 findVertex(
const std::vector<const xAOD::IParticle*> &
inputTracks)
override;
102 void setPriVtxPosition(
double ,
double ,
double )
override;
104 int getModes1d( std::vector<int> *, std::vector<int> *, std::vector<int> * )
const ;
109 std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*>
110 findVertex(
const std::vector<Trk::ITrackLink*> & trackVector) ;
114 bool V0kine(
const std::vector<Amg::Vector3D>&,
const Amg::Vector3D &position ,
float & ,
float & )
const;
117 const std::vector<Amg::Vector3D> getVertexMomenta(
xAOD::Vertex * myxAODVertex )
const ;
123 float removeTracksInBadSeed(
xAOD::Vertex * myxAODVertex, std::vector<const Trk::TrackParameters*> & )
const ;
125 void FillXcheckdefauls() ;
133 void removeCompatibleTracks(
xAOD::Vertex * myxAODVertex,
134 std::vector<const Trk::TrackParameters*> & perigeesToFit,
135 std::vector<Trk::ITrackLink*> & seedTracks)
const;
137 void removeAllFrom(std::vector<const Trk::TrackParameters*> & perigeesToFit,
138 std::vector<Trk::ITrackLink*> & seedTracks)
const;
145 float &
ndf,
int & ntracks)
const;
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"};
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,
""};
168 Gaudi::Property<bool> m_reassignTracksAfterFirstFit{
this,
"reassignTracksAfterFirstFit",
true,
""};
170 Gaudi::Property<bool> m_doMaxTracksCut{
this,
"doMaxTracksCut",
false,
""};
171 Gaudi::Property<unsigned int> m_maxTracks{
this,
"MaxTracks", 5000,
""};
173 void SGError(
const std::string& errService);
175 virtual void printParameterSettings();
179 long int m_evtNum{} ;
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{};
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{} ;
196 mutable float m_v0mass{}, m_v0ee{},
m_dir{}, m_ndf{}, m_hif{} ;
197 mutable int m_ntracks{} ;