ATLAS Offline Software
CpmRoiByteStreamV1Cnv.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 
6 #include <vector>
7 #include <stdint.h>
8 
11 
13 #include "ByteStreamData/ROBData.h"
14 
16 
17 #include "GaudiKernel/DataObject.h"
18 #include "GaudiKernel/IOpaqueAddress.h"
19 #include "GaudiKernel/IRegistry.h"
20 #include "GaudiKernel/ISvcLocator.h"
21 #include "GaudiKernel/StatusCode.h"
22 
26 
27 #include "TrigT1CaloEvent/CPMRoI.h"
28 
29 #include "CpmRoiByteStreamV1Cnv.h"
30 #include "CpmRoiByteStreamV1Tool.h"
31 
32 namespace LVL1BS {
33 
35  : AthConstConverter( storageType(), classID(), svcloc, "CpmRoiByteStreamV1Cnv" ),
36  m_tool("LVL1BS::CpmRoiByteStreamV1Tool/CpmRoiByteStreamV1Tool"),
37  m_robDataProvider("ROBDataProviderSvc", name())
38 {
39 }
40 
42 {
43 }
44 
45 // CLID
46 
48 {
50 }
51 
53 {
55 }
56 
57 // Init method gets all necessary services etc.
58 
59 
61 {
63  ATH_CHECK( m_tool.retrieve() );
64 
65  // Get ROBDataProvider
66  StatusCode sc = m_robDataProvider.retrieve();
67  if ( sc.isFailure() ) {
68  ATH_MSG_WARNING ("Failed to retrieve service " << m_robDataProvider );
69  // return is disabled for Write BS which does not require ROBDataProviderSvc
70  // return sc ;
71  }
72 
73  return StatusCode::SUCCESS;
74 }
75 
76 // createObj should create the RDO from bytestream.
77 
79  DataObject*& pObj ) const
80 {
81  ByteStreamAddress *pBS_Addr;
82  pBS_Addr = dynamic_cast<ByteStreamAddress *>( pAddr );
83  if ( !pBS_Addr ) {
84  ATH_MSG_ERROR( " Can not cast to ByteStreamAddress " );
85  return StatusCode::FAILURE;
86  }
87 
88  const std::string nm = *( pBS_Addr->par() );
89 
90  ATH_MSG_DEBUG( " Creating Objects " << nm );
91 
92  // get SourceIDs
93  const std::vector<uint32_t>& vID(m_tool->sourceIDs(nm));
94 
95  // get ROB fragments
97  m_robDataProvider->getROBData(Gaudi::Hive::currentContext(), vID, robFrags );
98 
99  // size check
100  auto roiCollection = std::make_unique<DataVector<LVL1::CPMRoI> >();
101  ATH_MSG_DEBUG( " Number of ROB fragments is " << robFrags.size() );
102  if (robFrags.size() == 0) {
103  pObj = SG::asStorable(std::move(roiCollection)) ;
104  return StatusCode::SUCCESS;
105  }
106 
107  ATH_CHECK( m_tool->convert(robFrags, roiCollection.get()) );
108 
109  pObj = SG::asStorable(std::move(roiCollection));
110 
111  return StatusCode::SUCCESS;
112 }
113 
114 // createRep should create the bytestream from RDOs.
115 
117  IOpaqueAddress*& pAddr ) const
118 {
119  DataVector<LVL1::CPMRoI>* roiCollection = 0;
120  if( !SG::fromStorable( pObj, roiCollection ) ) {
121  REPORT_ERROR (StatusCode::FAILURE) << " Cannot cast to DataVector<CPMRoI>";
122  return StatusCode::FAILURE;
123  }
124 
125  const std::string nm = pObj->registry()->name();
126 
127  pAddr = new ByteStreamAddress( classID(), nm, "" );
128 
129  // Convert to ByteStream
130  return m_tool->convert( roiCollection );
131 }
132 
133 } // end namespace
LVL1BS::CpmRoiByteStreamV1Cnv::CpmRoiByteStreamV1Cnv
CpmRoiByteStreamV1Cnv(ISvcLocator *svcloc)
Definition: CpmRoiByteStreamV1Cnv.cxx:34
REPORT_ERROR
#define REPORT_ERROR(SC)
Report an error.
Definition: Control/AthenaKernel/AthenaKernel/errorcheck.h:355
ID
std::vector< Identifier > ID
Definition: CalibHitIDCheck.h:24
SG::fromStorable
bool fromStorable(DataObject *pDObj, T *&pTrans, bool quiet=false, IRegisterTransient *irt=0, bool isConst=true)
Definition: StorableConversions.h:167
StorableConversions.h
convert to and from a SG storable
ROBData.h
Defines the ROB data entity. The ROB data is an abstract entity that is used to discase the raw event...
initialize
void initialize()
Definition: run_EoverP.cxx:894
LVL1BS::CpmRoiByteStreamV1Cnv::createObjConst
virtual StatusCode createObjConst(IOpaqueAddress *pAddr, DataObject *&pObj) const override
Create CPM RoIs from ByteStream.
Definition: CpmRoiByteStreamV1Cnv.cxx:78
CpmRoiByteStreamV1Tool.h
AthConstConverter
Gaudi converter base class with const interfaces.
Definition: AthConstConverter.h:33
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
LVL1BS::CpmRoiByteStreamV1Cnv::m_tool
ToolHandle< LVL1BS::CpmRoiByteStreamV1Tool > m_tool
Tool that does the actual work.
Definition: CpmRoiByteStreamV1Cnv.h:52
SG::asStorable
DataObject * asStorable(SG::DataObjectSharedPtr< T > pObject)
Definition: DataObjectSharedPtr.h:65
LVL1BS::CpmRoiByteStreamV1Cnv::m_robDataProvider
ServiceHandle< IROBDataProviderSvc > m_robDataProvider
Service for reading bytestream.
Definition: CpmRoiByteStreamV1Cnv.h:55
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
ClassID_traits.h
a traits class that associates a CLID to a type T It also detects whether T inherits from Gaudi DataO...
RawEvent.h
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
ByteStreamAddress
IOpaqueAddress for ByteStreamCnvSvc, with ROB ids.
Definition: ByteStreamAddress.h:28
ClassID_traits
Default, invalid implementation of ClassID_traits.
Definition: Control/AthenaKernel/AthenaKernel/ClassID_traits.h:40
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
IROBDataProviderSvc::VROBFRAG
std::vector< const ROBF * > VROBFRAG
Definition: IROBDataProviderSvc.h:27
ByteStreamAddress.h
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
CLID
uint32_t CLID
The Class ID type.
Definition: Event/xAOD/xAODCore/xAODCore/ClassID_traits.h:47
CPMRoI.h
ByteStreamAddress::storageType
static constexpr long storageType()
Definition: ByteStreamAddress.h:51
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
LVL1BS::CpmRoiByteStreamV1Cnv::createRepConst
virtual StatusCode createRepConst(DataObject *pObj, IOpaqueAddress *&pAddr) const override
Create ByteStream from CPM RoIs.
Definition: CpmRoiByteStreamV1Cnv.cxx:116
errorcheck.h
Helpers for checking error return status codes and reporting errors.
LVL1BS::CpmRoiByteStreamV1Cnv::initialize
virtual StatusCode initialize() override
Definition: CpmRoiByteStreamV1Cnv.cxx:60
LVL1BS::CpmRoiByteStreamV1Cnv::storageType
static long storageType()
Definition: CpmRoiByteStreamV1Cnv.cxx:52
DataVector.h
An STL vector of pointers that by default owns its pointed-to elements.
CalibCoolCompareRT.nm
nm
Definition: CalibCoolCompareRT.py:110
CpmRoiByteStreamV1Cnv.h
LVL1BS::CpmRoiByteStreamV1Cnv::classID
static const CLID & classID()
Definition: CpmRoiByteStreamV1Cnv.cxx:47
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
LVL1BS
Definition: ZdcModifySlices.h:10
LVL1BS::CpmRoiByteStreamV1Cnv::~CpmRoiByteStreamV1Cnv
virtual ~CpmRoiByteStreamV1Cnv()
Definition: CpmRoiByteStreamV1Cnv.cxx:41
IROBDataProviderSvc.h