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

Tool to perform ROB fragments to CPM RoI and CPM RoI to raw data conversions. More...

#include <CpmRoiByteStreamV1Tool.h>

Inheritance diagram for LVL1BS::CpmRoiByteStreamV1Tool:
Collaboration diagram for LVL1BS::CpmRoiByteStreamV1Tool:

Public Member Functions

 CpmRoiByteStreamV1Tool (const std::string &type, const std::string &name, const IInterface *parent)
virtual ~CpmRoiByteStreamV1Tool ()
virtual StatusCode initialize () override
StatusCode convert (const IROBDataProviderSvc::VROBFRAG &robFrags, DataVector< LVL1::CPMRoI > *roiCollection) const
 Convert ROB fragments to CPM RoIs.
StatusCode convert (const DataVector< LVL1::CPMRoI > *roiCollection) const
 Convert CPM RoI to bytestream.
const std::vector< uint32_t > & sourceIDs (const std::string &sgKey) 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

typedef DataVector< LVL1::CPMRoICpmRoiCollection
typedef std::map< uint32_t, const LVL1::CPMRoI * > CpmRoiMap
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 (bool roiDaq) const
void setupCpmRoiMap (const CpmRoiCollection *roiCollection, CpmRoiMap &roiMap) const
 Set up CPM RoI map.
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< LVL1BS::L1CaloErrorByteStreamToolm_errorTool
 Property: 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_crates
 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_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.
std::vector< uint32_t > m_sourceIDsRoIBProp
 Property: ROB source IDs for RoIB.
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 RoI and CPM RoI to raw data conversions.

Based on ROD document version 1_09h.

Author
Peter Faulkner

Definition at line 47 of file CpmRoiByteStreamV1Tool.h.

Member Typedef Documentation

◆ CpmRoiCollection

◆ CpmRoiMap

typedef std::map<uint32_t, const LVL1::CPMRoI*> LVL1BS::CpmRoiByteStreamV1Tool::CpmRoiMap
private

Definition at line 74 of file CpmRoiByteStreamV1Tool.h.

◆ ROBIterator

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

Definition at line 75 of file CpmRoiByteStreamV1Tool.h.

◆ ROBPointer

◆ RODPointer

◆ StoreGateSvc_t

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

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ CpmRoiByteStreamV1Tool()

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

Definition at line 38 of file CpmRoiByteStreamV1Tool.cxx.

41 : AthAlgTool(type, name, parent),
42 m_errorTool("LVL1BS::L1CaloErrorByteStreamTool/L1CaloErrorByteStreamTool"),
43 m_crates(4), m_modules(14),
44 m_subDetector (eformat::TDAQ_CALO_CLUSTER_PROC_ROI)
45{
46 declareInterface<CpmRoiByteStreamV1Tool>(this);
47
48 declareProperty("ErrorTool", m_errorTool,
49 "Tool to collect errors for monitoring");
50 declareProperty("CrateOffsetHw", m_crateOffsetHw = 8,
51 "Offset of CP crate numbers in bytestream");
52 declareProperty("CrateOffsetSw", m_crateOffsetSw = 0,
53 "Offset of CP crate numbers in RDOs");
54
55 // Properties for reading bytestream only
56 declareProperty("ROBSourceIDs", m_sourceIDsProp,
57 "ROB fragment source identifiers");
58 declareProperty("ROBSourceIDsRoIB", m_sourceIDsRoIBProp,
59 "ROB fragment source identifiers for RoIBs");
60
61 // Properties for writing bytestream only
62 declareProperty("DataVersion", m_version = 1,
63 "Format version number in sub-block header");
64 declareProperty("DataFormat", m_dataFormat = 1,
65 "Format identifier (0-1) in sub-block header");
66 declareProperty("SlinksPerCrate", m_slinks = 1,
67 "The number of S-Links per crate");
68 declareProperty("CrateMin", m_crateMin = 0,
69 "Minimum crate number, allows partial output");
70 declareProperty("CrateMax", m_crateMax = m_crates-1,
71 "Maximum crate number, allows partial output");
72
73}
AthAlgTool()
Default constructor:
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
int m_version
Property: Sub_block header version.
const int m_crates
Number of crates.
int m_crateOffsetSw
Property: Software crate number offset.
int m_crateMin
Property: Minimum crate number when writing out bytestream.
ToolHandle< LVL1BS::L1CaloErrorByteStreamTool > m_errorTool
Property: Error collection tool.
const int m_modules
Number of CPM modules per crate.
std::vector< uint32_t > m_sourceIDsProp
Property: ROB source IDs.
int m_dataFormat
Property: Data compression format.
const eformat::SubDetector m_subDetector
Sub-detector type.
std::vector< uint32_t > m_sourceIDsRoIBProp
Property: ROB source IDs for RoIB.
int m_slinks
Property: Number of slinks per crate when writing out bytestream.
int m_crateMax
Property: Maximum crate number when writing out bytestream.
int m_crateOffsetHw
Property: Hardware crate number offset.

