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