ATLAS Offline Software
MdtRdoToPrepDataToolMT.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef MUONMdtRdoToPrepDataToolMT_H
6 #define MUONMdtRdoToPrepDataToolMT_H
7 
8 #include <string>
9 
11 #include "GaudiKernel/ServiceHandle.h"
12 #include "GaudiKernel/ToolHandle.h"
25 
27 
28 class MdtDigit;
29 class MdtCalibHit;
30 
31 namespace MuonGM {
32  class MdtReadoutElement;
33 }
34 
35 namespace Muon {
40  class MdtRdoToPrepDataToolMT : public extends<AthAlgTool, IMuonRdoToPrepDataTool> {
41  public:
42  MdtRdoToPrepDataToolMT(const std::string&, const std::string&, const IInterface*);
43 
45  virtual ~MdtRdoToPrepDataToolMT() = default;
46 
48  virtual StatusCode initialize() override;
49 
51  virtual StatusCode decode(const EventContext& ctx, const std::vector<IdentifierHash>& idVect) const override;
52  virtual StatusCode provideEmptyContainer(const EventContext& ctx) const override;
53  // new decode method for Rob based readout
54  virtual StatusCode decode(const EventContext& ctx, const std::vector<uint32_t>& robIds) const override;
55 
56  protected:
57  void printPrepDataImpl(const Muon::MdtPrepDataContainer* mdtPrepDataContainer) const;
58 
60  Muon::MdtDriftCircleStatus getMdtTwinPosition(const MdtDigit& prompt_digit, const MdtDigit& twin_digit, double& radius,
61  double& errRadius, double& zTwin, double& errZTwin, bool& twinIsPrompt) const;
62 
63 
65  struct ConvCache {
66  ConvCache(const Muon::IMuonIdHelperSvc* idHelperSvc):
67  m_idHelperSvc{idHelperSvc}{}
71  MdtPrepDataCollection* createCollection(const Identifier& id, MsgStream& msg);
73  StatusCode finalize(MsgStream& msg);
74 
77 
82  const ActsGeometryContext* gctx{nullptr};
83 
85  bool isValid{false};
86 
87  using PrdCollMap = std::unordered_map<IdentifierHash, std::unique_ptr<MdtPrepDataCollection>>;
89  };
90 
91  StatusCode processCsm(const EventContext& ctx, ConvCache& mdtPrepDataContainer,
92  const MdtCsm* rdoColl) const;
93 
94  StatusCode processCsmTwin(const EventContext& ctx,
95  ConvCache& mdtPrepDataContainer,
96  const MdtCsm* rdoColll) const;
97 
99  std::unique_ptr<MdtPrepData> createPrepData(const MdtCalibInput& calibInput,
100  const MdtCalibOutput& calibOutput,
101  ConvCache& cache) const;
102 
104  void createxAODPrepData(const MdtCalibInput& calibInput,
105  const MdtCalibOutput& calibOutput,
106  xAOD::MdtDriftCircleContainer* xAODMdtPrepDataContainer) const;
107 
109  ConvCache setupMdtPrepDataContainer(const EventContext& ctx) const;
110 
112  const MdtCsmContainer* getRdoContainer(const EventContext& ctx) const;
113 
114  void processPRDHashes(const EventContext& ctx, ConvCache& mdtPrepDataContainer,
115  const std::vector<IdentifierHash>& chamberHashInRobs) const;
116 
117  bool handlePRDHash(const EventContext& ctx, ConvCache& mdtPrepDataContainer,
118  IdentifierHash rdoHash) const;
119 
120  ServiceHandle<Muon::IMuonIdHelperSvc> m_idHelperSvc{this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"};
121 
123  ToolHandle<IMdtCalibrationTool> m_calibrationTool{this, "CalibrationTool", "MdtCalibrationTool"};
124 
125 
126  Gaudi::Property<bool> m_useNewGeo{this, "UseR4DetMgr", false,
127  "Switch between the legacy and the new geometry"};
128 
130  SG::ReadHandleKey<ActsGeometryContext> m_geoCtxKey{this, "AlignmentKey", "ActsAlignment", "Stored alignment"};
131 
132 
134  SG::WriteHandleKey<Muon::MdtPrepDataContainer> m_mdtPrepDataContainerKey{this, "OutputCollection", "MDT_DriftCircles"};
135 
136  SG::ReadHandleKey<MdtCsmContainer> m_rdoContainerKey{this, "RDOContainer", "MDTCSM"};
137 
138 
140  Gaudi::Property<int> m_adcCut{this, "AdcCut", 50,
141  "Minimal cut on the adc to convert it into a prepdata object"};
142  Gaudi::Property<bool> m_calibratePrepData{this, "CalibratePrepData", true};
143  Gaudi::Property<bool> m_decodeData{this, "DecodeData", true};
144  bool m_sortPrepData = false;
145 
146  ToolHandle<Muon::IMDT_RDO_Decoder> m_mdtDecoder{this, "Decoder", "Muon::MdtRDO_Decoder/MdtRDO_Decoder"};
147 
148  bool m_BMGpresent{false};
149  int m_BMGid{-1};
150 
151  // + TWIN TUBE
152  Gaudi::Property<bool> m_useTwin{this, "UseTwin", true};
153  Gaudi::Property<bool> m_useAllBOLTwin{this, "UseAllBOLTwin", false};
154  Gaudi::Property<bool> m_twinCorrectSlewing{this, "TwinCorrectSlewing", false};
155  Gaudi::Property<bool> m_discardSecondaryHitTwin{this, "DiscardSecondaryHitTwin", false};
156  int m_twin_chamber[2][3][36]{};
158  // - TWIN TUBE
159 
160  std::unordered_set<Identifier> m_DeadChannels{};
161  void initDeadChannels(const MuonGM::MdtReadoutElement* mydetEl);
162 
163  SG::ReadCondHandleKey<MuonMDT_CablingMap> m_readKey{this, "ReadKey", "MuonMDT_CablingMap", "Key of MuonMDT_CablingMap"};
164 
165  SG::ReadCondHandleKey<MuonGM::MuonDetectorManager> m_muDetMgrKey{this, "DetectorManagerKey", "MuonDetectorManager",
166  "Key of input MuonDetectorManager condition data"};
169  "Optional external cache for the MDT PRD container"};
170 
171  // xAOD PRDs
172  SG::WriteHandleKey<xAOD::MdtDriftCircleContainer> m_mdtxAODKey{this, "MdtxAODKey", "", "If empty, do not produce xAOD, otherwise this is the key of the output xAOD MDT PRD container"};
173  };
174 } // namespace Muon
175 
176 #endif
Muon::MdtRdoToPrepDataToolMT::m_useNewGeo
Gaudi::Property< bool > m_useNewGeo
Definition: MdtRdoToPrepDataToolMT.h:126
Muon::MuonPrepDataContainer
Template for Muon PRD containers (which are basically collections of MuonPrepDataCollections).
Definition: MuonPrepDataContainer.h:42
Muon::MdtRdoToPrepDataToolMT::ConvCache::m_idHelperSvc
const Muon::IMuonIdHelperSvc * m_idHelperSvc
Definition: MdtRdoToPrepDataToolMT.h:78
MuonGM
Ensure that the Athena extensions are properly loaded.
Definition: GeoMuonHits.h:27
MuonPrepDataCollection_Cache.h
SG::UpdateHandleKey
Property holding a SG store/key/clid from which an UpdateHandle is made.
Definition: UpdateHandleKey.h:40
Muon::MdtRdoToPrepDataToolMT::ConvCache::createCollection
MdtPrepDataCollection * createCollection(const Identifier &id, MsgStream &msg)
Creates a new MdtPrepDataCollection, if it's neccessary and also possible.
Definition: MdtRdoToPrepDataToolMT.cxx:47
MuonGMR4::MuonDetectorManager
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/MuonDetectorManager.h:61
MdtCalibInput
Definition: MdtCalibInput.h:27
MdtDigit
Definition: MdtDigit.h:19
Muon::MdtRdoToPrepDataToolMT::MdtRdoToPrepDataToolMT
MdtRdoToPrepDataToolMT(const std::string &, const std::string &, const IInterface *)
Definition: MdtRdoToPrepDataToolMT.cxx:80
Muon::MdtRdoToPrepDataToolMT::createPrepData
std::unique_ptr< MdtPrepData > createPrepData(const MdtCalibInput &calibInput, const MdtCalibOutput &calibOutput, ConvCache &cache) const
Creates the PRD object.
Definition: MdtRdoToPrepDataToolMT.cxx:241
IMdtCalibrationTool.h
IMuonRawDataProviderTool.h
Muon::MdtRdoToPrepDataToolMT::m_mdtxAODKey
SG::WriteHandleKey< xAOD::MdtDriftCircleContainer > m_mdtxAODKey
Definition: MdtRdoToPrepDataToolMT.h:172
Muon::MdtRdoToPrepDataToolMT::m_rdoContainerKey
SG::ReadHandleKey< MdtCsmContainer > m_rdoContainerKey
Definition: MdtRdoToPrepDataToolMT.h:136
Muon::MdtDriftCircleStatus
MdtDriftCircleStatus
Enum to represent the 'status' of Mdt measurements e.g.
Definition: MdtDriftCircleStatus.h:25
Muon::MdtRdoToPrepDataToolMT::ConvCache::xAODPrd
xAOD::MdtDriftCircleContainer * xAODPrd
Definition: MdtRdoToPrepDataToolMT.h:76
Muon::MdtRdoToPrepDataToolMT::provideEmptyContainer
virtual StatusCode provideEmptyContainer(const EventContext &ctx) const override
Definition: MdtRdoToPrepDataToolMT.cxx:175
MdtCsmContainer
This container provides acces to the MDT RDOs.
Definition: MdtCsmContainer.h:22
MuonPrepDataContainer.h
SG::ReadHandleKey< ActsGeometryContext >
MdtCsm
MDT RDOs : Chamber Service Module, container of AmtHits of a single Mdt chamber.
Definition: MdtCsm.h:19
Muon
This class provides conversion from CSC RDO data to CSC Digits.
Definition: TrackSystemController.h:49
MdtCsmContainer.h
Muon::MdtRdoToPrepDataToolMT::m_adcCut
Gaudi::Property< int > m_adcCut
member variables for algorithm properties:
Definition: MdtRdoToPrepDataToolMT.h:140
Muon::MdtRdoToPrepDataToolMT::m_geoCtxKey
SG::ReadHandleKey< ActsGeometryContext > m_geoCtxKey
Definition: MdtRdoToPrepDataToolMT.h:130
Muon::MdtRdoToPrepDataToolMT::processCsm
StatusCode processCsm(const EventContext &ctx, ConvCache &mdtPrepDataContainer, const MdtCsm *rdoColl) const
Definition: MdtRdoToPrepDataToolMT.cxx:331
Muon::MdtRdoToPrepDataToolMT::m_sortPrepData
bool m_sortPrepData
Toggle on/off the sorting of the MdtPrepData.
Definition: MdtRdoToPrepDataToolMT.h:144
Muon::MdtRdoToPrepDataToolMT::m_mdtPrepDataContainerKey
SG::WriteHandleKey< Muon::MdtPrepDataContainer > m_mdtPrepDataContainerKey
MdtPrepRawData containers.
Definition: MdtRdoToPrepDataToolMT.h:134
Muon::MdtRdoToPrepDataToolMT::decode
virtual StatusCode decode(const EventContext &ctx, const std::vector< IdentifierHash > &idVect) const override
Decode method - declared in Muon::IMuonRdoToPrepDataTool.
Definition: MdtRdoToPrepDataToolMT.cxx:207
Muon::MdtRdoToPrepDataToolMT::m_calibratePrepData
Gaudi::Property< bool > m_calibratePrepData
toggle on/off calibration of MdtPrepData
Definition: MdtRdoToPrepDataToolMT.h:142
Muon::MdtRdoToPrepDataToolMT::~MdtRdoToPrepDataToolMT
virtual ~MdtRdoToPrepDataToolMT()=default
default destructor
IMDT_RDO_Decoder.h
Muon::MdtRdoToPrepDataToolMT::initialize
virtual StatusCode initialize() override
standard Athena-Algorithm method
Definition: MdtRdoToPrepDataToolMT.cxx:83
Muon::MdtRdoToPrepDataToolMT::m_detMgrR4
const MuonGMR4::MuonDetectorManager * m_detMgrR4
Definition: MdtRdoToPrepDataToolMT.h:129
Muon::MdtRdoToPrepDataToolMT::m_useTwin
Gaudi::Property< bool > m_useTwin
Definition: MdtRdoToPrepDataToolMT.h:152
SG::WriteHandleKey
Property holding a SG store/key/clid from which a WriteHandle is made.
Definition: StoreGate/StoreGate/WriteHandleKey.h:40
MuonGM::MdtReadoutElement
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h:50
Muon::MdtRdoToPrepDataToolMT::setupMdtPrepDataContainer
ConvCache setupMdtPrepDataContainer(const EventContext &ctx) const
Creates the prep data container to be written.
Definition: MdtRdoToPrepDataToolMT.cxx:659
Muon::MdtRdoToPrepDataToolMT::processCsmTwin
StatusCode processCsmTwin(const EventContext &ctx, ConvCache &mdtPrepDataContainer, const MdtCsm *rdoColll) const
Definition: MdtRdoToPrepDataToolMT.cxx:413
IMuonRdoToPrepDataTool.h
MuonMDT_CablingMap.h
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
Muon::MdtRdoToPrepDataToolMT::m_useAllBOLTwin
Gaudi::Property< bool > m_useAllBOLTwin
Definition: MdtRdoToPrepDataToolMT.h:153
AthAlgTool.h
Muon::MdtRdoToPrepDataToolMT::m_BMGpresent
bool m_BMGpresent
Definition: MdtRdoToPrepDataToolMT.h:148
MuonDetectorManager.h
Muon::MdtRdoToPrepDataToolMT::m_readKey
SG::ReadCondHandleKey< MuonMDT_CablingMap > m_readKey
Definition: MdtRdoToPrepDataToolMT.h:163
Muon::MdtRdoToPrepDataToolMT::initDeadChannels
void initDeadChannels(const MuonGM::MdtReadoutElement *mydetEl)
Definition: MdtRdoToPrepDataToolMT.cxx:628
Muon::MdtRdoToPrepDataToolMT::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: MdtRdoToPrepDataToolMT.h:120
Muon::MdtRdoToPrepDataToolMT::getRdoContainer
const MdtCsmContainer * getRdoContainer(const EventContext &ctx) const
Loads the input RDO container from StoreGate.
Definition: MdtRdoToPrepDataToolMT.cxx:165
Muon::MdtRdoToPrepDataToolMT
Definition: MdtRdoToPrepDataToolMT.h:40
MdtCalibHit
Definition: MdtCalibHit.h:50
Muon::MuonPrepDataCollection
Template to hold collections of MuonPrepRawData objects.
Definition: MuonPrepDataCollection.h:46
MdtCalibOutput
Definition: MdtCalibOutput.h:10
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
ActsGeometryContext
Include the GeoPrimitives which need to be put first.
Definition: ActsGeometryContext.h:27
ReadCondHandleKey.h
Muon::MdtRdoToPrepDataToolMT::ConvCache::gctx
const ActsGeometryContext * gctx
Acts Geometry context.
Definition: MdtRdoToPrepDataToolMT.h:82
Muon::MdtRdoToPrepDataToolMT::m_twinCorrectSlewing
Gaudi::Property< bool > m_twinCorrectSlewing
Definition: MdtRdoToPrepDataToolMT.h:154
MdtDriftCircleContainer.h
Muon::MdtRdoToPrepDataToolMT::m_discardSecondaryHitTwin
Gaudi::Property< bool > m_discardSecondaryHitTwin
Definition: MdtRdoToPrepDataToolMT.h:155
Muon::MdtRdoToPrepDataToolMT::getMdtTwinPosition
Muon::MdtDriftCircleStatus getMdtTwinPosition(const MdtDigit &prompt_digit, const MdtDigit &twin_digit, double &radius, double &errRadius, double &zTwin, double &errZTwin, bool &twinIsPrompt) const
method to get the twin tube 2nd coordinate
Muon::MdtRdoToPrepDataToolMT::ConvCache::ConvCache
ConvCache(const Muon::IMuonIdHelperSvc *idHelperSvc)
Definition: MdtRdoToPrepDataToolMT.h:66
Muon::MdtRdoToPrepDataToolMT::m_twin_chamber
int m_twin_chamber[2][3][36]
Definition: MdtRdoToPrepDataToolMT.h:156
Muon::MdtRdoToPrepDataToolMT::ConvCache::PrdCollMap
std::unordered_map< IdentifierHash, std::unique_ptr< MdtPrepDataCollection > > PrdCollMap
Definition: MdtRdoToPrepDataToolMT.h:87
Muon::MdtRdoToPrepDataToolMT::handlePRDHash
bool handlePRDHash(const EventContext &ctx, ConvCache &mdtPrepDataContainer, IdentifierHash rdoHash) const
Definition: MdtRdoToPrepDataToolMT.cxx:186
Muon::MdtRdoToPrepDataToolMT::ConvCache::finalize
StatusCode finalize(MsgStream &msg)
Copy the non-empty collections into the created prd container.
Definition: MdtRdoToPrepDataToolMT.cxx:67
ParticleGun_SamplingFraction.radius
radius
Definition: ParticleGun_SamplingFraction.py:96
MuonDetectorManager.h
Muon::MdtRdoToPrepDataToolMT::m_BMGid
int m_BMGid
Definition: MdtRdoToPrepDataToolMT.h:149
SG::ReadCondHandleKey< MuonMDT_CablingMap >
Muon::MdtRdoToPrepDataToolMT::ConvCache
Helper struct to parse the event data around the tool.
Definition: MdtRdoToPrepDataToolMT.h:65
Muon::MdtRdoToPrepDataToolMT::printPrepDataImpl
void printPrepDataImpl(const Muon::MdtPrepDataContainer *mdtPrepDataContainer) const
Muon::MdtRdoToPrepDataToolMT::ConvCache::isValid
bool isValid
Flag set to indicate that the complete validation was successful.
Definition: MdtRdoToPrepDataToolMT.h:85
Muon::MdtRdoToPrepDataToolMT::ConvCache::legacyPrd
Muon::MdtPrepDataContainer * legacyPrd
Definition: MdtRdoToPrepDataToolMT.h:75
MuonGM::MuonDetectorManager
The MuonDetectorManager stores the transient representation of the Muon Spectrometer geometry and pro...
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonDetectorManager.h:49
Muon::MdtRdoToPrepDataToolMT::ConvCache::addedCols
PrdCollMap addedCols
Definition: MdtRdoToPrepDataToolMT.h:88
Muon::IMuonIdHelperSvc
Interface for Helper service that creates muon Identifiers and can be used to print Identifiers.
Definition: IMuonIdHelperSvc.h:26
Muon::MdtRdoToPrepDataToolMT::m_calibrationTool
ToolHandle< IMdtCalibrationTool > m_calibrationTool
MDT calibration service.
Definition: MdtRdoToPrepDataToolMT.h:123
Muon::MdtRdoToPrepDataToolMT::processPRDHashes
void processPRDHashes(const EventContext &ctx, ConvCache &mdtPrepDataContainer, const std::vector< IdentifierHash > &chamberHashInRobs) const
Definition: MdtRdoToPrepDataToolMT.cxx:179
Muon::MdtRdoToPrepDataToolMT::createxAODPrepData
void createxAODPrepData(const MdtCalibInput &calibInput, const MdtCalibOutput &calibOutput, xAOD::MdtDriftCircleContainer *xAODMdtPrepDataContainer) const
Creates the xAOD PRD object.
Definition: MdtRdoToPrepDataToolMT.cxx:282
Muon::MdtRdoToPrepDataToolMT::m_decodeData
Gaudi::Property< bool > m_decodeData
toggle on/off the decoding of MDT RDO into MdtPrepData
Definition: MdtRdoToPrepDataToolMT.h:143
Muon::MdtRdoToPrepDataToolMT::m_mdtDecoder
ToolHandle< Muon::IMDT_RDO_Decoder > m_mdtDecoder
Definition: MdtRdoToPrepDataToolMT.h:146
IdentifierHash
Definition: IdentifierHash.h:38
Muon::MdtRdoToPrepDataToolMT::m_secondaryHit_twin_chamber
int m_secondaryHit_twin_chamber[2][3][36]
Definition: MdtRdoToPrepDataToolMT.h:157
python.AutoConfigFlags.msg
msg
Definition: AutoConfigFlags.py:7
Muon::MdtRdoToPrepDataToolMT::m_muDetMgrKey
SG::ReadCondHandleKey< MuonGM::MuonDetectorManager > m_muDetMgrKey
Definition: MdtRdoToPrepDataToolMT.h:165
Muon::MdtRdoToPrepDataToolMT::ConvCache::legacyDetMgr
const MuonGM::MuonDetectorManager * legacyDetMgr
Detector manager from the conditions store.
Definition: MdtRdoToPrepDataToolMT.h:80
IMuonIdHelperSvc.h
Muon::MdtRdoToPrepDataToolMT::m_prdContainerCacheKey
SG::UpdateHandleKey< MdtPrepDataCollection_Cache > m_prdContainerCacheKey
This is the key for the cache for the MDT PRD containers, can be empty.
Definition: MdtRdoToPrepDataToolMT.h:168
ServiceHandle< Muon::IMuonIdHelperSvc >
Muon::MdtRdoToPrepDataToolMT::m_DeadChannels
std::unordered_set< Identifier > m_DeadChannels
Definition: MdtRdoToPrepDataToolMT.h:160