ATLAS Offline Software
LArNoisyROTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 // LArNoisyROTool.cxx
6 // Implementation file for class LArNoisyROTool
8 
9 // LArCellRec includes
10 #include "LArNoisyROTool.h"
11 
20 
21 LArNoisyROTool::LArNoisyROTool( const std::string& type,
22  const std::string& name,
23  const IInterface* parent ) :
24  ::AthAlgTool ( type, name, parent ),m_hvMapTool("LArHVMapTool",this),
25  m_calo_id(nullptr), m_onlineID(nullptr),
27 {
28  declareInterface<ILArNoisyROTool >(this);
29  declareProperty( "BadChanPerFEB", m_BadChanPerFEB=30 );
30  declareProperty( "CellQualityCut", m_CellQualityCut=4000 );
31  declareProperty( "IgnoreMaskedCells", m_ignore_masked_cells=false );
32  declareProperty( "IgnoreFrontInnerWheelCells", m_ignore_front_innerwheel_cells=true );
33  declareProperty( "BadFEBCut", m_MinBadFEB=3 );
34 
35  declareProperty( "MNBLooseCut",m_MNBLooseCut=5,"Number of cells above CellQualityCut");
36  declareProperty( "MNBTightCut",m_MNBTightCut=17,"Number of cells above CellQualityCut");
37  declareProperty( "MNBTight_PsVetoCut",m_MNBTight_PsVetoCut={13,3},"Number of cells above CellQualityCut");
38  declareProperty( "SaturatedCellQualityCut", m_SaturatedCellQualityCut=65535);
39  declareProperty( "SaturatedCellEnergyTightCut", m_SaturatedCellEnergyTightCut=1000.);
40  declareProperty( "SaturatedCellTightCut", m_SaturatedCellTightCut=20);
41 
42  declareProperty( "DoHVflag", m_doHVline=true );
43  declareProperty( "BadChanFracPerHVline", m_BadChanFracPerHVline=0.25 );
44  declareProperty( "BadHVCut", m_MinBadHV=3 );
45 }
46 
47 
48 
49 // Athena algtool's Hooks
52 
54  ATH_MSG_FATAL( "Configuration problem: LArNoisyROTool assumes that the QFactor cut to declare a channel noisy is softer than the QFactor cut to declare the quality saturated !" );
55  return StatusCode::FAILURE;
56  }
57 
59  ATH_MSG_FATAL( "Configuration problem: LArNoisyROTool assumes that MNBLooseCut is smaller than MNBTightCut" );
60  return StatusCode::FAILURE;
61  }
62 
63  ATH_CHECK(detStore()->retrieve(m_calo_id,"CaloCell_ID"));
64  ATH_CHECK(detStore()->retrieve(m_onlineID,"LArOnlineID"));
65  ATH_CHECK(detStore()->retrieve(m_elecID,"LArElectrodeID"));
67 
68  // Fill the map between any EMB FEB and the same FT PS FEB
69  // Filled only for EMB so far
70  for (std::vector<HWIdentifier>::const_iterator allFeb = m_onlineID->feb_begin();
71  allFeb != m_onlineID->feb_end(); ++allFeb) {
72 
73  HWIdentifier febid = HWIdentifier(*allFeb);
74  int FEBIndex = febid.get_identifier32().get_compact();
75  int FEBIndex_PS = 0;
76  int barrel_ec = m_onlineID->barrel_ec(febid);
77  if (barrel_ec == 0){
78  int pos_neg = m_onlineID->pos_neg(febid);
79  int ft = m_onlineID->feedthrough(febid);
80  FEBIndex_PS = (m_onlineID->feb_Id(0,pos_neg,ft,1)).get_identifier32().get_compact();
81  }
82  m_mapPSFEB[FEBIndex] = FEBIndex_PS;
83  }
84 
85  return StatusCode::SUCCESS;
86 }
87 
88 
89 std::unique_ptr<LArNoisyROSummary> LArNoisyROTool::process(const EventContext& ctx, const CaloCellContainer* cellContainer, const std::set<unsigned int>* knownBadFEBs, const std::vector<HWIdentifier>* knownMNBFEBs, const LArHVNMap* nCellsperLine, const CaloDetDescrManager* cddm, const LArHVIdMapping* hvid) const{
90 
91  // sanity check
92  bool doHVline=m_doHVline;
93  if(doHVline && ( !nCellsperLine || !cddm || !hvid)) {
94  ATH_MSG_ERROR("HV line flagging asked, but missing ingrediences, switching off !!");
95  doHVline = false;
96  }
97 
98  std::unique_ptr<LArNoisyROSummary> noisyRO(new LArNoisyROSummary);
99 
100  if(!cellContainer) return noisyRO;
101 
103  const LArOnOffIdMapping* cabling=*larCablingHdl;
104 
105  FEBEvtStatMap FEBStats; //counter per FEB
106  HVlinesStatMap HVStats; //counter per HV line
107 
108  unsigned int NsaturatedTightCutBarrelA = 0;
109  unsigned int NsaturatedTightCutBarrelC = 0;
110  unsigned int NsaturatedTightCutEMECA = 0;
111  unsigned int NsaturatedTightCutEMECC = 0;
112 
113 
114  CaloCellContainer::const_iterator cellItr = cellContainer->begin();
115  CaloCellContainer::const_iterator cellItrEnd = cellContainer->end();
116  for ( ; cellItr != cellItrEnd; ++cellItr )
117  {
118  const CaloCell* cell = (*cellItr);
119  if (!cell) continue;
120 
121  // only cells with a bad enough Quality Factor
122  if ( cell->quality() < m_CellQualityCut ) continue;
123 
124  // cells with zero energy have been masked by previous algorithms
125  // they should not matter for physics so don't consider them
126  if ( m_ignore_masked_cells && std::abs(cell->e()) < 0.1 ) continue; //Fixme: use provenance
127 
128  Identifier id = cell->ID();
129  if (m_ignore_front_innerwheel_cells && m_calo_id->is_em_endcap_inner(id) && m_calo_id->sampling(id) == 1) continue; // Front inner wheel cells are ignored
130 
131  // saturated Qfactor ? Tight cuts.
132  if ( cell->quality()>=m_SaturatedCellQualityCut &&
133  std::abs(cell->e()) > m_SaturatedCellEnergyTightCut )
134  {
135  bool sideA = cell->eta() > 0.;
136  if ( m_calo_id->is_em_barrel(id) )
137  {
138  if ( sideA ) { NsaturatedTightCutBarrelA++; }
139  else { NsaturatedTightCutBarrelC++; }
140  }
141  else if ( m_calo_id->is_em_endcap(id) )
142  {
143  if ( sideA ) { NsaturatedTightCutEMECA++; }
144  else { NsaturatedTightCutEMECC++; }
145  }
146  }
147 
148 
149  // only LAr EM for bad FEBs
150  if ( m_calo_id->is_em(id) )
151  {
152  // get FEB ID and channel number
153  HWIdentifier hwid = cabling->createSignalChannelID(id);
154  HWIdentifier febid = m_onlineID->feb_Id(hwid);
155  unsigned int FEBindex = febid.get_identifier32().get_compact();
156  unsigned int channel = m_onlineID->channel(hwid);
157  FEBStats[FEBindex].addBadChannel(channel);
158  }
159 
160  if(doHVline) {
161  //HVline, in all calos
162  std::vector<HWIdentifier> hvlines;
163  m_hvMapTool->GetHVLines(id, cddm,hvlines);
164  for(unsigned int i=0; i<hvlines.size(); ++i) {
165  if(HVStats.contains(hvlines[i])) HVStats[hvlines[i]] += 1; else HVStats[hvlines[i]]=1;
166  }
167  }
168 
169  }
170 
171  // Store the Saturated flag per partition
172  uint8_t SatTightPartitions = 0;
173  if ( NsaturatedTightCutBarrelA >= m_SaturatedCellTightCut ) SatTightPartitions |= LArNoisyROSummary::EMBAMask;
174  if ( NsaturatedTightCutBarrelC >= m_SaturatedCellTightCut ) SatTightPartitions |= LArNoisyROSummary::EMBCMask;
175  if ( NsaturatedTightCutEMECA >= m_SaturatedCellTightCut ) SatTightPartitions |= LArNoisyROSummary::EMECAMask;
176  if ( NsaturatedTightCutEMECC >= m_SaturatedCellTightCut ) SatTightPartitions |= LArNoisyROSummary::EMECCMask;
177  bool badSaturatedTightCut = (SatTightPartitions != 0);
178  if ( badSaturatedTightCut ) noisyRO-> SetSatTightFlaggedPartitions(SatTightPartitions);
179 
180  // loop on all FEBs and check whether FEB can be declared as bad for the different type of flags:
181  // regular noise burst, weighted noise burst, MNB tight and loose
182  for ( FEBEvtStatMapCstIt it = FEBStats.begin(); it != FEBStats.end(); ++it ) {
183  ATH_MSG_VERBOSE(" candidate FEB " << it->first << " with " << it->second.badChannels() << " bad channels");
184  if ( it->second.badChannels() > m_BadChanPerFEB ) {
185  noisyRO->add_noisy_feb(HWIdentifier(it->first));
186  }
187 
188  // Loose MNBs
189  if ( it->second.badChannels() > m_MNBLooseCut ){
190  noisyRO->add_MNBLoose_feb(HWIdentifier(it->first));
191  ATH_MSG_DEBUG("Loose bad FEB " << it->first << " " << m_onlineID->channel_name(HWIdentifier(it->first)) << " with " << it->second.badChannels() << " bad channels");
192  // Tight_PsVeto MNBs
193  if ( it->second.badChannels() > m_MNBTight_PsVetoCut[0] ){
194  unsigned int associatedPSFEB = m_mapPSFEB.find(it->first)->second;
195  if (associatedPSFEB != 0){ // Check if a PS FEB is associated (TRUE only for EMB FEBs)
196  if (FEBStats.count(associatedPSFEB) == 0) noisyRO->add_MNBTight_PsVeto_feb(HWIdentifier(it->first));
197  else if (FEBStats[associatedPSFEB].badChannels() < m_MNBTight_PsVetoCut[1]) noisyRO->add_MNBTight_PsVeto_feb(HWIdentifier(it->first));
198  }
199  }
200  // Tight MNBs
201  if ( it->second.badChannels() > m_MNBTightCut ){
202  noisyRO->add_MNBTight_feb(HWIdentifier(it->first));
203  }
204  }
205 
206 
207 // // Noisy preamp removed as no used currently
208 // // Kept here just in case we may want to revive it
209 // const unsigned int* PAcounters = it->second.PAcounters();
210 // for ( size_t i = 0; i < 32; i++ ) {
211 // if ( PAcounters[i] > m_BadChanPerPA ) {
212 // uint64_t PAid = static_cast<uint64_t>(1000000000)*static_cast<uint64_t>(i)+static_cast<uint64_t>(it->first);
213 // ATH_MSG_DEBUG(" bad preamp " << i << " in FEB " << it->first << " ID " << PAid);
214 // noisyRO->add_noisy_preamp(HWIdentifier(it->first),4*i);
215 // if (m_printSummary) m_badPA_counters[PAid]++;
216 // }
217 // }
218 
219  }//end loop over m_FEBats
220 
221 
222  // Count noisy FEB per partition EMEC-EMB - Simple and weighted quantities
223  unsigned int NBadFEBEMECA = 0; unsigned int NBadFEBEMECA_W = 0;
224  unsigned int NBadFEBEMECC = 0; unsigned int NBadFEBEMECC_W = 0;
225  unsigned int NBadFEBEMBA = 0; unsigned int NBadFEBEMBA_W = 0;
226  unsigned int NBadFEBEMBC = 0; unsigned int NBadFEBEMBC_W = 0;
227 
228  const std::vector<HWIdentifier>& badfebs = noisyRO->get_noisy_febs();
229 
230  //for ( std::vector<HWIdentifier>::const_iterator febit = badfebs.begin();
231  // febit != badfebs.end(); febit++ )
232  for (const HWIdentifier& febid : badfebs)
233  {
234  // first channel of FEB, as safety since FEBid seem to be the Id of the
235  // first channel (no guarantee?)
236  HWIdentifier chanID = m_onlineID->channel_Id(febid,0);
237 
238  int weight = 1;
239  // If the FEB is known to be subject to noise burst (list defiend as property)
240  // give a weight 2
241  const unsigned int int_id = febid.get_identifier32().get_compact();
242  if (knownBadFEBs->find(int_id)!=knownBadFEBs->end()) weight=2;
243 
244  if ( m_onlineID->isEMBchannel(chanID) )
245  {
246  if ( m_onlineID->pos_neg(chanID) == 1 ){
247  NBadFEBEMBA_W = NBadFEBEMBA_W + weight;
248  NBadFEBEMBA++;
249  }
250  else{
251  NBadFEBEMBC_W = NBadFEBEMBC_W + weight;
252  NBadFEBEMBC++;
253  }
254  }
255  else if ( m_onlineID->isEMECchannel(chanID) )
256  {
257  if ( m_onlineID->pos_neg(chanID) == 1 ){
258  NBadFEBEMECA_W = NBadFEBEMECA_W + weight;
259  NBadFEBEMECA++;
260  }
261  else{
262  NBadFEBEMECC_W = NBadFEBEMECC_W + weight;
263  NBadFEBEMECC++;
264  }
265  }
266  }
267 
268  uint8_t BadFEBPartitions = 0;
269  if ( NBadFEBEMBA > m_MinBadFEB ) BadFEBPartitions |= LArNoisyROSummary::EMBAMask;
270  if ( NBadFEBEMBC > m_MinBadFEB ) BadFEBPartitions |= LArNoisyROSummary::EMBCMask;
271  if ( NBadFEBEMECA > m_MinBadFEB ) BadFEBPartitions |= LArNoisyROSummary::EMECAMask;
272  if ( NBadFEBEMECC > m_MinBadFEB ) BadFEBPartitions |= LArNoisyROSummary::EMECCMask;
273  if ( BadFEBPartitions != 0 ) noisyRO-> SetBadFEBFlaggedPartitions(BadFEBPartitions);
274 
275  uint8_t BadFEBPartitions_W = 0;
276  if ( NBadFEBEMBA_W > m_MinBadFEB ) BadFEBPartitions_W |= LArNoisyROSummary::EMBAMask;
277  if ( NBadFEBEMBC_W > m_MinBadFEB ) BadFEBPartitions_W |= LArNoisyROSummary::EMBCMask;
278  if ( NBadFEBEMECA_W > m_MinBadFEB ) BadFEBPartitions_W |= LArNoisyROSummary::EMECAMask;
279  if ( NBadFEBEMECC_W > m_MinBadFEB ) BadFEBPartitions_W |= LArNoisyROSummary::EMECCMask;
280  if ( BadFEBPartitions_W != 0 ) noisyRO-> SetBadFEB_WFlaggedPartitions(BadFEBPartitions_W);
281 
282 
283 
284  //Check for Mini Noise Bursts:
285  uint8_t MNBTightPartition=0;
286  uint8_t MNBTight_PsVetoPartition=0;
287  uint8_t MNBLoosePartition=0;
288 
289  std::array<unsigned,5> nTightMNBFEBSperPartition{};
290  std::array<unsigned,5> nTight_PsVetoMNBFEBSperPartition{};
291  std::array<unsigned,5> nLooseMNBFEBSperPartition{};
292  for (HWIdentifier febid: *knownMNBFEBs) { //Loop over known MNB FEBs
293  FEBEvtStatMapCstIt statIt=FEBStats.find(febid.get_identifier32().get_compact());
294  if (statIt!=FEBStats.end()) {
295  if (statIt->second.badChannels()>=m_MNBLooseCut) {
296  (nLooseMNBFEBSperPartition[partitionNumber(febid)])++;
297  // Tight_PsVeto MNBs
298  if ( statIt->second.badChannels() > m_MNBTight_PsVetoCut[0] ){
299  auto found = m_mapPSFEB.find(statIt->first);
300  if (found != m_mapPSFEB.end()){
301  if (unsigned int associatedPSFEB = found->second; associatedPSFEB != 0){
302  if (FEBStats.count(associatedPSFEB) == 0) (nTight_PsVetoMNBFEBSperPartition[partitionNumber(febid)])++;
303  else if (FEBStats[associatedPSFEB].badChannels() < m_MNBTight_PsVetoCut[1]) (nTight_PsVetoMNBFEBSperPartition[partitionNumber(febid)])++;
304  }
305  }
306  }
307  // Tight MNBs
308  if (statIt->second.badChannels()>=m_MNBTightCut)
309  (nTightMNBFEBSperPartition[partitionNumber(febid)])++;
310  }
311  }//End FEB in list of bad-Q FEBs
312  }//end loop over known MNB Febs
313 
314 
315  for (unsigned iP=0;iP<4;++iP) {
316  ATH_MSG_DEBUG( "Partition " << iP << ": Found " << nLooseMNBFEBSperPartition[iP] << " MNB FEBs with more than " << m_MNBLooseCut << " bad-Q channels" );
317  ATH_MSG_DEBUG( "Partition " << iP << ": Found " << nTightMNBFEBSperPartition[iP] << " MNB FEBs with more than " << m_MNBTightCut << " bad-Q channels" );
318  if (nLooseMNBFEBSperPartition[iP]>0) MNBLoosePartition |= m_partitionMask[iP];
319  if (nTightMNBFEBSperPartition[iP]>0) MNBTightPartition |= m_partitionMask[iP];
320  if (nTight_PsVetoMNBFEBSperPartition[iP]>0) MNBTight_PsVetoPartition |= m_partitionMask[iP];
321  }// end loop over partitions
322 
323 
324  noisyRO->SetMNBTightFlaggedPartitions(MNBTightPartition);
325  noisyRO->SetMNBTight_PsVetoFlaggedPartitions(MNBTight_PsVetoPartition);
326  noisyRO->SetMNBLooseFlaggedPartitions(MNBLoosePartition);
327 
328  if(!hvid || !nCellsperLine ) return noisyRO; // do not have HVcells map
329 
330  // Count noisy HVlines per partition
331  unsigned int NBadHVEMECA = 0;
332  unsigned int NBadHVEMECC = 0;
333  unsigned int NBadHVEMBA = 0;
334  unsigned int NBadHVEMBC = 0;
335  unsigned int NBadHVHECA = 0;
336  unsigned int NBadHVHECC = 0;
337  unsigned int NBadHVFCALA = 0;
338  unsigned int NBadHVFCALC = 0;
339 
340  // loop over HVlines, to check if they are qualified as noisy
341  for ( HVlinesStatMap::const_iterator it = HVStats.begin(); it != HVStats.end(); ++it ) {
342  ATH_MSG_DEBUG(ctx.eventID().event_number()<<" candidate HVline " << it->first << " with " << it->second << " bad channels, out of "<<nCellsperLine->HVNcell(HWIdentifier(it->first))<<" channels");
343  if ( it->second >= m_BadChanFracPerHVline * nCellsperLine->HVNcell(it->first) ) {
344  HWIdentifier hwd(it->first);
345  noisyRO->add_noisy_hvline(hwd);
346  const std::vector<HWIdentifier> elecVec = hvid->getLArElectrodeIDvec(hwd);
347  int side = m_elecID->zside(elecVec[0]);
348  int part = m_elecID->detector(elecVec[0]);
349  switch(side) {
350  case 1: { ATH_MSG_DEBUG("Elec. side: "<<side);
351  switch(part){
352  case 0: case 1:{NBadHVEMBC += 1; break;}
353  case 2: case 3:{NBadHVEMECC += 1; break;}
354  case 4: {NBadHVHECC += 1; break;}
355  case 5: {NBadHVFCALC += 1; break;}
356  default: {ATH_MSG_WARNING("Wrong HV line detector "<<part); break;}
357  };
358  break;
359  }
360  case 0: { switch(part){
361  case 0: case 1:{NBadHVEMBA += 1; break;}
362  case 2: case 3:{NBadHVEMECA += 1; break;}
363  case 4: {NBadHVHECA += 1; break;}
364  case 5: {NBadHVFCALA += 1; break;}
365  default: {ATH_MSG_WARNING("Wrong HV line detector "<<part); break;}
366  };
367  break;
368  }
369  }
370  }// HVline is noisy
371  }// all hvlines
372 
373  uint8_t BadHVPartitions = 0;
374  if ( NBadHVEMBA >= m_MinBadHV ) BadHVPartitions |= LArNoisyROSummary::EMBAMask;
375  if ( NBadHVEMBC >= m_MinBadHV ) BadHVPartitions |= LArNoisyROSummary::EMBCMask;
376  if ( NBadHVEMECA >= m_MinBadHV ) BadHVPartitions |= LArNoisyROSummary::EMECAMask;
377  if ( NBadHVEMECC >= m_MinBadHV ) BadHVPartitions |= LArNoisyROSummary::EMECCMask;
378  if ( NBadHVHECA >= m_MinBadHV ) BadHVPartitions |= LArNoisyROSummary::HECAMask;
379  if ( NBadHVHECC >= m_MinBadHV ) BadHVPartitions |= LArNoisyROSummary::HECCMask;
380  if ( NBadHVFCALA >= m_MinBadHV ) BadHVPartitions |= LArNoisyROSummary::FCALAMask;
381  if ( NBadHVFCALC >= m_MinBadHV ) BadHVPartitions |= LArNoisyROSummary::FCALCMask;
382 
383  if ( BadHVPartitions != 0 ) noisyRO-> SetBadHVlinesPartitions(BadHVPartitions);
384 
385  return noisyRO;
386 }
387 
388 
389 
LArG4FSStartPointFilter.part
part
Definition: LArG4FSStartPointFilter.py:21
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
LArNoisyROSummary::EMBAMask
@ EMBAMask
Definition: LArNoisyROSummary.h:34
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
LArNoisyROSummary::FCALCMask
@ FCALCMask
Definition: LArNoisyROSummary.h:31
PlotCalibFromCool.ft
ft
Definition: PlotCalibFromCool.py:329
LArNoisyROSummary::EMECCMask
@ EMECCMask
Definition: LArNoisyROSummary.h:33
LArNoisyROTool::HVlinesStatMap
std::unordered_map< HWIdentifier, unsigned int > HVlinesStatMap
Definition: LArNoisyROTool.h:107
ReadCellNoiseFromCool.cell
cell
Definition: ReadCellNoiseFromCool.py:53
plotting.yearwise_efficiency.channel
channel
Definition: yearwise_efficiency.py:24
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
LArHVNMap
Definition: LArHVNMap.h:14
LArNoisyROTool::m_SaturatedCellQualityCut
unsigned int m_SaturatedCellQualityCut
Definition: LArNoisyROTool.h:136
xAOD::uint8_t
uint8_t
Definition: Muon_v1.cxx:557
LArNoisyROSummary::SetMNBLooseFlaggedPartitions
void SetMNBLooseFlaggedPartitions(uint8_t bitpattern)
Definition: LArNoisyROSummary.h:95
CaloCell_Base_ID::is_em_endcap
bool is_em_endcap(const Identifier id) const
test if the id belongs to the EM Endcap
LArNoisyROTool::m_BadChanFracPerHVline
float m_BadChanFracPerHVline
Definition: LArNoisyROTool.h:151
LArNoisyROSummary::HECAMask
@ HECAMask
Definition: LArNoisyROSummary.h:32
LArNoisyROTool::partitionNumber
size_t partitionNumber(const HWIdentifier) const
Definition: LArNoisyROTool.h:165
ReadCellNoiseFromCool.cabling
cabling
Definition: ReadCellNoiseFromCool.py:154
skel.it
it
Definition: skel.GENtoEVGEN.py:396
LArNoisyROTool::m_BadChanPerFEB
unsigned int m_BadChanPerFEB
Definition: LArNoisyROTool.h:129
LArNoisyROTool::m_mapPSFEB
std::unordered_map< unsigned int, unsigned int > m_mapPSFEB
Definition: LArNoisyROTool.h:106
Identifier::get_identifier32
Identifier32 get_identifier32() const
Get the 32-bit version Identifier, will be invalid if >32 bits needed.
LArOnlineID_Base::feb_begin
id_iterator feb_begin() const
Returns an iterator pointing to a feb identifier collection.
Definition: LArOnlineID_Base.cxx:1906
LArNoisyROSummary::SetMNBTight_PsVetoFlaggedPartitions
void SetMNBTight_PsVetoFlaggedPartitions(uint8_t bitpattern)
Definition: LArNoisyROSummary.h:98
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
LArNoisyROTool::m_ignore_front_innerwheel_cells
bool m_ignore_front_innerwheel_cells
Definition: LArNoisyROTool.h:123
HWIdentifier
Definition: HWIdentifier.h:13
LArOnlineID_Base::barrel_ec
int barrel_ec(const HWIdentifier id) const
Return the position barrel or endcap of a hardware cell identifier: barrel_ec = [0,...
Definition: LArOnlineID_Base.cxx:1938
LArNoisyROSummary::add_MNBTight_feb
void add_MNBTight_feb(HWIdentifier febid)
Definition: LArNoisyROSummary.cxx:62
LArNoisyROTool::m_elecID
const LArElectrodeID * m_elecID
Definition: LArNoisyROTool.h:113
LArNoisyROSummary::EMECAMask
@ EMECAMask
Definition: LArNoisyROSummary.h:33
Identifier32::get_compact
value_type get_compact() const
Get the compact id.
Definition: Identifier32.h:44
ReadCondHandle.h
CaloCell_ID.h
AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:95
dqt_zlumi_pandas.weight
int weight
Definition: dqt_zlumi_pandas.py:189
LArNoisyROTool::LArNoisyROTool
LArNoisyROTool()=delete
LArNoisyROTool::m_MinBadFEB
unsigned int m_MinBadFEB
Definition: LArNoisyROTool.h:132
TRT::Hit::side
@ side
Definition: HitInfo.h:83
LArNoisyROTool::m_hvMapTool
ToolHandle< ILArHVMapTool > m_hvMapTool
Definition: LArNoisyROTool.h:110
LArNoisyROTool::m_ignore_masked_cells
bool m_ignore_masked_cells
Definition: LArNoisyROTool.h:120
CaloCell_Base_ID::is_em
bool is_em(const Identifier id) const
test if the id belongs to LArEM
LArOnlineID_Base::channel
int channel(const HWIdentifier id) const
Return the channel number of a hardware cell identifier channel = [0,127] in all FEB.
Definition: LArOnlineID_Base.cxx:1963
LArOnOffIdMapping.h
LArNoisyROTool::m_partitionMask
std::array< uint8_t, 4 > m_partitionMask
Definition: LArNoisyROTool.h:158
LArOnlineID::isEMECchannel
bool isEMECchannel(const HWIdentifier id) const override final
Definition: LArOnlineID.cxx:763
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
LArNoisyROTool::m_CellQualityCut
unsigned int m_CellQualityCut
Definition: LArNoisyROTool.h:117
lumiFormat.i
int i
Definition: lumiFormat.py:85
CaloCell_Base_ID::sampling
int sampling(const Identifier id) const
LAr field values (NOT_VALID == invalid request)
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
LArElectrodeID::zside
int zside(const HWIdentifier id) const
Return an integer corresponding to the side of an hardware electrode identifier.
Definition: LArElectrodeID.h:367
LArNoisyROSummary::EMBCMask
@ EMBCMask
Definition: LArNoisyROSummary.h:34
LArOnlineID_Base::channel_Id
HWIdentifier channel_Id(int barrel_ec, int pos_neg, int feedthrough, int slot, int channel) const
create channel identifier from fields
Definition: LArOnlineID_Base.cxx:1565
CaloCell_Base_ID::is_em_endcap_inner
bool is_em_endcap_inner(const Identifier id) const
test if the id belongs to the EM Endcap inner wheel
LArNoisyROTool::initialize
virtual StatusCode initialize()
Definition: LArNoisyROTool.cxx:51
test_pyathena.parent
parent
Definition: test_pyathena.py:15
LArOnlineID_Base::pos_neg
int pos_neg(const HWIdentifier id) const
Return the side of a hardware cell identifier pos_neg = [0,1] positive-side or negative-side Barrel...
Definition: LArOnlineID_Base.cxx:1950
LArHVNMap.h
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
LArNoisyROSummary::HECCMask
@ HECCMask
Definition: LArNoisyROSummary.h:32
LArNoisyROSummary::get_noisy_febs
const std::vector< HWIdentifier > & get_noisy_febs() const
Definition: LArNoisyROSummary.cxx:115
LArNoisyROSummary::add_MNBLoose_feb
void add_MNBLoose_feb(HWIdentifier febid)
Definition: LArNoisyROSummary.cxx:82
LArNoisyROTool::FEBEvtStatMapCstIt
std::unordered_map< unsigned int, FEBEvtStat >::const_iterator FEBEvtStatMapCstIt
Definition: LArNoisyROTool.h:105
LArElectrodeID::detector
int detector(const HWIdentifier id) const
Return an integer corresponding to the detector of an hardware electrode identifier.
Definition: LArElectrodeID.h:361
LArNoisyROTool::m_MNBTightCut
unsigned int m_MNBTightCut
Definition: LArNoisyROTool.h:156
LArOnlineID_Base::feb_Id
HWIdentifier feb_Id(int barrel_ec, int pos_neg, int feedthrough, int slot) const
Create feb_Id from fields.
Definition: LArOnlineID_Base.cxx:1479
RPDUtils::sideA
unsigned constexpr int sideA
Definition: RPDUtils.h:16
LArNoisyROTool::m_SaturatedCellTightCut
unsigned int m_SaturatedCellTightCut
Definition: LArNoisyROTool.h:142
LArNoisyROSummary::add_MNBTight_PsVeto_feb
void add_MNBTight_PsVeto_feb(HWIdentifier febid)
Definition: LArNoisyROSummary.cxx:72
LArOnlineID_Base::feb_end
id_iterator feb_end() const
Definition: LArOnlineID_Base.cxx:1911
CaloCell_Base_ID::is_em_barrel
bool is_em_barrel(const Identifier id) const
test if the id belongs to the EM barrel
LArNoisyROTool::m_MinBadHV
unsigned int m_MinBadHV
Definition: LArNoisyROTool.h:154
LArNoisyROSummary::add_noisy_hvline
void add_noisy_hvline(HWIdentifier hvid)
Definition: LArNoisyROSummary.cxx:52
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
LArNoisyROTool::m_cablingKey
SG::ReadCondHandleKey< LArOnOffIdMapping > m_cablingKey
Definition: LArNoisyROTool.h:114
LArNoisyROSummary::SetMNBTightFlaggedPartitions
void SetMNBTightFlaggedPartitions(uint8_t bitpattern)
Definition: LArNoisyROSummary.h:92
LArNoisyROSummary.h
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
CaloCellContainer.h
CaloCellContainer
Container class for CaloCell.
Definition: CaloCellContainer.h:55
LArOnlineID_Base::isEMBchannel
bool isEMBchannel(const HWIdentifier id) const
Definition: LArOnlineID_Base.cxx:1648
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
LArNoisyROTool::m_MNBLooseCut
unsigned int m_MNBLooseCut
Definition: LArNoisyROTool.h:155
LArOnlineID_Base::feedthrough
int feedthrough(const HWIdentifier id) const
Return the feedthrough of a hardware cell identifier : feedthrough = [0,31] Barrel - A/C side or H/...
Definition: LArOnlineID_Base.cxx:1944
LArHVIdMapping
Definition: LArHVIdMapping.h:21
CaloDetDescrManager
This class provides the client interface for accessing the detector description information common to...
Definition: CaloDetDescrManager.h:473
CaloCell
Data object for each calorimeter readout cell.
Definition: CaloCell.h:57
CondAlgsOpts.found
int found
Definition: CondAlgsOpts.py:101
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
LArNoisyROTool::m_doHVline
bool m_doHVline
Definition: LArNoisyROTool.h:148
LArNoisyROTool.h
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
LArNoisyROTool::m_SaturatedCellEnergyTightCut
float m_SaturatedCellEnergyTightCut
Definition: LArNoisyROTool.h:139
LArHVNMap::HVNcell
short HVNcell(const HWIdentifier &chid) const
Definition: LArHVNMap.cxx:18
LArNoisyROTool::FEBEvtStatMap
std::unordered_map< unsigned int, FEBEvtStat > FEBEvtStatMap
Definition: LArNoisyROTool.h:103
LArNoisyROTool::process
virtual std::unique_ptr< LArNoisyROSummary > process(const EventContext &, const CaloCellContainer *, const std::set< unsigned int > *, const std::vector< HWIdentifier > *, const LArHVNMap *, const CaloDetDescrManager *, const LArHVIdMapping *) const
Definition: LArNoisyROTool.cxx:89
LArNoisyROSummary::FCALAMask
@ FCALAMask
Definition: LArNoisyROSummary.h:31
LArElectrodeID.h
AthAlgTool
Definition: AthAlgTool.h:26
LArOnlineID_Base::channel_name
std::string channel_name(const HWIdentifier id) const
Return a string corresponding to a feedthrough name given an identifier.
Definition: LArOnlineID_Base.cxx:219
LArNoisyROTool::m_calo_id
const CaloCell_ID * m_calo_id
Definition: LArNoisyROTool.h:111
LArNoisyROTool::m_onlineID
const LArOnlineID * m_onlineID
Definition: LArNoisyROTool.h:112
LArNoisyROSummary::add_noisy_feb
void add_noisy_feb(HWIdentifier febid)
Definition: LArNoisyROSummary.cxx:47
LArHVIdMapping::getLArElectrodeIDvec
const std::vector< HWIdentifier > & getLArElectrodeIDvec(HWIdentifier &hvlineId) const
Return a vector of LArElectrodeID corresponding to a given LArHVLineID.
Definition: LArHVIdMapping.cxx:84
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
LArOnlineID.h
LArNoisyROSummary
Summary information for noisy LAr preamp / FEBs.
Definition: LArNoisyROSummary.h:28
LArOnOffIdMapping
Definition: LArOnOffIdMapping.h:20
LArNoisyROTool::m_MNBTight_PsVetoCut
std::vector< unsigned int > m_MNBTight_PsVetoCut
Definition: LArNoisyROTool.h:157
Identifier
Definition: IdentifierFieldParser.cxx:14