ATLAS Offline Software
CSC_RawDataProviderTool.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 // CSC_RawDataProviderTool.cxx, (c) ATLAS Detector software
8 
10 
14 #include "ByteStreamData/ROBData.h"
18 #include "StoreGate/ReadHandle.h"
19 #include "StoreGate/WriteHandle.h"
20 
22 
23 //================ Constructor =================================================
24 
25 Muon::CSC_RawDataProviderTool::CSC_RawDataProviderTool(const std::string& t, const std::string& n, const IInterface* p) :
26  base_class(t, n, p) {}
27 
28 //================ Destructor =================================================
29 
31 
32 //================ Initialisation =================================================
33 
35  // call initialize from base class
37 
38  ATH_CHECK(m_idHelperSvc.retrieve());
39 
40  return StatusCode::SUCCESS;
41 }
42 
43 //============================================================================================
44 
45 // new one
46 StatusCode Muon::CSC_RawDataProviderTool::convert(const std::vector<IdentifierHash>& rdoIdhVect) const {
47  IdContext cscContext = m_idHelperSvc->cscIdHelper().module_context();
48 
49  std::vector<const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment*> vecOfRobf;
50  std::vector<uint32_t> robIds;
51 
52  for (unsigned int i = 0; i < rdoIdhVect.size(); ++i) {
53  uint32_t rob_id = 0xffff;
54  m_cabling->hash2RobFull(rdoIdhVect[i], rob_id);
55  robIds.push_back(rob_id);
56  }
57  m_robDataProvider->getROBData(robIds, vecOfRobf);
58  ATH_MSG_VERBOSE("Number of ROB fragments " << vecOfRobf.size());
59  return convert(vecOfRobf, rdoIdhVect);
60 }
61 
62 StatusCode Muon::CSC_RawDataProviderTool::convert(const EventContext& ctx) const {
63  std::vector<const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment*> vecOfRobf;
64  const std::vector<uint32_t>& robIds = m_hid2re.allRobIds();
65  ATH_MSG_VERBOSE("Number of ROB ids " << robIds.size());
66  // ask ROBDataProviderSvc for the vector of ROBFragment for all MDT ROBIDs
67  m_robDataProvider->getROBData(robIds, vecOfRobf);
68  ATH_MSG_VERBOSE("Number of ROB fragments " << vecOfRobf.size());
69 
70  return convert(vecOfRobf, ctx);
71 }
72 
73 StatusCode Muon::CSC_RawDataProviderTool::convert(const ROBFragmentList& vecRobs,
74  const std::vector<IdentifierHash>& /* collections */) const {
75  return this->convert(vecRobs, Gaudi::Hive::currentContext());
76 }
77 
78 StatusCode Muon::CSC_RawDataProviderTool::convert(const ROBFragmentList& vecRobs, const EventContext& ctx) const {
79  // logic for run-2 (not thread safe mode)
80  if (ctx.slot() > 1) {
82  "CSC_RawDataProviderTool is not thread safe, but you are trying to run with > 1 thread. You must switch to 1 thread or use "
83  "CSC_RawDataProviderToolMT");
84  return StatusCode::FAILURE;
85  }
86 
87  CscRawDataContainer* container = nullptr;
88 
89  SG::WriteHandle<CscRawDataContainer> rdoContainerHandle(m_containerKey, ctx);
90  // here we have to check if the container is already present and if it is we retrieve from SG and then add to it
91  if (rdoContainerHandle.isPresent()) {
92  const CscRawDataContainer* rdoContainer_c = nullptr;
93  ATH_CHECK(evtStore()->retrieve(rdoContainer_c, m_containerKey.key()));
94  container = const_cast<CscRawDataContainer*>(rdoContainer_c);
95 
96  } else {
97  ATH_CHECK(rdoContainerHandle.record(std::make_unique<CscRawDataContainer>(m_idHelperSvc->cscIdHelper().module_hash_max())));
98  ATH_MSG_DEBUG("Created CSCRawDataContainer");
99  container = rdoContainerHandle.ptr();
100  }
101 
102  if (!container) {
103  ATH_MSG_ERROR("CSC RDO container pointer is null, cannot decode data");
104  return StatusCode::FAILURE;
105  }
106 
107  // call conversion function from the base class
108  ATH_CHECK(convertIntoContainer(vecRobs, ctx, *container));
109 
110  return StatusCode::SUCCESS;
111 }
CscIdHelper.h
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
Muon::CSC_RawDataProviderTool::~CSC_RawDataProviderTool
virtual ~CSC_RawDataProviderTool()
default destructor
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
ROBData.h
Defines the ROB data entity. The ROB data is an abstract entity that is used to discase the raw event...
Muon::CSC_RawDataProviderTool::CSC_RawDataProviderTool
CSC_RawDataProviderTool(const std::string &t, const std::string &n, const IInterface *p)
Definition: CSC_RawDataProviderTool.cxx:25
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
CSC_RawDataProviderTool.h
WriteHandle.h
Handle class for recording to StoreGate.
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
lumiFormat.i
int i
Definition: lumiFormat.py:92
Muon::CSC_RawDataProviderToolCore::initialize
virtual StatusCode initialize() override
standard Athena-Algorithm method
Definition: CSC_RawDataProviderToolCore.cxx:25
beamspotman.n
n
Definition: beamspotman.py:731
RawEvent.h
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
SG::WriteHandle::ptr
pointer_type ptr()
Dereference the pointer.
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
ByteStreamAddress.h
Muon::CSC_RawDataProviderTool::convert
virtual StatusCode convert() const override
Definition: CSC_RawDataProviderTool.h:39
OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment
eformat::ROBFragment< PointerType > ROBFragment
Definition: RawEvent.h:27
TMVAToMVAUtils::convert
std::unique_ptr< MVAUtils::BDT > convert(TMVA::MethodBDT *bdt, bool isRegression=true, bool useYesNoLeaf=false)
Definition: TMVAToMVAUtils.h:114
MuonDetectorManager.h
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:76
Muon::CSC_RawDataProviderTool::initialize
virtual StatusCode initialize() override
standard Athena-Algorithm method
Definition: CSC_RawDataProviderTool.cxx:34
SG::WriteHandle::record
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
CscRawDataContainer
This container provides access to collections of CSC RDOs and a mechanism for recording them.
Definition: CscRawDataContainer.h:23
ByteStreamCnvSvcBase.h
SG::VarHandleBase::isPresent
bool isPresent() const
Is the referenced object present in SG?
Definition: StoreGate/src/VarHandleBase.cxx:397
ReadHandle.h
Handle class for reading from StoreGate.
IdContext
class IdContext
Definition: IdContext.h:34
IROBDataProviderSvc.h