ATLAS Offline Software
Loading...
Searching...
No Matches
MuonLayerHoughAlg.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
5#include "MuonLayerHoughAlg.h"
6
15
16MuonLayerHoughAlg::MuonLayerHoughAlg(const std::string& name, ISvcLocator* pSvcLocator) :
17 AthReentrantAlgorithm(name, pSvcLocator) {}
18
19
20template <class T> StatusCode MuonLayerHoughAlg::retrieveContainer(const EventContext& ctx,
21 const SG::ReadHandleKey<T>& key,
22 const T*& contPtr) const {
23 if (key.empty()) {
24 ATH_MSG_DEBUG("No key of type "<<typeid(T).name()<<" has been set. Set to nullptr");
25 contPtr = nullptr;
26 return StatusCode::SUCCESS;
27 }
28 SG::ReadHandle<T> handle(key, ctx);
29 ATH_CHECK(handle.isValid());
30 contPtr = handle.cptr();
31 return StatusCode::SUCCESS;
32}
33
35 if (m_layerTool.empty()) {
36 ATH_MSG_ERROR("MuonLayerScanTool property is empty");
37 return StatusCode::FAILURE;
38 }
39 ATH_CHECK(m_layerTool.retrieve());
40 ATH_CHECK(m_printer.retrieve());
41 ATH_CHECK(m_keyRpc.initialize(!m_keyRpc.empty()));
42 ATH_CHECK(m_keyMdt.initialize(!m_keyMdt.empty()));
43 ATH_CHECK(m_keyTgc.initialize(!m_keyTgc.empty()));
44 ATH_CHECK(m_keyCsc.initialize(!m_keyCsc.empty()));
45 ATH_CHECK(m_keysTgc.initialize(!m_keysTgc.empty()));
46 ATH_CHECK(m_keyMM.initialize(!m_keyMM.empty()));
47 ATH_CHECK(m_combis.initialize());
49
50 return StatusCode::SUCCESS;
51}
52
53StatusCode MuonLayerHoughAlg::execute(const EventContext& ctx) const {
54 const Muon::RpcPrepDataContainer* rpcPrds{nullptr};
55 const Muon::MdtPrepDataContainer* mdtPrds{nullptr};
56 const Muon::TgcPrepDataContainer* tgcPrds{nullptr};
57 const Muon::CscPrepDataContainer* cscPrds{nullptr};
58 const Muon::sTgcPrepDataContainer* stgcPrds{nullptr};
59 const Muon::MMPrepDataContainer* mmPrds{nullptr};
60 ATH_CHECK(retrieveContainer(ctx, m_keyMdt, mdtPrds));
61 ATH_CHECK(retrieveContainer(ctx, m_keyRpc, rpcPrds));
62 ATH_CHECK(retrieveContainer(ctx, m_keyTgc, tgcPrds));
63 ATH_CHECK(retrieveContainer(ctx, m_keyCsc, cscPrds));
64 ATH_CHECK(retrieveContainer(ctx, m_keysTgc, stgcPrds));
65 ATH_CHECK(retrieveContainer(ctx, m_keyMM, mmPrds));
66
67
68
69 ATH_MSG_VERBOSE("calling layer tool ");
70 auto [combis, houghDataPerSectorVec] = m_layerTool->find(mdtPrds, cscPrds, tgcPrds, rpcPrds, stgcPrds, mmPrds, ctx);
72 if (combis) {
73 if (Handle.record(std::move(combis)).isFailure()) {
74 ATH_MSG_WARNING("Failed to record MuonPatternCombinationCollection at MuonLayerHoughCombis");
75 } else {
76 ATH_MSG_DEBUG("Recorded MuonPatternCombinationCollection at MuonLayerHoughCombis: size " << Handle->size());
77 if (m_printSummary || msgLvl(MSG::DEBUG)) {
78 ATH_MSG_INFO("Number of MuonPatternCombinations " << Handle->size() << std::endl << m_printer->print(*Handle));
79 }
80 }
81 } else {
82 ATH_MSG_VERBOSE("CombinationCollection " << m_combis << " is empty, recording");
83 ATH_CHECK(Handle.record(std::make_unique<MuonPatternCombinationCollection>()));
84 }
85
86 // write hough data to SG
88 if (houghDataPerSectorVec) {
89 ATH_CHECK(handle.record(std::move(houghDataPerSectorVec)));
90 } else {
91 ATH_MSG_VERBOSE("HoughDataPerSectorVec " << m_houghDataPerSectorVecKey << " is empty, recording");
92 ATH_CHECK(handle.record(std::make_unique<Muon::HoughDataPerSectorVec>()));
93 }
94 return StatusCode::SUCCESS;
95} // execute
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_INFO(x)
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
Handle class for reading from StoreGate.
bool msgLvl(const MSG::Level lvl) const
An algorithm that can be simultaneously executed in multiple threads.
SG::ReadHandleKey< Muon::RpcPrepDataContainer > m_keyRpc
SG::WriteHandleKey< Muon::HoughDataPerSectorVec > m_houghDataPerSectorVecKey
SG::WriteHandleKey< MuonPatternCombinationCollection > m_combis
virtual StatusCode execute(const EventContext &ctx) const override
PublicToolHandle< Muon::MuonEDMPrinterTool > m_printer
StatusCode retrieveContainer(const EventContext &ctx, const SG::ReadHandleKey< T > &key, const T *&contPtr) const
SG::ReadHandleKey< Muon::MMPrepDataContainer > m_keyMM
ToolHandle< Muon::IMuonHoughPatternFinderTool > m_layerTool
SG::ReadHandleKey< Muon::MdtPrepDataContainer > m_keyMdt
SG::ReadHandleKey< Muon::TgcPrepDataContainer > m_keyTgc
SG::ReadHandleKey< Muon::CscPrepDataContainer > m_keyCsc
Gaudi::Property< bool > m_printSummary
MuonLayerHoughAlg(const std::string &name, ISvcLocator *pSvcLocator)
virtual StatusCode initialize() override
SG::ReadHandleKey< Muon::sTgcPrepDataContainer > m_keysTgc
Property holding a SG store/key/clid from which a ReadHandle is made.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
const_pointer_type cptr()
Dereference the pointer.
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
MuonPrepDataContainerT< RpcPrepData > RpcPrepDataContainer
MuonPrepDataContainerT< TgcPrepData > TgcPrepDataContainer
MuonPrepDataContainerT< MdtPrepData > MdtPrepDataContainer
MuonPrepDataContainerT< sTgcPrepData > sTgcPrepDataContainer
MuonPrepDataContainerT< MMPrepData > MMPrepDataContainer
MuonPrepDataContainerT< CscPrepData > CscPrepDataContainer