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// Histogram Service
9
10// Trigger includes
13
14
15// L1Topo includes
18#include "L1TopoCommon/Types.h"
19
21
23#include "L1TopoRDO/Header.h"
24#include "L1TopoRDO/Helpers.h"
25#include "L1TopoRDO/L1TopoTOB.h"
28
29// xAOD
32
33using namespace LVL1;
34
35
36L1TopoSimulation::L1TopoSimulation(const std::string &name, ISvcLocator *pSvcLocator) :
37 AthAlgorithm(name, pSvcLocator),
38 m_topoSteering( std::make_unique<TCS::TopoSteering>() ),
39 m_scaler( std::make_unique<LVL1::PeriodicScaler>() )
40{
41}
42
43
44bool
46{
47 return true;
48}
49
50StatusCode
51L1TopoSimulation::initialize ATLAS_NOT_THREAD_SAFE () {
52 ATH_MSG_INFO("initialize");
53
54 m_topoSteering->setMsgLevel( TrigConf::MSGTC::Level((int)m_topoSteeringOutputLevel) );
55
56 m_topoSteering->setLegacyMode(m_isLegacyTopo);
57
58 ATH_MSG_DEBUG("retrieving " << m_histSvc);
59 CHECK( m_histSvc.retrieve() );
60
61 if (m_emtauInputProvider.isEnabled()) {
62 ATH_MSG_DEBUG("retrieving " << m_emtauInputProvider);
63 CHECK( m_emtauInputProvider.retrieve() );
64 }
65
66 if (m_jetInputProvider.isEnabled()) {
67 ATH_MSG_DEBUG("retrieving " << m_jetInputProvider);
68 CHECK( m_jetInputProvider.retrieve() );
69 }
70
71 if (m_energyInputProvider.isEnabled()) {
72 ATH_MSG_DEBUG("retrieving " << m_energyInputProvider);
73 CHECK( m_energyInputProvider.retrieve() );
74 }
75
76 if (m_muonInputProvider.isEnabled()) {
77 ATH_MSG_DEBUG("retrieving " << m_muonInputProvider);
78 CHECK( m_muonInputProvider.retrieve(DisableTool{m_isLegacyTopo}) );
79 }
80
81 ATH_MSG_DEBUG("retrieving " << m_ControlHistSvc);
82 CHECK( m_ControlHistSvc.retrieve());
83
84 CHECK(m_l1topoRawDataKey.initialize(m_fillHistogramsBasedOnHardwareDecision));
85
86 CHECK(m_legacyTopoCTPLocation.initialize(m_isLegacyTopo));
87 CHECK(m_legacyTopoOverflowCTPLocation.initialize(m_isLegacyTopo));
88 CHECK(m_topoCTPLocation.initialize(!m_isLegacyTopo));
89 CHECK(m_topoOverflowCTPLocation.initialize(!m_isLegacyTopo));
90 if (m_isLegacyTopo){
91 ATH_MSG_DEBUG("Legacy output trigger key property " << m_legacyTopoCTPLocation);
92 ATH_MSG_DEBUG("Legacy output overflow key property " << m_legacyTopoOverflowCTPLocation);
93 }
94 else {
95 ATH_MSG_DEBUG("Output trigger key property " << m_topoCTPLocation);
96 ATH_MSG_DEBUG("Output overflow key property " << m_topoOverflowCTPLocation);
97 }
98
99 ATH_MSG_DEBUG("Prescale factor set to " << m_prescale);
100 ATH_MSG_DEBUG("PrescaleDAQROBAccess factor set to " << m_prescaleForDAQROBAccess);
101 ATH_MSG_DEBUG("FillHistoBasedOnHardware " << m_fillHistogramsBasedOnHardwareDecision);
102 if(m_fillHistogramsBasedOnHardwareDecision and
103 (m_prescaleForDAQROBAccess % m_prescale)) {
104 ATH_MSG_FATAL("PrescaleDAQROBAccess must be a multiple of Prescale"
105 <<" : current values :"
106 <<" "<<m_prescaleForDAQROBAccess
107 <<", "<<m_prescale);
108 return StatusCode::FAILURE;
109 }
110
111 const TrigConf::L1Menu * l1menu = nullptr;
112 ATH_CHECK( detStore()->retrieve(l1menu) );
113 ATH_MSG_INFO( "initialize(): retrieving new-style L1 trigger menu from Detector Store" );
114
115 m_topoSteering->setUseBitwise(m_enableBitwise);
116 try {
117 m_topoSteering->setupFromConfiguration(*l1menu);
118 }
119 catch(std::exception & e) {
120 ATH_MSG_FATAL("Caught exception when configuring topo steering from menu: " << e.what() );
121 return StatusCode::FAILURE;
122 }
123
124 m_topoSteering->setAlgMsgLevel( TrigConf::MSGTC::Level((int)m_topoOutputLevel) );
125 m_topoSteering->setOutputAlgosFillBasedOnHardware(m_fillHistogramsBasedOnHardwareDecision);
126
127 if (m_doMonitoring) {ATH_CHECK(m_ControlHistSvc->SetHistSvc(m_topoSteering, m_histBaseDir.value()));}
128
129 ATH_CHECK(m_legacyL1topoKey.initialize(m_isLegacyTopo));
130 ATH_CHECK(m_l1topoKey.initialize(!m_isLegacyTopo));
131
132 return StatusCode::SUCCESS;
133}
134
135
136// Exectued once per offline job and for every new run online
139 ATH_MSG_DEBUG("start");
140
141 m_scaler->reset();
142
143 try {
144 m_topoSteering->initializeAlgorithms();
145 }
146 catch(std::exception & e) {
147 ATH_MSG_FATAL("Caught exception when initializing topo algorithms" << e.what() );
148 return StatusCode::FAILURE;
149 }
150
151 if( m_enableInputDump ) {
152 m_topoSteering->inputEvent().enableInputDump( m_inputDumpFile );
153 m_topoSteering->inputEvent().dumpStart();
154 }
155
156 return StatusCode::SUCCESS;
157}
158
159
160
161StatusCode
163 const EventContext& ctx = Gaudi::Hive::currentContext();
164
165 if (m_prescale>1 && not m_scaler->decision(m_prescale)){
166 ATH_MSG_DEBUG( "This event not processed due to prescale");
167 return StatusCode::SUCCESS;
168 // do not record dummy output:
169 // LVL1::FrontPanelCTP is initialised with all 6 32-bit words set to 0 which is valid data
170 // LVL1::FrontPanelCTP * topo2CTP = new LVL1::FrontPanelCTP();
171 // CHECK(evtStore()->record( topo2CTP, m_topoCTPLocation ));
172 }
173 else {
174 ATH_MSG_DEBUG( "This event is processed - not prescaled");
175 }
176
177 // reset input and internal state
178 m_topoSteering->reset();
179
180 // fill the L1Topo Input Event
181 TCS::TopoInputEvent & inputEvent = m_topoSteering->inputEvent();
182
183 inputEvent.setEventInfo(ctx.eventID().run_number(),
184 ctx.eventID().event_number(),
185 ctx.eventID().lumi_block(),
186 ctx.eventID().bunch_crossing_id());
187
188 // EM TAU
189 if (m_emtauInputProvider.isEnabled()) {
190 CHECK(m_emtauInputProvider->fillTopoInputEvent(inputEvent));
191 }
192 // JET
193 if (m_jetInputProvider.isEnabled()) {
194 CHECK(m_jetInputProvider->fillTopoInputEvent(inputEvent));
195 }
196 // ET sum, ET miss
197 if (m_energyInputProvider.isEnabled()) {
198 CHECK(m_energyInputProvider->fillTopoInputEvent(inputEvent));
199 }
200 // Muon
201 if (m_muonInputProvider.isEnabled()) {
202 CHECK(m_muonInputProvider->fillTopoInputEvent(inputEvent));
203 }
204
205 ATH_MSG_DEBUG("" << inputEvent);
206
207 inputEvent.dump();
208
210 if (retrieveHardwareDecision(m_isLegacyTopo, ctx).isSuccess()) {
211 m_topoSteering->propagateHardwareBitsToAlgos();
212 m_topoSteering->setOutputAlgosSkipHistograms(false);
213 }
214 else {
215 m_topoSteering->setOutputAlgosSkipHistograms(true);
216 }
218 m_topoSteering->setOutputAlgosSkipHistograms(true);
219 }
220 }
221
222 // execute the toposteering
223 m_topoSteering->executeEvent();
224
225 ATH_MSG_DEBUG("Global Decision:\n" << m_topoSteering->simulationResult().globalOutput());
226
227
236
237 // Format for CTP still undecided
238
239 const TCS::GlobalOutput & globalOutput = m_topoSteering->simulationResult().globalOutput();
240 auto topoOutput2CTP = std::make_unique< LVL1::FrontPanelCTP >();
241 auto topoOverflow2CTP = std::make_unique< LVL1::FrontPanelCTP >();
242
243 const TrigConf::L1Menu * l1menu = nullptr;
244 ATH_CHECK( detStore()->retrieve(l1menu) );
245
246
248 ATH_MSG_DEBUG(" write: " << outputHandle.key() << " = " << "..." );
249 ATH_CHECK(outputHandle.record(std::make_unique<xAOD::L1TopoSimResultsContainer>(), std::make_unique<xAOD::L1TopoSimResultsAuxContainer>()));
250
251
252 if( m_isLegacyTopo ) {
253 // set electrical connectors
254 std::string conn1 = l1menu->board("LegacyTopo0").connectorNames()[0];
255 std::string conn2 = l1menu->board("LegacyTopo1").connectorNames()[0];
256 for(unsigned int clock=0; clock<2; ++clock) {
257 topoOutput2CTP->setCableWord0( clock, 0 ); // ALFA
258 ATH_MSG_DEBUG("Word 1 " << conn1 << " clock " << clock << " " << globalOutput.decision_field( conn1, clock) );
259 topoOutput2CTP->setCableWord1( clock, globalOutput.decision_field( conn1, clock) ); // TOPO 0
260 WriteEDM(outputHandle,conn1,clock,globalOutput.decision_field( conn1, clock));
261 ATH_MSG_DEBUG("Word 2 " << conn2 << " clock " << clock << " " << globalOutput.decision_field( conn2, clock) );
262 topoOutput2CTP->setCableWord2( clock, globalOutput.decision_field( conn2, clock) ); // TOPO 1
263 WriteEDM(outputHandle,conn2,clock,globalOutput.decision_field( conn2, clock));
264 // topoOverflow2CTP->setCableWord0( clock, 0 ); // ALFA
265 // topoOverflow2CTP->setCableWord1( clock, dec.overflow( 0, clock) ); // TOPO 0
266 // topoOverflow2CTP->setCableWord2( clock, dec.overflow( 1, clock) ); // TOPO 1
267 }
268
269 CHECK(SG::makeHandle(m_legacyTopoCTPLocation) .record(std::move(topoOutput2CTP)));
270 CHECK(SG::makeHandle(m_legacyTopoOverflowCTPLocation).record(std::move(topoOverflow2CTP)));
271
272 } else {
273 // set electrical connectors
274 std::string conn1 = l1menu->board("Topo2").connectorNames()[0];
275 std::string conn2 = l1menu->board("Topo3").connectorNames()[0];
276 for(unsigned int clock=0; clock<2; ++clock) {
277 ATH_MSG_DEBUG("Word 1 " << conn1 << " clock " << clock << " " << globalOutput.decision_field( conn1, clock) );
278 topoOutput2CTP->setCableWord1( clock, globalOutput.decision_field( conn1, clock) | globalOutput.overflow_field(conn1, clock) ); // TOPO 0
279 WriteEDM(outputHandle,conn1,clock,globalOutput.decision_field( conn1, clock));
280 ATH_MSG_DEBUG("Word 2 " << conn2 << " clock " << clock << " " << globalOutput.decision_field( conn2, clock) );
281 topoOutput2CTP->setCableWord2( clock, globalOutput.decision_field( conn2, clock) | globalOutput.overflow_field(conn2, clock) ); // TOPO 1
282 WriteEDM(outputHandle,conn2,clock,globalOutput.decision_field( conn2, clock));
283
284 topoOverflow2CTP->setCableWord0( clock, 0 ); // ALFA
285 topoOverflow2CTP->setCableWord1( clock, globalOutput.overflow_field( conn1, clock) ); // TOPO 0
286 WriteEDM_Overflow(outputHandle,"Overflow"+conn1,clock,globalOutput.overflow_field( conn1, clock));
287 topoOverflow2CTP->setCableWord2( clock, globalOutput.overflow_field( conn2, clock) ); // TOPO 1
288 WriteEDM_Overflow(outputHandle,"Overflow"+conn2,clock,globalOutput.overflow_field( conn2, clock));
289
290 WriteEDM(outputHandle,"Ambiguity"+conn1,clock,globalOutput.ambiguity_field( conn1, clock));
291 WriteEDM(outputHandle,"Ambiguity"+conn2,clock,globalOutput.ambiguity_field( conn2, clock));
292 }
293
294 // set optical connectors
295 for( const auto& connOpt : l1menu->board("Topo1").connectorNames() ) {
296 auto outputOpt = globalOutput.count_field(connOpt);
297 std::bitset<64> outputOpt_1(outputOpt.to_string());
298 std::bitset<64> outputOpt_2((outputOpt<<64).to_string());
299 topoOutput2CTP->setOptCableWord( connOpt, outputOpt );
300 WriteEDM(outputHandle,connOpt,1,outputOpt_1.to_ulong());
301 WriteEDM(outputHandle,connOpt,0,outputOpt_2.to_ulong());
302 }
303
304 CHECK(SG::makeHandle(m_topoCTPLocation) .record(std::move(topoOutput2CTP)));
305 CHECK(SG::makeHandle(m_topoOverflowCTPLocation).record(std::move(topoOverflow2CTP)));
306 }
307
308 return StatusCode::SUCCESS;
309}
310
311
312StatusCode
314 m_topoSteering->inputEvent().dumpFinish();
315 return StatusCode::SUCCESS;
316}
317
318void
319L1TopoSimulation::WriteEDM(SG::WriteHandle<xAOD::L1TopoSimResultsContainer> &handle, const std::string &name, unsigned int clock, uint32_t word) {
320
321 handle->push_back(std::make_unique<xAOD::L1TopoSimResults>());
322 handle->back()->setConnectionId(TCS::outputType(name));
323 handle->back()->setClock(clock);
324 handle->back()->setBitWidth(32);
325 handle->back()->setTopoWord(word);
326
327 ATH_MSG_DEBUG( "L1Topo EDM:: Connection Id: " << handle->back()->connectionId() << " Clock: " << handle->back()->clock() << " Decision: " << handle->back()->topoWord() );
328}
329
330void
331L1TopoSimulation::WriteEDM_Overflow(SG::WriteHandle<xAOD::L1TopoSimResultsContainer> &handle, const std::string &name, unsigned int clock, uint32_t word) {
332
333 handle->push_back(std::make_unique<xAOD::L1TopoSimResults>());
334 handle->back()->setConnectionId(TCS::outputType(name));
335 handle->back()->setClock(clock);
336 handle->back()->setBitWidth(32);
337 handle->back()->setTopoWordOverflow(word);
338
339 ATH_MSG_DEBUG( "L1Topo EDM:: Connection Id: " << handle->back()->connectionId() << " Clock: " << handle->back()->clock() << " Decision: " << handle->back()->topoWord() );
340}
341
342void
343L1TopoSimulation::WriteEDM(SG::WriteHandle<xAOD::L1TopoSimResultsContainer> &handle, const std::string &name, unsigned int clock, uint64_t word) {
344
345 handle->push_back(std::make_unique<xAOD::L1TopoSimResults>());
346 handle->back()->setConnectionId(TCS::outputType(name));
347 handle->back()->setClock(clock);
348 handle->back()->setBitWidth(64);
349 handle->back()->setTopoWord64(word);
350
351 ATH_MSG_DEBUG( "L1Topo EDM:: Connection Id: " << handle->back()->connectionId() << " Clock: " << handle->back()->clock() << " Decision: " << handle->back()->topoWord() );
352}
353
354void
355L1TopoSimulation::WriteEDM_Overflow(SG::WriteHandle<xAOD::L1TopoSimResultsContainer> &handle, const std::string &name, unsigned int clock, uint64_t word) {
356
357 handle->push_back(std::make_unique<xAOD::L1TopoSimResults>());
358 handle->back()->setConnectionId(TCS::outputType(name));
359 handle->back()->setClock(clock);
360 handle->back()->setBitWidth(64);
361 handle->back()->setTopoWord64Overflow(word);
362
363 ATH_MSG_DEBUG( "L1Topo EDM:: Connection Id: " << handle->back()->connectionId() << " Clock: " << handle->back()->clock() << " Decision: " << handle->back()->topoWord() );
364}
365
366StatusCode
367L1TopoSimulation::retrieveHardwareDecision(bool isLegacy, const EventContext& ctx)
368{
369 if (isLegacy) {return hardwareDecisionLegacy();}
370 else {return hardwareDecisionPhase1(ctx);}
371}
372
373StatusCode
375{
376 // some duplication with L1TopoRDO::Helpers
377 // getDecisionAndOverflowBits() ?
378 StatusCode sc = StatusCode::SUCCESS;
379 std::bitset<TCS::TopoSteering::numberOfL1TopoBits> hardwareDaqRobTriggerBits;
380 std::bitset<TCS::TopoSteering::numberOfL1TopoBits> hardwareDaqRobOvrflowBits;
381 bool prescalForDAQROBAccess = true; // DG-2017-06-30 decide what to do when the hdw dec is not to be retrieved
382 if (prescalForDAQROBAccess){
383 std::vector<L1Topo::L1TopoTOB> daqTobsBC0;
384 std::vector<uint32_t> tobsbc0SourceIds; // to compute bit indices
385 const L1TopoRDOCollection* rdos = 0;
386 sc = evtStore()->retrieve(rdos);
387 if (sc.isFailure() or 0 == rdos) {
388 ATH_MSG_INFO ( "Could not retrieve L1Topo DAQ RDO collection from StoreGate" );
389 } else if (rdos->empty()) {
390 ATH_MSG_INFO ( "L1Topo DAQ RDO collection is empty" );
391 } else {
392 for (const L1TopoRDO* rdo : *rdos){
393 const std::vector<uint32_t> cDataWords = rdo->getDataWords();
394 // initialise header: set version 15, BCN -7, which is unlikely
395 L1Topo::Header header(0xf,0,0,0,0,1,0x7);
396 for (const uint32_t word : cDataWords){
397 switch (L1Topo::blockType(word)){
399 header = L1Topo::Header(word);
400 break;
401 }
403 auto tob = L1Topo::L1TopoTOB(word);
404 if (header.bcn_offset()==0){
405 daqTobsBC0.push_back(tob);
406 tobsbc0SourceIds.push_back(rdo->getSourceID());
407 }
408 break;
409 }
410 default: break;
411 }
412 } // for(word)
413 } // for(rdo)
414 }
415 for(uint32_t iTob=0; iTob<daqTobsBC0.size(); ++iTob){
416 const L1Topo::L1TopoTOB &tob = daqTobsBC0[iTob];
417 const uint32_t &sourceId = tobsbc0SourceIds[iTob];
418 for(unsigned int i=0; i<8; ++i){
419 unsigned int index = L1Topo::triggerBitIndexNew(sourceId, tob, i);
420 hardwareDaqRobTriggerBits[index] = (tob.trigger_bits()>>i)&1;
421 hardwareDaqRobOvrflowBits[index] = (tob.overflow_bits()>>i)&1;
422 }
423 }
424 m_topoSteering->setHardwareBits(hardwareDaqRobTriggerBits,
425 hardwareDaqRobOvrflowBits);
426 }
427 return sc;
428}
429
430
431StatusCode
433{
434 // some duplication with L1TopoRDO::Helpers
435 // getDecisionAndOverflowBits() ?
436 StatusCode sc = StatusCode::SUCCESS;
437
438 std::bitset<TCS::TopoSteering::numberOfL1TopoBits> hardwareDaqRobTriggerBits;
439 std::bitset<TCS::TopoSteering::numberOfL1TopoBits> hardwareDaqRobOvrflowBits;
440
442 if(!cont.isValid()){
443 ATH_MSG_FATAL("Could not retrieve L1Topo RAW Data Container from the BS data.");
444 return StatusCode::FAILURE;
445 }
446
447 std::unique_ptr<L1Topo::L1TopoResult> l1topoResult = std::make_unique<L1Topo::L1TopoResult>(*cont);
448 if (!l1topoResult->getStatus()) {
449 ATH_MSG_WARNING("Decoding L1Topo results failed!!");
450 return StatusCode::FAILURE;
451 }
452 hardwareDaqRobTriggerBits = l1topoResult->getDecisions();
453 hardwareDaqRobOvrflowBits = l1topoResult->getOverflows();
454
455
456
457 m_topoSteering->setHardwareBits(hardwareDaqRobTriggerBits,
458 hardwareDaqRobOvrflowBits);
459
460 return sc;
461}
#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.