◆ ~CpmRoiByteStreamV1Tool()

LVL1BS::CpmRoiByteStreamV1Tool::~CpmRoiByteStreamV1Tool ( )
virtual

Definition at line 77 of file CpmRoiByteStreamV1Tool.cxx.

78{
79}

Member Function Documentation

◆ convert() [1/2]

StatusCode LVL1BS::CpmRoiByteStreamV1Tool::convert ( const DataVector< LVL1::CPMRoI > * roiCollection) const

Convert CPM RoI to bytestream.

Definition at line 272 of file CpmRoiByteStreamV1Tool.cxx.

274{
275 const bool debug = msgLvl(MSG::DEBUG);
276 if (debug) msg(MSG::DEBUG);
277
278 // Get the event assembler
279
280 FullEventAssembler<L1CaloSrcIdMap>* fea = nullptr;
281 ATH_CHECK( m_byteStreamCnvSvc->getFullEventAssembler (fea,
282 "CpmRoiByteStreamV1") );
283 uint16_t minorVersion = m_srcIdMap.minorVersionPreLS1();
284 fea->setRodMinorVersion(minorVersion);
285
286 // Pointer to ROD data vector
287
289
290 // Sub-block for neutral format
291 CpmRoiSubBlockV1 subBlock;
292
293 // Set up the container map
294
295 // CPM RoI map
296 CpmRoiMap roiMap;
297 setupCpmRoiMap(roiCollection, roiMap);
298 CpmRoiMap::const_iterator mapIter = roiMap.begin();
299 CpmRoiMap::const_iterator mapIterEnd = roiMap.end();
300
301 // Loop over data
302
303 const bool neutralFormat = m_dataFormat == L1CaloSubBlock::NEUTRAL;
304 const int modulesPerSlink = m_modules / m_slinks;
305 for (int crate = m_crateMin; crate <= m_crateMax; ++crate) {
306 const int hwCrate = crate + m_crateOffsetHw;
307
308 // CPM modules are numbered 1 to m_modules
309 for (int module=1; module <= m_modules; ++module) {
310 const int mod = module - 1;
311
312 // Pack required number of modules per slink
313
314 if (mod%modulesPerSlink == 0) {
315 const int daqOrRoi = 1;
316 const int slink = (m_slinks == 2) ? 2*(mod/modulesPerSlink)
317 : mod/modulesPerSlink;
318 if (debug) {
319 msg() << "Treating crate " << hwCrate
320 << " slink " << slink << endmsg
321 << "Data Version/Format: " << m_version
322 << " " << m_dataFormat << endmsg;
323 }
324 const uint32_t rodIdCpm = m_srcIdMap.getRodID(hwCrate, slink, daqOrRoi,
326 theROD = fea->getRodData(rodIdCpm);
327 if (neutralFormat) {
328 const L1CaloUserHeader userHeader;
329 theROD->push_back(userHeader.header());
330 }
331 }
332 if (debug) msg() << "Module " << module << endmsg;
333
334 // Create a sub-block (Neutral format only)
335
336 if (neutralFormat) {
337 subBlock.clear();
338 subBlock.setRoiHeader(m_version, hwCrate, module);
339 }
340
341 // Find CPM RoIs for this module
342
343 for (; mapIter != mapIterEnd; ++mapIter) {
344 const LVL1::CPMRoI* const roi = mapIter->second;
345 if (roi->crate() < crate) continue;
346 if (roi->crate() > crate) break;
347 if (roi->cpm() < module) continue;
348 if (roi->cpm() > module) break;
349 if (roi->hits() || roi->error()) {
350 if (neutralFormat) subBlock.fillRoi(*roi);
351 else theROD->push_back(roi->roiWord());
352 }
353 }
354
355 // Pack and write the sub-block
356
357 if (neutralFormat) {
358 if ( !subBlock.pack()) {
359 msg(MSG::ERROR) << "CPMRoI sub-block packing failed" << endmsg;
360 return StatusCode::FAILURE;
361 }
362 if (debug) {
363 msg() << "CPMRoI sub-block data words: "
364 << subBlock.dataWords() << endmsg;
365 }
366 subBlock.write(theROD);
367 }
368 }
369 }
370
371 return StatusCode::SUCCESS;
372}
#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
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
const L1CaloSrcIdMap m_srcIdMap
Source ID converter.
void setupCpmRoiMap(const CpmRoiCollection *roiCollection, CpmRoiMap &roiMap) const
Set up CPM RoI map.
ServiceHandle< IByteStreamCnvSvc > m_byteStreamCnvSvc
std::map< uint32_t, const LVL1::CPMRoI * > CpmRoiMap
uint32_t roiWord() const
Return packed RoI word.
int crate() const
Return crate number (0-1)
int hits() const
Return hit thresholds map.
int cpm() const
Return CPM number (1-14)
int error() const
Return error flags (bit 0 Saturation, bit 1 Parity)
setWord1 uint16_t
setEventNumber uint32_t

◆ convert() [2/2]

StatusCode LVL1BS::CpmRoiByteStreamV1Tool::convert ( const IROBDataProviderSvc::VROBFRAG & robFrags,
DataVector< LVL1::CPMRoI > * roiCollection ) const

Convert ROB fragments to CPM RoIs.

Definition at line 96 of file CpmRoiByteStreamV1Tool.cxx.

99{
100 const bool debug = msgLvl(MSG::DEBUG);
101 if (debug) msg(MSG::DEBUG);
102
103 // Sub-block for neutral format
104 CpmRoiSubBlockV1 subBlock;
105
106 // Loop over ROB fragments
107
108 int robCount = 0;
109 std::set<uint32_t> dupCheck;
110 std::set<uint32_t> dupRoiCheck;
111 ROBIterator rob = robFrags.begin();
112 ROBIterator robEnd = robFrags.end();
113 for (; rob != robEnd; ++rob) {
114
115 if (debug) {
116 ++robCount;
117 msg() << "Treating ROB fragment " << robCount << endmsg;
118 }
119
120 // Skip fragments with ROB status errors
121
122 uint32_t robid = (*rob)->source_id();
123 if ((*rob)->nstatus() > 0) {
124 ROBPointer robData;
125 (*rob)->status(robData);
126 if (*robData != 0) {
127 m_errorTool->robError(robid, *robData);
128 if (debug) msg() << "ROB status error - skipping fragment" << endmsg;
129 continue;
130 }
131 }
132
133 // Skip duplicate fragments
134
135 if (!dupCheck.insert(robid).second) {
137 if (debug) msg() << "Skipping duplicate ROB fragment" << endmsg;
138 continue;
139 }
140
141 // Unpack ROD data (slinks)
142
143 RODPointer payloadBeg;
145 RODPointer payloadEnd;
146 (*rob)->rod_data(payloadBeg);
147 payloadEnd = payloadBeg + (*rob)->rod_ndata();
148 payload = payloadBeg;
149 if (payload == payloadEnd) {
150 if (debug) msg() << "ROB fragment empty" << endmsg;
151 continue;
152 }
153
154 // Check identifier
155 const uint32_t sourceID = (*rob)->rod_source_id();
156 if (m_srcIdMap.getRobID(sourceID) != robid ||
157 m_srcIdMap.subDet(sourceID) != m_subDetector ||
158 m_srcIdMap.daqOrRoi(sourceID) != 1 ||
159 (m_srcIdMap.slink(sourceID) != 0 && m_srcIdMap.slink(sourceID) != 2) ||
160 m_srcIdMap.crate(sourceID) < m_crateOffsetHw ||
161 m_srcIdMap.crate(sourceID) >= m_crateOffsetHw + m_crates) {
163 if (debug) {
164 msg() << "Wrong source identifier in data: "
165 << MSG::hex << sourceID << MSG::dec << endmsg;
166 }
167 continue;
168 }
169
170 // Check minor version
171 const int minorVersion = (*rob)->rod_version() & 0xffff;
172 if (minorVersion > m_srcIdMap.minorVersionPreLS1()) {
173 if (debug) msg() << "Skipping post-LS1 data" << endmsg;
174 continue;
175 }
176 const int rodCrate = m_srcIdMap.crate(sourceID);
177 if (debug) {
178 msg() << "Treating crate " << rodCrate
179 << " slink " << m_srcIdMap.slink(sourceID) << endmsg;
180 }
181
182 // First word may be User Header
183 if (L1CaloUserHeader::isValid(*payload)) {
184 L1CaloUserHeader userHeader(*payload);
185 userHeader.setVersion(minorVersion);
186 const int headerWords = userHeader.words();
187 if (headerWords != 1 ) {
189 if (debug) msg() << "Unexpected number of user header words: "
190 << headerWords << endmsg;
191 continue;
192 }
193 for (int i = 0; i < headerWords; ++i) ++payload;
194 }
195
196 // Loop over sub-blocks if there are any
197
198 unsigned int rodErr = L1CaloSubBlock::ERROR_NONE;
199 while (payload != payloadEnd) {
200
202 subBlock.clear();
203 payload = subBlock.read(payload, payloadEnd);
204 if (debug) {
205 msg() << "CPM RoI sub-block: Crate " << subBlock.crate()
206 << " Module " << subBlock.module() << endmsg;
207 }
208 // Unpack sub-block
209 if (subBlock.dataWords() && !subBlock.unpack()) {
210 if (debug) {
211 std::string errMsg(subBlock.unpackErrorMsg());
212 msg() << "CPM RoI sub-block unpacking failed: " << errMsg << endmsg;
213 }
214 rodErr = subBlock.unpackErrorCode();
215 break;
216 }
217 const int numChips = 8;
218 const int numLocs = 2;
219 for (int chip = 0; chip < numChips; ++chip) {
220 for (int loc = 0; loc < numLocs; ++loc) {
221 const LVL1::CPMRoI roi = subBlock.roi(chip, loc);
222 if (roi.hits() || roi.error()) {
223 roiCollection->push_back(new LVL1::CPMRoI(roi));
224 }
225 }
226 }
227 } else {
228 // Just RoI word
229 LVL1::CPMRoI roi;
230 if (roi.setRoiWord(*payload)) {
231 if (roi.crate() != rodCrate - m_crateOffsetHw) {
232 if (debug) msg() << "Inconsistent RoI crate number: "
233 << roi.crate() << endmsg;
235 break;
236 }
237 if (roi.cpm() == 0 || roi.cpm() > m_modules) {
238 if (debug) msg() << "Invalid CPM number: "
239 << roi.cpm() << endmsg;
241 break;
242 }
243 const uint32_t location = (*payload) & 0xfffc0000;
244 if (dupRoiCheck.insert(location).second) {
245 if (roi.hits() || roi.error()) {
246 roiCollection->push_back(new LVL1::CPMRoI(*payload));
247 }
248 } else {
249 if (debug) msg() << "Duplicate RoI word "
250 << MSG::hex << *payload << MSG::dec << endmsg;
252 break;
253 }
254 } else {
255 if (debug) msg() << "Invalid RoI word "
256 << MSG::hex << *payload << MSG::dec << endmsg;
258 break;
259 }
260 ++payload;
261 }
262 }
263 if (rodErr != L1CaloSubBlock::ERROR_NONE)
264 m_errorTool->rodError(robid, rodErr);
265 }
266
267 return StatusCode::SUCCESS;
268}
value_type push_back(value_type pElem)
Add an element to the end of the collection.
OFFLINE_FRAGMENTS_NAMESPACE::PointerType RODPointer
OFFLINE_FRAGMENTS_NAMESPACE::PointerType ROBPointer
IROBDataProviderSvc::VROBFRAG::const_iterator ROBIterator
static SubBlockWordType wordType(uint32_t word)
Word identification.
static bool isValid(uint32_t word)
Test for valid header word.
bool setRoiWord(uint32_t roiWord)
Set RoI word with ID check.
Definition CPMRoI.cxx:57

