Skip to content
Snippets Groups Projects
Commit bd4864c1 authored by scott snyder's avatar scott snyder Committed by scott snyder
Browse files

TrigT1CaloByteStream: Make CpmRoiByteStream tools const.

Make interfaces of CpmRoiByteStream*Tool tools const, for MT compatibility.
parent ad941759
No related branches found
No related tags found
No related merge requests found
/* /*
Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
*/ */
...@@ -17,7 +17,6 @@ ...@@ -17,7 +17,6 @@
#include "CpmRoiSubBlock.h" #include "CpmRoiSubBlock.h"
#include "L1CaloErrorByteStreamTool.h" #include "L1CaloErrorByteStreamTool.h"
#include "L1CaloSrcIdMap.h"
#include "L1CaloUserHeader.h" #include "L1CaloUserHeader.h"
#include "CpmRoiByteStreamTool.h" #include "CpmRoiByteStreamTool.h"
...@@ -41,8 +40,8 @@ CpmRoiByteStreamTool::CpmRoiByteStreamTool(const std::string& type, ...@@ -41,8 +40,8 @@ CpmRoiByteStreamTool::CpmRoiByteStreamTool(const std::string& type,
const IInterface* parent) const IInterface* parent)
: AthAlgTool(type, name, parent), : AthAlgTool(type, name, parent),
m_errorTool("LVL1BS::L1CaloErrorByteStreamTool/L1CaloErrorByteStreamTool"), m_errorTool("LVL1BS::L1CaloErrorByteStreamTool/L1CaloErrorByteStreamTool"),
m_crates(4), m_modules(14), m_srcIdMap(0), m_subBlock(0), m_rodStatus(0), m_crates(4), m_modules(14),
m_fea(0) m_subDetector (eformat::TDAQ_CALO_CLUSTER_PROC_ROI)
{ {
declareInterface<CpmRoiByteStreamTool>(this); declareInterface<CpmRoiByteStreamTool>(this);
...@@ -52,9 +51,9 @@ CpmRoiByteStreamTool::CpmRoiByteStreamTool(const std::string& type, ...@@ -52,9 +51,9 @@ CpmRoiByteStreamTool::CpmRoiByteStreamTool(const std::string& type,
"Offset of CP crate numbers in RDOs"); "Offset of CP crate numbers in RDOs");
// Properties for reading bytestream only // Properties for reading bytestream only
declareProperty("ROBSourceIDs", m_sourceIDs, declareProperty("ROBSourceIDs", m_sourceIDsProp,
"ROB fragment source identifiers"); "ROB fragment source identifiers");
declareProperty("ROBSourceIDsRoIB", m_sourceIDsRoIB, declareProperty("ROBSourceIDsRoIB", m_sourceIDsRoIBProp,
"ROB fragment source identifiers for RoIBs"); "ROB fragment source identifiers for RoIBs");
// Properties for writing bytestream only // Properties for writing bytestream only
...@@ -78,31 +77,11 @@ CpmRoiByteStreamTool::~CpmRoiByteStreamTool() ...@@ -78,31 +77,11 @@ CpmRoiByteStreamTool::~CpmRoiByteStreamTool()
StatusCode CpmRoiByteStreamTool::initialize() StatusCode CpmRoiByteStreamTool::initialize()
{ {
msg(MSG::INFO) << "Initializing " << name() << " - package version " ATH_MSG_INFO ("Initializing " << name() << " - package version "
<< PACKAGE_VERSION << endmsg; << PACKAGE_VERSION);
StatusCode sc = m_errorTool.retrieve();
if (sc.isFailure()) {
msg(MSG::ERROR) << "Failed to retrieve tool " << m_errorTool << endmsg;
return sc;
} else msg(MSG::INFO) << "Retrieved tool " << m_errorTool << endmsg;
m_subDetector = eformat::TDAQ_CALO_CLUSTER_PROC_ROI;
m_srcIdMap = new L1CaloSrcIdMap();
m_rodStatus = new std::vector<uint32_t>(2);
m_subBlock = new CpmRoiSubBlock();
m_fea = new FullEventAssembler<L1CaloSrcIdMap>();
return StatusCode::SUCCESS;
}
// Finalize ATH_CHECK( m_errorTool.retrieve() );
StatusCode CpmRoiByteStreamTool::finalize()
{
delete m_fea;
delete m_subBlock;
delete m_rodStatus;
delete m_srcIdMap;
return StatusCode::SUCCESS; return StatusCode::SUCCESS;
} }
...@@ -110,11 +89,14 @@ StatusCode CpmRoiByteStreamTool::finalize() ...@@ -110,11 +89,14 @@ StatusCode CpmRoiByteStreamTool::finalize()
StatusCode CpmRoiByteStreamTool::convert( StatusCode CpmRoiByteStreamTool::convert(
const IROBDataProviderSvc::VROBFRAG& robFrags, const IROBDataProviderSvc::VROBFRAG& robFrags,
DataVector<LVL1::CPMRoI>* const roiCollection) DataVector<LVL1::CPMRoI>* const roiCollection) const
{ {
const bool debug = msgLvl(MSG::DEBUG); const bool debug = msgLvl(MSG::DEBUG);
if (debug) msg(MSG::DEBUG); if (debug) msg(MSG::DEBUG);
// Sub-block for neutral format
CpmRoiSubBlock subBlock;
// Loop over ROB fragments // Loop over ROB fragments
int robCount = 0; int robCount = 0;
...@@ -165,12 +147,12 @@ StatusCode CpmRoiByteStreamTool::convert( ...@@ -165,12 +147,12 @@ StatusCode CpmRoiByteStreamTool::convert(
// Check identifier // Check identifier
const uint32_t sourceID = (*rob)->rod_source_id(); const uint32_t sourceID = (*rob)->rod_source_id();
if (m_srcIdMap->getRobID(sourceID) != robid || if (m_srcIdMap.getRobID(sourceID) != robid ||
m_srcIdMap->subDet(sourceID) != m_subDetector || m_srcIdMap.subDet(sourceID) != m_subDetector ||
m_srcIdMap->daqOrRoi(sourceID) != 1 || m_srcIdMap.daqOrRoi(sourceID) != 1 ||
(m_srcIdMap->slink(sourceID) != 0 && m_srcIdMap->slink(sourceID) != 2) || (m_srcIdMap.slink(sourceID) != 0 && m_srcIdMap.slink(sourceID) != 2) ||
m_srcIdMap->crate(sourceID) < m_crateOffsetHw || m_srcIdMap.crate(sourceID) < m_crateOffsetHw ||
m_srcIdMap->crate(sourceID) >= m_crateOffsetHw + m_crates) { m_srcIdMap.crate(sourceID) >= m_crateOffsetHw + m_crates) {
m_errorTool->rodError(robid, L1CaloSubBlock::ERROR_ROD_ID); m_errorTool->rodError(robid, L1CaloSubBlock::ERROR_ROD_ID);
if (debug) { if (debug) {
msg() << "Wrong source identifier in data: " msg() << "Wrong source identifier in data: "
...@@ -178,10 +160,10 @@ StatusCode CpmRoiByteStreamTool::convert( ...@@ -178,10 +160,10 @@ StatusCode CpmRoiByteStreamTool::convert(
} }
continue; continue;
} }
const int rodCrate = m_srcIdMap->crate(sourceID); const int rodCrate = m_srcIdMap.crate(sourceID);
if (debug) { if (debug) {
msg() << "Treating crate " << rodCrate msg() << "Treating crate " << rodCrate
<< " slink " << m_srcIdMap->slink(sourceID) << endmsg; << " slink " << m_srcIdMap.slink(sourceID) << endmsg;
} }
// First word may be User Header // First word may be User Header
...@@ -205,26 +187,26 @@ StatusCode CpmRoiByteStreamTool::convert( ...@@ -205,26 +187,26 @@ StatusCode CpmRoiByteStreamTool::convert(
while (payload != payloadEnd) { while (payload != payloadEnd) {
if (L1CaloSubBlock::wordType(*payload) == L1CaloSubBlock::HEADER) { if (L1CaloSubBlock::wordType(*payload) == L1CaloSubBlock::HEADER) {
m_subBlock->clear(); subBlock.clear();
payload = m_subBlock->read(payload, payloadEnd); payload = subBlock.read(payload, payloadEnd);
if (debug) { if (debug) {
msg() << "CPM RoI sub-block: Crate " << m_subBlock->crate() msg() << "CPM RoI sub-block: Crate " << subBlock.crate()
<< " Module " << m_subBlock->module() << endmsg; << " Module " << subBlock.module() << endmsg;
} }
// Unpack sub-block // Unpack sub-block
if (m_subBlock->dataWords() && !m_subBlock->unpack()) { if (subBlock.dataWords() && !subBlock.unpack()) {
if (debug) { if (debug) {
std::string errMsg(m_subBlock->unpackErrorMsg()); std::string errMsg(subBlock.unpackErrorMsg());
msg() << "CPM RoI sub-block unpacking failed: " << errMsg << endmsg; msg() << "CPM RoI sub-block unpacking failed: " << errMsg << endmsg;
} }
rodErr = m_subBlock->unpackErrorCode(); rodErr = subBlock.unpackErrorCode();
break; break;
} }
const int numChips = 8; const int numChips = 8;
const int numLocs = 2; const int numLocs = 2;
for (int chip = 0; chip < numChips; ++chip) { for (int chip = 0; chip < numChips; ++chip) {
for (int loc = 0; loc < numLocs; ++loc) { for (int loc = 0; loc < numLocs; ++loc) {
const LVL1::CPMRoI roi = m_subBlock->roi(chip, loc); const LVL1::CPMRoI roi = subBlock.roi(chip, loc);
if (roi.hits() || roi.error()) { if (roi.hits() || roi.error()) {
roiCollection->push_back(new LVL1::CPMRoI(roi)); roiCollection->push_back(new LVL1::CPMRoI(roi));
} }
...@@ -277,27 +259,31 @@ StatusCode CpmRoiByteStreamTool::convert( ...@@ -277,27 +259,31 @@ StatusCode CpmRoiByteStreamTool::convert(
StatusCode CpmRoiByteStreamTool::convert( StatusCode CpmRoiByteStreamTool::convert(
const DataVector<LVL1::CPMRoI>* const roiCollection, const DataVector<LVL1::CPMRoI>* const roiCollection,
RawEventWrite* const re) RawEventWrite* const re) const
{ {
const bool debug = msgLvl(MSG::DEBUG); const bool debug = msgLvl(MSG::DEBUG);
if (debug) msg(MSG::DEBUG); if (debug) msg(MSG::DEBUG);
// Clear the event assembler // Clear the event assembler
m_fea->clear(); FullEventAssembler<L1CaloSrcIdMap> fea;
const uint16_t minorVersion = m_srcIdMap->minorVersion(); const uint16_t minorVersion = m_srcIdMap.minorVersion();
m_fea->setRodMinorVersion(minorVersion); fea.setRodMinorVersion(minorVersion);
m_rodStatusMap.clear();
// Pointer to ROD data vector // Pointer to ROD data vector
FullEventAssembler<L1CaloSrcIdMap>::RODDATA* theROD = 0; FullEventAssembler<L1CaloSrcIdMap>::RODDATA* theROD = 0;
// Sub-block for neutral format
CpmRoiSubBlock subBlock;
// Set up the container map // Set up the container map
setupCpmRoiMap(roiCollection); // CPM RoI map
CpmRoiMap::const_iterator mapIter = m_roiMap.begin(); CpmRoiMap roiMap;
CpmRoiMap::const_iterator mapIterEnd = m_roiMap.end(); setupCpmRoiMap(roiCollection, roiMap);
CpmRoiMap::const_iterator mapIter = roiMap.begin();
CpmRoiMap::const_iterator mapIterEnd = roiMap.end();
// Loop over data // Loop over data
...@@ -322,22 +308,21 @@ StatusCode CpmRoiByteStreamTool::convert( ...@@ -322,22 +308,21 @@ StatusCode CpmRoiByteStreamTool::convert(
<< "Data Version/Format: " << m_version << "Data Version/Format: " << m_version
<< " " << m_dataFormat << endmsg; << " " << m_dataFormat << endmsg;
} }
const uint32_t rodIdCpm = m_srcIdMap->getRodID(hwCrate, slink, daqOrRoi, const uint32_t rodIdCpm = m_srcIdMap.getRodID(hwCrate, slink, daqOrRoi,
m_subDetector); m_subDetector);
theROD = m_fea->getRodData(rodIdCpm); theROD = fea.getRodData(rodIdCpm);
if (neutralFormat) { if (neutralFormat) {
const L1CaloUserHeader userHeader; const L1CaloUserHeader userHeader;
theROD->push_back(userHeader.header()); theROD->push_back(userHeader.header());
} }
m_rodStatusMap.insert(make_pair(rodIdCpm, m_rodStatus));
} }
if (debug) msg() << "Module " << module << endmsg; if (debug) msg() << "Module " << module << endmsg;
// Create a sub-block (Neutral format only) // Create a sub-block (Neutral format only)
if (neutralFormat) { if (neutralFormat) {
m_subBlock->clear(); subBlock.clear();
m_subBlock->setRoiHeader(m_version, hwCrate, module); subBlock.setRoiHeader(m_version, hwCrate, module);
} }
// Find CPM RoIs for this module // Find CPM RoIs for this module
...@@ -349,7 +334,7 @@ StatusCode CpmRoiByteStreamTool::convert( ...@@ -349,7 +334,7 @@ StatusCode CpmRoiByteStreamTool::convert(
if (roi->cpm() < module) continue; if (roi->cpm() < module) continue;
if (roi->cpm() > module) break; if (roi->cpm() > module) break;
if (roi->hits() || roi->error()) { if (roi->hits() || roi->error()) {
if (neutralFormat) m_subBlock->fillRoi(*roi); if (neutralFormat) subBlock.fillRoi(*roi);
else theROD->push_back(roi->roiWord()); else theROD->push_back(roi->roiWord());
} }
} }
...@@ -357,71 +342,94 @@ StatusCode CpmRoiByteStreamTool::convert( ...@@ -357,71 +342,94 @@ StatusCode CpmRoiByteStreamTool::convert(
// Pack and write the sub-block // Pack and write the sub-block
if (neutralFormat) { if (neutralFormat) {
if ( !m_subBlock->pack()) { if ( !subBlock.pack()) {
msg(MSG::ERROR) << "CPMRoI sub-block packing failed" << endmsg; msg(MSG::ERROR) << "CPMRoI sub-block packing failed" << endmsg;
return StatusCode::FAILURE; return StatusCode::FAILURE;
} }
if (debug) { if (debug) {
msg() << "CPMRoI sub-block data words: " msg() << "CPMRoI sub-block data words: "
<< m_subBlock->dataWords() << endmsg; << subBlock.dataWords() << endmsg;
} }
m_subBlock->write(theROD); subBlock.write(theROD);
} }
} }
} }
// Fill the raw event // Fill the raw event
m_fea->fill(re, msg()); fea.fill(re, msg());
// Set ROD status words
//L1CaloRodStatus::setStatus(re, m_rodStatusMap, m_srcIdMap);
return StatusCode::SUCCESS; return StatusCode::SUCCESS;
} }
// Return reference to vector with all possible Source Identifiers // Return reference to vector with all possible Source Identifiers
std::vector<uint32_t> CpmRoiByteStreamTool::makeSourceIDs (bool roiDaq) const
{
std::vector<uint32_t> sourceIDs;
if (roiDaq) {
sourceIDs = m_sourceIDsProp;
}
else {
sourceIDs = m_sourceIDsRoIBProp;
}
if (sourceIDs.empty()) {
const int maxCrates = m_crates + m_crateOffsetHw;
const int maxSlinks = m_srcIdMap.maxSlinks();
for (int hwCrate = m_crateOffsetHw; hwCrate < maxCrates; ++hwCrate)
{
for (int slink = 0; slink < maxSlinks; ++slink)
{
const int daqOrRoi = 1;
const uint32_t rodId = m_srcIdMap.getRodID(hwCrate, slink, daqOrRoi,
m_subDetector);
const uint32_t robId = m_srcIdMap.getRobID(rodId);
if (roiDaq)
{
if (slink < 2) sourceIDs.push_back(robId);
}
else if (slink >= 2) sourceIDs.push_back(robId);
}
}
}
return sourceIDs;
}
const std::vector<uint32_t>& CpmRoiByteStreamTool::sourceIDs( const std::vector<uint32_t>& CpmRoiByteStreamTool::sourceIDs(
const std::string& sgKey) const std::string& sgKey) const
{ {
const std::string flag("RoIB"); const std::string flag("RoIB");
const std::string::size_type pos = sgKey.find(flag); const std::string::size_type pos = sgKey.find(flag);
const bool roiDaq = const bool roiDaq =
(pos == std::string::npos || pos != sgKey.length() - flag.length()); (pos == std::string::npos || pos != sgKey.length() - flag.length());
const bool empty = (roiDaq) ? m_sourceIDs.empty() : m_sourceIDsRoIB.empty();
if (empty) { if (roiDaq) {
const int maxCrates = m_crates + m_crateOffsetHw; static const std::vector<uint32_t> sourceIDs = makeSourceIDs(roiDaq);
const int maxSlinks = m_srcIdMap->maxSlinks(); return sourceIDs;
for (int hwCrate = m_crateOffsetHw; hwCrate < maxCrates; ++hwCrate) { }
for (int slink = 0; slink < maxSlinks; ++slink) { else {
const int daqOrRoi = 1; static const std::vector<uint32_t> sourceIDsRoIB = makeSourceIDs(roiDaq);
const uint32_t rodId = m_srcIdMap->getRodID(hwCrate, slink, daqOrRoi, return sourceIDsRoIB;
m_subDetector);
const uint32_t robId = m_srcIdMap->getRobID(rodId);
if (roiDaq) {
if (slink < 2) m_sourceIDs.push_back(robId);
} else if (slink >= 2) m_sourceIDsRoIB.push_back(robId);
}
}
} }
return (roiDaq) ? m_sourceIDs : m_sourceIDsRoIB;
} }
// Set up CPM RoI map // Set up CPM RoI map
void CpmRoiByteStreamTool::setupCpmRoiMap(const CpmRoiCollection* void CpmRoiByteStreamTool::setupCpmRoiMap(const CpmRoiCollection*
const roiCollection) const roiCollection,
CpmRoiMap& roiMap) const
{ {
m_roiMap.clear(); roiMap.clear();
if (roiCollection) { if (roiCollection) {
CpmRoiCollection::const_iterator pos = roiCollection->begin(); CpmRoiCollection::const_iterator pos = roiCollection->begin();
CpmRoiCollection::const_iterator pose = roiCollection->end(); CpmRoiCollection::const_iterator pose = roiCollection->end();
for (; pos != pose; ++pos) { for (; pos != pose; ++pos) {
const LVL1::CPMRoI* const roi = *pos; const LVL1::CPMRoI* const roi = *pos;
const uint32_t key = roi->roiWord(); const uint32_t key = roi->roiWord();
m_roiMap.insert(std::make_pair(key, roi)); roiMap.insert(std::make_pair(key, roi));
} }
} }
} }
......
/* /*
Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
*/ */
#ifndef TRIGT1CALOBYTESTREAM_CPMROIBYTESTREAMTOOL_H #ifndef TRIGT1CALOBYTESTREAM_CPMROIBYTESTREAMTOOL_H
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include <string> #include <string>
#include <vector> #include <vector>
#include "L1CaloSrcIdMap.h"
#include "AthenaBaseComps/AthAlgTool.h" #include "AthenaBaseComps/AthAlgTool.h"
#include "ByteStreamCnvSvcBase/IROBDataProviderSvc.h" #include "ByteStreamCnvSvcBase/IROBDataProviderSvc.h"
#include "ByteStreamData/RawEvent.h" #include "ByteStreamData/RawEvent.h"
...@@ -52,19 +53,18 @@ class CpmRoiByteStreamTool : public AthAlgTool { ...@@ -52,19 +53,18 @@ class CpmRoiByteStreamTool : public AthAlgTool {
/// AlgTool InterfaceID /// AlgTool InterfaceID
static const InterfaceID& interfaceID(); static const InterfaceID& interfaceID();
virtual StatusCode initialize(); virtual StatusCode initialize() override;
virtual StatusCode finalize();
/// Convert ROB fragments to CPM RoIs /// Convert ROB fragments to CPM RoIs
StatusCode convert(const IROBDataProviderSvc::VROBFRAG& robFrags, StatusCode convert(const IROBDataProviderSvc::VROBFRAG& robFrags,
DataVector<LVL1::CPMRoI>* roiCollection); DataVector<LVL1::CPMRoI>* roiCollection) const;
/// Convert CPM RoI to bytestream /// Convert CPM RoI to bytestream
StatusCode convert(const DataVector<LVL1::CPMRoI>* roiCollection, StatusCode convert(const DataVector<LVL1::CPMRoI>* roiCollection,
RawEventWrite* re); RawEventWrite* re) const;
/// Return reference to vector with all possible Source Identifiers /// Return reference to vector with all possible Source Identifiers
const std::vector<uint32_t>& sourceIDs(const std::string& sgKey); const std::vector<uint32_t>& sourceIDs(const std::string& sgKey) const;
private: private:
...@@ -74,45 +74,37 @@ class CpmRoiByteStreamTool : public AthAlgTool { ...@@ -74,45 +74,37 @@ class CpmRoiByteStreamTool : public AthAlgTool {
typedef OFFLINE_FRAGMENTS_NAMESPACE::PointerType ROBPointer; typedef OFFLINE_FRAGMENTS_NAMESPACE::PointerType ROBPointer;
typedef OFFLINE_FRAGMENTS_NAMESPACE::PointerType RODPointer; typedef OFFLINE_FRAGMENTS_NAMESPACE::PointerType RODPointer;
std::vector<uint32_t> makeSourceIDs (bool roiDaq) const;
/// Set up CPM RoI map /// Set up CPM RoI map
void setupCpmRoiMap(const CpmRoiCollection* roiCollection); void setupCpmRoiMap(const CpmRoiCollection* roiCollection,
CpmRoiMap& roiMap) const;
/// Error collection tool /// Error collection tool
ToolHandle<LVL1BS::L1CaloErrorByteStreamTool> m_errorTool; ToolHandle<LVL1BS::L1CaloErrorByteStreamTool> m_errorTool;
/// Hardware crate number offset /// Property: Hardware crate number offset
int m_crateOffsetHw; int m_crateOffsetHw;
/// Software crate number offset /// Property: Software crate number offset
int m_crateOffsetSw; int m_crateOffsetSw;
/// Sub_block header version /// Property: Sub_block header version
int m_version; int m_version;
/// Data compression format /// Property: Data compression format
int m_dataFormat; int m_dataFormat;
/// Number of crates /// Number of crates
int m_crates; const int m_crates;
/// Number of CPM modules per crate /// Number of CPM modules per crate
int m_modules; const int m_modules;
/// Number of slinks per crate when writing out bytestream /// Property: Number of slinks per crate when writing out bytestream
int m_slinks; int m_slinks;
/// ROB source IDs /// Property: ROB source IDs
std::vector<uint32_t> m_sourceIDs; std::vector<uint32_t> m_sourceIDsProp;
/// ROB source IDs for RoIB /// Property: ROB source IDs for RoIB
std::vector<uint32_t> m_sourceIDsRoIB; std::vector<uint32_t> m_sourceIDsRoIBProp;
/// Sub-detector type /// Sub-detector type
eformat::SubDetector m_subDetector; const eformat::SubDetector m_subDetector;
/// Source ID converter /// Source ID converter
L1CaloSrcIdMap* m_srcIdMap; const L1CaloSrcIdMap m_srcIdMap;
/// Sub-block for neutral format
CpmRoiSubBlock* m_subBlock;
/// CPM RoI map
CpmRoiMap m_roiMap;
/// ROD Status words
std::vector<uint32_t>* m_rodStatus;
/// ROD status map
std::map<uint32_t, std::vector<uint32_t>* > m_rodStatusMap;
/// Event assembler
FullEventAssembler<L1CaloSrcIdMap>* m_fea;
}; };
} // end namespace } // end namespace
......
/* /*
Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
*/ */
...@@ -17,7 +17,6 @@ ...@@ -17,7 +17,6 @@
#include "CpmRoiSubBlockV1.h" #include "CpmRoiSubBlockV1.h"
#include "L1CaloErrorByteStreamTool.h" #include "L1CaloErrorByteStreamTool.h"
#include "L1CaloSrcIdMap.h"
#include "L1CaloUserHeader.h" #include "L1CaloUserHeader.h"
#include "CpmRoiByteStreamV1Tool.h" #include "CpmRoiByteStreamV1Tool.h"
...@@ -41,8 +40,8 @@ CpmRoiByteStreamV1Tool::CpmRoiByteStreamV1Tool(const std::string& type, ...@@ -41,8 +40,8 @@ CpmRoiByteStreamV1Tool::CpmRoiByteStreamV1Tool(const std::string& type,
const IInterface* parent) const IInterface* parent)
: AthAlgTool(type, name, parent), : AthAlgTool(type, name, parent),
m_errorTool("LVL1BS::L1CaloErrorByteStreamTool/L1CaloErrorByteStreamTool"), m_errorTool("LVL1BS::L1CaloErrorByteStreamTool/L1CaloErrorByteStreamTool"),
m_crates(4), m_modules(14), m_srcIdMap(0), m_subBlock(0), m_rodStatus(0), m_crates(4), m_modules(14),
m_fea(0) m_subDetector (eformat::TDAQ_CALO_CLUSTER_PROC_ROI)
{ {
declareInterface<CpmRoiByteStreamV1Tool>(this); declareInterface<CpmRoiByteStreamV1Tool>(this);
...@@ -54,9 +53,9 @@ CpmRoiByteStreamV1Tool::CpmRoiByteStreamV1Tool(const std::string& type, ...@@ -54,9 +53,9 @@ CpmRoiByteStreamV1Tool::CpmRoiByteStreamV1Tool(const std::string& type,
"Offset of CP crate numbers in RDOs"); "Offset of CP crate numbers in RDOs");
// Properties for reading bytestream only // Properties for reading bytestream only
declareProperty("ROBSourceIDs", m_sourceIDs, declareProperty("ROBSourceIDs", m_sourceIDsProp,
"ROB fragment source identifiers"); "ROB fragment source identifiers");
declareProperty("ROBSourceIDsRoIB", m_sourceIDsRoIB, declareProperty("ROBSourceIDsRoIB", m_sourceIDsRoIBProp,
"ROB fragment source identifiers for RoIBs"); "ROB fragment source identifiers for RoIBs");
// Properties for writing bytestream only // Properties for writing bytestream only
...@@ -84,31 +83,11 @@ CpmRoiByteStreamV1Tool::~CpmRoiByteStreamV1Tool() ...@@ -84,31 +83,11 @@ CpmRoiByteStreamV1Tool::~CpmRoiByteStreamV1Tool()
StatusCode CpmRoiByteStreamV1Tool::initialize() StatusCode CpmRoiByteStreamV1Tool::initialize()
{ {
msg(MSG::INFO) << "Initializing " << name() << " - package version " ATH_MSG_INFO ("Initializing " << name() << " - package version "
<< PACKAGE_VERSION << endmsg; << PACKAGE_VERSION);
StatusCode sc = m_errorTool.retrieve();
if (sc.isFailure()) {
msg(MSG::ERROR) << "Failed to retrieve tool " << m_errorTool << endmsg;
return sc;
} else msg(MSG::INFO) << "Retrieved tool " << m_errorTool << endmsg;
m_subDetector = eformat::TDAQ_CALO_CLUSTER_PROC_ROI;
m_srcIdMap = new L1CaloSrcIdMap();
m_rodStatus = new std::vector<uint32_t>(2);
m_subBlock = new CpmRoiSubBlockV1();
m_fea = new FullEventAssembler<L1CaloSrcIdMap>();
return StatusCode::SUCCESS;
}
// Finalize ATH_CHECK( m_errorTool.retrieve() );
StatusCode CpmRoiByteStreamV1Tool::finalize()
{
delete m_fea;
delete m_subBlock;
delete m_rodStatus;
delete m_srcIdMap;
return StatusCode::SUCCESS; return StatusCode::SUCCESS;
} }
...@@ -116,11 +95,14 @@ StatusCode CpmRoiByteStreamV1Tool::finalize() ...@@ -116,11 +95,14 @@ StatusCode CpmRoiByteStreamV1Tool::finalize()
StatusCode CpmRoiByteStreamV1Tool::convert( StatusCode CpmRoiByteStreamV1Tool::convert(
const IROBDataProviderSvc::VROBFRAG& robFrags, const IROBDataProviderSvc::VROBFRAG& robFrags,
DataVector<LVL1::CPMRoI>* const roiCollection) DataVector<LVL1::CPMRoI>* const roiCollection) const
{ {
const bool debug = msgLvl(MSG::DEBUG); const bool debug = msgLvl(MSG::DEBUG);
if (debug) msg(MSG::DEBUG); if (debug) msg(MSG::DEBUG);
// Sub-block for neutral format
CpmRoiSubBlockV1 subBlock;
// Loop over ROB fragments // Loop over ROB fragments
int robCount = 0; int robCount = 0;
...@@ -171,12 +153,12 @@ StatusCode CpmRoiByteStreamV1Tool::convert( ...@@ -171,12 +153,12 @@ StatusCode CpmRoiByteStreamV1Tool::convert(
// Check identifier // Check identifier
const uint32_t sourceID = (*rob)->rod_source_id(); const uint32_t sourceID = (*rob)->rod_source_id();
if (m_srcIdMap->getRobID(sourceID) != robid || if (m_srcIdMap.getRobID(sourceID) != robid ||
m_srcIdMap->subDet(sourceID) != m_subDetector || m_srcIdMap.subDet(sourceID) != m_subDetector ||
m_srcIdMap->daqOrRoi(sourceID) != 1 || m_srcIdMap.daqOrRoi(sourceID) != 1 ||
(m_srcIdMap->slink(sourceID) != 0 && m_srcIdMap->slink(sourceID) != 2) || (m_srcIdMap.slink(sourceID) != 0 && m_srcIdMap.slink(sourceID) != 2) ||
m_srcIdMap->crate(sourceID) < m_crateOffsetHw || m_srcIdMap.crate(sourceID) < m_crateOffsetHw ||
m_srcIdMap->crate(sourceID) >= m_crateOffsetHw + m_crates) { m_srcIdMap.crate(sourceID) >= m_crateOffsetHw + m_crates) {
m_errorTool->rodError(robid, L1CaloSubBlock::ERROR_ROD_ID); m_errorTool->rodError(robid, L1CaloSubBlock::ERROR_ROD_ID);
if (debug) { if (debug) {
msg() << "Wrong source identifier in data: " msg() << "Wrong source identifier in data: "
...@@ -187,14 +169,14 @@ StatusCode CpmRoiByteStreamV1Tool::convert( ...@@ -187,14 +169,14 @@ StatusCode CpmRoiByteStreamV1Tool::convert(
// Check minor version // Check minor version
const int minorVersion = (*rob)->rod_version() & 0xffff; const int minorVersion = (*rob)->rod_version() & 0xffff;
if (minorVersion > m_srcIdMap->minorVersionPreLS1()) { if (minorVersion > m_srcIdMap.minorVersionPreLS1()) {
if (debug) msg() << "Skipping post-LS1 data" << endmsg; if (debug) msg() << "Skipping post-LS1 data" << endmsg;
continue; continue;
} }
const int rodCrate = m_srcIdMap->crate(sourceID); const int rodCrate = m_srcIdMap.crate(sourceID);
if (debug) { if (debug) {
msg() << "Treating crate " << rodCrate msg() << "Treating crate " << rodCrate
<< " slink " << m_srcIdMap->slink(sourceID) << endmsg; << " slink " << m_srcIdMap.slink(sourceID) << endmsg;
} }
// First word may be User Header // First word may be User Header
...@@ -217,26 +199,26 @@ StatusCode CpmRoiByteStreamV1Tool::convert( ...@@ -217,26 +199,26 @@ StatusCode CpmRoiByteStreamV1Tool::convert(
while (payload != payloadEnd) { while (payload != payloadEnd) {
if (L1CaloSubBlock::wordType(*payload) == L1CaloSubBlock::HEADER) { if (L1CaloSubBlock::wordType(*payload) == L1CaloSubBlock::HEADER) {
m_subBlock->clear(); subBlock.clear();
payload = m_subBlock->read(payload, payloadEnd); payload = subBlock.read(payload, payloadEnd);
if (debug) { if (debug) {
msg() << "CPM RoI sub-block: Crate " << m_subBlock->crate() msg() << "CPM RoI sub-block: Crate " << subBlock.crate()
<< " Module " << m_subBlock->module() << endmsg; << " Module " << subBlock.module() << endmsg;
} }
// Unpack sub-block // Unpack sub-block
if (m_subBlock->dataWords() && !m_subBlock->unpack()) { if (subBlock.dataWords() && !subBlock.unpack()) {
if (debug) { if (debug) {
std::string errMsg(m_subBlock->unpackErrorMsg()); std::string errMsg(subBlock.unpackErrorMsg());
msg() << "CPM RoI sub-block unpacking failed: " << errMsg << endmsg; msg() << "CPM RoI sub-block unpacking failed: " << errMsg << endmsg;
} }
rodErr = m_subBlock->unpackErrorCode(); rodErr = subBlock.unpackErrorCode();
break; break;
} }
const int numChips = 8; const int numChips = 8;
const int numLocs = 2; const int numLocs = 2;
for (int chip = 0; chip < numChips; ++chip) { for (int chip = 0; chip < numChips; ++chip) {
for (int loc = 0; loc < numLocs; ++loc) { for (int loc = 0; loc < numLocs; ++loc) {
const LVL1::CPMRoI roi = m_subBlock->roi(chip, loc); const LVL1::CPMRoI roi = subBlock.roi(chip, loc);
if (roi.hits() || roi.error()) { if (roi.hits() || roi.error()) {
roiCollection->push_back(new LVL1::CPMRoI(roi)); roiCollection->push_back(new LVL1::CPMRoI(roi));
} }
...@@ -289,27 +271,31 @@ StatusCode CpmRoiByteStreamV1Tool::convert( ...@@ -289,27 +271,31 @@ StatusCode CpmRoiByteStreamV1Tool::convert(
StatusCode CpmRoiByteStreamV1Tool::convert( StatusCode CpmRoiByteStreamV1Tool::convert(
const DataVector<LVL1::CPMRoI>* const roiCollection, const DataVector<LVL1::CPMRoI>* const roiCollection,
RawEventWrite* const re) RawEventWrite* const re) const
{ {
const bool debug = msgLvl(MSG::DEBUG); const bool debug = msgLvl(MSG::DEBUG);
if (debug) msg(MSG::DEBUG); if (debug) msg(MSG::DEBUG);
// Clear the event assembler // Clear the event assembler
m_fea->clear(); FullEventAssembler<L1CaloSrcIdMap> fea;
uint16_t minorVersion = m_srcIdMap->minorVersionPreLS1(); uint16_t minorVersion = m_srcIdMap.minorVersionPreLS1();
m_fea->setRodMinorVersion(minorVersion); fea.setRodMinorVersion(minorVersion);
m_rodStatusMap.clear();
// Pointer to ROD data vector // Pointer to ROD data vector
FullEventAssembler<L1CaloSrcIdMap>::RODDATA* theROD = 0; FullEventAssembler<L1CaloSrcIdMap>::RODDATA* theROD = 0;
// Sub-block for neutral format
CpmRoiSubBlockV1 subBlock;
// Set up the container map // Set up the container map
setupCpmRoiMap(roiCollection); // CPM RoI map
CpmRoiMap::const_iterator mapIter = m_roiMap.begin(); CpmRoiMap roiMap;
CpmRoiMap::const_iterator mapIterEnd = m_roiMap.end(); setupCpmRoiMap(roiCollection, roiMap);
CpmRoiMap::const_iterator mapIter = roiMap.begin();
CpmRoiMap::const_iterator mapIterEnd = roiMap.end();
// Loop over data // Loop over data
...@@ -334,22 +320,21 @@ StatusCode CpmRoiByteStreamV1Tool::convert( ...@@ -334,22 +320,21 @@ StatusCode CpmRoiByteStreamV1Tool::convert(
<< "Data Version/Format: " << m_version << "Data Version/Format: " << m_version
<< " " << m_dataFormat << endmsg; << " " << m_dataFormat << endmsg;
} }
const uint32_t rodIdCpm = m_srcIdMap->getRodID(hwCrate, slink, daqOrRoi, const uint32_t rodIdCpm = m_srcIdMap.getRodID(hwCrate, slink, daqOrRoi,
m_subDetector); m_subDetector);
theROD = m_fea->getRodData(rodIdCpm); theROD = fea.getRodData(rodIdCpm);
if (neutralFormat) { if (neutralFormat) {
const L1CaloUserHeader userHeader; const L1CaloUserHeader userHeader;
theROD->push_back(userHeader.header()); theROD->push_back(userHeader.header());
} }
m_rodStatusMap.insert(make_pair(rodIdCpm, m_rodStatus));
} }
if (debug) msg() << "Module " << module << endmsg; if (debug) msg() << "Module " << module << endmsg;
// Create a sub-block (Neutral format only) // Create a sub-block (Neutral format only)
if (neutralFormat) { if (neutralFormat) {
m_subBlock->clear(); subBlock.clear();
m_subBlock->setRoiHeader(m_version, hwCrate, module); subBlock.setRoiHeader(m_version, hwCrate, module);
} }
// Find CPM RoIs for this module // Find CPM RoIs for this module
...@@ -361,7 +346,7 @@ StatusCode CpmRoiByteStreamV1Tool::convert( ...@@ -361,7 +346,7 @@ StatusCode CpmRoiByteStreamV1Tool::convert(
if (roi->cpm() < module) continue; if (roi->cpm() < module) continue;
if (roi->cpm() > module) break; if (roi->cpm() > module) break;
if (roi->hits() || roi->error()) { if (roi->hits() || roi->error()) {
if (neutralFormat) m_subBlock->fillRoi(*roi); if (neutralFormat) subBlock.fillRoi(*roi);
else theROD->push_back(roi->roiWord()); else theROD->push_back(roi->roiWord());
} }
} }
...@@ -369,71 +354,94 @@ StatusCode CpmRoiByteStreamV1Tool::convert( ...@@ -369,71 +354,94 @@ StatusCode CpmRoiByteStreamV1Tool::convert(
// Pack and write the sub-block // Pack and write the sub-block
if (neutralFormat) { if (neutralFormat) {
if ( !m_subBlock->pack()) { if ( !subBlock.pack()) {
msg(MSG::ERROR) << "CPMRoI sub-block packing failed" << endmsg; msg(MSG::ERROR) << "CPMRoI sub-block packing failed" << endmsg;
return StatusCode::FAILURE; return StatusCode::FAILURE;
} }
if (debug) { if (debug) {
msg() << "CPMRoI sub-block data words: " msg() << "CPMRoI sub-block data words: "
<< m_subBlock->dataWords() << endmsg; << subBlock.dataWords() << endmsg;
} }
m_subBlock->write(theROD); subBlock.write(theROD);
} }
} }
} }
// Fill the raw event // Fill the raw event
m_fea->fill(re, msg()); fea.fill(re, msg());
// Set ROD status words
//L1CaloRodStatus::setStatus(re, m_rodStatusMap, m_srcIdMap);
return StatusCode::SUCCESS; return StatusCode::SUCCESS;
} }
// Return reference to vector with all possible Source Identifiers // Return reference to vector with all possible Source Identifiers
std::vector<uint32_t> CpmRoiByteStreamV1Tool::makeSourceIDs (bool roiDaq) const
{
std::vector<uint32_t> sourceIDs;
if (roiDaq) {
sourceIDs = m_sourceIDsProp;
}
else {
sourceIDs = m_sourceIDsRoIBProp;
}
if (sourceIDs.empty()) {
const int maxCrates = m_crates + m_crateOffsetHw;
const int maxSlinks = m_srcIdMap.maxSlinks();
for (int hwCrate = m_crateOffsetHw; hwCrate < maxCrates; ++hwCrate)
{
for (int slink = 0; slink < maxSlinks; ++slink)
{
const int daqOrRoi = 1;
const uint32_t rodId = m_srcIdMap.getRodID(hwCrate, slink, daqOrRoi,
m_subDetector);
const uint32_t robId = m_srcIdMap.getRobID(rodId);
if (roiDaq)
{
if (slink < 2) sourceIDs.push_back(robId);
}
else if (slink >= 2) sourceIDs.push_back(robId);
}
}
}
return sourceIDs;
}
const std::vector<uint32_t>& CpmRoiByteStreamV1Tool::sourceIDs( const std::vector<uint32_t>& CpmRoiByteStreamV1Tool::sourceIDs(
const std::string& sgKey) const std::string& sgKey) const
{ {
const std::string flag("RoIB"); const std::string flag("RoIB");
const std::string::size_type pos = sgKey.find(flag); const std::string::size_type pos = sgKey.find(flag);
const bool roiDaq = const bool roiDaq =
(pos == std::string::npos || pos != sgKey.length() - flag.length()); (pos == std::string::npos || pos != sgKey.length() - flag.length());
const bool empty = (roiDaq) ? m_sourceIDs.empty() : m_sourceIDsRoIB.empty();
if (empty) { if (roiDaq) {
const int maxCrates = m_crates + m_crateOffsetHw; static const std::vector<uint32_t> sourceIDs = makeSourceIDs(roiDaq);
const int maxSlinks = m_srcIdMap->maxSlinks(); return sourceIDs;
for (int hwCrate = m_crateOffsetHw; hwCrate < maxCrates; ++hwCrate) { }
for (int slink = 0; slink < maxSlinks; ++slink) { else {
const int daqOrRoi = 1; static const std::vector<uint32_t> sourceIDsRoIB = makeSourceIDs(roiDaq);
const uint32_t rodId = m_srcIdMap->getRodID(hwCrate, slink, daqOrRoi, return sourceIDsRoIB;
m_subDetector);
const uint32_t robId = m_srcIdMap->getRobID(rodId);
if (roiDaq) {
if (slink < 2) m_sourceIDs.push_back(robId);
} else if (slink >= 2) m_sourceIDsRoIB.push_back(robId);
}
}
} }
return (roiDaq) ? m_sourceIDs : m_sourceIDsRoIB;
} }
// Set up CPM RoI map // Set up CPM RoI map
void CpmRoiByteStreamV1Tool::setupCpmRoiMap(const CpmRoiCollection* void CpmRoiByteStreamV1Tool::setupCpmRoiMap(const CpmRoiCollection*
const roiCollection) const roiCollection,
CpmRoiMap& roiMap) const
{ {
m_roiMap.clear(); roiMap.clear();
if (roiCollection) { if (roiCollection) {
CpmRoiCollection::const_iterator pos = roiCollection->begin(); CpmRoiCollection::const_iterator pos = roiCollection->begin();
CpmRoiCollection::const_iterator pose = roiCollection->end(); CpmRoiCollection::const_iterator pose = roiCollection->end();
for (; pos != pose; ++pos) { for (; pos != pose; ++pos) {
const LVL1::CPMRoI* const roi = *pos; const LVL1::CPMRoI* const roi = *pos;
const uint32_t key = roi->roiWord(); const uint32_t key = roi->roiWord();
m_roiMap.insert(std::make_pair(key, roi)); roiMap.insert(std::make_pair(key, roi));
} }
} }
} }
......
/* /*
Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
*/ */
#ifndef TRIGT1CALOBYTESTREAM_CPMROIBYTESTREAMV1TOOL_H #ifndef TRIGT1CALOBYTESTREAM_CPMROIBYTESTREAMV1TOOL_H
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include <string> #include <string>
#include <vector> #include <vector>
#include "L1CaloSrcIdMap.h"
#include "AthenaBaseComps/AthAlgTool.h" #include "AthenaBaseComps/AthAlgTool.h"
#include "ByteStreamCnvSvcBase/IROBDataProviderSvc.h" #include "ByteStreamCnvSvcBase/IROBDataProviderSvc.h"
#include "ByteStreamData/RawEvent.h" #include "ByteStreamData/RawEvent.h"
...@@ -52,19 +53,18 @@ class CpmRoiByteStreamV1Tool : public AthAlgTool { ...@@ -52,19 +53,18 @@ class CpmRoiByteStreamV1Tool : public AthAlgTool {
/// AlgTool InterfaceID /// AlgTool InterfaceID
static const InterfaceID& interfaceID(); static const InterfaceID& interfaceID();
virtual StatusCode initialize(); virtual StatusCode initialize() override;
virtual StatusCode finalize();
/// Convert ROB fragments to CPM RoIs /// Convert ROB fragments to CPM RoIs
StatusCode convert(const IROBDataProviderSvc::VROBFRAG& robFrags, StatusCode convert(const IROBDataProviderSvc::VROBFRAG& robFrags,
DataVector<LVL1::CPMRoI>* roiCollection); DataVector<LVL1::CPMRoI>* roiCollection) const;
/// Convert CPM RoI to bytestream /// Convert CPM RoI to bytestream
StatusCode convert(const DataVector<LVL1::CPMRoI>* roiCollection, StatusCode convert(const DataVector<LVL1::CPMRoI>* roiCollection,
RawEventWrite* re); RawEventWrite* re) const;
/// Return reference to vector with all possible Source Identifiers /// Return reference to vector with all possible Source Identifiers
const std::vector<uint32_t>& sourceIDs(const std::string& sgKey); const std::vector<uint32_t>& sourceIDs(const std::string& sgKey) const;
private: private:
...@@ -74,49 +74,41 @@ class CpmRoiByteStreamV1Tool : public AthAlgTool { ...@@ -74,49 +74,41 @@ class CpmRoiByteStreamV1Tool : public AthAlgTool {
typedef OFFLINE_FRAGMENTS_NAMESPACE::PointerType ROBPointer; typedef OFFLINE_FRAGMENTS_NAMESPACE::PointerType ROBPointer;
typedef OFFLINE_FRAGMENTS_NAMESPACE::PointerType RODPointer; typedef OFFLINE_FRAGMENTS_NAMESPACE::PointerType RODPointer;
std::vector<uint32_t> makeSourceIDs (bool roiDaq) const;
/// Set up CPM RoI map /// Set up CPM RoI map
void setupCpmRoiMap(const CpmRoiCollection* roiCollection); void setupCpmRoiMap(const CpmRoiCollection* roiCollection,
CpmRoiMap& roiMap) const;
/// Error collection tool /// Property: Error collection tool
ToolHandle<LVL1BS::L1CaloErrorByteStreamTool> m_errorTool; ToolHandle<LVL1BS::L1CaloErrorByteStreamTool> m_errorTool;
/// Hardware crate number offset /// Property: Hardware crate number offset
int m_crateOffsetHw; int m_crateOffsetHw;
/// Software crate number offset /// Property: Software crate number offset
int m_crateOffsetSw; int m_crateOffsetSw;
/// Sub_block header version /// Property: Sub_block header version
int m_version; int m_version;
/// Data compression format /// Property: Data compression format
int m_dataFormat; int m_dataFormat;
/// Number of crates /// Number of crates
int m_crates; const int m_crates;
/// Number of CPM modules per crate /// Number of CPM modules per crate
int m_modules; const int m_modules;
/// Number of slinks per crate when writing out bytestream /// Property: Number of slinks per crate when writing out bytestream
int m_slinks; int m_slinks;
/// Minimum crate number when writing out bytestream /// Property: Minimum crate number when writing out bytestream
int m_crateMin; int m_crateMin;
/// Maximum crate number when writing out bytestream /// Property: Maximum crate number when writing out bytestream
int m_crateMax; int m_crateMax;
/// ROB source IDs /// Property: ROB source IDs
std::vector<uint32_t> m_sourceIDs; std::vector<uint32_t> m_sourceIDsProp;
/// ROB source IDs for RoIB /// Property: ROB source IDs for RoIB
std::vector<uint32_t> m_sourceIDsRoIB; std::vector<uint32_t> m_sourceIDsRoIBProp;
/// Sub-detector type /// Sub-detector type
eformat::SubDetector m_subDetector; const eformat::SubDetector m_subDetector;
/// Source ID converter /// Source ID converter
L1CaloSrcIdMap* m_srcIdMap; const L1CaloSrcIdMap m_srcIdMap;
/// Sub-block for neutral format
CpmRoiSubBlockV1* m_subBlock;
/// CPM RoI map
CpmRoiMap m_roiMap;
/// ROD Status words
std::vector<uint32_t>* m_rodStatus;
/// ROD status map
std::map<uint32_t, std::vector<uint32_t>* > m_rodStatusMap;
/// Event assembler
FullEventAssembler<L1CaloSrcIdMap>* m_fea;
}; };
} // end namespace } // end namespace
......
/* /*
Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
*/ */
...@@ -43,8 +43,8 @@ CpmRoiByteStreamV2Tool::CpmRoiByteStreamV2Tool(const std::string &type, ...@@ -43,8 +43,8 @@ CpmRoiByteStreamV2Tool::CpmRoiByteStreamV2Tool(const std::string &type,
: AthAlgTool(type, name, parent), : AthAlgTool(type, name, parent),
m_robDataProvider("ROBDataProviderSvc", name), m_robDataProvider("ROBDataProviderSvc", name),
m_errorTool("LVL1BS::L1CaloErrorByteStreamTool/L1CaloErrorByteStreamTool"), m_errorTool("LVL1BS::L1CaloErrorByteStreamTool/L1CaloErrorByteStreamTool"),
m_crates(4), m_modules(14), m_srcIdMap(0), m_subBlock(0), m_rodStatus(0), m_crates(4), m_modules(14),
m_fea(0) m_subDetector (eformat::TDAQ_CALO_CLUSTER_PROC_ROI)
{ {
declareInterface<CpmRoiByteStreamV2Tool>(this); declareInterface<CpmRoiByteStreamV2Tool>(this);
...@@ -56,9 +56,9 @@ CpmRoiByteStreamV2Tool::CpmRoiByteStreamV2Tool(const std::string &type, ...@@ -56,9 +56,9 @@ CpmRoiByteStreamV2Tool::CpmRoiByteStreamV2Tool(const std::string &type,
"Offset of CP crate numbers in RDOs"); "Offset of CP crate numbers in RDOs");
// Properties for reading bytestream only // Properties for reading bytestream only
declareProperty("ROBSourceIDs", m_sourceIDs, declareProperty("ROBSourceIDs", m_sourceIDsProp,
"ROB fragment source identifiers"); "ROB fragment source identifiers");
declareProperty("ROBSourceIDsRoIB", m_sourceIDsRoIB, declareProperty("ROBSourceIDsRoIB", m_sourceIDsRoIBProp,
"ROB fragment source identifiers for RoIBs"); "ROB fragment source identifiers for RoIBs");
// Properties for writing bytestream only // Properties for writing bytestream only
...@@ -89,33 +89,11 @@ CpmRoiByteStreamV2Tool::~CpmRoiByteStreamV2Tool() ...@@ -89,33 +89,11 @@ CpmRoiByteStreamV2Tool::~CpmRoiByteStreamV2Tool()
StatusCode CpmRoiByteStreamV2Tool::initialize() StatusCode CpmRoiByteStreamV2Tool::initialize()
{ {
msg(MSG::INFO) << "Initializing " << name() << " - package version " ATH_MSG_INFO ("Initializing " << name() << " - package version "
<< PACKAGE_VERSION << endmsg; << PACKAGE_VERSION);
StatusCode sc = m_errorTool.retrieve(); ATH_CHECK( m_errorTool.retrieve() );
if (sc.isFailure())
{
msg(MSG::ERROR) << "Failed to retrieve tool " << m_errorTool << endmsg;
return sc;
}
else msg(MSG::INFO) << "Retrieved tool " << m_errorTool << endmsg;
m_subDetector = eformat::TDAQ_CALO_CLUSTER_PROC_ROI;
m_srcIdMap = new L1CaloSrcIdMap();
m_rodStatus = new std::vector<uint32_t>(2);
m_subBlock = new CpmRoiSubBlockV2();
m_fea = new FullEventAssembler<L1CaloSrcIdMap>();
return StatusCode::SUCCESS;
}
// Finalize
StatusCode CpmRoiByteStreamV2Tool::finalize()
{
delete m_fea;
delete m_subBlock;
delete m_rodStatus;
delete m_srcIdMap;
return StatusCode::SUCCESS; return StatusCode::SUCCESS;
} }
...@@ -123,7 +101,7 @@ StatusCode CpmRoiByteStreamV2Tool::finalize() ...@@ -123,7 +101,7 @@ StatusCode CpmRoiByteStreamV2Tool::finalize()
StatusCode CpmRoiByteStreamV2Tool::convert( StatusCode CpmRoiByteStreamV2Tool::convert(
const std::string& sgKey, const std::string& sgKey,
DataVector<LVL1::CPMTobRoI> *const collection) DataVector<LVL1::CPMTobRoI> *const collection) const
{ {
const std::vector<uint32_t>& vID(sourceIDs(sgKey)); const std::vector<uint32_t>& vID(sourceIDs(sgKey));
// // get ROB fragments // // get ROB fragments
...@@ -135,11 +113,14 @@ StatusCode CpmRoiByteStreamV2Tool::convert( ...@@ -135,11 +113,14 @@ StatusCode CpmRoiByteStreamV2Tool::convert(
StatusCode CpmRoiByteStreamV2Tool::convert( StatusCode CpmRoiByteStreamV2Tool::convert(
const IROBDataProviderSvc::VROBFRAG &robFrags, const IROBDataProviderSvc::VROBFRAG &robFrags,
DataVector<LVL1::CPMTobRoI> *const roiCollection) DataVector<LVL1::CPMTobRoI> *const roiCollection) const
{ {
const bool debug = msgLvl(MSG::DEBUG); const bool debug = msgLvl(MSG::DEBUG);
if (debug) msg(MSG::DEBUG); if (debug) msg(MSG::DEBUG);
// Sub-block for neutral format
CpmRoiSubBlockV2 subBlock;
// Loop over ROB fragments // Loop over ROB fragments
int robCount = 0; int robCount = 0;
...@@ -196,12 +177,12 @@ StatusCode CpmRoiByteStreamV2Tool::convert( ...@@ -196,12 +177,12 @@ StatusCode CpmRoiByteStreamV2Tool::convert(
// Check identifier // Check identifier
const uint32_t sourceID = (*rob)->rod_source_id(); const uint32_t sourceID = (*rob)->rod_source_id();
if (m_srcIdMap->getRobID(sourceID) != robid || if (m_srcIdMap.getRobID(sourceID) != robid ||
m_srcIdMap->subDet(sourceID) != m_subDetector || m_srcIdMap.subDet(sourceID) != m_subDetector ||
m_srcIdMap->daqOrRoi(sourceID) != 1 || m_srcIdMap.daqOrRoi(sourceID) != 1 ||
(m_srcIdMap->slink(sourceID) != 0 && m_srcIdMap->slink(sourceID) != 2) || (m_srcIdMap.slink(sourceID) != 0 && m_srcIdMap.slink(sourceID) != 2) ||
m_srcIdMap->crate(sourceID) < m_crateOffsetHw || m_srcIdMap.crate(sourceID) < m_crateOffsetHw ||
m_srcIdMap->crate(sourceID) >= m_crateOffsetHw + m_crates) m_srcIdMap.crate(sourceID) >= m_crateOffsetHw + m_crates)
{ {
m_errorTool->rodError(robid, L1CaloSubBlock::ERROR_ROD_ID); m_errorTool->rodError(robid, L1CaloSubBlock::ERROR_ROD_ID);
if (debug) if (debug)
...@@ -214,16 +195,16 @@ StatusCode CpmRoiByteStreamV2Tool::convert( ...@@ -214,16 +195,16 @@ StatusCode CpmRoiByteStreamV2Tool::convert(
// Check minor version // Check minor version
const int minorVersion = (*rob)->rod_version() & 0xffff; const int minorVersion = (*rob)->rod_version() & 0xffff;
if (minorVersion <= m_srcIdMap->minorVersionPreLS1()) if (minorVersion <= m_srcIdMap.minorVersionPreLS1())
{ {
if (debug) msg() << "Skipping pre-LS1 data" << endmsg; if (debug) msg() << "Skipping pre-LS1 data" << endmsg;
continue; continue;
} }
const int rodCrate = m_srcIdMap->crate(sourceID); const int rodCrate = m_srcIdMap.crate(sourceID);
if (debug) if (debug)
{ {
msg() << "Treating crate " << rodCrate msg() << "Treating crate " << rodCrate
<< " slink " << m_srcIdMap->slink(sourceID) << endmsg; << " slink " << m_srcIdMap.slink(sourceID) << endmsg;
} }
// First word may be User Header // First word may be User Header
...@@ -250,22 +231,22 @@ StatusCode CpmRoiByteStreamV2Tool::convert( ...@@ -250,22 +231,22 @@ StatusCode CpmRoiByteStreamV2Tool::convert(
if (L1CaloSubBlock::wordType(*payload) == L1CaloSubBlock::HEADER) if (L1CaloSubBlock::wordType(*payload) == L1CaloSubBlock::HEADER)
{ {
m_subBlock->clear(); subBlock.clear();
payload = m_subBlock->read(payload, payloadEnd); payload = subBlock.read(payload, payloadEnd);
if (debug) if (debug)
{ {
msg() << "CPM RoI sub-block: Crate " << m_subBlock->crate() msg() << "CPM RoI sub-block: Crate " << subBlock.crate()
<< " Module " << m_subBlock->module() << endmsg; << " Module " << subBlock.module() << endmsg;
} }
// Unpack sub-block // Unpack sub-block
if (m_subBlock->dataWords() && !m_subBlock->unpack()) if (subBlock.dataWords() && !subBlock.unpack())
{ {
if (debug) if (debug)
{ {
std::string errMsg(m_subBlock->unpackErrorMsg()); std::string errMsg(subBlock.unpackErrorMsg());
msg() << "CPM RoI sub-block unpacking failed: " << errMsg << endmsg; msg() << "CPM RoI sub-block unpacking failed: " << errMsg << endmsg;
} }
rodErr = m_subBlock->unpackErrorCode(); rodErr = subBlock.unpackErrorCode();
break; break;
} }
const int numChips = 8; const int numChips = 8;
...@@ -277,7 +258,7 @@ StatusCode CpmRoiByteStreamV2Tool::convert( ...@@ -277,7 +258,7 @@ StatusCode CpmRoiByteStreamV2Tool::convert(
{ {
for (int type = 0; type < numTypes; ++type) for (int type = 0; type < numTypes; ++type)
{ {
const LVL1::CPMTobRoI roi = m_subBlock->roi(chip, loc, type); const LVL1::CPMTobRoI roi = subBlock.roi(chip, loc, type);
if (roi.energy() || roi.isolation()) if (roi.energy() || roi.isolation())
{ {
roiCollection->push_back(new LVL1::CPMTobRoI(roi)); roiCollection->push_back(new LVL1::CPMTobRoI(roi));
...@@ -351,34 +332,38 @@ StatusCode CpmRoiByteStreamV2Tool::convert( ...@@ -351,34 +332,38 @@ StatusCode CpmRoiByteStreamV2Tool::convert(
StatusCode CpmRoiByteStreamV2Tool::convert( StatusCode CpmRoiByteStreamV2Tool::convert(
const DataVector<LVL1::CPMTobRoI> *const roiCollection, const DataVector<LVL1::CPMTobRoI> *const roiCollection,
RawEventWrite *const re) RawEventWrite *const re) const
{ {
const bool debug = msgLvl(MSG::DEBUG); const bool debug = msgLvl(MSG::DEBUG);
if (debug) msg(MSG::DEBUG); if (debug) msg(MSG::DEBUG);
// Clear the event assembler // Clear the event assembler
FullEventAssembler<L1CaloSrcIdMap> fea;
m_fea->clear(); const uint16_t minorVersion = m_srcIdMap.minorVersion();
const uint16_t minorVersion = m_srcIdMap->minorVersion(); fea.setRodMinorVersion(minorVersion);
m_fea->setRodMinorVersion(minorVersion);
m_rodStatusMap.clear();
// Pointer to ROD data vector // Pointer to ROD data vector
FullEventAssembler<L1CaloSrcIdMap>::RODDATA *theROD = 0; FullEventAssembler<L1CaloSrcIdMap>::RODDATA *theROD = 0;
// Sub-block for neutral format
CpmRoiSubBlockV2 subBlock;
// Set up the container map // Set up the container map
setupCpmRoiMap(roiCollection); // CPM RoI map
CpmRoiMap roiMap;
setupCpmRoiMap(roiCollection, roiMap);
if (debug) if (debug)
{ {
msg() << "Number of RoIs to be written = " << roiCollection->size() msg() << "Number of RoIs to be written = " << roiCollection->size()
<< " (collection), " << m_roiMap.size() << " (map)" << " (collection), " << roiMap.size() << " (map)"
<< endmsg; << endmsg;
} }
int count = 0; int count = 0;
CpmRoiMap::const_iterator mapIter = m_roiMap.begin(); CpmRoiMap::const_iterator mapIter = roiMap.begin();
CpmRoiMap::const_iterator mapIterEnd = m_roiMap.end(); CpmRoiMap::const_iterator mapIterEnd = roiMap.end();
// Loop over data // Loop over data
...@@ -407,15 +392,14 @@ StatusCode CpmRoiByteStreamV2Tool::convert( ...@@ -407,15 +392,14 @@ StatusCode CpmRoiByteStreamV2Tool::convert(
<< "Data Version/Format: " << m_version << "Data Version/Format: " << m_version
<< " " << m_dataFormat << endmsg; << " " << m_dataFormat << endmsg;
} }
const uint32_t rodIdCpm = m_srcIdMap->getRodID(hwCrate, slink, daqOrRoi, const uint32_t rodIdCpm = m_srcIdMap.getRodID(hwCrate, slink, daqOrRoi,
m_subDetector); m_subDetector);
theROD = m_fea->getRodData(rodIdCpm); theROD = fea.getRodData(rodIdCpm);
if (neutralFormat) if (neutralFormat)
{ {
const L1CaloUserHeader userHeader; const L1CaloUserHeader userHeader;
theROD->push_back(userHeader.header()); theROD->push_back(userHeader.header());
} }
m_rodStatusMap.insert(make_pair(rodIdCpm, m_rodStatus));
} }
if (debug) msg() << "Module " << module << endmsg; if (debug) msg() << "Module " << module << endmsg;
...@@ -423,8 +407,8 @@ StatusCode CpmRoiByteStreamV2Tool::convert( ...@@ -423,8 +407,8 @@ StatusCode CpmRoiByteStreamV2Tool::convert(
if (neutralFormat) if (neutralFormat)
{ {
m_subBlock->clear(); subBlock.clear();
m_subBlock->setRoiHeader(m_version, hwCrate, module); subBlock.setRoiHeader(m_version, hwCrate, module);
} }
// Find CPM RoIs for this module // Find CPM RoIs for this module
...@@ -438,7 +422,7 @@ StatusCode CpmRoiByteStreamV2Tool::convert( ...@@ -438,7 +422,7 @@ StatusCode CpmRoiByteStreamV2Tool::convert(
if (roi->cpm() > module) break; if (roi->cpm() > module) break;
if (roi->energy() || roi->isolation()) if (roi->energy() || roi->isolation())
{ {
if (neutralFormat) m_subBlock->fillRoi(*roi); if (neutralFormat) subBlock.fillRoi(*roi);
else theROD->push_back(roi->roiWord()); else theROD->push_back(roi->roiWord());
++count; ++count;
} }
...@@ -448,7 +432,7 @@ StatusCode CpmRoiByteStreamV2Tool::convert( ...@@ -448,7 +432,7 @@ StatusCode CpmRoiByteStreamV2Tool::convert(
if (neutralFormat) if (neutralFormat)
{ {
if ( !m_subBlock->pack()) if ( !subBlock.pack())
{ {
msg(MSG::ERROR) << "CPMTobRoI sub-block packing failed" << endmsg; msg(MSG::ERROR) << "CPMTobRoI sub-block packing failed" << endmsg;
return StatusCode::FAILURE; return StatusCode::FAILURE;
...@@ -456,9 +440,9 @@ StatusCode CpmRoiByteStreamV2Tool::convert( ...@@ -456,9 +440,9 @@ StatusCode CpmRoiByteStreamV2Tool::convert(
if (debug) if (debug)
{ {
msg() << "CPMTobRoI sub-block data words: " msg() << "CPMTobRoI sub-block data words: "
<< m_subBlock->dataWords() << endmsg; << subBlock.dataWords() << endmsg;
} }
m_subBlock->write(theROD); subBlock.write(theROD);
} }
} }
} }
...@@ -469,55 +453,73 @@ StatusCode CpmRoiByteStreamV2Tool::convert( ...@@ -469,55 +453,73 @@ StatusCode CpmRoiByteStreamV2Tool::convert(
// Fill the raw event // Fill the raw event
m_fea->fill(re, msg()); fea.fill(re, msg());
if (debug) msg() << MSG::dec; // fill seems to leave it in hex if (debug) msg() << MSG::dec; // fill seems to leave it in hex
// Set ROD status words
//L1CaloRodStatus::setStatus(re, m_rodStatusMap, m_srcIdMap);
return StatusCode::SUCCESS; return StatusCode::SUCCESS;
} }
// Return reference to vector with all possible Source Identifiers // Return reference to vector with all possible Source Identifiers
const std::vector<uint32_t> &CpmRoiByteStreamV2Tool::sourceIDs( std::vector<uint32_t> CpmRoiByteStreamV2Tool::makeSourceIDs (bool roiDaq) const
const std::string &sgKey)
{ {
const std::string flag("RoIB"); std::vector<uint32_t> sourceIDs;
const std::string::size_type pos = sgKey.find(flag);
const bool roiDaq = if (roiDaq) {
(pos == std::string::npos || pos != sgKey.length() - flag.length()); sourceIDs = m_sourceIDsProp;
const bool empty = (roiDaq) ? m_sourceIDs.empty() : m_sourceIDsRoIB.empty(); }
if (empty) else {
{ sourceIDs = m_sourceIDsRoIBProp;
}
if (sourceIDs.empty()) {
const int maxCrates = m_crates + m_crateOffsetHw; const int maxCrates = m_crates + m_crateOffsetHw;
const int maxSlinks = m_srcIdMap->maxSlinks(); const int maxSlinks = m_srcIdMap.maxSlinks();
for (int hwCrate = m_crateOffsetHw; hwCrate < maxCrates; ++hwCrate) for (int hwCrate = m_crateOffsetHw; hwCrate < maxCrates; ++hwCrate)
{ {
for (int slink = 0; slink < maxSlinks; ++slink) for (int slink = 0; slink < maxSlinks; ++slink)
{ {
const int daqOrRoi = 1; const int daqOrRoi = 1;
const uint32_t rodId = m_srcIdMap->getRodID(hwCrate, slink, daqOrRoi, const uint32_t rodId = m_srcIdMap.getRodID(hwCrate, slink, daqOrRoi,
m_subDetector); m_subDetector);
const uint32_t robId = m_srcIdMap->getRobID(rodId); const uint32_t robId = m_srcIdMap.getRobID(rodId);
if (roiDaq) if (roiDaq)
{ {
if (slink < 2) m_sourceIDs.push_back(robId); if (slink < 2) sourceIDs.push_back(robId);
} }
else if (slink >= 2) m_sourceIDsRoIB.push_back(robId); else if (slink >= 2) sourceIDs.push_back(robId);
} }
} }
}
return sourceIDs;
}
const std::vector<uint32_t> &CpmRoiByteStreamV2Tool::sourceIDs(
const std::string &sgKey) const
{
const std::string flag("RoIB");
const std::string::size_type pos = sgKey.find(flag);
const bool roiDaq =
(pos == std::string::npos || pos != sgKey.length() - flag.length());
if (roiDaq) {
static const std::vector<uint32_t> sourceIDs = makeSourceIDs(roiDaq);
return sourceIDs;
}
else {
static const std::vector<uint32_t> sourceIDsRoIB = makeSourceIDs(roiDaq);
return sourceIDsRoIB;
} }
return (roiDaq) ? m_sourceIDs : m_sourceIDsRoIB;
} }
// Set up CPM RoI map // Set up CPM RoI map
void CpmRoiByteStreamV2Tool::setupCpmRoiMap(const CpmRoiCollection * void CpmRoiByteStreamV2Tool::setupCpmRoiMap(const CpmRoiCollection *
const roiCollection) const roiCollection,
CpmRoiMap& roiMap) const
{ {
m_roiMap.clear(); roiMap.clear();
if (roiCollection) if (roiCollection)
{ {
CpmRoiCollection::const_iterator pos = roiCollection->begin(); CpmRoiCollection::const_iterator pos = roiCollection->begin();
...@@ -531,7 +533,7 @@ void CpmRoiByteStreamV2Tool::setupCpmRoiMap(const CpmRoiCollection * ...@@ -531,7 +533,7 @@ void CpmRoiByteStreamV2Tool::setupCpmRoiMap(const CpmRoiCollection *
const int chip = roi->chip(); const int chip = roi->chip();
const int loc = roi->location() >> 2; const int loc = roi->location() >> 2;
const uint32_t key = (((((((crate << 4) | cpm) << 3) | chip) << 1) | loc) << 1) | type; const uint32_t key = (((((((crate << 4) | cpm) << 3) | chip) << 1) | loc) << 1) | type;
m_roiMap.insert(std::make_pair(key, roi)); roiMap.insert(std::make_pair(key, roi));
} }
} }
} }
......
/* /*
Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
*/ */
#ifndef TRIGT1CALOBYTESTREAM_CPMROIBYTESTREAMV2TOOL_H #ifndef TRIGT1CALOBYTESTREAM_CPMROIBYTESTREAMV2TOOL_H
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include <string> #include <string>
#include <vector> #include <vector>
#include "L1CaloSrcIdMap.h"
#include "AthenaBaseComps/AthAlgTool.h" #include "AthenaBaseComps/AthAlgTool.h"
#include "ByteStreamCnvSvcBase/IROBDataProviderSvc.h" #include "ByteStreamCnvSvcBase/IROBDataProviderSvc.h"
#include "ByteStreamData/RawEvent.h" #include "ByteStreamData/RawEvent.h"
...@@ -52,21 +53,20 @@ class CpmRoiByteStreamV2Tool : public AthAlgTool { ...@@ -52,21 +53,20 @@ class CpmRoiByteStreamV2Tool : public AthAlgTool {
/// AlgTool InterfaceID /// AlgTool InterfaceID
static const InterfaceID& interfaceID(); static const InterfaceID& interfaceID();
virtual StatusCode initialize(); virtual StatusCode initialize() override;
virtual StatusCode finalize();
/// Convert ROB fragments to CPM RoIs /// Convert ROB fragments to CPM RoIs
StatusCode convert(const std::string& robFrags, StatusCode convert(const std::string& robFrags,
DataVector<LVL1::CPMTobRoI>* roiCollection); DataVector<LVL1::CPMTobRoI>* roiCollection) const;
StatusCode convert(const IROBDataProviderSvc::VROBFRAG& robFrags, StatusCode convert(const IROBDataProviderSvc::VROBFRAG& robFrags,
DataVector<LVL1::CPMTobRoI>* roiCollection); DataVector<LVL1::CPMTobRoI>* roiCollection) const;
/// Convert CPM RoI to bytestream /// Convert CPM RoI to bytestream
StatusCode convert(const DataVector<LVL1::CPMTobRoI>* roiCollection, StatusCode convert(const DataVector<LVL1::CPMTobRoI>* roiCollection,
RawEventWrite* re); RawEventWrite* re) const;
/// Return reference to vector with all possible Source Identifiers /// Return reference to vector with all possible Source Identifiers
const std::vector<uint32_t>& sourceIDs(const std::string& sgKey); const std::vector<uint32_t>& sourceIDs(const std::string& sgKey) const;
private: private:
...@@ -76,54 +76,46 @@ class CpmRoiByteStreamV2Tool : public AthAlgTool { ...@@ -76,54 +76,46 @@ class CpmRoiByteStreamV2Tool : public AthAlgTool {
typedef OFFLINE_FRAGMENTS_NAMESPACE::PointerType ROBPointer; typedef OFFLINE_FRAGMENTS_NAMESPACE::PointerType ROBPointer;
typedef OFFLINE_FRAGMENTS_NAMESPACE::PointerType RODPointer; typedef OFFLINE_FRAGMENTS_NAMESPACE::PointerType RODPointer;
std::vector<uint32_t> makeSourceIDs (bool roiDaq) const;
/// Set up CPM RoI map /// Set up CPM RoI map
void setupCpmRoiMap(const CpmRoiCollection* roiCollection); void setupCpmRoiMap(const CpmRoiCollection* roiCollection,
CpmRoiMap& roiMap) const;
ServiceHandle<IROBDataProviderSvc> m_robDataProvider; ServiceHandle<IROBDataProviderSvc> m_robDataProvider;
/// Error collection tool /// Property: Error collection tool
ToolHandle<LVL1BS::L1CaloErrorByteStreamTool> m_errorTool; ToolHandle<LVL1BS::L1CaloErrorByteStreamTool> m_errorTool;
/// Hardware crate number offset /// Property: Hardware crate number offset
int m_crateOffsetHw; int m_crateOffsetHw;
/// Software crate number offset /// Property: Software crate number offset
int m_crateOffsetSw; int m_crateOffsetSw;
/// Sub_block header version /// Property: Sub_block header version
int m_version; int m_version;
/// Data compression format /// Property: Data compression format
int m_dataFormat; int m_dataFormat;
/// Number of crates /// Number of crates
int m_crates; const int m_crates;
/// Number of CPM modules per crate /// Number of CPM modules per crate
int m_modules; const int m_modules;
/// Number of slinks per crate when writing out bytestream /// Property: Number of slinks per crate when writing out bytestream
int m_slinks; int m_slinks;
/// Minimum crate number when writing out bytestream /// Property: Minimum crate number when writing out bytestream
int m_crateMin; int m_crateMin;
/// Maximum crate number when writing out bytestream /// Property: Maximum crate number when writing out bytestream
int m_crateMax; int m_crateMax;
/// ROB source IDs /// Property: ROB source IDs
std::vector<uint32_t> m_sourceIDs; std::vector<uint32_t> m_sourceIDsProp;
/// ROB source IDs for RoIB /// Property: ROB source IDs for RoIB
std::vector<uint32_t> m_sourceIDsRoIB; std::vector<uint32_t> m_sourceIDsRoIBProp;
/// Sub-detector type /// Sub-detector type
eformat::SubDetector m_subDetector; const eformat::SubDetector m_subDetector;
/// Source ID converter /// Source ID converter
L1CaloSrcIdMap* m_srcIdMap; const L1CaloSrcIdMap m_srcIdMap;
/// Sub-block for neutral format
CpmRoiSubBlockV2* m_subBlock; // Property: M7 format follows old specification, so we have two zeros
/// CPM RoI map
CpmRoiMap m_roiMap;
/// ROD Status words
std::vector<uint32_t>* m_rodStatus;
/// ROD status map
std::map<uint32_t, std::vector<uint32_t>* > m_rodStatusMap;
/// Event assembler
FullEventAssembler<L1CaloSrcIdMap>* m_fea;
// M7 format follows old specification, so we have two zeros
// as most significant bits instead of 0xa // as most significant bits instead of 0xa
bool m_isM7Format; bool m_isM7Format;
}; };
} // end namespace } // end namespace
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment