CMS 3D CMS Logo

MuonSelectors.h
Go to the documentation of this file.
1 #ifndef MuonReco_MuonSelectors_h
2 #define MuonReco_MuonSelectors_h
3 //
4 // Package: MuonReco
5 //
6 //
7 // Original Author: Jake Ribnik, Dmytro Kovalskyi
8 
10 #include "TMath.h"
11 #include <string>
12 
13 namespace reco {
14  class Vertex;
15 }
16 
17 namespace muon {
20  All = 0, // dummy options - always true
21  AllGlobalMuons = 1, // checks isGlobalMuon flag
22  AllStandAloneMuons = 2, // checks isStandAloneMuon flag
23  AllTrackerMuons = 3, // checks isTrackerMuon flag
24  TrackerMuonArbitrated = 4, // resolve ambiguity of sharing segments
25  AllArbitrated = 5, // all muons with the tracker muon arbitrated
26  GlobalMuonPromptTight = 6, // global muons with tighter fit requirements
27  TMLastStationLoose = 7, // penetration depth loose selector
28  TMLastStationTight = 8, // penetration depth tight selector
29  TM2DCompatibilityLoose = 9, // likelihood based loose selector
30  TM2DCompatibilityTight = 10, // likelihood based tight selector
31  TMOneStationLoose = 11, // require one well matched segment
32  TMOneStationTight = 12, // require one well matched segment
33  TMLastStationOptimizedLowPtLoose = 13, // combination of TMLastStation and TMOneStation
34  TMLastStationOptimizedLowPtTight = 14, // combination of TMLastStation and TMOneStation
35  GMTkChiCompatibility = 15, // require tk stub have good chi2 relative to glb track
36  GMStaChiCompatibility = 16, // require sta stub have good chi2 compatibility relative to glb track
37  GMTkKinkTight = 17, // require a small kink value in the tracker stub
38  TMLastStationAngLoose = 18, // TMLastStationLoose with additional angular cuts
39  TMLastStationAngTight = 19, // TMLastStationTight with additional angular cuts
40  TMOneStationAngLoose = 20, // TMOneStationLoose with additional angular cuts
41  TMOneStationAngTight = 21, // TMOneStationTight with additional angular cuts
42  // The two algorithms that follow are identical to what were known as
43  // TMLastStationOptimizedLowPt* (sans the Barrel) as late as revision
44  // 1.7 of this file. The names were changed because indeed the low pt
45  // optimization applies only to the barrel region, whereas the sel-
46  // ectors above are more efficient at low pt in the endcaps, which is
47  // what we feel is more suggestive of the algorithm name. This will be
48  // less confusing for future generations of CMS members, I hope...
49  // combination of TMLastStation and TMOneStation but with low pT optimization in barrel only
51  // combination of TMLastStation and TMOneStation but with low pT optimization in barrel only
53  RPCMuLoose = 24, // checks isRPCMuon flag (require two well matched hits in different RPC layers)
59  };
60 
63  const char* label;
65  };
66 
68  {"All", All},
69  {"AllGlobalMuons", AllGlobalMuons},
70  {"AllStandAloneMuons", AllStandAloneMuons},
71  {"AllTrackerMuons", AllTrackerMuons},
72  {"TrackerMuonArbitrated", TrackerMuonArbitrated},
73  {"AllArbitrated", AllArbitrated},
74  {"GlobalMuonPromptTight", GlobalMuonPromptTight},
75  {"TMLastStationLoose", TMLastStationLoose},
76  {"TMLastStationTight", TMLastStationTight},
77  {"TM2DCompatibilityLoose", TM2DCompatibilityLoose},
78  {"TM2DCompatibilityTight", TM2DCompatibilityTight},
79  {"TMOneStationLoose", TMOneStationLoose},
80  {"TMOneStationTight", TMOneStationTight},
81  {"TMLastStationOptimizedLowPtLoose", TMLastStationOptimizedLowPtLoose},
82  {"TMLastStationOptimizedLowPtTight", TMLastStationOptimizedLowPtTight},
83  {"GMTkChiCompatibility", GMTkChiCompatibility},
84  {"GMStaChiCompatibility", GMStaChiCompatibility},
85  {"GMTkKinkTight", GMTkKinkTight},
86  {"TMLastStationAngLoose", TMLastStationAngLoose},
87  {"TMLastStationAngTight", TMLastStationAngTight},
88  {"TMOneStationAngLoose", TMOneStationAngLoose},
89  {"TMOneStationAngTight", TMOneStationAngTight},
90  {"TMLastStationOptimizedBarrelLowPtLoose", TMLastStationOptimizedBarrelLowPtLoose},
91  {"TMLastStationOptimizedBarrelLowPtTight", TMLastStationOptimizedBarrelLowPtTight},
92  {"RPCMuLoose", RPCMuLoose},
93  {"AllME0Muons", AllME0Muons},
94  {"ME0MuonArbitrated", ME0MuonArbitrated},
95  {"AllGEMMuons", AllGEMMuons},
96  {"GEMMuonArbitrated", GEMMuonArbitrated},
97  {"TriggerIdLoose", TriggerIdLoose},
98  {nullptr, (SelectionType)-1}};
99 
101 
102  // a map for string label to reco::Muon::Selector enum
104  const char* label;
106  };
107 
109  {"CutBasedIdLoose", reco::Muon::CutBasedIdLoose},
110  {"CutBasedIdMedium", reco::Muon::CutBasedIdMedium},
111  {"CutBasedIdMediumPrompt", reco::Muon::CutBasedIdMediumPrompt},
112  {"CutBasedIdTight", reco::Muon::CutBasedIdTight},
113  {"CutBasedIdGlobalHighPt", reco::Muon::CutBasedIdGlobalHighPt},
114  {"CutBasedIdTrkHighPt", reco::Muon::CutBasedIdTrkHighPt},
115  {"PFIsoVeryLoose", reco::Muon::PFIsoVeryLoose},
116  {"PFIsoLoose", reco::Muon::PFIsoLoose},
117  {"PFIsoMedium", reco::Muon::PFIsoMedium},
118  {"PFIsoTight", reco::Muon::PFIsoTight},
119  {"PFIsoVeryTight", reco::Muon::PFIsoVeryTight},
120  {"TkIsoLoose", reco::Muon::TkIsoLoose},
121  {"TkIsoTight", reco::Muon::TkIsoTight},
122  {"SoftCutBasedId", reco::Muon::SoftCutBasedId},
123  {"SoftMvaId", reco::Muon::SoftMvaId},
124  {"MvaLoose", reco::Muon::MvaLoose},
125  {"MvaMedium", reco::Muon::MvaMedium},
126  {"MvaTight", reco::Muon::MvaTight},
127  {"MiniIsoLoose", reco::Muon::MiniIsoLoose},
128  {"MiniIsoMedium", reco::Muon::MiniIsoMedium},
129  {"MiniIsoTight", reco::Muon::MiniIsoTight},
130  {"MiniIsoVeryTight", reco::Muon::MiniIsoVeryTight},
131  {"TriggerIdLoose", reco::Muon::TriggerIdLoose},
132  {"InTimeMuon", reco::Muon::InTimeMuon},
133  {"PFIsoVeryVeryTight", reco::Muon::PFIsoVeryVeryTight},
134  {"MultiIsoLoose", reco::Muon::MultiIsoLoose},
135  {"MultiIsoMedium", reco::Muon::MultiIsoMedium},
136  {"PuppiIsoLoose", reco::Muon::PuppiIsoLoose},
137  {"PuppiIsoMedium", reco::Muon::PuppiIsoMedium},
138  {"PuppiIsoTight", reco::Muon::PuppiIsoTight},
139  {"MvaVTight", reco::Muon::MvaVTight},
140  {"MvaVVTight", reco::Muon::MvaVVTight},
141  {"LowPtMvaLoose", reco::Muon::LowPtMvaLoose},
142  {"LowPtMvaMedium", reco::Muon::LowPtMvaMedium},
143  {nullptr, (reco::Muon::Selector)-1}};
144 
146 
148  bool isGoodMuon(const reco::Muon& muon,
151 
152  // ===========================================================================
153  // Support functions
154  //
156 
157  // specialized GoodMuon functions called from main wrapper
158  bool isGoodMuon(const reco::Muon& muon,
160  double minCompatibility,
161  reco::Muon::ArbitrationType arbitrationType);
162 
163  bool isGoodMuon(const reco::Muon& muon,
165  int minNumberOfMatches,
166  double maxAbsDx,
167  double maxAbsPullX,
168  double maxAbsDy,
169  double maxAbsPullY,
170  double maxChamberDist,
171  double maxChamberDistPull,
172  reco::Muon::ArbitrationType arbitrationType,
173  bool syncMinNMatchesNRequiredStationsInBarrelOnly = true, //this is what we had originally
174  bool applyAlsoAngularCuts = false);
175 
176  bool isTightMuon(const reco::Muon&, const reco::Vertex&);
177  bool isLooseMuon(const reco::Muon&);
178  bool isMediumMuon(const reco::Muon&, bool run2016_hip_mitigation = false);
179  bool isSoftMuon(const reco::Muon&, const reco::Vertex&, bool run2016_hip_mitigation = false);
180  bool isHighPtMuon(const reco::Muon&, const reco::Vertex&);
181  bool isTrackerHighPtMuon(const reco::Muon&, const reco::Vertex&);
182  bool isLooseTriggerMuon(const reco::Muon&);
183 
184  // determine if station was crossed well withing active volume
185  unsigned int RequiredStationMask(const reco::Muon& muon,
186  double maxChamberDist,
187  double maxChamberDistPull,
188  reco::Muon::ArbitrationType arbitrationType);
189 
190  // ------------ method to return the calo compatibility for a track with matched muon info ------------
191  float caloCompatibility(const reco::Muon& muon);
192 
193  // ------------ method to calculate the segment compatibility for a track with matched muon info ------------
194  float segmentCompatibility(const reco::Muon& muon,
196 
197  // Check if two muon trajectory overlap
198  // The overlap is performed by comparing distance between two muon
199  // trajectories if they cross the same muon chamber. Trajectories
200  // overlap if distance/uncertainty is smaller than allowed pullX
201  // and pullY
202  bool overlap(const reco::Muon& muon1,
203  const reco::Muon& muon2,
204  double pullX = 1.0,
205  double pullY = 1.0,
206  bool checkAdjacentChambers = false);
207 
210  int sharedSegments(const reco::Muon& muon1,
211  const reco::Muon& muon2,
212  unsigned int segmentArbitrationMask = reco::MuonSegmentMatch::BestInChamberByDR);
213 
215  reco::Vertex const* vertex = nullptr,
216  bool run2016_hip_mitigation = false);
217 } // namespace muon
218 #endif
muon::TMOneStation
Definition: MuonSelectors.h:155
muon::SelectorStringToEnum::value
reco::Muon::Selector value
Definition: MuonSelectors.h:105
reco::Muon::MvaVTight
Definition: Muon.h:232
muon::GEMMu
Definition: MuonSelectors.h:155
Muon.h
muon::isSoftMuon
bool isSoftMuon(const reco::Muon &, const reco::Vertex &, bool run2016_hip_mitigation=false)
Definition: MuonSelectors.cc:931
reco::Muon::SegmentAndTrackArbitration
Definition: Muon.h:190
reco::Muon::CutBasedIdTrkHighPt
Definition: Muon.h:207
reco::Muon::MiniIsoVeryTight
Definition: Muon.h:223
muon
Definition: MuonCocktails.h:17
muon::segmentCompatibility
float segmentCompatibility(const reco::Muon &muon, reco::Muon::ArbitrationType arbitrationType=reco::Muon::SegmentAndTrackArbitration)
Definition: MuonSelectors.cc:61
muon::SelectorStringToEnum
Definition: MuonSelectors.h:103
muon::TMLastStation
Definition: MuonSelectors.h:155
reco::Muon::Selector
Selector
Definition: Muon.h:201
reco::Muon::PuppiIsoLoose
Definition: Muon.h:229
reco::Muon::SoftMvaId
Definition: Muon.h:216
muon::GlobalMuonPromptTight
Definition: MuonSelectors.h:26
muon::TMLastStationTight
Definition: MuonSelectors.h:28
reco::Muon::MultiIsoLoose
Definition: Muon.h:227
muon::TrackerMuonArbitrated
Definition: MuonSelectors.h:24
reco
fixed size matrix
Definition: AlignmentAlgorithmBase.h:45
reco::Muon::TkIsoLoose
Definition: Muon.h:213
muon::isLooseTriggerMuon
bool isLooseTriggerMuon(const reco::Muon &)
Definition: MuonSelectors.cc:881
reco::Muon::CutBasedIdLoose
Definition: Muon.h:202
reco::Muon::TkIsoTight
Definition: Muon.h:214
muon::RPCMuLoose
Definition: MuonSelectors.h:53
muon::AllGEMMuons
Definition: MuonSelectors.h:56
muon::GMTkChiCompatibility
Definition: MuonSelectors.h:35
reco::Muon
Definition: Muon.h:27
muon::ME0Mu
Definition: MuonSelectors.h:155
reco::Muon::PuppiIsoTight
Definition: Muon.h:231
reco::Muon::CutBasedIdMedium
Definition: Muon.h:203
muon::isGoodMuon
bool isGoodMuon(const reco::Muon &muon, SelectionType type, reco::Muon::ArbitrationType arbitrationType=reco::Muon::SegmentAndTrackArbitration)
main GoodMuon wrapper call
Definition: MuonSelectors.cc:664
muon::isLooseMuon
bool isLooseMuon(const reco::Muon &)
Definition: MuonSelectors.cc:910
reco::Muon::PuppiIsoMedium
Definition: Muon.h:230
muon::SelectionTypeStringToEnum::value
SelectionType value
Definition: MuonSelectors.h:64
muon::isTrackerHighPtMuon
bool isTrackerHighPtMuon(const reco::Muon &, const reco::Vertex &)
Definition: MuonSelectors.cc:975
muon::selectionTypeFromString
SelectionType selectionTypeFromString(const std::string &label)
Definition: MuonSelectors.cc:9
reco::Muon::PFIsoLoose
Definition: Muon.h:209
muon::SelectionType
SelectionType
Selector type.
Definition: MuonSelectors.h:19
reco::Muon::PFIsoVeryLoose
Definition: Muon.h:208
reco::Muon::MvaLoose
Definition: Muon.h:217
muon::caloCompatibility
float caloCompatibility(const reco::Muon &muon)
Definition: MuonSelectors.cc:58
muon::TMLastStationOptimizedLowPtLoose
Definition: MuonSelectors.h:33
reco::Muon::MvaVVTight
Definition: Muon.h:233
HLT_2018_cff.maxAbsPullY
maxAbsPullY
Definition: HLT_2018_cff.py:10226
reco::Muon::MiniIsoLoose
Definition: Muon.h:220
reco::Muon::MiniIsoTight
Definition: Muon.h:222
muon::AllGlobalMuons
Definition: MuonSelectors.h:21
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
muon::isHighPtMuon
bool isHighPtMuon(const reco::Muon &, const reco::Vertex &)
Definition: MuonSelectors.cc:947
muon::GMTkKinkTight
Definition: MuonSelectors.h:37
muon::TMOneStationTight
Definition: MuonSelectors.h:32
bphysicsOniaDQM_cfi.vertex
vertex
Definition: bphysicsOniaDQM_cfi.py:7
muon::isTightMuon
bool isTightMuon(const reco::Muon &, const reco::Vertex &)
Definition: MuonSelectors.cc:895
reco::Muon::TriggerIdLoose
Definition: Muon.h:224
reco::Muon::LowPtMvaMedium
Definition: Muon.h:235
muon::TMLastStationAngTight
Definition: MuonSelectors.h:39
reco::Muon::PFIsoVeryTight
Definition: Muon.h:212
muon::AllME0Muons
Definition: MuonSelectors.h:54
reco::Muon::MultiIsoMedium
Definition: Muon.h:228
muon::overlap
bool overlap(const reco::Muon &muon1, const reco::Muon &muon2, double pullX=1.0, double pullY=1.0, bool checkAdjacentChambers=false)
Definition: MuonSelectors.cc:806
reco::Muon::LowPtMvaLoose
Definition: Muon.h:234
muon::SelectionTypeStringToEnum
a lightweight "map" for selection type string label and enum value
Definition: MuonSelectors.h:62
muon::ME0MuonArbitrated
Definition: MuonSelectors.h:55
reco::Muon::MiniIsoMedium
Definition: Muon.h:221
reco::Muon::CutBasedIdMediumPrompt
Definition: Muon.h:204
muon::TMLastStationOptimizedBarrelLowPtLoose
Definition: MuonSelectors.h:50
muon::All
Definition: MuonSelectors.h:20
muon::isMediumMuon
bool isMediumMuon(const reco::Muon &, bool run2016_hip_mitigation=false)
Definition: MuonSelectors.cc:914
muon::TMOneStationLoose
Definition: MuonSelectors.h:31
muon::AllArbitrated
Definition: MuonSelectors.h:25
reco::Muon::PFIsoTight
Definition: Muon.h:211
reco::Muon::MvaMedium
Definition: Muon.h:218
muon::makeSelectorBitset
reco::Muon::Selector makeSelectorBitset(reco::Muon const &muon, reco::Vertex const *vertex=nullptr, bool run2016_hip_mitigation=false)
Definition: MuonSelectors.cc:1045
muon::TMLastStationOptimizedBarrelLowPtTight
Definition: MuonSelectors.h:52
muon::TM2DCompatibilityTight
Definition: MuonSelectors.h:30
reco::Muon::CutBasedIdGlobalHighPt
Definition: Muon.h:206
muon::selectionTypeStringToEnumMap
static const SelectionTypeStringToEnum selectionTypeStringToEnumMap[]
Definition: MuonSelectors.h:67
type
type
Definition: HCALResponse.h:21
reco::Muon::PFIsoVeryVeryTight
Definition: Muon.h:226
muon::sharedSegments
int sharedSegments(const reco::Muon &muon1, const reco::Muon &muon2, unsigned int segmentArbitrationMask=reco::MuonSegmentMatch::BestInChamberByDR)
Definition: MuonSelectors.cc:990
muon::selectorStringToEnumMap
static const SelectorStringToEnum selectorStringToEnumMap[]
Definition: MuonSelectors.h:108
HltBtagValidation_cff.Vertex
Vertex
Definition: HltBtagValidation_cff.py:32
HLT_2018_cff.minNumberOfMatches
minNumberOfMatches
Definition: HLT_2018_cff.py:10328
reco::Muon::PFIsoMedium
Definition: Muon.h:210
muon::GEMMuonArbitrated
Definition: MuonSelectors.h:57
muon::selectorFromString
reco::Muon::Selector selectorFromString(const std::string &label)
Definition: MuonSelectors.cc:24
muon::AlgorithmType
AlgorithmType
Definition: MuonSelectors.h:155
muon::TMLastStationLoose
Definition: MuonSelectors.h:27
reco::Muon::SoftCutBasedId
Definition: Muon.h:215
muon::SelectorStringToEnum::label
const char * label
Definition: MuonSelectors.h:104
muon::SelectionTypeStringToEnum::label
const char * label
Definition: MuonSelectors.h:63
muon::TMLastStationOptimizedLowPtTight
Definition: MuonSelectors.h:34
muon::TM2DCompatibility
Definition: MuonSelectors.h:155
muon::TMLastStationAngLoose
Definition: MuonSelectors.h:38
muon::AllStandAloneMuons
Definition: MuonSelectors.h:22
muon::GMStaChiCompatibility
Definition: MuonSelectors.h:36
muon::TriggerIdLoose
Definition: MuonSelectors.h:58
HLT_2018_cff.maxAbsPullX
maxAbsPullX
Definition: HLT_2018_cff.py:10225
muon::TMOneStationAngTight
Definition: MuonSelectors.h:41
reco::Muon::MvaTight
Definition: Muon.h:219
muon::RPCMu
Definition: MuonSelectors.h:155
muon::AllTrackerMuons
Definition: MuonSelectors.h:23
muon::RequiredStationMask
unsigned int RequiredStationMask(const reco::Muon &muon, double maxChamberDist, double maxChamberDistPull, reco::Muon::ArbitrationType arbitrationType)
Definition: MuonSelectors.cc:40
HLT_2018_cff.maxAbsDy
maxAbsDy
Definition: HLT_2018_cff.py:10306
muon::TMOneStationAngLoose
Definition: MuonSelectors.h:40
HLT_2018_cff.maxAbsDx
maxAbsDx
Definition: HLT_2018_cff.py:10326
label
const char * label
Definition: PFTauDecayModeTools.cc:11
reco::Vertex
Definition: Vertex.h:35
reco::MuonSegmentMatch::BestInChamberByDR
static const unsigned int BestInChamberByDR
Definition: MuonSegmentMatch.h:17
reco::Muon::CutBasedIdTight
Definition: Muon.h:205
reco::Muon::ArbitrationType
ArbitrationType
define arbitration schemes
Definition: Muon.h:187
muon::TM2DCompatibilityLoose
Definition: MuonSelectors.h:29
reco::Muon::InTimeMuon
Definition: Muon.h:225