ATLAS Offline Software
Loading...
Searching...
No Matches
InDetVKalVxInJetTool.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
8
37
38
39
40#ifndef _VKalVrt_InDetVKalVxInJetTool_H
41#define _VKalVrt_InDetVKalVxInJetTool_H
42#include <vector>
43// Gaudi includes
45#include "GaudiKernel/ToolHandle.h"
46#include "GaudiKernel/IChronoStatSvc.h"
48
49//Remove in boost > 1.76 when the boost iterator issue
50//is solved see ATLASRECTS-6358
51#define BOOST_ALLOW_DEPRECATED_HEADERS
52#include "boost/graph/adjacency_list.hpp"
53//
57//
58//
62
63class TH1D;
64class TH2D;
65class TH1F;
66class TProfile;
67class TTree;
68class IChronoStatSvc;
69class ITHistSvc;
70
71namespace Trk{
72 class TrkVKalVrtFitter;
73 class IVertexFitter;
74 class IVKalState;
75}
76
78
79namespace InDetDD {
81}
82
83typedef std::vector<double> dvect;
84
85
86//------------------------------------------------------------------------
87namespace InDet {
88
89
91 std::vector<const xAOD::TrackParticle*> listJetTracks;
92 std::vector<const xAOD::TrackParticle*> tmpListTracks;
93 std::vector<const xAOD::TrackParticle*> listSecondTracks;
94 std::vector<const xAOD::TrackParticle*> TracksForFit;
95 std::vector<const xAOD::TrackParticle*> InpTrk;
96 std::vector< std::vector<const xAOD::TrackParticle*> > FoundSecondTracks;
97 std::vector<const xAOD::TrackParticle*> TrkFromV0;
98 };
99
101 public AthAlgTool, virtual public ISecVertexInJetFinder{
102
103
104 public:
105 /* Constructor */
106 InDetVKalVxInJetTool(const std::string& type, const std::string& name, const IInterface* parent);
107 /* Destructor */
108 virtual ~InDetVKalVxInJetTool();
109
110
111 virtual StatusCode initialize() override;
112 virtual StatusCode finalize() override;
113
114 virtual Trk::VxSecVertexInfo* findSecVertex(const EventContext& ctx,
115 const xAOD::Vertex & primaryVertex,
116 const TLorentzVector & jetMomentum,
117 const std::vector<const xAOD::IParticle*> & inputTracks) const override;
118
119//------------------------------------------------------------------------------------------------------------------
120// Private data and functions
121//
122
123 private:
124
125 struct DevTuple;
126 struct Hists {
127 StatusCode book (ITHistSvc& histSvc, const std::string& histDir);
128 TTree* m_tuple{};
133 TH1D* m_hb_massEE{};
138 TH1D* m_hb_nvrt2{};
139 TH1D* m_hb_ratio{};
141 TH1D* m_hb_impact{};
144 TH1D* m_hb_trkD0{};
147 TH1D* m_hb_r2d{};
148 TH1D* m_hb_r1dc{};
149 TH1D* m_hb_r2dc{};
150 TH1D* m_hb_r3dc{};
151 TH1D* m_hb_rNdc{};
153 TH1D* m_hb_jmom{};
154 TH1D* m_hb_mom{};
156 TH1D* m_hb_impV0{};
159 TH1D* m_hb_distVV{};
160 TH1D* m_hb_diffPS{};
169//--
170 TProfile * m_pr_NSelTrkMean{};
171 TProfile * m_pr_effVrt2tr{};
172 TProfile * m_pr_effVrt2trEta{};
173 TProfile * m_pr_effVrt{};
174 TProfile * m_pr_effVrtEta{};
175 };
176 std::unique_ptr<Hists> m_h;
177
178 IntegerProperty m_cutSctHits{this, "CutSctHits", 4,
179 "Remove track is it has less SCT hits"};
180 IntegerProperty m_cutPixelHits{this, "CutPixelHits", 1,
181 "Remove track is it has less Pixel hits"};
182 IntegerProperty m_cutSiHits{this, "CutSiHits", 7,
183 "Remove track is it has less Pixel+SCT hits"};
184 IntegerProperty m_cutBLayHits{this, "CutBLayHits", 0,
185 "Remove track is it has less B-layer hits"};
186 IntegerProperty m_cutSharedHits{this, "CutSharedHits", 1000,
187 "Reject final 2tr vertices if tracks have shared hits"};
188 DoubleProperty m_cutPt{this, "CutPt", 700., "Track Pt selection cut"};
189 DoubleProperty m_cutZVrt{this, "CutZVrt", 15., "Track Z impact selection cut"};
190 DoubleProperty m_cutA0{this, "CutA0", 5., "Track A0 selection cut"};
191 DoubleProperty m_cutChi2{this, "CutChi2", 5., "Track Chi2 selection cut"};
192 DoubleProperty m_secTrkChi2Cut{this, "SecTrkChi2Cut", 10.,
193 "Track - common secondary vertex association cut. Single Vertex Finder only"};
194 DoubleProperty m_coneForTag{this, "ConeForTag", 0.4,
195 "Cone around jet direction for track selection"};
196 DoubleProperty m_sel2VrtChi2Cut{this, "Sel2VrtChi2Cut", 10.,
197 "Cut on Chi2 of 2-track vertex for initial selection"};
198 DoubleProperty m_sel2VrtSigCut{this, "Sel2VrtSigCut", 4.,
199 "Cut on significance of 3D distance between initial 2-track vertex and PV"};
200 DoubleProperty m_trkSigCut{this, "TrkSigCut", 2.,
201 "Track 3D impact significance w/r primary vertex"};
202 DoubleProperty m_a0TrkErrorCut{this, "A0TrkErrorCut", 1.,
203 "Track A0 error cut"};
204 DoubleProperty m_zTrkErrorCut{this, "ZTrkErrorCut", 5.,
205 "Track Z impact error cut"};
206 DoubleProperty m_cutBVrtScore{this, "CutBVrtScore", 0.015,
207 "B vertex selection cut on 2track vertex score (probability-like) based on track classification"};
208 DoubleProperty m_vrt2TrMassLimit{this, "Vrt2TrMassLimit", 4000.,
209 "Maximal allowed mass for 2-track vertices"};
210
211 BooleanProperty m_useFrozenVersion{this, "UseFrozenVersion", false,
212 "Switch from default frozen version to the development/improved one"};
213 BooleanProperty m_fillHist{this, "FillHist", false,
214 "Fill technical histograms"};
215 BooleanProperty m_existIBL{this, "ExistIBL", true,
216 "Inform whether 3-layer or 4-layer detector is used"};
217
218 IntegerProperty m_RobustFit{this, "RobustFit", 1,
219 "Use vertex fit with RobustFit functional(VKalVrt) for common secondary vertex fit"};
220
221 double m_beampipeR = 0.;
222 double m_rLayerB = 0.;
223 double m_rLayer1 = 0.;
224 double m_rLayer2 = 0.;
225 double m_rLayer3 = 0.;
226
227 BooleanProperty m_useVertexCleaningPix{this, "useVertexCleaningPix", false,
228 "Clean vertices requiring track pixel hit patterns according to vertex position"};
229 BooleanProperty m_useVertexCleaningFMP{this, "useVertexCleaningFMP", false,
230 "Clean vertices requiring track F(irst) M(easured) P(oints) matching to vertex position"};
231 BooleanProperty m_rejectBadVertices{this, "rejectBadVertices", false,
232 "Reject V0s after checking 3D PV impact"};
233 BooleanProperty m_multiVertex{this, "MultiVertex", false,
234 "Run Multiple Secondary Vertices in jet finder"};
235 BooleanProperty m_multiWithPrimary{this, "MultiWithPrimary", false,
236 "Find Multiple Secondary Vertices + primary vertex in jet. MultiVertex Finder only!"};
237 BooleanProperty m_getNegativeTail{this, "getNegativeTail", false,
238 "Allow secondary vertex behind the primary one (negative) w/r jet direction (not for multivertex!)"};
239 BooleanProperty m_getNegativeTag{this, "getNegativeTag", false,
240 "Return ONLY negative secondary vertices (not for multivertex!)"};
241 BooleanProperty m_multiWithOneTrkVrt{this, "MultiWithOneTrkVrt", true,
242 "Allow one-track-vertex addition to already found secondary vertices. MultiVertex Finder only!"};
243
244 DoubleProperty m_vertexMergeCut{this, "VertexMergeCut", 3.,
245 "To allow vertex merging for MultiVertex Finder"};
246 DoubleProperty m_trackDetachCut{this, "TrackDetachCut", 6.,
247 "To allow track from vertex detachment for MultiVertex Finder"};
248
249 ToolHandle < Trk::IVertexFitter > m_fitter
250 {this, "VertexFitterTool", "Trk::TrkVKalVrtFitter/VertexFitterTool"};
252 ServiceHandle<IChronoStatSvc> m_timingProfile{this,"ChronoStatSvc","ChronoStatSvc"};
253
255 ToolHandle < IInDetTrkInJetType > m_trackClassificator
256 {this, "TrackClassTool", "InDet::InDetTrkInJetType"};
258 {this, "EventInfoName", "EventInfo"};
259
264
266 {this, "useITkMaterialRejection", false,
267 "Reject vertices from hadronic interactions in detector material using ITk layout"};
270 std::unique_ptr<TH2D> m_ITkPixMaterialMap;
271
277 const double m_massB =5279.400 ;
278
279//-------------------------------------------
280//For ntuples (only for development/tuning!)
281
282 static int notFromBC(int PDGID) ;
283 static const xAOD::TruthParticle * getPreviousParent(const xAOD::TruthParticle * child, int & ParentPDG) ;
284 static int getIdHF(const xAOD::TrackParticle* TP ) ;
285 static int getG4Inter( const xAOD::TrackParticle* TP ) ;
286 static int getMCPileup(const xAOD::TrackParticle* TP ) ;
287
288 struct DevTuple
289 {
290 static const int maxNTrk=100;
291 static const int maxNVrt=100;
293 float ewgt;
294 float ptjet;
295 float etajet;
296 float phijet;
301 float SigR[maxNTrk];
302 float SigZ[maxNTrk];
303 float d0[maxNTrk];
304 float Z0[maxNTrk];
307 float wgtB[maxNTrk];
308 float wgtL[maxNTrk];
309 float wgtG[maxNTrk];
313 float TotM;
314 int nVrt;
321 float mass[maxNVrt];
322 float Chi2[maxNVrt];
329 int NTHF;
331 //---
332 int nNVrt;
342 };
343
344 struct Vrt2Tr
345 { int i=0, j=0;
346 int badVrt=0;
348 TLorentzVector momentum;
349 long int vertexCharge;
350 std::vector<double> errorMatrix;
351 std::vector<double> chi2PerTrk;
352 std::vector< std::vector<double> > trkAtVrt;
353 double signif3D=0.;
354 double signif3DProj=0.;
355 double signif2D=0.;
356 double chi2=0.;
357 double dRSVPV=-1.;
358 };
359
360
361// For multivertex version only
362
363 using compatibilityGraph_t = boost::adjacency_list<boost::listS, boost::vecS, boost::undirectedS>;
364 float m_chiScale[11]{};
365 struct WrkVrt
366 { bool Good=true;
367 std::deque<long int> selTrk;
369 TLorentzVector vertexMom;
370 long int vertexCharge{};
371 std::vector<double> vertexCov;
372 std::vector<double> chi2PerTrk;
373 std::vector< std::vector<double> > trkAtVrt;
374 double chi2{};
376 double dCloseVrt=1000000.;
377 double projectedVrt=0.;
379 };
380
381
382// Private technical functions
383//
384//
385 xAOD::Vertex* getVrtSec(const std::vector<const xAOD::TrackParticle*> & inpTrk,
386 const xAOD::Vertex & primVrt,
387 const TLorentzVector & jetDir,
388 std::vector<double> & results,
389 std::vector<const xAOD::TrackParticle*> & selSecTrk,
390 std::vector<const xAOD::TrackParticle*> & trkFromV0,
391 int & nRefPVTrk,
392 compatibilityGraph_t & compatibilityGraph) const;
393
394 std::vector<xAOD::Vertex*> getVrtSecMulti(
396 const xAOD::Vertex& primVrt,
397 const TLorentzVector& jetDir,
398 std::vector<double>& results,
399 compatibilityGraph_t& compatibilityGraph) const;
400
401 static void trackClassification(std::vector<WrkVrt> *wrkVrtSet,
402 std::vector< std::deque<long int> > *trkInVrt) ;
403
404 static double MaxOfShared(std::vector<WrkVrt> *WrkVrtSet,
405 std::vector< std::deque<long int> > *trkInVrt,
406 long int & selectedTrack,
407 long int & selectedVertex) ;
408 void removeTrackFromVertex(std::vector<WrkVrt> *wrkVrtSet,
409 std::vector< std::deque<long int> > *trkInVrt,
410 long int & selectedTrack,
411 long int & selectedVertex) const;
412//
413//
414
415 void printWrkSet(const std::vector<WrkVrt> * WrkSet, const std::string& name ) const;
416
417
418 StatusCode cutTrk(const std::unordered_map<std::string,double>& TrkVarDouble,
419 const std::unordered_map<std::string,int>& TrkVarInt,
420 float evtWgt=1.) const;
421 static double coneDist(const AmgVector(5) & , const TLorentzVector & ) ;
422//
423// Gives correct mass assignment in case of nonequal masses
424 static double massV0( std::vector< std::vector<double> >& trkAtVrt, double massP, double massPi ) ;
425 static int findMax( std::vector<double>& chi2PerTrk, std::vector<float>& rank) ;
426
427
428 TLorentzVector totalMom(const std::vector<const Trk::Perigee*>& inpTrk) const;
429 static TLorentzVector totalMom(const std::vector<const xAOD::TrackParticle*>& inpTrk) ;
430 TLorentzVector momAtVrt(const std::vector<double>& inpTrk) const;
431 static double pTvsDir(const Amg::Vector3D &Dir, const std::vector<double>& inpTrk) ;
432 static double vrtRadiusError(const Amg::Vector3D & secVrt, const std::vector<double> & vrtErr) ;
433
434 bool insideMatLayer(float ,float ) const;
435 void fillVrtNTup( std::vector<Vrt2Tr> & all2TrVrt) const;
436 void fillNVrtNTup(std::vector<WrkVrt> & vrtSet, std::vector< std::vector<float> > & trkScore,
437 const xAOD::Vertex & primVrt, const TLorentzVector & jetDir)const;
438
439 TLorentzVector getBDir( const xAOD::TrackParticle* trk1,
440 const xAOD::TrackParticle* trk2,
441 const xAOD::Vertex & primVrt,
442 Amg::Vector3D &V1, Amg::Vector3D &V2) const;
443
444 static int nTrkCommon( std::vector<WrkVrt> *WrkVrtSet, int V1, int V2) ;
445 double minVrtVrtDist( std::vector<WrkVrt> *WrkVrtSet, int & V1, int & V2) const;
446 static double minVrtVrtDistNext( std::vector<WrkVrt> *WrkVrtSet, int & V1, int & V2) ;
447 static bool isPart( std::deque<long int> test, std::deque<long int> base) ;
448 static void clean1TrVertexSet(std::vector<WrkVrt> *WrkVrtSet) ;
449 static double jetProjDist(Amg::Vector3D &SecVrt, const xAOD::Vertex &primVrt, const TLorentzVector &JetDir) ;
450
451 double vrtVrtDist(const xAOD::Vertex & primVrt, const Amg::Vector3D & SecVrt,
452 const std::vector<double>& VrtErr,double& Signif ) const;
453 double vrtVrtDist2D(const xAOD::Vertex & primVrt, const Amg::Vector3D & SecVrt,
454 const std::vector<double>& VrtErr,double& Signif ) const;
455 double vrtVrtDist(const xAOD::Vertex & primVrt, const Amg::Vector3D & SecVrt,
456 const std::vector<double>& SecVrtErr, const TLorentzVector & JetDir) const;
457 double vrtVrtDist(const Amg::Vector3D & Vrt1, const std::vector<double>& VrtErr1,
458 const Amg::Vector3D & Vrt2, const std::vector<double>& VrtErr2) const;
459
460 template <class Particle>
461 void disassembleVertex(std::vector<WrkVrt> *WrkVrtSet, int iv,
462 std::vector<const Particle*> AllTracks,
463 Trk::IVKalState& istate) const;
464
465 static double projSV_PV(const Amg::Vector3D & SV, const xAOD::Vertex & PV, const TLorentzVector & Jet) ;
466
467 double rankBTrk(double TrkPt, double JetPt, double Signif) const;
468
469
470 static const Trk::Perigee* getPerigee( const xAOD::TrackParticle* ) ;
471 std::vector<const Trk::Perigee*> GetPerigeeVector( const std::vector<const Trk::TrackParticleBase*>& ) const;
472
473
474 template <class Trk>
475 double fitCommonVrt(const EventContext& ctx,
476 std::vector<const Trk*>& listSecondTracks,
477 std::vector<float> & trkRank,
478 const xAOD::Vertex & primVrt,
479 const TLorentzVector & jetDir,
480 std::vector<double> & inpMass,
481 Amg::Vector3D & fitVertex,
482 std::vector<double> & errorMatrix,
483 TLorentzVector & momentum,
484 std::vector< std::vector<double> > & trkAtVrt) const;
485
486 template <class Trk>
487 void removeEntryInList(std::vector<const Trk*>& , std::vector<float>&, int) const;
488 template <class Trk>
489 void removeDoubleEntries(std::vector<const Trk*>& ) const;
490
491 template <class Particle>
492 StatusCode refitVertex( std::vector<WrkVrt> *WrkVrtSet, int selectedVertex,
493 std::vector<const Particle*> & selectedTracks,
494 Trk::IVKalState& istate,
495 bool ifCovV0) const;
496
497 template <class Particle>
498 double refitVertex( WrkVrt &Vrt,std::vector<const Particle*> & SelectedTracks,
499 Trk::IVKalState& istate,
500 bool ifCovV0) const;
501
502 template <class Particle>
503 double mergeAndRefitVertices( std::vector<WrkVrt> *WrkVrtSet, int V1, int V2, WrkVrt & newvrt,
504 std::vector<const Particle*> & AllTrackList,
505 Trk::IVKalState& istate) const;
506 template <class Particle>
507 void mergeAndRefitOverlapVertices( std::vector<WrkVrt> *WrkVrtSet, int V1, int V2,
508 std::vector<const Particle*> & AllTrackLis,
509 Trk::IVKalState& istate) const;
510
511 template <class Particle>
512 double improveVertexChi2( std::vector<WrkVrt> *WrkVrtSet, int V, std::vector<const Particle*> & AllTracks,
513 Trk::IVKalState& istate,
514 bool ifCovV0) const;
515
516 int selGoodTrkParticle( const std::vector<const xAOD::TrackParticle*>& inpPart,
517 const xAOD::Vertex & primVrt,
518 const TLorentzVector & jetDir,
519 std::vector<const xAOD::TrackParticle*>& selPart,
520 float evtWgt=1.) const;
521
522
523 template <class Trk>
524 int select2TrVrt(const EventContext& ctx,
525 std::vector<const Trk*> & SelectedTracks,
526 std::vector<const Trk*> & TracksForFit,
527 const xAOD::Vertex & primVrt,
528 const TLorentzVector & JetDir,
529 std::vector<double> & InpMass,
530 int & nRefPVTrk,
531 std::vector<const Trk*> & TrkFromV0,
532 std::vector<const Trk*> & ListSecondTracks,
533 compatibilityGraph_t & compatibilityGraph,
534 float evtWgt = 1) const;
535
536 static Amg::MatrixX makeVrtCovMatrix( std::vector<double> & ErrorMatrix ) ;
537
538
540// Needed for TrackParticle<->TrackParticleBase story!!!!
541//
542// template <class Track>
543// StatusCode VKalVrtFitFastBase(const std::vector<const Track*>& listPart,Amg::Vector3D& Vertex) const;
544 StatusCode VKalVrtFitFastBase(const std::vector<const xAOD::TrackParticle*>& listPart,Amg::Vector3D& Vertex, Trk::IVKalState& istate) const;
545
546 template <class Track>
547 bool check2TrVertexInPixel( const Track* p1, const Track* p2, Amg::Vector3D &, std::vector<double> &) const;
548 template <class Track>
549 bool check1TrVertexInPixel( const Track* p1, Amg::Vector3D &, std::vector<double> & ) const;
550
551 void getPixelLayers(const xAOD::TrackParticle* Part, int &blHit, int &l1Hit, int &l2Hit, int &nLay) const;
552 static void getPixelDiscs(const xAOD::TrackParticle* Part, int &d0Hit, int &d1Hit, int &d2Hit) ;
553 void getPixelProblems(const xAOD::TrackParticle* Part, int &splshIBL, int &splshBL ) const;
554
555
556 StatusCode VKalVrtFitBase(const std::vector<const xAOD::TrackParticle*> & listPart,
558 TLorentzVector& Momentum,
559 long int& Charge,
560 std::vector<double>& ErrorMatrix,
561 std::vector<double>& Chi2PerTrk,
562 std::vector< std::vector<double> >& TrkAtVrt,
563 double& Chi2,
564 Trk::IVKalState& istate,
565 bool ifCovV0) const;
566
567 StatusCode GetTrkFitWeights(std::vector<double> & wgt,
568 const Trk::IVKalState& istate) const;
569
570 Hists& getHists() const;
571 };
572
573
574 template <class Trk>
575 void InDetVKalVxInJetTool::removeEntryInList(std::vector<const Trk*>& ListTracks, std::vector<float> & rank, int Outlier) const
576 {
577 if(Outlier < 0 ) return;
578 if(Outlier >= (int)ListTracks.size() ) return;
579 ListTracks.erase( ListTracks.begin()+Outlier);
580 rank.erase( rank.begin()+Outlier);
581 }
582
583 template <class Trk>
584 void InDetVKalVxInJetTool::removeDoubleEntries(std::vector<const Trk*>& ListTracks) const
585 {
586 typename std::vector<const Trk*>::iterator TransfEnd;
587 sort(ListTracks.begin(),ListTracks.end());
588 TransfEnd = unique(ListTracks.begin(),ListTracks.end());
589 ListTracks.erase( TransfEnd, ListTracks.end());
590 }
591
593 {
594 clique_visitor(std::vector< std::vector<int> > & input): m_allCliques(input){ input.clear();}
595
596 template <typename Clique, typename Graph>
597 void clique(const Clique& clq, Graph& )
598 {
599 std::vector<int> new_clique(0);
600 for(auto i = clq.begin(); i != clq.end(); ++i) new_clique.push_back(*i);
601 m_allCliques.push_back(new_clique);
602 }
603
604 std::vector< std::vector<int> > & m_allCliques;
605
606 };
607
608 template <class Track>
609 bool InDetVKalVxInJetTool::check1TrVertexInPixel( const Track* p1, Amg::Vector3D &FitVertex, std::vector<double> &VrtCov)
610 const
611 {
612 int blTrk=0, blP=0, l1Trk=0, l1P=0, l2Trk=0, nLays=0;
613 getPixelLayers( p1, blTrk , l1Trk, l2Trk, nLays );
614 getPixelProblems(p1, blP, l1P );
615 double radiusError=vrtRadiusError(FitVertex, VrtCov);
616 double xvt=FitVertex.x();
617 double yvt=FitVertex.y();
618 double R=std::hypot(xvt, yvt);
619 if(R < m_rLayerB-radiusError){ // Inside B-layer
620 if( blTrk<1 && l1Trk<1 ) return false;
621 if( nLays <2 ) return false; // Less than 2 layers on track 0
622 return true;
623 }else if(R > m_rLayerB+radiusError){ // Outside b-layer
624 if( blTrk>0 && blP==0 ) return false; // Good hit in b-layer is present
625 }
626//
627// L1 and L2 are considered only if vertex is in acceptance
628//
629 if(std::abs(FitVertex.z())<400.){
630 if(R < m_rLayer1-radiusError) { // Inside 1st-layer
631 if( l1Trk<1 && l2Trk<1 ) return false; // Less than 1 hits on track 0
632 return true;
633 }else if(R > m_rLayer1+radiusError) { // Outside 1st-layer
634 if( l1Trk>0 && l1P==0 ) return false; // Good L1 hit is present
635 }
636
637 if(R < m_rLayer2-radiusError) { // Inside 2nd-layer
638 if( l2Trk==0 ) return false; // At least one L2 hit must be present
639 }
640 } else {
641 int d0Trk=0, d1Trk=0, d2Trk=0;
642 getPixelDiscs( p1, d0Trk , d1Trk, d2Trk );
643 if( d0Trk+d1Trk+d2Trk ==0 )return false;
644 }
645 return true;
646 }
647
648} //end namespace
649
650#endif
#define AmgVector(rows)
boost::graph_traits< boost::adjacency_list< boost::vecS, boost::vecS, boost::bidirectionalS > >::vertex_descriptor Vertex
std::vector< double > dvect
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.
Handle class for reading from StoreGate.
AthAlgTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor with parameters:
Dedicated detector manager extending the functionality of the SiDetectorManager with dedicated pixel ...
static void clean1TrVertexSet(std::vector< WrkVrt > *WrkVrtSet)
static void getPixelDiscs(const xAOD::TrackParticle *Part, int &d0Hit, int &d1Hit, int &d2Hit)
void fillNVrtNTup(std::vector< WrkVrt > &vrtSet, std::vector< std::vector< float > > &trkScore, const xAOD::Vertex &primVrt, const TLorentzVector &jetDir) const
std::unique_ptr< TH2D > m_ITkPixMaterialMap
TLorentzVector getBDir(const xAOD::TrackParticle *trk1, const xAOD::TrackParticle *trk2, const xAOD::Vertex &primVrt, Amg::Vector3D &V1, Amg::Vector3D &V2) const
ToolHandle< IInDetTrkInJetType > m_trackClassificator
void getPixelLayers(const xAOD::TrackParticle *Part, int &blHit, int &l1Hit, int &l2Hit, int &nLay) const
static bool isPart(std::deque< long int > test, std::deque< long int > base)
ServiceHandle< InDet::IInDetEtaDependentCutsSvc > m_etaDependentCutsSvc
service to get cut values depending on different variable
double vrtVrtDist(const xAOD::Vertex &primVrt, const Amg::Vector3D &SecVrt, const std::vector< double > &VrtErr, double &Signif) const
std::vector< xAOD::Vertex * > getVrtSecMulti(workVectorArrxAOD *, const xAOD::Vertex &primVrt, const TLorentzVector &jetDir, std::vector< double > &results, compatibilityGraph_t &compatibilityGraph) const
StatusCode refitVertex(std::vector< WrkVrt > *WrkVrtSet, int selectedVertex, std::vector< const Particle * > &selectedTracks, Trk::IVKalState &istate, bool ifCovV0) const
void disassembleVertex(std::vector< WrkVrt > *WrkVrtSet, int iv, std::vector< const Particle * > AllTracks, Trk::IVKalState &istate) const
int selGoodTrkParticle(const std::vector< const xAOD::TrackParticle * > &inpPart, const xAOD::Vertex &primVrt, const TLorentzVector &jetDir, std::vector< const xAOD::TrackParticle * > &selPart, float evtWgt=1.) const
boost::adjacency_list< boost::listS, boost::vecS, boost::undirectedS > compatibilityGraph_t
virtual StatusCode finalize() override
virtual Trk::VxSecVertexInfo * findSecVertex(const EventContext &ctx, const xAOD::Vertex &primaryVertex, const TLorentzVector &jetMomentum, const std::vector< const xAOD::IParticle * > &inputTracks) const override
void removeTrackFromVertex(std::vector< WrkVrt > *wrkVrtSet, std::vector< std::deque< long int > > *trkInVrt, long int &selectedTrack, long int &selectedVertex) const
TLorentzVector momAtVrt(const std::vector< double > &inpTrk) const
const BeamPipeDetectorManager * m_beamPipeMgr
StatusCode GetTrkFitWeights(std::vector< double > &wgt, const Trk::IVKalState &istate) const
static double jetProjDist(Amg::Vector3D &SecVrt, const xAOD::Vertex &primVrt, const TLorentzVector &JetDir)
static double projSV_PV(const Amg::Vector3D &SV, const xAOD::Vertex &PV, const TLorentzVector &Jet)
static double massV0(std::vector< std::vector< double > > &trkAtVrt, double massP, double massPi)
static void trackClassification(std::vector< WrkVrt > *wrkVrtSet, std::vector< std::deque< long int > > *trkInVrt)
static double vrtRadiusError(const Amg::Vector3D &secVrt, const std::vector< double > &vrtErr)
static Amg::MatrixX makeVrtCovMatrix(std::vector< double > &ErrorMatrix)
Trk::TrkVKalVrtFitter * m_fitSvc
StatusCode VKalVrtFitFastBase(const std::vector< const xAOD::TrackParticle * > &listPart, Amg::Vector3D &Vertex, Trk::IVKalState &istate) const
virtual StatusCode initialize() override
ToolHandle< Trk::IVertexFitter > m_fitter
InDetVKalVxInJetTool(const std::string &type, const std::string &name, const IInterface *parent)
void getPixelProblems(const xAOD::TrackParticle *Part, int &splshIBL, int &splshBL) const
void removeDoubleEntries(std::vector< const Trk * > &) const
int select2TrVrt(const EventContext &ctx, std::vector< const Trk * > &SelectedTracks, std::vector< const Trk * > &TracksForFit, const xAOD::Vertex &primVrt, const TLorentzVector &JetDir, std::vector< double > &InpMass, int &nRefPVTrk, std::vector< const Trk * > &TrkFromV0, std::vector< const Trk * > &ListSecondTracks, compatibilityGraph_t &compatibilityGraph, float evtWgt=1) const
double rankBTrk(double TrkPt, double JetPt, double Signif) const
void removeEntryInList(std::vector< const Trk * > &, std::vector< float > &, int) const
static double MaxOfShared(std::vector< WrkVrt > *WrkVrtSet, std::vector< std::deque< long int > > *trkInVrt, long int &selectedTrack, long int &selectedVertex)
double minVrtVrtDist(std::vector< WrkVrt > *WrkVrtSet, int &V1, int &V2) const
const InDetDD::PixelDetectorManager * m_pixelManager
SG::ReadHandleKey< xAOD::EventInfo > m_eventInfoKey
double mergeAndRefitVertices(std::vector< WrkVrt > *WrkVrtSet, int V1, int V2, WrkVrt &newvrt, std::vector< const Particle * > &AllTrackList, Trk::IVKalState &istate) const
TLorentzVector totalMom(const std::vector< const Trk::Perigee * > &inpTrk) const
double improveVertexChi2(std::vector< WrkVrt > *WrkVrtSet, int V, std::vector< const Particle * > &AllTracks, Trk::IVKalState &istate, bool ifCovV0) const
static double minVrtVrtDistNext(std::vector< WrkVrt > *WrkVrtSet, int &V1, int &V2)
StatusCode VKalVrtFitBase(const std::vector< const xAOD::TrackParticle * > &listPart, Amg::Vector3D &Vertex, TLorentzVector &Momentum, long int &Charge, std::vector< double > &ErrorMatrix, std::vector< double > &Chi2PerTrk, std::vector< std::vector< double > > &TrkAtVrt, double &Chi2, Trk::IVKalState &istate, bool ifCovV0) const
static double coneDist(const AmgVector(5) &, const TLorentzVector &)
xAOD::Vertex * getVrtSec(const std::vector< const xAOD::TrackParticle * > &inpTrk, const xAOD::Vertex &primVrt, const TLorentzVector &jetDir, std::vector< double > &results, std::vector< const xAOD::TrackParticle * > &selSecTrk, std::vector< const xAOD::TrackParticle * > &trkFromV0, int &nRefPVTrk, compatibilityGraph_t &compatibilityGraph) const
bool check1TrVertexInPixel(const Track *p1, Amg::Vector3D &, std::vector< double > &) const
static double pTvsDir(const Amg::Vector3D &Dir, const std::vector< double > &inpTrk)
std::vector< const Trk::Perigee * > GetPerigeeVector(const std::vector< const Trk::TrackParticleBase * > &) const
double fitCommonVrt(const EventContext &ctx, std::vector< const Trk * > &listSecondTracks, std::vector< float > &trkRank, const xAOD::Vertex &primVrt, const TLorentzVector &jetDir, std::vector< double > &inpMass, Amg::Vector3D &fitVertex, std::vector< double > &errorMatrix, TLorentzVector &momentum, std::vector< std::vector< double > > &trkAtVrt) const
double vrtVrtDist2D(const xAOD::Vertex &primVrt, const Amg::Vector3D &SecVrt, const std::vector< double > &VrtErr, double &Signif) const
static int findMax(std::vector< double > &chi2PerTrk, std::vector< float > &rank)
static int nTrkCommon(std::vector< WrkVrt > *WrkVrtSet, int V1, int V2)
void printWrkSet(const std::vector< WrkVrt > *WrkSet, const std::string &name) const
ServiceHandle< IChronoStatSvc > m_timingProfile
StatusCode cutTrk(const std::unordered_map< std::string, double > &TrkVarDouble, const std::unordered_map< std::string, int > &TrkVarInt, float evtWgt=1.) const
void mergeAndRefitOverlapVertices(std::vector< WrkVrt > *WrkVrtSet, int V1, int V2, std::vector< const Particle * > &AllTrackLis, Trk::IVKalState &istate) const
static const xAOD::TruthParticle * getPreviousParent(const xAOD::TruthParticle *child, int &ParentPDG)
static const Trk::Perigee * getPerigee(const xAOD::TrackParticle *)
bool check2TrVertexInPixel(const Track *p1, const Track *p2, Amg::Vector3D &, std::vector< double > &) const
std::unique_ptr< Hists > m_h
Property holding a SG store/key/clid from which a ReadHandle is made.
std::string base
Definition hcg.cxx:83
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
Eigen::Matrix< double, 3, 1 > Vector3D
Message Stream Member.
Primary Vertex Finder.
constexpr double protonMassInMeV
the mass of the proton (in MeV)
constexpr double KZeroMassInMeV
the mass of the neutral kaon (K0) (in MeV)
constexpr double chargedPionMassInMeV
the mass of the charged pion (in MeV)
constexpr double electronMassInMeV
the mass of the electron (in MeV)
constexpr double lambdaMassInMeV
the mass of the lambda baryon (in MeV)
Ensure that the ATLAS eigen extensions are properly loaded.
ParametersT< TrackParametersDim, Charged, PerigeeSurface > Perigee
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
void clique(const Clique &clq, Graph &)
clique_visitor(std::vector< std::vector< int > > &input)
std::vector< std::vector< int > > & m_allCliques
std::vector< const xAOD::TrackParticle * > TracksForFit
std::vector< const xAOD::TrackParticle * > TrkFromV0
std::vector< const xAOD::TrackParticle * > listSecondTracks
std::vector< std::vector< const xAOD::TrackParticle * > > FoundSecondTracks
std::vector< const xAOD::TrackParticle * > InpTrk
std::vector< const xAOD::TrackParticle * > listJetTracks
std::vector< const xAOD::TrackParticle * > tmpListTracks