20#include "GaudiKernel/EventContext.h"
30 ISvcLocator* pSvcLocator)
47 return StatusCode::SUCCESS;
51 return StatusCode::SUCCESS;
63 std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*> verticesPair =
66 if (!verticesPair.first || !verticesPair.second){
68 return StatusCode::SUCCESS;
73 ATH_CHECK(vertices.
record(std::unique_ptr<xAOD::VertexContainer>(verticesPair.first),
74 std::unique_ptr<xAOD::VertexAuxContainer>(verticesPair.second)));
76 ATH_MSG_DEBUG(
"New conversion container size: " << vertices->size());
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");
85 while (itVtx != itVtxEnd){
89 for (
unsigned int i = 0; i < vertex->nTrackParticles(); ++i){
93 accPx(*vertex) = momentum.x();
94 accPy(*vertex) = momentum.y();
95 accPz(*vertex) = momentum.z();
105 itVtx = vertices->erase(itVtx);
106 itVtxEnd = vertices->end();
110 float etaAtCalo = -9999.;
111 float phiAtCalo = -9999.;
114 ctx, vertex, &etaAtCalo, &phiAtCalo)) {
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;
127 return StatusCode::SUCCESS;
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_DEBUG(x,...)
#define ATH_MSG_ERROR(x,...)
Handle class for reading from StoreGate.
Handle class for recording to StoreGate.
An algorithm that can be simultaneously executed in multiple threads.
DataModel_detail::iterator< DataVector > iterator
ToolHandle< IEMExtrapolationTools > m_EMExtrapolationTool
EMExtrapolationTool.
virtual StatusCode finalize() override final
SG::WriteHandleKey< xAOD::VertexContainer > m_outputConversionContainerKey
conversion container output name
virtual StatusCode execute(const EventContext &ctx) const override final
EMVertexBuilder(const std::string &name, ISvcLocator *pSvcLocator)
Gaudi::Property< float > m_minPtCut_SingleTrack
ToolHandle< InDet::IVertexFinder > m_vertexFinderTool
Tool to find vertices (creates double-track conversions).
virtual StatusCode initialize() override final
Gaudi::Property< float > m_maxRadius
Maximum radius accepted for conversion vertices.
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_inputTrackParticleContainerKey
TrackParticle container input name.
Gaudi::Property< float > m_minPtCut_DoubleTrack
Minimum Pt, less than that TRT track are pileup for double/single track conversion.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
const_pointer_type cptr()
Dereference the pointer.
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
Eigen::Matrix< double, 3, 1 > Vector3D
xAOD::EgammaParameters::ConversionType conversionType(const xAOD::Photon *ph)
return the photon conversion type (see EgammaEnums)
@ doubleTRT
two tracks, none with Si hits (TRT only)
@ singleTRT
one track only, no Si hits (TRT only)
Vertex_v1 Vertex
Define the latest version of the vertex class.