64 if(doHVline && ( !nCellsperLine || !cddm || !hvid)) {
65 ATH_MSG_ERROR(
"HV line flagging asked, but missing ingrediences, switching off !!");
69 std::unique_ptr<LArNoisyROSummary> noisyRO=std::make_unique<LArNoisyROSummary>();
71 if(!cellContainer)
return noisyRO;
79 unsigned int NsaturatedTightCutBarrelA = 0;
80 unsigned int NsaturatedTightCutBarrelC = 0;
81 unsigned int NsaturatedTightCutEMECA = 0;
82 unsigned int NsaturatedTightCutEMECC = 0;
84 for (
const CaloCell* cell : *cellContainer )
102 bool sideA = cell->eta() > 0.;
105 if ( sideA ) { NsaturatedTightCutBarrelA++; }
106 else { NsaturatedTightCutBarrelC++; }
110 if ( sideA ) { NsaturatedTightCutEMECA++; }
111 else { NsaturatedTightCutEMECC++; }
123 unsigned int channel =
m_onlineID->channel(hwid);
124 FEBStats[FEBindex].addBadChannel(channel);
129 std::vector<HWIdentifier> hvlines;
131 for (
unsigned int i=0; i<hvlines.size(); ++i) {
132 auto& stats = HVStats[hvlines[i]];
134 stats.sharedNoisy +=
static_cast<uint32_t
>(hvlines.size());
140 uint8_t SatTightPartitions = 0;
145 bool badSaturatedTightCut = (SatTightPartitions != 0);
146 if ( badSaturatedTightCut ) noisyRO-> SetSatTightFlaggedPartitions(SatTightPartitions);
150 for (
auto& it : FEBStats) {
151 ATH_MSG_VERBOSE(
" candidate FEB " << it.first <<
" with " << it.second.badChannels() <<
" bad channels");
162 unsigned int associatedPSFEB = 0;
165 associatedPSFEB = assoc_it->second;
167 if (associatedPSFEB != 0){
168 if (FEBStats.count(associatedPSFEB) == 0) noisyRO->add_MNBTight_PsVeto_feb(
HWIdentifier(it.first));
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;
187 const std::vector<HWIdentifier>& badfebs = noisyRO->get_noisy_febs();
200 const unsigned int int_id = febid.get_identifier32().get_compact();
201 if (knownBadFEBs->find(int_id)!=knownBadFEBs->end()) weight=2;
206 NBadFEBEMBA_W = NBadFEBEMBA_W + weight;
210 NBadFEBEMBC_W = NBadFEBEMBC_W + weight;
217 NBadFEBEMECA_W = NBadFEBEMECA_W + weight;
221 NBadFEBEMECC_W = NBadFEBEMECC_W + weight;
227 uint8_t BadFEBPartitions = 0;
232 if ( BadFEBPartitions != 0 ) noisyRO-> SetBadFEBFlaggedPartitions(BadFEBPartitions);
234 uint8_t BadFEBPartitions_W = 0;
239 if ( BadFEBPartitions_W != 0 ) noisyRO-> SetBadFEB_WFlaggedPartitions(BadFEBPartitions_W);
244 uint8_t MNBTightPartition=0;
245 uint8_t MNBTight_PsVetoPartition=0;
246 uint8_t MNBLoosePartition=0;
248 std::array<unsigned,5> nTightMNBFEBSperPartition{};
249 std::array<unsigned,5> nTight_PsVetoMNBFEBSperPartition{};
250 std::array<unsigned,5> nLooseMNBFEBSperPartition{};
252 auto statIt=FEBStats.find(febid.get_identifier32().get_compact());
253 if (statIt!=FEBStats.end()) {
260 if (
unsigned int associatedPSFEB = found->second; associatedPSFEB != 0){
261 if (FEBStats.count(associatedPSFEB) == 0) (nTight_PsVetoMNBFEBSperPartition[
partitionNumber(febid)])++;
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];
283 noisyRO->SetMNBTightFlaggedPartitions(MNBTightPartition);
284 noisyRO->SetMNBTight_PsVetoFlaggedPartitions(MNBTight_PsVetoPartition);
285 noisyRO->SetMNBLooseFlaggedPartitions(MNBLoosePartition);
287 if(!hvid || !nCellsperLine )
return noisyRO;
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;
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");
301 short nCells = nCellsperLine->
HVNcell(it->first);
304 noisyRO->add_noisy_hvline(hwd);
306 int side =
m_elecID->zside(elecVec[0]);
307 int part =
m_elecID->detector(elecVec[0]);
308 const float w = float(it->second.noisy) / it->second.sharedNoisy;
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;}
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;}
333 uint8_t BadHVPartitions = 0;
343 if ( BadHVPartitions != 0 ) noisyRO-> SetBadHVlinesPartitions(BadHVPartitions);