ATLAS Offline Software
Loading...
Searching...
No Matches
LVL1BS::CpByteStreamV1Tool Class Reference

Tool to perform ROB fragments to CPM towers, CPM hits and CMM-CP hits, and CP container to raw data conversions. More...

#include <CpByteStreamV1Tool.h>

Inheritance diagram for LVL1BS::CpByteStreamV1Tool:
Collaboration diagram for LVL1BS::CpByteStreamV1Tool:

Classes

struct  CmmHitsData
struct  CpByteStreamToolData
struct  CpmHitsData
struct  CpmTowerData
struct  LocalData

Public Member Functions

 CpByteStreamV1Tool (const std::string &type, const std::string &name, const IInterface *parent)
virtual ~CpByteStreamV1Tool ()
virtual StatusCode initialize () override
StatusCode convert (const std::string &sgKey, const IROBDataProviderSvc::VROBFRAG &robFrags, DataVector< LVL1::CPMTower > *ttCollection) const
 Convert ROB fragments to CPM towers.
StatusCode convert (const std::string &sgKey, const IROBDataProviderSvc::VROBFRAG &robFrags, DataVector< LVL1::CPMHits > *hitCollection) const
 Convert ROB fragments to CPM hits.
StatusCode convert (const std::string &sgKey, const IROBDataProviderSvc::VROBFRAG &robFrags, DataVector< LVL1::CMMCPHits > *hitCollection) const
 Convert ROB fragments to CMM-CP hits.
StatusCode convert (const LVL1::CPBSCollectionV1 *cp) const
 Convert CP Container to bytestream.
const std::vector< uint32_t > & sourceIDs () const
 Return reference to vector with all possible Source Identifiers.
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysInitialize () override
 Perform system initialization for an algorithm.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const

Static Public Member Functions

static const InterfaceID & interfaceID ()
 AlgTool InterfaceID.

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution
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)
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed.

Private Types

enum  CollectionType { CPM_TOWERS , CPM_HITS , CMM_CP_HITS }
typedef DataVector< LVL1::CPMTowerCpmTowerCollection
typedef DataVector< LVL1::CPMHitsCpmHitsCollection
typedef DataVector< LVL1::CMMCPHitsCmmCpHitsCollection
typedef std::map< unsigned int, const LVL1::CPMTower * > ConstCpmTowerMap
typedef std::map< unsigned int, LVL1::CPMTower * > CpmTowerMap
typedef std::map< int, const LVL1::CPMHits * > ConstCpmHitsMap
typedef std::map< int, LVL1::CPMHits * > CpmHitsMap
typedef std::map< int, const LVL1::CMMCPHits * > ConstCmmCpHitsMap
typedef std::map< int, LVL1::CMMCPHits * > CmmCpHitsMap
typedef IROBDataProviderSvc::VROBFRAG::const_iterator ROBIterator
typedef OFFLINE_FRAGMENTS_NAMESPACE::PointerType ROBPointer
typedef OFFLINE_FRAGMENTS_NAMESPACE::PointerType RODPointer
typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

std::vector< uint32_t > makeSourceIDs () const
 Create list of all source IDs.
StatusCode convertBs (const std::string &sgKey, const IROBDataProviderSvc::VROBFRAG &robFrags, CpByteStreamToolData &data) const
 Convert bytestream to given container type.
void decodeCmmCp (CmmCpSubBlock *subBlock, int trigCmm, CmmHitsData &data, LocalData &ld) const
 Unpack CMM-CP sub-block.
void decodeCpm (CpmSubBlockV1 *subBlock, int trigCpm, CpByteStreamToolData &data, LocalData &ld) const
 Unpack CPM sub-block.
const LVL1::CPMTowerfindCpmTower (unsigned int key, const ConstCpmTowerMap &ttMap) const
 Find a CPM tower for given key.
LVL1::CPMTowerfindCpmTower (const CpmTowerData &data, unsigned int key) const
const LVL1::CPMHitsfindCpmHits (int crate, int module, const ConstCpmHitsMap &hitsMap) const
 Find CPM hits for given crate, module.
LVL1::CPMHitsfindCpmHits (const CpmHitsData &data, int crate, int module) const
const LVL1::CMMCPHitsfindCmmCpHits (int crate, int dataID, const ConstCmmCpHitsMap &cmmHitsMap) const
 Find CMM-CP hits for given crate, data ID.
LVL1::CMMCPHitsfindCmmCpHits (const CmmHitsData &data, int crate, int dataID) const
void setupCpmTowerMap (const CpmTowerCollection *ttCollection, ConstCpmTowerMap &ttMap, LVL1::TriggerTowerKey &towerKey) const
 Set up CPM tower map.
void setupCpmHitsMap (const CpmHitsCollection *hitCollection, ConstCpmHitsMap &hitsMap) const
 Set up CPM hits map.
void setupCmmCpHitsMap (const CmmCpHitsCollection *hitCollection, ConstCmmCpHitsMap &cmmHitsMap) const
 Set up CMM-CP hits map.
bool slinkSlices (int crate, int module, int modulesPerSlink, int &timeslices, int &trigJem, const ConstCpmTowerMap &ttMap, const ConstCpmHitsMap &hitsMap, const ConstCmmCpHitsMap &cmmHitsMap, LVL1::TriggerTowerKey &towerKey) const
 Get number of slices and triggered slice offset for next slink.
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

ServiceHandle< IByteStreamCnvSvcm_byteStreamCnvSvc { this, "ByteStreamCnvSvc", "ByteStreamCnvSvc" }
ToolHandle< LVL1::IL1CaloMappingToolm_cpmMaps
 Channel mapping tool.
ToolHandle< LVL1BS::L1CaloErrorByteStreamToolm_errorTool
 Error collection tool.
int m_crateOffsetHw
 Property: Hardware crate number offset.
int m_crateOffsetSw
 Property: Software crate number offset.
int m_version
 Property: Sub_block header version.
int m_dataFormat
 Property: Data compression format.
const int m_channels
 Number of channels per module.
int m_crates
 Property: Number of crates.
const int m_modules
 Number of CPM modules per crate.
int m_slinks
 Property: Number of slinks per crate when writing out bytestream.
int m_dfltSlices
 Property: Default number of slices in simulation.
int m_forceSlices
 Property: Force number of slices in bytestream.
int m_crateMin
 Property: Minimum crate number when writing out bytestream.
int m_crateMax
 Property: Maximum crate number when writing out bytestream.
std::vector< uint32_t > m_sourceIDsProp
 Property: ROB source IDs.
const eformat::SubDetector m_subDetector
 Sub-detector type.
const L1CaloSrcIdMap m_srcIdMap
 Source ID converter.
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default)
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
bool m_varHandleArraysDeclared

Detailed Description

Tool to perform ROB fragments to CPM towers, CPM hits and CMM-CP hits, and CP container to raw data conversions.

Based on ROD document version 1_09h.

Author
Peter Faulkner

Definition at line 54 of file CpByteStreamV1Tool.h.

Member Typedef Documentation

◆ CmmCpHitsCollection

◆ CmmCpHitsMap

Definition at line 125 of file CpByteStreamV1Tool.h.

◆ ConstCmmCpHitsMap

typedef std::map<int, const LVL1::CMMCPHits*> LVL1BS::CpByteStreamV1Tool::ConstCmmCpHitsMap
private

Definition at line 124 of file CpByteStreamV1Tool.h.

◆ ConstCpmHitsMap

typedef std::map<int, const LVL1::CPMHits*> LVL1BS::CpByteStreamV1Tool::ConstCpmHitsMap
private

Definition at line 122 of file CpByteStreamV1Tool.h.

◆ ConstCpmTowerMap

typedef std::map<unsigned int, const LVL1::CPMTower*> LVL1BS::CpByteStreamV1Tool::ConstCpmTowerMap
private

Definition at line 120 of file CpByteStreamV1Tool.h.

◆ CpmHitsCollection

◆ CpmHitsMap

typedef std::map<int, LVL1::CPMHits*> LVL1BS::CpByteStreamV1Tool::CpmHitsMap
private

Definition at line 123 of file CpByteStreamV1Tool.h.

◆ CpmTowerCollection

◆ CpmTowerMap

typedef std::map<unsigned int, LVL1::CPMTower*> LVL1BS::CpByteStreamV1Tool::CpmTowerMap
private

Definition at line 121 of file CpByteStreamV1Tool.h.

◆ ROBIterator

typedef IROBDataProviderSvc::VROBFRAG::const_iterator LVL1BS::CpByteStreamV1Tool::ROBIterator
private

Definition at line 126 of file CpByteStreamV1Tool.h.

◆ ROBPointer

◆ RODPointer

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< AlgTool > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Member Enumeration Documentation

◆ CollectionType

Constructor & Destructor Documentation

◆ CpByteStreamV1Tool()

