ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Trigger
TrigT1
TrigT1CaloCalibTools
src
TriggerTowerThinningAlg.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3
*/
4
// ***************************************************************************
5
// * Author: John Morris (john.morris@cern.ch) *
6
// * Queen Mary University of London *
7
// * *
8
21
22
#include "
TrigT1CaloCalibTools/TriggerTowerThinningAlg.h
"
23
// TrigT1 common definitions
24
#include "
TrigT1Interfaces/TrigT1CaloDefs.h
"
25
#include "
StoreGate/ThinningHandle.h
"
26
#include "
StoreGate/ReadDecorHandle.h
"
27
#include "
AthenaKernel/RNGWrapper.h
"
28
#include "CLHEP/Random/RandomEngine.h"
29
#include "CLHEP/Random/RandFlat.h"
30
31
namespace
DerivationFramework
{
32
33
TriggerTowerThinningAlg::TriggerTowerThinningAlg
(
const
std::string& t,
const
std::string& n,
const
IInterface* p) :
34
base_class(t,n,p),
35
m_minCaloCellET
(0.4),
36
m_minADC
(32),
37
m_useRandom
(false),
38
m_minRandom
(0.03),
39
m_nEventsProcessed
(0),
40
m_nEventsAllTriggerTowersKeptByRandom
(0),
41
m_nTriggerTowersProcessed
(0),
42
m_nTriggerTowersKept
(0),
43
m_nTriggerTowersRejected
(0)
44
{
45
declareProperty(
"MinCaloCellET"
,
m_minCaloCellET
);
46
declareProperty(
"MinADC"
,
m_minADC
);
47
declareProperty(
"UseRandom"
,
m_useRandom
);
48
declareProperty(
"MinRandom"
,
m_minRandom
);
49
}
50
51
TriggerTowerThinningAlg::~TriggerTowerThinningAlg
()
52
{
53
}
54
55
StatusCode
TriggerTowerThinningAlg::initialize
(){
56
ATH_MSG_INFO
(
"L1Calo TriggerTowerThinningAlg::initialize()"
);
57
58
ATH_CHECK
(
m_triggerTowerLocation
.initialize (
m_streamName
) );
59
ATH_CHECK
(
m_caloCellETByLayerKey
.initialize(
SG::AllowEmpty
) );
60
61
ATH_CHECK
(
m_rndmSvc
.retrieve() );
62
63
return
StatusCode::SUCCESS;
64
}
65
66
StatusCode
TriggerTowerThinningAlg::doThinning
(
const
EventContext& ctx)
const
{
67
68
// Create the mask to be used for thinning
69
std::vector<bool> mask;
70
71
// Counters
72
unsigned
long
nKeep(0),nReject(0),nTotal(0);
73
++
m_nEventsProcessed
;
74
75
SG::ThinningHandle<xAOD::TriggerTowerContainer>
tts
76
(
m_triggerTowerLocation
, ctx);
77
78
mask.assign(tts->size(),
false
);
// default: don't keep any clusters
79
80
// Should we save the trigger tower or not???
81
// If this is calibration data, then yes - save the lot
82
// Randomly save all trigger towers m_minRandom % of the time.
83
//
84
// If this is collisions data then only save if:
85
// 1.) Any ADC value is greater than m_minADC OR
86
// 2.) The CaloCell ET is greater than m_minCaloCellET
87
88
bool
globalSaveMe(
false
);
89
// Random number save all
90
if
(
m_useRandom
==
true
){
91
if
(globalSaveMe ==
false
){
92
ATHRNG::RNGWrapper
* wrapper =
m_rndmSvc
->getEngine (
this
);
93
wrapper->
setSeed
(this->name(), ctx);
94
CLHEP::HepRandomEngine* engine = wrapper->
getEngine
(ctx);
95
if
(CLHEP::RandFlat::shoot (engine) <
m_minRandom
) {
96
globalSaveMe =
true
;
97
m_nEventsAllTriggerTowersKeptByRandom
++;
98
}
99
}
100
}
101
102
SG::ReadDecorHandle<xAOD::TriggerTowerContainer, std::vector<float>
> caloCellETByLayerHandle(
m_caloCellETByLayerKey
, ctx);
103
bool
isDecorAvailable = caloCellETByLayerHandle.
isAvailable
();
104
105
// Iterate over all trigger towers
106
for
(
auto
tt : *tts){
107
108
bool
saveMe(
false
);
109
if
(globalSaveMe ==
true
){saveMe =
true
;}
110
111
// Test for Calo ET
112
if
(saveMe ==
false
){
113
if
(isDecorAvailable) {
114
const
std::vector<float>& caloCellETByLayer = caloCellETByLayerHandle(*tt);
115
116
float
totalCaloCellET(0.);
117
for
(
float
c : caloCellETByLayer) {
118
totalCaloCellET += c;
119
}
120
if
(totalCaloCellET >
m_minCaloCellET
) {
121
saveMe =
true
;
122
}
123
}
124
}
125
126
127
// Test for ADC values
128
if
(saveMe ==
false
) {
129
const
std::vector<uint16_t>& ttADC = tt->adc();
130
for
(uint16_t i : ttADC) {
131
if
( i >
m_minADC
) {
132
saveMe =
true
;
133
break
;
134
}
135
}
136
}
137
138
// assign result to mask
139
mask[nTotal] = saveMe;
140
141
++nTotal;
142
}
// End loop over trigger towers
143
144
145
tts.
keep
(mask);
146
147
// Counters
148
m_nTriggerTowersProcessed
+= nTotal;
149
// FIXME: nKeep is always 0
150
m_nTriggerTowersKept
+= nKeep;
151
m_nTriggerTowersRejected
+= nReject;
152
153
ATH_MSG_DEBUG
(
" L1Calo Trigger Tower Thinning statistics: keeping "
<< nKeep <<
" cells"
154
<<
" and rejecting "
<< nReject <<
" cells"
);
155
156
157
return
StatusCode::SUCCESS;
158
}
159
160
StatusCode
TriggerTowerThinningAlg::finalize
(){
161
162
ATH_MSG_INFO
(
163
"==> finalize "
<< name() <<
"...\n"
164
<<
"***************************************************************\n"
165
<<
"Results of "
<< name() <<
" thinning algorithm:\n"
166
<<
"-------------"
);
167
ATH_MSG_INFO
(
" Number of processed events: "
<<
m_nEventsProcessed
);
168
169
if
(
m_nTriggerTowersProcessed
> 0) {
170
ATH_MSG_INFO
(
171
" Average percent of Trigger Towers kept = "
172
<< 100.0 *
m_nTriggerTowersKept
/ (
double
)
m_nTriggerTowersProcessed
<<
" %"
);
173
}
174
if
(
m_useRandom
==
true
&&
m_nEventsProcessed
> 0){
175
ATH_MSG_INFO
(
176
" Percentage of events where all Trigger Towers were kept (should be approx "
<< 100.0*
m_minRandom
<<
") = "
177
<< 100.0 *
m_nEventsAllTriggerTowersKeptByRandom
/ (
double
)
m_nEventsProcessed
);
178
}
179
180
181
return
StatusCode::SUCCESS;
182
}
183
184
}
// namespace
ATH_CHECK
#define ATH_CHECK
Evaluate an expression and check for errors.
Definition
AthCheckMacros.h:40
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition
AthMsgStreamMacros.h:31
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition
AthMsgStreamMacros.h:29
RNGWrapper.h
ReadDecorHandle.h
Handle class for reading a decoration on an object.
ThinningHandle.h
Handle for requesting thinning for a data object.
TrigT1CaloDefs.h
TriggerTowerThinningAlg.h
ATHRNG::RNGWrapper
A wrapper class for event-slot-local random engines.
Definition
RNGWrapper.h:56
ATHRNG::RNGWrapper::setSeed
void setSeed(const std::string &algName, const EventContext &ctx)
Set the random seed using a string (e.g.
Definition
RNGWrapper.h:154
ATHRNG::RNGWrapper::getEngine
CLHEP::HepRandomEngine * getEngine(const EventContext &ctx) const
Retrieve the random engine corresponding to the provided EventContext.
Definition
RNGWrapper.h:108
DerivationFramework::TriggerTowerThinningAlg::m_nEventsAllTriggerTowersKeptByRandom
std::atomic< unsigned long > m_nEventsAllTriggerTowersKeptByRandom
Definition
TriggerTowerThinningAlg.h:69
DerivationFramework::TriggerTowerThinningAlg::m_caloCellETByLayerKey
SG::ReadDecorHandleKey< xAOD::TriggerTowerContainer > m_caloCellETByLayerKey
Definition
TriggerTowerThinningAlg.h:59
DerivationFramework::TriggerTowerThinningAlg::m_minCaloCellET
double m_minCaloCellET
Definition
TriggerTowerThinningAlg.h:62
DerivationFramework::TriggerTowerThinningAlg::m_streamName
StringProperty m_streamName
Definition
TriggerTowerThinningAlg.h:53
DerivationFramework::TriggerTowerThinningAlg::m_useRandom
bool m_useRandom
Definition
TriggerTowerThinningAlg.h:64
DerivationFramework::TriggerTowerThinningAlg::m_minRandom
double m_minRandom
Definition
TriggerTowerThinningAlg.h:65
DerivationFramework::TriggerTowerThinningAlg::m_rndmSvc
ServiceHandle< IAthRNGSvc > m_rndmSvc
Definition
TriggerTowerThinningAlg.h:76
DerivationFramework::TriggerTowerThinningAlg::TriggerTowerThinningAlg
TriggerTowerThinningAlg(const std::string &t, const std::string &n, const IInterface *p)
Definition
TriggerTowerThinningAlg.cxx:33
DerivationFramework::TriggerTowerThinningAlg::initialize
virtual StatusCode initialize() override
Definition
TriggerTowerThinningAlg.cxx:55
DerivationFramework::TriggerTowerThinningAlg::m_nEventsProcessed
std::atomic< unsigned long > m_nEventsProcessed
Definition
TriggerTowerThinningAlg.h:68
DerivationFramework::TriggerTowerThinningAlg::m_nTriggerTowersRejected
std::atomic< unsigned long > m_nTriggerTowersRejected
Definition
TriggerTowerThinningAlg.h:72
DerivationFramework::TriggerTowerThinningAlg::~TriggerTowerThinningAlg
virtual ~TriggerTowerThinningAlg()
Definition
TriggerTowerThinningAlg.cxx:51
DerivationFramework::TriggerTowerThinningAlg::m_minADC
int m_minADC
Definition
TriggerTowerThinningAlg.h:63
DerivationFramework::TriggerTowerThinningAlg::m_nTriggerTowersKept
std::atomic< unsigned long > m_nTriggerTowersKept
Definition
TriggerTowerThinningAlg.h:71
DerivationFramework::TriggerTowerThinningAlg::m_triggerTowerLocation
SG::ThinningHandleKey< xAOD::TriggerTowerContainer > m_triggerTowerLocation
Definition
TriggerTowerThinningAlg.h:56
DerivationFramework::TriggerTowerThinningAlg::doThinning
virtual StatusCode doThinning(const EventContext &ctx) const override
Definition
TriggerTowerThinningAlg.cxx:66
DerivationFramework::TriggerTowerThinningAlg::m_nTriggerTowersProcessed
std::atomic< unsigned long > m_nTriggerTowersProcessed
Definition
TriggerTowerThinningAlg.h:70
DerivationFramework::TriggerTowerThinningAlg::finalize
virtual StatusCode finalize() override
Definition
TriggerTowerThinningAlg.cxx:160
SG::ReadDecorHandle
Handle class for reading a decoration on an object.
Definition
StoreGate/StoreGate/ReadDecorHandle.h:94
SG::ReadDecorHandle::isAvailable
bool isAvailable()
Test to see if this variable exists in the store, for the referenced object.
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
DerivationFramework
THE reconstruction tool.
Definition
CascadeTools.h:16
SG::AllowEmpty
@ AllowEmpty
Definition
StoreGate/StoreGate/VarHandleKey.h:27
Generated on
for ATLAS Offline Software by
1.17.0