ATLAS Offline Software
TileDigitsContByteStreamCnv.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 // Gaudi includes
6 #include "GaudiKernel/StatusCode.h"
7 #include "GaudiKernel/DataObject.h"
8 
9 // Athena includes
12 
17 #include "ByteStreamData/RawEvent.h"
18 
20 #include "AthenaKernel/CLASS_DEF.h"
21 
22 
23 // Tile includes
30 
31 #include <vector>
32 #include <string>
33 #include <stdint.h>
34 
35 
37  : AthConstConverter(storageType(), classID(), svcloc, "TileDigitsContByteStreamCnv")
38  , m_tool("TileDigitsContByteStreamTool")
39  , m_byteStreamEventAccess("ByteStreamCnvSvc", name())
40  , m_byteStreamCnvSvc(0)
41  , m_robSvc("ROBDataProviderSvc", name())
42  , m_decoder("TileROD_Decoder")
43  , m_hid2re(0)
44 {
45 }
46 
48 
50 
52 
54 
55  ATH_MSG_DEBUG(" initialize ");
56 
57  // Get ByteStreamCnvSvc
58  ATH_CHECK( m_byteStreamEventAccess.retrieve() );
60 
61  // retrieve Tool
62  ATH_CHECK( m_decoder.retrieve() );
63  m_hid2re = m_decoder->getHid2re();
64 
65  ATH_CHECK( m_tool.retrieve() );
66 
67  ATH_CHECK( m_robSvc.retrieve() );
68 
69 
70  return StatusCode::SUCCESS;
71 }
72 
73 StatusCode TileDigitsContByteStreamCnv::createObjConst(IOpaqueAddress* pAddr, DataObject*& pObj) const
74 {
75  ATH_MSG_DEBUG(" Executing createObj method ");
76 
77  ByteStreamAddress *pRE_Addr;
78  pRE_Addr = dynamic_cast<ByteStreamAddress*>(pAddr);
79  if(!pRE_Addr) {
80  ATH_MSG_ERROR(" Can not cast to ByteStreamAddress ");
81  return StatusCode::FAILURE;
82  }
83 
84  const std::string containerName(*(pRE_Addr->par()));
85  bool isTMDB(containerName == std::string("MuRcvDigitsCnt"));
86  bool isFELIX(containerName == std::string("TileDigitsFlxCnt"));
87  uint32_t newrob = 0x0;
88 
89 
90  std::vector<uint32_t> robid(1);
91  robid[0] = 0;
92  std::vector<const ROBDataProviderSvc::ROBF*> robf;
93 
94  TileMutableDigitsContainer* cont = m_queue.get (true);
95  ATH_CHECK( cont->status() );
96 
97  // iterate over all collections in a container and fill them
98  //
99  for (IdentifierHash hash : cont->GetAllCurrentHashes()) {
100  TileDigitsCollection* digitsCollection = cont->indexFindPtr (hash);
101  digitsCollection->clear();
102  TileDigitsCollection::ID collID = digitsCollection->identify();
103 
104  // find ROB
105  if (isTMDB) {
106  newrob = m_hid2re->getRobFromTileMuRcvFragID(collID);
107  } else if (isFELIX) {
109  } else {
110  newrob = m_hid2re->getRobFromFragID(collID);
111  }
112 
113  if (newrob != robid[0]) {
114  robid[0] = newrob;
115  robf.clear();
116  m_robSvc->getROBData(robid, robf);
117  }
118 
119  if (robf.size() > 0 ) {
120  if (isTMDB) {// reid for TMDB 0x5x010x
121  ATH_MSG_DEBUG(" Decoding TMDB digits in ROD fragment ");
122  m_decoder->fillCollection_TileMuRcv_Digi(robf[0], *digitsCollection);
123  }else if (isFELIX) {
124  ATH_MSG_DEBUG(" Decoding FELIX digits in ROD fragment ");
125  m_decoder->fillCollection_FELIX_Digi(robf[0], *digitsCollection);
126  } else {
127  m_decoder->fillCollection(robf[0], *digitsCollection);
128  }
129  } else {
131  digitsCollection->setFragBCID(0xDEAD | (status<<16));
132  ATH_MSG_DEBUG( "Status for " << ((isTMDB)?"TMDB ":"") << "drawer 0x" << MSG::hex << collID << " in Digi frag is 0x" << status << MSG::dec);
133  }
134 
135 
136  }
137 
138  ATH_MSG_DEBUG( "Creating digits container: " << containerName );
139 
140  TileDigitsContainer* basecont = cont;
141  pObj = SG::asStorable( basecont ) ;
142 
143 
144  return StatusCode::SUCCESS;
145 }
146 
147 
148 StatusCode TileDigitsContByteStreamCnv::createRepConst(DataObject* pObj, IOpaqueAddress*& pAddr) const
149 {
150  // convert TileDigitsContainer in the container into ByteStream
151 
152  ATH_MSG_DEBUG(" Executing createRep method ");
153 
154  // uint32_t runnum = re->header()->specific_part()->run_no();
155 
156  // get Full Event Assembler
158  std::string key("Tile");
160 
161  // create TileDigitsContainer
162  TileDigitsContainer* digicont(0) ;
163  SG::fromStorable(pObj, digicont );
164 
165  if(!digicont){
166  ATH_MSG_ERROR(" Can not cast to TileDigitsContainer ");
167  return StatusCode::FAILURE;
168  }
169 
170  std::string name = pObj->registry()->name();
171 
172  ByteStreamAddress* addr = new ByteStreamAddress(classID(), name, "");
173 
174  pAddr = addr;
175 
176  // call TileDigitsContByteStreamTool
177 
178  return m_tool->convert(digicont, fea);
179 }
180 
182 {
183  return Converter::finalize();
184 }
python.tests.PyTestsLib.finalize
def finalize(self)
_info( "content of StoreGate..." ) self.sg.dump()
Definition: PyTestsLib.py:53
TileDigitsContByteStreamCnv::m_byteStreamCnvSvc
ByteStreamCnvSvc * m_byteStreamCnvSvc
Definition: TileDigitsContByteStreamCnv.h:69
TileDigitsContByteStreamCnv::m_decoder
ToolHandle< TileROD_Decoder > m_decoder
Pointer to TileROD_Decoder.
Definition: TileDigitsContByteStreamCnv.h:75
TileDigitsCollection::ID
MyBase::ID ID
Definition: TileDigitsCollection.h:23
FullEventAssembler
Template class for assembling a full atlas raw event from subfragments.
Definition: FullEventAssembler.h:40
TileDigitsContByteStreamCnv::createRepConst
virtual StatusCode createRepConst(DataObject *pObj, IOpaqueAddress *&pAddr) const override
Convert the transient object to the requested representation.
Definition: TileDigitsContByteStreamCnv.cxx:148
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
SG::fromStorable
bool fromStorable(DataObject *pDObj, T *&pTrans, bool quiet=false, IRegisterTransient *irt=0, bool isConst=true)
Definition: StorableConversions.h:180
StorableConversions.h
convert to and from a SG storable
TileDigitsContByteStreamTool.h
TileMutableDataContainer::status
StatusCode status() const
Return the error status from the constructors.
initialize
void initialize()
Definition: run_EoverP.cxx:894
TileDigitsContByteStreamCnv::initialize
virtual StatusCode initialize() override
Definition: TileDigitsContByteStreamCnv.cxx:51
TileHid2RESrcID::getRobFromFragID
uint32_t getRobFromFragID(int frag_id) const
make a ROB SrcID for a fragment ID
Definition: TileHid2RESrcID.cxx:457
TileHid2RESrcID::getRobFromTileMuRcvFragID
uint32_t getRobFromTileMuRcvFragID(int frag_id) const
Definition: TileHid2RESrcID.cxx:579
TileDigitsContByteStreamCnv::m_hid2re
const TileHid2RESrcID * m_hid2re
Pointer to TileHid2RESrcID.
Definition: TileDigitsContByteStreamCnv.h:78
SG::asStorable
DataObject * asStorable(T *pObject)
Definition: StorableConversions.h:158
ROBDataProviderSvc.h
TileCalibUtils.h
AthConstConverter
Gaudi converter base class with const interfaces.
Definition: AthConstConverter.h:33
TileDigitsContainer
Definition: TileDigitsContainer.h:13
TileDigitsContByteStreamCnv.h
TileDigitsContByteStreamCnv::createObjConst
virtual StatusCode createObjConst(IOpaqueAddress *pAddr, DataObject *&pObj) const override
Create the transient representation of an object.
Definition: TileDigitsContByteStreamCnv.cxx:73
ClassID_traits::ID
static const CLID & ID()
the CLID of T
Definition: Control/AthenaKernel/AthenaKernel/ClassID_traits.h:50
ByteStreamCnvSvc
Gaudi Conversion Service class for ByteStream Persistency.
Definition: ByteStreamCnvSvc.h:34
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
TileROD_Decoder.h
TileDigitsContainer.h
RawEvent.h
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
TileMutableDataContainer
Helper for holding non-const raw data prior to recording in SG.
Definition: TileMutableDataContainer.h:52
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
ByteStreamAddress
IOpaqueAddress for ByteStreamCnvSvc, with ROB ids.
Definition: ByteStreamAddress.h:28
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
TileDigitsContByteStreamCnv::m_tool
ToolHandle< TileDigitsContByteStreamTool > m_tool
Definition: TileDigitsContByteStreamCnv.h:66
ByteStreamAddress.h
ByteStreamCnvSvc.h
CLID
uint32_t CLID
The Class ID type.
Definition: Event/xAOD/xAODCore/xAODCore/ClassID_traits.h:47
TileROD_Decoder::NO_ROB
@ NO_ROB
Definition: TileROD_Decoder.h:226
TileDigitsCollection::clear
void clear()
Clear everything for next event.
Definition: TileDigitsCollection.cxx:79
TileRawDataCollection::identify
ID identify() const
Definition: TileRawDataCollection.h:71
TileHid2RESrcID.h
ByteStreamAddress::storageType
static constexpr long storageType()
Definition: ByteStreamAddress.h:51
TileDigitsCollection
Definition: TileDigitsCollection.h:18
TileCalibUtils::FELIX_FRAGID_OFFSET
static const unsigned int FELIX_FRAGID_OFFSET
Offset for frag ID used for FELIX in frag ID to ROB ID map.
Definition: TileCalibUtils.h:157
TileMutableDataContainer::indexFindPtr
Collection * indexFindPtr(IdentifierHash hash)
Look up a (non-const) collection via hash.
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
errorcheck.h
Helpers for checking error return status codes and reporting errors.
TileDigitsContByteStreamCnv::m_byteStreamEventAccess
ServiceHandle< IByteStreamEventAccess > m_byteStreamEventAccess
Definition: TileDigitsContByteStreamCnv.h:68
StoreClearedIncident.h
Incident sent after a store is cleared.
TileDigitsCollection::setFragBCID
void setFragBCID(uint32_t bcid)
Set BCID.
Definition: TileDigitsCollection.h:113
TileDigitsContByteStreamCnv::TileDigitsContByteStreamCnv
TileDigitsContByteStreamCnv(ISvcLocator *svcloc)
Definition: TileDigitsContByteStreamCnv.cxx:36
CaloCondBlobAlgs_fillNoiseFromASCII.hash
dictionary hash
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:109
ByteStreamCnvSvcBase.h
TileDigitsContByteStreamCnv::m_robSvc
ServiceHandle< IROBDataProviderSvc > m_robSvc
Pointer to IROBDataProviderSvc.
Definition: TileDigitsContByteStreamCnv.h:72
merge.status
status
Definition: merge.py:17
ByteStreamCnvSvc::getFullEventAssembler
StatusCode getFullEventAssembler(T *&t, const std::string &nm)
Access to FullEventAssembler.
Definition: ByteStreamCnvSvc.h:121
TileDigitsContByteStreamCnv::classID
static const CLID & classID()
Definition: TileDigitsContByteStreamCnv.cxx:47
IdentifierHash
Definition: IdentifierHash.h:38
CLASS_DEF.h
macros to associate a CLID to a type
TileDigitsContByteStreamCnv::finalize
virtual StatusCode finalize() override
Definition: TileDigitsContByteStreamCnv.cxx:181
TileDigitsContByteStreamCnv::storageType
static long storageType()
Definition: TileDigitsContByteStreamCnv.cxx:49
AthConstConverter::name
std::string name() const
Definition: AthConstConverter.h:67
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37