ATLAS Offline Software
Loading...
Searching...
No Matches
MuonCombinePatternTool.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 MUONCOMBINEPATTERNTOOLS_MUONCOMBINEPATTERNTOOL_H
6#define MUONCOMBINEPATTERNTOOLS_MUONCOMBINEPATTERNTOOL_H
7
8
9#include "AthenaBaseComps/AthAlgTool.h" //base class
10#include "GaudiKernel/ServiceHandle.h" //member
12#include "MuonIdHelpers/IMuonIdHelperSvc.h" //template parameter
15
16
18private:
19 struct ChamberInfo {
20 ChamberInfo() = default;
21 int neta{0};
22 int nphi{0};
23 int ninside{0};
24 int noutside{0};
25 int ninsidePat{0};
27 double phiMin{FLT_MAX};
28 double phiMax{-FLT_MAX};
29 };
30 using IdChMap = std::map<Identifier, ChamberInfo>;
31
32public:
33 using PrdPatternPair = std::pair<std::unique_ptr<Muon::MuonPrdPattern>, std::unique_ptr<Muon::MuonPrdPattern>>;
34
35 using CandPrdPatPtr = std::shared_ptr<const Muon::MuonPrdPattern>;
36 using CandidatePatPair = std::pair<CandPrdPatPtr, CandPrdPatPtr>;
37
38 MuonCombinePatternTool(const std::string& type, const std::string& name, const IInterface* parent);
39 virtual ~MuonCombinePatternTool() = default;
40
41 StatusCode initialize() override;
42
45 std::unique_ptr<MuonPrdPatternCollection> combineEtaPhiPatterns(
46 const MuonPrdPatternCollection& phiPatternCollection, const MuonPrdPatternCollection& etaPatternCollection,
47 const EtaPhiHitAssocMap& phiEtaHitAssMap) const override;
48
50 std::unique_ptr<Muon::MuonPrdPattern> makeCombinedPattern(const Muon::MuonPrdPattern& phipattern,
51 const Muon::MuonPrdPattern& etapattern) const override;
52
55 virtual std::unique_ptr<MuonPatternCombinationCollection> makePatternCombinations(const MuonPrdPatternCollection& muonpatterns) const override;
56
57private:
60 std::unique_ptr<MuonPrdPatternCollection> makeCombinedPatterns(std::vector<CandidatePatPair>& candidates) const;
61
63 static bool subset(const Muon::MuonPrdPattern* pattern1, const Muon::MuonPrdPattern* pattern2);
64
66 static bool subset(std::pair<PrepDataSet, PrepDataSet>& candidate1,
67 std::pair<PrepDataSet, PrepDataSet>& candidate2);
68
69
72 std::unique_ptr<Muon::MuonPrdPattern> cleanPhiPattern(std::unique_ptr<Muon::MuonPrdPattern> phipattern) const;
73
75 std::unique_ptr<Muon::MuonPrdPattern> cleanupCombinedPattern(const Muon::MuonPrdPattern& combinedpattern) const;
76
78 std::vector<PrdPatternPair> splitPatterns2D(const Muon::MuonPrdPattern* phipattern,
79 const Muon::MuonPrdPattern* etapattern) const;
80
82 std::vector<PrdPatternPair> splitPatterns3D(const Muon::MuonPrdPattern* phipattern,
83 const Muon::MuonPrdPattern* etapattern) const;
84
88 std::vector<PrdPatternPair> splitPatternsCylinder(const Muon::MuonPrdPattern* phipattern,
89 const Muon::MuonPrdPattern* etapattern) const;
90
95 std::unique_ptr<Muon::MuonPrdPattern> makeAssPhiPattern(
96 const Muon::MuonPrdPattern& pattern,
97 const EtaPhiHitAssocMap& phiEtaHitAssMap,
98 bool check = false) const;
99
102 std::array<double,4> updateParametersForCosmics(const Muon::MuonPrdPattern& phipattern,
103 const Muon::MuonPrdPattern& etapattern) const;
104
107 std::pair<double, double> calculateR0Phi(const Muon::MuonPrdPattern& phipattern, const Muon::MuonPrdPattern& etapattern,
108 double phi_estimate = -M_PI_2) const;
109
111 static double calculateRz0(const Muon::MuonPrdPattern& pattern, double phi, double theta);
112
116 const Muon::MuonPrdPattern& etapattern,
117 const std::array<double,4>& new_pars) const;
118
121 void addCandidate(const CandPrdPatPtr& etapattern, const CandPrdPatPtr& phipattern,
122 std::vector<CandidatePatPair>& candidates, bool add_asspattern,
123 const EtaPhiHitAssocMap& phiEtaHitAssMap) const;
124
126 static void cleanCandidates(std::vector<CandidatePatPair>& candidates);
127
129 void printPattern(const Muon::MuonPrdPattern* muonpattern) const;
130
133
138
141
144
148
152
156
160
161 ServiceHandle<Muon::IMuonIdHelperSvc> m_idHelperSvc{this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"};
162
163 PublicToolHandle<Muon::MuonEDMPrinterTool> m_printer{this, "printerTool", "Muon::MuonEDMPrinterTool/MuonEDMPrinterTool",
164 "ToolHandle for EDM printing of segments"};
165};
166
167#endif // MUONCOMBINEPATTERNTOOLS_MUONCOMBINEPATTERNTOOL_H
Scalar phi() const
phi method
Scalar theta() const
theta method
DataVector< Muon::MuonPrdPattern > MuonPrdPatternCollection
AthAlgTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor with parameters:
void printPattern(const Muon::MuonPrdPattern *muonpattern) const
print out pattern hits
const double m_maximum_xydistance
distance cut in xy for hits
std::map< Identifier, ChamberInfo > IdChMap
void addCandidate(const CandPrdPatPtr &etapattern, const CandPrdPatPtr &phipattern, std::vector< CandidatePatPair > &candidates, bool add_asspattern, const EtaPhiHitAssocMap &phiEtaHitAssMap) const
adds eta,phi pair to candidate vector, also performs splitting and associated pattern (only for cosmi...
virtual std::unique_ptr< MuonPatternCombinationCollection > makePatternCombinations(const MuonPrdPatternCollection &muonpatterns) const override
converts MuonPrdPatterns into MuonPatternCombinationCollection MuonPatternCombinationCollection are d...
PublicToolHandle< Muon::MuonEDMPrinterTool > m_printer
static void cleanCandidates(std::vector< CandidatePatPair > &candidates)
clean candidates from subsets or duplicates
virtual ~MuonCombinePatternTool()=default
std::unique_ptr< MuonPrdPatternCollection > makeCombinedPatterns(std::vector< CandidatePatPair > &candidates) const
make combined pattern from all candidates, removes duplicates with phi when no overlap with eta patte...
bool m_use_cosmics
use cosmic settings
std::shared_ptr< const Muon::MuonPrdPattern > CandPrdPatPtr
std::unique_ptr< Muon::MuonPrdPattern > makeAssPhiPattern(const Muon::MuonPrdPattern &pattern, const EtaPhiHitAssocMap &phiEtaHitAssMap, bool check=false) const
make combined phi pattern by associating phi hits to noncombined eta pattern, return 0 if no phi meas...
bool m_nodiscarding
don't discard any candidates based on gasgap assocation (true by default)
bool m_bestphimatch
take only best phi match as candidate or take all phi matches (false by default, but true for cosmics...
bool m_splitpatterns
split patterns (only for cosmics)
PrdPatternPair updatePatternsForCosmics(const Muon::MuonPrdPattern &phipattern, const Muon::MuonPrdPattern &etapattern, const std::array< double, 4 > &new_pars) const
update patterns based on new track parameters (used only for cosmics) builds 2 new prd patterns
std::pair< double, double > calculateR0Phi(const Muon::MuonPrdPattern &phipattern, const Muon::MuonPrdPattern &etapattern, double phi_estimate=-M_PI_2) const
calculate phi and r0 for cosmic patterns, phi estimate needs to be given
static double calculateRz0(const Muon::MuonPrdPattern &pattern, double phi, double theta)
calculate rz0 for cosmic pattern
std::pair< CandPrdPatPtr, CandPrdPatPtr > CandidatePatPair
std::pair< std::unique_ptr< Muon::MuonPrdPattern >, std::unique_ptr< Muon::MuonPrdPattern > > PrdPatternPair
static bool subset(const Muon::MuonPrdPattern *pattern1, const Muon::MuonPrdPattern *pattern2)
is pattern1 a complete subset of other pattern2?
MuonHoughMathUtils m_muonHoughMathUtils
object for use of mathematical formulas for trackmodels
bool m_flipdirectionforcosmics
flip direction for cosmics after splitting as if coming from IP (false by default)
std::unique_ptr< Muon::MuonPrdPattern > cleanupCombinedPattern(const Muon::MuonPrdPattern &combinedpattern) const
clean combined pattern, remove outliers
const double m_maximum_rzdistance
distance cut in rz for hits
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
MuonCombinePatternTool(const std::string &type, const std::string &name, const IInterface *parent)
std::unique_ptr< MuonPrdPatternCollection > combineEtaPhiPatterns(const MuonPrdPatternCollection &phiPatternCollection, const MuonPrdPatternCollection &etaPatternCollection, const EtaPhiHitAssocMap &phiEtaHitAssMap) const override
Combines phi and eta pattern collection into a new combined pattern collection.
StatusCode initialize() override
std::vector< PrdPatternPair > splitPatterns2D(const Muon::MuonPrdPattern *phipattern, const Muon::MuonPrdPattern *etapattern) const
split patterns in two at point closest to IP in rphi
std::unique_ptr< Muon::MuonPrdPattern > makeCombinedPattern(const Muon::MuonPrdPattern &phipattern, const Muon::MuonPrdPattern &etapattern) const override
Combines phi and eta pattern into a new combined pattern.
std::vector< PrdPatternPair > splitPatternsCylinder(const Muon::MuonPrdPattern *phipattern, const Muon::MuonPrdPattern *etapattern) const
split patterns in two when crossing calorimeter at point closest to IP in 3D (should be same as split...
std::vector< PrdPatternPair > splitPatterns3D(const Muon::MuonPrdPattern *phipattern, const Muon::MuonPrdPattern *etapattern) const
split patterns in two at point closest to IP in 3D
std::array< double, 4 > updateParametersForCosmics(const Muon::MuonPrdPattern &phipattern, const Muon::MuonPrdPattern &etapattern) const
calculate new track parameters of match (only for cosmics!) returns [r0, phi, rz0,...
std::unique_ptr< Muon::MuonPrdPattern > cleanPhiPattern(std::unique_ptr< Muon::MuonPrdPattern > phipattern) const
clean phi pattern, similar as in MuonHoughPatternTool, used for newly created phi patterns based on h...
Interface for tools combining Muon::MuonPattern objects.
std::map< const Trk::PrepRawData *, PrepDataSet > EtaPhiHitAssocMap
Class to store a pattern in the muon system containing PrepRawData pointers.