66 {
67
68
69 std::vector<bool>
mask;
70
71
72 unsigned long nKeep(0),nReject(0),nTotal(0);
74
75 SG::ThinningHandle<xAOD::TriggerTowerContainer> tts
77
78 mask.assign(tts->size(),
false);
79
80
81
82
83
84
85
86
87
88 bool globalSaveMe(false);
89
91 if(globalSaveMe == false){
92 ATHRNG::RNGWrapper* wrapper =
m_rndmSvc->getEngine (
this);
95 if (CLHEP::RandFlat::shoot (engine) <
m_minRandom) {
96 globalSaveMe = true;
98 }
99 }
100 }
101
102 SG::ReadDecorHandle<xAOD::TriggerTowerContainer, std::vector<float> > caloCellETByLayerHandle(
m_caloCellETByLayerKey, ctx);
103 bool isDecorAvailable = caloCellETByLayerHandle.isAvailable();
104
105
106 for(auto tt : *tts){
107
108 bool saveMe(false);
109 if(globalSaveMe == true){saveMe = true;}
110
111
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 }
121 saveMe = true;
122 }
123 }
124 }
125
126
127
128 if (saveMe == false) {
129 const std::vector<uint16_t>& ttADC =
tt->adc();
130 for (uint16_t i : ttADC) {
132 saveMe = true;
133 break;
134 }
135 }
136 }
137
138
139 mask[nTotal] = saveMe;
140
141 ++nTotal;
142 }
143
144
145 tts.keep (mask);
146
147
149
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 }
void setSeed(const std::string &algName, const EventContext &ctx)
Set the random seed using a string (e.g.
CLHEP::HepRandomEngine * getEngine(const EventContext &ctx) const
Retrieve the random engine corresponding to the provided EventContext.
SG::ReadDecorHandleKey< xAOD::TriggerTowerContainer > m_caloCellETByLayerKey
ServiceHandle< IAthRNGSvc > m_rndmSvc
SG::ThinningHandleKey< xAOD::TriggerTowerContainer > m_triggerTowerLocation