LVL1BS::CpByteStreamV1Tool::CpByteStreamV1Tool ( const std::string & type,
const std::string & name,
const IInterface * parent )

Definition at line 47 of file CpByteStreamV1Tool.cxx.

50 : AthAlgTool(type, name, parent),
51 m_cpmMaps("LVL1::CpmMappingTool/CpmMappingTool"),
52 m_errorTool("LVL1BS::L1CaloErrorByteStreamTool/L1CaloErrorByteStreamTool"),
53 m_channels(80), m_crates(4), m_modules(14),
54 m_subDetector(eformat::TDAQ_CALO_CLUSTER_PROC_DAQ)
55{
56 declareInterface<CpByteStreamV1Tool>(this);
57
58 declareProperty("CpmMappingTool", m_cpmMaps,
59 "Crate/Module/Channel to Eta/Phi/Layer mapping tool");
60 declareProperty("ErrorTool", m_errorTool,
61 "Tool to collect errors for monitoring");
62
63 declareProperty("CrateOffsetHw", m_crateOffsetHw = 8,
64 "Offset of CP crate numbers in bytestream");
65 declareProperty("CrateOffsetSw", m_crateOffsetSw = 0,
66 "Offset of CP crate numbers in RDOs");
67
68 // Properties for reading bytestream only
69 declareProperty("ROBSourceIDs", m_sourceIDsProp,
70 "ROB fragment source identifiers");
71
72 // Properties for writing bytestream only
73 declareProperty("DataVersion", m_version = 1,
74 "Format version number in sub-block header");
75 declareProperty("DataFormat", m_dataFormat = 1,
76 "Format identifier (0-1) in sub-block header");
77 declareProperty("SlinksPerCrate", m_slinks = 2,
78 "The number of S-Links per crate");
79 declareProperty("SimulSlices", m_dfltSlices = 1,
80 "The number of slices in the simulation");
81 declareProperty("ForceSlices", m_forceSlices = 0,
82 "If >0, the number of slices in bytestream");
83 declareProperty("CrateMin", m_crateMin = 0,
84 "Minimum crate number, allows partial output");
85 declareProperty("CrateMax", m_crateMax = m_crates-1,
86 "Maximum crate number, allows partial output");
87
88}
AthAlgTool()
Default constructor:
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
int m_slinks
Property: Number of slinks per crate when writing out bytestream.
int m_dfltSlices
Property: Default number of slices in simulation.
int m_crates
Property: Number of crates.
int m_crateOffsetSw
Property: Software crate number offset.
int m_forceSlices
Property: Force number of slices in bytestream.
std::vector< uint32_t > m_sourceIDsProp
Property: ROB source IDs.
int m_version
Property: Sub_block header version.
int m_crateMin
Property: Minimum crate number when writing out bytestream.
ToolHandle< LVL1::IL1CaloMappingTool > m_cpmMaps
Channel mapping tool.
int m_dataFormat
Property: Data compression format.
const int m_channels
Number of channels per module.
ToolHandle< LVL1BS::L1CaloErrorByteStreamTool > m_errorTool
Error collection tool.
int m_crateOffsetHw
Property: Hardware crate number offset.
int m_crateMax
Property: Maximum crate number when writing out bytestream.
const eformat::SubDetector m_subDetector
Sub-detector type.
const int m_modules
Number of CPM modules per crate.

◆ ~CpByteStreamV1Tool()

LVL1BS::CpByteStreamV1Tool::~CpByteStreamV1Tool ( )
virtual

Definition at line 92 of file CpByteStreamV1Tool.cxx.

93{
94}

Member Function Documentation

◆ convert() [1/4]

StatusCode LVL1BS::CpByteStreamV1Tool::convert ( const LVL1::CPBSCollectionV1 * cp) const

Convert CP Container to bytestream.

Vector for current CMM-CP hit0 sub-blocks

Vector for current CMM-CP hit1 sub-blocks

Definition at line 145 of file CpByteStreamV1Tool.cxx.

