ATLAS Offline Software
Loading...
Searching...
No Matches
InDetVertexSplitterHist.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3*/
4
5
10
11#include "GaudiKernel/MsgStream.h"
12#include "GaudiKernel/ITHistSvc.h"
13
18
20
23
24#include "TFitter.h"
25#include <algorithm>
26#include <cmath>
27#include <sstream>
28
31
33 ISvcLocator* pSvcLocator) :
34 AthAlgorithm(name, pSvcLocator),
35 m_thistSvc("THistSvc",name),
36 m_ntuple(nullptr)
37{
38 declareProperty("SpitVxContainer",m_splitVxName = "SplitVxCandidates");
39 declareProperty("HistService",m_thistSvc);
40
41}
42
46
48
51
53 ATH_MSG_DEBUG("Initializing InDetVertexSplitterHist");
54
55 StatusCode sc = StatusCode::SUCCESS;
56
57 m_ntuple = new TTree("splitVertex","Split Vertices");
58
59 m_ntuple->Branch("odd",&m_oddBranch,"tracks_odd/I:x_odd/F:y_odd:z_odd:c00_odd:c01_odd:c11_odd:c22_odd");
60 m_ntuple->Branch("even",&m_evenBranch,"tracks_even/I:x_even/F:y_even:z_even:c00_even:c01_even:c11_even:c22_even");
61 m_ntuple->Branch("meta",&m_metaData,"run/I:lumi:event");
62 sc = m_thistSvc->regTree("/AANT/ntuple",m_ntuple);
63
64 return StatusCode::SUCCESS;
65}
66
69
71 ATH_MSG_DEBUG("in finalize()");
72
73 return StatusCode::SUCCESS;
74
75}
76
79
81
82 ATH_MSG_DEBUG("in execute()");
83
84 StatusCode sc = StatusCode::SUCCESS;
85
86 sc = makeSplitHist();
87 if (sc.isFailure()) {
88 return sc;
89 }
90
91 return sc;
92}
93
95
97 ATH_MSG_DEBUG("in makeSplitHist()");
98
99 StatusCode sc = StatusCode::SUCCESS;
100
101 const VxContainer* vxCont = nullptr;
102 sc = evtStore()->retrieve(vxCont, m_splitVxName);
103 if(sc.isSuccess()){
104 ATH_MSG_DEBUG("Retrieved vertex container " << m_splitVxName);
105 }
106 else{
107 ATH_MSG_WARNING("Failed to retrieve vertex container " << m_splitVxName);
108 return StatusCode::FAILURE;
109 }
110
111 int vcsize = ((int)vxCont->size() - 1)/2;
112 int vxi = 0;
113 while ( vxi < vcsize){
114 const Trk::VxCandidate *vxContO = vxCont->at(2*vxi);
115 const Trk::VxCandidate *vxContE = vxCont->at(2*vxi+1);
116 if( vxContO->vxTrackAtVertex()->empty() or vxContE->vxTrackAtVertex()->empty())
117 {ATH_MSG_DEBUG("Found a vertex with no tracks, skipping it");}
118 else{
119 float xo = vxContO->recVertex().position().x();
120 float xeo = vxContO->recVertex().covariancePosition()(0,0);
121 float yo = vxContO->recVertex().position().y();
122 float yeo = vxContO->recVertex().covariancePosition()(1,1);
123 float zo = vxContO->recVertex().position().z();
124 float zeo =vxContO->recVertex().covariancePosition()(2,2);
125 float cxyo = vxContO->recVertex().covariancePosition()(0,1);
126 int so = vxContO->vxTrackAtVertex()->size();
127
128 float xe = vxContE->recVertex().position().x();
129 float xee = vxContE->recVertex().covariancePosition()(0,0);
130 float ye = vxContE->recVertex().position().y();
131 float yee = vxContE->recVertex().covariancePosition()(1,1);
132 float ze = vxContE->recVertex().position().z();
133 float zee =vxContE->recVertex().covariancePosition()(2,2);
134 float cxye = vxContE->recVertex().covariancePosition()(0,1);
135 int se = vxContE->vxTrackAtVertex()->size();
136
137 m_oddBranch.size=so;
138 m_oddBranch.x=xo;
139 m_oddBranch.y=yo;
140 m_oddBranch.z=zo;
141 m_oddBranch.c00=xeo;
142 m_oddBranch.c01=cxyo;
143 m_oddBranch.c11=yeo;
144 m_oddBranch.c22=zeo;
145
146 m_evenBranch.size=se;
147 m_evenBranch.x=xe;
148 m_evenBranch.y=ye;
149 m_evenBranch.z=ze;
150 m_evenBranch.c00=xee;
151 m_evenBranch.c01=cxye;
152 m_evenBranch.c11=yee;
153 m_evenBranch.c22=zee;
154
155 const EventContext& ctx = Gaudi::Hive::currentContext();
156 m_metaData.lumi = ctx.eventID().lumi_block();
157 m_metaData.run = ctx.eventID().run_number();
158 m_metaData.event = ctx.eventID().event_number();
159 m_ntuple->Fill();
160 }
161 vxi++;
162 }
163 return StatusCode::SUCCESS;
164}
165
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
static Double_t sc
AthAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor with parameters:
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
const T * at(size_type n) const
Access an element, as an rvalue.
size_type size() const noexcept
Returns the number of elements in the collection.
InDetVertexSplitterHist(const std::string &name, ISvcLocator *pSvcLocator)
Author: Peter V.
StatusCode finalize()
Finalize - delete any memory allocation from the heap.
StatusCode execute()
Execute - on event by event.
ServiceHandle< ITHistSvc > m_thistSvc
get a handle on the Hist/TTree registration service
~InDetVertexSplitterHist()
Destructor - check up memory allocation delete any memory allocation on the heap.
const Amg::Vector3D & position() const
return position of vertex
Definition Vertex.cxx:63
std::vector< Trk::VxTrackAtVertex * > * vxTrackAtVertex(void)
Unconst pointer to the vector of tracks Required by some of the vertex fitters.
const Trk::RecVertex & recVertex(void) const
Returns a reference to reconstructed vertex.