ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Reconstruction
egamma
egammaAlgs
src
EMVertexBuilder.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
/***************************************************************************
6
7
EMVertexBuilder.cxx - Description
8
-------------------
9
begin : 11-03-2011
10
authors : Kerstin Tackmann, Bruno Lenzi
11
email : kerstin.tackmann@cern.ch, Bruno.Lenzi@cern.ch
12
changes :
13
Nov 2011 (KT) Initial version
14
Mar 2014 (BL) xAOD migration, creates both double and single track vertices
15
16
***************************************************************************/
17
18
#include "
EMVertexBuilder.h
"
19
20
#include "GaudiKernel/EventContext.h"
21
#include "
xAODTracking/TrackParticleContainer.h
"
22
#include "
xAODTracking/VertexContainer.h
"
23
#include "
xAODTracking/VertexAuxContainer.h
"
24
#include "
xAODEgamma/EgammaxAODHelpers.h
"
25
#include "
StoreGate/ReadHandle.h
"
26
#include "
StoreGate/WriteHandle.h
"
27
#include "
GeoPrimitives/GeoPrimitives.h
"
// Amg::Vector3D
28
29
EMVertexBuilder::EMVertexBuilder
(
const
std::string& name,
30
ISvcLocator* pSvcLocator)
31
:
AthReentrantAlgorithm
(name, pSvcLocator)
32
{
33
}
34
35
StatusCode
EMVertexBuilder::initialize
() {
36
37
ATH_MSG_DEBUG
(
"Initializing "
<< name() <<
"..."
);
38
39
ATH_CHECK
(
m_inputTrackParticleContainerKey
.initialize());
40
ATH_CHECK
(
m_outputConversionContainerKey
.initialize());
41
42
// Get the ID VertexFinderTool
43
ATH_CHECK
(
m_vertexFinderTool
.retrieve());
44
// Retrieve EMExtrapolationTool
45
ATH_CHECK
(
m_EMExtrapolationTool
.retrieve());
46
47
return
StatusCode::SUCCESS;
48
}
49
50
StatusCode
EMVertexBuilder::finalize
() {
51
return
StatusCode::SUCCESS;
52
}
53
54
StatusCode
EMVertexBuilder::execute
(
const
EventContext& ctx)
const
55
{
56
57
//retrieve TrackParticleContainer
58
SG::ReadHandle<xAOD::TrackParticleContainer>
TPCol(
m_inputTrackParticleContainerKey
,ctx);
59
60
// check for serial running only, remove in MT
61
ATH_CHECK
(TPCol.
isValid
());
62
63
std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*> verticesPair =
64
m_vertexFinderTool
->findVertex(ctx,TPCol.
cptr
());
65
66
if
(!verticesPair.first || !verticesPair.second){
67
ATH_MSG_ERROR
(
"Null pointer to conversion container"
);
68
return
StatusCode::SUCCESS;
69
}
70
71
SG::WriteHandle<xAOD::VertexContainer>
vertices(
m_outputConversionContainerKey
,ctx);
72
73
ATH_CHECK
(vertices.
record
(std::unique_ptr<xAOD::VertexContainer>(verticesPair.first),
74
std::unique_ptr<xAOD::VertexAuxContainer>(verticesPair.second)));
75
76
ATH_MSG_DEBUG
(
"New conversion container size: "
<< vertices->size());
77
78
// Remove vertices with radii above m_maxRadius
79
xAOD::VertexContainer::iterator
itVtx = vertices->begin();
80
xAOD::VertexContainer::iterator
itVtxEnd = vertices->end();
81
static
const
SG::AuxElement::Accessor<float> accPx(
"px"
);
82
static
const
SG::AuxElement::Accessor<float> accPy(
"py"
);
83
static
const
SG::AuxElement::Accessor<float> accPz(
"pz"
);
84
//
85
while
(itVtx != itVtxEnd){
86
xAOD::Vertex
* vertex = *itVtx;
87
88
Amg::Vector3D
momentum(0., 0., 0.);
89
for
(
unsigned
int
i = 0; i < vertex->nTrackParticles(); ++i){
90
momentum +=
m_EMExtrapolationTool
->getMomentumAtVertex(ctx,*vertex, i);
91
}
92
93
accPx(*vertex) = momentum.x();
94
accPy(*vertex) = momentum.y();
95
accPz(*vertex) = momentum.z();
96
97
xAOD::EgammaParameters::ConversionType
convType(
xAOD::EgammaHelpers::conversionType
((*itVtx)));
98
const
bool
vxDoubleTRT = (convType ==
xAOD::EgammaParameters::doubleTRT
);
99
const
bool
vxSingleTRT = (convType ==
xAOD::EgammaParameters::singleTRT
);
100
101
if
((vxDoubleTRT && momentum.perp() <
m_minPtCut_DoubleTrack
) ||
102
(vxSingleTRT && momentum.perp() <
m_minPtCut_SingleTrack
) ||
103
((*itVtx)->position().perp() >
m_maxRadius
)) {
104
105
itVtx = vertices->erase(itVtx);
106
itVtxEnd = vertices->end();
107
}
else
{
108
// Decorate the vertices with the momentum at the conversion point and
109
// etaAtCalo, phiAtCalo (extrapolate each vertex)
110
float
etaAtCalo = -9999.;
111
float
phiAtCalo = -9999.;
112
113
if
(!
m_EMExtrapolationTool
->getEtaPhiAtCalo(
114
ctx, vertex, &etaAtCalo, &phiAtCalo)) {
115
ATH_MSG_DEBUG
(
"getEtaPhiAtCalo failed!"
);
116
}
117
118
static
const
SG::AuxElement::Accessor<float> accetaAtCalo(
"etaAtCalo"
);
119
static
const
SG::AuxElement::Accessor<float> accphiAtCalo(
"phiAtCalo"
);
120
accetaAtCalo(*vertex) = etaAtCalo;
121
accphiAtCalo(*vertex) = phiAtCalo;
122
123
++itVtx;
124
}
125
}
126
127
return
StatusCode::SUCCESS;
128
}
ATH_CHECK
#define ATH_CHECK
Evaluate an expression and check for errors.
Definition
AthCheckMacros.h:40
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition
AthMsgStreamMacros.h:33
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition
AthMsgStreamMacros.h:29
EMVertexBuilder.h
EgammaxAODHelpers.h
TrackParticleContainer.h
GeoPrimitives.h
ReadHandle.h
Handle class for reading from StoreGate.
WriteHandle.h
Handle class for recording to StoreGate.
VertexAuxContainer.h
VertexContainer.h
AthReentrantAlgorithm
An algorithm that can be simultaneously executed in multiple threads.
Definition
AthReentrantAlgorithm.h:74
DataVector< xAOD::Vertex_v1 >::iterator
DataModel_detail::iterator< DataVector > iterator
Definition
DataVector.h:842
EMVertexBuilder::m_EMExtrapolationTool
ToolHandle< IEMExtrapolationTools > m_EMExtrapolationTool
EMExtrapolationTool.
Definition
EMVertexBuilder.h:84
EMVertexBuilder::finalize
virtual StatusCode finalize() override final
Definition
EMVertexBuilder.cxx:50
EMVertexBuilder::m_outputConversionContainerKey
SG::WriteHandleKey< xAOD::VertexContainer > m_outputConversionContainerKey
conversion container output name
Definition
EMVertexBuilder.h:74
EMVertexBuilder::execute
virtual StatusCode execute(const EventContext &ctx) const override final
Definition
EMVertexBuilder.cxx:54
EMVertexBuilder::EMVertexBuilder
EMVertexBuilder(const std::string &name, ISvcLocator *pSvcLocator)
Definition
EMVertexBuilder.cxx:29
EMVertexBuilder::m_minPtCut_SingleTrack
Gaudi::Property< float > m_minPtCut_SingleTrack
Definition
EMVertexBuilder.h:65
EMVertexBuilder::m_vertexFinderTool
ToolHandle< InDet::IVertexFinder > m_vertexFinderTool
Tool to find vertices (creates double-track conversions).
Definition
EMVertexBuilder.h:79
EMVertexBuilder::initialize
virtual StatusCode initialize() override final
Definition
EMVertexBuilder.cxx:35
EMVertexBuilder::m_maxRadius
Gaudi::Property< float > m_maxRadius
Maximum radius accepted for conversion vertices.
Definition
EMVertexBuilder.h:57
EMVertexBuilder::m_inputTrackParticleContainerKey
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_inputTrackParticleContainerKey
TrackParticle container input name.
Definition
EMVertexBuilder.h:70
EMVertexBuilder::m_minPtCut_DoubleTrack
Gaudi::Property< float > m_minPtCut_DoubleTrack
Minimum Pt, less than that TRT track are pileup for double/single track conversion.
Definition
EMVertexBuilder.h:61
SG::ReadHandle
Definition
StoreGate/StoreGate/ReadHandle.h:67
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
SG::ReadHandle::cptr
const_pointer_type cptr()
Dereference the pointer.
SG::WriteHandle
Definition
StoreGate/StoreGate/WriteHandle.h:73
SG::WriteHandle::record
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition
GeoPrimitives.h:47
xAOD::EgammaHelpers::conversionType
xAOD::EgammaParameters::ConversionType conversionType(const xAOD::Photon *ph)
return the photon conversion type (see EgammaEnums)
Definition
PhotonxAODHelpers.cxx:21
xAOD::EgammaParameters::ConversionType
ConversionType
Definition
EgammaEnums.h:269
xAOD::EgammaParameters::doubleTRT
@ doubleTRT
two tracks, none with Si hits (TRT only)
Definition
EgammaEnums.h:283
xAOD::EgammaParameters::singleTRT
@ singleTRT
one track only, no Si hits (TRT only)
Definition
EgammaEnums.h:277
xAOD::Vertex
Vertex_v1 Vertex
Define the latest version of the vertex class.
Definition
Event/xAOD/xAODTracking/xAODTracking/Vertex.h:16
Generated on
for ATLAS Offline Software by
1.17.0