ATLAS Offline Software
Loading...
Searching...
No Matches
JepReadByteStreamV1Cnv.icc
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
5
6#include <vector>
7#include <stdint.h>
8#include <typeinfo>
9
10#include "ByteStreamCnvSvcBase/ByteStreamAddress.h"
11#include "ByteStreamCnvSvcBase/IROBDataProviderSvc.h"
12
13#include "ByteStreamData/RawEvent.h"
14#include "ByteStreamData/ROBData.h"
15
16#include "GaudiKernel/DataObject.h"
17#include "GaudiKernel/IOpaqueAddress.h"
18#include "GaudiKernel/ISvcLocator.h"
19#include "GaudiKernel/StatusCode.h"
20
21#include "AthenaKernel/ClassID_traits.h"
22#include "AthenaKernel/StorableConversions.h"
23#include "AthenaKernel/errorcheck.h"
24
25#include "JepByteStreamV1Tool.h"
26
27namespace LVL1BS {
28
29template <typename Container>
30JepReadByteStreamV1Cnv<Container>::JepReadByteStreamV1Cnv( ISvcLocator* svcloc )
31 : AthConstConverter( storageType(), classID(), svcloc, "JepReadByteStreamV1Cnv" ),
32 m_tool("LVL1BS::JepByteStreamV1Tool/JepByteStreamV1Tool"),
33 m_robDataProvider("ROBDataProviderSvc", name())
34{
35}
36
37template <typename Container>
38JepReadByteStreamV1Cnv<Container>::~JepReadByteStreamV1Cnv()
39{
40}
41
42// CLID
43
44template <typename Container>
45CLID JepReadByteStreamV1Cnv<Container>::classID()
46{
47 return ClassID_traits<Container>::ID();
48}
49
50template <typename Container>
51long JepReadByteStreamV1Cnv<Container>::storageType()
52{
53 return ByteStreamAddress::storageType();
54}
55
56// Init method gets all necessary services etc.
57
58
59template <typename Container>
60StatusCode JepReadByteStreamV1Cnv<Container>::initialize()
61{
62 ATH_CHECK( Converter::initialize() );
63 ATH_CHECK( m_tool.retrieve() );
64 ATH_CHECK( m_robDataProvider.retrieve() );
65
66 return StatusCode::SUCCESS;
67}
68
69// createObj should create the RDO from bytestream.
70
71template <typename Container>
72StatusCode JepReadByteStreamV1Cnv<Container>::createObjConst( IOpaqueAddress* pAddr,
73 DataObject*& pObj ) const
74{
75 ByteStreamAddress* pBS_Addr{};
76 ATH_CHECK( (pBS_Addr = dynamic_cast<ByteStreamAddress*>(pAddr)) != nullptr );
77
78 const EventContext& ctx = pBS_Addr->getEventContext();
79 const std::string nm = *( pBS_Addr->par() );
80
81 ATH_MSG_DEBUG( " Creating Objects " << nm );
82
83 // get SourceIDs
84 const std::vector<uint32_t>& vID(m_tool->sourceIDs());
85
86 // get ROB fragments
87 IROBDataProviderSvc::VROBFRAG robFrags;
88 m_robDataProvider->getROBData(ctx, vID, robFrags );
89
90 // size check
91 auto collection = std::make_unique<Container>();
92 ATH_MSG_DEBUG( " Number of ROB fragments is " << robFrags.size() );
93
94 if (robFrags.size() == 0) {
95 pObj = SG::asStorable(std::move(collection)) ;
96 return StatusCode::SUCCESS;
97 }
98
99 ATH_CHECK( m_tool->convert(nm, robFrags, collection.get()) );
100
101 pObj = SG::asStorable(std::move(collection));
102
103 return StatusCode::SUCCESS;
104}
105
106} // end namespace