ATLAS Offline Software
Loading...
Searching...
No Matches
L1TopoSimulation.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 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
183L1TopoSimulation::execute(const EventContext& ctx) {
184
185 if (m_prescale>1 && not m_scaler->decision(m_prescale)){
186 ATH_MSG_DEBUG( "This event not processed due to prescale");
187 return StatusCode::SUCCESS;
188 // do not record dummy output:
189 // LVL1::FrontPanelCTP is initialised with all 6 32-bit words set to 0 which is valid data
190 // LVL1::FrontPanelCTP * topo2CTP = new LVL1::FrontPanelCTP();
191 // CHECK(evtStore()->record( topo2CTP, m_topoCTPLocation ));
192 }
193 else {
194 ATH_MSG_DEBUG( "This event is processed - not prescaled");
195 }
196
197 // reset input and internal state
198 m_topoSteering->reset();
199
200 // fill the L1Topo Input Event
201 TCS::TopoInputEvent & inputEvent = m_topoSteering->inputEvent();
202
203 inputEvent.setEventInfo(ctx.eventID().run_number(),
204 ctx.eventID().event_number(),
205 ctx.eventID().lumi_block(),
206 ctx.eventID().bunch_crossing_id());
207
208 // EM TAU
209 if (m_emtauInputProvider.isEnabled()) {
210 CHECK(m_emtauInputProvider->fillTopoInputEvent(inputEvent));
211 }
212 // JET
213 if (m_jetInputProvider.isEnabled()) {
214 CHECK(m_jetInputProvider->fillTopoInputEvent(inputEvent));
215 }
216 // ET sum, ET miss
217 if (m_energyInputProvider.isEnabled()) {
218 CHECK(m_energyInputProvider->fillTopoInputEvent(inputEvent));
219 }
220 // Muon
221 if (m_muonInputProvider.isEnabled()) {
222 CHECK(m_muonInputProvider->fillTopoInputEvent(inputEvent));
223 }
224
225 ATH_MSG_DEBUG("" << inputEvent);
226
227 inputEvent.dump();
228
230 if (retrieveHardwareDecision(m_isLegacyTopo, ctx).isSuccess()) {
231 m_topoSteering->propagateHardwareBitsToAlgos();
232 m_topoSteering->setOutputAlgosSkipHistograms(false);
233 }
234 else {
235 m_topoSteering->setOutputAlgosSkipHistograms(true);
236 }
238 m_topoSteering->setOutputAlgosSkipHistograms(true);
239 }
240 }
241
242 // execute the toposteering
243 m_topoSteering->executeEvent();
244
245 ATH_MSG_DEBUG("Global Decision:\n" << m_topoSteering->simulationResult().globalOutput());
246
247
256
257 // Format for CTP still undecided
258
259 const TCS::GlobalOutput & globalOutput = m_topoSteering->simulationResult().globalOutput();
260 auto topoOutput2CTP = std::make_unique< LVL1::FrontPanelCTP >();
261 auto topoOverflow2CTP = std::make_unique< LVL1::FrontPanelCTP >();
262
263 const TrigConf::L1Menu * l1menu = nullptr;
264 ATH_CHECK( detStore()->retrieve(l1menu) );
265
266
268 ATH_MSG_DEBUG(" write: " << outputHandle.key() << " = " << "..." );
269 ATH_CHECK(outputHandle.record(std::make_unique<xAOD::L1TopoSimResultsContainer>(), std::make_unique<xAOD::L1TopoSimResultsAuxContainer>()));
270
271
272 if( m_isLegacyTopo ) {
273 // set electrical connectors
274 std::string conn1 = l1menu->board("LegacyTopo0").connectorNames()[0];
275 std::string conn2 = l1menu->board("LegacyTopo1").connectorNames()[0];
276 for(unsigned int clock=0; clock<2; ++clock) {
277 topoOutput2CTP->setCableWord0( clock, 0 ); // ALFA
278 ATH_MSG_DEBUG("Word 1 " << conn1 << " clock " << clock << " " << globalOutput.decision_field( conn1, clock) );
279 topoOutput2CTP->setCableWord1( clock, globalOutput.decision_field( conn1, clock) ); // TOPO 0
280 WriteEDM(outputHandle,conn1,clock,globalOutput.decision_field( conn1, clock));
281 ATH_MSG_DEBUG("Word 2 " << conn2 << " clock " << clock << " " << globalOutput.decision_field( conn2, clock) );
282 topoOutput2CTP->setCableWord2( clock, globalOutput.decision_field( conn2, clock) ); // TOPO 1
283 WriteEDM(outputHandle,conn2,clock,globalOutput.decision_field( conn2, clock));
284 // topoOverflow2CTP->setCableWord0( clock, 0 ); // ALFA
285 // topoOverflow2CTP->setCableWord1( clock, dec.overflow( 0, clock) ); // TOPO 0
286 // topoOverflow2CTP->setCableWord2( clock, dec.overflow( 1, clock) ); // TOPO 1
287 }
288
289 CHECK(SG::makeHandle(m_legacyTopoCTPLocation, ctx) .record(std::move(topoOutput2CTP)));
290 CHECK(SG::makeHandle(m_legacyTopoOverflowCTPLocation, ctx).record(std::move(topoOverflow2CTP)));
291
292 } else {
293 // set electrical connectors
294 std::string conn1 = l1menu->board("Topo2").connectorNames()[0];
295 std::string conn2 = l1menu->board("Topo3").connectorNames()[0];
296 for(unsigned int clock=0; clock<2; ++clock) {
297 ATH_MSG_DEBUG("Word 1 " << conn1 << " clock " << clock << " " << globalOutput.decision_field( conn1, clock) );
298 topoOutput2CTP->setCableWord1( clock, globalOutput.decision_field( conn1, clock) | globalOutput.overflow_field(conn1, clock) ); // TOPO 0
299 WriteEDM(outputHandle,conn1,clock,globalOutput.decision_field( conn1, clock));
300 ATH_MSG_DEBUG("Word 2 " << conn2 << " clock " << clock << " " << globalOutput.decision_field( conn2, clock) );
301 topoOutput2CTP->setCableWord2( clock, globalOutput.decision_field( conn2, clock) | globalOutput.overflow_field(conn2, clock) ); // TOPO 1
302 WriteEDM(outputHandle,conn2,clock,globalOutput.decision_field( conn2, clock));
303
304 topoOverflow2CTP->setCableWord0( clock, 0 ); // ALFA
305 topoOverflow2CTP->setCableWord1( clock, globalOutput.overflow_field( conn1, clock) ); // TOPO 0
306 WriteEDM_Overflow(outputHandle,"Overflow"+conn1,clock,globalOutput.overflow_field( conn1, clock));
307 topoOverflow2CTP->setCableWord2( clock, globalOutput.overflow_field( conn2, clock) ); // TOPO 1
308 WriteEDM_Overflow(outputHandle,"Overflow"+conn2,clock,globalOutput.overflow_field( conn2, clock));
309
310 WriteEDM(outputHandle,"Ambiguity"+conn1,clock,globalOutput.ambiguity_field( conn1, clock));
311 WriteEDM(outputHandle,"Ambiguity"+conn2,clock,globalOutput.ambiguity_field( conn2, clock));
312 }
313
314 // set optical connectors
315 for( const auto& connOpt : l1menu->board("Topo1").connectorNames() ) {
316 auto outputOpt = globalOutput.count_field(connOpt);
317 std::bitset<64> outputOpt_1(outputOpt.to_string());
318 std::bitset<64> outputOpt_2((outputOpt<<64).to_string());
319 topoOutput2CTP->setOptCableWord( connOpt, outputOpt );
320 WriteEDM(outputHandle,connOpt,1,outputOpt_1.to_ulong());
321 WriteEDM(outputHandle,connOpt,0,outputOpt_2.to_ulong());
322 }
323
324 CHECK(SG::makeHandle(m_topoCTPLocation, ctx) .record(std::move(topoOutput2CTP)));
325 CHECK(SG::makeHandle(m_topoOverflowCTPLocation, ctx).record(std::move(topoOverflow2CTP)));
326 }
327
328 return StatusCode::SUCCESS;
329}
330
331
332StatusCode
334 m_topoSteering->inputEvent().dumpFinish();
335 return StatusCode::SUCCESS;
336}
337
338void
339L1TopoSimulation::WriteEDM(SG::WriteHandle<xAOD::L1TopoSimResultsContainer> &handle, const std::string &name, unsigned int clock, uint32_t word) {
340
341 handle->push_back(std::make_unique<xAOD::L1TopoSimResults>());
342 handle->back()->setConnectionId(TCS::outputType(name));
343 handle->back()->setClock(clock);
344 handle->back()->setBitWidth(32);
345 handle->back()->setTopoWord(word);
346
347 ATH_MSG_DEBUG( "L1Topo EDM:: Connection Id: " << handle->back()->connectionId() << " Clock: " << handle->back()->clock() << " Decision: " << handle->back()->topoWord() );
348}
349
350void
351L1TopoSimulation::WriteEDM_Overflow(SG::WriteHandle<xAOD::L1TopoSimResultsContainer> &handle, const std::string &name, unsigned int clock, uint32_t word) {
352
353 handle->push_back(std::make_unique<xAOD::L1TopoSimResults>());
354 handle->back()->setConnectionId(TCS::outputType(name));
355 handle->back()->setClock(clock);
356 handle->back()->setBitWidth(32);
357 handle->back()->setTopoWordOverflow(word);
358
359 ATH_MSG_DEBUG( "L1Topo EDM:: Connection Id: " << handle->back()->connectionId() << " Clock: " << handle->back()->clock() << " Decision: " << handle->back()->topoWord() );
360}
361
362void
363L1TopoSimulation::WriteEDM(SG::WriteHandle<xAOD::L1TopoSimResultsContainer> &handle, const std::string &name, unsigned int clock, uint64_t word) {
364
365 handle->push_back(std::make_unique<xAOD::L1TopoSimResults>());
366 handle->back()->setConnectionId(TCS::outputType(name));
367 handle->back()->setClock(clock);
368 handle->back()->setBitWidth(64);
369 handle->back()->setTopoWord64(word);
370
371 ATH_MSG_DEBUG( "L1Topo EDM:: Connection Id: " << handle->back()->connectionId() << " Clock: " << handle->back()->clock() << " Decision: " << handle->back()->topoWord() );
372}
373
374void
375L1TopoSimulation::WriteEDM_Overflow(SG::WriteHandle<xAOD::L1TopoSimResultsContainer> &handle, const std::string &name, unsigned int clock, uint64_t word) {
376
377 handle->push_back(std::make_unique<xAOD::L1TopoSimResults>());
378 handle->back()->setConnectionId(TCS::outputType(name));
379 handle->back()->setClock(clock);
380 handle->back()->setBitWidth(64);
381 handle->back()->setTopoWord64Overflow(word);
382
383 ATH_MSG_DEBUG( "L1Topo EDM:: Connection Id: " << handle->back()->connectionId() << " Clock: " << handle->back()->clock() << " Decision: " << handle->back()->topoWord() );
384}
385
386StatusCode
387L1TopoSimulation::retrieveHardwareDecision(bool isLegacy, const EventContext& ctx)
388{
389 if (isLegacy) {return hardwareDecisionLegacy();}
390 else {return hardwareDecisionPhase1(ctx);}
391}
392
393StatusCode
395{
396 // some duplication with L1TopoRDO::Helpers
397 // getDecisionAndOverflowBits() ?
398 StatusCode sc = StatusCode::SUCCESS;
399 std::bitset<TCS::TopoSteering::numberOfL1TopoBits> hardwareDaqRobTriggerBits;
400 std::bitset<TCS::TopoSteering::numberOfL1TopoBits> hardwareDaqRobOvrflowBits;
401 bool prescalForDAQROBAccess = true; // DG-2017-06-30 decide what to do when the hdw dec is not to be retrieved
402 if (prescalForDAQROBAccess){
403 std::vector<L1Topo::L1TopoTOB> daqTobsBC0;
404 std::vector<uint32_t> tobsbc0SourceIds; // to compute bit indices
405 const L1TopoRDOCollection* rdos = 0;
406 sc = evtStore()->retrieve(rdos);
407 if (sc.isFailure() or 0 == rdos) {
408 ATH_MSG_INFO ( "Could not retrieve L1Topo DAQ RDO collection from StoreGate" );
409 } else if (rdos->empty()) {
410 ATH_MSG_INFO ( "L1Topo DAQ RDO collection is empty" );
411 } else {
412 for (const L1TopoRDO* rdo : *rdos){
413 const std::vector<uint32_t> cDataWords = rdo->getDataWords();
414 // initialise header: set version 15, BCN -7, which is unlikely
415 L1Topo::Header header(0xf,0,0,0,0,1,0x7);
416 for (const uint32_t word : cDataWords){
417 switch (L1Topo::blockType(word)){
419 header = L1Topo::Header(word);
420 break;
421 }
423 auto tob = L1Topo::L1TopoTOB(word);
424 if (header.bcn_offset()==0){
425 daqTobsBC0.push_back(tob);
426 tobsbc0SourceIds.push_back(rdo->getSourceID());
427 }
428 break;
429 }
430 default: break;
431 }
432 } // for(word)
433 } // for(rdo)
434 }
435 for(uint32_t iTob=0; iTob<daqTobsBC0.size(); ++iTob){
436 const L1Topo::L1TopoTOB &tob = daqTobsBC0[iTob];
437 const uint32_t &sourceId = tobsbc0SourceIds[iTob];
438 for(unsigned int i=0; i<8; ++i){
439 unsigned int index = L1Topo::triggerBitIndexNew(sourceId, tob, i);
440 hardwareDaqRobTriggerBits[index] = (tob.trigger_bits()>>i)&1;
441 hardwareDaqRobOvrflowBits[index] = (tob.overflow_bits()>>i)&1;
442 }
443 }
444 m_topoSteering->setHardwareBits(hardwareDaqRobTriggerBits,
445 hardwareDaqRobOvrflowBits);
446 }
447 return sc;
448}
449
450
451StatusCode
453{
454 // some duplication with L1TopoRDO::Helpers
455 // getDecisionAndOverflowBits() ?
456 StatusCode sc = StatusCode::SUCCESS;
457
458 std::bitset<TCS::TopoSteering::numberOfL1TopoBits> hardwareDaqRobTriggerBits;
459 std::bitset<TCS::TopoSteering::numberOfL1TopoBits> hardwareDaqRobOvrflowBits;
460
462 if(!cont.isValid()){
463 ATH_MSG_FATAL("Could not retrieve L1Topo RAW Data Container from the BS data.");
464 return StatusCode::FAILURE;
465 }
466
467 std::unique_ptr<L1Topo::L1TopoResult> l1topoResult = std::make_unique<L1Topo::L1TopoResult>(*cont);
468 if (!l1topoResult->getStatus()) {
469 ATH_MSG_WARNING("Decoding L1Topo results failed!!");
470 return StatusCode::FAILURE;
471 }
472 hardwareDaqRobTriggerBits = l1topoResult->getDecisions();
473 hardwareDaqRobOvrflowBits = l1topoResult->getOverflows();
474
475
476
477 m_topoSteering->setHardwareBits(hardwareDaqRobTriggerBits,
478 hardwareDaqRobOvrflowBits);
479
480 return sc;
481}
#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.
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 StatusCode execute(const EventContext &ctx) override
Execute method.
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:29
::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:158
Definition index.py:1
STL namespace.