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