◆ 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>

◆ 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

◆ initialize()

StatusCode LVL1BS::CpmRoiByteStreamV1Tool::initialize ( )
overridevirtual

Definition at line 84 of file CpmRoiByteStreamV1Tool.cxx.

85{
86 ATH_MSG_INFO ("Initializing " << name());
87
88 ATH_CHECK( m_errorTool.retrieve() );
89 ATH_CHECK( m_byteStreamCnvSvc.retrieve() );
90
91 return StatusCode::SUCCESS;
92}
#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::CpmRoiByteStreamV1Tool::interfaceID ( )
static

AlgTool InterfaceID.

Definition at line 31 of file CpmRoiByteStreamV1Tool.cxx.

32{
34}
static const InterfaceID IID_ICpmRoiByteStreamV1Tool("CpmRoiByteStreamV1Tool", 1, 1)

◆ makeSourceIDs()

std::vector< uint32_t > LVL1BS::CpmRoiByteStreamV1Tool::makeSourceIDs ( bool roiDaq) const
private

Definition at line 376 of file CpmRoiByteStreamV1Tool.cxx.

377{
378 std::vector<uint32_t> sourceIDs;
379
380 if (roiDaq) {
382 }
383 else {
385 }
386
387 if (sourceIDs.empty()) {
388 const int maxCrates = m_crates + m_crateOffsetHw;
389 const int maxSlinks = m_srcIdMap.maxSlinks();
390 for (int hwCrate = m_crateOffsetHw; hwCrate < maxCrates; ++hwCrate)
391 {
392 for (int slink = 0; slink < maxSlinks; ++slink)
393 {
394 const int daqOrRoi = 1;
395 const uint32_t rodId = m_srcIdMap.getRodID(hwCrate, slink, daqOrRoi,
397 const uint32_t robId = m_srcIdMap.getRobID(rodId);
398 if (roiDaq)
399 {
400 if (slink < 2) sourceIDs.push_back(robId);
401 }
402 else if (slink >= 2) sourceIDs.push_back(robId);
403 }
404 }
405
406 }
407 return sourceIDs;
408}
const std::vector< uint32_t > & sourceIDs(const std::string &sgKey) 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 }

