ATLAS Offline Software
Loading...
Searching...
No Matches
CscRdoContByteStreamTool.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
6
7
8
10#include "CscROD_Encoder.h"
12#include <map>
13// contructor
14Muon::CscRdoContByteStreamTool::CscRdoContByteStreamTool(const std::string& type, const std::string& name, const IInterface* parent) :
15 base_class(type, name, parent) {
16 declareProperty("RODVersion", m_rodVersion = 0x0200);
17 declareProperty("IsCosmicData", m_isCosmic = false);
18 declareProperty("IsOldCosmicData", m_isOldCosmic = false);
19}
20
21// initialize
23 ATH_CHECK(AthAlgTool::initialize());
24 ATH_MSG_DEBUG("Muon::CscRdoContByteStreamTool::initialize()");
25
26 // get the cabling service
27 ATH_CHECK(m_cabling.retrieve());
28 ATH_CHECK(m_idHelperSvc.retrieve());
29
30 ATH_CHECK(m_byteStreamCnvSvc.retrieve());
31
32 // create CSC RDO ID to source ID mapper
33 m_hid2re.set(m_cabling.get(), &m_idHelperSvc->cscIdHelper());
34 if (m_isCosmic) {
35 m_hid2re.set_isCosmic();
36 if (m_isOldCosmic) m_hid2re.set_isOldCosmic();
37 }
38 return StatusCode::SUCCESS;
39}
40
41// convert CSC RDO to ByteStream
42StatusCode Muon::CscRdoContByteStreamTool::convert(const CscRawDataContainer* cont, MsgStream& log) const {
43 // Get the event assembler
45 ATH_CHECK(m_byteStreamCnvSvc->getFullEventAssembler(fea, "CscRdoContByteStream"));
46
47 fea->idMap().set(m_cabling.get(), &m_idHelperSvc->cscIdHelper());
48 if (m_cabling->nROD() == 16)
49 fea->setRodMinorVersion(0x400);
50 else
52
53 StatusCode sc = StatusCode::SUCCESS;
54
56
57 // a map for ROD ID onto Encoder
58 std::map<uint32_t, CscROD_Encoder> mapEncoder;
59
62 CscRawDataContainer::const_iterator it_col_end = cont->end();
63
64 bool first = true;
65 for (; it_col != it_col_end; ++it_col) {
67 if (first && !(*it_col)->empty()) {
68 first = false;
69 uint32_t eventType = (*it_col)->eventType();
70 fea->setDetEvtType(eventType);
71 }
72
73 // get ROD ID
74 const uint32_t rodId = m_hid2re.getRodID(*it_col);
75
76 // map the RDO onto Encoder
77 mapEncoder[rodId].setRdo(*it_col);
78 mapEncoder[rodId].setIdHelper(&m_idHelperSvc->cscIdHelper());
79 }
80
81 // loop over map and fill all ROD Data Blocks
82 std::map<uint32_t, CscROD_Encoder>::iterator it_map = mapEncoder.begin();
83 std::map<uint32_t, CscROD_Encoder>::iterator it_map_end = mapEncoder.end();
84 for (; it_map != it_map_end; ++it_map) {
85 // get ROD data address
86 theROD = fea->getRodData((*it_map).first);
87
88 // fill ROD data
89 sc = ((*it_map).second).fillROD(*theROD, log);
90 if (sc.isFailure()) return StatusCode::RECOVERABLE;
91 }
92
93 return sc;
94}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_DEBUG(x)
macros to associate a CLID to a type
static Double_t sc
This container provides access to collections of CSC RDOs and a mechanism for recording them.
Template class for assembling a full atlas raw event from subfragments.
void setRodMinorVersion(uint16_t m)
change the ROD minor version
void setDetEvtType(uint32_t m)
change Detector Event Type
std::vector< uint32_t > RODDATA
ROD data as a vector of unsigned int.
RODDATA * getRodData(uint32_t id)
get a block of ROD data
IDMAP_t & idMap()
Return reference to IDMAP.
const_iterator end() const
return const_iterator for end of container
const_iterator begin() const
return const_iterator for first entry
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
virtual StatusCode convert(const CscRawDataContainer *cont, MsgStream &log) const override
ServiceHandle< IByteStreamCnvSvc > m_byteStreamCnvSvc
ServiceHandle< CSCcablingSvc > m_cabling
CscRdoContByteStreamTool(const std::string &type, const std::string &name, const IInterface *parent)
constructor
virtual StatusCode initialize() override