ATLAS Offline Software
Loading...
Searching...
No Matches
PV0TrackSelectionAlg.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
6
7PV0TrackSelectionAlg::PV0TrackSelectionAlg( const std::string& name, ISvcLocator* pSvcLocator ) :
8 AthReentrantAlgorithm( name, pSvcLocator ){}
9
11 ATH_CHECK(m_inTrackKey.initialize());
12 ATH_CHECK(m_vertexKey.initialize());
13 ATH_CHECK(m_outTrackKey.initialize());
14
16
17 ATH_CHECK(m_TVATool.retrieve());
18
19 return StatusCode::SUCCESS;
20}
21
23 return StatusCode::SUCCESS;
24}
25
26StatusCode PV0TrackSelectionAlg::execute(const EventContext& ctx) const{
27
28 ATH_MSG_DEBUG ("Executing " << name() << "...");
29
32
33 if (!inTracks.isValid() || !vertices.isValid()) {
34 if (!inTracks.isValid()) ATH_MSG_ERROR("TrackParticle container not found: " << m_inTrackKey.key());
35 if (!vertices.isValid()) ATH_MSG_ERROR("Vertex container not found: " << m_vertexKey.key());
36 return StatusCode::FAILURE;
37 }
38
39 // Find the primary vertex
40 const xAOD::Vertex* pv(nullptr);
41 for(const xAOD::Vertex* vertex : *vertices){
42 if(vertex->vertexType() == xAOD::VxType::PriVtx){
43 pv = vertex;
44 break;
45 }
46 }
47
48 auto pv0tracks = std::make_unique<ConstDataVector<xAOD::TrackParticleContainer> >( SG::VIEW_ELEMENTS );
49
50 if(pv != nullptr){
51 for(const xAOD::TrackParticle* track : *inTracks) {
52 if(m_TVATool->isCompatible(*track, *pv) ) pv0tracks->push_back(track);
53 }
54 }
55 else ATH_MSG_DEBUG("No primary vertex found. Selecting no tracks.");
56
57 std::unique_ptr<const xAOD::TrackParticleContainer> outTracksC(pv0tracks.release()->asDataVector());
59
60 if(outTrackHandle.put(std::move(outTracksC)) == nullptr){
61 ATH_MSG_ERROR("Failed to record " << m_outTrackKey.key() << " as const xAOD::TrackParticleContainer!");
62 return StatusCode::FAILURE;
63 }
64 ATH_CHECK(m_decorDeps.linkDecors (m_inTrackKey, ctx));
65
66 return StatusCode::SUCCESS;
67}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_DEBUG(x)
An algorithm that can be simultaneously executed in multiple threads.
SG::ReadHandleKey< xAOD::VertexContainer > m_vertexKey
StatusCode execute(const EventContext &) const override
SG::WriteHandleKey< xAOD::TrackParticleContainer > m_outTrackKey
StatusCode finalize() override
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_inTrackKey
SG::ShallowCopyDecorDeps< xAOD::TrackParticleContainer > m_decorDeps
ToolHandle< CP::ITrackVertexAssociationTool > m_TVATool
StatusCode initialize() override
virtual bool isValid() override final
Can the handle be successfully dereferenced?
const_pointer_type put(std::unique_ptr< T > data, bool returnExisting=false) const
Record an object to the store.
@ VIEW_ELEMENTS
this data object is a view, it does not own its elmts
@ PriVtx
Primary vertex.
TrackParticle_v1 TrackParticle
Reference the current persistent version:
Vertex_v1 Vertex
Define the latest version of the vertex class.