ATLAS Offline Software
LArNoisyROTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2021 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 
18 
19 LArNoisyROTool::LArNoisyROTool( const std::string& type,
20  const std::string& name,
21  const IInterface* parent ) :
22  ::AthAlgTool ( type, name, parent ),
23  m_calo_id(nullptr), m_onlineID(nullptr),
25 {
26  declareInterface<ILArNoisyROTool >(this);
27  declareProperty( "BadChanPerFEB", m_BadChanPerFEB=30 );
28  declareProperty( "CellQualityCut", m_CellQualityCut=4000 );
29  declareProperty( "IgnoreMaskedCells", m_ignore_masked_cells=false );
30  declareProperty( "IgnoreFrontInnerWheelCells", m_ignore_front_innerwheel_cells=true );
31  declareProperty( "BadFEBCut", m_MinBadFEB=3 );
32 
33  declareProperty( "MNBLooseCut",m_MNBLooseCut=5,"Number of cells above CellQualityCut");
34  declareProperty( "MNBTightCut",m_MNBTightCut=17,"Number of cells above CellQualityCut");
35  declareProperty( "MNBTight_PsVetoCut",m_MNBTight_PsVetoCut={13,3},"Number of cells above CellQualityCut");
36  declareProperty( "SaturatedCellQualityCut", m_SaturatedCellQualityCut=65535);
37  declareProperty( "SaturatedCellEnergyTightCut", m_SaturatedCellEnergyTightCut=1000.);
38  declareProperty( "SaturatedCellTightCut", m_SaturatedCellTightCut=20);
39 }
40 
41 // Destructor
44 = default;
45 
46 // Athena algtool's Hooks
49 
51  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 !" );
52  return StatusCode::FAILURE;
53  }
54 
56  ATH_MSG_FATAL( "Configuration problem: LArNoisyROTool assumes that MNBLooseCut is smaller than MNBTightCut" );
57  return StatusCode::FAILURE;
58  }
59 
60  ATH_CHECK(detStore()->retrieve(m_calo_id,"CaloCell_ID"));
61  ATH_CHECK(detStore()->retrieve(m_onlineID,"LArOnlineID"));
63 
64  // Fill the map between any EMB FEB and the same FT PS FEB
65  // Filled only for EMB so far
66  for (std::vector<HWIdentifier>::const_iterator allFeb = m_onlineID->feb_begin();
67  allFeb != m_onlineID->feb_end(); ++allFeb) {
68 
69  HWIdentifier febid = HWIdentifier(*allFeb);
70  int FEBIndex = febid.get_identifier32().get_compact();
71  int FEBIndex_PS = 0;
72  int barrel_ec = m_onlineID->barrel_ec(febid);
73  if (barrel_ec == 0){
74  int pos_neg = m_onlineID->pos_neg(febid);
75  int ft = m_onlineID->feedthrough(febid);
76  FEBIndex_PS = (m_onlineID->feb_Id(0,pos_neg,ft,1)).get_identifier32().get_compact();
77  }
78  m_mapPSFEB[FEBIndex] = FEBIndex_PS;
79  }
80 
81  return StatusCode::SUCCESS;
82 }
83 
84 
85 std::unique_ptr<LArNoisyROSummary> LArNoisyROTool::process(const CaloCellContainer* cellContainer, const std::set<unsigned int>* knownBadFEBs, const std::vector<HWIdentifier>* knownMNBFEBs) const{
86 
87  std::unique_ptr<LArNoisyROSummary> noisyRO(new LArNoisyROSummary);
88 
89  if(!cellContainer) return noisyRO;
90 
92  const LArOnOffIdMapping* cabling=*larCablingHdl;
93 
94 
95  FEBEvtStatMap FEBStats; //counter per FEB
96 
97  unsigned int NsaturatedTightCutBarrelA = 0;
98  unsigned int NsaturatedTightCutBarrelC = 0;
99  unsigned int NsaturatedTightCutEMECA = 0;
100  unsigned int NsaturatedTightCutEMECC = 0;
101 
102 
103  CaloCellContainer::const_iterator cellItr = cellContainer->begin();
104  CaloCellContainer::const_iterator cellItrEnd = cellContainer->end();
105  for ( ; cellItr != cellItrEnd; ++cellItr )
106  {
107  const CaloCell* cell = (*cellItr);
108  if (!cell) continue;
109 
110  // only cells with a bad enough Quality Factor
111  if ( cell->quality() < m_CellQualityCut ) continue;
112 
113  // cells with zero energy have been masked by previous algorithms
114  // they should not matter for physics so don't consider them
115  if ( m_ignore_masked_cells && std::abs(cell->e()) < 0.1 ) continue; //Fixme: use provenance
116 
117  Identifier id = cell->ID();
118  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
119 
120  // saturated Qfactor ? Tight cuts.
121  if ( cell->quality()>=m_SaturatedCellQualityCut &&
122  std::abs(cell->e()) > m_SaturatedCellEnergyTightCut )
123  {
124  bool sideA = cell->eta() > 0.;
125  if ( m_calo_id->is_em_barrel(id) )
126  {
127  if ( sideA ) { NsaturatedTightCutBarrelA++; }
128  else { NsaturatedTightCutBarrelC++; }
129  }
130  else if ( m_calo_id->is_em_endcap(id) )
131  {
132  if ( sideA ) { NsaturatedTightCutEMECA++; }
133  else { NsaturatedTightCutEMECC++; }
134  }
135  }
136 
137 
138  // only LAr EM for bad FEBs
139  if ( m_calo_id->is_em(id) )
140  {
141  // get FEB ID and channel number
142  HWIdentifier hwid = cabling->createSignalChannelID(id);
143  HWIdentifier febid = m_onlineID->feb_Id(hwid);
144  unsigned int FEBindex = febid.get_identifier32().get_compact();
145  unsigned int channel = m_onlineID->channel(hwid);
146  FEBStats[FEBindex].addBadChannel(channel);
147  }
148  }
149 
150  // Store the Saturated flag per partition
151  uint8_t SatTightPartitions = 0;
152  if ( NsaturatedTightCutBarrelA >= m_SaturatedCellTightCut ) SatTightPartitions |= LArNoisyROSummary::EMBAMask;
153  if ( NsaturatedTightCutBarrelC >= m_SaturatedCellTightCut ) SatTightPartitions |= LArNoisyROSummary::EMBCMask;
154  if ( NsaturatedTightCutEMECA >= m_SaturatedCellTightCut ) SatTightPartitions |= LArNoisyROSummary::EMECAMask;
155  if ( NsaturatedTightCutEMECC >= m_SaturatedCellTightCut ) SatTightPartitions |= LArNoisyROSummary::EMECCMask;
156  bool badSaturatedTightCut = (SatTightPartitions != 0);
157  if ( badSaturatedTightCut ) noisyRO-> SetSatTightFlaggedPartitions(SatTightPartitions);
158 
159  // loop on all FEBs and check whether FEB can be declared as bad for the different type of flags:
160  // regular noise burst, weighted noise burst, MNB tight and loose
161  for ( FEBEvtStatMapCstIt it = FEBStats.begin(); it != FEBStats.end(); ++it ) {
162  ATH_MSG_VERBOSE(" candidate FEB " << it->first << " with " << it->second.badChannels() << " bad channels");
163  if ( it->second.badChannels() > m_BadChanPerFEB ) {
164  noisyRO->add_noisy_feb(HWIdentifier(it->first));
165  }
166 
167  // Loose MNBs
168  if ( it->second.badChannels() > m_MNBLooseCut ){
169  noisyRO->add_MNBLoose_feb(HWIdentifier(it->first));
170  ATH_MSG_DEBUG("Loose bad FEB " << it->first << " " << m_onlineID->channel_name(HWIdentifier(it->first)) << " with " << it->second.badChannels() << " bad channels");
171  // Tight_PsVeto MNBs
172  if ( it->second.badChannels() > m_MNBTight_PsVetoCut[0] ){
173  unsigned int associatedPSFEB = m_mapPSFEB.find(it->first)->second;
174  if (associatedPSFEB != 0){ // Check if a PS FEB is associated (TRUE only for EMB FEBs)
175  if (FEBStats.count(associatedPSFEB) == 0) noisyRO->add_MNBTight_PsVeto_feb(HWIdentifier(it->first));
176  else if (FEBStats[associatedPSFEB].badChannels() < m_MNBTight_PsVetoCut[1]) noisyRO->add_MNBTight_PsVeto_feb(HWIdentifier(it->first));
177  }
178  }
179  // Tight MNBs
180  if ( it->second.badChannels() > m_MNBTightCut ){
181  noisyRO->add_MNBTight_feb(HWIdentifier(it->first));
182  }
183  }
184 
185 
186 // // Noisy preamp removed as no used currently
187 // // Kept here just in case we may want to revive it
188 // const unsigned int* PAcounters = it->second.PAcounters();
189 // for ( size_t i = 0; i < 32; i++ ) {
190 // if ( PAcounters[i] > m_BadChanPerPA ) {
191 // uint64_t PAid = static_cast<uint64_t>(1000000000)*static_cast<uint64_t>(i)+static_cast<uint64_t>(it->first);
192 // ATH_MSG_DEBUG(" bad preamp " << i << " in FEB " << it->first << " ID " << PAid);
193 // noisyRO->add_noisy_preamp(HWIdentifier(it->first),4*i);
194 // if (m_printSummary) m_badPA_counters[PAid]++;
195 // }
196 // }
197 
198  }//end loop over m_FEBats
199 
200 
201  // Count noisy FEB per partition EMEC-EMB - Simple and weighted quantities
202  unsigned int NBadFEBEMECA = 0; unsigned int NBadFEBEMECA_W = 0;
203  unsigned int NBadFEBEMECC = 0; unsigned int NBadFEBEMECC_W = 0;
204  unsigned int NBadFEBEMBA = 0; unsigned int NBadFEBEMBA_W = 0;
205  unsigned int NBadFEBEMBC = 0; unsigned int NBadFEBEMBC_W = 0;
206 
207  const std::vector<HWIdentifier>& badfebs = noisyRO->get_noisy_febs();
208 
209  //for ( std::vector<HWIdentifier>::const_iterator febit = badfebs.begin();
210  // febit != badfebs.end(); febit++ )
211  for (const HWIdentifier& febid : badfebs)
212  {
213  // first channel of FEB, as safety since FEBid seem to be the Id of the
214  // first channel (no guarantee?)
215  HWIdentifier chanID = m_onlineID->channel_Id(febid,0);
216 
217  int weight = 1;
218  // If the FEB is known to be subject to noise burst (list defiend as property)
219  // give a weight 2
220  const unsigned int int_id = febid.get_identifier32().get_compact();
221  if (knownBadFEBs->find(int_id)!=knownBadFEBs->end()) weight=2;
222 
223  if ( m_onlineID->isEMBchannel(chanID) )
224  {
225  if ( m_onlineID->pos_neg(chanID) == 1 ){
226  NBadFEBEMBA_W = NBadFEBEMBA_W + weight;
227  NBadFEBEMBA++;
228  }
229  else{
230  NBadFEBEMBC_W = NBadFEBEMBC_W + weight;
231  NBadFEBEMBC++;
232  }
233  }
234  else if ( m_onlineID->isEMECchannel(chanID) )
235  {
236  if ( m_onlineID->pos_neg(chanID) == 1 ){
237  NBadFEBEMECA_W = NBadFEBEMECA_W + weight;
238  NBadFEBEMECA++;
239  }
240  else{
241  NBadFEBEMECC_W = NBadFEBEMECC_W + weight;
242  NBadFEBEMECC++;
243  }
244  }
245  }
246 
247  uint8_t BadFEBPartitions = 0;
248  if ( NBadFEBEMBA > m_MinBadFEB ) BadFEBPartitions |= LArNoisyROSummary::EMBAMask;
249  if ( NBadFEBEMBC > m_MinBadFEB ) BadFEBPartitions |= LArNoisyROSummary::EMBCMask;
250  if ( NBadFEBEMECA > m_MinBadFEB ) BadFEBPartitions |= LArNoisyROSummary::EMECAMask;
251  if ( NBadFEBEMECC > m_MinBadFEB ) BadFEBPartitions |= LArNoisyROSummary::EMECCMask;
252  bool badFEBFlag = (BadFEBPartitions != 0);
253  if ( badFEBFlag ) noisyRO-> SetBadFEBFlaggedPartitions(BadFEBPartitions);
254 
255  uint8_t BadFEBPartitions_W = 0;
256  if ( NBadFEBEMBA_W > m_MinBadFEB ) BadFEBPartitions_W |= LArNoisyROSummary::EMBAMask;
257  if ( NBadFEBEMBC_W > m_MinBadFEB ) BadFEBPartitions_W |= LArNoisyROSummary::EMBCMask;
258  if ( NBadFEBEMECA_W > m_MinBadFEB ) BadFEBPartitions_W |= LArNoisyROSummary::EMECAMask;
259  if ( NBadFEBEMECC_W > m_MinBadFEB ) BadFEBPartitions_W |= LArNoisyROSummary::EMECCMask;
260  bool badFEBFlag_W = (BadFEBPartitions_W != 0);
261  if ( badFEBFlag_W ) noisyRO-> SetBadFEB_WFlaggedPartitions(BadFEBPartitions_W);
262 
263 
264 
265  //Check for Mini Noise Bursts:
266  uint8_t MNBTightPartition=0;
267  uint8_t MNBTight_PsVetoPartition=0;
268  uint8_t MNBLoosePartition=0;
269 
270  std::array<unsigned,5> nTightMNBFEBSperPartition({{0,0,0,0,0}});
271  std::array<unsigned,5> nTight_PsVetoMNBFEBSperPartition({{0,0,0,0,0}});
272  std::array<unsigned,5> nLooseMNBFEBSperPartition({{0,0,0,0,0}});
273  for (HWIdentifier febid: *knownMNBFEBs) { //Loop over known MNB FEBs
274  //FEBEvtStatMapCstIt statIt=FEBStats.find(febid.get_identifier32().get_compact());
275  FEBEvtStatMapCstIt statIt=FEBStats.find(febid.get_identifier32().get_compact());
276  if (statIt!=FEBStats.end()) {
277  if (statIt->second.badChannels()>=m_MNBLooseCut) {
278  (nLooseMNBFEBSperPartition[partitionNumber(febid)])++;
279  // Tight_PsVeto MNBs
280  if ( statIt->second.badChannels() > m_MNBTight_PsVetoCut[0] ){
281  unsigned int associatedPSFEB = m_mapPSFEB.find(statIt->first)->second;
282  if (associatedPSFEB != 0){
283  if (FEBStats.count(associatedPSFEB) == 0) (nTight_PsVetoMNBFEBSperPartition[partitionNumber(febid)])++;
284  else if (FEBStats[associatedPSFEB].badChannels() < m_MNBTight_PsVetoCut[1]) (nTight_PsVetoMNBFEBSperPartition[partitionNumber(febid)])++;
285  }
286  }
287  // Tight MNBs
288  if (statIt->second.badChannels()>=m_MNBTightCut)
289  (nTightMNBFEBSperPartition[partitionNumber(febid)])++;
290  }
291  }//End FEB in list of bad-Q FEBs
292  }//end loop over known MNB Febs
293 
294 
295  for (unsigned iP=0;iP<4;++iP) {
296  ATH_MSG_DEBUG( "Partition " << iP << ": Found " << nLooseMNBFEBSperPartition[iP] << " MNB FEBs with more than " << m_MNBLooseCut << " bad-Q channels" );
297  ATH_MSG_DEBUG( "Partition " << iP << ": Found " << nTightMNBFEBSperPartition[iP] << " MNB FEBs with more than " << m_MNBTightCut << " bad-Q channels" );
298  if (nLooseMNBFEBSperPartition[iP]>0) MNBLoosePartition |= m_partitionMask[iP];
299  if (nTightMNBFEBSperPartition[iP]>0) MNBTightPartition |= m_partitionMask[iP];
300  if (nTight_PsVetoMNBFEBSperPartition[iP]>0) MNBTight_PsVetoPartition |= m_partitionMask[iP];
301  }// end loop over partitions
302 
303  noisyRO->SetMNBTightFlaggedPartitions(MNBTightPartition);
304  noisyRO->SetMNBTight_PsVetoFlaggedPartitions(MNBTight_PsVetoPartition);
305  noisyRO->SetMNBLooseFlaggedPartitions(MNBLoosePartition);
306 
307  return noisyRO;
308 }
309 
310 
312 
313  return StatusCode::SUCCESS;
314 }
315 
316 
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
LArNoisyROTool::process
virtual std::unique_ptr< LArNoisyROSummary > process(const CaloCellContainer *, const std::set< unsigned int > *, const std::vector< HWIdentifier > *) const
Definition: LArNoisyROTool.cxx:85
LArNoisyROSummary::EMBAMask
@ EMBAMask
Definition: LArNoisyROSummary.h:32
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
PlotCalibFromCool.ft
ft
Definition: PlotCalibFromCool.py:329
LArNoisyROSummary::EMECCMask
@ EMECCMask
Definition: LArNoisyROSummary.h:31
ReadCellNoiseFromCool.cell
cell
Definition: ReadCellNoiseFromCool.py:53
plotting.yearwise_efficiency.channel
channel
Definition: yearwise_efficiency.py:28
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
LArNoisyROTool::m_SaturatedCellQualityCut
unsigned int m_SaturatedCellQualityCut
Definition: LArNoisyROTool.h:145
xAOD::uint8_t
uint8_t
Definition: Muon_v1.cxx:575
LArNoisyROSummary::SetMNBLooseFlaggedPartitions
void SetMNBLooseFlaggedPartitions(uint8_t bitpattern)
Definition: LArNoisyROSummary.h:91
CaloCell_Base_ID::is_em_endcap
bool is_em_endcap(const Identifier id) const
test if the id belongs to the EM Endcap
LArNoisyROTool::partitionNumber
size_t partitionNumber(const HWIdentifier) const
Definition: LArNoisyROTool.h:167
ReadCellNoiseFromCool.cabling
cabling
Definition: ReadCellNoiseFromCool.py:154
skel.it
it
Definition: skel.GENtoEVGEN.py:423
LArNoisyROTool::m_BadChanPerFEB
unsigned int m_BadChanPerFEB
Definition: LArNoisyROTool.h:133
LArNoisyROTool::m_mapPSFEB
std::unordered_map< unsigned int, unsigned int > m_mapPSFEB
Definition: LArNoisyROTool.h:112
LArOnlineID_Base::feb_begin
id_iterator feb_begin() const
Returns an iterator pointing to a feb identifier collection.
Definition: LArOnlineID_Base.cxx:1910
LArNoisyROSummary::SetMNBTight_PsVetoFlaggedPartitions
void SetMNBTight_PsVetoFlaggedPartitions(uint8_t bitpattern)
Definition: LArNoisyROSummary.h:94
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:127
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:1942
LArNoisyROSummary::add_MNBTight_feb
void add_MNBTight_feb(HWIdentifier febid)
Definition: LArNoisyROSummary.cxx:55
LArNoisyROSummary::EMECAMask
@ EMECAMask
Definition: LArNoisyROSummary.h:31
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:200
LArNoisyROTool::m_MinBadFEB
unsigned int m_MinBadFEB
Definition: LArNoisyROTool.h:136
LArNoisyROTool::m_ignore_masked_cells
bool m_ignore_masked_cells
Definition: LArNoisyROTool.h:124
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:1967
LArOnOffIdMapping.h
LArNoisyROTool::m_partitionMask
std::array< uint8_t, 4 > m_partitionMask
Definition: LArNoisyROTool.h:160
LArOnlineID::isEMECchannel
bool isEMECchannel(const HWIdentifier id) const override final
Definition: LArOnlineID.cxx:774
Identifier32::get_compact
value_type get_compact(void) const
Get the compact id.
Definition: Identifier32.h:171
LArNoisyROTool::m_CellQualityCut
unsigned int m_CellQualityCut
Definition: LArNoisyROTool.h:121
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
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
LArNoisyROSummary::EMBCMask
@ EMBCMask
Definition: LArNoisyROSummary.h:32
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:1569
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:48
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:1954
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
LArNoisyROTool::~LArNoisyROTool
virtual ~LArNoisyROTool()
Destructor:
LArNoisyROSummary::get_noisy_febs
const std::vector< HWIdentifier > & get_noisy_febs() const
Definition: LArNoisyROSummary.cxx:108
LArNoisyROSummary::add_MNBLoose_feb
void add_MNBLoose_feb(HWIdentifier febid)
Definition: LArNoisyROSummary.cxx:75
LArNoisyROTool::FEBEvtStatMapCstIt
std::unordered_map< unsigned int, FEBEvtStat >::const_iterator FEBEvtStatMapCstIt
Definition: LArNoisyROTool.h:110
LArNoisyROTool::m_MNBTightCut
unsigned int m_MNBTightCut
Definition: LArNoisyROTool.h:157
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:1483
LArNoisyROTool::m_SaturatedCellTightCut
unsigned int m_SaturatedCellTightCut
Definition: LArNoisyROTool.h:151
LArNoisyROSummary::add_MNBTight_PsVeto_feb
void add_MNBTight_PsVeto_feb(HWIdentifier febid)
Definition: LArNoisyROSummary.cxx:65
LArOnlineID_Base::feb_end
id_iterator feb_end() const
Definition: LArOnlineID_Base.cxx:1915
CaloCell_Base_ID::is_em_barrel
bool is_em_barrel(const Identifier id) const
test if the id belongs to the EM barrel
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
LArNoisyROTool::m_cablingKey
SG::ReadCondHandleKey< LArOnOffIdMapping > m_cablingKey
Definition: LArNoisyROTool.h:118
LArNoisyROSummary::SetMNBTightFlaggedPartitions
void SetMNBTightFlaggedPartitions(uint8_t bitpattern)
Definition: LArNoisyROSummary.h:88
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:1652
LArNoisyROTool::LArNoisyROTool
LArNoisyROTool()
Default constructor:
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:156
ZDC::sideA
BySideTypeMod sideA(1)
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:1948
CaloCell
Data object for each calorimeter readout cell.
Definition: CaloCell.h:57
LArNoisyROTool.h
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
LArNoisyROTool::m_SaturatedCellEnergyTightCut
float m_SaturatedCellEnergyTightCut
Definition: LArNoisyROTool.h:148
LArNoisyROTool::finalize
virtual StatusCode finalize()
Definition: LArNoisyROTool.cxx:311
LArNoisyROTool::FEBEvtStatMap
std::unordered_map< unsigned int, FEBEvtStat > FEBEvtStatMap
Definition: LArNoisyROTool.h:108
declareProperty
#define declareProperty(n, p, h)
Definition: BaseFakeBkgTool.cxx:15
AthAlgTool
Definition: AthAlgTool.h:26
Identifier::get_identifier32
Identifier32 get_identifier32(void) const
Get the 32-bit version Identifier, will be invalid if >32 bits needed.
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:218
LArNoisyROTool::m_calo_id
const CaloCell_ID * m_calo_id
Definition: LArNoisyROTool.h:116
LArNoisyROTool::m_onlineID
const LArOnlineID * m_onlineID
Definition: LArNoisyROTool.h:117
LArNoisyROSummary::add_noisy_feb
void add_noisy_feb(HWIdentifier febid)
Definition: LArNoisyROSummary.cxx:45
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:26
LArOnOffIdMapping
Definition: LArOnOffIdMapping.h:20
LArNoisyROTool::m_MNBTight_PsVetoCut
std::vector< unsigned int > m_MNBTight_PsVetoCut
Definition: LArNoisyROTool.h:158