60 {
61
62
64 if(doHVline && ( !nCellsperLine || !cddm || !hvid)) {
65 ATH_MSG_ERROR(
"HV line flagging asked, but missing ingrediences, switching off !!");
66 doHVline = false;
67 }
68
69 std::unique_ptr<LArNoisyROSummary> noisyRO=std::make_unique<LArNoisyROSummary>();
70
71 if(!cellContainer) return noisyRO;
72
73 SG::ReadCondHandle<LArOnOffIdMapping> larCablingHdl(
m_cablingKey, ctx);
74 const LArOnOffIdMapping*
cabling=*larCablingHdl;
75
78
79 unsigned int NsaturatedTightCutBarrelA = 0;
80 unsigned int NsaturatedTightCutBarrelC = 0;
81 unsigned int NsaturatedTightCutEMECA = 0;
82 unsigned int NsaturatedTightCutEMECC = 0;
83
84 for (const CaloCell* cell : *cellContainer )
85 {
86 if (!cell) continue;
87
88
90
91
92
94
95 Identifier
id =
cell->ID();
97
98
101 {
104 {
105 if ( sideA ) { NsaturatedTightCutBarrelA++; }
106 else { NsaturatedTightCutBarrelC++; }
107 }
109 {
110 if ( sideA ) { NsaturatedTightCutEMECA++; }
111 else { NsaturatedTightCutEMECC++; }
112 }
113 }
114
115
116
118 {
119
120 HWIdentifier hwid =
cabling->createSignalChannelID(
id);
121 HWIdentifier febid =
m_onlineID->feb_Id(hwid);
124 FEBStats[FEBindex].addBadChannel(channel);
125 }
126
127 if(doHVline) {
128
129 std::vector<HWIdentifier> hvlines;
131 for(
unsigned int i=0;
i<hvlines.size(); ++
i) {
132 if(HVStats.contains(hvlines[i])) HVStats[hvlines[
i]] += 1;
else HVStats[hvlines[
i]]=1;
133 }
134 }
135
136 }
137
138
139 uint8_t SatTightPartitions = 0;
144 bool badSaturatedTightCut = (SatTightPartitions != 0);
145 if ( badSaturatedTightCut ) noisyRO-> SetSatTightFlaggedPartitions(SatTightPartitions);
146
147
148
149 for (auto& it : FEBStats) {
150 ATH_MSG_VERBOSE(
" candidate FEB " <<
it.first <<
" with " <<
it.second.badChannels() <<
" bad channels");
152 noisyRO->add_noisy_feb(HWIdentifier(
it.first));
153 }
154
155
157 noisyRO->add_MNBLoose_feb(HWIdentifier(
it.first));
158 ATH_MSG_DEBUG(
"Loose bad FEB " <<
it.first <<
" " <<
m_onlineID->channel_name(HWIdentifier(
it.first)) <<
" with " <<
it.second.badChannels() <<
" bad channels");
159
161 unsigned int associatedPSFEB = 0;
164 associatedPSFEB = assoc_it->second;
165 }
166 if (associatedPSFEB != 0){
167 if (FEBStats.count(associatedPSFEB) == 0) noisyRO->add_MNBTight_PsVeto_feb(HWIdentifier(
it.first));
168 else if (FEBStats[associatedPSFEB].badChannels() <
m_MNBTight_PsVetoCut[1]) noisyRO->add_MNBTight_PsVeto_feb(HWIdentifier(
it.first));
169 }
170 }
171
173 noisyRO->add_MNBTight_feb(HWIdentifier(
it.first));
174 }
175 }
176
177 }
178
179
180
181 unsigned int NBadFEBEMECA = 0; unsigned int NBadFEBEMECA_W = 0;
182 unsigned int NBadFEBEMECC = 0; unsigned int NBadFEBEMECC_W = 0;
183 unsigned int NBadFEBEMBA = 0; unsigned int NBadFEBEMBA_W = 0;
184 unsigned int NBadFEBEMBC = 0; unsigned int NBadFEBEMBC_W = 0;
185
186 const std::vector<HWIdentifier>& badfebs = noisyRO->get_noisy_febs();
187
188
189
190 for (const HWIdentifier& febid : badfebs)
191 {
192
193
194 HWIdentifier chanID =
m_onlineID->channel_Id(febid,0);
195
197
198
200 if (knownBadFEBs->find(int_id)!=knownBadFEBs->end())
weight=2;
201
203 {
205 NBadFEBEMBA_W = NBadFEBEMBA_W +
weight;
206 NBadFEBEMBA++;
207 }
208 else{
209 NBadFEBEMBC_W = NBadFEBEMBC_W +
weight;
210 NBadFEBEMBC++;
211 }
212 }
214 {
216 NBadFEBEMECA_W = NBadFEBEMECA_W +
weight;
217 NBadFEBEMECA++;
218 }
219 else{
220 NBadFEBEMECC_W = NBadFEBEMECC_W +
weight;
221 NBadFEBEMECC++;
222 }
223 }
224 }
225
231 if ( BadFEBPartitions != 0 ) noisyRO-> SetBadFEBFlaggedPartitions(BadFEBPartitions);
232
233 uint8_t BadFEBPartitions_W = 0;
238 if ( BadFEBPartitions_W != 0 ) noisyRO-> SetBadFEB_WFlaggedPartitions(BadFEBPartitions_W);
239
240
241
242
244 uint8_t MNBTight_PsVetoPartition=0;
246
247 std::array<unsigned,5> nTightMNBFEBSperPartition{};
248 std::array<unsigned,5> nTight_PsVetoMNBFEBSperPartition{};
249 std::array<unsigned,5> nLooseMNBFEBSperPartition{};
250 for (HWIdentifier febid: *knownMNBFEBs) {
252 if (statIt!=FEBStats.end()) {
255
259 if (
unsigned int associatedPSFEB =
found->second; associatedPSFEB != 0){
260 if (FEBStats.count(associatedPSFEB) == 0) (nTight_PsVetoMNBFEBSperPartition[
partitionNumber(febid)])++;
262 }
263 }
264 }
265
268 }
269 }
270 }
271
272
273 for (unsigned iP=0;iP<4;++iP) {
274 ATH_MSG_DEBUG(
"Partition " << iP <<
": Found " << nLooseMNBFEBSperPartition[iP] <<
" MNB FEBs with more than " <<
m_MNBLooseCut <<
" bad-Q channels" );
275 ATH_MSG_DEBUG(
"Partition " << iP <<
": Found " << nTightMNBFEBSperPartition[iP] <<
" MNB FEBs with more than " <<
m_MNBTightCut <<
" bad-Q channels" );
276 if (nLooseMNBFEBSperPartition[iP]>0) MNBLoosePartition |=
m_partitionMask[iP];
277 if (nTightMNBFEBSperPartition[iP]>0) MNBTightPartition |=
m_partitionMask[iP];
278 if (nTight_PsVetoMNBFEBSperPartition[iP]>0) MNBTight_PsVetoPartition |=
m_partitionMask[iP];
279 }
280
281
282 noisyRO->SetMNBTightFlaggedPartitions(MNBTightPartition);
283 noisyRO->SetMNBTight_PsVetoFlaggedPartitions(MNBTight_PsVetoPartition);
284 noisyRO->SetMNBLooseFlaggedPartitions(MNBLoosePartition);
285
286 if(!hvid || !nCellsperLine ) return noisyRO;
287
288
289 unsigned int NBadHVEMECA = 0;
290 unsigned int NBadHVEMECC = 0;
291 unsigned int NBadHVEMBA = 0;
292 unsigned int NBadHVEMBC = 0;
293 unsigned int NBadHVHECA = 0;
294 unsigned int NBadHVHECC = 0;
295 unsigned int NBadHVFCALA = 0;
296 unsigned int NBadHVFCALC = 0;
297
298
299 for ( HVlinesStatMap::const_iterator it = HVStats.begin(); it != HVStats.end(); ++it ) {
300 ATH_MSG_DEBUG(ctx.eventID().event_number()<<
" candidate HVline " <<
it->first <<
" with " <<
it->second <<
" bad channels, out of "<<nCellsperLine->
HVNcell(HWIdentifier(
it->first))<<
" channels");
302 HWIdentifier hwd(
it->first);
303 noisyRO->add_noisy_hvline(hwd);
307 switch(side) {
309 switch(part){
310 case 0: case 1:{NBadHVEMBC += 1; break;}
311 case 2: case 3:{NBadHVEMECC += 1; break;}
312 case 4: {NBadHVHECC += 1; break;}
313 case 5: {NBadHVFCALC += 1; break;}
315 };
316 break;
317 }
318 case 0: { switch(part){
319 case 0: case 1:{NBadHVEMBA += 1; break;}
320 case 2: case 3:{NBadHVEMECA += 1; break;}
321 case 4: {NBadHVHECA += 1; break;}
322 case 5: {NBadHVFCALA += 1; break;}
324 };
325 break;
326 }
327 }
328 }
329 }
330
340
341 if ( BadHVPartitions != 0 ) noisyRO-> SetBadHVlinesPartitions(BadHVPartitions);
342
343 return noisyRO;
344}
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
const std::vector< HWIdentifier > & getLArElectrodeIDvec(HWIdentifier &hvlineId) const
Return a vector of LArElectrodeID corresponding to a given LArHVLineID.
short HVNcell(const HWIdentifier &chid) const
unsigned int constexpr sideA