Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
MSVertexRecoTool.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #pragma once
6 
9 
12 
13 #include "GaudiKernel/SystemOfUnits.h"
14 #include "GaudiKernel/ServiceHandle.h"
15 #include "GaudiKernel/ToolHandle.h"
18 
24 
26 #include "xAODTracking/Vertex.h"
28 
30 #include "MSVertexUtils/MSVertex.h"
31 #include "MSVertexUtils/Tracklet.h"
32 
33 #include <optional>
34 #include <vector>
35 #include <string>
36 #include <memory>
37 
38 
39 namespace Muon {
40 
41  class MSVertexRecoTool : virtual public IMSVertexRecoTool, public AthAlgTool {
42 
43  public:
44  MSVertexRecoTool(const std::string &type, const std::string &name, const IInterface *parent);
45  virtual ~MSVertexRecoTool() = default;
46 
47  virtual StatusCode initialize(void) override;
48  StatusCode findMSvertices(const std::vector<Tracklet> &tracklets, std::vector<std::unique_ptr<MSVertex>> &vertices,
49  const EventContext &ctx) const override;
50 
51  struct TrkCluster {
52  double eta{0.};
53  double phi{0.};
54  unsigned int ntrks{0};
55  bool isSystematic{false};
56  std::vector<Tracklet> tracks;
57 
58  TrkCluster() = default;
59  };
60 
61  private:
62  SG::WriteHandleKey<xAOD::VertexContainer> m_xAODContainerKey{this, "xAODVertexContainer", "MSDisplacedVertex"};
63 
64  SG::ReadHandleKey<Muon::RpcPrepDataContainer> m_rpcTESKey{this, "RPCKey", "RPC_Measurements"};
65  SG::ReadHandleKey<Muon::TgcPrepDataContainer> m_tgcTESKey{this, "TGCKey", "TGC_Measurements"};
66  SG::ReadHandleKey<Muon::MdtPrepDataContainer> m_mdtTESKey{this, "MDTKey", "MDT_DriftCircles"};
67 
68  // count hits (total, inwards of the vertex and split by layer) around vertex
69  const std::vector<std::string> m_accMDT_str = {"nMDT", "nMDT_inwards", "nMDT_I", "nMDT_E", "nMDT_M", "nMDT_O"};
70  const std::vector<std::string> m_accRPC_str = {"nRPC", "nRPC_inwards", "nRPC_I", "nRPC_E", "nRPC_M", "nRPC_O"};
71  const std::vector<std::string> m_accTGC_str = {"nTGC", "nTGC_inwards", "nTGC_I", "nTGC_E", "nTGC_M", "nTGC_O"};
72 
73  std::vector<SG::AuxElement::Accessor<int>> m_nMDT_accs;
74  std::vector<SG::AuxElement::Accessor<int>> m_nRPC_accs;
75  std::vector<SG::AuxElement::Accessor<int>> m_nTGC_accs;
76 
77  ServiceHandle<Muon::IMuonIdHelperSvc> m_idHelperSvc{this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"};
78  ServiceHandle<IAthRNGSvc> m_rndmSvc{this, "RndmSvc", "AthRNGSvc", "Random Number Service"}; // Random number service
79  ToolHandle<Trk::IExtrapolator> m_extrapolator{this, "MyExtrapolator", "Trk::Extrapolator/AtlasExtrapolator"};
80 
81 
82  // cuts to prevent excessive processing timing
83  Gaudi::Property<unsigned int> m_maxGlobalTracklets{this, "MaxGlobalTracklets", 40, "maximal number of tracklets in an event"};
84  Gaudi::Property<unsigned int> m_maxClusterTracklets{this, "MaxClusterTracklets", 50, "maximal number of tracklets in a cluster"}; // check if this makes sense to be large than m_maxGlobalTracklets
85  // high occupancy definitions
86  Gaudi::Property<double> m_ChamberOccupancyMin{this, "MinimumHighOccupancy", 0.25, "minimum occupancy to be considered 'high occupancy'"};
87  Gaudi::Property<int> m_minHighOccupancyChambers{this, "MinimumNumberOfHighOccupancy", 2, "number of high occupancy chambers required to be signal like"};
88  // clustering properties
89  Gaudi::Property<double> m_ClusterdEta{this, "ClusterdEta", 0.7, "eta extend of cluster"};
90  Gaudi::Property<double> m_ClusterdPhi{this, "ClusterdPhi", M_PI / 3.*Gaudi::Units::radian, "phi extend of cluster"};
91  // options to calculate vertex systematic uncertainty from the tracklet reco uncertainty
92  Gaudi::Property<bool> m_doSystematics{this, "DoSystematicUncertainty", false, "find vertex systematic uncertainty"};
93  Gaudi::Property<double> m_BarrelTrackletUncert{this, "BarrelTrackletUncertainty", 0.1, "probability of considering a barrel tracklet in the clustering for the systematics reconstruction"};
94  Gaudi::Property<double> m_EndcapTrackletUncert{this, "EndcapTrackletUncertainty", 0.1, "probability of considering a endcap tracklet in the clustering for the systematics reconstruction"};
95  // properties for vertex fitting
96  Gaudi::Property<double> m_TrackPhiAngle{this, "TrackPhiAngle", 0.0*Gaudi::Units::radian, "nominal phi angle for tracklets in rad"};
97  Gaudi::Property<double> m_TrackPhiRotation{this, "TrackPhiRotation", 0.2*Gaudi::Units::radian, "angle to rotate tracklets by for uncertainty estimate in rad"};
98  Gaudi::Property<double> m_MaxTrackUncert{this, "MaxTrackUncert", 200.*Gaudi::Units::millimeter, "maximal tracklet uncertainty in mm"};
99  Gaudi::Property<double> m_VxChi2ProbCUT{this, "VxChi2ProbabilityCut", 0.05, "chi^2 probability cut"};
100  Gaudi::Property<double> m_VertexMinRadialPlane{this, "VertexMinRadialPlane", 3500.*Gaudi::Units::millimeter, "position of first radial plane in mm"};
101  Gaudi::Property<double> m_VertexMaxRadialPlane{this, "VertexMaxRadialPlane", 7000.*Gaudi::Units::millimeter, "position of last radial plane in mm"};
102  Gaudi::Property<double> m_VxPlaneDist{this, "VertexPlaneDist", 200.*Gaudi::Units::millimeter, "distance between two adjacent planes in mm"};
103  Gaudi::Property<double> m_MaxTollDist{this, "MaxTollDist", 300.*Gaudi::Units::millimeter, "maximal distance between tracklet and endcap vertex in mm"};
104  Gaudi::Property<bool> m_useOldMSVxEndcapMethod{this, "UseOldMSVxEndcapMethod", false, "use old vertex reconstruction in the endcaps "};
105  // number of hits near vertex
106  Gaudi::Property<double> m_nMDTHitsEta{this, "nMDTHitsEta", 0.6, "max eta extend between vertex and MDT hit"};
107  Gaudi::Property<double> m_nMDTHitsPhi{this, "nMDTHitsPhi", 0.6*Gaudi::Units::radian, "max phi extend between vertex and MDT hit"};
108  Gaudi::Property<double> m_nTrigHitsdR{this, "nTrigHitsdR", 0.6*Gaudi::Units::radian, "max delta R between vertex and trigger chamber (RPC or TGC) hit"};
109  // minimal good vertex criteria
110  Gaudi::Property<int> m_MinMDTHits{this, "MinMDTHits", 250, "minimal number of MDT hits"};
111  Gaudi::Property<int> m_MinTrigHits{this, "MinTrigHits", 200, "minimal number of trigger chamber (RPC+TGC) hits"};
112  Gaudi::Property<double> m_MaxLxyEndcap{this, "MaxLxyEndcap", 10000*Gaudi::Units::millimeter, "maximal transverse distance for endcap vertex in mm"};
113  Gaudi::Property<double> m_MinZEndcap{this, "MinZEndcap", 8000*Gaudi::Units::millimeter, "minimal longitudinal distance for endcap vertex in mm"};
114  Gaudi::Property<double> m_MaxZEndcap{this, "MaxZEndcap", 14000*Gaudi::Units::millimeter, "maximal longitudinal distance for endcap vertex in mm"};
115 
116 
117  // group tracklets into clusters -- vertex reco runs on each cluster of tracklets
118  std::vector<TrkCluster> findTrackClusters(const std::vector<Tracklet> &tracklets) const;
119  std::optional<TrkCluster> ClusterizeTracks(std::vector<Tracklet> &tracks) const; // core algorithm for creating the clusters
120  // barrel vertex reco algorithm
121  void MSVxFinder(const std::vector<Tracklet> &tracklets, std::unique_ptr<MSVertex> &vtx, const EventContext &ctx) const;
122  // endcap vertex reco algorithm
123  void MSStraightLineVx(const std::vector<Tracklet> &trks, std::unique_ptr<MSVertex> &vtx, const EventContext &ctx) const;
124  void MSStraightLineVx_oldMethod(const std::vector<Tracklet> &trks, std::unique_ptr<MSVertex> &vtx, const EventContext &ctx) const;
125  static Amg::Vector3D VxMinQuad(const std::vector<Tracklet> &tracks) ; // endcap vertex reco core
126  std::vector<Tracklet> RemoveBadTrk(const std::vector<Tracklet> &tracklets, const Amg::Vector3D &Vx) const;
127  bool EndcapHasBadTrack(const std::vector<Tracklet> &tracklets, const Amg::Vector3D &Vx) const;
128  // tools
129  void HitCounter(MSVertex *MSRecoVx, const EventContext &ctx) const; // counts MDT, RPC & TGC around a reco'd vertex
130  double vxPhiFinder(const double theta, const double phi, const EventContext &ctx) const; // vertex phi location reco algorithm
131  std::vector<Tracklet> getTracklets(const std::vector<Tracklet> &trks, const std::set<int> &tracklet_subset) const;
132  void dressVtxHits(xAOD::Vertex* xAODVx, const std::vector<SG::AuxElement::Accessor<int>>& accs, const std::vector<int>& hits) const;
133  StatusCode FillOutputContainer(const std::vector<std::unique_ptr<MSVertex>> &, SG::WriteHandle<xAOD::VertexContainer> &xAODVxContainer) const;
134  };
135 
136 } // namespace Muon
ReadHandleKey.h
Property holding a SG store/key/clid from which a ReadHandle is made.
Muon::MSVertexRecoTool::m_ClusterdEta
Gaudi::Property< double > m_ClusterdEta
Definition: MSVertexRecoTool.h:89
MdtReadoutElement.h
Muon::MSVertexRecoTool::findMSvertices
StatusCode findMSvertices(const std::vector< Tracklet > &tracklets, std::vector< std::unique_ptr< MSVertex >> &vertices, const EventContext &ctx) const override
Definition: MSVertexRecoTool.cxx:55
Muon::MSVertexRecoTool::m_nMDT_accs
std::vector< SG::AuxElement::Accessor< int > > m_nMDT_accs
Definition: MSVertexRecoTool.h:73
TRTCalib_Extractor.hits
hits
Definition: TRTCalib_Extractor.py:35
Muon::MSVertexRecoTool::m_maxClusterTracklets
Gaudi::Property< unsigned int > m_maxClusterTracklets
Definition: MSVertexRecoTool.h:84
Muon::MSVertexRecoTool::m_doSystematics
Gaudi::Property< bool > m_doSystematics
Definition: MSVertexRecoTool.h:92
SG::Accessor
Helper class to provide type-safe access to aux data.
Definition: Control/AthContainers/AthContainers/Accessor.h:68
Muon::MSVertexRecoTool::m_nMDTHitsEta
Gaudi::Property< double > m_nMDTHitsEta
Definition: MSVertexRecoTool.h:106
Muon::IMSVertexRecoTool
The IMSVertexRecoTool is a pure virtual interface.
Definition: IMSVertexRecoTool.h:18
Muon::MSVertexRecoTool::~MSVertexRecoTool
virtual ~MSVertexRecoTool()=default
xAODP4Helpers.h
MSVertex.h
Muon::MSVertexRecoTool::m_maxGlobalTracklets
Gaudi::Property< unsigned int > m_maxGlobalTracklets
Definition: MSVertexRecoTool.h:83
Muon::MSVertexRecoTool::TrkCluster::isSystematic
bool isSystematic
Definition: MSVertexRecoTool.h:55
M_PI
#define M_PI
Definition: ActiveFraction.h:11
Muon::MSVertexRecoTool::RemoveBadTrk
std::vector< Tracklet > RemoveBadTrk(const std::vector< Tracklet > &tracklets, const Amg::Vector3D &Vx) const
Definition: MSVertexRecoTool.cxx:745
IExtrapolator.h
Muon::MSVertexRecoTool::MSVertexRecoTool
MSVertexRecoTool(const std::string &type, const std::string &name, const IInterface *parent)
Definition: MSVertexRecoTool.cxx:29
Muon::MSVertexRecoTool::m_nTGC_accs
std::vector< SG::AuxElement::Accessor< int > > m_nTGC_accs
Definition: MSVertexRecoTool.h:75
Muon::MSVertexRecoTool::m_MinTrigHits
Gaudi::Property< int > m_MinTrigHits
Definition: MSVertexRecoTool.h:111
Muon::MSVertexRecoTool::TrkCluster::TrkCluster
TrkCluster()=default
RpcPrepDataContainer.h
SG::ReadHandleKey
Property holding a SG store/key/clid from which a ReadHandle is made.
Definition: StoreGate/StoreGate/ReadHandleKey.h:39
Muon
NRpcCablingAlg reads raw condition data and writes derived condition data to the condition store.
Definition: TrackSystemController.h:45
MSVertex
Definition: MSVertex.h:13
Muon::MSVertexRecoTool::EndcapHasBadTrack
bool EndcapHasBadTrack(const std::vector< Tracklet > &tracklets, const Amg::Vector3D &Vx) const
Definition: MSVertexRecoTool.cxx:782
Muon::MSVertexRecoTool::findTrackClusters
std::vector< TrkCluster > findTrackClusters(const std::vector< Tracklet > &tracklets) const
Definition: MSVertexRecoTool.cxx:290
python.SystemOfUnits.millimeter
float millimeter
Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration # This software is distribute...
Definition: SystemOfUnits.py:61
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
Muon::MSVertexRecoTool::m_nRPC_accs
std::vector< SG::AuxElement::Accessor< int > > m_nRPC_accs
Definition: MSVertexRecoTool.h:74
Muon::MSVertexRecoTool
Definition: MSVertexRecoTool.h:41
Muon::MSVertexRecoTool::m_VertexMinRadialPlane
Gaudi::Property< double > m_VertexMinRadialPlane
Definition: MSVertexRecoTool.h:100
Muon::MSVertexRecoTool::m_VertexMaxRadialPlane
Gaudi::Property< double > m_VertexMaxRadialPlane
Definition: MSVertexRecoTool.h:101
GeoPrimitives.h
Muon::MSVertexRecoTool::m_rndmSvc
ServiceHandle< IAthRNGSvc > m_rndmSvc
Definition: MSVertexRecoTool.h:78
Muon::MSVertexRecoTool::m_mdtTESKey
SG::ReadHandleKey< Muon::MdtPrepDataContainer > m_mdtTESKey
Definition: MSVertexRecoTool.h:66
MdtPrepDataContainer.h
SG::WriteHandleKey
Property holding a SG store/key/clid from which a WriteHandle is made.
Definition: StoreGate/StoreGate/WriteHandleKey.h:40
Muon::MSVertexRecoTool::TrkCluster::phi
double phi
Definition: MSVertexRecoTool.h:53
Muon::MSVertexRecoTool::vxPhiFinder
double vxPhiFinder(const double theta, const double phi, const EventContext &ctx) const
Definition: MSVertexRecoTool.cxx:869
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
TgcPrepDataContainer.h
Muon::MSVertexRecoTool::MSVxFinder
void MSVxFinder(const std::vector< Tracklet > &tracklets, std::unique_ptr< MSVertex > &vtx, const EventContext &ctx) const
Definition: MSVertexRecoTool.cxx:307
AthAlgTool.h
test_pyathena.parent
parent
Definition: test_pyathena.py:15
Muon::MSVertexRecoTool::m_nMDTHitsPhi
Gaudi::Property< double > m_nMDTHitsPhi
Definition: MSVertexRecoTool.h:107
Muon::MSVertexRecoTool::HitCounter
void HitCounter(MSVertex *MSRecoVx, const EventContext &ctx) const
Definition: MSVertexRecoTool.cxx:932
IMSVertexRecoTool.h
Muon::MSVertexRecoTool::getTracklets
std::vector< Tracklet > getTracklets(const std::vector< Tracklet > &trks, const std::set< int > &tracklet_subset) const
Definition: MSVertexRecoTool.cxx:770
Muon::MSVertexRecoTool::m_useOldMSVxEndcapMethod
Gaudi::Property< bool > m_useOldMSVxEndcapMethod
Definition: MSVertexRecoTool.h:104
Muon::MSVertexRecoTool::m_ChamberOccupancyMin
Gaudi::Property< double > m_ChamberOccupancyMin
Definition: MSVertexRecoTool.h:86
Vertex.h
Muon::MSVertexRecoTool::dressVtxHits
void dressVtxHits(xAOD::Vertex *xAODVx, const std::vector< SG::AuxElement::Accessor< int >> &accs, const std::vector< int > &hits) const
Definition: MSVertexRecoTool.cxx:798
Muon::MSVertexRecoTool::TrkCluster::ntrks
unsigned int ntrks
Definition: MSVertexRecoTool.h:54
Muon::MSVertexRecoTool::MSStraightLineVx
void MSStraightLineVx(const std::vector< Tracklet > &trks, std::unique_ptr< MSVertex > &vtx, const EventContext &ctx) const
Definition: MSVertexRecoTool.cxx:607
WriteHandleKey.h
Property holding a SG store/key/clid from which a WriteHandle is made.
Muon::MSVertexRecoTool::m_MaxZEndcap
Gaudi::Property< double > m_MaxZEndcap
Definition: MSVertexRecoTool.h:114
Muon::MSVertexRecoTool::m_ClusterdPhi
Gaudi::Property< double > m_ClusterdPhi
Definition: MSVertexRecoTool.h:90
Muon::MSVertexRecoTool::m_accMDT_str
const std::vector< std::string > m_accMDT_str
Definition: MSVertexRecoTool.h:69
Muon::MSVertexRecoTool::MSStraightLineVx_oldMethod
void MSStraightLineVx_oldMethod(const std::vector< Tracklet > &trks, std::unique_ptr< MSVertex > &vtx, const EventContext &ctx) const
Definition: MSVertexRecoTool.cxx:709
Muon::MSVertexRecoTool::m_xAODContainerKey
SG::WriteHandleKey< xAOD::VertexContainer > m_xAODContainerKey
Definition: MSVertexRecoTool.h:62
Muon::MSVertexRecoTool::m_TrackPhiRotation
Gaudi::Property< double > m_TrackPhiRotation
Definition: MSVertexRecoTool.h:97
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
Muon::MSVertexRecoTool::m_VxPlaneDist
Gaudi::Property< double > m_VxPlaneDist
Definition: MSVertexRecoTool.h:102
Muon::MSVertexRecoTool::FillOutputContainer
StatusCode FillOutputContainer(const std::vector< std::unique_ptr< MSVertex >> &, SG::WriteHandle< xAOD::VertexContainer > &xAODVxContainer) const
Definition: MSVertexRecoTool.cxx:810
Muon::MSVertexRecoTool::m_MaxLxyEndcap
Gaudi::Property< double > m_MaxLxyEndcap
Definition: MSVertexRecoTool.h:112
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
Muon::MSVertexRecoTool::TrkCluster::eta
double eta
Definition: MSVertexRecoTool.h:52
Muon::MSVertexRecoTool::m_rpcTESKey
SG::ReadHandleKey< Muon::RpcPrepDataContainer > m_rpcTESKey
Definition: MSVertexRecoTool.h:64
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:73
Muon::MSVertexRecoTool::m_TrackPhiAngle
Gaudi::Property< double > m_TrackPhiAngle
Definition: MSVertexRecoTool.h:96
VertexContainer.h
xAOD::Vertex_v1
Class describing a Vertex.
Definition: Vertex_v1.h:42
Muon::MSVertexRecoTool::VxMinQuad
static Amg::Vector3D VxMinQuad(const std::vector< Tracklet > &tracks)
Definition: MSVertexRecoTool.cxx:840
Muon::MSVertexRecoTool::m_accTGC_str
const std::vector< std::string > m_accTGC_str
Definition: MSVertexRecoTool.h:71
Muon::MSVertexRecoTool::initialize
virtual StatusCode initialize(void) override
Definition: MSVertexRecoTool.cxx:36
Muon::MSVertexRecoTool::m_MaxTollDist
Gaudi::Property< double > m_MaxTollDist
Definition: MSVertexRecoTool.h:103
Muon::MSVertexRecoTool::TrkCluster
Definition: MSVertexRecoTool.h:51
Muon::MSVertexRecoTool::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: MSVertexRecoTool.h:77
Muon::MSVertexRecoTool::m_accRPC_str
const std::vector< std::string > m_accRPC_str
Definition: MSVertexRecoTool.h:70
Muon::MSVertexRecoTool::m_MinZEndcap
Gaudi::Property< double > m_MinZEndcap
Definition: MSVertexRecoTool.h:113
AthAlgTool
Definition: AthAlgTool.h:26
Muon::MSVertexRecoTool::m_tgcTESKey
SG::ReadHandleKey< Muon::TgcPrepDataContainer > m_tgcTESKey
Definition: MSVertexRecoTool.h:65
Muon::MSVertexRecoTool::ClusterizeTracks
std::optional< TrkCluster > ClusterizeTracks(std::vector< Tracklet > &tracks) const
Definition: MSVertexRecoTool.cxx:178
Muon::MSVertexRecoTool::m_BarrelTrackletUncert
Gaudi::Property< double > m_BarrelTrackletUncert
Definition: MSVertexRecoTool.h:93
Muon::MSVertexRecoTool::TrkCluster::tracks
std::vector< Tracklet > tracks
Definition: MSVertexRecoTool.h:56
Muon::MSVertexRecoTool::m_EndcapTrackletUncert
Gaudi::Property< double > m_EndcapTrackletUncert
Definition: MSVertexRecoTool.h:94
Muon::MSVertexRecoTool::m_minHighOccupancyChambers
Gaudi::Property< int > m_minHighOccupancyChambers
Definition: MSVertexRecoTool.h:87
Muon::MSVertexRecoTool::m_MaxTrackUncert
Gaudi::Property< double > m_MaxTrackUncert
Definition: MSVertexRecoTool.h:98
IMuonIdHelperSvc.h
Muon::MSVertexRecoTool::m_nTrigHitsdR
Gaudi::Property< double > m_nTrigHitsdR
Definition: MSVertexRecoTool.h:108
Tracklet.h
python.SystemOfUnits.radian
float radian
Definition: SystemOfUnits.py:118
Muon::MSVertexRecoTool::m_extrapolator
ToolHandle< Trk::IExtrapolator > m_extrapolator
Definition: MSVertexRecoTool.h:79
Muon::MSVertexRecoTool::m_MinMDTHits
Gaudi::Property< int > m_MinMDTHits
Definition: MSVertexRecoTool.h:110
IAthRNGSvc.h
ServiceHandle< Muon::IMuonIdHelperSvc >
Muon::MSVertexRecoTool::m_VxChi2ProbCUT
Gaudi::Property< double > m_VxChi2ProbCUT
Definition: MSVertexRecoTool.h:99