ATLAS Offline Software
Loading...
Searching...
No Matches
InDetVKalVxInJetTool.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4// Author: Vadim Kostyukhin (vadim.kostyukhin@cern.ch)
5
6// Header include
12
13#include "GaudiKernel/ITHistSvc.h"
14#include "GaudiKernel/ConcurrencyFlags.h"
15#include "TH1D.h"
16#include "TH2D.h"
17#include "TTree.h"
18#include "TProfile.h"
19
20#include "TMath.h"
21//
22
23namespace InDet {
24
26
27//
28//Constructor--------------------------------------------------------------
30 const std::string& name,
31 const IInterface* parent):
32 AthAlgTool(type,name,parent)
33 {
34 declareInterface< ISecVertexInJetFinder >(this);
35 }
36
37//Destructor---------------------------------------------------------------
39 ATH_MSG_DEBUG("InDetVKalVxInJetTool destructor called");
40 }
41
42//Initialize---------------------------------------------------------------
44 ATH_MSG_DEBUG("InDetVKalVxInJetTool initialize() called");
45
47 ATH_CHECK(m_trackClassificator.retrieve( DisableTool{!m_useTrackClassificator} ));
48 if(!m_useTrackClassificator) ATH_MSG_DEBUG("TrackClassificator disabled");
49
53 ATH_MSG_DEBUG("Using InDetEtaDependentCutsSvc. Individual inclusive track selections from config not used");
54 }
55 else{
56 ATH_MSG_DEBUG("Using individual inclusive track selections from config");
57 }
58
59 if (m_fitter.retrieve().isFailure()) {
60 if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG) << "Could not find Trk::TrkVKalVrtFitter" << endmsg;
61 return StatusCode::SUCCESS;
62 } else {
63 if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG) << "InDetVKalVxInJetTool TrkVKalVrtFitter found" << endmsg;
64 }
65 m_fitSvc = dynamic_cast<Trk::TrkVKalVrtFitter*>(&(*m_fitter));
66 if(!m_fitSvc){
67 if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG)<<" No implemented Trk::ITrkVKalVrtFitter interface" << endmsg;
68 return StatusCode::SUCCESS;
69 }
70
71 ATH_CHECK( m_eventInfoKey.initialize() );
72 //------------------------------------------
73 if(msgLvl(MSG::DEBUG)) ATH_CHECK(m_timingProfile.retrieve());
74//------------------------------------------
75// Chose whether IBL is installed
76 if(m_existIBL){ // 4-layer pixel detector
77 if( m_beampipeR==0.) m_beampipeR=24.0;
78 if( m_rLayerB ==0.) m_rLayerB =34.0;
79 if( m_rLayer1 ==0.) m_rLayer1 =51.6;
80 if( m_rLayer2 ==0.) m_rLayer2 =90.0;
81 m_rLayer3 =122.5;
82 } else { // 3-layer pixel detector
83 if( m_beampipeR==0.) m_beampipeR=29.4;
84 if( m_rLayerB ==0.) m_rLayerB =51.5;
85 if( m_rLayer1 ==0.) m_rLayer1 =90.0;
86 if( m_rLayer2 ==0.) m_rLayer2 =122.5;
87 }
88
89 if(m_fillHist){
90 if (Gaudi::Concurrency::ConcurrencyFlags::numThreads() > 1) {
91 ATH_MSG_FATAL("Filling histograms not supported in MT jobs.");
92 return StatusCode::FAILURE;
93 }
94
95 SmartIF<ITHistSvc> hist_root{Gaudi::svcLocator()->service("THistSvc")};
96 ATH_CHECK(hist_root.isValid());
97 ATH_MSG_DEBUG( "InDetVKalVxInJetTool Histograms found" );
98
99 std::string histDir;
100 if(m_multiVertex) histDir="/file1/stat/MSVrtInJet"+name()+"/";
101 else histDir="/file1/stat/SVrtInJet"+name()+"/";
102 m_h = std::make_unique<Hists>();
103 ATH_CHECK( m_h->book (*hist_root, histDir) );
104
105//-------------------------------------------------------
106 }
107
109
111 if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " Negative TAG is requested! " << endmsg;
112 if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Not compatible with negativeTAIL option, so getNegativeTail is set to FALSE." << endmsg;
113 m_getNegativeTail=false;
114 }
115
116 for(int ntv=2; ntv<=10; ntv++) m_chiScale[ntv]=TMath::ChisquareQuantile(0.9,2.*ntv-3.)/ntv;
118 for(int ntv=2; ntv<=10; ntv++) m_chiScale[ntv]/=m_chiScale[0];
119
122
124
125 ATH_CHECK(detStore()->retrieve(m_beamPipeMgr, "BeamPipe"));
126 ATH_CHECK(detStore()->retrieve(m_pixelManager, "ITkPixel"));
127
129
131
132 }
133
134 return StatusCode::SUCCESS;
135
136 }
137
138 StatusCode InDetVKalVxInJetTool::Hists::book (ITHistSvc& histSvc,
139 const std::string& histDir)
140 {
141 m_hb_massPiPi = new TH1D("massPiPi"," mass PiPi",160,200., 1000.);
142 m_hb_massPiPi1 = new TH1D("massPiPi1"," mass PiPi",100,200., 2000.);
143 m_hb_massPPi = new TH1D("massPPi"," massPPi", 100,1000., 1250.);
144 m_hb_massEE = new TH1D("massEE"," massEE", 100,0., 200.);
145 m_hb_nvrt2 = new TH1D("nvrt2"," vertices2", 50,0., 50.);
146 m_hb_ratio = new TH1D("ratio"," ratio", 51,0., 1.02);
147 m_hb_totmass = new TH1D("totmass"," totmass", 250,0., 10000.);
148 m_hb_totmassEE = new TH1D("massEEcomvrt"," totmass EE common vertex", 100,0., 1000.);
149 m_hb_totmass2T0 = new TH1D("mass2trcomvrt0"," totmass 2tr common vertex", 800,0., 4000.);
150 m_hb_totmass2T1 = new TH1D("mass2trcomvrt1"," totmass 2tr common vertex", 200,0., 10000.);
151 m_hb_totmass2T2 = new TH1D("mass2trcomvrt2"," totmass 2tr common vertex", 200,0., 10000.);
152 m_hb_impact = new TH1D("impact", " impact", 100,0., 20.);
153 m_hb_impactR = new TH1D("impactR"," impactR", 400,-30., 70.);
154 m_hb_impactZ = new TH1D("impactZ"," impactZ", 100,-30., 70.);
155 m_hb_impactRZ = new TH2D("impactRZ"," impactRZ", 40,-10., 10., 60, -30.,30. );
156 m_hb_trkD0 = new TH1D("trkD0"," d0 of tracks", 100,-20., 20.);
157 m_hb_r2d = new TH1D("r2interact","Interaction radius 2tr selected", 150,0., 150.);
158 m_hb_r1dc = new TH1D("r1interactCommon","Interaction 1tr radius common", 150,0., 150.);
159 m_hb_r2dc = new TH1D("r2interactCommon","Interaction 2tr radius common", 150,0., 150.);
160 m_hb_r3dc = new TH1D("r3interactCommon","Interaction 3tr radius common", 150,0., 150.);
161 m_hb_rNdc = new TH1D("rNinteractCommon","Interaction Ntr radius common", 150,0., 150.);
162 m_hb_dstToMat = new TH1D("dstToMatL","Distance to material layer", 80,0., 40.);
163 m_hb_impV0 = new TH1D("impactV0"," V0 impact", 100,0., 50.);
164 m_hb_ntrkjet = new TH1D("ntrkjet"," NTrk in jet", 50,0., 50.);
165 m_hb_jmom = new TH1D("jetmom"," Jet mom", 200,0., 2000000.);
166 m_hb_mom = new TH1D("jetmomvrt"," Jet mom with sec. vertex", 200,0., 2000000.);
167 m_hb_signif3D = new TH1D("signif3D"," Signif3D for initial 2tr vertex", 140,-20., 50.);
168 m_hb_sig3DTot = new TH1D("sig3dcommon"," Signif3D for common vertex", 140,-20., 50.);
169 m_hb_sig3D1tr = new TH1D("sig3D1tr","Signif3D for 1tr vertices", 140,-20., 50.);
170 m_hb_sig3D2tr = new TH1D("sig3D2tr","Signif3D for 2tr single vertex", 140,-20., 50.);
171 m_hb_sig3DNtr = new TH1D("sig3DNtr","Signif3D for many-tr single vertex", 140,-20., 50.);
172 m_hb_goodvrtN = new TH1F("goodvrtN","Number of good vertices", 20,0., 20.);
173 m_hb_distVV = new TH1D("distvv","Vertex-Vertex dist", 100,0., 20.);
174 m_hb_diffPS = new TH1D("diffPS","Primary-Secondary assoc", 200,-20., 20.);
175 m_hb_trkPtMax = new TH1D("trkPtMax","Maximal track Pt to jet", 100, 0., 5000.);
176 m_hb_rawVrtN = new TH1F("rawVrtN","Number of raw vertices multivertex case", 20, 0., 20.);
177 m_hb_lifetime = new TH1F("lifetime","Distance/momentum", 100, 0., 5.);
178 m_hb_trkPErr = new TH1F("trkPErr","Track momentum error for P>10 GeV", 100, 0., 0.5);
179 m_hb_deltaRSVPV = new TH1F("deltaRSVPV","SV-PV vs jet dR ", 200, 0., 1.);
180 m_pr_NSelTrkMean = new TProfile("NSelTrkMean"," NTracks selected vs jet pt", 80, 0., 1600000.);
181 m_pr_effVrt2tr = new TProfile("effVrt2tr"," 2tr vertex efficiency vs Ntrack", 50, 0., 50.);
182 m_pr_effVrt2trEta= new TProfile("effVrt2trEta"," 2tr vertex efficiency vs eta", 50, -3., 3.);
183 m_pr_effVrt = new TProfile("effVrt","Full vertex efficiency vs Ntrack", 50, 0., 50.);
184 m_pr_effVrtEta = new TProfile("effVrtEta","Full vertex efficiency vs eta", 50, -3., 3.);
185
186 ATH_CHECK( histSvc.regHist(histDir+"massPiPi", m_hb_massPiPi) );
187 ATH_CHECK( histSvc.regHist(histDir+"massPiPi1", m_hb_massPiPi1) );
188 ATH_CHECK( histSvc.regHist(histDir+"massPPi", m_hb_massPPi) );
189 ATH_CHECK( histSvc.regHist(histDir+"massEE", m_hb_massEE ) );
190 ATH_CHECK( histSvc.regHist(histDir+"nvrt2", m_hb_nvrt2) );
191 ATH_CHECK( histSvc.regHist(histDir+"ratio", m_hb_ratio) );
192 ATH_CHECK( histSvc.regHist(histDir+"totmass", m_hb_totmass) );
193 ATH_CHECK( histSvc.regHist(histDir+"massEEcomvrt", m_hb_totmassEE) );
194 ATH_CHECK( histSvc.regHist(histDir+"mass2trcomvrt0", m_hb_totmass2T0) );
195 ATH_CHECK( histSvc.regHist(histDir+"mass2trcomvrt1", m_hb_totmass2T1) );
196 ATH_CHECK( histSvc.regHist(histDir+"mass2trcomvrt2", m_hb_totmass2T2) );
197 ATH_CHECK( histSvc.regHist(histDir+"impact", m_hb_impact) );
198 ATH_CHECK( histSvc.regHist(histDir+"impactR", m_hb_impactR) );
199 ATH_CHECK( histSvc.regHist(histDir+"impactZ", m_hb_impactZ) );
200 ATH_CHECK( histSvc.regHist(histDir+"impactRZ", m_hb_impactRZ) );
201 ATH_CHECK( histSvc.regHist(histDir+"trkD0", m_hb_trkD0) );
202 ATH_CHECK( histSvc.regHist(histDir+"r2interact", m_hb_r2d) );
203 ATH_CHECK( histSvc.regHist(histDir+"r1interactCommon", m_hb_r1dc) );
204 ATH_CHECK( histSvc.regHist(histDir+"r2interactCommon", m_hb_r2dc) );
205 ATH_CHECK( histSvc.regHist(histDir+"r3interactCommon", m_hb_r3dc) );
206 ATH_CHECK( histSvc.regHist(histDir+"rNinteractCommon", m_hb_rNdc) );
207 ATH_CHECK( histSvc.regHist(histDir+"dstToMatL", m_hb_dstToMat) );
208 ATH_CHECK( histSvc.regHist(histDir+"impactV0", m_hb_impV0) );
209 ATH_CHECK( histSvc.regHist(histDir+"ntrkjet", m_hb_ntrkjet) );
210 ATH_CHECK( histSvc.regHist(histDir+"jetmom", m_hb_jmom) );
211 ATH_CHECK( histSvc.regHist(histDir+"jetmomvrt", m_hb_mom) );
212 ATH_CHECK( histSvc.regHist(histDir+"signif3D", m_hb_signif3D) );
213 ATH_CHECK( histSvc.regHist(histDir+"sig3dcommon", m_hb_sig3DTot) );
214 ATH_CHECK( histSvc.regHist(histDir+"sig3D1tr", m_hb_sig3D1tr) );
215 ATH_CHECK( histSvc.regHist(histDir+"sig3D2tr", m_hb_sig3D2tr) );
216 ATH_CHECK( histSvc.regHist(histDir+"sig3DNtr", m_hb_sig3DNtr) );
217 ATH_CHECK( histSvc.regHist(histDir+"goodvrtN", m_hb_goodvrtN) );
218 ATH_CHECK( histSvc.regHist(histDir+"distVV", m_hb_distVV) );
219 ATH_CHECK( histSvc.regHist(histDir+"diffPS", m_hb_diffPS) );
220 ATH_CHECK( histSvc.regHist(histDir+"trkPtMax", m_hb_trkPtMax) );
221 ATH_CHECK( histSvc.regHist(histDir+"rawVrtN", m_hb_rawVrtN) );
222 ATH_CHECK( histSvc.regHist(histDir+"lifetime", m_hb_lifetime) );
223 ATH_CHECK( histSvc.regHist(histDir+"trkPErr", m_hb_trkPErr) );
224 ATH_CHECK( histSvc.regHist(histDir+"deltaRSVPV", m_hb_deltaRSVPV) );
225 ATH_CHECK( histSvc.regHist(histDir+"NSelTrkMean", m_pr_NSelTrkMean) );
226 ATH_CHECK( histSvc.regHist(histDir+"effVrt2tr", m_pr_effVrt2tr) );
227 ATH_CHECK( histSvc.regHist(histDir+"effVrt2trEta", m_pr_effVrt2trEta) );
228 ATH_CHECK( histSvc.regHist(histDir+"effVrt", m_pr_effVrt) );
229 ATH_CHECK( histSvc.regHist(histDir+"effVrtEta", m_pr_effVrtEta) );
230
231 m_tuple = new TTree("Tracks","Tracks");
232 ATH_CHECK( histSvc.regTree(histDir,m_tuple) );
233 m_curTup = new DevTuple();
234
235 m_tuple->Branch("ewgt", &m_curTup->ewgt, "ewgt/F");
236 m_tuple->Branch("ptjet", &m_curTup->ptjet, "ptjet/F");
237 m_tuple->Branch("etajet", &m_curTup->etajet, "etajet/F");
238 m_tuple->Branch("phijet", &m_curTup->phijet, "phijet/F");
239 m_tuple->Branch("ntrk", &m_curTup->nTrkInJet, "ntrk/I");
240 m_tuple->Branch("etatrk", &m_curTup->etatrk, "etatrk[ntrk]/F");
241 m_tuple->Branch("prbS", &m_curTup->s_prob, "prbS[ntrk]/F");
242 m_tuple->Branch("prbP", &m_curTup->p_prob, "prbP[ntrk]/F");
243 m_tuple->Branch("wgtB", &m_curTup->wgtB, "wgtB[ntrk]/F");
244 m_tuple->Branch("wgtL", &m_curTup->wgtL, "wgtL[ntrk]/F");
245 m_tuple->Branch("wgtG", &m_curTup->wgtG, "wgtG[ntrk]/F");
246 m_tuple->Branch("sig3D", &m_curTup->sig3D, "sig3D[ntrk]/F");
247 m_tuple->Branch("idMC", &m_curTup->idMC, "idMC[ntrk]/I");
248 m_tuple->Branch("ibl", &m_curTup->ibl, "ibl[ntrk]/I");
249 m_tuple->Branch("bl", &m_curTup->bl, "bl[ntrk]/I");
250 m_tuple->Branch("fhitR", &m_curTup->fhitR, "fhitRR[ntrk]/F");
251 m_tuple->Branch("SigR", &m_curTup->SigR, "SigR[ntrk]/F");
252 m_tuple->Branch("SigZ", &m_curTup->SigZ, "SigZ[ntrk]/F");
253 m_tuple->Branch("d0", &m_curTup->d0, "d0[ntrk]/F");
254 m_tuple->Branch("Z0", &m_curTup->Z0, "Z0[ntrk]/F");
255 m_tuple->Branch("pTvsJet", &m_curTup->pTvsJet, "pTvsJet[ntrk]/F");
256 m_tuple->Branch("prodTJ", &m_curTup->prodTJ, "prodTJ[ntrk]/F");
257 m_tuple->Branch("nVrtT", &m_curTup->nVrtT, "nVrtT[ntrk]/I");
258 m_tuple->Branch("chg", &m_curTup->chg, "chg[ntrk]/I");
259 //-----
260 m_tuple->Branch("TotM", &m_curTup->TotM, "TotM/F");
261 //-----
262 m_tuple->Branch("nvrt", &m_curTup->nVrt, "nvrt/I");
263 m_tuple->Branch("VrtDist2D", &m_curTup->VrtDist2D, "VrtDist2D[nvrt]/F");
264 m_tuple->Branch("VrtSig3D", &m_curTup->VrtSig3D, "VrtSig3D[nvrt]/F");
265 m_tuple->Branch("VrtSig2D", &m_curTup->VrtSig2D, "VrtSig2D[nvrt]/F");
266 m_tuple->Branch("VrtDR", &m_curTup->VrtDR, "VrtDR[nvrt]/F");
267 m_tuple->Branch("VrtdRtt", &m_curTup->VrtdRtt, "VrtdRtt[nvrt]/F");
268 m_tuple->Branch("VrtErrR", &m_curTup->VrtErrR, "VrtErrR[nvrt]/F");
269 m_tuple->Branch("itrk", &m_curTup->itrk, "itrk[nvrt]/I");
270 m_tuple->Branch("jtrk", &m_curTup->jtrk, "jtrk[nvrt]/I");
271 m_tuple->Branch("badV", &m_curTup->badVrt, "badV[nvrt]/I");
272 m_tuple->Branch("mass", &m_curTup->mass, "mass[nvrt]/F");
273 m_tuple->Branch("Chi2", &m_curTup->Chi2, "Chi2[nvrt]/F");
274 //-----
275 m_tuple->Branch("ntHF", &m_curTup->NTHF, "ntHF/I");
276 m_tuple->Branch("itHF", &m_curTup->itHF, "itHF[ntHF]/I");
277 //-----
278 m_tuple->Branch("nNVrt", &m_curTup->nNVrt, "nNVrt/I");
279 m_tuple->Branch("NVrtDist2D", &m_curTup->NVrtDist2D, "NVrtDist2D[nNVrt]/F");
280 m_tuple->Branch("NVrtSig3D", &m_curTup->NVrtSig3D, "NVrtSig3D[nNVrt]/F");
281 m_tuple->Branch("NVrtNT", &m_curTup->NVrtNT, "NVrtNT[nNVrt]/I");
282 m_tuple->Branch("NVrtTrkI", &m_curTup->NVrtTrkI, "NVrttrkI[nNVrt]/I");
283 m_tuple->Branch("NVrtM", &m_curTup->NVrtM, "NVrtM[nNVrt]/F");
284 m_tuple->Branch("NVrtChi2", &m_curTup->NVrtChi2, "NVrtChi2[nNVrt]/F");
285 m_tuple->Branch("NVrtMaxW", &m_curTup->NVrtMaxW, "NVrtMaxW[nNVrt]/F");
286 m_tuple->Branch("NVrtAveW", &m_curTup->NVrtAveW, "NVrtAveW[nNVrt]/F");
287 m_tuple->Branch("NVrtDR", &m_curTup->NVrtDR, "NVrtDR[nNVrt]/F");
288
289 return StatusCode::SUCCESS;
290 }
291
292
294 {
295 if(m_timingProfile)m_timingProfile->chronoPrint("InDetVKalVxInJetTool");
296 ATH_MSG_DEBUG("InDetVKalVxInJetTool finalize()");
297 return StatusCode::SUCCESS;
298 }
299
300
301
302
304 const TLorentzVector & jetDir,
305 const std::vector<const xAOD::IParticle*> & IInpTrk)
306 const {
307 if(m_timingProfile)m_timingProfile->chronoStart("InDetVKalVxInJetTool");
308 std::vector<double> Results;
309 std::vector<const xAOD::TrackParticle*> InpTrk;
310 std::vector<const xAOD::TrackParticle*> SelSecTrk;
311 std::vector< std::vector<const xAOD::TrackParticle*> > SelSecTrkPerVrt;
312 std::vector<const xAOD::TrackParticle*> xaodTrkFromV0;
313 std::vector<xAOD::Vertex*> listVrtSec(0);
314 double SecVtxMass = 0.;
315 double RatioE = 0.;
316 double EnergyJet = 0.;
317 int N2trVertices = 0 ;
318 int NBigImpTrk = 0 ;
319
320 if(m_fillHist){
321 Hists& h = getHists();
322 if (h.m_curTup) {
323 h.m_curTup->nVrt=0;
324 h.m_curTup->nTrkInJet=0;
325 h.m_curTup->NTHF=0;
326 h.m_curTup->nNVrt=0;
327 h.m_curTup->TotM=0.; h.m_curTup->ewgt=1.;
328 }
329 }
330
331 int pseudoVrt = 0;
332
333 compatibilityGraph_t compatibilityGraph;
334
335 InpTrk.clear(); InpTrk.reserve(IInpTrk.size());
336 std::vector<const xAOD::IParticle*>::const_iterator i_itrk;
337 for (i_itrk = IInpTrk.begin(); i_itrk < IInpTrk.end(); ++i_itrk) {
338 const xAOD::TrackParticle * tmp=dynamic_cast<const xAOD::TrackParticle *> ((*i_itrk));
339 if(tmp)InpTrk.push_back(tmp);
340 }
341
342 if(m_multiVertex){
343 std::unique_ptr<workVectorArrxAOD> tmpVectxAOD= std::make_unique<workVectorArrxAOD>();
344 tmpVectxAOD->InpTrk.resize(InpTrk.size());
345 std::copy(InpTrk.begin(),InpTrk.end(), tmpVectxAOD->InpTrk.begin());
346 listVrtSec = getVrtSecMulti(tmpVectxAOD.get(),primVrt,jetDir,Results,compatibilityGraph);
347 SelSecTrkPerVrt.swap(tmpVectxAOD->FoundSecondTracks);
348 xaodTrkFromV0.swap(tmpVectxAOD->TrkFromV0);
349 }else{
350 int nRefPVTrk=0;
351 xAOD::Vertex* secVrt = getVrtSec( InpTrk,primVrt,jetDir,Results,SelSecTrk,xaodTrkFromV0, nRefPVTrk, compatibilityGraph);
352 if(secVrt != nullptr) listVrtSec.push_back(secVrt);
353 else if(m_fillHist) {
354 Hists& h = getHists();
355 h.m_pr_effVrt->Fill((float)nRefPVTrk,0.);
356 h.m_pr_effVrtEta->Fill( jetDir.Eta(),0.);
357 }
358 }
359 if(Results.size()<7) {
360 listVrtSec.clear();
361 }else{
362 SecVtxMass = Results[0];
363 RatioE = Results[1];
364 N2trVertices = (int)Results[2];
365 NBigImpTrk = (int)Results[3];
366 EnergyJet = Results[6];
367 if( Results[2]==0 && Results[4]==0 ) pseudoVrt=1;
368 }
369
370 std::vector<const xAOD::IParticle*> iparTrkFromV0(0);
371 for(auto & i : xaodTrkFromV0)iparTrkFromV0.push_back(i);
372
374 try{
375 if(pseudoVrt){
376 res = new Trk::VxSecVKalVertexInfo(listVrtSec[0], SecVtxMass, RatioE, NBigImpTrk, iparTrkFromV0 );
377 }else{
378 res = new Trk::VxSecVKalVertexInfo(listVrtSec, SecVtxMass, RatioE, N2trVertices, EnergyJet, iparTrkFromV0 );
379 if(Results.size()>8)res->setDstToMatLay(Results[7]);
380 } }
381 catch (std::bad_alloc& ba){
382 ATH_MSG_DEBUG("Trk::VxSecVKalVertexInfo allocation failure! "<< ba.what());
383 }
384
385 if(m_fillHist){
386 Hists& h = getHists();
387 h.m_tuple->Fill();
388 };
389 if(m_timingProfile)m_timingProfile->chronoStop("InDetVKalVxInJetTool");
390 return res;
391 }
392
393
396 {
397 // We earlier checked that no more than one thread is being used.
398 Hists* h ATLAS_THREAD_SAFE = m_h.get();
399 return *h;
400 }
401
402
403} // end InDet namespace
#define endmsg
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_FATAL(x)
#define ATH_MSG_DEBUG(x)
std::vector< Result > Results
std::pair< std::vector< unsigned int >, bool > res
static const Attributes_t empty
#define ATLAS_THREAD_SAFE
AthAlgTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor with parameters:
const ServiceHandle< StoreGateSvc > & detStore() const
bool msgLvl(const MSG::Level lvl) const
MsgStream & msg() const
Header file for AthHistogramAlgorithm.
std::unique_ptr< TH2D > ITkPixMaterialMap()
std::unique_ptr< TH2D > m_ITkPixMaterialMap
ToolHandle< IInDetTrkInJetType > m_trackClassificator
ServiceHandle< InDet::IInDetEtaDependentCutsSvc > m_etaDependentCutsSvc
service to get cut values depending on different variable
std::vector< xAOD::Vertex * > getVrtSecMulti(workVectorArrxAOD *, const xAOD::Vertex &primVrt, const TLorentzVector &jetDir, std::vector< double > &results, compatibilityGraph_t &compatibilityGraph) const
boost::adjacency_list< boost::listS, boost::vecS, boost::undirectedS > compatibilityGraph_t
const BeamPipeDetectorManager * m_beamPipeMgr
Trk::TrkVKalVrtFitter * m_fitSvc
ToolHandle< Trk::IVertexFitter > m_fitter
InDetVKalVxInJetTool(const std::string &type, const std::string &name, const IInterface *parent)
Trk::VxSecVertexInfo * findSecVertex(const xAOD::Vertex &primaryVertex, const TLorentzVector &jetMomentum, const std::vector< const xAOD::IParticle * > &inputTracks) const
const InDetDD::PixelDetectorManager * m_pixelManager
SG::ReadHandleKey< xAOD::EventInfo > m_eventInfoKey
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
ServiceHandle< IChronoStatSvc > m_timingProfile
std::unique_ptr< Hists > m_h
Primary Vertex Finder.
TrackParticle_v1 TrackParticle
Reference the current persistent version:
Vertex_v1 Vertex
Define the latest version of the vertex class.
StatusCode book(ITHistSvc &histSvc, const std::string &histDir)