ATLAS Offline Software
MuonChamberHoleRecoveryTool.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef MUON_MUONCHAMBERHOLERECOVERYTOOL_H
6 #define MUON_MUONCHAMBERHOLERECOVERYTOOL_H
7 
8 #include <set>
9 #include <string>
10 #include <vector>
11 
26 #include "TrkTrack/Track.h"
28 
29 
30 namespace Muon {
35 
36  public:
37  MuonChamberHoleRecoveryTool(const std::string&, const std::string&, const IInterface*);
38  virtual ~MuonChamberHoleRecoveryTool() = default;
39 
40  using NewTrackStates = std::vector<std::unique_ptr<const Trk::TrackStateOnSurface>>;
41 
42  StatusCode initialize() override;
43 
45  std::unique_ptr<Trk::Track> recover(const Trk::Track& track, const EventContext& ctx) const override;
46 
47  // made public
48  void createHoleTSOSsForClusterChamber(const Identifier& detElId, const EventContext& ctx, const Trk::TrackParameters& pars,
49  std::set<Identifier>& layIds,
50  NewTrackStates& states) const override;
51 
52  private:
53  struct RecoveryState {
54  RecoveryState(const Trk::Track& trk);
55 
58 
59  const Trk::TrackStateOnSurface* tsos() const;
60 
62  bool nextState();
65  // vector once a new chamber is reached
66  enum class CopyTarget {
69  };
71 
73  std::set<Identifier> layersOnTrk{};
76 
81  const Trk::TrackParameters* chamberPars() const;
85  void finalizeChamber();
86 
89  std::unique_ptr<Trk::TrackStates> releaseStates();
90 
91  private:
92  const Trk::Track& m_trk;
94  bool m_nextCalled{false};
97  std::set<const Trk::TrackStateOnSurface*> m_copiedStates{};
98 
99  };
100 
103  bool getNextMuonMeasurement(RecoveryState& trkRecov, RecoveryState::CopyTarget target) const;
104 
108  void recoverHitsInChamber(const EventContext& ctx, RecoveryState& trkRecov) const;
109 
110 
117  std::set<Identifier> holesInMdtChamber(const EventContext& ctx, const Amg::Vector3D& position, const Amg::Vector3D& direction,
118  const Identifier& chId, const std::set<Identifier>& tubeIds) const;
119 
120  void recoverMdtHits(const EventContext& ctx,
121  const Identifier& chId,
122  const Trk::TrackParameters& pars,
123  NewTrackStates& newStates,
124  std::set<Identifier>& knownLayers) const;
125 
126 
127  void recoverClusterHits(const EventContext& ctx,
128  const Identifier& chId,
129  const Trk::TrackParameters& chambPars,
130  NewTrackStates& newStates,
131  std::set<Identifier>& knownLayers) const;
132 
133 
134 
136  std::set<Identifier> layersOnTrkIds(const Trk::Track& track) const;
137 
139  const Trk::TrkDetElementBase* getDetectorElement(const EventContext& ctx, const Identifier& id) const;
140 
143  std::set<Identifier> getHoleLayerIds(const Identifier& detElId,
144  const std::set<Identifier>& knownLayers) const;
145 
147  template <class Prd> NewTrackStates recoverChamberClusters(const EventContext& ctx,
149  const Identifier& chambId,
150  const Trk::TrackParameters& parsInChamb,
151  std::set<Identifier>& knownLayers) const;
152 
153  template <class Prd> std::vector<const Prd*> loadPrepDataHits(const EventContext& ctx,
155  const std::set<Identifier>& layerIds) const;
156 
157  ServiceHandle<Muon::IMuonIdHelperSvc> m_idHelperSvc{this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"};
158  ServiceHandle<Muon::IMuonEDMHelperSvc> m_edmHelperSvc{this, "edmHelper", "Muon::MuonEDMHelperSvc/MuonEDMHelperSvc",
159  "Handle to the service providing the IMuonEDMHelperSvc interface"};
160 
161  ServiceHandle<Trk::ITrackingVolumesSvc> m_trackingVolumesSvc{this, "TrackingVolumesSvc", "TrackingVolumesSvc/TrackingVolumesSvc"};
162 
163 
164 
165 
166  ToolHandle<Muon::MuonEDMPrinterTool> m_printer{this, "EDMPrinter", "Muon::MuonEDMPrinterTool/MuonEDMPrinterTool"};
167  ToolHandle<Trk::IExtrapolator> m_extrapolator{this, "Extrapolator", "Trk::Extrapolator/MuonExtrapolator"};
168  ToolHandle<Muon::IMdtDriftCircleOnTrackCreator> m_mdtRotCreator{this, "MdtRotCreator",
169  "Muon::MdtDriftCircleOnTrackCreator/MdtDriftCircleOnTrackCreator",
170  "IMdtDriftCircleOnTrackCreator full calibration"};
171  ToolHandle<Muon::IMuonClusterOnTrackCreator> m_cscRotCreator{
172  this, "CscRotCreator", "", "IMuonClusterOnTrackCreator for cscs"};
173  ToolHandle<Muon::IMuonClusterOnTrackCreator> m_clusRotCreator{this, "ClusterRotCreator",
174  "Muon::MuonClusterOnTrackCreator/MuonClusterOnTrackCreator",
175  "IMuonClusterOnTrackCreator for RPC, TGC, NSW hits"};
176  ToolHandle<Trk::IResidualPullCalculator> m_pullCalculator{this, "PullCalculator",
177  "Trk::ResidualPullCalculator/ResidualPullCalculator"};
178 
179  SG::ReadCondHandleKey<MuonGM::MuonDetectorManager> m_DetectorManagerKey{this, "DetectorManagerKey", "MuonDetectorManager",
180  "Key of input MuonDetectorManager condition data"};
181 
182  SG::ReadHandleKey<Muon::MdtPrepDataContainer> m_key_mdt{this, "MdtPrepDataContainer", "MDT_DriftCircles", "MDT PRDs"};
183  SG::ReadHandleKey<Muon::CscPrepDataContainer> m_key_csc{this, "CscPrepDataContainer", "CSC_Clusters", "CSC PRDS"};
184  SG::ReadHandleKey<Muon::TgcPrepDataContainer> m_key_tgc{this, "TgcPrepDataContainer", "TGC_Measurements", "TGC PRDs"};
185  SG::ReadHandleKey<Muon::RpcPrepDataContainer> m_key_rpc{this, "RpcPrepDataContainer", "RPC_Measurements", "RPC PRDs"};
186  SG::ReadHandleKey<Muon::sTgcPrepDataContainer> m_key_stgc{this, "sTgcPrepDataContainer", "STGC_Measurements", "sTGC PRDs"};
187  SG::ReadHandleKey<Muon::MMPrepDataContainer> m_key_mm{this, "MMPrepDataContainer", "MM_Measurements", "MM PRDs"};
188 
189 
190  SG::ReadCondHandleKey<Muon::MuonIntersectGeoData> m_chamberGeoKey{this, "ChamberGeoKey", "MuonStationIntersects", "Pointer to hole search service"};
191 
192  Gaudi::Property<bool> m_addMeasurements{this, "AddMeasurements", true};
193  Gaudi::Property<bool> m_detectBadSort{this, "DetectBadSorting", false};
194 
195  Gaudi::Property<double> m_associationPullCutEta{this, "AssociationPullCutEta", 3};
196  Gaudi::Property<double> m_associationPullCutPhi{this, "AssociationPullCutPhi", 10};
197  Gaudi::Property<double> m_adcCut{this, "AdcCut", 50};
198  };
199 
200 } // namespace Muon
201 
202 #endif
make_hlt_rep.pars
pars
Definition: make_hlt_rep.py:90
Muon::MuonChamberHoleRecoveryTool::m_key_mm
SG::ReadHandleKey< Muon::MMPrepDataContainer > m_key_mm
Definition: MuonChamberHoleRecoveryTool.h:187
Muon::MuonPrepDataContainer
Template for Muon PRD containers (which are basically collections of MuonPrepDataCollections).
Definition: MuonPrepDataContainer.h:42
Muon::MuonChamberHoleRecoveryTool::m_key_stgc
SG::ReadHandleKey< Muon::sTgcPrepDataContainer > m_key_stgc
Definition: MuonChamberHoleRecoveryTool.h:186
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
Muon::MuonChamberHoleRecoveryTool::layersOnTrkIds
std::set< Identifier > layersOnTrkIds(const Trk::Track &track) const
Returns a set of all layer Identifiers of the associated track hits.
Definition: MuonChamberHoleRecoveryTool.cxx:154
Muon::MuonChamberHoleRecoveryTool::m_addMeasurements
Gaudi::Property< bool > m_addMeasurements
Definition: MuonChamberHoleRecoveryTool.h:192
Muon::MuonChamberHoleRecoveryTool::getNextMuonMeasurement
bool getNextMuonMeasurement(RecoveryState &trkRecov, RecoveryState::CopyTarget target) const
Increments the internal iterator of the RecoveryState until the next muon measurement on track is fou...
Definition: MuonChamberHoleRecoveryTool.cxx:119
Muon::MuonChamberHoleRecoveryTool::RecoveryState::m_trk
const Trk::Track & m_trk
Definition: MuonChamberHoleRecoveryTool.h:92
Muon::MuonChamberHoleRecoveryTool::recoverChamberClusters
NewTrackStates recoverChamberClusters(const EventContext &ctx, const SG::ReadHandleKey< MuonPrepDataContainerT< Prd >> &prdKey, const Identifier &chambId, const Trk::TrackParameters &parsInChamb, std::set< Identifier > &knownLayers) const
Attempts to recover all missing hits in a chamber.
Definition: MuonChamberHoleRecoveryTool.cxx:525
TrackParameters.h
Muon::MuonChamberHoleRecoveryTool::recover
std::unique_ptr< Trk::Track > recover(const Trk::Track &track, const EventContext &ctx) const override
returns a new track with holes recovered
Definition: MuonChamberHoleRecoveryTool.cxx:175
Trk::Track
The ATLAS Track class.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h:73
MuonEDMPrinterTool.h
Muon::MuonChamberHoleRecoveryTool::loadPrepDataHits
std::vector< const Prd * > loadPrepDataHits(const EventContext &ctx, const SG::ReadHandleKey< MuonPrepDataContainerT< Prd >> &key, const std::set< Identifier > &layerIds) const
Definition: MuonChamberHoleRecoveryTool.cxx:408
Muon::MuonChamberHoleRecoveryTool::RecoveryState::finalizeChamber
void finalizeChamber()
Sorts the hits accumulated in the current chamber using the first track parameters in that chamber.
Definition: MuonChamberHoleRecoveryTool.cxx:73
Muon::MuonChamberHoleRecoveryTool::m_key_rpc
SG::ReadHandleKey< Muon::RpcPrepDataContainer > m_key_rpc
Definition: MuonChamberHoleRecoveryTool.h:185
Muon::MuonChamberHoleRecoveryTool::m_key_mdt
SG::ReadHandleKey< Muon::MdtPrepDataContainer > m_key_mdt
Definition: MuonChamberHoleRecoveryTool.h:182
Muon::MuonChamberHoleRecoveryTool::m_cscRotCreator
ToolHandle< Muon::IMuonClusterOnTrackCreator > m_cscRotCreator
Definition: MuonChamberHoleRecoveryTool.h:171
Muon::MuonChamberHoleRecoveryTool
tool to select tracks
Definition: MuonChamberHoleRecoveryTool.h:34
IExtrapolator.h
Muon::MuonChamberHoleRecoveryTool::NewTrackStates
std::vector< std::unique_ptr< const Trk::TrackStateOnSurface > > NewTrackStates
Definition: MuonChamberHoleRecoveryTool.h:40
Trk::TrkDetElementBase
Definition: TrkDetElementBase.h:52
Muon::MuonChamberHoleRecoveryTool::recoverHitsInChamber
void recoverHitsInChamber(const EventContext &ctx, RecoveryState &trkRecov) const
Loops over all muon hits in a muon chamber and tries to find missed ones by checking each tracking la...
Definition: MuonChamberHoleRecoveryTool.cxx:191
MuonPrepDataContainer.h
Muon::MuonChamberHoleRecoveryTool::MuonChamberHoleRecoveryTool
MuonChamberHoleRecoveryTool(const std::string &, const std::string &, const IInterface *)
Definition: MuonChamberHoleRecoveryTool.cxx:89
SG::ReadHandleKey
Property holding a SG store/key/clid from which a ReadHandle is made.
Definition: StoreGate/StoreGate/ReadHandleKey.h:39
Muon
This class provides conversion from CSC RDO data to CSC Digits.
Definition: TrackSystemController.h:49
Muon::MuonChamberHoleRecoveryTool::RecoveryState::nextState
bool nextState()
Increments the internal iterator.
Definition: MuonChamberHoleRecoveryTool.cxx:57
Muon::MuonChamberHoleRecoveryTool::getDetectorElement
const Trk::TrkDetElementBase * getDetectorElement(const EventContext &ctx, const Identifier &id) const
Returns the detector element associated with the muon Identifier.
Definition: MuonChamberHoleRecoveryTool.cxx:352
Muon::MuonChamberHoleRecoveryTool::RecoveryState::copyState
void copyState(CopyTarget target)
Definition: MuonChamberHoleRecoveryTool.cxx:65
Muon::MuonChamberHoleRecoveryTool::m_extrapolator
ToolHandle< Trk::IExtrapolator > m_extrapolator
Definition: MuonChamberHoleRecoveryTool.h:167
Muon::MuonChamberHoleRecoveryTool::RecoveryState::RecoveryState
RecoveryState(const Trk::Track &trk)
Definition: MuonChamberHoleRecoveryTool.cxx:47
Muon::MuonChamberHoleRecoveryTool::m_associationPullCutEta
Gaudi::Property< double > m_associationPullCutEta
Definition: MuonChamberHoleRecoveryTool.h:195
Track.h
Muon::MuonChamberHoleRecoveryTool::m_chamberGeoKey
SG::ReadCondHandleKey< Muon::MuonIntersectGeoData > m_chamberGeoKey
Definition: MuonChamberHoleRecoveryTool.h:190
MuonIntersectGeoData.h
Muon::MuonChamberHoleRecoveryTool::RecoveryState::tsosId
Identifier tsosId
Identifier of the current trackStateOnSurface.
Definition: MuonChamberHoleRecoveryTool.h:75
Muon::MuonChamberHoleRecoveryTool::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: MuonChamberHoleRecoveryTool.h:157
Muon::MuonChamberHoleRecoveryTool::m_DetectorManagerKey
SG::ReadCondHandleKey< MuonGM::MuonDetectorManager > m_DetectorManagerKey
Definition: MuonChamberHoleRecoveryTool.h:179
Muon::MuonChamberHoleRecoveryTool::initialize
StatusCode initialize() override
Definition: MuonChamberHoleRecoveryTool.cxx:94
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
Muon::MuonChamberHoleRecoveryTool::m_edmHelperSvc
ServiceHandle< Muon::IMuonEDMHelperSvc > m_edmHelperSvc
Definition: MuonChamberHoleRecoveryTool.h:158
Muon::MuonChamberHoleRecoveryTool::m_pullCalculator
ToolHandle< Trk::IResidualPullCalculator > m_pullCalculator
Definition: MuonChamberHoleRecoveryTool.h:176
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
urldecode::states
states
Definition: urldecode.h:39
IMuonClusterOnTrackCreator.h
AthAlgTool.h
Trk::ParametersBase
Definition: ParametersBase.h:55
Muon::MuonChamberHoleRecoveryTool::RecoveryState::begin
Trk::TrackStates::const_iterator begin() const
Definition: MuonChamberHoleRecoveryTool.cxx:48
Muon::MuonChamberHoleRecoveryTool::m_clusRotCreator
ToolHandle< Muon::IMuonClusterOnTrackCreator > m_clusRotCreator
Definition: MuonChamberHoleRecoveryTool.h:173
Muon::MuonChamberHoleRecoveryTool::RecoveryState::m_newStates
NewTrackStates m_newStates
Definition: MuonChamberHoleRecoveryTool.h:96
Muon::MuonChamberHoleRecoveryTool::getHoleLayerIds
std::set< Identifier > getHoleLayerIds(const Identifier &detElId, const std::set< Identifier > &knownLayers) const
Returns a set of all layer Identifiers (GasGap + channel orientation) in a muon chamber of type X exc...
Definition: MuonChamberHoleRecoveryTool.cxx:454
Muon::MuonChamberHoleRecoveryTool::createHoleTSOSsForClusterChamber
void createHoleTSOSsForClusterChamber(const Identifier &detElId, const EventContext &ctx, const Trk::TrackParameters &pars, std::set< Identifier > &layIds, NewTrackStates &states) const override
Definition: MuonChamberHoleRecoveryTool.cxx:342
IMuonEDMHelperSvc.h
Muon::MuonChamberHoleRecoveryTool::RecoveryState::tsos
const Trk::TrackStateOnSurface * tsos() const
Definition: MuonChamberHoleRecoveryTool.cxx:54
Trk::TrackStateOnSurface
represents the track state (measurement, material, fit parameters and quality) at a surface.
Definition: TrackStateOnSurface.h:71
Muon::MuonChamberHoleRecoveryTool::RecoveryState::chamberPars
const Trk::TrackParameters * chamberPars() const
Track parameters of the chamber.
Definition: MuonChamberHoleRecoveryTool.cxx:70
IMdtDriftCircleOnTrackCreator.h
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
Muon::MuonChamberHoleRecoveryTool::RecoveryState::end
Trk::TrackStates::const_iterator end() const
Definition: MuonChamberHoleRecoveryTool.cxx:51
MuonDetectorManager.h
Muon::MuonChamberHoleRecoveryTool::recoverMdtHits
void recoverMdtHits(const EventContext &ctx, const Identifier &chId, const Trk::TrackParameters &pars, NewTrackStates &newStates, std::set< Identifier > &knownLayers) const
Definition: MuonChamberHoleRecoveryTool.cxx:215
Muon::MuonChamberHoleRecoveryTool::RecoveryState::layersOnTrk
std::set< Identifier > layersOnTrk
List of all measurement layers on track.
Definition: MuonChamberHoleRecoveryTool.h:73
Muon::MuonChamberHoleRecoveryTool::RecoveryState::m_curr_itr
Trk::TrackStates::const_iterator m_curr_itr
Definition: MuonChamberHoleRecoveryTool.h:93
Muon::MuonChamberHoleRecoveryTool::~MuonChamberHoleRecoveryTool
virtual ~MuonChamberHoleRecoveryTool()=default
IResidualPullCalculator.h
Muon::MuonChamberHoleRecoveryTool::m_key_csc
SG::ReadHandleKey< Muon::CscPrepDataContainer > m_key_csc
Definition: MuonChamberHoleRecoveryTool.h:183
SG::ReadCondHandleKey< MuonGM::MuonDetectorManager >
Muon::MuonChamberHoleRecoveryTool::holesInMdtChamber
std::set< Identifier > holesInMdtChamber(const EventContext &ctx, const Amg::Vector3D &position, const Amg::Vector3D &direction, const Identifier &chId, const std::set< Identifier > &tubeIds) const
calculate holes in a given chamber using local straight line extrapolation
Definition: MuonChamberHoleRecoveryTool.cxx:376
Muon::MuonChamberHoleRecoveryTool::RecoveryState::m_nextCalled
bool m_nextCalled
Definition: MuonChamberHoleRecoveryTool.h:94
Muon::MuonChamberHoleRecoveryTool::m_key_tgc
SG::ReadHandleKey< Muon::TgcPrepDataContainer > m_key_tgc
Definition: MuonChamberHoleRecoveryTool.h:184
Muon::MuonChamberHoleRecoveryTool::m_trackingVolumesSvc
ServiceHandle< Trk::ITrackingVolumesSvc > m_trackingVolumesSvc
Definition: MuonChamberHoleRecoveryTool.h:161
Muon::MuonChamberHoleRecoveryTool::RecoveryState::CopyTarget
CopyTarget
Switch indicating whether the track states are copied onto the global cache vector or onto the chambe...
Definition: MuonChamberHoleRecoveryTool.h:66
Muon::MuonChamberHoleRecoveryTool::RecoveryState
Definition: MuonChamberHoleRecoveryTool.h:53
Muon::MuonChamberHoleRecoveryTool::RecoveryState::CopyTarget::ChamberTrkStates
@ ChamberTrkStates
Muon::MuonChamberHoleRecoveryTool::m_adcCut
Gaudi::Property< double > m_adcCut
Definition: MuonChamberHoleRecoveryTool.h:197
Muon::MuonChamberHoleRecoveryTool::m_mdtRotCreator
ToolHandle< Muon::IMdtDriftCircleOnTrackCreator > m_mdtRotCreator
Definition: MuonChamberHoleRecoveryTool.h:168
Muon::MuonChamberHoleRecoveryTool::recoverClusterHits
void recoverClusterHits(const EventContext &ctx, const Identifier &chId, const Trk::TrackParameters &chambPars, NewTrackStates &newStates, std::set< Identifier > &knownLayers) const
Definition: MuonChamberHoleRecoveryTool.cxx:322
Muon::MuonChamberHoleRecoveryTool::RecoveryState::CopyTarget::GlobalTrkStates
@ GlobalTrkStates
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
Muon::MuonChamberHoleRecoveryTool::RecoveryState::releaseStates
std::unique_ptr< Trk::TrackStates > releaseStates()
Moves the recovered track states on surface onto a Trk::TrackStates to be piped into a new Trk::Track...
Definition: MuonChamberHoleRecoveryTool.cxx:80
IMuonHoleRecoveryTool.h
COOLRates.target
target
Definition: COOLRates.py:1106
Muon::NewTrackStates
MuonChamberHoleRecoveryTool::NewTrackStates NewTrackStates
Definition: MuonChamberHoleRecoveryTool.cxx:44
AthAlgTool
Definition: AthAlgTool.h:26
ITrackSelectorTool.h
ITrackingVolumesSvc.h
Muon::MuonChamberHoleRecoveryTool::m_printer
ToolHandle< Muon::MuonEDMPrinterTool > m_printer
Definition: MuonChamberHoleRecoveryTool.h:166
Muon::IMuonHoleRecoveryTool
The IMuonHoleRecoveryTool is a pure virtual interface for tools that recover hole on a track.
Definition: IMuonHoleRecoveryTool.h:20
Muon::MuonChamberHoleRecoveryTool::m_associationPullCutPhi
Gaudi::Property< double > m_associationPullCutPhi
Definition: MuonChamberHoleRecoveryTool.h:196
IMuonIdHelperSvc.h
Muon::MuonChamberHoleRecoveryTool::RecoveryState::chamberStates
NewTrackStates chamberStates
Vector of the track states on surface in the current chamber.
Definition: MuonChamberHoleRecoveryTool.h:78
Muon::MuonChamberHoleRecoveryTool::m_detectBadSort
Gaudi::Property< bool > m_detectBadSort
Definition: MuonChamberHoleRecoveryTool.h:193
Muon::MuonChamberHoleRecoveryTool::RecoveryState::m_copiedStates
std::set< const Trk::TrackStateOnSurface * > m_copiedStates
Definition: MuonChamberHoleRecoveryTool.h:97
ServiceHandle< Muon::IMuonIdHelperSvc >
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37