ATLAS Offline Software
Loading...
Searching...
No Matches
L1CaloCTPMonitorAlgorithm.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4#include <map>
5#include <utility>
6#include <set>
7#include <tuple>
8#include <algorithm>
9#include <vector>
10#include <iomanip>
11#include <sstream>
12
14
16
17L1CaloCTPMonitorAlgorithm::L1CaloCTPMonitorAlgorithm( const std::string& name, ISvcLocator* pSvcLocator )
18 : AthMonitorAlgorithm(name,pSvcLocator),
19 m_errorTool("LVL1::TrigT1CaloMonErrorTool/TrigT1CaloMonErrorTool")
20{
21}
22
24
25 ATH_MSG_DEBUG("L1CaloCTPMonitorAlgorith::initialize");
26 ATH_MSG_DEBUG("Package Name "<< m_packageName);
27
28 // we initialise all the containers that we need
29 ATH_CHECK(m_ctpRdoKey.initialize());
30 ATH_CHECK(m_cmxJetHitsLocation.initialize());
31 ATH_CHECK(m_cmxEtSumsLocation.initialize());
32 ATH_CHECK(m_cmxCpHitsLocation.initialize());
33
34 ATH_CHECK( m_L1MenuKey.initialize() );
35 renounce(m_L1MenuKey); // Detector Store data - hide this Data Dependency from the MT Scheduler
36
37
38 ATH_CHECK(m_errorTool.retrieve());
39
41}
42
43StatusCode L1CaloCTPMonitorAlgorithm::fillHistograms( const EventContext& ctx ) const {
44
45 ATH_MSG_DEBUG("L1CaloCTPMonitorAlgorithm::fillHistograms");
46 ATH_MSG_DEBUG("m_ctpRdoKey=" << m_ctpRdoKey);
47 ATH_MSG_DEBUG("m_cmxJetHitsLocation=" << m_cmxJetHitsLocation);
48 ATH_MSG_DEBUG("m_cmxEtSumsLocation=" << m_cmxEtSumsLocation);
49 ATH_MSG_DEBUG("m_cmxCpHitsLocation=" << m_cmxCpHitsLocation);
50
51 // monitored variables
52 std::vector<int> errors;
53 std::vector<std::reference_wrapper<Monitored::IMonitoredVariable>> variables;
54
55 // 1D
56 auto run = Monitored::Scalar<int>("run",GetEventInfo(ctx)->runNumber());
57
58 // read all objects needed
59 ATH_MSG_DEBUG("Begin to fetch store gate objects ..");
60
61 //--------------------------------------------------------------------------
62 //---------------- get information sent from CP CMXs to CTP ----------------
63 //--------------------------------------------------------------------------
64
65 // Retrieve CMX CP hits from StoreGate
67 ATH_CHECK(cmxCpHitsTES.isValid());
68
69 uint32_t EMHits0 = 0;
70 uint32_t EMHits1 = 0;
71 uint32_t TauHits0 = 0;
72 uint32_t TauHits1 = 0;
73
74 // CMX information for transmission check: System CMX -> CTP
75 if (cmxCpHitsTES.isValid()) {
76 xAOD::CMXCPHitsContainer::const_iterator cmxIterator = cmxCpHitsTES->begin();
77 xAOD::CMXCPHitsContainer::const_iterator cmxIteratorEnd = cmxCpHitsTES->end();
78
79 for (; cmxIterator != cmxIteratorEnd; ++cmxIterator) {
80
81 const uint8_t source = (*cmxIterator)->sourceComponent();
82 const uint8_t crate = (*cmxIterator)->crate();
83 const uint8_t cmx = (*cmxIterator)->cmx();
84
85 if (source == xAOD::CMXCPHits::TOTAL && crate == 3) {
86 if (cmx == 1) {
87 EMHits0 = (*cmxIterator)->hits0();
88 EMHits1 = (*cmxIterator)->hits1();
89 }
90 else {
91 TauHits0 = (*cmxIterator)->hits0();
92 TauHits1 = (*cmxIterator)->hits1();
93 }
94 }
95 }
96 }
97
98
99 //--------------------------------------------------------------------------
100 //----------------- get information sent from JEP CMXs to CTP --------------
101 //--------------------------------------------------------------------------
102
103 // Retrieve CMX Jet Hits from Storegate
105 ATH_CHECK(cmxJetHitsTES.isValid());
106
107 if(!cmxJetHitsTES.isValid()){
108 ATH_MSG_ERROR("No Jet Hits found in TES "<< m_cmxJetHitsLocation);
109 return StatusCode::FAILURE;
110 }
111
112 int Jet3BitHits = 0; // 3-bit multiplicities, thresholds 0-9, cable JET1
113 int Jet2BitHits = 0; // 2-bit multiplicities, thresholds 10-24, cable JET2
114
115 int Jet3BitHits0 = 0; // 3-bit multiplicities, thresholds 0-4, cable JET1
116 int Jet3BitHits1 = 0; // 3-bit multiplicities, thresholds 5-9, cable JET1
117 int Jet2BitHits0 = 0; // 2-bit multiplicities, thresholds 10-17, cable JET2
118 int Jet2BitHits1 = 0; // 2-bit multiplicities, thresholds 18-24, cable JET2
119
120 xAOD::CMXJetHitsContainer::const_iterator cmxJetIterator = cmxJetHitsTES->begin();
121 xAOD::CMXJetHitsContainer::const_iterator cmxJetIteratorEnd = cmxJetHitsTES->end();
122
123 // Transmission check: system CMX -> CTP
124 for (; cmxJetIterator != cmxJetIteratorEnd; ++cmxJetIterator) {
125 const uint32_t source = (*cmxJetIterator)->sourceComponent();
126 const uint32_t crate = (*cmxJetIterator)->crate();
127
128 if (source == xAOD::CMXJetHits::TOTAL_MAIN && crate == 1) {
129 Jet3BitHits0 = (*cmxJetIterator)->hits0();
130 Jet3BitHits1 = (*cmxJetIterator)->hits1();
131 Jet3BitHits = Jet3BitHits0 + (Jet3BitHits1<<15);
132 }
133 if (source == xAOD::CMXJetHits::TOTAL_FORWARD && crate == 1) {
134 Jet2BitHits0 = (*cmxJetIterator)->hits0();
135 Jet2BitHits1 = (*cmxJetIterator)->hits1();
136 Jet2BitHits = Jet2BitHits0 + (Jet2BitHits1<<16);
137 }
138 }
139
140 // Retrieve CMX Et sums from Storegate
142 ATH_CHECK(cmxEtHitsTES.isValid());
143
144 if(!cmxEtHitsTES.isValid()){
145 ATH_MSG_ERROR("No Et Hits found in TES "<< m_cmxEtSumsLocation);
146 return StatusCode::FAILURE;
147 }
148
149 int TEHits = 0; // Cable EN1 (full eta)
150 int XEHits = 0;
151 int XSHits = 0;
152 int TERestHits = 0; // Cable EN2 (restricted eta)
153 int XERestHits = 0;
154
155 xAOD::CMXEtSumsContainer::const_iterator cmxEtSumsIterator = cmxEtHitsTES->begin();
156 xAOD::CMXEtSumsContainer::const_iterator cmxEtSumsIteratorEnd = cmxEtHitsTES->end();
157
158 for (; cmxEtSumsIterator != cmxEtSumsIteratorEnd; ++ cmxEtSumsIterator) {
159 const uint32_t source = (*cmxEtSumsIterator)->sourceComponent();
160 const uint32_t crate = (*cmxEtSumsIterator)->crate();
161
162 // Sum Et hits
163 if (source == xAOD::CMXEtSums::SUM_ET_STANDARD && crate == 1) { // KW crate check might not be needed here...
164 TEHits = (*cmxEtSumsIterator)->et();
165 }
166
167 // Missing Et hits
168 if (source == xAOD::CMXEtSums::MISSING_ET_STANDARD && crate == 1) {
169 XEHits = (*cmxEtSumsIterator)->et();
170 }
171
172 // Missing Et significance hits
173 if (source == xAOD::CMXEtSums::MISSING_ET_SIG_STANDARD && crate == 1) {
174 XSHits = (*cmxEtSumsIterator)->et();
175 }
176
177 // Sum Et hits (restricted eta)
178 if (source == xAOD::CMXEtSums::SUM_ET_RESTRICTED && crate == 1) {
179 TERestHits = (*cmxEtSumsIterator)->et();
180 }
181
182 // Missing Et hits (restricted eta)
183 if (source == xAOD::CMXEtSums::MISSING_ET_RESTRICTED && crate == 1) {
184 XERestHits = (*cmxEtSumsIterator)->et();
185 }
186 }
187
188//--------------------------------------------------------------------------
189//----------------------- get the TIPs (input for CTP) ---------------------
190//--------------------------------------------------------------------------
191
192 SG::ReadHandle<CTP_RDO> const_ctpRdo(m_ctpRdoKey,ctx);
193 ATH_CHECK(const_ctpRdo.isValid());
194
195 if(!const_ctpRdo.isValid()){
196 ATH_MSG_ERROR("No CTP_RDO found in TES "<< m_ctpRdoKey);
197 return StatusCode::FAILURE;
198 }
199
200
201 // Make a writable copy and Set CTP version number to 4 when reading persistified data
202 std::vector<uint32_t> ctp_data=const_ctpRdo->getDataWords();
203 CTP_RDO ctpRdo(4,std::move(ctp_data));
204 ctpRdo.setL1AcceptBunchPosition(const_ctpRdo->getL1AcceptBunchPosition());
205 ctpRdo.setTurnCounter(const_ctpRdo->getTurnCounter());
206
207 if (ctpRdo.getCTPVersionNumber()==0) {
208 ATH_MSG_DEBUG("CTP version number not set, skipping CTP test");
209 }
210
211 CTP_Decoder ctp;
212 ctp.setRDO(&ctpRdo);
213
214 const uint16_t l1aPos = ctpRdo.getL1AcceptBunchPosition();
215 if (l1aPos >= ctp.getBunchCrossings().size()) {
216 ATH_MSG_DEBUG("CTP_RDO gave Invalid l1aPos");;
217 return StatusCode::SUCCESS;
218 }
219
220 ATH_MSG_DEBUG("CTP l1aPos, size : " << l1aPos << ", " << ctp.getBunchCrossings().size());
221 const CTP_BC& bunch = ctp.getBunchCrossings().at(l1aPos);
222
223//std::cout<<"CTP Confg = "<<getL1Menu(ctx)->thresholds().size()<<std::endl;
224
225 //--------------------------------------------------------------------------
226 //---------------------- compare L1Calo data with CTP ----------------------
227 //--------------------------------------------------------------------------
228
229 const int max_JET_2bit_Threshold_Number = 15;
230 const int max_JET_3bit_Threshold_Number = 10;
231 const int max_XE_Threshold_Number = 16;
232 const int max_TE_Threshold_Number = 16;
233 const int max_XS_Threshold_Number = 8;
234
235 //------------------------ EM Hits (3 bits / thresh) -----------------------
236 int offset = 0;
237 int threshBits = 3;
238 int totalBits = threshBits*L1DataDef::typeConfig(L1DataDef::EM).max/2;
239 ATH_MSG_DEBUG("totalBits = " << totalBits);
240
241 compare(bunch, EMHits0, totalBits, offset, EM1Type, ctx); // Cable EM1
242
243 offset += totalBits;
244 compare(bunch, EMHits1, totalBits, offset, EM2Type, ctx); // Cable EM2
245
246 //----------------------- Tau Hits (3 bits / thresh) ---------------------
247 offset += totalBits;
248 compare(bunch, TauHits0, totalBits, offset, Tau1Type, ctx); // Cable TAU1
249
250 offset += totalBits;
251 compare(bunch, TauHits1, totalBits, offset, Tau2Type, ctx); // Cable TAU2
252
253 //------------------------ Jet Hits (3 bits / thresh) ---------------------
254 offset += totalBits;
255 totalBits = threshBits*max_JET_3bit_Threshold_Number;
256 compare(bunch, Jet3BitHits, totalBits, offset, Jet3BitType, ctx); // Cable JET1
257
258 //----------------------- Jet Hits (2 bits / thresh) -------------------
259 offset += totalBits;
260 threshBits--;
261 totalBits = threshBits*max_JET_2bit_Threshold_Number;
262 compare(bunch, Jet2BitHits, totalBits, offset, Jet2BitType, ctx); // Cable JET2
263
264 //---------------------- TE Hits (1 bit / thresh) ------------------
265 offset += totalBits;
266 threshBits--;
267 totalBits = threshBits*max_TE_Threshold_Number/2; // Cable EN1
268 compare(bunch, TEHits, totalBits, offset, TEFullEtaType, ctx);
269
270 //------------------------ XE Hits (1 bit / thresh) --------------------
271 offset += totalBits;
272 totalBits = threshBits*max_XE_Threshold_Number/2;
273 compare(bunch, XEHits, totalBits, offset, XEFullEtaType, ctx);
274
275 //---------------------- XS Hits (1 bit / thresh) ------------------
276 offset += totalBits;
277 totalBits = threshBits*max_XS_Threshold_Number;
278 compare(bunch, XSHits, totalBits, offset, XSType, ctx);
279
280 //------------------------ Restricted Eta TE Hits (1 bit / thresh) --------------------
281 offset += totalBits;
282 totalBits = threshBits*max_TE_Threshold_Number/2; // Cable EN2
283 compare(bunch, TERestHits, totalBits, offset, TERestrictedEtaType, ctx);
284
285 //---------------------- Restricted Eta XE Hits (1 bit / thresh) ------------------
286 offset += totalBits;
287 totalBits = threshBits*max_XE_Threshold_Number/2;
288 compare(bunch, XERestHits, totalBits, offset, XERestrictedEtaType, ctx);
289
290 variables.push_back(run);
291 fill(m_packageName,variables);
292 variables.clear();
293
294 return StatusCode::SUCCESS;
295}
296
297// *********************************************************************
298// Private Methods
299// *********************************************************************
300
301void L1CaloCTPMonitorAlgorithm::compare(const CTP_BC& bunch, int hits, int totalBits,
302 int offset, L1CaloCTPHitTypes type, const EventContext& ctx ) const
303{
304
305
306 const int max_JET_2bit_Threshold_Number = 15;
307 const int max_JET_3bit_Threshold_Number = 10;
308 const int max_TAU_3bit_Threshold_Number = 16;
309 const int max_XE_Threshold_Number = 16;
310 const int max_TE_Threshold_Number = 16;
311 const int max_XS_Threshold_Number = 8;
312
313 std::map<std::string, int> threshMap;
314
315 const std::vector<std::shared_ptr<TrigConf::L1Threshold>>& thresholds = getL1Menu(ctx)->thresholds();
316 ATH_MSG_DEBUG("Size of thresholds vector: " << thresholds.size());
317
318 for (const auto& it : thresholds) {
319 int thisOffset = 0;
320 int nbits = 3;
321 const int threshNumber = it->mapping();
322 int fixedThreshNumber = threshNumber;
323
324 while (true) {
325 if ( it->type() == L1DataDef::typeAsString(L1DataDef::EM) ) {
326 if (threshNumber >= (int)L1DataDef::typeConfig(L1DataDef::EM).max/2) { // Cable EM2; else cable EM1
327 thisOffset += nbits*L1DataDef::typeConfig(L1DataDef::EM).max/2;
328 fixedThreshNumber -= L1DataDef::typeConfig(L1DataDef::EM).max/2;
329 }
330 break;
331 }
332 thisOffset += nbits*L1DataDef::typeConfig(L1DataDef::EM).max;
333 if ( it->type() == L1DataDef::typeAsString(L1DataDef::TAU) ) {
334 if (threshNumber >= (int)max_TAU_3bit_Threshold_Number/2) { // Cable TAU2; else cable TAU1
335 thisOffset += nbits*max_TAU_3bit_Threshold_Number/2;
336 fixedThreshNumber -= max_TAU_3bit_Threshold_Number/2;
337 }
338 break;
339 }
340 thisOffset += nbits*max_TAU_3bit_Threshold_Number;
341 if ( it->type() == L1DataDef::typeAsString(L1DataDef::JET) ) {
342 if (threshNumber >= (int)max_JET_3bit_Threshold_Number) { // Cable JET2 (2-bit thresholds); else JET1 (3-bit)
343 thisOffset += 3*max_JET_3bit_Threshold_Number;
344 fixedThreshNumber -= max_JET_3bit_Threshold_Number;
345 nbits--;
346 }
347 break;
348 }
349 thisOffset += 3*max_JET_3bit_Threshold_Number;
350 nbits--;
351 thisOffset += 2*max_JET_2bit_Threshold_Number;
352 nbits--;
353 if ( it->type() == L1DataDef::typeAsString(L1DataDef::TE) ) {
354 if (threshNumber >= (int)max_TE_Threshold_Number/2) { // Restricted eta TE threshold: jump to cable EN2
355 thisOffset += nbits*max_TE_Threshold_Number/2 + nbits*max_XE_Threshold_Number/2 + nbits*max_XS_Threshold_Number; // 8+8+8 bits on cable EN1
356 fixedThreshNumber -= max_TE_Threshold_Number/2;
357 }
358 break; // Full eta & restricted eta thresholds separated on two cables
359 }
360 thisOffset += nbits*max_TE_Threshold_Number/2;
361 if ( it->type() == L1DataDef::typeAsString(L1DataDef::XE) ) {
362 if (threshNumber >= (int)max_XE_Threshold_Number/2) { // Restricted eta XE threshold: jump to cable EN2
363 thisOffset += nbits*max_TE_Threshold_Number/2 + nbits*max_XE_Threshold_Number/2 + nbits*max_XS_Threshold_Number;
364 fixedThreshNumber -= max_XE_Threshold_Number/2;
365 }
366 break;
367 }
368 thisOffset += nbits*max_XE_Threshold_Number/2;
369 if ( it->type() == L1DataDef::typeAsString(L1DataDef::XS) ) break;
370 thisOffset += nbits*max_XS_Threshold_Number;
371 nbits--;
372 break;
373 }
374 if (nbits == 0) continue;
375 if (threshNumber < 0) continue;
376 threshMap.insert(std::make_pair(it->name(),
377 thisOffset + fixedThreshNumber*nbits));
378 ATH_MSG_DEBUG("threshMap: name, offset, threshNumber, nbits " << it->name() << " " << thisOffset << " " << fixedThreshNumber << " " << nbits);
379 } // End loop over thresholds vector
380
381 ATH_MSG_DEBUG("Size of threshMap = " << threshMap.size());
382
383 std::vector<std::pair<std::string, int>> newMap;
384 newMap.clear();
385
386 for (const auto& entry : threshMap) {
387
388 //int numBits = getNumBits(entry.first, ctx);
389 TrigConf::TriggerLine trigger_line = getL1Menu(ctx)->connector(getL1Menu(ctx)->connectorNameFromThreshold(entry.first)).triggerLine(entry.first);
390 int numBits = trigger_line.nbits();
391
392 for (int bit = 0; bit < numBits; ++bit) {
393 int newValue = entry.second + bit;
394
395 // Add the entry to the new map
396 newMap.push_back(std::make_pair(entry.first, newValue));
397 }
398 }
399
400 // Sort the newMap based on the second position values
401 std::sort(newMap.begin(), newMap.end(), [](const auto& lhs, const auto& rhs) {
402 return lhs.second < rhs.second;
403 });
404
405 ATH_MSG_DEBUG("Size of new threshMap = " << newMap.size());
406
407 // 1D
408 auto ctp_1d_L1CaloNeCTPSummary = Monitored::Scalar<float>("ctp_1d_L1CaloNeCTPSummary",0);
409 auto ctp_1d_L1CaloEqCTPSummary = Monitored::Scalar<float>("ctp_1d_L1CaloEqCTPSummary",0);
410 auto ctp_1d_TIPMatches = Monitored::Scalar<float>("ctp_1d_TIPMatches",0);
411 auto ctp_1d_HitNoTIPMismatch = Monitored::Scalar<float>("ctp_1d_HitNoTIPMismatch",0);
412 auto ctp_1d_TIPNoHitMismatch = Monitored::Scalar<float>("ctp_1d_TIPNoHitMismatch",0);
413
414 ATH_MSG_DEBUG("offset: " << offset << " totalBits: " << totalBits);
415 //std::string name(ctp_1d_L1CaloNeCTPSummary->GetXaxis()->GetBinLabel(1+type));
416 //std::string subdet((type == EM1Type || type == EM2Type || type == Tau1Type || type == Tau2Type) ? " CP: " : " JEP: ");
417
418 int mask = 0;
419 int tipHits = 0;
420
421 for (int bit = 0; bit < totalBits; ++bit) {
422 const int TIPid = (newMap[offset + bit]).second;
423
424 ATH_MSG_DEBUG("TIPid = " << TIPid);
425 if (TIPid < 0){ //|| TIPid > 511) {
426 continue;
427 }
428 const int HITbit= ((hits >> bit) & 0x1);
429 const int TIPbit = bunch.getTIP().test( TIPid );
430
431 ATH_MSG_DEBUG(TIPbit << " ");
432 tipHits |= (TIPbit << bit);
433 mask |= (1 << bit);
434 if (HITbit && HITbit == TIPbit){
435 ctp_1d_TIPMatches = TIPid;
436 fill(m_packageName,ctp_1d_TIPMatches);
437 }
438 else if (HITbit != TIPbit) {
439 if (HITbit){
440 ctp_1d_HitNoTIPMismatch = TIPid;
441 fill(m_packageName,ctp_1d_HitNoTIPMismatch);
442 }
443 else{
444 ctp_1d_TIPNoHitMismatch = TIPid;
445 fill(m_packageName,ctp_1d_TIPNoHitMismatch);
446 }
447 }
448 }
449
450
451 if (tipHits != (hits&mask)) {
452 ctp_1d_L1CaloNeCTPSummary = type;
453 fill(m_packageName, ctp_1d_L1CaloNeCTPSummary);
454 }
455 else if (tipHits){
456 ctp_1d_L1CaloEqCTPSummary = type;
457 fill(m_packageName,ctp_1d_L1CaloEqCTPSummary);
458 }
459}
460
461const TrigConf::L1Menu* L1CaloCTPMonitorAlgorithm::getL1Menu(const EventContext& ctx) const {
462 const TrigConf::L1Menu* menu = nullptr;
465 if( l1MenuHandle.isValid() ){
466 menu=l1MenuHandle.cptr();
467 }
468 } else {
469 menu = &(m_configSvc->l1Menu(ctx));
470 }
471
472 return menu;
473}
474
475/*void L1CaloCTPMon::setLabels(LWHist* hist, bool xAxis)
476{
477 LWHist::LWHistAxis* axis = (xAxis) ? hist->GetXaxis() : hist->GetYaxis();
478 axis->SetBinLabel(1+EM1Type, "EM1");
479 axis->SetBinLabel(1+EM2Type, "EM2");
480 axis->SetBinLabel(1+Tau1Type, "Tau1");
481 axis->SetBinLabel(1+Tau2Type, "Tau2");
482 axis->SetBinLabel(1+Jet3BitType, "Jet1 (3-bit)");
483 axis->SetBinLabel(1+Jet2BitType, "Jet2 (2-bit)");
484 axis->SetBinLabel(1+TEFullEtaType, "TE (full eta)");
485 axis->SetBinLabel(1+XEFullEtaType, "XE (full eta)");
486 axis->SetBinLabel(1+XSType, "XS");
487 axis->SetBinLabel(1+TERestrictedEtaType, "TE (restr. eta)");
488 axis->SetBinLabel(1+XERestrictedEtaType, "XE (restr. eta)");
489}*/
490
491
492
493
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_DEBUG(x)
#define max(a, b)
Definition cfImp.cxx:41
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)
const ServiceHandle< StoreGateSvc > & detStore() const
virtual StatusCode initialize() override
initialize
SG::ReadHandle< xAOD::EventInfo > GetEventInfo(const EventContext &) const
Return a ReadHandle for an EventInfo object (get run/event numbers, etc.)
AthMonitorAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor.
const std::bitset< 512 > & getTIP() const
get bitset of TIP words
Definition CTP_Decoder.h:80
void setL1AcceptBunchPosition(const uint8_t)
Definition CTP_RDO.cxx:141
unsigned int getCTPVersionNumber() const
Definition CTP_RDO.h:64
uint32_t getL1AcceptBunchPosition() const
Definition CTP_RDO.cxx:94
void setTurnCounter(const uint32_t)
Definition CTP_RDO.cxx:148
DataModel_detail::const_iterator< DataVector > const_iterator
Definition DataVector.h:838
virtual StatusCode fillHistograms(const EventContext &ctx) const override
adds event to the monitoring histograms
SG::ReadHandleKey< TrigConf::L1Menu > m_L1MenuKey
SG::ReadHandleKey< CTP_RDO > m_ctpRdoKey
L1CaloCTPHitTypes
Hit types for binning.
SG::ReadHandleKey< xAOD::CMXEtSumsContainer > m_cmxEtSumsLocation
L1CaloCTPMonitorAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
const TrigConf::L1Menu * getL1Menu(const EventContext &ctx) const
SG::ReadHandleKey< xAOD::CMXJetHitsContainer > m_cmxJetHitsLocation
void compare(const CTP_BC &bunch, int hits, int totalBits, int offset, L1CaloCTPHitTypes type, const EventContext &ctx) const
Compare L1Calo hits with corresponding TIP hits.
SG::ReadHandleKey< xAOD::CMXCPHitsContainer > m_cmxCpHitsLocation
virtual StatusCode initialize() override
initialize
ServiceHandle< TrigConf::ITrigConfigSvc > m_configSvc
ToolHandle< LVL1::ITrigT1CaloMonErrorTool > m_errorTool
StringProperty m_packageName
Bin labels for summary plots.
static TriggerTypeConfig & typeConfig(TriggerType tt)
static std::string & typeAsString(TriggerType tt)
Definition L1DataDef.h:53
Declare a monitored scalar variable.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
const_pointer_type cptr()
Dereference the pointer.
L1 menu configuration.
Definition L1Menu.h:28
a TriggerLine entry describes the location of a threshold multiplicity on a cable (connector)
Definition L1Connector.h:22
unsigned int nbits() const
Definition L1Connector.h:31
make the sidebar many part of the config
Definition hcg.cxx:552
bool contains(const std::string &s, const std::string &regx)
does a string contain the substring
Definition hcg.cxx:114
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
Definition run.py:1
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.
void fill(H5::Group &out_file, size_t iterations)