2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
10#include "ByteStreamCnvSvcBase/ByteStreamAddress.h"
11#include "ByteStreamCnvSvcBase/IROBDataProviderSvc.h"
13#include "ByteStreamData/RawEvent.h"
14#include "ByteStreamData/ROBData.h"
16#include "GaudiKernel/DataObject.h"
17#include "GaudiKernel/IOpaqueAddress.h"
18#include "GaudiKernel/ISvcLocator.h"
19#include "GaudiKernel/StatusCode.h"
21#include "AthenaKernel/ClassID_traits.h"
22#include "AthenaKernel/StorableConversions.h"
23#include "AthenaKernel/errorcheck.h"
25#include "JepRoiByteStreamV2Tool.h"
29template <typename Container>
30JepRoiReadByteStreamV2Cnv<Container>::JepRoiReadByteStreamV2Cnv(
32 : AthConstConverter( storageType(), classID(), svcloc, "JepRoiReadByteStreamV2Cnv" ),
33 m_tool("LVL1BS::JepRoiByteStreamV2Tool/JepRoiByteStreamV2Tool"),
34 m_robDataProvider("ROBDataProviderSvc", name())
38template <typename Container>
39JepRoiReadByteStreamV2Cnv<Container>::~JepRoiReadByteStreamV2Cnv()
45template <typename Container>
46CLID JepRoiReadByteStreamV2Cnv<Container>::classID()
48 return ClassID_traits<Container>::ID();
51template <typename Container>
52long JepRoiReadByteStreamV2Cnv<Container>::storageType()
54 return ByteStreamAddress::storageType();
57// Init method gets all necessary services etc.
60template <typename Container>
61StatusCode JepRoiReadByteStreamV2Cnv<Container>::initialize()
63 ATH_CHECK( Converter::initialize() );
64 ATH_CHECK( m_tool.retrieve() );
65 ATH_CHECK( m_robDataProvider.retrieve() );
67 return StatusCode::SUCCESS;
70// createObj should create the RDO from bytestream.
72template <typename Container>
73StatusCode JepRoiReadByteStreamV2Cnv<Container>::createObjConst( IOpaqueAddress* pAddr,
74 DataObject*& pObj ) const
76 ByteStreamAddress* pBS_Addr{};
77 ATH_CHECK( (pBS_Addr = dynamic_cast<ByteStreamAddress*>(pAddr)) != nullptr );
79 const EventContext& ctx = pBS_Addr->getEventContext();
80 const std::string nm = *( pBS_Addr->par() );
82 ATH_MSG_DEBUG( " Creating Objects " << nm );
85 const std::vector<uint32_t>& vID(m_tool->sourceIDs(nm));
88 IROBDataProviderSvc::VROBFRAG robFrags;
89 m_robDataProvider->getROBData(ctx, vID, robFrags );
92 auto collection = std::make_unique<Container>();
93 ATH_MSG_DEBUG( " Number of ROB fragments is " << robFrags.size() );
95 if (robFrags.size() == 0) {
96 pObj = SG::asStorable(std::move(collection)) ;
97 return StatusCode::SUCCESS;
100 ATH_CHECK( m_tool->convert(robFrags, collection.get()) );
102 pObj = SG::asStorable(std::move(collection));
104 return StatusCode::SUCCESS;