ATLAS Offline Software
Loading...
Searching...
No Matches
NewVrtSecInclusiveTool.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
5//
6// NewVrtSecInclusiveTool.h - Description
7//
8/*
9 Tool for inclusive secondary vertex reconstruction
10 It returns a pointer to Trk::VxSecVertexInfo object which contains
11 vector of pointers to xAOD::Vertex's of found secondary verteces.
12 In case of failure pointer to Trk::VxSecVertexInfo is 0.
13
14
15 Tool creates a derivative object VxSecVKalVertexInfo which contains also additional variables
16 see Tracking/TrkEvent/VxSecVertex/VxSecVertex/VxSecVKalVertexInfo.h
17
18
19 Author: Vadim Kostyukhin
20 e-mail: vadim.kostyukhin@cern.ch
21
22-----------------------------------------------------------------------------*/
23
24
25
26#ifndef _VKalVrt_NewVrtSecInclusiveTool_H
27#define _VKalVrt_NewVrtSecInclusiveTool_H
28// Normal STL and physical vectors
29#include <vector>
30// Gaudi includes
32#include "GaudiKernel/ToolHandle.h"
33#include "GaudiKernel/ServiceHandle.h"
34//Remove in boost > 1.76 when the boost iterator issue
35//is solved see ATLASRECTS-6358
36#define BOOST_ALLOW_DEPRECATED_HEADERS
37#include "boost/graph/adjacency_list.hpp"
38//
48
49#include "Math/LorentzVector.h"
50
51class TH1D;
52class TH2D;
53class TH1F;
54class TProfile;
55class TTree;
56class ITHistSvc;
57
58namespace Trk{
59 class TrkVKalVrtFitter;
60 class IVertexFitter;
61 class IVKalState;
62}
63
64namespace MVAUtils { class BDT; }
65
66
67//------------------------------------------------------------------------
68namespace Rec {
69
70 struct workVectorArrxAOD{
71 std::vector<const xAOD::TrackParticle*> listSelTracks; // Selected tracks after quality cuts
72 std::vector<const xAOD::TrackParticle*> tmpListTracks;
73 std::vector<const xAOD::TrackParticle*> inpTrk; // All tracks provided to tool
74 double beamX=0.;
75 double beamY=0.;
76 double beamZ=0.;
77 double tanBeamTiltX=0.;
78 double tanBeamTiltY=0.;
79 };
80
81 class NewVrtSecInclusiveTool : public AthAlgTool, virtual public IVrtInclusive
82 {
83
84
85 public:
86 /* Constructor */
87 NewVrtSecInclusiveTool(const std::string& type, const std::string& name, const IInterface* parent);
88 /* Destructor */
90
91
92 virtual StatusCode initialize() override;
93 virtual StatusCode finalize() override;
94
95
96
97 virtual std::unique_ptr<Trk::VxSecVertexInfo> findAllVertices(const EventContext& ctx,
98 const std::vector<const xAOD::TrackParticle*> & inputTracks,
99 const xAOD::Vertex & primaryVertex) const override final;
100//------------------------------------------------------------------------------------------------------------------
101// Private data and functions
102//
103
104 private:
105 void lockDecorations (const std::vector<const xAOD::TrackParticle*> & inpTrk) const;
106
107 double m_w_1{};
108 struct DevTuple;
109 struct Hists {
110 StatusCode book (ITHistSvc& histSvc, const std::string& histDir);
111 TTree* m_tuple{};
116 TH1D* m_hb_massEE{};
117 TH1D* m_hb_nvrt2{};
118 TH1D* m_hb_ratio{};
120 TH1D* m_hb_impact{};
123 TH1D* m_hb_trkD0{};
124 TH1D* m_hb_trkZ{};
129 TH1D* m_hb_r2d{};
131 TH1D* m_hb_impV0{};
135 TH1D* m_hb_distVV{};
136 TH1D* m_hb_diffPS{};
142 TH1F* m_hb_etaSV{};
144 };
145 std::unique_ptr<Hists> m_h;
146 Gaudi::Property<bool> m_fillHist{this, "FillHist", false, "Fill debugging and development histograms+ntuple" };
147 //
148 //-- Baseline track selection control
149 Gaudi::Property<int> m_cutSctHits{this, "CutSctHits", 4, "Remove track if it has less SCT hits" };
150 Gaudi::Property<int> m_cutPixelHits{this, "CutPixelHits", 2, "Remove track if it has less Pixel hits"};
151 Gaudi::Property<int> m_cutTRTHits{this, "CutTRTHits", 10, "Remove track if it has less TRT hits"};
152 Gaudi::Property<int> m_cutSiHits{this, "CutSiHits", 8, "Remove track if it has less Pixel+SCT hits" };
153 Gaudi::Property<int> m_cutBLayHits{this, "CutBLayHits", 0, "Remove track if it has less B-layer hits" };
154 Gaudi::Property<int> m_cutSharedHits{this,"CutSharedHits",1, "Reject final 2tr vertices if tracks have shared hits" };
155 Gaudi::Property<float> m_cutPt{this, "CutPt", 500., "Track Pt selection cut" };
156 Gaudi::Property<float> m_cutD0Min{this, "CutD0Min", 0., "Track minimal D0 selection cut" };
157 Gaudi::Property<float> m_cutD0Max{this, "CutD0Max", 10., "Track maximal D0 selection cut" };
158 Gaudi::Property<float> m_maxZVrt{this, "MaxZVrt", 15., "Track Z impact selection max"};
159 Gaudi::Property<float> m_minZVrt{this, "MinZVrt", 0., "Track Z impact selection min"};
160 Gaudi::Property<float> m_cutChi2{this, "CutChi2", 5., "Track Chi2 selection cut" };
161 Gaudi::Property<float> m_antiPileupSigRCut{this, "AntiPileupSigRCut", 2.0, "Upper cut on significance of 2D distance between beam and perigee" };
162 //
163 //---- Additional track selection at 2-track vertexing stage
164 Gaudi::Property<float> m_trkSigCut{this, "TrkSigCut", 2.0, "Track 3D impact significance w/r primary vertex. Should be >=AntiPileupSigRCut" };
165 Gaudi::Property<float> m_dRdZRatioCut{this, "dRdZRatioCut", 0.25, "Cut on dR/dZ ratio to remove pileup tracks" };
166 //
167 //---- Very general 2-track vertex selection cuts. Main selection is done in the TwoTrackVertexSelector tool.
168 Gaudi::Property<float> m_fastZSVCut{this, "FastZSVCut", 10., "Cut to remove SV candidates based on fast SV estimation. To save full fit CPU." };
169 //
170 //---- Experimental material interaction removal
171 Gaudi::Property<float> m_removeTrkMatSignif{this, "removeTrkMatSignif", 0., "Significance of Vertex-TrackingMaterial distance for removal. No removal if <=0." };
172 Gaudi::Property<float> m_beampipeR{this, "BeampipeR", 24.3, "Radius of the beampipe material for aggressive material rejection" };
173 //
174 //---- Final inclusive vertex reconstruction control
175 Gaudi::Property<float> m_vrtMassLimit{this, "VrtMassLimit", 5500., "Maximal allowed mass for found vertices" };
176 Gaudi::Property<float> m_globVrtProbCut{this, "GlobVrtProbCut", 0.005, "Cut on probability of any vertex for final selection" };
177 Gaudi::Property<float> m_maxSVRadiusCut{this, "MaxSVRadiusCut", 140., "Cut on maximal radius of SV (def = Pixel detector size)" };
178 Gaudi::Property<float> m_selVrtSigCut{this, "SelVrtSigCut", 3.0, "Cut on significance of 3D distance between vertex and PV" };
179 Gaudi::Property<float> m_vertexMergeCut{this, "VertexMergeCut", 4., "To allow vertex merging for MultiVertex Finder" };
180 Gaudi::Property<bool> m_multiWithOneTrkVrt{this, "MultiWithOneTrkVrt", true, "Allow one-track-vertex addition to already found secondary vertices"};
181
182
183 SG::ReadCondHandleKey<InDet::BeamSpotData> m_beamSpotKey { this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot" };
184
185 ToolHandle<Trk::IExtrapolator> m_extrapolator{this,"ExtrapolatorName","Trk::Extrapolator/Extrapolator", "Name of the extrapolator tool"};
186 ToolHandle<Trk::TrkVKalVrtFitter> m_fitSvc{this, "VertexFitterTool", "Trk::TrkVKalVrtFitter/VertexFitterTool", "Name of the Vertex Fitter tool"};
187 ToolHandle<Reco::ITrackToVertex> m_trackToVertexTool{this, "TrackToVertexTool", "Reco::TrackToVertex/TrackToVertex", "Name of the TrackToVertex tool"};
188
189 ToolHandle<Rec::ITwoTrackVertexSelector> m_ini_v2trselector{this, "TwoTrkVtxSelectorIni", "Rec::TwoTrackVrtBDTSelector/V2TrBDTSelectorIni",
190 "Name of the initial 2-track vertex selector"};
191 ToolHandle<Rec::ITwoTrackVertexSelector> m_fin_v2trselector{this, "TwoTrkVtxSelectorFinal", "Rec::TwoTrackVrtBDTSelector/V2TrBDTSelectorFin",
192 "Name of the final 2-track vertex selector"};
193
194 Gaudi::Property<std::string> m_augString {this, "AugmentingVersionString", "_NVSI", "Augmentation version string"};
195
196 double m_massPi {};
197 double m_massP {};
198 double m_massE{};
199 double m_massK0{};
200 double m_massLam{};
201 std::string m_instanceName;
202
203 SG::AuxElement::Decorator<char> m_is_selected;
204 SG::AuxElement::Decorator<char> m_is_svtrk_final;
205 SG::AuxElement::Decorator<float> m_pt_wrtSV;
206 SG::AuxElement::Decorator<float> m_eta_wrtSV;
207 SG::AuxElement::Decorator<float> m_phi_wrtSV;
208 SG::AuxElement::Decorator<float> m_d0_wrtSV;
209 SG::AuxElement::Decorator<float> m_z0_wrtSV;
210 SG::AuxElement::Decorator<float> m_errP_wrtSV;
211 SG::AuxElement::Decorator<float> m_errd0_wrtSV;
212 SG::AuxElement::Decorator<float> m_errz0_wrtSV;
213 SG::AuxElement::Decorator<float> m_chi2_toSV;
214
215//=======================================================================================
216// Functions and structure below are for algorithm development, debugging and calibration
217// NOT USED IN PRODUCTION!
218
219 static const xAOD::TruthParticle * getPreviousParent(const xAOD::TruthParticle * child);
220 static bool isExcitedHadron(const xAOD::TruthParticle * tp);
221 static bool isDisplaced(const xAOD::TrackParticle * tp);
222 int getIdHF(const xAOD::TrackParticle* TP ) const;
223 static int getG4Inter( const xAOD::TrackParticle* TP );
224 static int getMCPileup(const xAOD::TrackParticle* TP );
225 static int getProdVrtBarcode(const xAOD::TrackParticle* TP , float resolLimit=0.1); //Vertex-Vertex resolution limit =100mkm // FIXME barcode-based
226 static bool checkTrue2TrVrt(const xAOD::TrackParticle * TP1, const xAOD::TrackParticle * TP2, float nearCut=0.1); // Check true prod. vrt. closeness, def=100mkm
227
228 struct DevTuple
229 {
230 static constexpr int maxNTrk=100;
231 static constexpr int maxNVrt=100;
232 int nTrk;
236 float Sig3D[maxNTrk]; // Track-PV 3D significance
237 float dRdZrat[maxNTrk]; // Track dR_signicance/dZ_significance
238 int idHF[maxNTrk]; // Track from ground state B/C hadron
239 int trkTRT[maxNTrk]; // TRT hits on track
240 int displaced[maxNTrk]; // Track from displaced truth vertex
241 //---
242 int n2Vrt;
243 int VrtTrkHF[maxNVrt]; // Number of HF track in this vertex
244 int VrtTrkI[maxNVrt]; // Number of interaction tracks in this vertex
245 int VrtCh[maxNVrt]; // Vertex charge
246 int VrtIBL[maxNVrt]; // 2-track IBL hits sum
247 int VrtBL[maxNVrt]; // 2-track BL hits sum
249 int VrtTrueBar[maxNVrt]; // Truth vertex barcode based identification
250 int VrtTrueNear[maxNVrt]; // Truth vertex closeness based identification
254 float VrtM[maxNVrt];
255 float VrtZ[maxNVrt];
258 float VrtBDT[maxNVrt]; // Vertex selection BDT value (B/C vs others)
259 float VrtProb[maxNVrt]; // 2-track vertex probability
260 float VrtHR1[maxNVrt]; // First measured point on track 1
261 float VrtHR2[maxNVrt]; // First measured point on track 2
264 float VMinPtT[maxNVrt]; // min(trk1_pt,trk2_pt) in 2-track vertex
265 float VMinS3DT[maxNVrt]; // min(trk1_signif,trk2_signif) in 2-track vertex
266 float VMaxS3DT[maxNVrt]; // min(trk1_signif,trk2_signif) in 2-track vertex
268 int VrtIT[maxNVrt]; // Reference to track 1 in the track list
269 int VrtJT[maxNVrt]; // Reference to track 2 in the track list
270 //---
271 int nNVrt;
292 };
293//
294// End of development stuff
295//============================================================
296
297
298 struct Vrt2Tr
299 {
301 TLorentzVector momentum;
302 long int vertexCharge;
303 std::vector<double> errorMatrix;
304 std::vector<double> chi2PerTrk;
305 std::vector< std::vector<double> > trkAtVrt;
306 double chi2=0.;
307 };
308
309
310// For multivertex version only
311
312 using compatibilityGraph_t = boost::adjacency_list<boost::listS, boost::vecS, boost::undirectedS>;
313 float m_chiScale[11]{};
314 struct WrkVrt
315 { bool Good=true;
316 std::deque<long int> selTrk;
318 TLorentzVector vertexMom;
319 long int vertexCharge{};
320 std::vector<double> vertexCov;
321 std::vector<double> chi2PerTrk;
322 std::vector< std::vector<double> > trkAtVrt;
323 double chi2{};
324 double projectedVrt=0.;
326 double BDT=1.1;
327 };
328
329
330// Private technical functions
331//
332//
333 std::vector<xAOD::Vertex*> getVrtSecMulti( const EventContext& ctx,
334 workVectorArrxAOD * inpParticlesxAOD, const xAOD::Vertex & primVrt,
335 compatibilityGraph_t& compatibilityGraph ) const;
336
337
338 void printWrkSet(const std::vector<WrkVrt> * WrkSet, const std::string &name ) const;
339
340//
341// Gives correct mass assignment in case of nonequal masses
342 static double massV0(const std::vector< std::vector<double> >& TrkAtVrt, double massP, double massPi ) ;
343
344
345 ROOT::Math::PxPyPzEVector momAtVrt(const std::vector<double>& inpTrk) const;
346
347 static double vrtRadiusError(const Amg::Vector3D & secVrt, const std::vector<double> & vrtErr) ;
348
349 static int nTrkCommon( std::vector<WrkVrt> *WrkVrtSet, int indexV1, int indexV2) ;
350 double minVrtVrtDist( std::vector<WrkVrt> *WrkVrtSet, int & indexV1, int & indexV2, std::vector<double> & check) const;
351 static bool isPart( const std::deque<long int>& test, std::deque<long int> base) ;
352 static std::vector<double> estimVrtPos( int nTrk, std::deque<long int> &selTrk, std::map<long int,std::vector<double>> & vrt) ;
353
354 static double vrtVrtDist(const xAOD::Vertex & primVrt, const Amg::Vector3D & secVrt,
355 const std::vector<double>& vrtErr,double& signif ) ;
356 static double vrtVrtDist2D(const xAOD::Vertex & primVrt, const Amg::Vector3D & secVrt,
357 const std::vector<double>& vrtErr,double& signif ) ;
358 static double vrtVrtDist(const Amg::Vector3D & vrt1, const std::vector<double>& vrtErr1,
359 const Amg::Vector3D & vrt2, const std::vector<double>& vrtErr2) ;
360 static double PntPntDist(const Amg::Vector3D & Vrt1, const Amg::Vector3D & Vrt2) ;
361
362
363 static double projSV_PV(const Amg::Vector3D & SV, const xAOD::Vertex & PV, const TLorentzVector & Direction) ;
364 static double MomProjDist(const Amg::Vector3D & SV, const xAOD::Vertex & PV, const TLorentzVector & Direction) ;
365
366 double distToMatLayerSignificance(Vrt2Tr & Vrt) const;
367
368 double refitVertex( WrkVrt &Vrt,std::vector<const xAOD::TrackParticle*> & SelectedTracks,
369 Trk::IVKalState& istate,
370 bool ifCovV0) const;
371
372 static int mostHeavyTrk(WrkVrt V, std::vector<const xAOD::TrackParticle*> AllTracks) ;
373 double refineVerticesWithCommonTracks( WrkVrt &v1, WrkVrt &v2, std::vector<const xAOD::TrackParticle*> & allTrackList,
374 Trk::IVKalState& istate) const;
375 double mergeAndRefitVertices( WrkVrt & v1, WrkVrt & v2, WrkVrt & newvrt,
376 std::vector<const xAOD::TrackParticle*> & AllTrackList,
377 Trk::IVKalState& istate, int robKey =0) const;
378
379 double improveVertexChi2( WrkVrt &vertex, std::vector<const xAOD::TrackParticle*> & allTracks,
380 Trk::IVKalState& istate,
381 bool ifCovV0) const;
382
384 const xAOD::Vertex & primVrt) const;
385
386
387
388 void select2TrVrt(const EventContext& ctx,
389 std::vector<const xAOD::TrackParticle*> & SelectedTracks, const xAOD::Vertex & primVrt,
390 std::map<long int,std::vector<double>> & vrt,
391 compatibilityGraph_t& compatibilityGraph) const;
392
393
394 static void getPixelDiscs (const xAOD::TrackParticle* Part, int &d0Hit, int &d1Hit, int &d2Hit) ;
395 static int getIBLHit(const xAOD::TrackParticle* Part) ;
396 static int getBLHit(const xAOD::TrackParticle* Part) ;
397
398 Hists& getHists() const;
399 };
400
401
403 {
404 clique_visitor(std::vector< std::vector<int> > & input): m_allCliques(input){ input.clear();}
405
406 template <typename Clique, typename Graph>
407 void clique(const Clique& clq, Graph& )
408 {
409 std::vector<int> new_clique(0);
410 for(auto i = clq.begin(); i != clq.end(); ++i) new_clique.push_back(*i);
411 m_allCliques.push_back(new_clique);
412 }
413
414 std::vector< std::vector<int> > & m_allCliques;
415
416 };
417
418} //end namespace
419
420#endif
Property holding a SG store/key/clid/attr name from which a WriteDecorHandle is made.
AthAlgTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor with parameters:
Simplified Boosted Regression Tree, support TMVA, lgbm, and xgboost.
ToolHandle< Trk::IExtrapolator > m_extrapolator
double improveVertexChi2(WrkVrt &vertex, std::vector< const xAOD::TrackParticle * > &allTracks, Trk::IVKalState &istate, bool ifCovV0) const
virtual std::unique_ptr< Trk::VxSecVertexInfo > findAllVertices(const EventContext &ctx, const std::vector< const xAOD::TrackParticle * > &inputTracks, const xAOD::Vertex &primaryVertex) const override final
Gaudi::Property< float > m_minZVrt
void selGoodTrkParticle(workVectorArrxAOD *xAODwrk, const xAOD::Vertex &primVrt) const
double mergeAndRefitVertices(WrkVrt &v1, WrkVrt &v2, WrkVrt &newvrt, std::vector< const xAOD::TrackParticle * > &AllTrackList, Trk::IVKalState &istate, int robKey=0) const
ToolHandle< Rec::ITwoTrackVertexSelector > m_ini_v2trselector
Gaudi::Property< float > m_vrtMassLimit
double refitVertex(WrkVrt &Vrt, std::vector< const xAOD::TrackParticle * > &SelectedTracks, Trk::IVKalState &istate, bool ifCovV0) const
virtual StatusCode initialize() override
SG::AuxElement::Decorator< float > m_eta_wrtSV
SG::AuxElement::Decorator< float > m_chi2_toSV
static double vrtVrtDist2D(const xAOD::Vertex &primVrt, const Amg::Vector3D &secVrt, const std::vector< double > &vrtErr, double &signif)
Gaudi::Property< int > m_cutPixelHits
Gaudi::Property< float > m_antiPileupSigRCut
Gaudi::Property< std::string > m_augString
SG::AuxElement::Decorator< float > m_errP_wrtSV
Gaudi::Property< float > m_maxZVrt
SG::AuxElement::Decorator< float > m_z0_wrtSV
double refineVerticesWithCommonTracks(WrkVrt &v1, WrkVrt &v2, std::vector< const xAOD::TrackParticle * > &allTrackList, Trk::IVKalState &istate) const
static int getProdVrtBarcode(const xAOD::TrackParticle *TP, float resolLimit=0.1)
static double PntPntDist(const Amg::Vector3D &Vrt1, const Amg::Vector3D &Vrt2)
SG::AuxElement::Decorator< float > m_pt_wrtSV
static double projSV_PV(const Amg::Vector3D &SV, const xAOD::Vertex &PV, const TLorentzVector &Direction)
boost::adjacency_list< boost::listS, boost::vecS, boost::undirectedS > compatibilityGraph_t
Gaudi::Property< float > m_cutPt
Gaudi::Property< float > m_vertexMergeCut
Gaudi::Property< float > m_cutD0Min
Gaudi::Property< float > m_globVrtProbCut
SG::AuxElement::Decorator< float > m_errd0_wrtSV
void select2TrVrt(const EventContext &ctx, std::vector< const xAOD::TrackParticle * > &SelectedTracks, const xAOD::Vertex &primVrt, std::map< long int, std::vector< double > > &vrt, compatibilityGraph_t &compatibilityGraph) const
static int nTrkCommon(std::vector< WrkVrt > *WrkVrtSet, int indexV1, int indexV2)
virtual StatusCode finalize() override
ToolHandle< Rec::ITwoTrackVertexSelector > m_fin_v2trselector
static bool isPart(const std::deque< long int > &test, std::deque< long int > base)
ToolHandle< Trk::TrkVKalVrtFitter > m_fitSvc
static void getPixelDiscs(const xAOD::TrackParticle *Part, int &d0Hit, int &d1Hit, int &d2Hit)
SG::AuxElement::Decorator< float > m_errz0_wrtSV
Gaudi::Property< int > m_cutBLayHits
Gaudi::Property< float > m_cutD0Max
static double massV0(const std::vector< std::vector< double > > &TrkAtVrt, double massP, double massPi)
Gaudi::Property< float > m_trkSigCut
Gaudi::Property< float > m_maxSVRadiusCut
ROOT::Math::PxPyPzEVector momAtVrt(const std::vector< double > &inpTrk) const
static double MomProjDist(const Amg::Vector3D &SV, const xAOD::Vertex &PV, const TLorentzVector &Direction)
SG::AuxElement::Decorator< float > m_d0_wrtSV
void lockDecorations(const std::vector< const xAOD::TrackParticle * > &inpTrk) const
Gaudi::Property< float > m_removeTrkMatSignif
void printWrkSet(const std::vector< WrkVrt > *WrkSet, const std::string &name) const
Gaudi::Property< float > m_fastZSVCut
static int mostHeavyTrk(WrkVrt V, std::vector< const xAOD::TrackParticle * > AllTracks)
Gaudi::Property< float > m_dRdZRatioCut
static double vrtVrtDist(const xAOD::Vertex &primVrt, const Amg::Vector3D &secVrt, const std::vector< double > &vrtErr, double &signif)
double minVrtVrtDist(std::vector< WrkVrt > *WrkVrtSet, int &indexV1, int &indexV2, std::vector< double > &check) const
static const xAOD::TruthParticle * getPreviousParent(const xAOD::TruthParticle *child)
Gaudi::Property< float > m_selVrtSigCut
SG::AuxElement::Decorator< char > m_is_selected
Gaudi::Property< int > m_cutSharedHits
Gaudi::Property< bool > m_fillHist
Gaudi::Property< float > m_cutChi2
static std::vector< double > estimVrtPos(int nTrk, std::deque< long int > &selTrk, std::map< long int, std::vector< double > > &vrt)
static double vrtRadiusError(const Amg::Vector3D &secVrt, const std::vector< double > &vrtErr)
NewVrtSecInclusiveTool(const std::string &type, const std::string &name, const IInterface *parent)
Gaudi::Property< bool > m_multiWithOneTrkVrt
SG::AuxElement::Decorator< char > m_is_svtrk_final
ToolHandle< Reco::ITrackToVertex > m_trackToVertexTool
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
Gaudi::Property< int > m_cutSctHits
SG::AuxElement::Decorator< float > m_phi_wrtSV
Gaudi::Property< int > m_cutTRTHits
std::vector< xAOD::Vertex * > getVrtSecMulti(const EventContext &ctx, workVectorArrxAOD *inpParticlesxAOD, const xAOD::Vertex &primVrt, compatibilityGraph_t &compatibilityGraph) const
static bool checkTrue2TrVrt(const xAOD::TrackParticle *TP1, const xAOD::TrackParticle *TP2, float nearCut=0.1)
Gaudi::Property< float > m_beampipeR
std::string base
Definition hcg.cxx:83
Eigen::Matrix< double, 3, 1 > Vector3D
Gaudi Tools.
Ensure that the ATLAS eigen extensions are properly loaded.
TrackParticle_v1 TrackParticle
Reference the current persistent version:
Vertex_v1 Vertex
Define the latest version of the vertex class.
TruthParticle_v1 TruthParticle
Typedef to implementation.
StatusCode book(ITHistSvc &histSvc, const std::string &histDir)
std::vector< std::vector< double > > trkAtVrt
std::vector< std::vector< double > > trkAtVrt
std::vector< std::vector< int > > & m_allCliques
void clique(const Clique &clq, Graph &)
clique_visitor(std::vector< std::vector< int > > &input)
std::vector< const xAOD::TrackParticle * > listSelTracks
std::vector< const xAOD::TrackParticle * > inpTrk
std::vector< const xAOD::TrackParticle * > tmpListTracks