2 Copyright (C) 2002-2020 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 "JepByteStreamV2Tool.h"
29template <typename Container>
30JepReadByteStreamV2Cnv<Container>::JepReadByteStreamV2Cnv( ISvcLocator* svcloc )
31 : AthConstConverter( storageType(), classID(), svcloc, "JepReadByteStreamV2Cnv" ),
32 m_tool("LVL1BS::JepByteStreamV2Tool/JepByteStreamV2Tool"),
33 m_robDataProvider("ROBDataProviderSvc", name())
37template <typename Container>
38JepReadByteStreamV2Cnv<Container>::~JepReadByteStreamV2Cnv()
44template <typename Container>
45const CLID& JepReadByteStreamV2Cnv<Container>::classID()
47 return ClassID_traits<Container>::ID();
50long JepReadByteStreamV2Cnv<Container>::storageType()
52 return ByteStreamAddress::storageType();
55// Init method gets all necessary services etc.
58template <typename Container>
59StatusCode JepReadByteStreamV2Cnv<Container>::initialize()
61 ATH_CHECK( Converter::initialize() );
62 ATH_CHECK( m_tool.retrieve() );
63 ATH_CHECK( m_robDataProvider.retrieve() );
65 return StatusCode::SUCCESS;
68// createObj should create the RDO from bytestream.
70template <typename Container>
71StatusCode JepReadByteStreamV2Cnv<Container>::createObjConst( IOpaqueAddress* pAddr,
72 DataObject*& pObj ) const
74 ByteStreamAddress *pBS_Addr;
75 pBS_Addr = dynamic_cast<ByteStreamAddress *>( pAddr );
77 ATH_MSG_ERROR( " Can not cast to ByteStreamAddress " );
78 return StatusCode::FAILURE;
81 const std::string nm = *( pBS_Addr->par() );
83 ATH_MSG_DEBUG( " Creating Objects " << nm );
86 const std::vector<uint32_t>& vID(m_tool->sourceIDs(nm));
89 IROBDataProviderSvc::VROBFRAG robFrags;
90 m_robDataProvider->getROBData( vID, robFrags );
93 auto collection = std::make_unique<Container>();
94 ATH_MSG_DEBUG( " Number of ROB fragments is " << robFrags.size() );
96 if (robFrags.size() == 0) {
97 pObj = SG::asStorable(std::move(collection)) ;
98 return StatusCode::SUCCESS;
101 ATH_CHECK( m_tool->convert(robFrags, collection.get()) );
103 pObj = SG::asStorable(std::move(collection));