◆ setupCpmRoiMap()

void LVL1BS::CpmRoiByteStreamV1Tool::setupCpmRoiMap ( const CpmRoiCollection * roiCollection,
CpmRoiMap & roiMap ) const
private

Set up CPM RoI map.

Definition at line 430 of file CpmRoiByteStreamV1Tool.cxx.

433{
434 roiMap.clear();
435 if (roiCollection) {
436 CpmRoiCollection::const_iterator pos = roiCollection->begin();
437 CpmRoiCollection::const_iterator pose = roiCollection->end();
438 for (; pos != pose; ++pos) {
439 const LVL1::CPMRoI* const roi = *pos;
440 const uint32_t key = roi->roiWord();
441 roiMap.insert(std::make_pair(key, roi));
442 }
443 }
444}
DataModel_detail::const_iterator< DataVector > const_iterator
Definition DataVector.h:838

◆ sourceIDs()

const std::vector< uint32_t > & LVL1BS::CpmRoiByteStreamV1Tool::sourceIDs ( const std::string & sgKey) const

Return reference to vector with all possible Source Identifiers.

Definition at line 410 of file CpmRoiByteStreamV1Tool.cxx.

412{
413 const std::string flag("RoIB");
414 const std::string::size_type pos = sgKey.find(flag);
415 const bool roiDaq =
416 (pos == std::string::npos || pos != sgKey.length() - flag.length());
417
418 if (roiDaq) {
419 static const std::vector<uint32_t> sourceIDs = makeSourceIDs(roiDaq);
420 return sourceIDs;
421 }
422 else {
423 static const std::vector<uint32_t> sourceIDsRoIB = makeSourceIDs(roiDaq);
424 return sourceIDsRoIB;
425 }
426}
std::vector< uint32_t > makeSourceIDs(bool roiDaq) const
bool flag
Definition master.py:29

