ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
InnerDetector
InDetValidation
InDetVertexSplitter
src
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
14
#include "
VxVertex/VxContainer.h
"
15
#include "
VxVertex/VxCandidate.h
"
16
#include "
VxVertex/VxTrackAtVertex.h
"
17
#include "
GeneratorObjects/McEventCollection.h
"
18
19
#include "
xAODEventInfo/EventInfo.h
"
20
22
#include "
InDetVertexSplitterHist.h
"
23
24
#include "TFitter.h"
25
#include <algorithm>
26
#include <cmath>
27
#include <sstream>
28
31
32
InDet::InDetVertexSplitterHist::InDetVertexSplitterHist
(
const
std::string& name,
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
47
InDet::InDetVertexSplitterHist::~InDetVertexSplitterHist
() =
default
;
48
51
52
StatusCode
InDet::InDetVertexSplitterHist::initialize
() {
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
70
StatusCode
InDet::InDetVertexSplitterHist::finalize
() {
71
ATH_MSG_DEBUG
(
"in finalize()"
);
72
73
return
StatusCode::SUCCESS;
74
75
}
76
79
80
StatusCode
InDet::InDetVertexSplitterHist::execute
(
const
EventContext&
/*ctx*/
) {
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
96
StatusCode
InDet::InDetVertexSplitterHist::makeSplitHist
() {
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
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition
AthMsgStreamMacros.h:32
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition
AthMsgStreamMacros.h:29
InDetVertexSplitterHist.h
sc
static Double_t sc
Definition
LArPhysWaveHECTool.cxx:37
McEventCollection.h
VxCandidate.h
VxContainer.h
VxTrackAtVertex.h
AthAlgorithm::AthAlgorithm
AthAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor.
Definition
AthAlgorithm.cxx:10
AthCommonAlgorithm< Gaudi::Algorithm >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
Definition
AthCommonDataStore.h:145
AthCommonAlgorithm< Gaudi::Algorithm >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
Definition
AthCommonDataStore.h:85
DataVector::at
const T * at(size_type n) const
Access an element, as an rvalue.
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
InDet::InDetVertexSplitterHist::m_ntuple
TTree * m_ntuple
Definition
InDetVertexSplitterHist.h:53
InDet::InDetVertexSplitterHist::m_oddBranch
vertexBranch m_oddBranch
Definition
InDetVertexSplitterHist.h:65
InDet::InDetVertexSplitterHist::execute
StatusCode execute(const EventContext &ctx)
Execute - on event by event.
Definition
InDetVertexSplitterHist.cxx:80
InDet::InDetVertexSplitterHist::InDetVertexSplitterHist
InDetVertexSplitterHist(const std::string &name, ISvcLocator *pSvcLocator)
Author: Peter V.
Definition
InDetVertexSplitterHist.cxx:32
InDet::InDetVertexSplitterHist::m_splitVxName
std::string m_splitVxName
Definition
InDetVertexSplitterHist.h:51
InDet::InDetVertexSplitterHist::m_metaData
metaData m_metaData
Definition
InDetVertexSplitterHist.h:67
InDet::InDetVertexSplitterHist::finalize
StatusCode finalize()
Finalize - delete any memory allocation from the heap.
Definition
InDetVertexSplitterHist.cxx:70
InDet::InDetVertexSplitterHist::initialize
StatusCode initialize()
Initialize.
Definition
InDetVertexSplitterHist.cxx:52
InDet::InDetVertexSplitterHist::m_evenBranch
vertexBranch m_evenBranch
Definition
InDetVertexSplitterHist.h:66
InDet::InDetVertexSplitterHist::m_thistSvc
ServiceHandle< ITHistSvc > m_thistSvc
get a handle on the Hist/TTree registration service
Definition
InDetVertexSplitterHist.h:49
InDet::InDetVertexSplitterHist::~InDetVertexSplitterHist
~InDetVertexSplitterHist()
Destructor - check up memory allocation delete any memory allocation on the heap.
InDet::InDetVertexSplitterHist::makeSplitHist
StatusCode makeSplitHist()
Definition
InDetVertexSplitterHist.cxx:96
Trk::Vertex::position
const Amg::Vector3D & position() const
return position of vertex
Definition
Vertex.cxx:63
Trk::VxCandidate
Definition
VxCandidate.h:27
Trk::VxCandidate::vxTrackAtVertex
std::vector< Trk::VxTrackAtVertex * > * vxTrackAtVertex(void)
Unconst pointer to the vector of tracks Required by some of the vertex fitters.
Definition
VxCandidate.h:144
Trk::VxCandidate::recVertex
const Trk::RecVertex & recVertex(void) const
Returns a reference to reconstructed vertex.
Definition
VxCandidate.h:132
VxContainer
Definition
VxContainer.h:28
EventInfo.h
Generated on
for ATLAS Offline Software by
1.17.0