ATLAS Offline Software
Loading...
Searching...
No Matches
NewVrtSecInclusiveTool.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
7
8
9// Header include
14
15#include "GaudiKernel/ITHistSvc.h"
16#include "GaudiKernel/ConcurrencyFlags.h"
17#include "TH1.h"
18#include "TH2.h"
19#include "TTree.h"
20#include "TMath.h"
21#include "TFile.h"
22#include "MVAUtils/BDT.h"
24
25
26namespace Rec {
27
28//
29//Constructor--------------------------------------------------------------
31 const std::string& name,
32 const IInterface* parent):
33 AthAlgTool(type,name,parent),
34 m_instanceName(name),
35 m_is_selected("is_selected"),
36 m_is_svtrk_final("is_svtrk_final"),
37 m_pt_wrtSV("pt_wrtSV"),
38 m_eta_wrtSV("eta_wrtSV"),
39 m_phi_wrtSV("phi_wrtSV"),
40 m_d0_wrtSV("d0_wrtSV"),
41 m_z0_wrtSV("z0_wrtSV"),
42 m_errP_wrtSV("errP_wrtSV"),
43 m_errd0_wrtSV("errd0_wrtSV"),
44 m_errz0_wrtSV("errz0_wrtSV"),
45 m_chi2_toSV("chi2_toSV")
46 {
47//
48// Declare additional interface
49//
50 declareInterface< IVrtInclusive >(this);
51//
57
58 }
59
60//Destructor---------------------------------------------------------------
62 ATH_MSG_DEBUG("NewVrtSecInclusiveTool destructor called");
63 }
64
65//Initialize---------------------------------------------------------------
67 ATH_MSG_DEBUG( "Initialising NewVrtSecInclusiveTool" );
68 ATH_CHECK( m_extrapolator.retrieve() );
69 ATH_CHECK( m_trackToVertexTool.retrieve() );
70 ATH_CHECK( m_beamSpotKey.initialize() );
71 ATH_CHECK( m_fitSvc.retrieve() );
72 ATH_CHECK( m_ini_v2trselector.retrieve() );
73 ATH_CHECK( m_fin_v2trselector.retrieve() );
74
86
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{service("THistSvc")};
96 if( !hist_root ) ATH_MSG_DEBUG("Could not find THistSvc service");
97 else ATH_MSG_DEBUG("NewVrtSecInclusiveTool Histograms found");
98 std::string histDir;
99 histDir="/NVSI/stat/MultiSVrt"+m_instanceName+"/";
100
101 m_h = std::make_unique<Hists>();
102 ATH_CHECK( m_h->book (*hist_root, histDir) );
103
104 m_w_1 = 1.;
105 }
106
107
108 return StatusCode::SUCCESS;
109
110 }
111
112
113 StatusCode NewVrtSecInclusiveTool::Hists::book (ITHistSvc& histSvc,
114 const std::string& histDir)
115 {
116 m_hb_massPiPi = new TH1D("massPiPi"," mass PiPi",200,0., 4000.);
117 m_hb_massPiPi1 = new TH1D("massPiPi1"," mass PiPi",200,0., 4000.);
118 m_hb_massPPi = new TH1D("massPPi"," massPPi", 100,1000., 1250.);
119 m_hb_massEE = new TH1D("massEE"," massEE", 100,0., 200.);
120 m_hb_nvrt2 = new TH1D("nvrt2"," vertices2", 50,0., 50.);
121 m_hb_ratio = new TH1D("ratio"," ratio", 51,0., 1.02);
122 m_hb_totmass = new TH1D("totmass"," totmass", 250,0., 10000.);
123 m_hb_impact = new TH1D("impact", " impact", 100,0., 20.);
124 m_hb_impactR = new TH1D("impactR"," impactR", 400,-30., 70.);
125 m_hb_impactZ = new TH1D("impactZ"," impactZ", 100,-30., 70.);
126 m_hb_impactRZ = new TH2D("impactRZ"," impactRZ", 40,-10., 10., 60, -30.,30. );
127 m_hb_trkD0 = new TH1D("trkD0"," d0 of tracks", 100, 0., 10.);
128 m_hb_trkZ = new TH1D("trkZ"," Z of tracks", 120,-60., 60.);
129 m_hb_r2d = new TH1D("r2interact","Interaction radius 2tr selected", 150,0., 150.);
130 m_hb_ntrksel = new TH1F("NTrkSel","Number of selected tracks", 200,0., 200.);
131 m_hb_ntrkInput = new TH1F("NTrkInput","Number of provided tracks", 200,0., 1000.);
132 m_hb_trkSelect = new TH1F("TrkSelect","Track selection efficiency", 15,0., 15.);
133 m_hb_signif3D = new TH1D("signif3D"," Signif3D for initial 2tr vertex", 140,-20., 50.);
134 m_hb_sig3DTot = new TH1D("sig3dcommon"," Signif3D for common vertex", 140,-20., 50.);
135 m_hb_sig3D1tr = new TH1D("sig3D1tr","Signif3D for 1tr vertices", 140,-20., 50.);
136 m_hb_sig3D2tr = new TH1D("sig3D2tr","Signif3D for 2tr single vertex", 140,-20., 50.);
137 m_hb_sig3DNtr = new TH1D("sig3DNtr","Signif3D for many-tr single vertex", 140,-20., 50.);
138 m_hb_goodvrtN = new TH1F("goodvrtN","Number of good vertices", 20,0., 20.);
139 m_hb_goodvrt1N = new TH1F("goodvrt1N","Number of good 1-track vertices", 20,0., 20.);
140 m_hb_distVV = new TH1D("distvv","Vertex-Vertex dist", 100,0., 20.);
141 m_hb_diffPS = new TH1D("diffPS","Primary-Secondary assoc", 200,-20., 20.);
142 m_hb_rawVrtN = new TH1F("rawVrtN","Number of raw vertices multivertex case", 20, 0., 20.);
143 m_hb_cosSVMom = new TH1F("cosSVMom","SV-PV vs SV momentum ", 100, 0., 1.);
144 m_hb_etaSV = new TH1F("etaSV"," Eta of SV-PV ", 100, -5., 5.);
145 m_hb_fakeSVBDT = new TH1F("fakeSVBDT"," BDT for fake SV rejection", 100, -1., 1.);
146
147 ATH_CHECK( histSvc.regHist(histDir+"massPiPi", m_hb_massPiPi) );
148 ATH_CHECK( histSvc.regHist(histDir+"massPiPi1", m_hb_massPiPi1) );
149 ATH_CHECK( histSvc.regHist(histDir+"massPPi", m_hb_massPPi) );
150 ATH_CHECK( histSvc.regHist(histDir+"massEE", m_hb_massEE ) );
151 ATH_CHECK( histSvc.regHist(histDir+"nvrt2", m_hb_nvrt2) );
152 ATH_CHECK( histSvc.regHist(histDir+"ratio", m_hb_ratio) );
153 ATH_CHECK( histSvc.regHist(histDir+"totmass", m_hb_totmass) );
154 ATH_CHECK( histSvc.regHist(histDir+"impact", m_hb_impact) );
155 ATH_CHECK( histSvc.regHist(histDir+"impactR", m_hb_impactR) );
156 ATH_CHECK( histSvc.regHist(histDir+"impactZ", m_hb_impactZ) );
157 ATH_CHECK( histSvc.regHist(histDir+"impactRZ", m_hb_impactRZ) );
158 ATH_CHECK( histSvc.regHist(histDir+"trkD0", m_hb_trkD0) );
159 ATH_CHECK( histSvc.regHist(histDir+"trkZ", m_hb_trkZ) );
160 ATH_CHECK( histSvc.regHist(histDir+"r2interact",m_hb_r2d) );
161 ATH_CHECK( histSvc.regHist(histDir+"NTrkSel", m_hb_ntrksel) );
162 ATH_CHECK( histSvc.regHist(histDir+"NTrkInput", m_hb_ntrkInput) );
163 ATH_CHECK( histSvc.regHist(histDir+"TrkSelect", m_hb_trkSelect) );
164 ATH_CHECK( histSvc.regHist(histDir+"signif3D", m_hb_signif3D) );
165 ATH_CHECK( histSvc.regHist(histDir+"sig3dcommon", m_hb_sig3DTot) );
166 ATH_CHECK( histSvc.regHist(histDir+"sig3D1tr", m_hb_sig3D1tr) );
167 ATH_CHECK( histSvc.regHist(histDir+"sig3D2tr", m_hb_sig3D2tr) );
168 ATH_CHECK( histSvc.regHist(histDir+"sig3DNtr", m_hb_sig3DNtr) );
169 ATH_CHECK( histSvc.regHist(histDir+"goodvrtN", m_hb_goodvrtN) );
170 ATH_CHECK( histSvc.regHist(histDir+"goodvrt1N", m_hb_goodvrt1N) );
171 ATH_CHECK( histSvc.regHist(histDir+"distVV", m_hb_distVV) );
172 ATH_CHECK( histSvc.regHist(histDir+"diffPS", m_hb_diffPS) );
173 ATH_CHECK( histSvc.regHist(histDir+"rawVrtN", m_hb_rawVrtN) );
174 ATH_CHECK( histSvc.regHist(histDir+"cosSVMom", m_hb_cosSVMom) );
175 ATH_CHECK( histSvc.regHist(histDir+"etaSV", m_hb_etaSV) );
176 ATH_CHECK( histSvc.regHist(histDir+"fakeSVBDT", m_hb_fakeSVBDT) );
177
178 m_tuple = new TTree("Vertices","Vertices");
179 ATH_CHECK( histSvc.regTree(histDir, m_tuple) );
180 m_curTup=new DevTuple();
181 m_tuple->Branch("ntrk", &m_curTup->nTrk, "ntrk/I");
182 m_tuple->Branch("pttrk", &m_curTup->pttrk, "pttrk[ntrk]/F");
183 m_tuple->Branch("d0trk", &m_curTup->d0trk, "d0trk[ntrk]/F");
184 m_tuple->Branch("Sig3D", &m_curTup->Sig3D, "Sig3D[ntrk]/F");
185 m_tuple->Branch("dRdZrat", &m_curTup->dRdZrat, "dRdZrat[ntrk]/F");
186 m_tuple->Branch("idHF", &m_curTup->idHF, "idHF[ntrk]/I");
187 m_tuple->Branch("trkTRT", &m_curTup->trkTRT, "trkTRT[ntrk]/I");
188 m_tuple->Branch("etatrk", &m_curTup->etatrk, "etatrk[ntrk]/F");
189 m_tuple->Branch("displaced", &m_curTup->displaced,"displaced[ntrk]/I");
190 m_tuple->Branch("n2Vrt", &m_curTup->n2Vrt, "n2Vrt/I");
191 m_tuple->Branch("VrtTrkHF", &m_curTup->VrtTrkHF, "VrtTrkHF[n2Vrt]/I");
192 m_tuple->Branch("VrtTrkI", &m_curTup->VrtTrkI, "VrtTrkI[n2Vrt]/I");
193 m_tuple->Branch("VrtCh", &m_curTup->VrtCh, "VrtCh[n2Vrt]/I");
194 m_tuple->Branch("VrtDist2D", &m_curTup->VrtDist2D, "VrtDist2D[n2Vrt]/F");
195 m_tuple->Branch("VrtSig3D", &m_curTup->VrtSig3D, "VrtSig3D[n2Vrt]/F");
196 m_tuple->Branch("VrtSig2D", &m_curTup->VrtSig2D, "VrtSig2D[n2Vrt]/F");
197 m_tuple->Branch("VrtM", &m_curTup->VrtM, "VrtM[n2Vrt]/F");
198 m_tuple->Branch("VrtZ", &m_curTup->VrtZ, "VrtZ[n2Vrt]/F");
199 m_tuple->Branch("VrtPt", &m_curTup->VrtPt, "VrtPt[n2Vrt]/F");
200 m_tuple->Branch("VrtEta", &m_curTup->VrtEta, "VrtEta[n2Vrt]/F");
201 m_tuple->Branch("VrtIBL", &m_curTup->VrtIBL, "VrtIBL[n2Vrt]/I");
202 m_tuple->Branch("VrtBL", &m_curTup->VrtBL, "VrtBL[n2Vrt]/I");
203 m_tuple->Branch("VrtCosSPM", &m_curTup->VrtCosSPM, "VrtCosSPM[n2Vrt]/F");
204 m_tuple->Branch("VMinPtT", &m_curTup->VMinPtT, "VMinPtT[n2Vrt]/F");
205 m_tuple->Branch("VMinS3DT", &m_curTup->VMinS3DT, "VMinS3DT[n2Vrt]/F");
206 m_tuple->Branch("VMaxS3DT", &m_curTup->VMaxS3DT, "VMaxS3DT[n2Vrt]/F");
207 m_tuple->Branch("VrtProb", &m_curTup->VrtProb, "VrtProb[n2Vrt]/F");
208 m_tuple->Branch("VrtHR1", &m_curTup->VrtHR1, "VrtHR1[n2Vrt]/F");
209 m_tuple->Branch("VrtHR2", &m_curTup->VrtHR2, "VrtHR2[n2Vrt]/F");
210 m_tuple->Branch("VrtBDT", &m_curTup->VrtBDT, "VrtBDT[n2Vrt]/F");
211 m_tuple->Branch("VrtDZ", &m_curTup->VrtDZ, "VrtDZ[n2Vrt]/F");
212 m_tuple->Branch("VrtDisk", &m_curTup->VrtDisk, "VrtDisk[n2Vrt]/I");
213 m_tuple->Branch("VrtTrueBar", &m_curTup->VrtTrueBar, "VrtTrueBar[n2Vrt]/I"); //Truth vertex barcode based ident.
214 m_tuple->Branch("VrtTrueNear",&m_curTup->VrtTrueNear,"VrtTrueNear[n2Vrt]/I"); //Truth vertex closeness based ident.
215 m_tuple->Branch("VSigMat", &m_curTup->VSigMat, "VSigMat[n2Vrt]/F");
216 m_tuple->Branch("VrtIT", &m_curTup->VrtIT, "VrtIT[n2Vrt]/I");
217 m_tuple->Branch("VrtJT", &m_curTup->VrtJT, "VrtJT[n2Vrt]/I");
218
219
220 m_tuple->Branch("nNVrt", &m_curTup->nNVrt, "nNVrt/I");
221 m_tuple->Branch("NVrtTrk", &m_curTup->NVrtTrk, "NVrtTrk[nNVrt]/I");
222 m_tuple->Branch("NVrtTrkHF", &m_curTup->NVrtTrkHF, "NVrtTrkHF[nNVrt]/I");
223 m_tuple->Branch("NVrtTrkI", &m_curTup->NVrtTrkI, "NVrtTrkI[nNVrt]/I");
224 m_tuple->Branch("NVrtCh", &m_curTup->NVrtCh, "NVrtCh[nNVrt]/I");
225 m_tuple->Branch("NVrtDist2D", &m_curTup->NVrtDist2D, "NVrtDist2D[nNVrt]/F");
226 m_tuple->Branch("NVrtSig3D", &m_curTup->NVrtSig3D, "NVrtSig3D[nNVrt]/F");
227 m_tuple->Branch("NVrtSig2D", &m_curTup->NVrtSig2D, "NVrtSig2D[nNVrt]/F");
228 m_tuple->Branch("NVrtM", &m_curTup->NVrtM, "NVrtM[nNVrt]/F");
229 m_tuple->Branch("NVrtPt", &m_curTup->NVrtPt, "NVrtPt[nNVrt]/F");
230 m_tuple->Branch("NVrtEta", &m_curTup->NVrtEta, "NVrtEta[nNVrt]/F");
231 m_tuple->Branch("NVrtIBL", &m_curTup->NVrtIBL, "NVrtIBL[nNVrt]/I");
232 m_tuple->Branch("NVrtBL", &m_curTup->NVrtBL, "NVrtBL[nNVrt]/I");
233 m_tuple->Branch("NVrtCosSPM", &m_curTup->NVrtCosSPM, "NVrtCosSPM[nNVrt]/F");
234 m_tuple->Branch("NVMinPtT", &m_curTup->NVMinPtT, "NVMinPtT[nNVrt]/F");
235 m_tuple->Branch("NVMinS3DT", &m_curTup->NVMinS3DT, "NVMinS3DT[nNVrt]/F");
236 m_tuple->Branch("NVrtProb", &m_curTup->NVrtProb, "NVrtProb[nNVrt]/F");
237 m_tuple->Branch("NVrtBDT", &m_curTup->NVrtBDT, "NVrtBDT[nNVrt]/F");
238 m_tuple->Branch("NVrtHR1", &m_curTup->NVrtHR1, "NVrtHR1[nNVrt]/F");
239 m_tuple->Branch("NVrtHR2", &m_curTup->NVrtHR2, "NVrtHR2[nNVrt]/F");
240
241 return StatusCode::SUCCESS;
242 }
243
244
246 {
247 ATH_MSG_DEBUG("NewVrtSecInclusiveTool finalize()");
248 return StatusCode::SUCCESS;
249 }
250
251
252
253 std::unique_ptr<Trk::VxSecVertexInfo> NewVrtSecInclusiveTool::findAllVertices (
254 const std::vector<const xAOD::TrackParticle*> & inpTrk,
255 const xAOD::Vertex & primVrt ) const
256 {
257 std::vector<xAOD::Vertex*> listVrtSec(0);
258
259 if(m_fillHist) {
260 Hists& h = getHists();
261 h.m_curTup->nTrk=0;
262 h.m_curTup->n2Vrt=0;
263 h.m_curTup->nNVrt=0;
264 };
265
266 workVectorArrxAOD * tmpVectxAOD=new workVectorArrxAOD();
267 tmpVectxAOD->inpTrk.resize(inpTrk.size());
268 std::copy(inpTrk.begin(),inpTrk.end(), tmpVectxAOD->inpTrk.begin());
270 tmpVectxAOD->beamX=beamSpotHandle->beamPos().x();
271 tmpVectxAOD->beamY=beamSpotHandle->beamPos().y();
272 tmpVectxAOD->beamZ=beamSpotHandle->beamPos().z();
273 tmpVectxAOD->tanBeamTiltX=tan(beamSpotHandle->beamTilt(0));
274 tmpVectxAOD->tanBeamTiltY=tan(beamSpotHandle->beamTilt(1));
275
276 compatibilityGraph_t compatibilityGraph;
277 listVrtSec = getVrtSecMulti(tmpVectxAOD,primVrt,compatibilityGraph);
278
279 for (const auto trk : tmpVectxAOD->listSelTracks) {
280 // Mark the track as selected
281 m_is_selected(*trk) = true;
283 }
284 delete tmpVectxAOD;
285
286 for (const auto &vrt : listVrtSec) {
287 for (const auto &trk : vrt->trackParticleLinks()) {
288
289 // Mark the track as a final track
290 m_is_svtrk_final(**trk) = true;
291
292 // Get the perigee of the track at the vertex
293 ATH_MSG_VERBOSE(" > " << __FUNCTION__ << ": > Track index " << (*trk)->index() << ": Get the perigee of the track at the vertex." );
294 auto sv_perigee = m_trackToVertexTool->perigeeAtVertex(Gaudi::Hive::currentContext(), **trk, vrt->position() );
295 if( !sv_perigee ) {
296 ATH_MSG_WARNING(" > " << __FUNCTION__ << ": > Track index " << (*trk)->index() << ": Failed in obtaining the SV perigee!" );
297 }
298
299 float qOverP_wrtSV = sv_perigee ? sv_perigee->parameters() [Trk::qOverP] : -FLT_MAX;
300 float theta_wrtSV = sv_perigee ? sv_perigee->parameters() [Trk::theta] : -FLT_MAX;
301 float p_wrtSV = sv_perigee ? 1.0 / std::abs( qOverP_wrtSV ) : -FLT_MAX;
302 float pt_wrtSV = sv_perigee ? p_wrtSV * sin( theta_wrtSV ) : -FLT_MAX;
303 float eta_wrtSV = sv_perigee ? -log( tan( theta_wrtSV/2. ) ) : -FLT_MAX;
304 float phi_wrtSV = sv_perigee ? sv_perigee->parameters() [Trk::phi] : -FLT_MAX;
305 float d0_wrtSV = sv_perigee ? sv_perigee->parameters() [Trk::d0] : -FLT_MAX;
306 float z0_wrtSV = sv_perigee ? sv_perigee->parameters() [Trk::z0] : -FLT_MAX;
307 float errd0_wrtSV = sv_perigee ? std::sqrt((*sv_perigee->covariance())( Trk::d0, Trk::d0 )) : -FLT_MAX;
308 float errz0_wrtSV = sv_perigee ? std::sqrt((*sv_perigee->covariance())( Trk::z0, Trk::z0 )) : -FLT_MAX;
309 float errP_wrtSV = sv_perigee ? std::sqrt((*sv_perigee->covariance())( Trk::qOverP, Trk::qOverP )) : -FLT_MAX;
310
311 m_pt_wrtSV(**trk) = pt_wrtSV;
312 m_eta_wrtSV(**trk) = eta_wrtSV;
313 m_phi_wrtSV(**trk) = phi_wrtSV;
314 m_d0_wrtSV(**trk) = d0_wrtSV;
315 m_z0_wrtSV(**trk) = z0_wrtSV;
316 m_errP_wrtSV(**trk) = errP_wrtSV;
317 m_errd0_wrtSV(**trk) = errd0_wrtSV;
318 m_errz0_wrtSV(**trk) = errz0_wrtSV;
319 }
320 }
321
322 std::unique_ptr<Trk::VxSecVertexInfo> res = std::make_unique<Trk::VxSecVertexInfo>(Trk::VxSecVertexInfo(listVrtSec));
323
324 if(m_fillHist){
325 Hists& h = getHists();
326 h.m_tuple->Fill();
327 };
328
329 lockDecorations (inpTrk);
330
331 return res;
332 }
333
334
335 void NewVrtSecInclusiveTool::lockDecorations (const std::vector<const xAOD::TrackParticle*> & inpTrk) const
336 {
337 // We may have track from several containers. Use this to keep track
338 // of which ones we've processed. We only expect a few distinct ones,
339 // so just use a vector.
340 std::vector<const SG::AuxVectorData*> containers;
341 containers.reserve (16);
342
343 for (const xAOD::TrackParticle* t : inpTrk) {
344 const SG::AuxVectorData* c = t->container();
345 if (c && std::find (containers.begin(), containers.end(), c) == containers.end())
346 {
347 containers.push_back (c);
348 // Ok because we just made these decorations.
350 c_nc->lockDecoration (m_is_selected.auxid());
351 c_nc->lockDecoration (m_is_svtrk_final.auxid());
352 c_nc->lockDecoration (m_pt_wrtSV.auxid());
353 c_nc->lockDecoration (m_eta_wrtSV.auxid());
354 c_nc->lockDecoration (m_phi_wrtSV.auxid());
355 c_nc->lockDecoration (m_d0_wrtSV.auxid());
356 c_nc->lockDecoration (m_z0_wrtSV.auxid());
357 c_nc->lockDecoration (m_errP_wrtSV.auxid());
358 c_nc->lockDecoration (m_errd0_wrtSV.auxid());
359 c_nc->lockDecoration (m_errz0_wrtSV.auxid());
360 c_nc->lockDecoration (m_chi2_toSV.auxid());
361 }
362 }
363 }
364
365
368 {
369 // We earlier checked that no more than one thread is being used.
370 Hists* h ATLAS_THREAD_SAFE = m_h.get();
371 return *h;
372 }
373
374
375} // end Rec namespace
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_FATAL(x)
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
std::pair< std::vector< unsigned int >, bool > res
Define macros for attributes used to control the static checker.
#define ATLAS_THREAD_SAFE
AthAlgTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor with parameters:
Header file for AthHistogramAlgorithm.
ToolHandle< Trk::IExtrapolator > m_extrapolator
ToolHandle< Rec::ITwoTrackVertexSelector > m_ini_v2trselector
SG::AuxElement::Decorator< float > m_eta_wrtSV
SG::AuxElement::Decorator< float > m_chi2_toSV
Gaudi::Property< std::string > m_augString
std::unique_ptr< Trk::VxSecVertexInfo > findAllVertices(const std::vector< const xAOD::TrackParticle * > &inputTracks, const xAOD::Vertex &primaryVertex) const final
SG::AuxElement::Decorator< float > m_errP_wrtSV
SG::AuxElement::Decorator< float > m_z0_wrtSV
std::vector< xAOD::Vertex * > getVrtSecMulti(workVectorArrxAOD *inpParticlesxAOD, const xAOD::Vertex &primVrt, compatibilityGraph_t &compatibilityGraph) const
SG::AuxElement::Decorator< float > m_pt_wrtSV
boost::adjacency_list< boost::listS, boost::vecS, boost::undirectedS > compatibilityGraph_t
SG::AuxElement::Decorator< float > m_errd0_wrtSV
ToolHandle< Rec::ITwoTrackVertexSelector > m_fin_v2trselector
ToolHandle< Trk::TrkVKalVrtFitter > m_fitSvc
SG::AuxElement::Decorator< float > m_errz0_wrtSV
SG::AuxElement::Decorator< float > m_d0_wrtSV
void lockDecorations(const std::vector< const xAOD::TrackParticle * > &inpTrk) const
SG::AuxElement::Decorator< char > m_is_selected
Gaudi::Property< bool > m_fillHist
NewVrtSecInclusiveTool(const std::string &type, const std::string &name, const IInterface *parent)
SG::AuxElement::Decorator< char > m_is_svtrk_final
ToolHandle< Reco::ITrackToVertex > m_trackToVertexTool
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
SG::AuxElement::Decorator< float > m_phi_wrtSV
SG::Decorator< T, ALLOC > Decorator
Definition AuxElement.h:575
Manage lookup of vectors of auxiliary data.
void lockDecoration(SG::auxid_t auxid)
Explicitly lock a decoration.
constexpr double lambdaMassInMeV
the mass of the lambda baryon (in MeV)
Gaudi Tools.
constexpr double mass[PARTICLEHYPOTHESES]
the array of masses
@ theta
Definition ParamDefs.h:66
@ qOverP
perigee
Definition ParamDefs.h:67
@ phi
Definition ParamDefs.h:75
@ d0
Definition ParamDefs.h:63
@ z0
Definition ParamDefs.h:64
const xAOD::TrackParticle * getOriginalTrackParticleFromGSF(const xAOD::TrackParticle *trkPar)
Helper function for getting the "Original" Track Particle (i.e before GSF) via the GSF Track Particle...
@ GaussianSumFilter
Tracks from Gaussian Sum Filter.
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)
std::vector< const xAOD::TrackParticle * > listSelTracks
std::vector< const xAOD::TrackParticle * > inpTrk