◆ 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::CpmRoiByteStreamV1Tool::m_byteStreamCnvSvc { this, "ByteStreamCnvSvc", "ByteStreamCnvSvc" }
private

Definition at line 70 of file CpmRoiByteStreamV1Tool.h.

71{ this, "ByteStreamCnvSvc", "ByteStreamCnvSvc" };

◆ m_crateMax

int LVL1BS::CpmRoiByteStreamV1Tool::m_crateMax
private

Property: Maximum crate number when writing out bytestream.

Definition at line 105 of file CpmRoiByteStreamV1Tool.h.

◆ m_crateMin

int LVL1BS::CpmRoiByteStreamV1Tool::m_crateMin
private

Property: Minimum crate number when writing out bytestream.

Definition at line 103 of file CpmRoiByteStreamV1Tool.h.

◆ m_crateOffsetHw

int LVL1BS::CpmRoiByteStreamV1Tool::m_crateOffsetHw
private

Property: Hardware crate number offset.

Definition at line 89 of file CpmRoiByteStreamV1Tool.h.

◆ m_crateOffsetSw

int LVL1BS::CpmRoiByteStreamV1Tool::m_crateOffsetSw
private

Property: Software crate number offset.

Definition at line 91 of file CpmRoiByteStreamV1Tool.h.

