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 EventContext &ctx) 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 23 of file HIJetTrackParticleThinningTool.cxx.

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

◆ ~HIJetTrackParticleThinningTool()

DerivationFramework::HIJetTrackParticleThinningTool::~HIJetTrackParticleThinningTool ( )
virtual

Definition at line 31 of file HIJetTrackParticleThinningTool.cxx.

31 {
32 }

Member Function Documentation

◆ doThinning()

StatusCode DerivationFramework::HIJetTrackParticleThinningTool::doThinning ( const EventContext & ctx) const
overridevirtual

Definition at line 58 of file HIJetTrackParticleThinningTool.cxx.

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

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

◆ initialize()

StatusCode DerivationFramework::HIJetTrackParticleThinningTool::initialize ( )
overridevirtual

Definition at line 35 of file HIJetTrackParticleThinningTool.cxx.

35 {
36
37 // Validate m_vertexScheme
38 if (m_vertexScheme != "sumPt2" && m_vertexScheme != "nTracks" ) {
39 ATH_MSG_ERROR("Invalid PrimaryVertexSelection: " << m_vertexScheme);
40 return StatusCode::FAILURE;
41 }
42
43 ATH_CHECK(m_vertexKey.initialize());
44 ATH_CHECK(m_jetKey.initialize());
45 ATH_CHECK(m_sumPt2Key.initialize(m_vertexScheme == "sumPt2"));
46 ATH_CHECK(m_trkSelTool.retrieve());
48 return StatusCode::SUCCESS;
49 }
#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: