ATLAS Offline Software
Loading...
Searching...
No Matches
DerivationFramework::HIJetTrackParticleThinningTool Class Reference

#include <HIJetTrackParticleThinningTool.h>

Inheritance diagram for DerivationFramework::HIJetTrackParticleThinningTool:
Collaboration diagram for DerivationFramework::HIJetTrackParticleThinningTool:

Public Member Functions

 HIJetTrackParticleThinningTool (const std::string &t, const std::string &n, const IInterface *p)
virtual ~HIJetTrackParticleThinningTool ()
virtual StatusCode initialize () override
virtual StatusCode finalize () override
virtual StatusCode doThinning () const override

Private Attributes

StringProperty m_streamName { this, "StreamName", "", "Name of the stream being thinned" }
SG::ReadHandleKey< xAOD::VertexContainerm_vertexKey { this, "PrimaryVertexKey", "PrimaryVertices", "Primary vertex container"}
SG::ReadHandleKey< xAOD::JetContainerm_jetKey { this, "JetKey", "", "Jet collection container"}
SG::ReadDecorHandleKey< xAOD::VertexContainerm_sumPt2Key { this, "SumPt2Key", "PrimaryVertices.sumPt2", "SumPt2 decoration"}
SG::ThinningHandleKey< xAOD::TrackParticleContainerm_inDetSGKey { this, "InDetTrackParticlesKey", "InDetTrackParticles", "" }
ToolHandle< InDet::IInDetTrackSelectionToolm_trkSelTool { this, "TrackSelectionTool", "", "Track selection tool"}
Gaudi::Property< std::string > m_vertexScheme { this, "PrimaryVertexSelection", "sumPt2", "Vertex selection scheme"}
std::atomic< unsigned int > m_ntot = 0
std::atomic< unsigned int > m_npass = 0

Detailed Description

Definition at line 30 of file HIJetTrackParticleThinningTool.h.

Constructor & Destructor Documentation

◆ HIJetTrackParticleThinningTool()

DerivationFramework::HIJetTrackParticleThinningTool::HIJetTrackParticleThinningTool ( const std::string & t,
const std::string & n,
const IInterface * p )

Definition at line 24 of file HIJetTrackParticleThinningTool.cxx.

27 :
28
29 base_class(t,n,p) {}

◆ ~HIJetTrackParticleThinningTool()

DerivationFramework::HIJetTrackParticleThinningTool::~HIJetTrackParticleThinningTool ( )
virtual

Definition at line 32 of file HIJetTrackParticleThinningTool.cxx.

32 {
33 }

Member Function Documentation

◆ doThinning()

StatusCode DerivationFramework::HIJetTrackParticleThinningTool::doThinning ( ) const
overridevirtual

Definition at line 59 of file HIJetTrackParticleThinningTool.cxx.

59 {
60 // Get current event context
61 const EventContext& ctx = Gaudi::Hive::currentContext();
62
63 // Get TrackParticle collection
64 SG::ThinningHandle<xAOD::TrackParticleContainer> tracks (m_inDetSGKey, ctx);
65
66 // Check event contains tracks, if none then thinning complete!
67 unsigned int nTracks = tracks->size();
68 if (nTracks==0) return StatusCode::SUCCESS;
69
70 // Set up a mask with same entires as full TrackParticle collection
71 std::vector<bool> mask(nTracks,false); // reject all tracks by default
72 m_ntot += nTracks;
73
74 // Define a primary vertex
75 const xAOD::Vertex *primary_vertex(nullptr);
76
77 // Retrieve vertex container
78 SG::ReadHandle<xAOD::VertexContainer> vtxC(m_vertexKey,ctx);
79 ATH_CHECK(vtxC.isValid());
80
81 // Retrieve jet containers
82 SG::ReadHandle<xAOD::JetContainer> importedJets(m_jetKey,ctx);
83 ATH_CHECK(importedJets.isValid());
84
85 // Variables for tracking best vertex based on scheme
86 float ptmax = 0.;
87 std::size_t ntrkmax = 0;
88
89 // Retrieve sumPt2 decoration
90 SG::ReadDecorHandle<xAOD::VertexContainer, float> sumPt2Handle(m_sumPt2Key, ctx);
91 ATH_CHECK(sumPt2Handle.isValid());
92
93 // Iterate through vertices to find the primary vertex
94 for (const xAOD::Vertex* vertex : *vtxC) {
95 if (!vertex || vertex->vertexType() != xAOD::VxType::PriVtx) {
96 continue;
97 }
98
99 if (m_vertexScheme == "sumPt2") {
100 float sumPt = sumPt2Handle(*vertex);
101 if (sumPt > ptmax) {
102 ptmax = sumPt;
103 primary_vertex = vertex;
104 }
105 }
106 else {
107 std::size_t ntp = vertex->nTrackParticles();
108 if (ntp > ntrkmax) {
109 ntrkmax = ntp;
110 primary_vertex = vertex;
111 }
112 }
113 }
114
115 if (!primary_vertex) {
116 ATH_MSG_DEBUG("No primary vertex found.");
117 }
118
119 // Iterate through jets, get associated tracks, set mask if passing thinning
120 for (const auto *jet : *importedJets) {
121 std::vector<const xAOD::TrackParticle*> jetTracks;
122 bool haveJetTracks = jet->getAssociatedObjects(xAOD::JetAttribute::GhostTrack, jetTracks);
123 if ( !haveJetTracks ) { ATH_MSG_WARNING("Associated jet tracks not found!"); }
124 else {
125 for (auto & jetTrack : jetTracks) {
126 const xAOD::Vertex* vert_trk = primary_vertex;
127
128 asg::AcceptData acceptData = m_trkSelTool->accept(*jetTrack, vert_trk);
129 int index = jetTrack->index();
130 mask[index] = static_cast<bool>(acceptData);
131 }
132 }
133 }
134
135 // Count up mask contents
136 unsigned int n_pass=0;
137 for (unsigned int i=0; i<nTracks; ++i) {
138 if (mask[i]) ++n_pass;
139 }
140 m_npass += n_pass;
141
142 tracks.keep (mask);
143
144 return StatusCode::SUCCESS;
145 }
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
SG::ReadDecorHandleKey< xAOD::VertexContainer > m_sumPt2Key
SG::ThinningHandleKey< xAOD::TrackParticleContainer > m_inDetSGKey
ToolHandle< InDet::IInDetTrackSelectionTool > m_trkSelTool
double ptmax
str index
Definition DeMoScan.py:362
@ PriVtx
Primary vertex.
Vertex_v1 Vertex
Define the latest version of the vertex class.