◆ m_crates

const int LVL1BS::CpmRoiByteStreamV1Tool::m_crates
private

Number of crates.

Definition at line 97 of file CpmRoiByteStreamV1Tool.h.

◆ m_dataFormat

int LVL1BS::CpmRoiByteStreamV1Tool::m_dataFormat
private

Property: Data compression format.

Definition at line 95 of file CpmRoiByteStreamV1Tool.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_errorTool

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

Property: Error collection tool.

Definition at line 86 of file CpmRoiByteStreamV1Tool.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_modules

const int LVL1BS::CpmRoiByteStreamV1Tool::m_modules
private

Number of CPM modules per crate.

Definition at line 99 of file CpmRoiByteStreamV1Tool.h.

◆ m_slinks

int LVL1BS::CpmRoiByteStreamV1Tool::m_slinks
private

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

Definition at line 101 of file CpmRoiByteStreamV1Tool.h.

◆ m_sourceIDsProp

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

Property: ROB source IDs.

Definition at line 107 of file CpmRoiByteStreamV1Tool.h.

◆ m_sourceIDsRoIBProp

std::vector<uint32_t> LVL1BS::CpmRoiByteStreamV1Tool::m_sourceIDsRoIBProp
private

Property: ROB source IDs for RoIB.

Definition at line 109 of file CpmRoiByteStreamV1Tool.h.

◆ m_srcIdMap

const L1CaloSrcIdMap LVL1BS::CpmRoiByteStreamV1Tool::m_srcIdMap
private

Source ID converter.

Definition at line 113 of file CpmRoiByteStreamV1Tool.h.

◆ m_subDetector

const eformat::SubDetector LVL1BS::CpmRoiByteStreamV1Tool::m_subDetector
private

Sub-detector type.

Definition at line 111 of file CpmRoiByteStreamV1Tool.h.

◆ m_varHandleArraysDeclared

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

Definition at line 399 of file AthCommonDataStore.h.

◆ m_version

int LVL1BS::CpmRoiByteStreamV1Tool::m_version
private

Property: Sub_block header version.

Definition at line 93 of file CpmRoiByteStreamV1Tool.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: