ATLAS Offline Software
Loading...
Searching...
No Matches
TGC_RawDataProviderToolMT.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3*/
4
6
8
9//================ Constructor =================================================
10
12 const std::string& t,
13 const std::string& n,
14 const IInterface* p) :
15 base_class(t, n, p)
16{
17 declareProperty("TgcContainerCacheKey", m_rdoContainerCacheKey, "Optional external cache for the TGC container");
18}
19
20//================ Initialisation =================================================
21
23{
24 // call base class initialise
26
27 // Initialise the container cache if available
28 ATH_CHECK( m_rdoContainerCacheKey.initialize( !m_rdoContainerCacheKey.key().empty() ) );
29
30 ATH_MSG_INFO( "initialize() successful in " << name() );
31 return StatusCode::SUCCESS;
32}
33
34//============================================================================================
35
36StatusCode Muon::TGC_RawDataProviderToolMT::convert(const ROBFragmentList& vecRobs) const {
37 return this->convert( vecRobs, Gaudi::Hive::currentContext() );
38}
39
40StatusCode Muon::TGC_RawDataProviderToolMT::convert(const ROBFragmentList& vecRobs, const EventContext& ctx) const
41{
42
43 SG::WriteHandle<TgcRdoContainer> rdoContainerHandle(m_rdoContainerKey, ctx);
44
45 // Split the methods to have one where we use the cache and one where we just setup the container
46 const bool externalCacheRDO = !m_rdoContainerCacheKey.key().empty();
47 if(!externalCacheRDO){
48 ATH_CHECK( rdoContainerHandle.record( std::make_unique<TgcRdoContainer> (m_maxhashtoUse) ) );
49 ATH_MSG_DEBUG( "Created TGC container" );
50 }
51 else{
53 ATH_CHECK(update.isValid());
54 ATH_CHECK(rdoContainerHandle.record (std::make_unique<TgcRdoContainer>( update.ptr() )));
55 ATH_MSG_DEBUG("Created container using cache for " << m_rdoContainerCacheKey.key());
56 }
57
58 TgcRdoContainer* rdoContainer = rdoContainerHandle.ptr();
59
60 // this should never happen, but since we dereference the pointer, we should check
61 if(!rdoContainer) {
62 ATH_MSG_ERROR("TGC RDO Container is null, cannot decode TGC data");
63 return StatusCode::FAILURE;
64 }
65
66 return convertIntoContainer(vecRobs, *rdoContainer);
67}
68
69StatusCode Muon::TGC_RawDataProviderToolMT::convert(const ROBFragmentList& vecRobs, const std::vector<IdentifierHash>&) const {
70 // This function does not use the IdentifierHash so we pass to the EventContext function which also does not use it
71 return this->convert( vecRobs, Gaudi::Hive::currentContext() );
72}
73
74StatusCode Muon::TGC_RawDataProviderToolMT::convert(const ROBFragmentList& vecRobs, const std::vector<IdentifierHash>& /*ids*/, const EventContext& ctx) const
75{
76 return convert(vecRobs, ctx);
77}
78
80 return this->convert( Gaudi::Hive::currentContext() );
81}
82
83StatusCode Muon::TGC_RawDataProviderToolMT::convert(const EventContext& ctx) const
84{
85 std::vector<const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment*> vecOfRobf;
86 const std::vector<uint32_t>& robIds = m_hid2re.allRobIds();
87
88 m_robDataProvider->getROBData(ctx, robIds, vecOfRobf);
89
90 return convert(vecOfRobf, ctx);
91}
92
93StatusCode Muon::TGC_RawDataProviderToolMT::convert(const std::vector<IdentifierHash>& rdoIdhVect) const {
94 return this->convert( rdoIdhVect, Gaudi::Hive::currentContext() );
95}
96
97StatusCode Muon::TGC_RawDataProviderToolMT::convert(const std::vector<IdentifierHash>& rdoIdhVect, const EventContext& ctx) const
98{
99 std::vector<const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment*> vecOfRobf = getROBData(rdoIdhVect, ctx);
100
101 return convert(vecOfRobf, rdoIdhVect, ctx);
102}
103
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_INFO(x)
#define ATH_MSG_DEBUG(x)
virtual StatusCode initialize()
Standard AlgTool method.
TGC_RawDataProviderToolMT(const std::string &t, const std::string &n, const IInterface *p)
Default constructor.
virtual StatusCode initialize() override
Standard AlgTool method.
SG::UpdateHandleKey< TgcRdo_Cache > m_rdoContainerCacheKey
virtual StatusCode convert(const ROBFragmentList &vecRobs) const override
Old decoding method which uses IROBDataProviderSvc in TgcRdoToPrepDataTool.
virtual StatusCode convert() const override
New decoding methods which do not use IROBDataProviderSvc in TgcRdoToPrepDataTool.
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
pointer_type ptr()
Dereference the pointer.