◆ finalize()

StatusCode DerivationFramework::HIJetTrackParticleThinningTool::finalize ( )
overridevirtual

Definition at line 52 of file HIJetTrackParticleThinningTool.cxx.

52 {
53 ATH_CHECK(m_trkSelTool->finalize());
54 ATH_MSG_INFO("Processed "<< m_ntot <<" tracks, "<< m_npass << " were retained.");
55 return StatusCode::SUCCESS;
56 }
#define ATH_MSG_INFO(x)

◆ initialize()

StatusCode DerivationFramework::HIJetTrackParticleThinningTool::initialize ( )
overridevirtual

Definition at line 36 of file HIJetTrackParticleThinningTool.cxx.

36 {
37
38 // Validate m_vertexScheme
39 if (m_vertexScheme != "sumPt2" && m_vertexScheme != "nTracks" ) {
40 ATH_MSG_ERROR("Invalid PrimaryVertexSelection: " << m_vertexScheme);
41 return StatusCode::FAILURE;
42 }
43
44 ATH_CHECK(m_vertexKey.initialize());
45 ATH_CHECK(m_jetKey.initialize());
46 ATH_CHECK(m_sumPt2Key.initialize(m_vertexScheme == "sumPt2"));
47 ATH_CHECK(m_trkSelTool.retrieve());
49 return StatusCode::SUCCESS;
50 }
#define ATH_MSG_ERROR(x)

Member Data Documentation

◆ m_inDetSGKey

SG::ThinningHandleKey<xAOD::TrackParticleContainer> DerivationFramework::HIJetTrackParticleThinningTool::m_inDetSGKey { this, "InDetTrackParticlesKey", "InDetTrackParticles", "" }
private

Definition at line 56 of file HIJetTrackParticleThinningTool.h.

57{ this, "InDetTrackParticlesKey", "InDetTrackParticles", "" };

◆ m_jetKey

SG::ReadHandleKey<xAOD::JetContainer> DerivationFramework::HIJetTrackParticleThinningTool::m_jetKey { this, "JetKey", "", "Jet collection container"}
private

Definition at line 52 of file HIJetTrackParticleThinningTool.h.

53{ this, "JetKey", "", "Jet collection container"};

◆ m_npass

std::atomic<unsigned int> DerivationFramework::HIJetTrackParticleThinningTool::m_npass = 0
mutableprivate

Definition at line 65 of file HIJetTrackParticleThinningTool.h.

◆ m_ntot

std::atomic<unsigned int> DerivationFramework::HIJetTrackParticleThinningTool::m_ntot = 0
mutableprivate

Definition at line 64 of file HIJetTrackParticleThinningTool.h.

◆ m_streamName

StringProperty DerivationFramework::HIJetTrackParticleThinningTool::m_streamName { this, "StreamName", "", "Name of the stream being thinned" }
private

Definition at line 47 of file HIJetTrackParticleThinningTool.h.

48{ this, "StreamName", "", "Name of the stream being thinned" };

◆ m_sumPt2Key

SG::ReadDecorHandleKey<xAOD::VertexContainer> DerivationFramework::HIJetTrackParticleThinningTool::m_sumPt2Key { this, "SumPt2Key", "PrimaryVertices.sumPt2", "SumPt2 decoration"}
private

Definition at line 54 of file HIJetTrackParticleThinningTool.h.

55{ this, "SumPt2Key", "PrimaryVertices.sumPt2", "SumPt2 decoration"};

◆ m_trkSelTool

ToolHandle<InDet::IInDetTrackSelectionTool> DerivationFramework::HIJetTrackParticleThinningTool::m_trkSelTool { this, "TrackSelectionTool", "", "Track selection tool"}
private

Definition at line 59 of file HIJetTrackParticleThinningTool.h.

60{ this, "TrackSelectionTool", "", "Track selection tool"};

◆ m_vertexKey

SG::ReadHandleKey<xAOD::VertexContainer> DerivationFramework::HIJetTrackParticleThinningTool::m_vertexKey { this, "PrimaryVertexKey", "PrimaryVertices", "Primary vertex container"}
private

Definition at line 50 of file HIJetTrackParticleThinningTool.h.

51{ this, "PrimaryVertexKey", "PrimaryVertices", "Primary vertex container"};

◆ m_vertexScheme

Gaudi::Property<std::string> DerivationFramework::HIJetTrackParticleThinningTool::m_vertexScheme { this, "PrimaryVertexSelection", "sumPt2", "Vertex selection scheme"}
private

Definition at line 61 of file HIJetTrackParticleThinningTool.h.

62{ this, "PrimaryVertexSelection", "sumPt2", "Vertex selection scheme"};

The documentation for this class was generated from the following files: