ATLAS Offline Software
Loading...
Searching...
No Matches
LArCoverageAlg.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
5// ********************************************************************
6//
7// NAME: LArCoverageAlg.cxx
8// PACKAGE: LArMonitoring
9//
10// AUTHOR: Margherita Spalla, migrated from LArCoverage by Jessica Leveque
11//
12// Class for monitoring : Detector cells in the readout
13// Masked Channels from database
14// Availability of calibration constants
15// Bad calibration at FEB level
16// ********************************************************************
17
18#include "LArCoverageAlg.h"
21#include "CaloDetDescr/CaloDetDescrElement.h"
22
23
24
25#include <sstream>
26#include <iomanip>
27#include <fstream>
28#include <string>
29#include <vector>
30#include <cstdlib>
31#include <functional>
32#include <map>
33#include <utility>
34
35
36
37
38using namespace std;
39
40/*---------------------------------------------------------*/
41LArCoverageAlg::LArCoverageAlg(const std::string& name, ISvcLocator* pSvcLocator )
42 : AthMonitorAlgorithm(name,pSvcLocator)
43{
44
45 m_LArOnlineIDHelper = nullptr;
46 m_LArEM_IDHelper = nullptr;
47 m_LArFCAL_IDHelper = nullptr;
48 m_LArHEC_IDHelper = nullptr;
49 m_caloIdMgr = nullptr;
50 }
51
52/*---------------------------------------------------------*/
55
56/*---------------------------------------------------------*/
57StatusCode
59{
60 ATH_MSG_INFO( "Initialize LArCoverageAlg" );
61
63 TString warn_binning="";
64 if(m_NphiBinsEMB1!=256) warn_binning="NphiBinsEMB1!=256 ";
65 if(m_NphiBinsEMEC2!=256) warn_binning="NphiBinsEMEC2!=256 ";
66 if((int)(m_NphiBinsHEC.size())<m_Nsample) ATH_MSG_ERROR("NphiBinsHEC must contain " << m_Nsample << " elements");
67 if(m_NphiBinsHEC[0]!=64) warn_binning="NphiBinsHEC[0]!=64 ";
68 if(m_NphiBinsHEC[1]!=64) warn_binning="NphiBinsHEC[1]!=64 ";
69 if(m_NphiBinsHEC[2]!=64) warn_binning="NphiBinsHEC[2]!=64 ";
70 if(m_NphiBinsHEC[3]!=64) warn_binning="NphiBinsHEC[3]!=64 ";
71
72
74 ATH_CHECK( detStore()->retrieve( m_caloIdMgr ) );
75 m_LArEM_IDHelper = m_caloIdMgr->getEM_ID();
76 m_LArHEC_IDHelper = m_caloIdMgr->getHEC_ID();
77 m_LArFCAL_IDHelper = m_caloIdMgr->getFCAL_ID();
78
79 ATH_CHECK( detStore()->retrieve(m_LArOnlineIDHelper, "LArOnlineID") );
80 ATH_CHECK( m_BCKey.initialize() );
81 ATH_CHECK( m_BFKey.initialize() );
82 ATH_CHECK( m_caloMgrKey.initialize() );
83
85 ATH_CHECK(m_bcMask.buildBitMask(m_problemsToMask,msg()));
86
88 ATH_CHECK(m_cablingKey.initialize());
89
90
92 ATH_CHECK( m_noiseCDOKey.initialize() );
93
95 ATH_CHECK( m_rawChannelsKey.initialize() );
96
97 std::vector<std::string> availableErrorCodesStrs;
99 for (const auto& code : m_availableErrorCodes) {
100 availableErrorCodesStrs.emplace_back(Form("%d", code));
101 m_availableErrorCodesPairs.emplace_back(code, availableErrorCodesStrs.back());
102 }
103
108
117
120
123}
124
125
126
127/*---------------------------------------------------------*/
128StatusCode
129LArCoverageAlg::fillHistograms( const EventContext& ctx ) const
130{
131 ATH_MSG_DEBUG( "in fillHists()" );
132
133 if(ctx.evt()+1 > m_nevents ) return StatusCode::SUCCESS; //ctx.evt() counts from 0
134
135 auto noise = Monitored::Scalar<float>("noise",0.);
136 auto etaChan = Monitored::Scalar<float>("etaChan",1e3);
137 auto flag = Monitored::Scalar<int>("flag",0);
138 auto single_channel = Monitored::Scalar<int>("single_channel",-1);
139 auto lb1 = Monitored::Scalar<float>("lb1",0);
140 auto lb1_x = Monitored::Scalar<float>("lb1_x",0);
141
143 auto mon_FtSlot = Monitored::Scalar<int>("mon_FtSlot",-1);
144 std::vector<LArChanHelp> the_coverageMap(0);
145 auto ref_the_coverageMap = std::ref(the_coverageMap);
146 //Note for when we'll have the proper histogram class: the feedthrough-slot coverage plot must be filled with the latest value, the eta-phi coverage plot must be filled with the maximum value
147 auto mon_ChanFtSlot = Monitored::Collection("mon_ChanFtSlot",ref_the_coverageMap,[](const LArChanHelp& ch){return ch.getChFtSlot();});
148 auto mon_Channels = Monitored::Collection("mon_Channels",ref_the_coverageMap,[](const LArChanHelp& ch){return ch.getChNumber();});
149 auto mon_Eta = Monitored::Collection("mon_Eta",ref_the_coverageMap,[](const LArChanHelp& ch){return ch.getChEta();});
150 auto mon_Phi = Monitored::Collection("mon_Phi",ref_the_coverageMap,[](const LArChanHelp& ch){return ch.getChPhi();});
151
152 //cutmasks for filling the proper partition
153 auto mon_isSampling0 = Monitored::Collection("isSampl0",ref_the_coverageMap,[](const LArChanHelp& ch){return (ch.getChSampling()==0);});
154 auto mon_isSampling1 = Monitored::Collection("isSampl1",ref_the_coverageMap,[](const LArChanHelp& ch){return (ch.getChSampling()==1);});
155 auto mon_isSampling2 = Monitored::Collection("isSampl2",ref_the_coverageMap,[](const LArChanHelp& ch){return (ch.getChSampling()==2);});
156 auto mon_isSampling3 = Monitored::Collection("isSampl3",ref_the_coverageMap,[](const LArChanHelp& ch){return (ch.getChSampling()==3);});
157
163 std::map<int,std::map<std::string,std::vector<LArChanHelp> > > coverageMap;
164 for(auto code : m_availableErrorCodes) {
165 for(const auto & part : m_CoverageBarrelPartitions) coverageMap[code][part] = std::vector<LArChanHelp>(0);
166 for(const auto & part : m_CoverageEndcapPartitions) coverageMap[code][part] = std::vector<LArChanHelp>(0);
167 }
168
170 std::vector<long> knownDeadFEBs(0);
171 std::vector<long> knownErrorFEBs(0);
172
175 ATH_CHECK(caloMgrHandle.isValid());
176 const CaloDetDescrManager* ddman = *caloMgrHandle;
177
180 const LArOnOffIdMapping* larCabling{*cablingHdl};
181 if(!larCabling){
182 ATH_MSG_ERROR("Do not have mapping object " << m_cablingKey.key() );
183 return StatusCode::FAILURE;
184 }
185
188 if(! pRawChannelsContainer.isValid() ) {
189 ATH_MSG_WARNING( "Can\'t retrieve LArRawChannelContainer with key " << m_rawChannelsKey );
190 return StatusCode::SUCCESS;
191 }
192
195 const CaloNoise* noiseCDO=*noiseHdl;
196
197 if(ctx.evt() == 0){ //first event
198 lb1 = (float)ctx.eventID().lumi_block();
200 }
201
202
205 const LArBadChannelCont* bcCont{*bch};
206
207
208 ATH_MSG_DEBUG( "collect known faulty FEBs" );
210 const LArBadFebCont* mfCont{*bf};
211 if(!mfCont) ATH_MSG_WARNING( "Do not have Missing FEBs container !!" );
212 else {
213 for (std::vector<HWIdentifier>::const_iterator allFeb = m_LArOnlineIDHelper->feb_begin();allFeb != m_LArOnlineIDHelper->feb_end(); ++allFeb) {
214 HWIdentifier febid = HWIdentifier(*allFeb);
215 const LArBadFeb febStatus = mfCont->status(febid);
216 if (febStatus.deadAll() || febStatus.deadReadout()) knownDeadFEBs.push_back(febid.get_compact());
217 if(febStatus.inError()) knownErrorFEBs.push_back(febid.get_compact());
218 }
219 }
220
221
222 ATH_MSG_DEBUG( "now loop on channels" );
224 for (const LArRawChannel& pRawChannel : *pRawChannelsContainer) {
225 uint16_t provenanceChan = pRawChannel.provenance();
226 float energyChan = pRawChannel.energy();
227 HWIdentifier id = pRawChannel.hardwareID();
228 Identifier offlineID = larCabling->cnvToIdentifier(id);
229
231 if(!larCabling->isOnlineConnected(id)) continue;
232
234 HWIdentifier febID = m_LArOnlineIDHelper->feb_Id(id);
235 HWIdentifier feedthroughID = m_LArOnlineIDHelper->feedthrough_Id(id);
236 single_channel = m_LArOnlineIDHelper->channel(id);
237 int slot = m_LArOnlineIDHelper->slot(febID);
238 int ft = m_LArOnlineIDHelper->feedthrough(feedthroughID);
239
241 float phiChan = 0.;
242 const CaloDetDescrElement* caloDetElement = ddman->get_element(offlineID);
243 if(caloDetElement == 0 ){
244 ATH_MSG_ERROR( "Cannot retrieve (eta,phi) coordinates for raw channels" );
245 continue;
246 }else{
247 etaChan = caloDetElement->eta_raw();
248 phiChan = caloDetElement->phi_raw();
249 }
250
252 if (m_LArOnlineIDHelper->isHECchannel(id)) phiChan = CaloPhiRange::fix(phiChan);
253
255 const auto idx = caloDetElement->getSubCalo();
256 if (idx == CaloCell_ID::NOT_VALID){
257 ATH_MSG_ERROR( "Invalid calo cell index" );
258 continue;
259 }
260 noise = noiseCDO->getNoise(offlineID,m_highestGain[idx]);
261
262 if(ctx.evt() == 0){ //first event
264 std::string cnGroup_toFill="";
265 if(m_LArOnlineIDHelper->isEMBchannel(id) || m_LArOnlineIDHelper->isEMECchannel(id)){
266 int sampling = m_LArEM_IDHelper->sampling(offlineID);
267 if(sampling>=0 && sampling<m_Nsample) fill(m_tools[m_CaloNoiseGroupArrEM.at(sampling)],etaChan,noise);
268 else ATH_MSG_WARNING( "LAr IDhelper returned unexpected sampling: " << sampling << ". Group EM could not be filled.");
269 }
270 if(m_LArOnlineIDHelper->isHECchannel(id)){
271 int sampling = m_LArHEC_IDHelper->sampling(offlineID);
272 if(sampling>=0 && sampling<m_Nsample) fill(m_tools[m_CaloNoiseGroupArrHEC.at(sampling)],etaChan,noise);
273 else ATH_MSG_WARNING( "LAr IDhelper returned unexpected sampling: " << sampling << ". Group HEC could not be filled.");
274 }
275 if(m_LArOnlineIDHelper->isFCALchannel(id)){
276 int sampling = m_LArFCAL_IDHelper->module(offlineID);
277 if(sampling>=0 && sampling<m_Nsample) fill(m_tools[m_CaloNoiseGroupArrFCAL.at(sampling)],etaChan,noise);
278 else ATH_MSG_WARNING( "LAr IDhelper returned unexpected sampling: " << sampling << ". Group FCAL could not be filled.");
279 }
280
281
283 flag = DBflag(id,bcCont);
284 if (flag!=0) {//only fill bad channels
285 std::string the_side= (etaChan >= 0 ? "A" : "C");
286 if(m_LArOnlineIDHelper->isEMBchannel(id)){
287 mon_FtSlot=ft*m_NslotEMB+slot;
288 fill(m_tools[m_BadChannelToolArrayBarrel.at(the_side)],mon_FtSlot,single_channel,flag);
289 }else{
290 mon_FtSlot=ft*m_NslotEMEC+slot;
291 fill(m_tools[m_BadChannelToolArrayEndcap.at(the_side)],mon_FtSlot,single_channel,flag);
292 }
293 }
294 } //end of 'if(ctx.evt() == 0)'
295
296
297 //
298 // Compute cells status
299 //
300
301 int cellContent = 0;
302
309 if (LArProv::test(provenanceChan,provPattern)) {
310 if(m_bcMask.cellShouldBeMasked(bcCont,id)) cellContent=2;
311 else if(energyChan != 0) cellContent=3;
312 }
313
319 if(knownDeadFEBs.size()>0 && std::find(knownDeadFEBs.begin(), knownDeadFEBs.end(), febID.get_compact())!=knownDeadFEBs.end()) {
320 if(cellContent==0) cellContent=1;
321 else cellContent=4;
322 }
323 if(knownErrorFEBs.size()>0 && std::find(knownErrorFEBs.begin(), knownErrorFEBs.end(), febID.get_compact())!=knownErrorFEBs.end())cellContent=1;
324
326 const auto cellStatusCodeItr = std::find(m_availableErrorCodes.begin(),
328 cellContent);
329 if(cellStatusCodeItr!=m_availableErrorCodes.end()) {
330 std::string part;
331 int sampling=-1;
332 int i_ftslot=-1;
333 double etaFCal=0.;
334 double phiFCal=0.;
335 //set the variables for partition, sampling etc.
336
338 if(m_LArOnlineIDHelper->isEMBchannel(id) ) {
339 part="EMB";
340 sampling = m_LArEM_IDHelper->sampling(offlineID);
341 i_ftslot=ft*m_NslotEMB+slot-1;
342 }
344 if(m_LArOnlineIDHelper->isEMECchannel(id)) {
345 part="EMEC";
346 sampling = m_LArEM_IDHelper->sampling(offlineID);
347 i_ftslot=ft*m_NslotEMEC+slot-1;
348 }
350 if (m_LArOnlineIDHelper->isHECchannel(id)) {
351 part="HEC";
352 sampling = m_LArHEC_IDHelper->sampling(offlineID);
353 i_ftslot=ft*m_NslotHEC+slot-1;
354 }
356 if (m_LArOnlineIDHelper->isFCALchannel(id)) {
357 part="FCal";
358 sampling = m_LArFCAL_IDHelper->module(offlineID);
359 i_ftslot=ft*m_NslotFCAL+slot-1;
360 etaFCal = m_LArFCAL_IDHelper->eta(offlineID);
361 phiFCal = m_LArFCAL_IDHelper->phi(offlineID);
362 }
363
364 //set A-C side
365 if(etaChan >= 0) part+="A";
366 else part+="C";
367
368 if(part.find("FCal") != std::string::npos) coverageMap[cellContent][part].push_back(LArChanHelp(single_channel,i_ftslot,sampling,etaFCal,phiFCal));
369 else coverageMap[cellContent][part].push_back(LArChanHelp(single_channel,i_ftslot,sampling,etaChan,phiChan));
370 }//end of 'if cellContent in availableErrors'
371 }// end Raw Channels Loop
372
373
375
376 ATH_MSG_DEBUG( "now fill coverage plots");
377
378 for (const auto& chanStatusCodePair : m_availableErrorCodesPairs) {
379 //EMBA
380 ref_the_coverageMap=coverageMap[chanStatusCodePair.first]["EMBA"];
381 if(ref_the_coverageMap.get().size()!=0) fill(m_tools[m_CoverageToolArrayEMBA.at(chanStatusCodePair.second)],mon_Channels,mon_ChanFtSlot,mon_Eta,mon_Phi,mon_isSampling0,mon_isSampling1,mon_isSampling2,mon_isSampling3);
382 //EMBC
383 ref_the_coverageMap=coverageMap[chanStatusCodePair.first]["EMBC"];
384 if(ref_the_coverageMap.get().size()!=0) fill(m_tools[m_CoverageToolArrayEMBC.at(chanStatusCodePair.second)],mon_Channels,mon_ChanFtSlot,mon_Eta,mon_Phi,mon_isSampling0,mon_isSampling1,mon_isSampling2,mon_isSampling3);
385
386 //EMECA
387 ref_the_coverageMap=coverageMap[chanStatusCodePair.first]["EMECA"];
388 if(ref_the_coverageMap.get().size()!=0) fill(m_tools[m_CoverageToolArrayEMECA.at(chanStatusCodePair.second)],mon_Channels,mon_ChanFtSlot,mon_Eta,mon_Phi,mon_isSampling0,mon_isSampling1,mon_isSampling2,mon_isSampling3);
389
390 //EMECC
391 ref_the_coverageMap=coverageMap[chanStatusCodePair.first]["EMECC"];
392 if(ref_the_coverageMap.get().size()!=0) fill(m_tools[m_CoverageToolArrayEMECC.at(chanStatusCodePair.second)],mon_Channels,mon_ChanFtSlot,mon_Eta,mon_Phi,mon_isSampling0,mon_isSampling1,mon_isSampling2,mon_isSampling3);
393
394 //HECA
395 ref_the_coverageMap=coverageMap[chanStatusCodePair.first]["HECA"];
396 if(ref_the_coverageMap.get().size()!=0) fill(m_tools[m_CoverageToolArrayHECA.at(chanStatusCodePair.second)],mon_Channels,mon_ChanFtSlot,mon_Eta,mon_Phi,mon_isSampling0,mon_isSampling1,mon_isSampling2,mon_isSampling3);
397
398 //HECC
399 ref_the_coverageMap=coverageMap[chanStatusCodePair.first]["HECC"];
400 if(ref_the_coverageMap.get().size()!=0) fill(m_tools[m_CoverageToolArrayHECC.at(chanStatusCodePair.second)],mon_Channels,mon_ChanFtSlot,mon_Eta,mon_Phi,mon_isSampling0,mon_isSampling1,mon_isSampling2,mon_isSampling3);
401
402 //FCalA
403 ref_the_coverageMap=coverageMap[chanStatusCodePair.first]["FCalA"];
404 if(ref_the_coverageMap.get().size()!=0) fill(m_tools[m_CoverageToolArrayFCalA.at(chanStatusCodePair.second)],mon_Channels,mon_ChanFtSlot,mon_Eta,mon_Phi,mon_isSampling0,mon_isSampling1,mon_isSampling2,mon_isSampling3);
405
406 //FCalC
407 ref_the_coverageMap=coverageMap[chanStatusCodePair.first]["FCalC"];
408 if(ref_the_coverageMap.get().size()!=0) fill(m_tools[m_CoverageToolArrayFCalC.at(chanStatusCodePair.second)],mon_Channels,mon_ChanFtSlot,mon_Eta,mon_Phi,mon_isSampling0,mon_isSampling1,mon_isSampling2,mon_isSampling3);
409
410 }
411
412 return StatusCode::SUCCESS;
413}
414
415
416
417
418/*---------------------------------------------------------*/
420{
421 if(!bcCont) {
422 ATH_MSG_WARNING( "Do not have Bad chan container " << m_BCKey.key() );
423 return -1;
424 }
425
426 LArBadChannel bc = bcCont->status(onID);
427
428 int flag = 0;
429 if(bc.deadCalib()) flag = 1;
430 if(bc.lowNoiseHG()||bc.lowNoiseMG()||bc.lowNoiseLG()) flag = 2;
431 if(bc.distorted()) flag = 3;
432 if(bc.unstable()) flag = 4;
433 if(bc.sporadicBurstNoise()) flag = 5;
434 if(bc.highNoiseHG()|| bc.highNoiseMG() || bc.highNoiseLG()) flag = 6;
435 if(bc.deadReadout()||bc.deadPhys()||bc.almostDead()||bc.shortProblem()) flag = 7;
436
437 return flag;
438 }
439
440
441
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_INFO(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
LArBadXCont< LArBadFeb > LArBadFebCont
LArBadXCont< LArBadChannel > LArBadChannelCont
const ServiceHandle< StoreGateSvc > & detStore() const
virtual StatusCode initialize() override
initialize
AthMonitorAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor.
ToolHandleArray< GenericMonitoringTool > m_tools
Array of Generic Monitoring Tools.
This class groups all DetDescr information related to a CaloCell.
const CaloDetDescrElement * get_element(const Identifier &cellId) const
get element by its identifier
This class provides the client interface for accessing the detector description information common to...
float getNoise(const IdentifierHash h, const int gain) const
Accessor by IdentifierHash and gain.
Definition CaloNoise.h:34
static double fix(double phi)
value_type get_compact() const
Get the compact id.
bool shortProblem() const
bool lowNoiseHG() const
bool deadReadout() const
bool highNoiseHG() const
bool unstable() const
bool highNoiseMG() const
bool lowNoiseLG() const
bool almostDead() const
bool highNoiseLG() const
bool deadCalib() const
bool sporadicBurstNoise() const
bool deadPhys() const
bool distorted() const
bool lowNoiseMG() const
bool deadAll() const
FEB is completely missing, e.g. powered off.
Definition LArBadFeb.h:30
bool inError() const
FEB has readout errors, cannot be used.
Definition LArBadFeb.h:36
bool deadReadout() const
FEB is not sending readout data, but the L1 trigger path is working.
Definition LArBadFeb.h:33
LArBC_t status(const HWIdentifier channel) const
Query the status of a particular channel or FEB This is the main client access method.
virtual StatusCode fillHistograms(const EventContext &ctx) const override
Called each event.
Gaudi::Property< std::vector< int > > m_availableErrorCodes
SG::ReadCondHandleKey< LArOnOffIdMapping > m_cablingKey
Handle to LArOnOffIdMapping (former LArCablingService)
std::vector< int > m_CaloNoiseGroupArrEM
for tools array
Gaudi::Property< int > m_Nsample
Gaudi::Property< EventContext::ContextEvt_t > m_nevents
Properties.
std::map< std::string, int > m_CoverageToolArrayHECC
Gaudi::Property< std::vector< std::string > > m_problemsToMask
Handle to bad-channel tools.
virtual ~LArCoverageAlg()
Default destructor.
Gaudi::Property< std::string > m_BadChannelsGroupName
std::map< std::string, int > m_CoverageToolArrayEMECC
std::map< std::string, int > m_BadChannelToolArrayEndcap
SG::ReadCondHandleKey< LArBadFebCont > m_BFKey
Gaudi::Property< int > m_NslotEMB
const LArFCAL_ID * m_LArFCAL_IDHelper
SG::ReadCondHandleKey< CaloDetDescrManager > m_caloMgrKey
Gaudi::Property< std::vector< std::string > > m_Sides
Gaudi::Property< int > m_NslotFCAL
Gaudi::Property< std::vector< std::string > > m_CoverageEndcapPartitions
std::map< std::string, int > m_CoverageToolArrayHECA
std::map< std::string, int > m_CoverageToolArrayEMECA
virtual StatusCode initialize() override
Overwrite dummy method from AlgTool.
Gaudi::Property< std::vector< std::string > > m_CoverageBarrelPartitions
SG::ReadHandleKey< LArRawChannelContainer > m_rawChannelsKey
Gaudi::Property< int > m_NphiBinsEMB1
Gaudi::Property< std::vector< int > > m_NphiBinsHEC
LArCoverageAlg(const std::string &name, ISvcLocator *pSvcLocator)
const LArHEC_ID * m_LArHEC_IDHelper
std::map< std::string, int > m_CoverageToolArrayFCalA
Gaudi::Property< int > m_NslotHEC
Gaudi::Property< std::string > m_CoverageHWGroupName
std::vector< int > m_CaloNoiseGroupArrHEC
SG::ReadCondHandleKey< LArBadChannelCont > m_BCKey
SG::ReadCondHandleKey< CaloNoise > m_noiseCDOKey
Key for CaloNoise.
std::map< std::string, int > m_CoverageToolArrayEMBC
const CaloIdManager * m_caloIdMgr
std::map< std::string, int > m_CoverageToolArrayEMBA
int DBflag(HWIdentifier, const LArBadChannelCont *) const
To retrieve bad channel DB keywords.
Gaudi::Property< int > m_NslotEMEC
LArBadChannelMask m_bcMask
Gaudi::Property< std::string > m_CaloNoiseToolGroupName
const std::array< CaloGain::CaloGain, CaloCell_Base_ID::NSUBCALO > m_highestGain
for CaloNoise
std::map< std::string, int > m_CoverageToolArrayFCalC
std::map< std::string, int > m_BadChannelToolArrayBarrel
const LArEM_ID * m_LArEM_IDHelper
Gaudi::Property< int > m_NphiBinsEMEC2
std::vector< int > m_CaloNoiseGroupArrFCAL
const LArOnlineID * m_LArOnlineIDHelper
std::vector< std::pair< int, std::string > > m_availableErrorCodesPairs
Identifier cnvToIdentifier(const HWIdentifier &sid) const
create an Identifier from a HWIdentifier (inline)
bool isOnlineConnected(const HWIdentifier &sid) const
Test whether a HWIdentifier is connected of not (inline)
Liquid Argon ROD output object base class.
Declare a monitored scalar variable.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
bool test(const uint16_t prov, const LArProvenance check)
std::vector< V > buildToolMap(const ToolHandleArray< GenericMonitoringTool > &tools, const std::string &baseName, int nHist)
Builds an array of indices (base case)
ValuesCollection< T > Collection(std::string name, const T &collection)
Declare a monitored (double-convertible) collection.
STL namespace.
void fill(H5::Group &out_file, size_t iterations)