146{
147 const bool debug = msgLvl(MSG::DEBUG);
148 if (debug) msg(MSG::DEBUG);
149
150 // Get the event assembler
151 FullEventAssembler<L1CaloSrcIdMap>* fea = nullptr;
152 ATH_CHECK( m_byteStreamCnvSvc->getFullEventAssembler (fea,
153 "CpByteStreamV1") );
154 const uint16_t minorVersion = m_srcIdMap.minorVersionPreLS1();
155 fea->setRodMinorVersion(minorVersion);
156
157 // Pointer to ROD data vector
158
160
161 // Set up the container maps
162
163 LVL1::TriggerTowerKey towerKey;
164
165 // CPM tower map
166 ConstCpmTowerMap ttMap;
167 setupCpmTowerMap(cp->towers(), ttMap, towerKey);
168
169 // CPM hits map
170 ConstCpmHitsMap hitsMap;
171 setupCpmHitsMap(cp->hits(), hitsMap);
172
173 // CMM-CP hits map
174 ConstCmmCpHitsMap cmmHitsMap;
175 setupCmmCpHitsMap(cp->cmmHits(), cmmHitsMap);
176
177 // Loop over data
178
179 const bool neutralFormat = m_dataFormat == L1CaloSubBlock::NEUTRAL;
180 const int modulesPerSlink = m_modules / m_slinks;
181 int timeslices = 1;
182 int trigCpm = 0;
183 int timeslicesNew = 1;
184 int trigCpmNew = 0;
185 for (int crate = m_crateMin; crate <= m_crateMax; ++crate) {
186 const int hwCrate = crate + m_crateOffsetHw;
187
188 // CPM modules are numbered 1 to m_modules
189 for (int module=1; module <= m_modules; ++module) {
190 const int mod = module - 1;
191
192 // Pack required number of modules per slink
193
194 if (mod%modulesPerSlink == 0) {
195 const int daqOrRoi = 0;
196 const int slink = (m_slinks == 2) ? 2*(mod/modulesPerSlink)
197 : mod/modulesPerSlink;
198 if (debug) {
199 msg() << "Treating crate " << hwCrate
200 << " slink " << slink << endmsg;
201 }
202 // Get number of CPM slices and triggered slice offset
203 // for this slink
204 if ( ! slinkSlices(crate, module, modulesPerSlink,
205 timeslices, trigCpm,
206 ttMap,
207 hitsMap,
208 cmmHitsMap,
209 towerKey)) {
210 msg(MSG::ERROR) << "Inconsistent number of slices or "
211 << "triggered slice offsets in data for crate "
212 << hwCrate << " slink " << slink << endmsg;
213 return StatusCode::FAILURE;
214 }
215 timeslicesNew = (m_forceSlices) ? m_forceSlices : timeslices;
216 trigCpmNew = ModifySlices::peak(trigCpm, timeslices, timeslicesNew);
217 if (debug) {
218 msg() << "Data Version/Format: " << m_version
219 << " " << m_dataFormat << endmsg
220 << "Slices/offset: " << timeslices << " " << trigCpm;
221 if (timeslices != timeslicesNew) {
222 msg() << " modified to " << timeslicesNew << " " << trigCpmNew;
223 }
224 msg() << endmsg;
225 }
226 L1CaloUserHeader userHeader;
227 userHeader.setCpm(trigCpmNew);
228 const uint32_t rodIdCpm = m_srcIdMap.getRodID(hwCrate, slink, daqOrRoi,
230 theROD = fea->getRodData(rodIdCpm);
231 theROD->push_back(userHeader.header());
232 }
233 if (debug) msg() << "Module " << module << endmsg;
234
235 // Create a sub-block for each slice (except Neutral format)
236
237 // Vector for current CPM sub-blocks
238 DataVector<CpmSubBlockV1> cpmBlocks;
239
240 for (int slice = 0; slice < timeslicesNew; ++slice) {
241 CpmSubBlockV1* const subBlock = new CpmSubBlockV1();
242 subBlock->setCpmHeader(m_version, m_dataFormat, slice,
243 hwCrate, module, timeslicesNew);
244 cpmBlocks.push_back(subBlock);
245 if (neutralFormat) break;
246 }
247
248 // Find CPM towers corresponding to each eta/phi pair and fill
249 // sub-blocks
250
251 for (int chan=0; chan < m_channels; ++chan) {
252 double eta = 0.;
253 double phi = 0.;
254 int layer = 0;
255 if (m_cpmMaps->mapping(crate, module, chan, eta, phi, layer)) {
256 const unsigned int key = towerKey.ttKey(phi, eta);
257 const LVL1::CPMTower* const tt = findCpmTower(key, ttMap);
258 if (tt ) {
259 std::vector<int> emData;
260 std::vector<int> hadData;
261 std::vector<int> emError;
262 std::vector<int> hadError;
263 ModifySlices::data(tt->emEnergyVec(), emData, timeslicesNew);
264 ModifySlices::data(tt->hadEnergyVec(), hadData, timeslicesNew);
265 ModifySlices::data(tt->emErrorVec(), emError, timeslicesNew);
266 ModifySlices::data(tt->hadErrorVec(), hadError, timeslicesNew);
267 for (int slice = 0; slice < timeslicesNew; ++slice) {
268 const LVL1::DataError emErrBits(emError[slice]);
269 const LVL1::DataError hadErrBits(hadError[slice]);
270 const int emErr =
271 (emErrBits.get(LVL1::DataError::LinkDown) << 1) |
272 emErrBits.get(LVL1::DataError::Parity);
273 const int hadErr =
274 (hadErrBits.get(LVL1::DataError::LinkDown) << 1) |
275 hadErrBits.get(LVL1::DataError::Parity);
276 const int index = ( neutralFormat ) ? 0 : slice;
277 CpmSubBlockV1* const subBlock = cpmBlocks[index];
278 subBlock->fillTowerData(slice, chan, emData[slice],
279 hadData[slice], emErr, hadErr);
280 }
281 }
282 }
283 }
284
285 // Add CPM hits
286
287 const LVL1::CPMHits* const hits = findCpmHits(crate, module, hitsMap);
288 if (hits) {
289 std::vector<unsigned int> vec0;
290 std::vector<unsigned int> vec1;
291 ModifySlices::data(hits->HitsVec0(), vec0, timeslicesNew);
292 ModifySlices::data(hits->HitsVec1(), vec1, timeslicesNew);
293 for (int slice = 0; slice < timeslicesNew; ++slice) {
294 const int index = ( neutralFormat ) ? 0 : slice;
295 CpmSubBlockV1* const subBlock = cpmBlocks[index];
296 subBlock->setHits(slice, vec0[slice], vec1[slice]);
297 }
298 }
299
300 // Pack and write the sub-blocks
301
303 for (pos = cpmBlocks.begin(); pos != cpmBlocks.end(); ++pos) {
304 CpmSubBlockV1* const subBlock = *pos;
305 if ( !subBlock->pack()) {
306 msg(MSG::ERROR) << "CPM sub-block packing failed" << endmsg;
307 return StatusCode::FAILURE;
308 }
309 if (debug) {
310 msg() << "CPM sub-block data words: "
311 << subBlock->dataWords() << endmsg;
312 }
313 subBlock->write(theROD);
314 }
315 }
316
317 // Append CMMs to last S-Link of the crate
318
319 // Create a sub-block for each slice (except Neutral format)
320
322 DataVector<CmmCpSubBlock> cmmHit0Blocks;
324 DataVector<CmmCpSubBlock> cmmHit1Blocks;
325
326 const int summing = (crate == m_crates - 1) ? CmmSubBlock::SYSTEM
327 : CmmSubBlock::CRATE;
328 for (int slice = 0; slice < timeslicesNew; ++slice) {
329 CmmCpSubBlock* const h0Block = new CmmCpSubBlock();
330 h0Block->setCmmHeader(m_version, m_dataFormat, slice, hwCrate,
331 summing, CmmSubBlock::CMM_CP,
332 CmmSubBlock::RIGHT, timeslicesNew);
333 cmmHit0Blocks.push_back(h0Block);
334 CmmCpSubBlock* const h1Block = new CmmCpSubBlock();
335 h1Block->setCmmHeader(m_version, m_dataFormat, slice, hwCrate,
336 summing, CmmSubBlock::CMM_CP,
337 CmmSubBlock::LEFT, timeslicesNew);
338 cmmHit1Blocks.push_back(h1Block);
339 if (neutralFormat) break;
340 }
341
342 // CMM-CP
343
344 const int maxDataID = LVL1::CMMCPHits::MAXID;
345 for (int dataID = 1; dataID < maxDataID; ++dataID) {
346 int source = dataID;
347 if (dataID > m_modules) {
348 if (summing == CmmSubBlock::CRATE &&
349 dataID != LVL1::CMMCPHits::LOCAL) continue;
350 switch (dataID) {
353 break;
356 break;
359 break;
362 break;
365 break;
366 default:
367 continue;
368 }
369 }
370 const LVL1::CMMCPHits* const ch = findCmmCpHits(crate, dataID, cmmHitsMap);
371 if ( ch ) {
372 std::vector<unsigned int> hits0;
373 std::vector<unsigned int> hits1;
374 std::vector<int> err0;
375 std::vector<int> err1;
376 ModifySlices::data(ch->HitsVec0(), hits0, timeslicesNew);
377 ModifySlices::data(ch->HitsVec1(), hits1, timeslicesNew);
378 ModifySlices::data(ch->ErrorVec0(), err0, timeslicesNew);
379 ModifySlices::data(ch->ErrorVec1(), err1, timeslicesNew);
380 for (int slice = 0; slice < timeslicesNew; ++slice) {
381 const LVL1::DataError err0Bits(err0[slice]);
382 const LVL1::DataError err1Bits(err1[slice]);
383 const int index = ( neutralFormat ) ? 0 : slice;
384 CmmCpSubBlock* subBlock = cmmHit0Blocks[index];
385 subBlock->setHits(slice, source, hits0[slice],
386 err0Bits.get(LVL1::DataError::Parity));
387 subBlock = cmmHit1Blocks[index];
388 subBlock->setHits(slice, source, hits1[slice],
389 err1Bits.get(LVL1::DataError::Parity));
390 }
391 }
392 }
394 for (; cos != cmmHit0Blocks.end(); ++cos) {
395 CmmCpSubBlock* const subBlock = *cos;
396 if ( !subBlock->pack()) {
397 msg(MSG::ERROR) << "CMM-Cp sub-block packing failed" << endmsg;
398 return StatusCode::FAILURE;
399 }
400 if (debug) {
401 msg() << "CMM-Cp sub-block data words: "
402 << subBlock->dataWords() << endmsg;
403 }
404 subBlock->write(theROD);
405 }
406 cos = cmmHit1Blocks.begin();
407 for (; cos != cmmHit1Blocks.end(); ++cos) {
408 CmmCpSubBlock* const subBlock = *cos;
409 if ( !subBlock->pack()) {
410 msg(MSG::ERROR) << "CMM-Cp sub-block packing failed" << endmsg;
411 return StatusCode::FAILURE;
412 }
413 if (debug) {
414 msg() << "CMM-Cp sub-block data words: "
415 << subBlock->dataWords() << endmsg;
416 }
417 subBlock->write(theROD);
418 }
419 }
420
421 return StatusCode::SUCCESS;
422}
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
#define endmsg
#define ATH_CHECK
Evaluate an expression and check for errors.
const bool debug
bool msgLvl(const MSG::Level lvl) const
MsgStream & msg() const
value_type push_back(value_type pElem)
Add an element to the end of the collection.
DataModel_detail::iterator< DataVector > iterator
Standard iterator.
Definition DataVector.h:842
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
void setRodMinorVersion(uint16_t m)
change the ROD minor version
std::vector< uint32_t > RODDATA
ROD data as a vector of unsigned int.
RODDATA * getRodData(uint32_t id)
get a block of ROD data
void setupCpmHitsMap(const CpmHitsCollection *hitCollection, ConstCpmHitsMap &hitsMap) const
Set up CPM hits map.
ServiceHandle< IByteStreamCnvSvc > m_byteStreamCnvSvc
bool slinkSlices(int crate, int module, int modulesPerSlink, int &timeslices, int &trigJem, const ConstCpmTowerMap &ttMap, const ConstCpmHitsMap &hitsMap, const ConstCmmCpHitsMap &cmmHitsMap, LVL1::TriggerTowerKey &towerKey) const
Get number of slices and triggered slice offset for next slink.
std::map< int, const LVL1::CPMHits * > ConstCpmHitsMap
std::map< int, const LVL1::CMMCPHits * > ConstCmmCpHitsMap
const L1CaloSrcIdMap m_srcIdMap
Source ID converter.
const LVL1::CPMHits * findCpmHits(int crate, int module, const ConstCpmHitsMap &hitsMap) const
Find CPM hits for given crate, module.
void setupCmmCpHitsMap(const CmmCpHitsCollection *hitCollection, ConstCmmCpHitsMap &cmmHitsMap) const
Set up CMM-CP hits map.
void setupCpmTowerMap(const CpmTowerCollection *ttCollection, ConstCpmTowerMap &ttMap, LVL1::TriggerTowerKey &towerKey) const
Set up CPM tower map.
const LVL1::CPMTower * findCpmTower(unsigned int key, const ConstCpmTowerMap &ttMap) const
Find a CPM tower for given key.
std::map< unsigned int, const LVL1::CPMTower * > ConstCpmTowerMap
const LVL1::CMMCPHits * findCmmCpHits(int crate, int dataID, const ConstCmmCpHitsMap &cmmHitsMap) const
Find CMM-CP hits for given crate, data ID.
static void data(const std::vector< int > &oldVec, std::vector< int > &newVec, int newSlices)
Return modified data vector<int>
static int peak(int oldPeak, int oldSlices, int newSlices)
Return new triggered slice offset.
virtual unsigned int ttKey(const TriggerTower &tower)
returns the key of the passed tower
str index
Definition DeMoScan.py:362
@ layer
Definition HitInfo.h:79
setWord1 uint16_t
setEventNumber uint32_t

◆ convert() [2/4]

StatusCode LVL1BS::CpByteStreamV1Tool::convert ( const std::string & sgKey,
const IROBDataProviderSvc::VROBFRAG & robFrags,
DataVector< LVL1::CMMCPHits > * hitCollection ) const

Convert ROB fragments to CMM-CP hits.

Definition at line 134 of file CpByteStreamV1Tool.cxx.

138{
139 CmmHitsData data (hitCollection);
140 return convertBs(sgKey, robFrags, data);
141}
char data[hepevt_bytes_allocation_ATLAS]
Definition HepEvt.cxx:11
StatusCode convertBs(const std::string &sgKey, const IROBDataProviderSvc::VROBFRAG &robFrags, CpByteStreamToolData &data) const
Convert bytestream to given container type.

◆ convert() [3/4]

StatusCode LVL1BS::CpByteStreamV1Tool::convert ( const std::string & sgKey,
const IROBDataProviderSvc::VROBFRAG & robFrags,
DataVector< LVL1::CPMHits > * hitCollection ) const

Convert ROB fragments to CPM hits.

Definition at line 123 of file CpByteStreamV1Tool.cxx.

127{
128 CpmHitsData data (hitCollection);
129 return convertBs(sgKey, robFrags, data);
130}

◆ convert() [4/4]

StatusCode LVL1BS::CpByteStreamV1Tool::convert ( const std::string & sgKey,
const IROBDataProviderSvc::VROBFRAG & robFrags,
DataVector< LVL1::CPMTower > * ttCollection ) const

Convert ROB fragments to CPM towers.

Definition at line 112 of file CpByteStreamV1Tool.cxx.

116{
117 CpmTowerData data (ttCollection);
118 return convertBs(sgKey, robFrags, data);
119}

◆ convertBs()

StatusCode LVL1BS::CpByteStreamV1Tool::convertBs ( const std::string & sgKey,
const IROBDataProviderSvc::VROBFRAG & robFrags,
CpByteStreamToolData & data ) const
private

Convert bytestream to given container type.

Definition at line 459 of file CpByteStreamV1Tool.cxx.

463{
465
466 const static std::string flag("Overlap");
467 const std::string::size_type pos = sgKey.find(flag);
468 ld.coreOverlap =
469 (pos == std::string::npos || pos != sgKey.length() - flag.length()) ? 0 : 1;
470
471 const bool debug = msgLvl(MSG::DEBUG);
472 if (debug) msg(MSG::DEBUG);
473
474 CmmCpSubBlock cmmCpSubBlock;
475 CpmSubBlockV1 cpmSubBlock;
476
477 // Loop over ROB fragments
478
479 int robCount = 0;
480 std::set<uint32_t> dupCheck;
481 ROBIterator rob = robFrags.begin();
482 ROBIterator robEnd = robFrags.end();
483 for (; rob != robEnd; ++rob) {
484
485 if (debug) {
486 ++robCount;
487 msg() << "Treating ROB fragment " << robCount << endmsg;
488 }
489
490 // Skip fragments with ROB status errors
491
492 uint32_t robid = (*rob)->source_id();
493 if ((*rob)->nstatus() > 0) {
494 ROBPointer robData;
495 (*rob)->status(robData);
496 if (*robData != 0) {
497 m_errorTool->robError(robid, *robData);
498 if (debug) msg() << "ROB status error - skipping fragment" << endmsg;
499 continue;
500 }
501 }
502
503 // Skip duplicate fragments
504
505 if (!dupCheck.insert(robid).second) {
507 if (debug) msg() << "Skipping duplicate ROB fragment" << endmsg;
508 continue;
509 }
510
511 // Unpack ROD data (slinks)
512
513 RODPointer payloadBeg;
515 RODPointer payloadEnd;
516 (*rob)->rod_data(payloadBeg);
517 payloadEnd = payloadBeg + (*rob)->rod_ndata();
518 payload = payloadBeg;
519 if (payload == payloadEnd) {
520 if (debug) msg() << "ROB fragment empty" << endmsg;
521 continue;
522 }
523
524 // Check identifier
525 const uint32_t sourceID = (*rob)->rod_source_id();
526 if (m_srcIdMap.getRobID(sourceID) != robid ||
527 m_srcIdMap.subDet(sourceID) != m_subDetector ||
528 m_srcIdMap.daqOrRoi(sourceID) != 0 ||
529 (m_srcIdMap.slink(sourceID) != 0 && m_srcIdMap.slink(sourceID) != 2) ||
530 m_srcIdMap.crate(sourceID) < m_crateOffsetHw ||
531 m_srcIdMap.crate(sourceID) >= m_crateOffsetHw + m_crates) {
533 if (debug) {
534 msg() << "Wrong source identifier in data: ROD "
535 << MSG::hex << sourceID << " ROB " << robid
536 << MSG::dec << endmsg;
537 }
538 continue;
539 }
540
541 // Check minor version
542 const int minorVersion = (*rob)->rod_version() & 0xffff;
543 if (minorVersion > m_srcIdMap.minorVersionPreLS1()) {
544 if (debug) msg() << "Skipping post-LS1 data" << endmsg;
545 continue;
546 }
547 const int rodCrate = m_srcIdMap.crate(sourceID);
548 if (debug) {
549 msg() << "Treating crate " << rodCrate
550 << " slink " << m_srcIdMap.slink(sourceID) << endmsg;
551 }
552
553 // First word should be User Header
554 if ( !L1CaloUserHeader::isValid(*payload) ) {
556 if (debug) msg() << "Invalid or missing user header" << endmsg;
557 continue;
558 }
559 L1CaloUserHeader userHeader(*payload);
560 userHeader.setVersion(minorVersion);
561 const int headerWords = userHeader.words();
562 if (headerWords != 1) {
564 if (debug) msg() << "Unexpected number of user header words: "
565 << headerWords << endmsg;
566 continue;
567 }
568 for (int i = 0; i < headerWords; ++i) ++payload;
569 // triggered slice offsets
570 int trigCpm = userHeader.cpm();
571 int trigCmm = userHeader.cpCmm();
572 if (debug) {
573 msg() << "Minor format version number: " << MSG::hex
574 << minorVersion << MSG::dec << endmsg
575 << "CPM triggered slice offset: " << trigCpm << endmsg
576 << "CMM triggered slice offset: " << trigCmm << endmsg;
577 }
578 if (trigCpm != trigCmm) {
579 const int newTrig = (trigCpm > trigCmm) ? trigCpm : trigCmm;
580 trigCpm = newTrig;
581 trigCmm = newTrig;
582 if (debug) msg() << "Changed both offsets to " << newTrig << endmsg;
583 }
584
585 // Loop over sub-blocks
586
588 while (payload != payloadEnd) {
589
591 if (debug) msg() << "Unexpected data sequence" << endmsg;
593 break;
594 }
595 if (L1CaloSubBlock::version(*payload) != 1) { // <<== CHECK
596 if (debug) msg() << "Skipping post-LS1 data" << endmsg;
597 break;
598 }
599 if (CmmSubBlock::cmmBlock(*payload)) {
600 // CMM
601 if (CmmSubBlock::cmmType(*payload) == CmmSubBlock::CMM_CP) {
602 cmmCpSubBlock.clear();
603 payload = cmmCpSubBlock.read(payload, payloadEnd);
604 if (cmmCpSubBlock.crate() != rodCrate) {
605 if (debug) msg() << "Inconsistent crate number in ROD source ID"
606 << endmsg;
608 break;
609 }
610 if (data.m_collection == CMM_CP_HITS) {
611 decodeCmmCp(&cmmCpSubBlock, trigCmm, static_cast<CmmHitsData&>(data),
612 ld);
613 if (ld.rodErr != L1CaloSubBlock::ERROR_NONE) {
614 if (debug) msg() << "decodeCmmCp failed" << endmsg;
615 break;
616 }
617 }
618 } else {
619 if (debug) msg() << "Invalid CMM type in module field" << endmsg;
621 break;
622 }
623 } else {
624 // CPM
625 cpmSubBlock.clear();
626 payload = cpmSubBlock.read(payload, payloadEnd);
627 if (cpmSubBlock.crate() != rodCrate) {
628 if (debug) msg() << "Inconsistent crate number in ROD source ID"
629 << endmsg;
631 break;
632 }
633 if (data.m_collection == CPM_TOWERS || data.m_collection == CPM_HITS) {
634 decodeCpm(&cpmSubBlock, trigCpm, data, ld);
635 if (ld.rodErr != L1CaloSubBlock::ERROR_NONE) {
636 if (debug) msg() << "decodeCpm failed" << endmsg;
637 break;
638 }
639 }
640 }
641 }
642 if (ld.rodErr != L1CaloSubBlock::ERROR_NONE)
643 m_errorTool->rodError(robid, ld.rodErr);
644 }
645
646 return StatusCode::SUCCESS;
647}
static bool cmmBlock(uint32_t word)
Determine if header word corresponds to CMM.
static CmmFirmwareCode cmmType(uint32_t word)
CMM differentiation (CMM_CP, CMM_JET, or CMM_ENERGY)
IROBDataProviderSvc::VROBFRAG::const_iterator ROBIterator
OFFLINE_FRAGMENTS_NAMESPACE::PointerType RODPointer
void decodeCmmCp(CmmCpSubBlock *subBlock, int trigCmm, CmmHitsData &data, LocalData &ld) const
Unpack CMM-CP sub-block.
void decodeCpm(CpmSubBlockV1 *subBlock, int trigCpm, CpByteStreamToolData &data, LocalData &ld) const
Unpack CPM sub-block.
OFFLINE_FRAGMENTS_NAMESPACE::PointerType ROBPointer
static SubBlockWordType wordType(uint32_t word)
Word identification.
static bool isValid(uint32_t word)
Test for valid header word.
bool flag
Definition master.py:29

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T, V, H > & hndl,
const SG::VarHandleKeyType &  )
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158 {
160 hndl.value(),
161 hndl.documentation());
162
163 }

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( Gaudi::Property< T, V, H > & t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145 {
146 typedef typename SG::HandleClassifier<T>::type htype;
148 }
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>

◆ decodeCmmCp()

void LVL1BS::CpByteStreamV1Tool::decodeCmmCp ( CmmCpSubBlock * subBlock,
int trigCmm,
CmmHitsData & data,
LocalData & ld ) const
private

Unpack CMM-CP sub-block.

Definition at line 651 of file CpByteStreamV1Tool.cxx.

654{
655 const bool debug = msgLvl(MSG::DEBUG);
656 if (debug) msg(MSG::DEBUG);
657
658 const int hwCrate = subBlock->crate();
659 const int module = subBlock->cmmPosition();
660 const int firmware = subBlock->cmmFirmware();
661 const int summing = subBlock->cmmSumming();
662 const int timeslices = subBlock->timeslices();
663 const int sliceNum = subBlock->slice();
664 if (debug) {
665 msg() << "CMM-CP: Crate " << hwCrate
666 << " Module " << module
667 << " Firmware " << firmware
668 << " Summing " << summing
669 << " Total slices " << timeslices
670 << " Slice " << sliceNum << endmsg;
671 }
672 if (timeslices <= trigCmm) {
673 if (debug) msg() << "Triggered CMM slice from header "
674 << "inconsistent with number of slices: "
675 << trigCmm << ", " << timeslices << endmsg;
677 return;
678 }
679 if (timeslices <= sliceNum) {
680 if (debug) msg() << "Total slices inconsistent with slice number: "
681 << timeslices << ", " << sliceNum << endmsg;
683 return;
684 }
685 // Unpack sub-block
686 if (subBlock->dataWords() && !subBlock->unpack()) {
687 if (debug) {
688 std::string errMsg(subBlock->unpackErrorMsg());
689 msg() << "CMM-CP sub-block unpacking failed: " << errMsg << endmsg;
690 }
691 ld.rodErr = subBlock->unpackErrorCode();
692 return;
693 }
694
695 // Retrieve required data
696
697 const bool neutralFormat = subBlock->format() == L1CaloSubBlock::NEUTRAL;
698 const uint32_t subStatus = subBlock->subStatus();
699 const int crate = hwCrate - m_crateOffsetHw;
700 const int swCrate = crate + m_crateOffsetSw;
701 const int maxSid = CmmCpSubBlock::MAX_SOURCE_ID;
702 const int sliceBeg = ( neutralFormat ) ? 0 : sliceNum;
703 const int sliceEnd = ( neutralFormat ) ? timeslices : sliceNum + 1;
704 for (int slice = sliceBeg; slice < sliceEnd; ++slice) {
705
706 // Jet hit counts
707
708 for (int source = 1; source < maxSid; ++source) {
709 int dataID = source;
710 if (source > m_modules) {
711 if (summing == CmmSubBlock::CRATE &&
712 source != CmmCpSubBlock::LOCAL) continue;
713 switch (source) {
715 dataID = LVL1::CMMCPHits::LOCAL;
716 break;
719 break;
722 break;
725 break;
727 dataID = LVL1::CMMCPHits::TOTAL;
728 break;
729 default:
730 continue;
731 }
732 }
733 const unsigned int hits = subBlock->hits(slice, source);
734 int err = subBlock->hitsError(slice, source);
735 LVL1::DataError errorBits;
736 errorBits.set(LVL1::DataError::Parity, err & 0x1);
737 errorBits.set(LVL1::DataError::SubStatusWord, subStatus);
738 err = errorBits.error();
739 if (hits || err) {
740 LVL1::CMMCPHits* ch = findCmmCpHits(data, crate, dataID);
741 if ( ! ch ) { // create new CMM hits
742 ld.hitsVec0.assign(timeslices, 0);
743 ld.hitsVec1.assign(timeslices, 0);
744 ld.errVec0.assign(timeslices, 0);
745 ld.errVec1.assign(timeslices, 0);
746 if (module == CmmSubBlock::RIGHT) {
747 ld.hitsVec0[slice] = hits;
748 ld.errVec0[slice] = err;
749 } else {
750 ld.hitsVec1[slice] = hits;
751 ld.errVec1[slice] = err;
752 }
753 auto chp =
754 std::make_unique<LVL1::CMMCPHits>(swCrate, dataID, ld.hitsVec0, ld.hitsVec1,
755 ld.errVec0, ld.errVec1, trigCmm);
756 const int key = crate*100 + dataID;
757 data.m_cmmHitsMap.insert(std::make_pair(key, chp.get()));
758 data.m_cmmHitCollection->push_back(std::move(chp));
759 } else {
760 ld.hitsVec0 = ch->HitsVec0();
761 ld.hitsVec1 = ch->HitsVec1();
762 ld.errVec0 = ch->ErrorVec0();
763 ld.errVec1 = ch->ErrorVec1();
764 const int nsl = ld.hitsVec0.size();
765 if (timeslices != nsl) {
766 if (debug) msg() << "Inconsistent number of slices in sub-blocks"
767 << endmsg;
769 return;
770 }
771 if ((module == CmmSubBlock::RIGHT && (ld.hitsVec0[slice] != 0 ||
772 ld.errVec0[slice] != 0)) || (module == CmmSubBlock::LEFT &&
773 (ld.hitsVec1[slice] != 0 || ld.errVec1[slice] != 0))) {
774 if (debug) msg() << "Duplicate data for slice " << slice << endmsg;
776 return;
777 }
778 if (module == CmmSubBlock::RIGHT) {
779 ld.hitsVec0[slice] = hits;
780 ld.errVec0[slice] = err;
781 } else {
782 ld.hitsVec1[slice] = hits;
783 ld.errVec1[slice] = err;
784 }
785 ch->addHits(ld.hitsVec0, ld.hitsVec1, ld.errVec0, ld.errVec1);
786 }
787 }
788 }
789 }
790
791 return;
792}
int error() const
Return the full error word.
Definition DataError.h:78
void set(ErrorBit bit, int value=1)
Set an error bit or data.
Definition DataError.cxx:28

◆ decodeCpm()

void LVL1BS::CpByteStreamV1Tool::decodeCpm ( CpmSubBlockV1 * subBlock,
int trigCpm,
CpByteStreamToolData & data,
LocalData & ld ) const
private

Unpack CPM sub-block.

Definition at line 796 of file CpByteStreamV1Tool.cxx.

799{
800 const bool debug = msgLvl(MSG::DEBUG);
801 const bool verbose = msgLvl(MSG::VERBOSE);
802 if (debug) msg(MSG::DEBUG);
803
804 const int hwCrate = subBlock->crate();
805 const int module = subBlock->module();
806 const int timeslices = subBlock->timeslices();
807 const int sliceNum = subBlock->slice();
808 if (debug) {
809 msg() << "CPM: Crate " << hwCrate
810 << " Module " << module
811 << " Total slices " << timeslices
812 << " Slice " << sliceNum << endmsg;
813 }
814 if (module < 1 || module > m_modules) {
815 if (debug) msg() << "Unexpected module number: " << module << endmsg;
817 return;
818 }
819 if (timeslices <= trigCpm) {
820 if (debug) msg() << "Triggered CPM slice from header "
821 << "inconsistent with number of slices: "
822 << trigCpm << ", " << timeslices << endmsg;
824 return;
825 }
826 if (timeslices <= sliceNum) {
827 if (debug) msg() << "Total slices inconsistent with slice number: "
828 << timeslices << ", " << sliceNum << endmsg;
830 return;
831 }
832 // Unpack sub-block
833 if (subBlock->dataWords() && !subBlock->unpack()) {
834 if (debug) {
835 std::string errMsg(subBlock->unpackErrorMsg());
836 msg() << "CPM sub-block unpacking failed: " << errMsg << endmsg;
837 }
838 ld.rodErr = subBlock->unpackErrorCode();
839 return;
840 }
841
842 // Retrieve required data
843
844 const bool neutralFormat = subBlock->format() == L1CaloSubBlock::NEUTRAL;
845 LVL1::DataError dErr;
846 dErr.set(LVL1::DataError::SubStatusWord, subBlock->subStatus());
847 const int ssError = dErr.error();
848 const int crate = hwCrate - m_crateOffsetHw;
849 const int swCrate = crate + m_crateOffsetSw;
850 const int sliceBeg = ( neutralFormat ) ? 0 : sliceNum;
851 const int sliceEnd = ( neutralFormat ) ? timeslices : sliceNum + 1;
852 for (int slice = sliceBeg; slice < sliceEnd; ++slice) {
853
854 if (data.m_collection == CPM_TOWERS) {
855 CpmTowerData& tdata = static_cast<CpmTowerData&> (data);
856
857 // Loop over tower channels and fill CPM towers
858
859 for (int chan = 0; chan < m_channels; ++chan) {
860 if (!ssError && !subBlock->anyTowerData(chan)) continue;
861 const int em = subBlock->emData(slice, chan);
862 const int had = subBlock->hadData(slice, chan);
863 const int emErr = subBlock->emError(slice, chan);
864 const int hadErr = subBlock->hadError(slice, chan);
865 int emErr1 = ssError;
866 if (emErr) {
867 LVL1::DataError emErrBits(emErr1);
868 emErrBits.set(LVL1::DataError::Parity, emErr & 0x1);
869 emErrBits.set(LVL1::DataError::LinkDown, (emErr >> 1) & 0x1);
870 emErr1 = emErrBits.error();
871 }
872 int hadErr1 = ssError;
873 if (hadErr) {
874 LVL1::DataError hadErrBits(hadErr1);
875 hadErrBits.set(LVL1::DataError::Parity, hadErr & 0x1);
876 hadErrBits.set(LVL1::DataError::LinkDown, (hadErr >> 1) & 0x1);
877 hadErr1 = hadErrBits.error();
878 }
879 if (em || had || emErr1 || hadErr1) {
880 double eta = 0.;
881 double phi = 0.;
882 int layer = 0;
883 if (m_cpmMaps->mapping(crate, module, chan, eta, phi, layer)) {
884 if (layer == ld.coreOverlap) {
885 const unsigned int key = ld.towerKey.ttKey(phi, eta);
886 LVL1::CPMTower* tt = findCpmTower(tdata, key);
887 if ( ! tt ) { // create new CPM tower
888 ld.emVec.assign(timeslices, 0);
889 ld.hadVec.assign(timeslices, 0);
890 ld.emErrVec.assign(timeslices, 0);
891 ld.hadErrVec.assign(timeslices, 0);
892 ld.emVec[slice] = em;
893 ld.hadVec[slice] = had;
894 ld.emErrVec[slice] = emErr1;
895 ld.hadErrVec[slice] = hadErr1;
896 auto ttp =
897 std::make_unique<LVL1::CPMTower>(phi, eta, ld.emVec, ld.emErrVec,
898 ld.hadVec, ld.hadErrVec, trigCpm);
899 tdata.m_ttMap.insert(std::make_pair(key, ttp.get()));
900 tdata.m_ttCollection->push_back(std::move(ttp));
901 } else {
902 ld.emVec = tt->emEnergyVec();
903 ld.hadVec = tt->hadEnergyVec();
904 ld.emErrVec = tt->emErrorVec();
905 ld.hadErrVec = tt->hadErrorVec();
906 const int nsl = ld.emVec.size();
907 if (timeslices != nsl) {
908 if (debug) {
909 msg() << "Inconsistent number of slices in sub-blocks"
910 << endmsg;
911 }
913 return;
914 }
915 if (ld.emVec[slice] != 0 || ld.hadVec[slice] != 0 ||
916 ld.emErrVec[slice] != 0 || ld.hadErrVec[slice] != 0) {
917 if (debug) msg() << "Duplicate data for slice "
918 << slice << endmsg;
920 return;
921 }
922 ld.emVec[slice] = em;
923 ld.hadVec[slice] = had;
924 ld.emErrVec[slice] = emErr1;
925 ld.hadErrVec[slice] = hadErr1;
926 tt->fill(ld.emVec, ld.emErrVec, ld.hadVec, ld.hadErrVec, trigCpm);
927 }
928 }
929 } else if (verbose && (em || had || emErr || hadErr)) {
930 msg(MSG::VERBOSE) << "Non-zero data but no channel mapping for channel "
931 << chan << endmsg;
932 msg(MSG::DEBUG);
933 }
934 } else if (verbose) {
935 msg(MSG::VERBOSE) << "No CPM tower data for channel "
936 << chan << " slice " << slice << endmsg;
937 msg(MSG::DEBUG);
938 }
939 }
940 } else if (data.m_collection == CPM_HITS) {
941 CpmHitsData& hdata = static_cast<CpmHitsData&> (data);
942
943 // Get CPM hits
944
945 const unsigned int hits0 = subBlock->hits0(slice);
946 const unsigned int hits1 = subBlock->hits1(slice);
947 if (hits0 || hits1) {
948 LVL1::CPMHits* ch = findCpmHits(hdata, crate, module);
949 if ( ! ch ) { // create new CPM hits
950 ld.hitsVec0.assign(timeslices, 0);
951 ld.hitsVec1.assign(timeslices, 0);
952 ld.hitsVec0[slice] = hits0;
953 ld.hitsVec1[slice] = hits1;
954 auto chp =
955 std::make_unique<LVL1::CPMHits>(swCrate, module, ld.hitsVec0, ld.hitsVec1, trigCpm);
956 hdata.m_hitsMap.insert(std::make_pair(crate*m_modules+module-1, chp.get()));
957 hdata.m_hitCollection->push_back(std::move(chp));
958 } else {
959 ld.hitsVec0 = ch->HitsVec0();
960 ld.hitsVec1 = ch->HitsVec1();
961 const int nsl = ld.hitsVec0.size();
962 if (timeslices != nsl) {
963 if (debug) msg() << "Inconsistent number of slices in sub-blocks"
964 << endmsg;
966 return;
967 }
968 if (ld.hitsVec0[slice] != 0 || ld.hitsVec1[slice] != 0) {
969 if (debug) msg() << "Duplicate data for slice " << slice << endmsg;
971 return;
972 }
973 ld.hitsVec0[slice] = hits0;
974 ld.hitsVec1[slice] = hits1;
975 ch->addHits(ld.hitsVec0, ld.hitsVec1);
976 }
977 } else if (verbose) {
978 msg(MSG::VERBOSE) << "No CPM hits data for crate/module/slice "
979 << hwCrate << "/" << module << "/" << slice
980 << endmsg;
981 msg(MSG::DEBUG);
982 }
983 }
984 }
985 return;
986}
bool verbose
Definition hcg.cxx:73

◆ detStore()

const ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

◆ evtStore()

ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase & ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ findCmmCpHits() [1/2]

LVL1::CMMCPHits * LVL1BS::CpByteStreamV1Tool::findCmmCpHits ( const CmmHitsData & data,
int crate,
int dataID ) const
private

Definition at line 1041 of file CpByteStreamV1Tool.cxx.

1044{
1045 CmmCpHitsMap::const_iterator mapIter = data.m_cmmHitsMap.find(crate*100 + dataID);
1046 if (mapIter != data.m_cmmHitsMap.end()) return mapIter->second;
1047 return nullptr;
1048}

◆ findCmmCpHits() [2/2]

const LVL1::CMMCPHits * LVL1BS::CpByteStreamV1Tool::findCmmCpHits ( int crate,
int dataID,
const ConstCmmCpHitsMap & cmmHitsMap ) const
private

Find CMM-CP hits for given crate, data ID.

Definition at line 1032 of file CpByteStreamV1Tool.cxx.

1035{
1036 ConstCmmCpHitsMap::const_iterator mapIter = cmmHitsMap.find(crate*100 + dataID);
1037 if (mapIter != cmmHitsMap.end()) return mapIter->second;
1038 return nullptr;
1039}

◆ findCpmHits() [1/2]

LVL1::CPMHits * LVL1BS::CpByteStreamV1Tool::findCpmHits ( const CpmHitsData & data,
int crate,
int module ) const
private

Definition at line 1020 of file CpByteStreamV1Tool.cxx.

1022{
1023 CpmHitsMap::const_iterator mapIter =
1024 data.m_hitsMap.find(crate*m_modules + module - 1);
1025 if (mapIter != data.m_hitsMap.end()) return mapIter->second;
1026 return nullptr;
1027}

◆ findCpmHits() [2/2]

const LVL1::CPMHits * LVL1BS::CpByteStreamV1Tool::findCpmHits ( int crate,
int module,
const ConstCpmHitsMap & hitsMap ) const
private

Find CPM hits for given crate, module.

Definition at line 1010 of file CpByteStreamV1Tool.cxx.

1013{
1014 ConstCpmHitsMap::const_iterator mapIter =
1015 hitsMap.find(crate*m_modules + module - 1);
1016 if (mapIter != hitsMap.end()) return mapIter->second;
1017 return nullptr;
1018}

◆ findCpmTower() [1/2]

LVL1::CPMTower * LVL1BS::CpByteStreamV1Tool::findCpmTower ( const CpmTowerData & data,
unsigned int key ) const
private

Definition at line 999 of file CpByteStreamV1Tool.cxx.

1001{
1002 CpmTowerMap::const_iterator mapIter = data.m_ttMap.find(key);
1003 if (mapIter != data.m_ttMap.end()) return mapIter->second;
1004 return nullptr;
1005}

◆ findCpmTower() [2/2]

const LVL1::CPMTower * LVL1BS::CpByteStreamV1Tool::findCpmTower ( unsigned int key,
const ConstCpmTowerMap & ttMap ) const
private

Find a CPM tower for given key.

Definition at line 991 of file CpByteStreamV1Tool.cxx.

993{
994 ConstCpmTowerMap::const_iterator mapIter = ttMap.find(key);
995 if (mapIter != ttMap.end()) return mapIter->second;
996 return nullptr;
997}

◆ initialize()

StatusCode LVL1BS::CpByteStreamV1Tool::initialize ( )
overridevirtual

Definition at line 99 of file CpByteStreamV1Tool.cxx.

100{
101 ATH_MSG_INFO( "Initializing " << name() );
102
103 ATH_CHECK( m_cpmMaps.retrieve() );
104 ATH_CHECK( m_errorTool.retrieve() );
105 ATH_CHECK( m_byteStreamCnvSvc.retrieve() );
106
107 return StatusCode::SUCCESS;
108}
#define ATH_MSG_INFO(x)

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< AlgTool > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ interfaceID()

const InterfaceID & LVL1BS::CpByteStreamV1Tool::interfaceID ( )
static

AlgTool InterfaceID.

Definition at line 40 of file CpByteStreamV1Tool.cxx.

41{
43}
static const InterfaceID IID_ICpByteStreamV1Tool("CpByteStreamV1Tool", 1, 1)

◆ makeSourceIDs()

std::vector< uint32_t > LVL1BS::CpByteStreamV1Tool::makeSourceIDs ( ) const
private

Create list of all source IDs.

Definition at line 426 of file CpByteStreamV1Tool.cxx.

427{
428 std::vector<uint32_t> sourceIDs;
429
430 if (!m_sourceIDsProp.empty()) {
432 }
433 else {
434 const int maxCrates = m_crates + m_crateOffsetHw;
435 const int maxSlinks = m_srcIdMap.maxSlinks();
436 for (int hwCrate = m_crateOffsetHw; hwCrate < maxCrates; ++hwCrate)
437 {
438 for (int slink = 0; slink < maxSlinks; ++slink)
439 {
440 const int daqOrRoi = 0;
441 const uint32_t rodId = m_srcIdMap.getRodID(hwCrate, slink, daqOrRoi,
443 const uint32_t robId = m_srcIdMap.getRobID(rodId);
444 sourceIDs.push_back(robId);
445 }
446 }
447 }
448 return sourceIDs;
449}
const std::vector< uint32_t > & sourceIDs() const
Return reference to vector with all possible Source Identifiers.

◆ msg()

MsgStream & AthCommonMsg< AlgTool >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24 {
25 return this->msgStream();
26 }

◆ msgLvl()

bool AthCommonMsg< AlgTool >::msgLvl ( const MSG::Level lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30 {
31 return this->msgLevel(lvl);
32 }

◆ outputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< AlgTool > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ renounce()

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 > AthCommonDataStore< AthCommonMsg< AlgTool > >::renounce ( T & h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381 {
382 h.renounce();
384 }
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)

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ setupCmmCpHitsMap()

void LVL1BS::CpByteStreamV1Tool::setupCmmCpHitsMap ( const CmmCpHitsCollection * hitCollection,
ConstCmmCpHitsMap & cmmHitsMap ) const
private

Set up CMM-CP hits map.

Definition at line 1089 of file CpByteStreamV1Tool.cxx.

1092{
1093 cmmHitsMap.clear();
1094 if (hitCollection) {
1095 CmmCpHitsCollection::const_iterator pos = hitCollection->begin();
1096 CmmCpHitsCollection::const_iterator pose = hitCollection->end();
1097 for (; pos != pose; ++pos) {
1098 const LVL1::CMMCPHits* const hits = *pos;
1099 const int crate = hits->crate() - m_crateOffsetSw;
1100 const int key = crate*100 + hits->dataID();
1101 cmmHitsMap.insert(std::make_pair(key, hits));
1102 }
1103 }
1104}
DataModel_detail::const_iterator< DataVector > const_iterator
Definition DataVector.h:838

◆ setupCpmHitsMap()

void LVL1BS::CpByteStreamV1Tool::setupCpmHitsMap ( const CpmHitsCollection * hitCollection,
ConstCpmHitsMap & hitsMap ) const
private

Set up CPM hits map.

Definition at line 1070 of file CpByteStreamV1Tool.cxx.

1073{
1074 hitsMap.clear();
1075 if (hitCollection) {
1076 CpmHitsCollection::const_iterator pos = hitCollection->begin();
1077 CpmHitsCollection::const_iterator pose = hitCollection->end();
1078 for (; pos != pose; ++pos) {
1079 const LVL1::CPMHits* const hits = *pos;
1080 const int crate = hits->crate() - m_crateOffsetSw;
1081 const int key = m_modules * crate + hits->module() - 1;
1082 hitsMap.insert(std::make_pair(key, hits));
1083 }
1084 }
1085}

◆ setupCpmTowerMap()

void LVL1BS::CpByteStreamV1Tool::setupCpmTowerMap ( const CpmTowerCollection * ttCollection,
ConstCpmTowerMap & ttMap,
LVL1::TriggerTowerKey & towerKey ) const
private

Set up CPM tower map.

Definition at line 1052 of file CpByteStreamV1Tool.cxx.

1055{
1056 ttMap.clear();
1057 if (ttCollection) {
1058 CpmTowerCollection::const_iterator pos = ttCollection->begin();
1059 CpmTowerCollection::const_iterator pose = ttCollection->end();
1060 for (; pos != pose; ++pos) {
1061 const LVL1::CPMTower* const tt = *pos;
1062 const unsigned int key = towerKey.ttKey(tt->phi(), tt->eta());
1063 ttMap.insert(std::make_pair(key, tt));
1064 }
1065 }
1066}

◆ slinkSlices()

bool LVL1BS::CpByteStreamV1Tool::slinkSlices ( int crate,
int module,
int modulesPerSlink,
int & timeslices,
int & trigJem,
const ConstCpmTowerMap & ttMap,
const ConstCpmHitsMap & hitsMap,
const ConstCmmCpHitsMap & cmmHitsMap,
LVL1::TriggerTowerKey & towerKey ) const
private

Get number of slices and triggered slice offset for next slink.

Definition at line 1108 of file CpByteStreamV1Tool.cxx.

1116{
1117 int slices = -1;
1118 int trigC = m_dfltSlices/2;
1119 for (int mod = module; mod < module + modulesPerSlink; ++mod) {
1120 for (int chan = 0; chan < m_channels; ++chan) {
1121 double eta = 0.;
1122 double phi = 0.;
1123 int layer = 0;
1124 if ( !m_cpmMaps->mapping(crate, mod, chan, eta, phi, layer)) continue;
1125 const unsigned int key = towerKey.ttKey(phi, eta);
1126 const LVL1::CPMTower* const tt = findCpmTower(key, ttMap);
1127 if ( !tt ) continue;
1128 const int numdat = 4;
1129 std::vector<int> sums(numdat);
1130 std::vector<int> sizes(numdat);
1131 sums[0] = std::accumulate((tt->emEnergyVec()).begin(),
1132 (tt->emEnergyVec()).end(), 0);
1133 sums[1] = std::accumulate((tt->hadEnergyVec()).begin(),
1134 (tt->hadEnergyVec()).end(), 0);
1135 sums[2] = std::accumulate((tt->emErrorVec()).begin(),
1136 (tt->emErrorVec()).end(), 0);
1137 sums[3] = std::accumulate((tt->hadErrorVec()).begin(),
1138 (tt->hadErrorVec()).end(), 0);
1139 sizes[0] = (tt->emEnergyVec()).size();
1140 sizes[1] = (tt->hadEnergyVec()).size();
1141 sizes[2] = (tt->emErrorVec()).size();
1142 sizes[3] = (tt->hadErrorVec()).size();
1143 const int peak = tt->peak();
1144 for (int i = 0; i < numdat; ++i) {
1145 if (sums[i] == 0) continue;
1146 if (slices < 0) {
1147 slices = sizes[i];
1148 trigC = peak;
1149 } else if (slices != sizes[i] || trigC != peak) return false;
1150 }
1151 }
1152 const LVL1::CPMHits* const hits = findCpmHits(crate, mod, hitsMap);
1153 if (hits) {
1154 const int numdat = 2;
1155 std::vector<unsigned int> sums(numdat);
1156 std::vector<int> sizes(numdat);
1157 sums[0] = std::accumulate((hits->HitsVec0()).begin(),
1158 (hits->HitsVec0()).end(), 0);
1159 sums[1] = std::accumulate((hits->HitsVec1()).begin(),
1160 (hits->HitsVec1()).end(), 0);
1161 sizes[0] = (hits->HitsVec0()).size();
1162 sizes[1] = (hits->HitsVec1()).size();
1163 const int peak = hits->peak();
1164 for (int i = 0; i < numdat; ++i) {
1165 if (sums[i] == 0) continue;
1166 if (slices < 0) {
1167 slices = sizes[i];
1168 trigC = peak;
1169 } else if (slices != sizes[i] || trigC != peak) return false;
1170 }
1171 }
1172 }
1173 // CMM last slink of crate
1174 if (module/modulesPerSlink == m_slinks - 1) {
1175 const int maxDataID = LVL1::CMMCPHits::MAXID;
1176 for (int dataID = 0; dataID < maxDataID; ++dataID) {
1177 const int numdat = 4;
1178 std::vector<unsigned int> sums(numdat);
1179 std::vector<int> sizes(numdat);
1180 const LVL1::CMMCPHits* const hits = findCmmCpHits(crate, dataID, cmmHitsMap);
1181 if (hits) {
1182 sums[0] = std::accumulate((hits->HitsVec0()).begin(),
1183 (hits->HitsVec0()).end(), 0);
1184 sums[1] = std::accumulate((hits->HitsVec1()).begin(),
1185 (hits->HitsVec1()).end(), 0);
1186 sums[2] = std::accumulate((hits->ErrorVec0()).begin(),
1187 (hits->ErrorVec0()).end(), 0);
1188 sums[3] = std::accumulate((hits->ErrorVec1()).begin(),
1189 (hits->ErrorVec1()).end(), 0);
1190 sizes[0] = (hits->HitsVec0()).size();
1191 sizes[1] = (hits->HitsVec1()).size();
1192 sizes[2] = (hits->ErrorVec0()).size();
1193 sizes[3] = (hits->ErrorVec1()).size();
1194 const int peak = hits->peak();
1195 for (int i = 0; i < numdat; ++i) {
1196 if (sums[i] == 0) continue;
1197 if (slices < 0) {
1198 slices = sizes[i];
1199 trigC = peak;
1200 } else if (slices != sizes[i] || trigC != peak) return false;
1201 }
1202 }
1203 }
1204 }
1205 if (slices < 0) slices = m_dfltSlices;
1206 timeslices = slices;
1207 trigCpm = trigC;
1208 return true;
1209}

◆ sourceIDs()

const std::vector< uint32_t > & LVL1BS::CpByteStreamV1Tool::sourceIDs ( ) const

Return reference to vector with all possible Source Identifiers.

Definition at line 451 of file CpByteStreamV1Tool.cxx.

452{
453 static const std::vector<uint32_t> sourceIDs = makeSourceIDs();
454 return sourceIDs;
455}
std::vector< uint32_t > makeSourceIDs() const
Create list of all source IDs.

◆ sysInitialize()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysInitialize ( )
overridevirtualinherited

Perform system initialization for an algorithm.

We override this to declare all the elements of handle key arrays at the end of initialization. See comments on updateVHKA.

Reimplemented in asg::AsgMetadataTool, AthCheckedComponent< AthAlgTool >, AthCheckedComponent<::AthAlgTool >, and DerivationFramework::CfAthAlgTool.

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::updateVHKA ( Gaudi::Details::PropertyBase & )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308 {
309 // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310 // << " size: " << m_vhka.size() << endmsg;
311 for (auto &a : m_vhka) {
313 for (auto k : keys) {
314 k->setOwner(this);
315 }
316 }
317 }
std::vector< SG::VarHandleKeyArray * > m_vhka

Member Data Documentation

◆ m_byteStreamCnvSvc

ServiceHandle<IByteStreamCnvSvc> LVL1BS::CpByteStreamV1Tool::m_byteStreamCnvSvc { this, "ByteStreamCnvSvc", "ByteStreamCnvSvc" }
private

Definition at line 86 of file CpByteStreamV1Tool.h.

87{ this, "ByteStreamCnvSvc", "ByteStreamCnvSvc" };

◆ m_channels

const int LVL1BS::CpByteStreamV1Tool::m_channels
private

Number of channels per module.

Definition at line 219 of file CpByteStreamV1Tool.h.

◆ m_cpmMaps

ToolHandle<LVL1::IL1CaloMappingTool> LVL1BS::CpByteStreamV1Tool::m_cpmMaps
private

Channel mapping tool.

Definition at line 206 of file CpByteStreamV1Tool.h.

◆ m_crateMax

int LVL1BS::CpByteStreamV1Tool::m_crateMax
private

Property: Maximum crate number when writing out bytestream.

Definition at line 233 of file CpByteStreamV1Tool.h.

◆ m_crateMin

int LVL1BS::CpByteStreamV1Tool::m_crateMin
private

Property: Minimum crate number when writing out bytestream.

Definition at line 231 of file CpByteStreamV1Tool.h.

◆ m_crateOffsetHw

int LVL1BS::CpByteStreamV1Tool::m_crateOffsetHw
private

Property: Hardware crate number offset.

Definition at line 211 of file CpByteStreamV1Tool.h.

◆ m_crateOffsetSw

int LVL1BS::CpByteStreamV1Tool::m_crateOffsetSw
private

Property: Software crate number offset.

Definition at line 213 of file CpByteStreamV1Tool.h.

◆ m_crates

int LVL1BS::CpByteStreamV1Tool::m_crates
private

Property: Number of crates.

Definition at line 221 of file CpByteStreamV1Tool.h.

◆ m_dataFormat

int LVL1BS::CpByteStreamV1Tool::m_dataFormat
private

Property: Data compression format.

Definition at line 217 of file CpByteStreamV1Tool.h.

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_dfltSlices

int LVL1BS::CpByteStreamV1Tool::m_dfltSlices
private

Property: Default number of slices in simulation.

Definition at line 227 of file CpByteStreamV1Tool.h.

◆ m_errorTool

ToolHandle<LVL1BS::L1CaloErrorByteStreamTool> LVL1BS::CpByteStreamV1Tool::m_errorTool
private

Error collection tool.

Definition at line 208 of file CpByteStreamV1Tool.h.

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_forceSlices

int LVL1BS::CpByteStreamV1Tool::m_forceSlices
private

Property: Force number of slices in bytestream.

Definition at line 229 of file CpByteStreamV1Tool.h.

◆ m_modules

const int LVL1BS::CpByteStreamV1Tool::m_modules
private

Number of CPM modules per crate.

Definition at line 223 of file CpByteStreamV1Tool.h.

◆ m_slinks

int LVL1BS::CpByteStreamV1Tool::m_slinks
private

Property: Number of slinks per crate when writing out bytestream.

Definition at line 225 of file CpByteStreamV1Tool.h.

◆ m_sourceIDsProp

std::vector<uint32_t> LVL1BS::CpByteStreamV1Tool::m_sourceIDsProp
private

Property: ROB source IDs.

Definition at line 235 of file CpByteStreamV1Tool.h.

◆ m_srcIdMap

const L1CaloSrcIdMap LVL1BS::CpByteStreamV1Tool::m_srcIdMap
private

Source ID converter.

Definition at line 239 of file CpByteStreamV1Tool.h.

◆ m_subDetector

const eformat::SubDetector LVL1BS::CpByteStreamV1Tool::m_subDetector
private

Sub-detector type.

Definition at line 237 of file CpByteStreamV1Tool.h.

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< AlgTool > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_version

int LVL1BS::CpByteStreamV1Tool::m_version
private

Property: Sub_block header version.

Definition at line 215 of file CpByteStreamV1Tool.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< AlgTool > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.


The documentation for this class was generated from the following files: