CMS 3D CMS Logo

MuonIdProducer.h
Go to the documentation of this file.
1 #ifndef MuonIdentification_MuonIdProducer_h
2 #define MuonIdentification_MuonIdProducer_h
3 
4 // -*- C++ -*-
5 //
6 // Package: MuonIdentification
7 // Class: MuonIdProducer
8 //
9 /*
10 
11  Description: reco::Muon producer that can fill various information:
12  - track-segment matching
13  - energy deposition
14  - muon isolation
15  - muon hypothesis compatibility (calorimeter)
16  Acceptable inputs:
17  - reco::TrackCollection
18  - reco::MuonCollection
19  - reco::MuonTrackLinksCollection
20 */
21 //
22 // Original Author: Dmytro Kovalskyi
23 //
24 //
25 
26 // user include files
29 
33 
35 
43 
45 // #include "Utilities/Timing/interface/TimerStack.h"
46 
51 
52 // RPC-Muon stuffs
56 
59 
63 
64 class MuonMesh;
65 class MuonKinkFinder;
66 
68 public:
70 
71  explicit MuonIdProducer(const edm::ParameterSet&);
72 
73  ~MuonIdProducer() override;
74 
75  void produce(edm::Event&, const edm::EventSetup&) override;
76  void beginRun(const edm::Run&, const edm::EventSetup&) override;
77 
78  static double sectorPhi(const DetId& id);
79 
80  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
81 
82 private:
83  void fillMuonId(edm::Event&,
84  const edm::EventSetup&,
85  reco::Muon&,
90  const edm::EventSetup&,
91  reco::Muon& aMuon,
92  reco::IsoDeposit& trackDep,
93  reco::IsoDeposit& ecalDep,
94  reco::IsoDeposit& hcalDep,
95  reco::IsoDeposit& hoDep,
96  reco::IsoDeposit& jetDep);
97  void fillGlbQuality(edm::Event&, const edm::EventSetup&, reco::Muon& aMuon);
98  void fillTrackerKink(reco::Muon& aMuon);
99  void init(edm::Event&, const edm::EventSetup&);
100 
101  // make a muon based on a track ref
103  // make a global muon based on the links object
105 
106  // make a muon based on track (p4)
108 
110 
111  // check if a silicon track satisfies the trackerMuon requirements
112  bool isGoodTrack(const reco::Track& track);
113 
114  bool isGoodTrackerMuon(const reco::Muon& muon);
115  bool isGoodCaloMuon(const reco::CaloMuon& muon);
116  bool isGoodRPCMuon(const reco::Muon& muon);
117  bool isGoodGEMMuon(const reco::Muon& muon);
118  bool isGoodME0Muon(const reco::Muon& muon);
119 
120  // check number of common DetIds for a given trackerMuon and a stand alone
121  // muon track
122  int overlap(const reco::Muon& muon, const reco::Track& track);
123 
124  unsigned int chamberId(const DetId&);
125 
126  double phiOfMuonInteractionRegion(const reco::Muon& muon) const;
127 
128  bool checkLinks(const reco::MuonTrackLinks*) const;
129  inline bool approxEqual(const double a, const double b, const double tol = 1E-3) const {
130  return std::abs(a - b) < tol;
131  }
132 
134  std::vector<reco::MuonSegmentMatch>* getSegmentMatches(reco::MuonChamberMatch& chamber, unsigned int muonType) const {
135  if (muonType == reco::Muon::TrackerMuon)
136  return &chamber.segmentMatches;
137  else if (muonType == reco::Muon::ME0Muon)
138  return &chamber.me0Matches;
139  else if (muonType == reco::Muon::GEMMuon)
140  return &chamber.gemMatches;
141  else
142  throw cms::Exception("getSegmentMatches called with unsupported muonType");
143  }
144 
147 
148  struct ICTypes {
150 
151  static ICTypeKey toKey(const std::string& s) {
152  if (s == "inner tracks")
153  return INNER_TRACKS;
154  else if (s == "outer tracks")
155  return OUTER_TRACKS;
156  else if (s == "links")
157  return LINKS;
158  else if (s == "muons")
159  return MUONS;
160  else if (s == "tev firstHit")
161  return TEV_FIRSTHIT;
162  else if (s == "tev picky")
163  return TEV_PICKY;
164  else if (s == "tev dyt")
165  return TEV_DYT;
166 
167  throw cms::Exception("FatalError") << "Unknown input collection type: " << s;
168  }
169 
170  static std::string toStr(const ICTypeKey k) {
171  switch (k) {
172  case INNER_TRACKS:
173  return "inner tracks";
174  case OUTER_TRACKS:
175  return "outer tracks";
176  case LINKS:
177  return "links";
178  case MUONS:
179  return "muons";
180  case TEV_FIRSTHIT:
181  return "tev firstHit";
182  case TEV_PICKY:
183  return "tev picky";
184  case TEV_DYT:
185  return "tev dyt";
186  default:
187  throw cms::Exception("FatalError") << "Unknown input collection type";
188  }
189  return "";
190  }
191  };
192  std::vector<edm::InputTag> inputCollectionLabels_;
193  std::vector<ICTypes::ICTypeKey> inputCollectionTypes_;
194 
195  std::unique_ptr<MuonTimingFiller> theTimingFiller_;
196 
197  std::unique_ptr<MuonShowerDigiFiller> theShowerDigiFiller_;
198 
199  // selections
200  double minPt_;
201  double minP_;
204  double maxAbsEta_;
206 
207  // matching
208  double maxAbsDx_;
210  double maxAbsDy_;
212 
213  // what information to fill
223 
225 
227 
236 
245 
248 
251 
255 
257  std::unique_ptr<reco::isodeposit::IsoDepositExtractor> muIsoExtractorCalo_;
258  std::unique_ptr<reco::isodeposit::IsoDepositExtractor> muIsoExtractorTrack_;
259  std::unique_ptr<reco::isodeposit::IsoDepositExtractor> muIsoExtractorJet_;
265 
269 
273  std::unique_ptr<MuonKinkFinder> trackerKinkFinder_;
274 
275  double caloCut_;
276 
277  bool arbClean_;
278  std::unique_ptr<MuonMesh> meshAlgo_;
279 };
280 #endif
std::string hoDepositName_
std::string jetDepositName_
bool isGoodRPCMuon(const reco::Muon &muon)
bool approxEqual(const double a, const double b, const double tol=1E-3) const
edm::EDGetTokenT< reco::TrackCollection > innerTrackCollectionToken_
reco::Muon makeMuon(edm::Event &iEvent, const edm::EventSetup &iSetup, const reco::TrackRef &track, TrackType type)
edm::InputTag pvInputTag_
void fillMuonIsolation(edm::Event &, const edm::EventSetup &, reco::Muon &aMuon, reco::IsoDeposit &trackDep, reco::IsoDeposit &ecalDep, reco::IsoDeposit &hcalDep, reco::IsoDeposit &hoDep, reco::IsoDeposit &jetDep)
edm::EDGetTokenT< edm::ValueMap< reco::MuonQuality > > glbQualToken_
TrackDetectorAssociator trackAssociator_
std::unique_ptr< MuonKinkFinder > trackerKinkFinder_
void fillMuonId(edm::Event &, const edm::EventSetup &, reco::Muon &, TrackDetectorAssociator::Direction direction=TrackDetectorAssociator::InsideOut)
edm::Handle< reco::MuonTrackLinksCollection > linkCollectionHandle_
edm::EDGetTokenT< RPCRecHitCollection > rpcHitToken_
const edm::ESGetToken< Propagator, TrackingComponentsRecord > propagatorToken_
bool isGoodGEMMuon(const reco::Muon &muon)
int overlap(const reco::Muon &muon, const reco::Track &track)
bool fillCaloCompatibility_
std::string trackDepositName_
void fillArbitrationInfo(reco::MuonCollection *, unsigned int muonType=reco::Muon::TrackerMuon)
std::vector< CaloMuon > CaloMuonCollection
collection of Muon objects
Definition: MuonFwd.h:27
const edm::ESGetToken< CSCGeometry, MuonGeometryRecord > geomTokenRun_
void produce(edm::Event &, const edm::EventSetup &) override
MuonCaloCompatibility muonCaloCompatibility_
edm::EDGetTokenT< reco::TrackToTrackMap > pickyCollectionToken_
static std::string toStr(const ICTypeKey k)
bool arbitrateTrackerMuons_
void fillGlbQuality(edm::Event &, const edm::EventSetup &, reco::Muon &aMuon)
std::unique_ptr< reco::isodeposit::IsoDepositExtractor > muIsoExtractorTrack_
std::vector< Muon > MuonCollection
collection of Muon objects
Definition: MuonFwd.h:9
std::unique_ptr< MuonTimingFiller > theTimingFiller_
double phiOfMuonInteractionRegion(const reco::Muon &muon) const
edm::ESGetToken< GlobalTrackingGeometry, GlobalTrackingGeometryRecord > globalGeomToken_
std::unique_ptr< reco::isodeposit::IsoDepositExtractor > muIsoExtractorCalo_
void init(edm::Event &, const edm::EventSetup &)
edm::EDGetTokenT< reco::TrackToTrackMap > tpfmsCollectionToken_
int iEvent
Definition: GenABIO.cc:224
std::unique_ptr< MuonShowerDigiFiller > theShowerDigiFiller_
edm::Handle< reco::VertexCollection > pvHandle_
double ptThresholdToFillCandidateP4WithGlobalFit_
TrackAssociatorParameters parameters_
bool isGoodME0Muon(const reco::Muon &muon)
void fillTrackerKink(reco::Muon &aMuon)
static const unsigned int ME0Muon
Definition: Muon.h:294
bool isGoodTrackerMuon(const reco::Muon &muon)
std::string ecalDepositName_
bool checkLinks(const reco::MuonTrackLinks *) const
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
edm::EDGetTokenT< reco::MuonCollection > muonCollectionToken_
edm::EDGetTokenT< reco::TrackCollection > outerTrackCollectionToken_
edm::Handle< RPCRecHitCollection > rpcHitHandle_
edm::Handle< reco::TrackToTrackMap > dytCollectionHandle_
edm::Handle< reco::TrackCollection > outerTrackCollectionHandle_
edm::EDGetTokenT< reco::MuonTrackLinksCollection > linkCollectionToken_
bool fillGlobalTrackRefits_
static double sectorPhi(const DetId &id)
reco::CaloMuon makeCaloMuon(const reco::Muon &)
reco::Muon::MuonTrackType TrackType
Definition: DetId.h:17
static ICTypeKey toKey(const std::string &s)
std::vector< reco::MuonSegmentMatch > * getSegmentMatches(reco::MuonChamberMatch &chamber, unsigned int muonType) const
get the segment matches of the appropriate type
static const unsigned int TrackerMuon
Definition: Muon.h:288
std::vector< ICTypes::ICTypeKey > inputCollectionTypes_
std::vector< edm::InputTag > inputCollectionLabels_
double b
Definition: hdecay.h:118
std::unique_ptr< reco::isodeposit::IsoDepositExtractor > muIsoExtractorJet_
MuonIdProducer(const edm::ParameterSet &)
void arbitrateMuons(reco::MuonCollection *, reco::CaloMuonCollection *)
bool fillGlobalTrackQuality_
std::string hcalDepositName_
~MuonIdProducer() override
unsigned int chamberId(const DetId &)
static const unsigned int GEMMuon
Definition: Muon.h:293
double a
Definition: hdecay.h:119
edm::Handle< reco::TrackToTrackMap > tpfmsCollectionHandle_
bool storeCrossedHcalRecHits_
edm::Handle< reco::TrackCollection > innerTrackCollectionHandle_
bool isGoodTrack(const reco::Track &track)
edm::EDGetTokenT< reco::VertexCollection > pvToken_
MuonTrackType
map for Global Muon refitters
Definition: Muon.h:36
double sigmaThresholdToFillCandidateP4WithGlobalFit_
bool debugWithTruthMatching_
bool isGoodCaloMuon(const reco::CaloMuon &muon)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
edm::InputTag globalTrackQualityInputTag_
edm::Handle< reco::MuonCollection > muonCollectionHandle_
Definition: Run.h:45
edm::Handle< edm::ValueMap< reco::MuonQuality > > glbQualHandle_
void beginRun(const edm::Run &, const edm::EventSetup &) override
std::unique_ptr< MuonMesh > meshAlgo_
edm::Handle< reco::TrackToTrackMap > pickyCollectionHandle_
edm::EDGetTokenT< reco::TrackToTrackMap > dytCollectionToken_