CMS 3D CMS Logo

MuonTrackProducer.cc
Go to the documentation of this file.
1 //
2 // modified & integrated by Giovanni Abbiendi
3 // from code by Arun Luthra:
4 // UserCode/luthra/MuonTrackSelector/src/MuonTrackSelector.cc
5 //
22 
23 #include <algorithm>
24 #include <sstream>
25 #include <memory>
26 
28 public:
29  explicit MuonTrackProducer(const edm::ParameterSet &);
30 
31 private:
32  void produce(edm::StreamID, edm::Event &, const edm::EventSetup &) const override;
33 
38 
39  std::vector<std::string> selectionTags;
42 };
43 
45  : muonsToken(consumes<reco::MuonCollection>(parset.getParameter<edm::InputTag>("muonsTag"))),
46  inputDTRecSegment4DToken_(
47  consumes<DTRecSegment4DCollection>(parset.getParameter<edm::InputTag>("inputDTRecSegment4DCollection"))),
48  inputCSCSegmentToken_(
49  consumes<CSCSegmentCollection>(parset.getParameter<edm::InputTag>("inputCSCSegmentCollection"))),
50  ttopoToken_(esConsumes<TrackerTopology, TrackerTopologyRcd>()),
51  selectionTags(parset.getParameter<std::vector<std::string>>("selectionTags")),
52  trackType(parset.getParameter<std::string>("trackType")),
53  ignoreMissingMuonCollection(parset.getUntrackedParameter<bool>("ignoreMissingMuonCollection", false)) {
54  edm::LogVerbatim("MuonTrackProducer") << "constructing MuonTrackProducer" << parset.dump();
55  produces<reco::TrackCollection>();
56  produces<reco::TrackExtraCollection>();
57  produces<TrackingRecHitCollection>();
58 }
59 
61  edm::Handle<reco::MuonCollection> muonCollectionH = iEvent.getHandle(muonsToken);
62  if (ignoreMissingMuonCollection && !muonCollectionH.isValid())
63  edm::LogVerbatim("MuonTrackProducer") << "\n ignoring missing muon collection.";
64 
65  else {
66  const DTRecSegment4DCollection &dtSegmentCollection = iEvent.get(inputDTRecSegment4DToken_);
67  const CSCSegmentCollection &cscSegmentCollection = iEvent.get(inputCSCSegmentToken_);
68 
69  const TrackerTopology &ttopo = iSetup.getData(ttopoToken_);
70 
71  std::unique_ptr<reco::TrackCollection> selectedTracks(new reco::TrackCollection);
72  std::unique_ptr<reco::TrackExtraCollection> selectedTrackExtras(new reco::TrackExtraCollection());
73  std::unique_ptr<TrackingRecHitCollection> selectedTrackHits(new TrackingRecHitCollection());
74 
75  reco::TrackRefProd rTracks = iEvent.getRefBeforePut<reco::TrackCollection>();
76  reco::TrackExtraRefProd rTrackExtras = iEvent.getRefBeforePut<reco::TrackExtraCollection>();
77  TrackingRecHitRefProd rHits = iEvent.getRefBeforePut<TrackingRecHitCollection>();
78 
81 
82  edm::LogVerbatim("MuonTrackProducer") << "\nThere are " << dtSegmentCollection.size() << " DT segments.";
83  unsigned int index_dt_segment = 0;
84  for (DTRecSegment4DCollection::const_iterator segment = dtSegmentCollection.begin();
85  segment != dtSegmentCollection.end();
86  ++segment, index_dt_segment++) {
87  LocalPoint segmentLocalPosition = segment->localPosition();
88  LocalVector segmentLocalDirection = segment->localDirection();
89  LocalError segmentLocalPositionError = segment->localPositionError();
90  LocalError segmentLocalDirectionError = segment->localDirectionError();
91  DetId geoid = segment->geographicalId();
92  DTChamberId dtdetid = DTChamberId(geoid);
93  int wheel = dtdetid.wheel();
94  int station = dtdetid.station();
95  int sector = dtdetid.sector();
96 
97  float segmentX = segmentLocalPosition.x();
98  float segmentY = segmentLocalPosition.y();
99  float segmentdXdZ = segmentLocalDirection.x() / segmentLocalDirection.z();
100  float segmentdYdZ = segmentLocalDirection.y() / segmentLocalDirection.z();
101  float segmentXerr = sqrt(segmentLocalPositionError.xx());
102  float segmentYerr = sqrt(segmentLocalPositionError.yy());
103  float segmentdXdZerr = sqrt(segmentLocalDirectionError.xx());
104  float segmentdYdZerr = sqrt(segmentLocalDirectionError.yy());
105 
106  edm::LogVerbatim("MuonTrackProducer")
107  << "\nDT segment index :" << index_dt_segment << "\nchamber Wh:" << wheel << ",St:" << station
108  << ",Se:" << sector << "\nLocal Position (X,Y)=(" << segmentX << "," << segmentY << ") +/- (" << segmentXerr
109  << "," << segmentYerr << "), "
110  << "Local Direction (dXdZ,dYdZ)=(" << segmentdXdZ << "," << segmentdYdZ << ") +/- (" << segmentdXdZerr << ","
111  << segmentdYdZerr << ")";
112  }
113 
114  edm::LogVerbatim("MuonTrackProducer") << "\nThere are " << cscSegmentCollection.size() << " CSC segments.";
115  unsigned int index_csc_segment = 0;
116  for (CSCSegmentCollection::const_iterator segment = cscSegmentCollection.begin();
117  segment != cscSegmentCollection.end();
118  ++segment, index_csc_segment++) {
119  LocalPoint segmentLocalPosition = segment->localPosition();
120  LocalVector segmentLocalDirection = segment->localDirection();
121  LocalError segmentLocalPositionError = segment->localPositionError();
122  LocalError segmentLocalDirectionError = segment->localDirectionError();
123 
124  DetId geoid = segment->geographicalId();
125  CSCDetId cscdetid = CSCDetId(geoid);
126  int endcap = cscdetid.endcap();
127  int station = cscdetid.station();
128  int ring = cscdetid.ring();
129  int chamber = cscdetid.chamber();
130 
131  float segmentX = segmentLocalPosition.x();
132  float segmentY = segmentLocalPosition.y();
133  float segmentdXdZ = segmentLocalDirection.x() / segmentLocalDirection.z();
134  float segmentdYdZ = segmentLocalDirection.y() / segmentLocalDirection.z();
135  float segmentXerr = sqrt(segmentLocalPositionError.xx());
136  float segmentYerr = sqrt(segmentLocalPositionError.yy());
137  float segmentdXdZerr = sqrt(segmentLocalDirectionError.xx());
138  float segmentdYdZerr = sqrt(segmentLocalDirectionError.yy());
139 
140  edm::LogVerbatim("MuonTrackProducer")
141  << "\nCSC segment index :" << index_csc_segment << "\nchamber Endcap:" << endcap << ",St:" << station
142  << ",Ri:" << ring << ",Ch:" << chamber << "\nLocal Position (X,Y)=(" << segmentX << "," << segmentY
143  << ") +/- (" << segmentXerr << "," << segmentYerr << "), "
144  << "Local Direction (dXdZ,dYdZ)=(" << segmentdXdZ << "," << segmentdYdZ << ") +/- (" << segmentdXdZerr << ","
145  << segmentdYdZerr << ")";
146  }
147 
148  edm::LogVerbatim("MuonTrackProducer") << "\nThere are " << muonCollectionH->size() << " reco::Muons.";
149  unsigned int muon_index = 0;
150  for (reco::MuonCollection::const_iterator muon = muonCollectionH->begin(); muon != muonCollectionH->end();
151  ++muon, muon_index++) {
152  edm::LogVerbatim("MuonTrackProducer") << "\n******* muon index : " << muon_index;
153 
154  const bool isGoodResult =
155  std::all_of(selectionTags.begin(), selectionTags.end(), [&muon](const std::string &name) {
157  return muon::isGoodMuon(*muon, muonType);
158  });
159 
160  if (isGoodResult) {
161  // new copy of Track
162  reco::TrackRef trackref;
163  bool addMatchedMuonSegments = false;
164 
165  if (trackType == "innerTrack") {
166  if (muon->innerTrack().isNonnull())
167  trackref = muon->innerTrack();
168  else
169  continue;
170  } else if (trackType == "outerTrack") {
171  if (muon->outerTrack().isNonnull())
172  trackref = muon->outerTrack();
173  else
174  continue;
175  } else if (trackType == "globalTrack") {
176  if (muon->globalTrack().isNonnull())
177  trackref = muon->globalTrack();
178  else
179  continue;
180  } else if (trackType == "innerTrackPlusSegments") {
181  if (muon->innerTrack().isNonnull()) {
182  trackref = muon->innerTrack();
183  addMatchedMuonSegments = true;
184  } else
185  continue;
186  } else if (trackType == "rpcMuonTrack") {
187  if (muon->innerTrack().isNonnull() && muon->isRPCMuon()) {
188  trackref = muon->innerTrack();
189  } else
190  continue;
191  } else if (trackType == "gemMuonTrack") {
192  if (muon->innerTrack().isNonnull() && muon->isGEMMuon()) {
193  trackref = muon->innerTrack();
194  } else
195  continue;
196  } else if (trackType == "me0MuonTrack") {
197  if (muon->innerTrack().isNonnull() && muon->isME0Muon()) {
198  trackref = muon->innerTrack();
199  } else
200  continue;
201  } else if (trackType == "tunepTrack") {
202  if (muon->isGlobalMuon() && muon->tunePMuonBestTrack().isNonnull())
203  trackref = muon->tunePMuonBestTrack();
204  else
205  continue;
206  } else if (trackType == "pfTrack") {
207  if (muon->isPFMuon() && muon->muonBestTrack().isNonnull())
208  trackref = muon->muonBestTrack();
209  else
210  continue;
211  } else if (trackType == "recomuonTrack") {
212  if (muon->isGlobalMuon())
213  trackref = muon->globalTrack();
214  else if (muon->isTrackerMuon()) {
215  trackref = muon->innerTrack();
216  addMatchedMuonSegments = true;
217  } else if (muon->isStandAloneMuon())
218  trackref = muon->outerTrack();
219  else if (muon->isRPCMuon())
220  trackref = muon->innerTrack();
221  else if (muon->isGEMMuon())
222  trackref = muon->innerTrack();
223  else if (muon->isME0Muon())
224  trackref = muon->innerTrack();
225  else
226  trackref = muon->muonBestTrack();
227 
228  if (muon->muonBestTrackType() != muon->tunePMuonBestTrackType())
229  edm::LogVerbatim("MuonTrackProducer") << "\n *** PF != TuneP *** \n" << std::endl;
230 
231  edm::LogVerbatim("MuonTrackProducer") << "isGlobal ? " << muon->isGlobalMuon() << std::endl;
232  edm::LogVerbatim("MuonTrackProducer")
233  << "isTracker ? " << muon->isTrackerMuon() << ", isRPC ? " << muon->isRPCMuon() << ", isGEM ? "
234  << muon->isGEMMuon() << ", isME0 ? " << muon->isME0Muon() << std::endl;
235  edm::LogVerbatim("MuonTrackProducer") << "isStandAlone ? " << muon->isStandAloneMuon() << std::endl;
236  edm::LogVerbatim("MuonTrackProducer") << "isCalo ? " << muon->isCaloMuon() << std::endl;
237  edm::LogVerbatim("MuonTrackProducer") << "isPF ? " << muon->isPFMuon() << std::endl << std::endl;
238 
239  edm::LogVerbatim("MuonTrackProducer")
240  << " enum MuonTrackType {None, InnerTrack, OuterTrack, CombinedTrack, TPFMS, Picky, DYT }" << std::endl;
241 
242  edm::LogVerbatim("MuonTrackProducer")
243  << "(muon) pt = " << muon->pt() << ", eta = " << muon->eta() << ", phi = " << muon->phi() << std::endl;
244 
245  if (muon->muonBestTrack().isNonnull())
246  edm::LogVerbatim("MuonTrackProducer")
247  << "(best) pt = " << muon->muonBestTrack()->pt() << ", eta = " << muon->muonBestTrack()->eta()
248  << ", phi = " << muon->muonBestTrack()->phi()
249  << ", N mu hits = " << muon->muonBestTrack()->hitPattern().numberOfValidMuonHits()
250  << ", N trk hits = " << muon->muonBestTrack()->hitPattern().numberOfValidTrackerHits()
251  << ", MuonTrackType = " << muon->muonBestTrackType() << std::endl;
252  if (muon->tunePMuonBestTrack().isNonnull())
253  edm::LogVerbatim("MuonTrackProducer")
254  << "(tuneP) pt = " << muon->tunePMuonBestTrack()->pt()
255  << ", eta = " << muon->tunePMuonBestTrack()->eta() << ", phi = " << muon->tunePMuonBestTrack()->phi()
256  << ", N mu hits = " << muon->tunePMuonBestTrack()->hitPattern().numberOfValidMuonHits()
257  << ", N trk hits = " << muon->tunePMuonBestTrack()->hitPattern().numberOfValidTrackerHits()
258  << ", MuonTrackType = " << muon->tunePMuonBestTrackType() << std::endl;
259  if (muon->innerTrack().isNonnull())
260  edm::LogVerbatim("MuonTrackProducer")
261  << "(inner) pt = " << muon->innerTrack()->pt() << ", eta = " << muon->innerTrack()->eta()
262  << ", phi = " << muon->innerTrack()->phi()
263  << ", N trk hits = " << muon->innerTrack()->hitPattern().numberOfValidTrackerHits() << std::endl;
264  if (muon->globalTrack().isNonnull())
265  edm::LogVerbatim("MuonTrackProducer")
266  << "(global) pt = " << muon->globalTrack()->pt() << ", eta = " << muon->globalTrack()->eta()
267  << ", phi = " << muon->globalTrack()->phi()
268  << ", N mu hits = " << muon->globalTrack()->hitPattern().numberOfValidMuonHits()
269  << ", N trk hits = " << muon->globalTrack()->hitPattern().numberOfValidTrackerHits() << std::endl;
270  if (muon->outerTrack().isNonnull())
271  edm::LogVerbatim("MuonTrackProducer")
272  << "(outer) pt = " << muon->outerTrack()->pt() << ", eta = " << muon->outerTrack()->eta()
273  << ", phi = " << muon->outerTrack()->phi()
274  << ", N mu hits = " << muon->outerTrack()->hitPattern().numberOfValidMuonHits() << std::endl;
275  if (muon->tpfmsTrack().isNonnull())
276  edm::LogVerbatim("MuonTrackProducer")
277  << "(tpfms) pt = " << muon->tpfmsTrack()->pt() << ", eta = " << muon->tpfmsTrack()->eta()
278  << ", phi = " << muon->tpfmsTrack()->phi()
279  << ", N mu hits = " << muon->tpfmsTrack()->hitPattern().numberOfValidMuonHits()
280  << ", N trk hits = " << muon->tpfmsTrack()->hitPattern().numberOfValidTrackerHits() << std::endl;
281  if (muon->pickyTrack().isNonnull())
282  edm::LogVerbatim("MuonTrackProducer")
283  << "(picky) pt = " << muon->pickyTrack()->pt() << ", eta = " << muon->pickyTrack()->eta()
284  << ", phi = " << muon->pickyTrack()->phi()
285  << ", N mu hits = " << muon->pickyTrack()->hitPattern().numberOfValidMuonHits()
286  << ", N trk hits = " << muon->pickyTrack()->hitPattern().numberOfValidTrackerHits() << std::endl;
287  if (muon->dytTrack().isNonnull())
288  edm::LogVerbatim("MuonTrackProducer")
289  << "(dyt) pt = " << muon->dytTrack()->pt() << ", eta = " << muon->dytTrack()->eta()
290  << ", phi = " << muon->dytTrack()->phi()
291  << ", N mu hits = " << muon->dytTrack()->hitPattern().numberOfValidMuonHits()
292  << ", N trk hits = " << muon->dytTrack()->hitPattern().numberOfValidTrackerHits() << std::endl;
293  }
294 
295  edm::LogVerbatim("MuonTrackProducer") << "\t *** Selected *** ";
296  const reco::Track *trk = &(*trackref);
297  // pointer to old track:
298  std::unique_ptr<reco::Track> newTrk(new reco::Track(*trk));
299 
300  newTrk->setExtra(reco::TrackExtraRef(rTrackExtras, idx++));
301  PropagationDirection seedDir = trk->seedDirection();
302  // new copy of track Extras
303  std::unique_ptr<reco::TrackExtra> newExtra(new reco::TrackExtra(trk->outerPosition(),
304  trk->outerMomentum(),
305  trk->outerOk(),
306  trk->innerPosition(),
307  trk->innerMomentum(),
308  trk->innerOk(),
309  trk->outerStateCovariance(),
310  trk->outerDetId(),
311  trk->innerStateCovariance(),
312  trk->innerDetId(),
313  seedDir));
314 
315  // new copy of the silicon hits; add hit refs to Extra and hits to hit
316  // collection
317 
318  // edm::LogVerbatim("MuonTrackProducer")<<"\n printing initial
319  // hit_pattern"; trk->hitPattern().print();
320  unsigned int nHitsToAdd = 0;
321  for (trackingRecHit_iterator iHit = trk->recHitsBegin(); iHit != trk->recHitsEnd(); iHit++) {
322  TrackingRecHit *hit = (*iHit)->clone();
323  selectedTrackHits->push_back(hit);
324  ++nHitsToAdd;
325  }
326 
327  if (addMatchedMuonSegments) {
328  int wheel, station, sector;
329  int endcap, /*station, */ ring, chamber;
330 
331  edm::LogVerbatim("MuonTrackProducer")
332  << "Number of chambers: " << muon->matches().size()
333  << ", arbitrated: " << muon->numberOfMatches(reco::Muon::SegmentAndTrackArbitration);
334  unsigned int index_chamber = 0;
335 
336  for (std::vector<reco::MuonChamberMatch>::const_iterator chamberMatch = muon->matches().begin();
337  chamberMatch != muon->matches().end();
338  ++chamberMatch, index_chamber++) {
339  std::stringstream chamberStr;
340  chamberStr << "\nchamber index: " << index_chamber;
341 
342  int subdet = chamberMatch->detector();
343  DetId did = chamberMatch->id;
344 
345  if (subdet == MuonSubdetId::DT) {
346  DTChamberId dtdetid = DTChamberId(did);
347  wheel = dtdetid.wheel();
348  station = dtdetid.station();
349  sector = dtdetid.sector();
350  chamberStr << ", DT chamber Wh:" << wheel << ",St:" << station << ",Se:" << sector;
351  } else if (subdet == MuonSubdetId::CSC) {
352  CSCDetId cscdetid = CSCDetId(did);
353  endcap = cscdetid.endcap();
354  station = cscdetid.station();
355  ring = cscdetid.ring();
356  chamber = cscdetid.chamber();
357  chamberStr << ", CSC chamber End:" << endcap << ",St:" << station << ",Ri:" << ring << ",Ch:" << chamber;
358  }
359 
360  chamberStr << ", Number of segments: " << chamberMatch->segmentMatches.size();
361  edm::LogVerbatim("MuonTrackProducer") << chamberStr.str();
362 
363  unsigned int index_segment = 0;
364 
365  for (std::vector<reco::MuonSegmentMatch>::const_iterator segmentMatch =
366  chamberMatch->segmentMatches.begin();
367  segmentMatch != chamberMatch->segmentMatches.end();
368  ++segmentMatch, index_segment++) {
369  float segmentX = segmentMatch->x;
370  float segmentY = segmentMatch->y;
371  float segmentdXdZ = segmentMatch->dXdZ;
372  float segmentdYdZ = segmentMatch->dYdZ;
373  float segmentXerr = segmentMatch->xErr;
374  float segmentYerr = segmentMatch->yErr;
375  float segmentdXdZerr = segmentMatch->dXdZErr;
376  float segmentdYdZerr = segmentMatch->dYdZErr;
377 
378  CSCSegmentRef segmentCSC = segmentMatch->cscSegmentRef;
379  DTRecSegment4DRef segmentDT = segmentMatch->dtSegmentRef;
380 
381  bool segment_arbitrated_Ok = (segmentMatch->isMask(reco::MuonSegmentMatch::BestInChamberByDR) &&
382  segmentMatch->isMask(reco::MuonSegmentMatch::BelongsToTrackByDR));
383 
384  std::string ARBITRATED(" ***Arbitrated Off*** ");
385  if (segment_arbitrated_Ok)
386  ARBITRATED = " ***ARBITRATED OK*** ";
387 
388  if (subdet == MuonSubdetId::DT) {
389  edm::LogVerbatim("MuonTrackProducer")
390  << "\n\t segment index: " << index_segment << ARBITRATED << "\n\t Local Position (X,Y)=("
391  << segmentX << "," << segmentY << ") +/- (" << segmentXerr << "," << segmentYerr << "), "
392  << "\n\t Local Direction (dXdZ,dYdZ)=(" << segmentdXdZ << "," << segmentdYdZ << ") +/- ("
393  << segmentdXdZerr << "," << segmentdYdZerr << ")";
394 
395  if (!segment_arbitrated_Ok)
396  continue;
397 
398  if (segmentDT.get() != nullptr) {
399  const DTRecSegment4D *segment = segmentDT.get();
400 
401  edm::LogVerbatim("MuonTrackProducer")
402  << "\t ===> MATCHING with DT segment with index = " << segmentDT.key();
403 
404  if (segment->hasPhi()) {
405  const DTChamberRecSegment2D *phiSeg = segment->phiSegment();
406  std::vector<const TrackingRecHit *> phiHits = phiSeg->recHits();
407  for (std::vector<const TrackingRecHit *>::const_iterator ihit = phiHits.begin();
408  ihit != phiHits.end();
409  ++ihit) {
410  TrackingRecHit *seghit = (*ihit)->clone();
411  newTrk->appendHitPattern(*seghit, ttopo);
412  // edm::LogVerbatim("MuonTrackProducer")<<"hit
413  // pattern for position "<<index_hit<<" set to:";
414  // newTrk->hitPattern().printHitPattern(index_hit,
415  // std::cout);
416  selectedTrackHits->push_back(seghit);
417  ++nHitsToAdd;
418  }
419  }
420 
421  if (segment->hasZed()) {
422  const DTSLRecSegment2D *zSeg = (*segment).zSegment();
423  std::vector<const TrackingRecHit *> zedHits = zSeg->recHits();
424  for (std::vector<const TrackingRecHit *>::const_iterator ihit = zedHits.begin();
425  ihit != zedHits.end();
426  ++ihit) {
427  TrackingRecHit *seghit = (*ihit)->clone();
428  newTrk->appendHitPattern(*seghit, ttopo);
429  // edm::LogVerbatim("MuonTrackProducer")<<"hit
430  // pattern for position "<<index_hit<<" set to:";
431  // newTrk->hitPattern().printHitPattern(index_hit,
432  // std::cout);
433  selectedTrackHits->push_back(seghit);
434  ++nHitsToAdd;
435  }
436  }
437  } else
438  edm::LogWarning("MuonTrackProducer") << "\n***WARNING: UNMATCHED DT segment ! \n";
439  } // if (subdet == MuonSubdetId::DT)
440 
441  else if (subdet == MuonSubdetId::CSC) {
442  edm::LogVerbatim("MuonTrackProducer")
443  << "\n\t segment index: " << index_segment << ARBITRATED << "\n\t Local Position (X,Y)=("
444  << segmentX << "," << segmentY << ") +/- (" << segmentXerr << "," << segmentYerr << "), "
445  << "\n\t Local Direction (dXdZ,dYdZ)=(" << segmentdXdZ << "," << segmentdYdZ << ") +/- ("
446  << segmentdXdZerr << "," << segmentdYdZerr << ")";
447 
448  if (!segment_arbitrated_Ok)
449  continue;
450 
451  if (segmentCSC.get() != nullptr) {
452  const CSCSegment *segment = segmentCSC.get();
453 
454  edm::LogVerbatim("MuonTrackProducer")
455  << "\t ===> MATCHING with CSC segment with index = " << segmentCSC.key();
456 
457  std::vector<const TrackingRecHit *> hits = segment->recHits();
458  for (std::vector<const TrackingRecHit *>::const_iterator ihit = hits.begin(); ihit != hits.end();
459  ++ihit) {
460  TrackingRecHit *seghit = (*ihit)->clone();
461  newTrk->appendHitPattern(*seghit, ttopo);
462  // edm::LogVerbatim("MuonTrackProducer")<<"hit
463  // pattern for position "<<index_hit<<" set to:";
464  // newTrk->hitPattern().printHitPattern(index_hit,
465  // std::cout);
466  selectedTrackHits->push_back(seghit);
467  ++nHitsToAdd;
468  }
469  } else
470  edm::LogWarning("MuonTrackProducer") << "\n***WARNING: UNMATCHED CSC segment ! \n";
471  } // else if (subdet == MuonSubdetId::CSC)
472 
473  } // loop on vector<MuonSegmentMatch>
474  } // loop on vector<MuonChamberMatch>
475  } // if (trackType == "innerTrackPlusSegments")
476 
477  // edm::LogVerbatim("MuonTrackProducer")<<"\n printing final
478  // hit_pattern"; newTrk->hitPattern().print();
479 
480  newExtra->setHits(rHits, hidx, nHitsToAdd);
481  hidx += nHitsToAdd;
482 
483  selectedTracks->push_back(*newTrk);
484  selectedTrackExtras->push_back(*newExtra);
485 
486  } // if (isGoodResult)
487  } // loop on reco::MuonCollection
488 
490  iEvent.put(std::move(selectedTrackExtras));
491  iEvent.put(std::move(selectedTrackHits));
492  }
493 }
494 
reco::Track::outerPosition
const math::XYZPoint & outerPosition() const
position of the outermost hit
Definition: Track.h:62
Vector3DBase< float, LocalTag >
reco::Track::outerMomentum
const math::XYZVector & outerMomentum() const
momentum vector at the outermost hit position
Definition: Track.h:65
edm::RefProd< TrackCollection >
edm::StreamID
Definition: StreamID.h:30
DTSLRecSegment2D
Definition: DTSLRecSegment2D.h:15
reco::Track::outerStateCovariance
CovarianceMatrix outerStateCovariance() const
outermost trajectory state curvilinear errors
Definition: Track.h:68
MuonSubdetId::CSC
static constexpr int CSC
Definition: MuonSubdetId.h:12
DTRecSegment4D
Definition: DTRecSegment4D.h:23
reco::Track::outerDetId
unsigned int outerDetId() const
DetId of the detector on which surface the outermost state is located.
Definition: Track.h:79
electrons_cff.bool
bool
Definition: electrons_cff.py:393
Muon.h
MessageLogger.h
funct::false
false
Definition: Factorize.h:29
reco::Muon::SegmentAndTrackArbitration
Definition: Muon.h:190
hfClusterShapes_cfi.hits
hits
Definition: hfClusterShapes_cfi.py:5
reco::Track::recHitsBegin
trackingRecHit_iterator recHitsBegin() const
Iterator to first hit on the track.
Definition: Track.h:88
muon
Definition: MuonCocktails.h:17
PV3DBase::x
T x() const
Definition: PV3DBase.h:59
MuonTrackProducer_cfi.ignoreMissingMuonCollection
ignoreMissingMuonCollection
Definition: MuonTrackProducer_cfi.py:9
MonitorTrackInnerTrackMuons_cff.selectionTags
selectionTags
Definition: MonitorTrackInnerTrackMuons_cff.py:22
edm::EDGetTokenT< reco::MuonCollection >
relativeConstraints.station
station
Definition: relativeConstraints.py:67
edm
HLT enums.
Definition: AlignableModifier.h:19
CSCDetId::ring
int ring() const
Definition: CSCDetId.h:68
TrackerTopology
Definition: TrackerTopology.h:16
HLT_FULL_cff.InputTag
InputTag
Definition: HLT_FULL_cff.py:85964
edm::Ref::get
T const * get() const
Returns C++ pointer to the item.
Definition: Ref.h:232
MuonTrackProducer::inputCSCSegmentToken_
edm::EDGetTokenT< CSCSegmentCollection > inputCSCSegmentToken_
Definition: MuonTrackProducer.cc:36
CSCSegmentCollection
reco
fixed size matrix
Definition: AlignmentAlgorithmBase.h:45
makeMuonMisalignmentScenario.endcap
endcap
Definition: makeMuonMisalignmentScenario.py:320
reco::Track::outerOk
bool outerOk() const
return true if the outermost hit is valid
Definition: Track.h:50
edm::Handle< reco::MuonCollection >
MuonTrackProducer::inputDTRecSegment4DToken_
edm::EDGetTokenT< DTRecSegment4DCollection > inputDTRecSegment4DToken_
Definition: MuonTrackProducer.cc:35
edm::LogWarning
Log< level::Warning, false > LogWarning
Definition: MessageLogger.h:122
reco::MuonSegmentMatch::BelongsToTrackByDR
static const unsigned int BelongsToTrackByDR
Definition: MuonSegmentMatch.h:25
CSCDetId.h
edm::Ref< TrackCollection >
reco::Track::innerStateCovariance
CovarianceMatrix innerStateCovariance() const
innermost trajectory state curvilinear errors
Definition: Track.h:71
heavyIonCSV_trainingSettings.idx
idx
Definition: heavyIonCSV_trainingSettings.py:5
reco::Track::innerOk
bool innerOk() const
return true if the innermost hit is valid
Definition: Track.h:53
PV3DBase::z
T z() const
Definition: PV3DBase.h:61
DTRecSegment2D::recHits
std::vector< const TrackingRecHit * > recHits() const override
Access to component RecHits (if any)
Definition: DTRecSegment2D.cc:86
DetId
Definition: DetId.h:17
reco::TrackExtra
Definition: TrackExtra.h:26
MakerMacros.h
TrackerTopology.h
MuonTrackProducer::muonsToken
edm::EDGetTokenT< reco::MuonCollection > muonsToken
Definition: MuonTrackProducer.cc:34
reco::Track::innerMomentum
const math::XYZVector & innerMomentum() const
momentum vector at the innermost hit position
Definition: Track.h:59
muon::isGoodMuon
bool isGoodMuon(const reco::Muon &muon, SelectionType type, reco::Muon::ArbitrationType arbitrationType=reco::Muon::SegmentAndTrackArbitration)
main GoodMuon wrapper call
Definition: MuonSelectors.cc:649
TrackerTopologyRcd.h
Track.h
TrackFwd.h
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
muon::selectionTypeFromString
SelectionType selectionTypeFromString(const std::string &label)
Definition: MuonSelectors.cc:9
muon::SelectionType
SelectionType
Selector type.
Definition: MuonSelectors.h:18
MuonTrackProducer::selectionTags
std::vector< std::string > selectionTags
Definition: MuonTrackProducer.cc:39
LocalError::xx
float xx() const
Definition: LocalError.h:22
HLT_FULL_cff.muon
muon
Definition: HLT_FULL_cff.py:11773
edm::ParameterSet::dump
std::string dump(unsigned int indent=0) const
Definition: ParameterSet.cc:832
MuonSelectors.h
MuonFwd.h
reco::MuonCollection
std::vector< Muon > MuonCollection
collection of Muon objects
Definition: MuonFwd.h:9
mathSSE::sqrt
T sqrt(T t)
Definition: SSEVec.h:19
reco::Track::recHitsEnd
trackingRecHit_iterator recHitsEnd() const
Iterator to last hit on the track.
Definition: Track.h:91
MuonTrackProducer::produce
void produce(edm::StreamID, edm::Event &, const edm::EventSetup &) const override
Definition: MuonTrackProducer.cc:60
reco::Track
Definition: Track.h:27
reco::TrackExtraCollection
std::vector< TrackExtra > TrackExtraCollection
collection of TrackExtra objects
Definition: TrackExtraFwd.h:10
MuonSubdetId::DT
static constexpr int DT
Definition: MuonSubdetId.h:11
Point3DBase< float, LocalTag >
DTRecSegment4DCollection
DTChamberId.h
CSCSegment
Definition: CSCSegment.h:21
edm::OwnVector::const_iterator
Definition: OwnVector.h:41
edm::global::EDProducer
Definition: EDProducer.h:32
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
reco::Track::seedDirection
const PropagationDirection & seedDirection() const
direction of how the hits were sorted in the original seed
Definition: Track.h:148
edm::ParameterSet
Definition: ParameterSet.h:47
Event.h
MuonTrackProducer::ttopoToken_
edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > ttopoToken_
Definition: MuonTrackProducer.cc:37
LocalError
Definition: LocalError.h:12
edm::RangeMap::const_iterator
C::const_iterator const_iterator
constant access iterator type
Definition: RangeMap.h:43
CSCDetId
Definition: CSCDetId.h:26
MuonTrackProducer::ignoreMissingMuonCollection
bool ignoreMissingMuonCollection
Definition: MuonTrackProducer.cc:41
PV3DBase::y
T y() const
Definition: PV3DBase.h:60
reco::Track::innerPosition
const math::XYZPoint & innerPosition() const
position of the innermost hit
Definition: Track.h:56
makeMuonMisalignmentScenario.wheel
wheel
Definition: makeMuonMisalignmentScenario.py:319
ModuleDef.h
iEvent
int iEvent
Definition: GenABIO.cc:224
DTChamberRecSegment2D
Definition: DTChamberRecSegment2D.h:31
reco::Track::innerDetId
unsigned int innerDetId() const
DetId of the detector on which surface the innermost state is located.
Definition: Track.h:82
trackerHitRTTI::vector
Definition: trackerHitRTTI.h:21
CSCDetId::chamber
int chamber() const
Definition: CSCDetId.h:62
edm::EventSetup
Definition: EventSetup.h:57
TrackingRecHit::clone
virtual TrackingRecHit * clone() const =0
MuonSubdetId.h
edm::ESGetToken< TrackerTopology, TrackerTopologyRcd >
edm::Ref::key_type
std::remove_cv< typename std::remove_reference< argument_type >::type >::type key_type
Definition: Ref.h:164
PbPb_ZMuSkimMuonDPG_cff.trackType
trackType
Definition: PbPb_ZMuSkimMuonDPG_cff.py:36
MuonTrackProducer::trackType
std::string trackType
Definition: MuonTrackProducer.cc:40
edm::EventSetup::getData
bool getData(T &iHolder) const
Definition: EventSetup.h:120
TrackingRecHit
Definition: TrackingRecHit.h:21
DTChamberId::sector
int sector() const
Definition: DTChamberId.h:49
eostools.move
def move(src, dest)
Definition: eostools.py:511
std
Definition: JetResolutionObject.h:76
DTRecSegment4D::hasZed
bool hasZed() const
Does it have the Z projection?
Definition: DTRecSegment4D.h:93
edm::LogVerbatim
Log< level::Info, true > LogVerbatim
Definition: MessageLogger.h:128
CSCDetId::endcap
int endcap() const
Definition: CSCDetId.h:85
MuonTrackProducer::MuonTrackProducer
MuonTrackProducer(const edm::ParameterSet &)
Definition: MuonTrackProducer.cc:44
PropagationDirection
PropagationDirection
Definition: PropagationDirection.h:4
TrackingRecHitCollection
edm::OwnVector< TrackingRecHit > TrackingRecHitCollection
collection of TrackingRecHits
Definition: TrackingRecHitFwd.h:10
relativeConstraints.ring
ring
Definition: relativeConstraints.py:68
relativeConstraints.chamber
chamber
Definition: relativeConstraints.py:53
Skims_PA_cff.name
name
Definition: Skims_PA_cff.py:17
MuonTrackProducer
Definition: MuonTrackProducer.cc:27
DTRecSegment4D::hasPhi
bool hasPhi() const
Does it have the Phi projection?
Definition: DTRecSegment4D.h:90
edm::Ref::key
key_type key() const
Accessor for product key.
Definition: Ref.h:250
DTChamberId
Definition: DTChamberId.h:14
TrackerTopologyRcd
Definition: TrackerTopologyRcd.h:10
ParameterSet.h
CSCDetId::station
int station() const
Definition: CSCDetId.h:79
EDProducer.h
edm::HandleBase::isValid
bool isValid() const
Definition: HandleBase.h:70
edm::Event
Definition: Event.h:73
edm::Log
Definition: MessageLogger.h:70
DTRecSegment4D::phiSegment
const DTChamberRecSegment2D * phiSegment() const
The superPhi segment: 0 if no phi projection available.
Definition: DTRecSegment4D.h:96
LocalError::yy
float yy() const
Definition: LocalError.h:24
DTChamberId::wheel
int wheel() const
Return the wheel number.
Definition: DTChamberId.h:39
reco::TrackCollection
std::vector< Track > TrackCollection
collection of Tracks
Definition: TrackFwd.h:14
DTChamberId::station
int station() const
Return the station number.
Definition: DTChamberId.h:42
hit
Definition: SiStripHitEffFromCalibTree.cc:88
edm::OwnVector< TrackingRecHit >
TrackCollections2monitor_cff.selectedTracks
selectedTracks
Definition: TrackCollections2monitor_cff.py:32
reco::MuonSegmentMatch::BestInChamberByDR
static const unsigned int BestInChamberByDR
Definition: MuonSegmentMatch.h:17
DTRecSegment4DCollection.h
CSCSegment::recHits
std::vector< const TrackingRecHit * > recHits() const override
Access to component RecHits (if any)
Definition: CSCSegment.cc:32
CSCSegmentCollection.h