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 auto&
stats = HVStats[hvlines[
i]];
135 }
136 }
137 }
138
139
140 uint8_t SatTightPartitions = 0;
145 bool badSaturatedTightCut = (SatTightPartitions != 0);
146 if ( badSaturatedTightCut ) noisyRO-> SetSatTightFlaggedPartitions(SatTightPartitions);
147
148
149
150 for (auto& it : FEBStats) {
151 ATH_MSG_VERBOSE(
" candidate FEB " <<
it.first <<
" with " <<
it.second.badChannels() <<
" bad channels");
153 noisyRO->add_noisy_feb(HWIdentifier(
it.first));
154 }
155
156
158 noisyRO->add_MNBLoose_feb(HWIdentifier(
it.first));
159 ATH_MSG_DEBUG(
"Loose bad FEB " <<
it.first <<
" " <<
m_onlineID->channel_name(HWIdentifier(
it.first)) <<
" with " <<
it.second.badChannels() <<
" bad channels");
160
162 unsigned int associatedPSFEB = 0;
165 associatedPSFEB = assoc_it->second;
166 }
167 if (associatedPSFEB != 0){
168 if (FEBStats.count(associatedPSFEB) == 0) noisyRO->add_MNBTight_PsVeto_feb(HWIdentifier(
it.first));
169 else if (FEBStats[associatedPSFEB].badChannels() <
m_MNBTight_PsVetoCut[1]) noisyRO->add_MNBTight_PsVeto_feb(HWIdentifier(
it.first));
170 }
171 }
172
174 noisyRO->add_MNBTight_feb(HWIdentifier(
it.first));
175 }
176 }
177
178 }
179
180
181
182 unsigned int NBadFEBEMECA = 0; unsigned int NBadFEBEMECA_W = 0;
183 unsigned int NBadFEBEMECC = 0; unsigned int NBadFEBEMECC_W = 0;
184 unsigned int NBadFEBEMBA = 0; unsigned int NBadFEBEMBA_W = 0;
185 unsigned int NBadFEBEMBC = 0; unsigned int NBadFEBEMBC_W = 0;
186
187 const std::vector<HWIdentifier>& badfebs = noisyRO->get_noisy_febs();
188
189
190
191 for (const HWIdentifier& febid : badfebs)
192 {
193
194
195 HWIdentifier chanID =
m_onlineID->channel_Id(febid,0);
196
198
199
201 if (knownBadFEBs->find(int_id)!=knownBadFEBs->end())
weight=2;
202
204 {
206 NBadFEBEMBA_W = NBadFEBEMBA_W +
weight;
207 NBadFEBEMBA++;
208 }
209 else{
210 NBadFEBEMBC_W = NBadFEBEMBC_W +
weight;
211 NBadFEBEMBC++;
212 }
213 }
215 {
217 NBadFEBEMECA_W = NBadFEBEMECA_W +
weight;
218 NBadFEBEMECA++;
219 }
220 else{
221 NBadFEBEMECC_W = NBadFEBEMECC_W +
weight;
222 NBadFEBEMECC++;
223 }
224 }
225 }
226
232 if ( BadFEBPartitions != 0 ) noisyRO-> SetBadFEBFlaggedPartitions(BadFEBPartitions);
233
234 uint8_t BadFEBPartitions_W = 0;
239 if ( BadFEBPartitions_W != 0 ) noisyRO-> SetBadFEB_WFlaggedPartitions(BadFEBPartitions_W);
240
241
242
243
245 uint8_t MNBTight_PsVetoPartition=0;
247
248 std::array<unsigned,5> nTightMNBFEBSperPartition{};
249 std::array<unsigned,5> nTight_PsVetoMNBFEBSperPartition{};
250 std::array<unsigned,5> nLooseMNBFEBSperPartition{};
251 for (HWIdentifier febid: *knownMNBFEBs) {
253 if (statIt!=FEBStats.end()) {
256
260 if (
unsigned int associatedPSFEB =
found->second; associatedPSFEB != 0){
261 if (FEBStats.count(associatedPSFEB) == 0) (nTight_PsVetoMNBFEBSperPartition[
partitionNumber(febid)])++;
263 }
264 }
265 }
266
269 }
270 }
271 }
272
273
274 for (unsigned iP=0;iP<4;++iP) {
275 ATH_MSG_DEBUG(
"Partition " << iP <<
": Found " << nLooseMNBFEBSperPartition[iP] <<
" MNB FEBs with more than " <<
m_MNBLooseCut <<
" bad-Q channels" );
276 ATH_MSG_DEBUG(
"Partition " << iP <<
": Found " << nTightMNBFEBSperPartition[iP] <<
" MNB FEBs with more than " <<
m_MNBTightCut <<
" bad-Q channels" );
277 if (nLooseMNBFEBSperPartition[iP]>0) MNBLoosePartition |=
m_partitionMask[iP];
278 if (nTightMNBFEBSperPartition[iP]>0) MNBTightPartition |=
m_partitionMask[iP];
279 if (nTight_PsVetoMNBFEBSperPartition[iP]>0) MNBTight_PsVetoPartition |=
m_partitionMask[iP];
280 }
281
282
283 noisyRO->SetMNBTightFlaggedPartitions(MNBTightPartition);
284 noisyRO->SetMNBTight_PsVetoFlaggedPartitions(MNBTight_PsVetoPartition);
285 noisyRO->SetMNBLooseFlaggedPartitions(MNBLoosePartition);
286
287 if(!hvid || !nCellsperLine ) return noisyRO;
288
289
290 float NBadHVEMECA = 0;
291 float NBadHVEMECC = 0;
292 float NBadHVEMBA = 0;
293 float NBadHVEMBC = 0;
294 float NBadHVHECA = 0;
295 float NBadHVHECC = 0;
296 float NBadHVFCALA = 0;
297 float NBadHVFCALC = 0;
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.noisy <<
" bad channels, out of "<<nCellsperLine->
HVNcell(HWIdentifier(
it->first))<<
" channels");
303 HWIdentifier hwd(
it->first);
304 noisyRO->add_noisy_hvline(hwd);
308 const float w =
float(
it->second.noisy) /
it->second.sharedNoisy;
309 switch(side) {
311 switch(part){
312 case 0:
case 1:{NBadHVEMBC +=
w;
break;}
313 case 2:
case 3:{NBadHVEMECC +=
w;
break;}
314 case 4: {NBadHVHECC +=
w;
break;}
315 case 5: {NBadHVFCALC +=
w;
break;}
317 };
318 break;
319 }
320 case 0: { switch(part){
321 case 0:
case 1:{NBadHVEMBA +=
w;
break;}
322 case 2:
case 3:{NBadHVEMECA +=
w;
break;}
323 case 4: {NBadHVHECA +=
w;
break;}
324 case 5: {NBadHVFCALA +=
w;
break;}
326 };
327 break;
328 }
329 }
330 }
331 }
332
342
343 if ( BadHVPartitions != 0 ) noisyRO-> SetBadHVlinesPartitions(BadHVPartitions);
344
345 return noisyRO;
346}
#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
setRawEt setRawPhi nCells