ATLAS Offline Software
Loading...
Searching...
No Matches
L1TopoSimulation.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#include "L1TopoSimulation.h"
6
7// General Athena/Gaudi includes
9
10// Histogram Service
11#include "AthenaL1TopoHistSvc.h"
12
13// Trigger includes
17
18
19// L1Topo includes
22#include "L1TopoCommon/Types.h"
23
25
27#include "L1TopoRDO/Header.h"
28#include "L1TopoRDO/Helpers.h"
29#include "L1TopoRDO/L1TopoTOB.h"
32
33// xAOD
36
37using namespace LVL1;
38
39
40L1TopoSimulation::L1TopoSimulation(const std::string &name, ISvcLocator *pSvcLocator) :
41 AthAlgorithm(name, pSvcLocator),
42 m_topoSteering( std::make_unique<TCS::TopoSteering>() ),
43 m_scaler( std::make_unique<LVL1::PeriodicScaler>() )
44{
45}
46
47
48bool
50{
51 return true;
52}
53
54StatusCode
55L1TopoSimulation::initialize ATLAS_NOT_THREAD_SAFE () {
56 ATH_MSG_INFO("initialize");
57
58 m_topoSteering->setMsgLevel( TrigConf::MSGTC::Level((int)m_topoSteeringOutputLevel) );
59
60 m_topoSteering->setLegacyMode(m_isLegacyTopo);
61
62 ATH_MSG_DEBUG("retrieving " << m_histSvc);
63 CHECK( m_histSvc.retrieve() );
64
65 if (m_emtauInputProvider.isEnabled()) {
66 ATH_MSG_DEBUG("retrieving " << m_emtauInputProvider);
67 CHECK( m_emtauInputProvider.retrieve() );
68 }
69
70 if (m_jetInputProvider.isEnabled()) {
71 ATH_MSG_DEBUG("retrieving " << m_jetInputProvider);
72 CHECK( m_jetInputProvider.retrieve() );
73 }
74
75 if (m_energyInputProvider.isEnabled()) {
76 ATH_MSG_DEBUG("retrieving " << m_energyInputProvider);
77 CHECK( m_energyInputProvider.retrieve() );
78 }
79
80 if (m_muonInputProvider.isEnabled()) {
81 ATH_MSG_DEBUG("retrieving " << m_muonInputProvider);
82 CHECK( m_muonInputProvider.retrieve(DisableTool{m_isLegacyTopo}) );
83 }
84
85 ATH_MSG_DEBUG("retrieving " << m_ControlHistSvc);
86 CHECK( m_ControlHistSvc.retrieve());
87
88 CHECK(m_l1topoRawDataKey.initialize(m_fillHistogramsBasedOnHardwareDecision));
89
90 CHECK(m_legacyTopoCTPLocation.initialize(m_isLegacyTopo));
91 CHECK(m_legacyTopoOverflowCTPLocation.initialize(m_isLegacyTopo));
92 CHECK(m_topoCTPLocation.initialize(!m_isLegacyTopo));
93 CHECK(m_topoOverflowCTPLocation.initialize(!m_isLegacyTopo));
94 if (m_isLegacyTopo){
95 ATH_MSG_DEBUG("Legacy output trigger key property " << m_legacyTopoCTPLocation);
96 ATH_MSG_DEBUG("Legacy output overflow key property " << m_legacyTopoOverflowCTPLocation);
97 }
98 else {
99 ATH_MSG_DEBUG("Output trigger key property " << m_topoCTPLocation);
100 ATH_MSG_DEBUG("Output overflow key property " << m_topoOverflowCTPLocation);
101 }
102
103 ATH_MSG_DEBUG("Prescale factor set to " << m_prescale);
104 ATH_MSG_DEBUG("PrescaleDAQROBAccess factor set to " << m_prescaleForDAQROBAccess);
105 ATH_MSG_DEBUG("FillHistoBasedOnHardware " << m_fillHistogramsBasedOnHardwareDecision);
106 if(m_fillHistogramsBasedOnHardwareDecision and
107 (m_prescaleForDAQROBAccess % m_prescale)) {
108 ATH_MSG_FATAL("PrescaleDAQROBAccess must be a multiple of Prescale"
109 <<" : current values :"
110 <<" "<<m_prescaleForDAQROBAccess
111 <<", "<<m_prescale);
112 return StatusCode::FAILURE;
113 }
114
115 const TrigConf::L1Menu * l1menu = nullptr;
116 ATH_CHECK( detStore()->retrieve(l1menu) );
117 ATH_MSG_INFO( "initialize(): retrieving new-style L1 trigger menu from Detector Store" );
118
119 // retrieve cXE coefficients from menu and pass them to the m_jetInputProvider (if it's a jFEXInputProvider)
120 // Cannot set properties on IInputTOBConverter instances,
121 // but (relevant) inputProvider also inherits from AthAlgTool
122 AthAlgTool* jetProviderAsAlgTool = dynamic_cast<AthAlgTool*>( m_jetInputProvider.get() );
123 // if there is no particular cXE threshold defined the corresponding extraInfo is not populated!
124 if ( jetProviderAsAlgTool && l1menu->thrExtraInfo().hasInfo("cXE") ) {
125 const TrigConf::L1ThrExtraInfo_cXE & cXeExtraInfo = l1menu->thrExtraInfo().cXE();
126 if ( jetProviderAsAlgTool->hasProperty("cXEweight_jFEX") ) {
127 float jXEweight = cXeExtraInfo.jXeWeight();
128 jetProviderAsAlgTool->setProperty("cXEweight_jFEX", jXEweight).ignore();
129 }
130 if ( jetProviderAsAlgTool->hasProperty("cXEweight_gFEX") ) {
131 float gXEweight = cXeExtraInfo.gXeWeight();
132 jetProviderAsAlgTool->setProperty("cXEweight_gFEX", gXEweight).ignore();
133 }
134 }
135
136 m_topoSteering->setUseBitwise(m_enableBitwise);
137 try {
138 m_topoSteering->setupFromConfiguration(*l1menu);
139 }
140 catch(std::exception & e) {
141 ATH_MSG_FATAL("Caught exception when configuring topo steering from menu: " << e.what() );
142 return StatusCode::FAILURE;
143 }
144
145 m_topoSteering->setAlgMsgLevel( TrigConf::MSGTC::Level((int)m_topoOutputLevel) );
146 m_topoSteering->setOutputAlgosFillBasedOnHardware(m_fillHistogramsBasedOnHardwareDecision);
147
148 if (m_doMonitoring) {ATH_CHECK(m_ControlHistSvc->SetHistSvc(m_topoSteering, m_histBaseDir.value()));}
149
150 ATH_CHECK(m_legacyL1topoKey.initialize(m_isLegacyTopo));
151 ATH_CHECK(m_l1topoKey.initialize(!m_isLegacyTopo));
152
153 return StatusCode::SUCCESS;
154}
155
156
157// Exectued once per offline job and for every new run online
160 ATH_MSG_DEBUG("start");
161
162 m_scaler->reset();
163
164 try {
165 m_topoSteering->initializeAlgorithms();
166 }
167 catch(std::exception & e) {
168 ATH_MSG_FATAL("Caught exception when initializing topo algorithms" << e.what() );
169 return StatusCode::FAILURE;
170 }
171
172 if( m_enableInputDump ) {
173 m_topoSteering->inputEvent().enableInputDump( m_inputDumpFile );
174 m_topoSteering->inputEvent().dumpStart();
175 }
176
177 return StatusCode::SUCCESS;
178}
179
180
181
182StatusCode
184 const EventContext& ctx = Gaudi::Hive::currentContext();
185
186 if (m_prescale>1 && not m_scaler->decision(m_prescale)){
187 ATH_MSG_DEBUG( "This event not processed due to prescale");
188 return StatusCode::SUCCESS;
189 // do not record dummy output:
190 // LVL1::FrontPanelCTP is initialised with all 6 32-bit words set to 0 which is valid data
191 // LVL1::FrontPanelCTP * topo2CTP = new LVL1::FrontPanelCTP();
192 // CHECK(evtStore()->record( topo2CTP, m_topoCTPLocation ));
193 }
194 else {
195 ATH_MSG_DEBUG( "This event is processed - not prescaled");
196 }
197
198 // reset input and internal state
199 m_topoSteering->reset();
200
201 // fill the L1Topo Input Event
202 TCS::TopoInputEvent & inputEvent = m_topoSteering->inputEvent();
203
204 inputEvent.setEventInfo(ctx.eventID().run_number(),
205 ctx.eventID().event_number(),
206 ctx.eventID().lumi_block(),
207 ctx.eventID().bunch_crossing_id());
208
209 // EM TAU
210 if (m_emtauInputProvider.isEnabled()) {
211 CHECK(m_emtauInputProvider->fillTopoInputEvent(inputEvent));
212 }
213 // JET
214 if (m_jetInputProvider.isEnabled()) {
215 CHECK(m_jetInputProvider->fillTopoInputEvent(inputEvent));
216 }
217 // ET sum, ET miss
218 if (m_energyInputProvider.isEnabled()) {
219 CHECK(m_energyInputProvider->fillTopoInputEvent(inputEvent));
220 }
221 // Muon
222 if (m_muonInputProvider.isEnabled()) {
223 CHECK(m_muonInputProvider->fillTopoInputEvent(inputEvent));
224 }
225
226 ATH_MSG_DEBUG("" << inputEvent);
227
228 inputEvent.dump();
229
231 if (retrieveHardwareDecision(m_isLegacyTopo, ctx).isSuccess()) {
232 m_topoSteering->propagateHardwareBitsToAlgos();
233 m_topoSteering->setOutputAlgosSkipHistograms(false);
234 }
235 else {
236 m_topoSteering->setOutputAlgosSkipHistograms(true);
237 }
239 m_topoSteering->setOutputAlgosSkipHistograms(true);
240 }
241 }
242
243 // execute the toposteering
244 m_topoSteering->executeEvent();
245
246 ATH_MSG_DEBUG("Global Decision:\n" << m_topoSteering->simulationResult().globalOutput());
247
248
257
258 // Format for CTP still undecided
259
260 const TCS::GlobalOutput & globalOutput = m_topoSteering->simulationResult().globalOutput();
261 auto topoOutput2CTP = std::make_unique< LVL1::FrontPanelCTP >();
262 auto topoOverflow2CTP = std::make_unique< LVL1::FrontPanelCTP >();
263
264 const TrigConf::L1Menu * l1menu = nullptr;
265 ATH_CHECK( detStore()->retrieve(l1menu) );
266
267
269 ATH_MSG_DEBUG(" write: " << outputHandle.key() << " = " << "..." );
270 ATH_CHECK(outputHandle.record(std::make_unique<xAOD::L1TopoSimResultsContainer>(), std::make_unique<xAOD::L1TopoSimResultsAuxContainer>()));
271
272
273 if( m_isLegacyTopo ) {
274 // set electrical connectors
275 std::string conn1 = l1menu->board("LegacyTopo0").connectorNames()[0];
276 std::string conn2 = l1menu->board("LegacyTopo1").connectorNames()[0];
277 for(unsigned int clock=0; clock<2; ++clock) {
278 topoOutput2CTP->setCableWord0( clock, 0 ); // ALFA
279 ATH_MSG_DEBUG("Word 1 " << conn1 << " clock " << clock << " " << globalOutput.decision_field( conn1, clock) );
280 topoOutput2CTP->setCableWord1( clock, globalOutput.decision_field( conn1, clock) ); // TOPO 0
281 WriteEDM(outputHandle,conn1,clock,globalOutput.decision_field( conn1, clock));
282 ATH_MSG_DEBUG("Word 2 " << conn2 << " clock " << clock << " " << globalOutput.decision_field( conn2, clock) );
283 topoOutput2CTP->setCableWord2( clock, globalOutput.decision_field( conn2, clock) ); // TOPO 1
284 WriteEDM(outputHandle,conn2,clock,globalOutput.decision_field( conn2, clock));
285 // topoOverflow2CTP->setCableWord0( clock, 0 ); // ALFA
286 // topoOverflow2CTP->setCableWord1( clock, dec.overflow( 0, clock) ); // TOPO 0
287 // topoOverflow2CTP->setCableWord2( clock, dec.overflow( 1, clock) ); // TOPO 1
288 }
289
290 CHECK(SG::makeHandle(m_legacyTopoCTPLocation) .record(std::move(topoOutput2CTP)));
291 CHECK(SG::makeHandle(m_legacyTopoOverflowCTPLocation).record(std::move(topoOverflow2CTP)));
292
293 } else {
294 // set electrical connectors
295 std::string conn1 = l1menu->board("Topo2").connectorNames()[0];
296 std::string conn2 = l1menu->board("Topo3").connectorNames()[0];
297 for(unsigned int clock=0; clock<2; ++clock) {
298 ATH_MSG_DEBUG("Word 1 " << conn1 << " clock " << clock << " " << globalOutput.decision_field( conn1, clock) );
299 topoOutput2CTP->setCableWord1( clock, globalOutput.decision_field( conn1, clock) | globalOutput.overflow_field(conn1, clock) ); // TOPO 0
300 WriteEDM(outputHandle,conn1,clock,globalOutput.decision_field( conn1, clock));
301 ATH_MSG_DEBUG("Word 2 " << conn2 << " clock " << clock << " " << globalOutput.decision_field( conn2, clock) );
302 topoOutput2CTP->setCableWord2( clock, globalOutput.decision_field( conn2, clock) | globalOutput.overflow_field(conn2, clock) ); // TOPO 1
303 WriteEDM(outputHandle,conn2,clock,globalOutput.decision_field( conn2, clock));
304
305 topoOverflow2CTP->setCableWord0( clock, 0 ); // ALFA
306 topoOverflow2CTP->setCableWord1( clock, globalOutput.overflow_field( conn1, clock) ); // TOPO 0
307 WriteEDM_Overflow(outputHandle,"Overflow"+conn1,clock,globalOutput.overflow_field( conn1, clock));
308 topoOverflow2CTP->setCableWord2( clock, globalOutput.overflow_field( conn2, clock) ); // TOPO 1
309 WriteEDM_Overflow(outputHandle,"Overflow"+conn2,clock,globalOutput.overflow_field( conn2, clock));
310
311 WriteEDM(outputHandle,"Ambiguity"+conn1,clock,globalOutput.ambiguity_field( conn1, clock));
312 WriteEDM(outputHandle,"Ambiguity"+conn2,clock,globalOutput.ambiguity_field( conn2, clock));
313 }
314
315 // set optical connectors
316 for( const auto& connOpt : l1menu->board("Topo1").connectorNames() ) {
317 auto outputOpt = globalOutput.count_field(connOpt);
318 std::bitset<64> outputOpt_1(outputOpt.to_string());
319 std::bitset<64> outputOpt_2((outputOpt<<64).to_string());
320 topoOutput2CTP->setOptCableWord( connOpt, outputOpt );
321 WriteEDM(outputHandle,connOpt,1,outputOpt_1.to_ulong());
322 WriteEDM(outputHandle,connOpt,0,outputOpt_2.to_ulong());
323 }
324
325 CHECK(SG::makeHandle(m_topoCTPLocation) .record(std::move(topoOutput2CTP)));
326 CHECK(SG::makeHandle(m_topoOverflowCTPLocation).record(std::move(topoOverflow2CTP)));
327 }
328
329 return StatusCode::SUCCESS;
330}
331
332
333StatusCode
335 m_topoSteering->inputEvent().dumpFinish();
336 return StatusCode::SUCCESS;
337}
338
339void
340L1TopoSimulation::WriteEDM(SG::WriteHandle<xAOD::L1TopoSimResultsContainer> &handle, const std::string &name, unsigned int clock, uint32_t word) {
341
342 handle->push_back(std::make_unique<xAOD::L1TopoSimResults>());
343 handle->back()->setConnectionId(TCS::outputType(name));
344 handle->back()->setClock(clock);
345 handle->back()->setBitWidth(32);
346 handle->back()->setTopoWord(word);
347
348 ATH_MSG_DEBUG( "L1Topo EDM:: Connection Id: " << handle->back()->connectionId() << " Clock: " << handle->back()->clock() << " Decision: " << handle->back()->topoWord() );
349}
350
351void
352L1TopoSimulation::WriteEDM_Overflow(SG::WriteHandle<xAOD::L1TopoSimResultsContainer> &handle, const std::string &name, unsigned int clock, uint32_t word) {
353
354 handle->push_back(std::make_unique<xAOD::L1TopoSimResults>());
355 handle->back()->setConnectionId(TCS::outputType(name));
356 handle->back()->setClock(clock);
357 handle->back()->setBitWidth(32);
358 handle->back()->setTopoWordOverflow(word);
359
360 ATH_MSG_DEBUG( "L1Topo EDM:: Connection Id: " << handle->back()->connectionId() << " Clock: " << handle->back()->clock() << " Decision: " << handle->back()->topoWord() );
361}
362
363void
364L1TopoSimulation::WriteEDM(SG::WriteHandle<xAOD::L1TopoSimResultsContainer> &handle, const std::string &name, unsigned int clock, uint64_t word) {
365
366 handle->push_back(std::make_unique<xAOD::L1TopoSimResults>());
367 handle->back()->setConnectionId(TCS::outputType(name));
368 handle->back()->setClock(clock);
369 handle->back()->setBitWidth(64);
370 handle->back()->setTopoWord64(word);
371
372 ATH_MSG_DEBUG( "L1Topo EDM:: Connection Id: " << handle->back()->connectionId() << " Clock: " << handle->back()->clock() << " Decision: " << handle->back()->topoWord() );
373}
374
375void
376L1TopoSimulation::WriteEDM_Overflow(SG::WriteHandle<xAOD::L1TopoSimResultsContainer> &handle, const std::string &name, unsigned int clock, uint64_t word) {
377
378 handle->push_back(std::make_unique<xAOD::L1TopoSimResults>());
379 handle->back()->setConnectionId(TCS::outputType(name));
380 handle->back()->setClock(clock);
381 handle->back()->setBitWidth(64);
382 handle->back()->setTopoWord64Overflow(word);
383
384 ATH_MSG_DEBUG( "L1Topo EDM:: Connection Id: " << handle->back()->connectionId() << " Clock: " << handle->back()->clock() << " Decision: " << handle->back()->topoWord() );
385}
386
387StatusCode
388L1TopoSimulation::retrieveHardwareDecision(bool isLegacy, const EventContext& ctx)
389{
390 if (isLegacy) {return hardwareDecisionLegacy();}
391 else {return hardwareDecisionPhase1(ctx);}
392}
393
394StatusCode
396{
397 // some duplication with L1TopoRDO::Helpers
398 // getDecisionAndOverflowBits() ?
399 StatusCode sc = StatusCode::SUCCESS;
400 std::bitset<TCS::TopoSteering::numberOfL1TopoBits> hardwareDaqRobTriggerBits;
401 std::bitset<TCS::TopoSteering::numberOfL1TopoBits> hardwareDaqRobOvrflowBits;
402 bool prescalForDAQROBAccess = true; // DG-2017-06-30 decide what to do when the hdw dec is not to be retrieved
403 if (prescalForDAQROBAccess){
404 std::vector<L1Topo::L1TopoTOB> daqTobsBC0;
405 std::vector<uint32_t> tobsbc0SourceIds; // to compute bit indices
406 const L1TopoRDOCollection* rdos = 0;
407 sc = evtStore()->retrieve(rdos);
408 if (sc.isFailure() or 0 == rdos) {
409 ATH_MSG_INFO ( "Could not retrieve L1Topo DAQ RDO collection from StoreGate" );
410 } else if (rdos->empty()) {
411 ATH_MSG_INFO ( "L1Topo DAQ RDO collection is empty" );
412 } else {
413 for (const L1TopoRDO* rdo : *rdos){
414 const std::vector<uint32_t> cDataWords = rdo->getDataWords();
415 // initialise header: set version 15, BCN -7, which is unlikely
416 L1Topo::Header header(0xf,0,0,0,0,1,0x7);
417 for (const uint32_t word : cDataWords){
418 switch (L1Topo::blockType(word)){
420 header = L1Topo::Header(word);
421 break;
422 }
424 auto tob = L1Topo::L1TopoTOB(word);
425 if (header.bcn_offset()==0){
426 daqTobsBC0.push_back(tob);
427 tobsbc0SourceIds.push_back(rdo->getSourceID());
428 }
429 break;
430 }
431 default: break;
432 }
433 } // for(word)
434 } // for(rdo)
435 }
436 for(uint32_t iTob=0; iTob<daqTobsBC0.size(); ++iTob){
437 const L1Topo::L1TopoTOB &tob = daqTobsBC0[iTob];
438 const uint32_t &sourceId = tobsbc0SourceIds[iTob];
439 for(unsigned int i=0; i<8; ++i){
440 unsigned int index = L1Topo::triggerBitIndexNew(sourceId, tob, i);
441 hardwareDaqRobTriggerBits[index] = (tob.trigger_bits()>>i)&1;
442 hardwareDaqRobOvrflowBits[index] = (tob.overflow_bits()>>i)&1;
443 }
444 }
445 m_topoSteering->setHardwareBits(hardwareDaqRobTriggerBits,
446 hardwareDaqRobOvrflowBits);
447 }
448 return sc;
449}
450
451
452StatusCode
454{
455 // some duplication with L1TopoRDO::Helpers
456 // getDecisionAndOverflowBits() ?
457 StatusCode sc = StatusCode::SUCCESS;
458
459 std::bitset<TCS::TopoSteering::numberOfL1TopoBits> hardwareDaqRobTriggerBits;
460 std::bitset<TCS::TopoSteering::numberOfL1TopoBits> hardwareDaqRobOvrflowBits;
461
463 if(!cont.isValid()){
464 ATH_MSG_FATAL("Could not retrieve L1Topo RAW Data Container from the BS data.");
465 return StatusCode::FAILURE;
466 }
467
468 std::unique_ptr<L1Topo::L1TopoResult> l1topoResult = std::make_unique<L1Topo::L1TopoResult>(*cont);
469 if (!l1topoResult->getStatus()) {
470 ATH_MSG_WARNING("Decoding L1Topo results failed!!");
471 return StatusCode::FAILURE;
472 }
473 hardwareDaqRobTriggerBits = l1topoResult->getDecisions();
474 hardwareDaqRobOvrflowBits = l1topoResult->getOverflows();
475
476
477
478 m_topoSteering->setHardwareBits(hardwareDaqRobTriggerBits,
479 hardwareDaqRobOvrflowBits);
480
481 return sc;
482}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_FATAL(x)
#define ATH_MSG_INFO(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
#define CHECK(...)
Evaluate an expression and check for errors.
static std::string to_string(const std::vector< T > &v)
static Double_t sc
#define ATLAS_NOT_THREAD_SAFE
getNoisyStrip() Find noisy strips from hitmaps and write out into xml/db formats
AthAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor with parameters:
const ServiceHandle< StoreGateSvc > & detStore() const
bool empty() const noexcept
Returns true if the collection is empty.
Container of L1TopoRDOs (standard Athena boilerplate)
The class that represents the raw data received from an L1Topo board.
Definition L1TopoRDO.h:29
Represents the L1Topo header word of the L1Topo DAQ data, with decoder and encoder.
Represents the L1Topo TOB word of the L1Topo ROI data, with decode and encoder.
Definition L1TopoTOB.h:17
uint32_t overflow_bits() const
accessor method for overflow bits
Definition L1TopoTOB.cxx:81
uint32_t trigger_bits() const
accessor method for trigger bits
Definition L1TopoTOB.cxx:84
Gaudi::Property< unsigned int > m_prescale
virtual StatusCode start() override
StatusCode hardwareDecisionPhase1(const EventContext &ctx)
Gaudi::Property< bool > m_enableInputDump
SG::WriteHandleKey< xAOD::L1TopoSimResultsContainer > m_l1topoKey
SG::WriteHandleKey< LVL1::FrontPanelCTP > m_legacyTopoOverflowCTPLocation
SG key of overflow bits for CTP.
StatusCode retrieveHardwareDecision(bool isLegacy, const EventContext &ctx)
Retrieve the L1Topo hardware bits from the DAQ RODs.
std::unique_ptr< TCS::TopoSteering > m_topoSteering
the topo steering
ToolHandle< IInputTOBConverter > m_energyInputProvider
SG::WriteHandleKey< xAOD::L1TopoSimResultsContainer > m_legacyL1topoKey
Gaudi::Property< bool > m_isLegacyTopo
SG::ReadHandleKey< xAOD::L1TopoRawDataContainer > m_l1topoRawDataKey
virtual StatusCode finalize() override
void WriteEDM(SG::WriteHandle< xAOD::L1TopoSimResultsContainer > &handle, const std::string &name, unsigned int clock, uint32_t word)
SG::WriteHandleKey< LVL1::FrontPanelCTP > m_topoOverflowCTPLocation
SG key of overflow bits for CTP.
virtual StatusCode execute() override
Gaudi::Property< unsigned int > m_prescaleForDAQROBAccess
void WriteEDM_Overflow(SG::WriteHandle< xAOD::L1TopoSimResultsContainer > &handle, const std::string &name, unsigned int clock, uint32_t word)
L1TopoSimulation(const std::string &name, ISvcLocator *pSvcLocator)
virtual bool isClonable() const override
SG::WriteHandleKey< LVL1::FrontPanelCTP > m_topoCTPLocation
SG key of decision bits for CTP.
ToolHandle< IInputTOBConverter > m_muonInputProvider
Gaudi::Property< std::string > m_inputDumpFile
ToolHandle< IInputTOBConverter > m_emtauInputProvider
Gaudi::Property< bool > m_fillHistogramsBasedOnHardwareDecision
SG::WriteHandleKey< LVL1::FrontPanelCTP > m_legacyTopoCTPLocation
SG key of decision bits for CTP.
std::unique_ptr< LVL1::PeriodicScaler > m_scaler
ToolHandle< IInputTOBConverter > m_jetInputProvider
Utility class to determine if a chain should be prescaled/passed-through using its PS/PT factor,...
virtual bool isValid() override final
Can the handle be successfully dereferenced?
virtual const std::string & key() const override final
Return the StoreGate ID for the referenced object.
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
std::bitset< 128 > count_field(const std::string &l1connName) const
uint64_t decision_field(const std::string &l1connName) const
uint64_t ambiguity_field(const std::string &l1connName) const
uint64_t overflow_field(const std::string &l1connName) const
StatusCode setEventInfo(const uint32_t runNo, const uint32_t evtNo, const uint32_t lumiB, const uint32_t BCID)
L1 menu configuration.
Definition L1Menu.h:28
::StatusCode StatusCode
StatusCode definition for legacy code.
L1Topo::BlockTypes blockType(const uint32_t word, uint32_t offset=28, uint32_t size=0x0f)
Function to return the block type of a data word from L1Topo.
Definition BlockTypes.cxx:9
unsigned int triggerBitIndexNew(uint32_t moduleId, const L1Topo::L1TopoTOB &, unsigned int bitIdx)
Helper to calculate the index needed to pack trigger bits into the full 128-bit decision....
eFexTowerBuilder creates xAOD::eFexTowerContainer from supercells (LATOME) and triggerTowers (TREX) i...
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
outputTopoType_t outputType(const std::string &output)
Definition Types.cxx:154
Definition index.py:1
STL namespace.