ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
PhysicsAnalysis
AnalysisCommon
ThinningUtils
src
ThinInDetForwardTrackParticlesAlg.cxx
Go to the documentation of this file.
1
2
3
/*
4
Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
5
*/
6
7
// ThinInDetForwardTrackParticlesAlg.cxx
8
// Author: James Catmore <James.Catmore@cern.ch>
9
// Uses thinning service to remove unwanted all InDetForwardTrackParticles
10
// that are not associated with Muons.
11
// Unlike some other algs in this package, no tool is used to select the
12
// objects for thinning - everything is done in this one class.
13
14
// Expression evaluation is also not used.
16
17
// EventUtils includes
18
#include "
ThinInDetForwardTrackParticlesAlg.h
"
19
#include "
xAODMuon/MuonContainer.h
"
20
#include "
xAODTracking/TrackParticleContainer.h
"
21
22
// STL includes
23
#include <algorithm>
24
25
// FrameWork includes
26
#include "Gaudi/Property.h"
27
#include "
StoreGate/ReadHandle.h
"
28
#include "
StoreGate/ThinningHandle.h
"
29
31
// Public methods:
33
34
// Constructors
36
ThinInDetForwardTrackParticlesAlg::ThinInDetForwardTrackParticlesAlg
(
37
const
std::string& name,
38
ISvcLocator* pSvcLocator)
39
:
AthReentrantAlgorithm
(name, pSvcLocator)
40
{
41
}
42
43
// Athena Algorithm's Hooks
45
StatusCode
46
ThinInDetForwardTrackParticlesAlg::initialize
()
47
{
48
ATH_MSG_DEBUG
(
"Initializing "
<< name() <<
"..."
);
49
50
// Print out the used configuration
51
ATH_MSG_DEBUG
(
" using = "
<<
m_streamName
);
52
53
// Is truth thinning required?
54
if
(!
m_doThinning
) {
55
ATH_MSG_INFO
(
"InDetForwardTrackParticles thinning not required"
);
56
}
else
{
57
ATH_MSG_INFO
(
"InDetForwardTrackParticles will be thinned"
);
58
}
59
60
if
(
m_doThinning
&&
m_streamName
.empty()) {
61
ATH_MSG_ERROR
(
"StreamName property was not initialized."
);
62
return
StatusCode::FAILURE;
63
}
64
ATH_CHECK
(
m_tracksKey
.initialize(
m_streamName
,
m_doThinning
));
65
ATH_CHECK
(
m_muonsKey
.initialize(
m_doThinning
&& !
m_muonsKey
.empty()));
66
ATH_MSG_DEBUG
(
"==> done with initialize "
<< name() <<
"..."
);
67
68
return
StatusCode::SUCCESS;
69
}
70
71
StatusCode
72
ThinInDetForwardTrackParticlesAlg::finalize
()
73
{
74
ATH_MSG_DEBUG
(
"Finalizing "
<< name() <<
"..."
);
75
ATH_MSG_INFO
(
"Processed "
<<
m_nEventsProcessed
<<
" events containing: "
);
76
ATH_MSG_INFO
(
" "
<<
m_nTracksProcessed
<<
" InDetForwardTrackParticles"
);
77
ATH_MSG_INFO
(
" "
<<
m_nMuons
<<
" muons of which "
<<
m_nSiFwdMuons
78
<<
" were SiliconAssociatedForward muons"
);
79
ATH_MSG_INFO
(
" "
<<
m_nSiFwdAssoc
80
<<
" of the SiliconAssociatedForward muons were "
81
"associated with InDetForwardTrackParticles"
);
82
ATH_MSG_INFO
(
"Removed "
<<
m_nTracksThinned
<<
" InDetForwardTrackParticles"
);
83
return
StatusCode::SUCCESS;
84
}
85
86
StatusCode
87
ThinInDetForwardTrackParticlesAlg::execute
(
const
EventContext& ctx)
const
88
{
89
// Increase the event counter
90
m_nEventsProcessed
.fetch_add(1, std::memory_order_relaxed);
91
92
// Is truth thinning required?
93
if
(!
m_doThinning
) {
94
return
StatusCode::SUCCESS;
95
}
96
97
// Retrieve InDetForwardTrackParticles container
98
SG::ThinningHandle<xAOD::TrackParticleContainer>
tracks(
m_tracksKey
, ctx);
99
100
// Set up mask and set the main counters
101
std::vector<bool> trackMask;
102
unsigned
int
nTracks = tracks->size();
103
m_nTracksProcessed
.fetch_add(nTracks, std::memory_order_relaxed);
104
trackMask.assign(nTracks,
false
);
105
106
unsigned
int
nSiFwdAssoc = 0;
107
unsigned
int
nSiFwdMuons = 0;
108
109
// Loop over the muons. Identify which are SiliconAssociatedForwardMuon.
110
// Get their associated inner detector track. Find that track in the
111
// InDetForwardTrackParticles. Set the mask element.
112
// Only if muons are provided as inputs
113
114
if
(!
m_muonsKey
.empty()){
115
SG::ReadHandle<xAOD::MuonContainer>
muons(
m_muonsKey
, ctx);
116
m_nMuons
.fetch_add(muons->size(), std::memory_order_relaxed);
117
118
for
(
const
auto
* muon : *muons) {
119
if
(muon->muonType() == xAOD::Muon::MuonType::SiliconAssociatedForwardMuon) {
120
++nSiFwdMuons;
121
const
xAOD::TrackParticle
* muTrk = muon->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle);
122
123
if
(muTrk !=
nullptr
) {
124
auto
search
= std::find(tracks->begin(), tracks->end(), muTrk);
125
if
(
search
!= tracks->end()) {
126
++nSiFwdAssoc;
127
trackMask[(*search)->index()] =
true
;
128
}
129
}
130
}
131
}
132
}
133
134
m_nSiFwdAssoc
.fetch_add(nSiFwdAssoc, std::memory_order_relaxed);
135
m_nSiFwdMuons
.fetch_add(nSiFwdMuons, std::memory_order_relaxed);
136
137
// Increment counters
138
unsigned
int
nTracksThinned = 0;
139
for
(
unsigned
int
i = 0; i < nTracks; ++i) {
140
if
(!trackMask[i])
141
++nTracksThinned;
142
}
143
m_nTracksThinned
.fetch_add(nTracksThinned, std::memory_order_relaxed);
144
// Apply masks to thinning service
145
tracks.
keep
(trackMask);
146
147
return
StatusCode::SUCCESS;
148
}
149
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_INFO
#define ATH_MSG_INFO(x)
Definition
AthMsgStreamMacros.h:31
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition
AthMsgStreamMacros.h:29
MuonContainer.h
TrackParticleContainer.h
ReadHandle.h
Handle class for reading from StoreGate.
ThinInDetForwardTrackParticlesAlg.h
ThinningHandle.h
Handle for requesting thinning for a data object.
AthReentrantAlgorithm
An algorithm that can be simultaneously executed in multiple threads.
Definition
AthReentrantAlgorithm.h:74
SG::ReadHandle
Definition
StoreGate/StoreGate/ReadHandle.h:67
SG::ThinningHandleBase::keep
void keep(size_t ndx)
Mark that index ndx in the container should be kept (not thinned away).
Definition
ThinningHandleBase.cxx:75
SG::ThinningHandle
Handle for requesting thinning for a data object.
Definition
ThinningHandle.h:84
ThinInDetForwardTrackParticlesAlg::m_nSiFwdAssoc
std::atomic< unsigned long > m_nSiFwdAssoc
Definition
ThinInDetForwardTrackParticlesAlg.h:76
ThinInDetForwardTrackParticlesAlg::m_nEventsProcessed
std::atomic< unsigned long > m_nEventsProcessed
Counters.
Definition
ThinInDetForwardTrackParticlesAlg.h:71
ThinInDetForwardTrackParticlesAlg::m_nTracksThinned
std::atomic< unsigned long > m_nTracksThinned
Definition
ThinInDetForwardTrackParticlesAlg.h:73
ThinInDetForwardTrackParticlesAlg::m_streamName
StringProperty m_streamName
Definition
ThinInDetForwardTrackParticlesAlg.h:47
ThinInDetForwardTrackParticlesAlg::ThinInDetForwardTrackParticlesAlg
ThinInDetForwardTrackParticlesAlg(const std::string &name, ISvcLocator *pSvcLocator)
Constructor with parameters:
Definition
ThinInDetForwardTrackParticlesAlg.cxx:36
ThinInDetForwardTrackParticlesAlg::initialize
virtual StatusCode initialize() override
Athena algorithm's initalize hook.
Definition
ThinInDetForwardTrackParticlesAlg.cxx:46
ThinInDetForwardTrackParticlesAlg::m_nSiFwdMuons
std::atomic< unsigned long > m_nSiFwdMuons
Definition
ThinInDetForwardTrackParticlesAlg.h:75
ThinInDetForwardTrackParticlesAlg::m_tracksKey
SG::ThinningHandleKey< xAOD::TrackParticleContainer > m_tracksKey
Definition
ThinInDetForwardTrackParticlesAlg.h:52
ThinInDetForwardTrackParticlesAlg::execute
virtual StatusCode execute(const EventContext &ctx) const override
Athena algorithm's execute hook.
Definition
ThinInDetForwardTrackParticlesAlg.cxx:87
ThinInDetForwardTrackParticlesAlg::finalize
virtual StatusCode finalize() override
Athena algorithm's finalize hook.
Definition
ThinInDetForwardTrackParticlesAlg.cxx:72
ThinInDetForwardTrackParticlesAlg::m_nMuons
std::atomic< unsigned long > m_nMuons
Definition
ThinInDetForwardTrackParticlesAlg.h:74
ThinInDetForwardTrackParticlesAlg::m_muonsKey
SG::ReadHandleKey< xAOD::MuonContainer > m_muonsKey
Definition
ThinInDetForwardTrackParticlesAlg.h:60
ThinInDetForwardTrackParticlesAlg::m_nTracksProcessed
std::atomic< unsigned long > m_nTracksProcessed
Definition
ThinInDetForwardTrackParticlesAlg.h:72
ThinInDetForwardTrackParticlesAlg::m_doThinning
BooleanProperty m_doThinning
Should the thinning run?
Definition
ThinInDetForwardTrackParticlesAlg.h:63
search
void search(TDirectory *td, const std::string &s, std::string cwd, node *n)
recursive directory search for TH1 and TH2 and TProfiles
Definition
hcg.cxx:743
xAOD::TrackParticle
TrackParticle_v1 TrackParticle
Reference the current persistent version:
Definition
Event/xAOD/xAODTracking/xAODTracking/TrackParticle.h:13
Generated on
for ATLAS Offline Software by
1.17.0