CMS 3D CMS Logo

MuonTrackLoader.cc
Go to the documentation of this file.
1 
10 
14 
24 
26 
30 
35 
38 
41 
42 using namespace edm;
43 using namespace std;
44 using namespace reco;
45 
46 std::vector<const TrackingRecHit*> MuonTrackLoader::unpackHit(const TrackingRecHit& hit) {
47  // get rec hit det id and rec hit type
48  DetId id = hit.geographicalId();
49  uint16_t detid = id.det();
50 
51  std::vector<const TrackingRecHit*> hits;
52 
53  if (detid == DetId::Tracker) {
54  hits.push_back(&hit);
55  } else if (detid == DetId::Muon) {
56  uint16_t subdet = id.subdetId();
57  if (subdet == (uint16_t)MuonSubdetId::DT) {
58  if (hit.dimension() == 1) { // DT rechit (granularity 2)
59  hits.push_back(&hit);
60  } else if (hit.dimension() > 1) { // 4D segment (granularity 0).
61  // Both 2 and 4 dim cases. MB4s have 2D, but formatted in 4D segment
62  // 4D --> 2D
63  std::vector<const TrackingRecHit*> seg2D = hit.recHits();
64  // load 1D hits (2D --> 1D)
65  for (std::vector<const TrackingRecHit*>::const_iterator it = seg2D.begin(); it != seg2D.end(); ++it) {
66  std::vector<const TrackingRecHit*> hits1D = (*it)->recHits();
67  copy(hits1D.begin(), hits1D.end(), back_inserter(hits));
68  }
69  }
70  } else if (subdet == (uint16_t)MuonSubdetId::CSC) {
71  if (hit.dimension() == 2) { // CSC rechit (granularity 2)
72  hits.push_back(&hit);
73  } else if (hit.dimension() == 4) { // 4D segment (granularity 0)
74  // load 2D hits (4D --> 1D)
75  hits = hit.recHits();
76  }
77  } else if (subdet == (uint16_t)MuonSubdetId::RPC) {
78  hits.push_back(&hit);
79  } else if (subdet == (uint16_t)MuonSubdetId::GEM) {
80  if (hit.dimension() == 2) { // GEM rechit
81  hits.push_back(&hit);
82  } else if (hit.dimension() == 4) { // GEM segment
83  hits = hit.recHits();
84  }
85  } else if (subdet == (uint16_t)MuonSubdetId::ME0) { //segment
86  hits = hit.recHits();
87  }
88  }
89  return hits;
90 }
91 
92 // constructor (obsolete, should use eventSetUp not service..)
96  : theService(service) {
97  // option to do or not the smoothing step.
98  // the trajectories which are passed to the track loader are supposed to be non-smoothed
99  theSmoothingStep = parameterSet.getParameter<bool>("DoSmoothing");
100  if (theSmoothingStep)
101  theSmootherName = parameterSet.getParameter<string>("Smoother");
102 
104 
105  // update at vertex
106  theUpdatingAtVtx = parameterSet.getParameter<bool>("VertexConstraint");
107 
108  // beam spot input tag
111 
112  // Flag to put the trajectory into the event
113  theTrajectoryFlag = parameterSet.getUntrackedParameter<bool>("PutTrajectoryIntoEvent", true);
114 
115  theL2SeededTkLabel = parameterSet.getUntrackedParameter<string>("MuonSeededTracksInstance", string());
116 
117  ParameterSet updatorPar = parameterSet.getParameter<ParameterSet>("MuonUpdatorAtVertexParameters");
118  theUpdatorAtVtx.reset(new MuonUpdatorAtVertex(updatorPar, service));
119 
120  thePutTkTrackFlag = parameterSet.getUntrackedParameter<bool>("PutTkTrackIntoEvent", false);
121  theSmoothTkTrackFlag = parameterSet.getUntrackedParameter<bool>("SmoothTkTrack", false);
122  theAllowNoVtxFlag = parameterSet.getUntrackedParameter<bool>("AllowNoVertex", false);
123 }
124 
126 
128  Event& event,
129  const TrackerTopology& ttopo,
130  const string& instance,
131  bool reallyDoSmoothing) {
132  std::vector<bool> dummyVecBool;
133  return loadTracks(trajectories, event, dummyVecBool, ttopo, instance, reallyDoSmoothing);
134 }
135 
137  Event& event,
138  std::vector<bool>& tkBoolVec,
139  const TrackerTopology& ttopo,
140  const string& instance,
141  bool reallyDoSmoothing) {
142  const bool doSmoothing = theSmoothingStep && reallyDoSmoothing;
143 
144  const string metname = "Muon|RecoMuon|MuonTrackLoader";
145 
146  // the track collectios; they will be loaded in the event
147  auto trackCollection = std::make_unique<reco::TrackCollection>();
148  // ... and its reference into the event
149  reco::TrackRefProd trackCollectionRefProd = event.getRefBeforePut<reco::TrackCollection>(instance);
150 
151  // track collection for the tracks updated at vertex
152  auto updatedAtVtxTrackCollection = std::make_unique<reco::TrackCollection>();
153  // ... and its (eventually) reference into the event
154  reco::TrackRefProd trackUpdatedCollectionRefProd;
155  if (theUpdatingAtVtx)
156  trackUpdatedCollectionRefProd = event.getRefBeforePut<reco::TrackCollection>(instance + "UpdatedAtVtx");
157 
158  // Association map between updated and non updated at vtx tracks
159  auto trackToTrackmap = std::make_unique<reco::TrackToTrackMap>(trackCollectionRefProd, trackUpdatedCollectionRefProd);
160 
161  // the track extra collection, it will be loaded in the event
162  auto trackExtraCollection = std::make_unique<reco::TrackExtraCollection>();
163  // ... and its reference into the event
164  reco::TrackExtraRefProd trackExtraCollectionRefProd = event.getRefBeforePut<reco::TrackExtraCollection>(instance);
165 
166  // the rechit collection, it will be loaded in the event
167  auto recHitCollection = std::make_unique<TrackingRecHitCollection>();
168  // ... and its reference into the event
169  TrackingRecHitRefProd recHitCollectionRefProd = event.getRefBeforePut<TrackingRecHitCollection>(instance);
170 
171  // Collection of Trajectory
172  auto trajectoryCollection = std::make_unique<vector<Trajectory>>();
173 
174  // don't waste any time...
175  if (trajectories.empty()) {
176  event.put(std::move(recHitCollection), instance);
177  event.put(std::move(trackExtraCollection), instance);
178  if (theTrajectoryFlag) {
179  event.put(std::move(trajectoryCollection), instance);
180 
181  // Association map between track and trajectory
182  auto trajTrackMap = std::make_unique<TrajTrackAssociationCollection>();
183  event.put(std::move(trajTrackMap), instance);
184  }
185  if (theUpdatingAtVtx) {
186  event.put(std::move(trackToTrackmap));
187  event.put(std::move(updatedAtVtxTrackCollection), instance + "UpdatedAtVtx");
188  }
189  return event.put(std::move(trackCollection), instance);
190  }
191 
193  event.getByToken(theBeamSpotToken, beamSpot);
194 
195  LogTrace(metname) << "Create the collection of Tracks";
196 
197  reco::TrackRef::key_type trackIndex = 0;
198  reco::TrackRef::key_type trackUpdatedIndex = 0;
199 
200  reco::TrackExtraRef::key_type trackExtraIndex = 0;
201 
203  edm::Ref<std::vector<Trajectory>>::key_type iTjRef = 0;
204  std::map<unsigned int, unsigned int> tjTkMap;
205 
206  if (doSmoothing) {
208  theService->eventSetup().get<TrajectoryFitter::Record>().get(theSmootherName, aSmoother);
209  theSmoother.reset(aSmoother->clone());
210  edm::ESHandle<TransientTrackingRecHitBuilder> theTrackerRecHitBuilder;
211  theService->eventSetup().get<TransientRecHitRecord>().get(theTrackerRecHitBuilderName, theTrackerRecHitBuilder);
212  theTrackerRecHitBuilder.product();
213  hitCloner = static_cast<TkTransientTrackingRecHitBuilder const*>(theTrackerRecHitBuilder.product())->cloner();
214  theSmoother->setHitCloner(&hitCloner);
215  }
216 
217  unsigned int tjCnt = 0;
218  for (TrajectoryContainer::iterator itRawTrajectory = trajectories.begin(); itRawTrajectory != trajectories.end();
219  ++itRawTrajectory, ++tjCnt) {
220  auto rawTrajectory = std::move(*itRawTrajectory);
221  Trajectory& trajectory = *rawTrajectory;
222 
223  if (doSmoothing) {
224  vector<Trajectory> trajectoriesSM = theSmoother->trajectories(*rawTrajectory);
225 
226  if (!trajectoriesSM.empty()) {
227  const edm::RefToBase<TrajectorySeed> tmpSeedRef = (*rawTrajectory).seedRef();
228  trajectory = trajectoriesSM.front();
229  trajectory.setSeedRef(tmpSeedRef);
230  LogDebug(metname) << "theSeedRef.isNonnull " << trajectory.seedRef().isNonnull();
231  } else
232  LogInfo(metname) << "The trajectory has not been smoothed!" << endl;
233  }
234 
235  if (theTrajectoryFlag) {
236  trajectoryCollection->push_back(trajectory);
237  iTjRef++;
238  }
239 
240  // build the "bare" track from the trajectory.
241  // This track has the parameters defined at PCA (no update)
242  pair<bool, reco::Track> resultOfTrackExtrapAtPCA = buildTrackAtPCA(trajectory, *beamSpot);
243 
244  // Check if the extrapolation went well
245  if (!resultOfTrackExtrapAtPCA.first) {
246  continue;
247  }
248 
249  // take the "bare" track at PCA
250  reco::Track& track = resultOfTrackExtrapAtPCA.second;
251 
252  // build the "bare" track extra from the trajectory
253  reco::TrackExtra trackExtra = buildTrackExtra(trajectory);
254 
255  // get the TrackExtraRef (persitent reference of the track extra)
256  reco::TrackExtraRef trackExtraRef(trackExtraCollectionRefProd, trackExtraIndex++);
257 
258  // set the persistent track-extra reference to the Track
259  track.setExtra(trackExtraRef);
260 
261  // build the updated-at-vertex track, starting from the previous track
262  pair<bool, reco::Track> updateResult(false, reco::Track());
263 
264  if (theUpdatingAtVtx) {
265  // build the "bare" track UPDATED at vtx
266  updateResult = buildTrackUpdatedAtPCA(track, *beamSpot);
267 
268  if (!updateResult.first)
269  ++trackIndex;
270  else {
271  // set the persistent track-extra reference to the Track
272  updateResult.second.setExtra(trackExtraRef);
273 
274  // Fill the map
275  trackToTrackmap->insert(reco::TrackRef(trackCollectionRefProd, trackIndex++),
276  reco::TrackRef(trackUpdatedCollectionRefProd, trackUpdatedIndex++));
277  }
278  }
279 
280  // get the transient rechit and co from the trajectory
281  reco::TrackExtra::TrajParams trajParams;
283  Traj2TrackHits t2t;
284  auto ih = recHitCollection->size();
285  t2t(trajectory, *recHitCollection, trajParams, chi2s);
286  auto ie = recHitCollection->size();
287  // set the TrackingRecHitRef (persitent reference of the tracking rec hits)
288  trackExtra.setHits(recHitCollectionRefProd, ih, ie - ih);
289  trackExtra.setTrajParams(std::move(trajParams), std::move(chi2s));
290  assert(trackExtra.trajParams().size() == trackExtra.recHitsSize());
291 
292  // Fill the hit pattern
293  for (; ih < ie; ++ih) {
294  auto const& hit = (*recHitCollection)[ih];
296  for (auto hh : hits) {
297  if
298  UNLIKELY(!track.appendHitPattern(*hh, ttopo)) break;
299  }
300 
301  if (theUpdatingAtVtx && updateResult.first) {
302  for (auto hh : hits) {
303  if
304  UNLIKELY(!updateResult.second.appendHitPattern(*hh, ttopo)) break;
305  }
306  }
307  }
308 
309  // fill the TrackExtraCollection
310  trackExtraCollection->push_back(trackExtra);
311 
312  // fill the TrackCollection
313  trackCollection->push_back(track);
314  iTkRef++;
315  LogTrace(metname) << "Debug Track being loaded pt " << track.pt();
316  // fill the TrackCollection updated at vtx
317  if (theUpdatingAtVtx && updateResult.first)
318  updatedAtVtxTrackCollection->push_back(updateResult.second);
319 
320  if (tkBoolVec.size() > tjCnt)
321  tkBoolVec[tjCnt] = true;
322  if (theTrajectoryFlag)
323  tjTkMap[iTjRef - 1] = iTkRef - 1;
324  }
325 
326  // Put the Collections in the event
327  LogTrace(metname) << "put the Collections in the event";
328  event.put(std::move(recHitCollection), instance);
329  event.put(std::move(trackExtraCollection), instance);
330 
331  OrphanHandle<reco::TrackCollection> returnTrackHandle;
332  OrphanHandle<reco::TrackCollection> nonUpdatedHandle;
333  if (theUpdatingAtVtx) {
334  nonUpdatedHandle = event.put(std::move(trackCollection), instance);
335  event.put(std::move(trackToTrackmap));
336  returnTrackHandle = event.put(std::move(updatedAtVtxTrackCollection), instance + "UpdatedAtVtx");
337  } else {
338  returnTrackHandle = event.put(std::move(trackCollection), instance);
339  nonUpdatedHandle = returnTrackHandle;
340  }
341 
342  if (theTrajectoryFlag) {
343  OrphanHandle<std::vector<Trajectory>> rTrajs = event.put(std::move(trajectoryCollection), instance);
344 
345  // Association map between track and trajectory
346  auto trajTrackMap = std::make_unique<TrajTrackAssociationCollection>(rTrajs, nonUpdatedHandle);
347 
348  // Now Create traj<->tracks association map
349  for (std::map<unsigned int, unsigned int>::iterator i = tjTkMap.begin(); i != tjTkMap.end(); i++) {
350  trajTrackMap->insert(edm::Ref<std::vector<Trajectory>>(rTrajs, (*i).first),
351  edm::Ref<reco::TrackCollection>(nonUpdatedHandle, (*i).second));
352  }
353  event.put(std::move(trajTrackMap), instance);
354  }
355 
356  return returnTrackHandle;
357 }
358 
360  Event& event,
361  const TrackerTopology& ttopo) {
362  const string metname = "Muon|RecoMuon|MuonTrackLoader";
363 
364  // the muon collection, it will be loaded in the event
365  auto trackLinksCollection = std::make_unique<reco::MuonTrackLinksCollection>();
366 
367  // don't waste any time...
368  if (muonCands.empty()) {
369  auto trackExtraCollection = std::make_unique<reco::TrackExtraCollection>();
370  auto recHitCollection = std::make_unique<TrackingRecHitCollection>();
371  auto trackCollection = std::make_unique<reco::TrackCollection>();
372 
373  event.put(std::move(recHitCollection));
374  event.put(std::move(trackExtraCollection));
375  event.put(std::move(trackCollection));
376 
377  //need to also put the tracker tracks collection if requested
378  if (thePutTkTrackFlag) {
379  //will take care of putting nothing in the event but the empty collection
380  TrajectoryContainer trackerTrajs;
382  }
383 
384  return event.put(std::move(trackLinksCollection));
385  }
386 
387  // get combined Trajectories
388  TrajectoryContainer combinedTrajs;
389  TrajectoryContainer trackerTrajs;
390  for (CandidateContainer::iterator it = muonCands.begin(); it != muonCands.end(); ++it) {
391  LogDebug(metname) << "Loader glbSeedRef " << (*it)->trajectory()->seedRef().isNonnull();
392  if ((*it)->trackerTrajectory())
393  LogDebug(metname) << " "
394  << "tkSeedRef " << (*it)->trackerTrajectory()->seedRef().isNonnull();
395 
396  combinedTrajs.push_back((*it)->releaseTrajectory());
397  {
398  auto tt = (*it)->releaseTrackerTrajectory();
399  if (thePutTkTrackFlag)
400  trackerTrajs.push_back(std::move(tt));
401  }
402 
403  // // Create the links between sta and tracker tracks
404  // reco::MuonTrackLinks links;
405  // links.setStandAloneTrack((*it)->muonTrack());
406  // links.setTrackerTrack((*it)->trackerTrack());
407  // trackLinksCollection->push_back(links);
408  // delete *it;
409  }
410 
411  // create the TrackCollection of combined Trajectories
412  // FIXME: could this be done one track at a time in the previous loop?
413  LogTrace(metname) << "Build combinedTracks";
414  std::vector<bool> combTksVec(combinedTrajs.size(), false);
415  OrphanHandle<reco::TrackCollection> combinedTracks = loadTracks(combinedTrajs, event, combTksVec, ttopo);
416 
418  std::vector<bool> trackerTksVec(trackerTrajs.size(), false);
419  if (thePutTkTrackFlag) {
420  LogTrace(metname) << "Build trackerTracks: " << trackerTrajs.size();
421  trackerTracks = loadTracks(trackerTrajs, event, trackerTksVec, ttopo, theL2SeededTkLabel, theSmoothTkTrackFlag);
422  }
423 
424  trackerTrajs.clear();
425 
426  LogTrace(metname) << "Set the final links in the MuonTrackLinks collection";
427 
428  unsigned int candposition(0), position(0), tkposition(0);
429  //reco::TrackCollection::const_iterator glIt = combinedTracks->begin(),
430  // glEnd = combinedTracks->end();
431 
432  for (CandidateContainer::const_iterator it = muonCands.begin(); it != muonCands.end(); ++it, ++candposition) {
433  // The presence of the global track determines whether to fill the MuonTrackLinks or not
434  // N.B. We are assuming here that the global tracks in "combinedTracks"
435  // have the same order as the muon candidates in "muonCands"
436  // (except for possible missing tracks), which should always be the case...
437  //if( glIt == glEnd ) break;
438  if (combTksVec[candposition]) {
439  reco::TrackRef combinedTR(combinedTracks, position++);
440  //++glIt;
441 
442  // Create the links between sta and tracker tracks
444  links.setStandAloneTrack((*it)->muonTrack());
445  links.setTrackerTrack((*it)->trackerTrack());
446  links.setGlobalTrack(combinedTR);
447 
448  if (thePutTkTrackFlag && trackerTksVec[candposition]) {
449  reco::TrackRef trackerTR(trackerTracks, tkposition++);
450  links.setTrackerTrack(trackerTR);
451  }
452 
453  trackLinksCollection->push_back(links);
454  }
455 
456  else { // if no global track, still increment the tracker-track counter when appropriate
457  if (thePutTkTrackFlag && trackerTksVec[candposition])
458  tkposition++;
459  }
460  }
461 
462  if (thePutTkTrackFlag && trackerTracks.isValid() && !(!combinedTracks->empty() && !trackerTracks->empty()))
463  LogWarning(metname) << "The MuonTrackLinkCollection is incomplete";
464 
465  // put the MuonCollection in the event
466  LogTrace(metname) << "put the MuonCollection in the event"
467  << "\n";
468 
469  return event.put(std::move(trackLinksCollection));
470 }
471 
473  TrajectoryContainer& trajectories,
474  Event& event,
475  const std::vector<std::pair<Trajectory*, reco::TrackRef>>& miniMap,
476  Handle<reco::TrackCollection> const& trackHandle,
477  const TrackerTopology& ttopo,
478  const string& instance,
479  bool reallyDoSmoothing) {
480  const bool doSmoothing = theSmoothingStep && reallyDoSmoothing;
481 
482  const string metname = "Muon|RecoMuon|MuonTrackLoader|TevMuonTrackLoader";
483 
484  LogDebug(metname) << "TeV LoadTracks instance: " << instance;
485 
486  // the track collectios; they will be loaded in the event
487  auto trackCollection = std::make_unique<reco::TrackCollection>();
488  // ... and its reference into the event
489  reco::TrackRefProd trackCollectionRefProd = event.getRefBeforePut<reco::TrackCollection>(instance);
490 
491  // Association map between GlobalMuons and TeVMuons
492  auto trackToTrackmap = std::make_unique<reco::TrackToTrackMap>(trackHandle, trackCollectionRefProd);
493 
494  // the track extra collection, it will be loaded in the event
495  auto trackExtraCollection = std::make_unique<reco::TrackExtraCollection>();
496  // ... and its reference into the event
497  reco::TrackExtraRefProd trackExtraCollectionRefProd = event.getRefBeforePut<reco::TrackExtraCollection>(instance);
498 
499  // the rechit collection, it will be loaded in the event
500  auto recHitCollection = std::make_unique<TrackingRecHitCollection>();
501  // ... and its reference into the event
502  TrackingRecHitRefProd recHitCollectionRefProd = event.getRefBeforePut<TrackingRecHitCollection>(instance);
503 
504  // Collection of Trajectory
505  auto trajectoryCollection = std::make_unique<std::vector<Trajectory>>();
506 
507  // don't waste any time...
508  if (trajectories.empty()) {
509  event.put(std::move(recHitCollection), instance);
510  event.put(std::move(trackExtraCollection), instance);
511  if (theTrajectoryFlag) {
512  event.put(std::move(trajectoryCollection), instance);
513 
514  // Association map between track and trajectory
515  auto trajTrackMap = std::make_unique<TrajTrackAssociationCollection>();
516  event.put(std::move(trajTrackMap), instance);
517  }
518  event.put(std::move(trackToTrackmap), instance);
519  return event.put(std::move(trackCollection), instance);
520  }
521 
522  LogTrace(metname) << "Create the collection of Tracks";
523 
525  event.getByToken(theBeamSpotToken, beamSpot);
526 
527  reco::TrackRef::key_type trackIndex = 0;
528 
529  reco::TrackExtraRef::key_type trackExtraIndex = 0;
530 
532  edm::Ref<std::vector<Trajectory>>::key_type iTjRef = 0;
533  std::map<unsigned int, unsigned int> tjTkMap;
534 
535  if (doSmoothing) {
537  theService->eventSetup().get<TrajectoryFitter::Record>().get(theSmootherName, aSmoother);
538  theSmoother.reset(aSmoother->clone());
539  edm::ESHandle<TransientTrackingRecHitBuilder> theTrackerRecHitBuilder;
540  theService->eventSetup().get<TransientRecHitRecord>().get(theTrackerRecHitBuilderName, theTrackerRecHitBuilder);
541  hitCloner = static_cast<TkTransientTrackingRecHitBuilder const*>(theTrackerRecHitBuilder.product())->cloner();
542  theSmoother->setHitCloner(&hitCloner);
543  }
544 
545  for (TrajectoryContainer::iterator itRawTrajectory = trajectories.begin(); itRawTrajectory != trajectories.end();
546  ++itRawTrajectory) {
547  auto rawTrajectory = std::move(*itRawTrajectory);
548  reco::TrackRef glbRef;
549  std::vector<std::pair<Trajectory*, reco::TrackRef>>::const_iterator mmit;
550  for (mmit = miniMap.begin(); mmit != miniMap.end(); ++mmit) {
551  if (mmit->first == rawTrajectory.get())
552  glbRef = mmit->second;
553  }
554 
555  Trajectory& trajectory = *rawTrajectory;
556 
557  if (doSmoothing) {
558  vector<Trajectory> trajectoriesSM = theSmoother->trajectories(*rawTrajectory);
559 
560  if (!trajectoriesSM.empty()) {
561  const edm::RefToBase<TrajectorySeed> tmpSeedRef = (*rawTrajectory).seedRef();
562  trajectory = trajectoriesSM.front();
563  trajectory.setSeedRef(tmpSeedRef);
564  } else
565  LogInfo(metname) << "The trajectory has not been smoothed!" << endl;
566  }
567 
568  if (theTrajectoryFlag) {
569  trajectoryCollection->push_back(trajectory);
570  iTjRef++;
571  }
572 
573  // build the "bare" track from the trajectory.
574  // This track has the parameters defined at PCA (no update)
575  pair<bool, reco::Track> resultOfTrackExtrapAtPCA = buildTrackAtPCA(trajectory, *beamSpot);
576 
577  // Check if the extrapolation went well
578  if (!resultOfTrackExtrapAtPCA.first) {
579  continue;
580  }
581 
582  // take the "bare" track at PCA
583  reco::Track& track = resultOfTrackExtrapAtPCA.second;
584 
585  // build the "bare" track extra from the trajectory
586  reco::TrackExtra trackExtra = buildTrackExtra(trajectory);
587 
588  // get the TrackExtraRef (persitent reference of the track extra)
589  reco::TrackExtraRef trackExtraRef(trackExtraCollectionRefProd, trackExtraIndex++);
590 
591  // set the persistent track-extra reference to the Track
592  track.setExtra(trackExtraRef);
593 
594  // Fill the map
595  trackToTrackmap->insert(glbRef, reco::TrackRef(trackCollectionRefProd, trackIndex++));
596 
597  // build the updated-at-vertex track, starting from the previous track
598  pair<bool, reco::Track> updateResult(false, reco::Track());
599 
600  // get the transient rechit and co from the trajectory
601  reco::TrackExtra::TrajParams trajParams;
603  Traj2TrackHits t2t;
604  auto ih = recHitCollection->size();
605  t2t(trajectory, *recHitCollection, trajParams, chi2s);
606  auto ie = recHitCollection->size();
607  // set the TrackingRecHitRef (persitent reference of the tracking rec hits)
608  trackExtra.setHits(recHitCollectionRefProd, ih, ie - ih);
609  trackExtra.setTrajParams(std::move(trajParams), std::move(chi2s));
610  assert(trackExtra.trajParams().size() == trackExtra.recHitsSize());
611 
612  // Fill the hit pattern
613  for (; ih < ie; ++ih) {
614  auto const& hit = (*recHitCollection)[ih];
616  for (auto hh : hits) {
617  if
618  UNLIKELY(!track.appendHitPattern(*hh, ttopo)) break;
619  }
620 
621  if (theUpdatingAtVtx && updateResult.first) {
622  for (auto hh : hits) {
623  if
624  UNLIKELY(!updateResult.second.appendHitPattern(*hh, ttopo)) break;
625  }
626  }
627  }
628 
629  // fill the TrackExtraCollection
630  trackExtraCollection->push_back(trackExtra);
631 
632  // fill the TrackCollection
633  trackCollection->push_back(track);
634  iTkRef++;
635  LogTrace(metname) << "Debug Track being loaded pt " << track.pt();
636 
637  if (theTrajectoryFlag)
638  tjTkMap[iTjRef - 1] = iTkRef - 1;
639  }
640 
641  // Put the Collections in the event
642  LogTrace(metname) << "put the Collections in the event";
643  event.put(std::move(recHitCollection), instance);
644  event.put(std::move(trackExtraCollection), instance);
645 
646  OrphanHandle<reco::TrackCollection> returnTrackHandle;
647  OrphanHandle<reco::TrackCollection> nonUpdatedHandle;
648  if (theUpdatingAtVtx) {
649  } else {
650  event.put(std::move(trackToTrackmap), instance);
651  returnTrackHandle = event.put(std::move(trackCollection), instance);
652  nonUpdatedHandle = returnTrackHandle;
653  }
654 
655  if (theTrajectoryFlag) {
656  OrphanHandle<std::vector<Trajectory>> rTrajs = event.put(std::move(trajectoryCollection), instance);
657 
658  // Association map between track and trajectory
659  auto trajTrackMap = std::make_unique<TrajTrackAssociationCollection>(rTrajs, nonUpdatedHandle);
660 
661  // Now Create traj<->tracks association map
662  for (std::map<unsigned int, unsigned int>::iterator i = tjTkMap.begin(); i != tjTkMap.end(); i++) {
663  trajTrackMap->insert(edm::Ref<std::vector<Trajectory>>(rTrajs, (*i).first),
664  edm::Ref<reco::TrackCollection>(nonUpdatedHandle, (*i).second));
665  }
666  event.put(std::move(trajTrackMap), instance);
667  }
668 
669  return returnTrackHandle;
670 }
671 
672 pair<bool, reco::Track> MuonTrackLoader::buildTrackAtPCA(const Trajectory& trajectory,
673  const reco::BeamSpot& beamSpot) const {
674  const string metname = "Muon|RecoMuon|MuonTrackLoader";
675 
677 
678  // FIXME: check the prop direction
679  TrajectoryStateOnSurface innerTSOS = trajectory.geometricalInnermostState();
680 
681  // This is needed to extrapolate the tsos at vertex
682  LogTrace(metname) << "Propagate to PCA...";
683  pair<bool, FreeTrajectoryState> extrapolationResult = theUpdatorAtVtx->propagate(innerTSOS, beamSpot);
684  FreeTrajectoryState ftsAtVtx;
685 
686  if (extrapolationResult.first)
687  ftsAtVtx = extrapolationResult.second;
688  else {
689  if (TrackerBounds::isInside(innerTSOS.globalPosition())) {
690  LogInfo(metname) << "Track in the Tracker: taking the innermost state instead of the state at PCA";
691  ftsAtVtx = *innerTSOS.freeState();
692  } else {
693  if (theAllowNoVtxFlag) {
694  LogInfo(metname) << "Propagation to PCA failed, taking the innermost state instead of the state at PCA";
695  ftsAtVtx = *innerTSOS.freeState();
696  } else {
697  LogInfo(metname) << "Stand Alone track: this track will be rejected";
698  return pair<bool, reco::Track>(false, reco::Track());
699  }
700  }
701  }
702 
703  LogTrace(metname) << "TSOS after the extrapolation at vtx";
704  LogTrace(metname) << debug.dumpFTS(ftsAtVtx);
705 
706  GlobalPoint pca = ftsAtVtx.position();
707  math::XYZPoint persistentPCA(pca.x(), pca.y(), pca.z());
708  GlobalVector p = ftsAtVtx.momentum();
709  math::XYZVector persistentMomentum(p.x(), p.y(), p.z());
710 
711  bool bon = true;
712  if (fabs(theService->magneticField()->inTesla(GlobalPoint(0, 0, 0)).z()) < 0.01)
713  bon = false;
714  double ndof = trajectory.ndof(bon);
715 
717  trajectory.chiSquared(), ndof, persistentPCA, persistentMomentum, ftsAtVtx.charge(), ftsAtVtx.curvilinearError());
718 
719  return pair<bool, reco::Track>(true, track);
720 }
721 
723  const reco::BeamSpot& beamSpot) const {
724  const string metname = "Muon|RecoMuon|MuonTrackLoader";
726 
727  // build the transient track
728  reco::TransientTrack transientTrack(track, &*theService->magneticField(), theService->trackingGeometry());
729 
730  LogTrace(metname) << "Apply the vertex constraint";
731  pair<bool, FreeTrajectoryState> updateResult = theUpdatorAtVtx->update(transientTrack, beamSpot);
732 
733  if (!updateResult.first) {
734  return pair<bool, reco::Track>(false, reco::Track());
735  }
736 
737  LogTrace(metname) << "FTS after the vertex constraint";
738  FreeTrajectoryState& ftsAtVtx = updateResult.second;
739 
740  LogTrace(metname) << debug.dumpFTS(ftsAtVtx);
741 
742  GlobalPoint pca = ftsAtVtx.position();
743  math::XYZPoint persistentPCA(pca.x(), pca.y(), pca.z());
744  GlobalVector p = ftsAtVtx.momentum();
745  math::XYZVector persistentMomentum(p.x(), p.y(), p.z());
746 
747  reco::Track updatedTrack(
748  track.chi2(), track.ndof(), persistentPCA, persistentMomentum, ftsAtVtx.charge(), ftsAtVtx.curvilinearError());
749 
750  return pair<bool, reco::Track>(true, updatedTrack);
751 }
752 
754  const string metname = "Muon|RecoMuon|MuonTrackLoader";
755 
756  const Trajectory::RecHitContainer transRecHits = trajectory.recHits();
757 
758  // put the collection of TrackingRecHit in the event
759 
760  // sets the outermost and innermost TSOSs
761  // FIXME: check it!
762  TrajectoryStateOnSurface outerTSOS;
763  TrajectoryStateOnSurface innerTSOS;
764  unsigned int innerId = 0, outerId = 0;
766  DetId outerDetId;
767 
768  if (trajectory.direction() == alongMomentum) {
769  LogTrace(metname) << "alongMomentum";
770  outerTSOS = trajectory.lastMeasurement().updatedState();
771  innerTSOS = trajectory.firstMeasurement().updatedState();
772  outerId = trajectory.lastMeasurement().recHit()->geographicalId().rawId();
773  innerId = trajectory.firstMeasurement().recHit()->geographicalId().rawId();
774  outerRecHit = trajectory.lastMeasurement().recHit();
775  outerDetId = trajectory.lastMeasurement().recHit()->geographicalId();
776  } else if (trajectory.direction() == oppositeToMomentum) {
777  LogTrace(metname) << "oppositeToMomentum";
778  outerTSOS = trajectory.firstMeasurement().updatedState();
779  innerTSOS = trajectory.lastMeasurement().updatedState();
780  outerId = trajectory.firstMeasurement().recHit()->geographicalId().rawId();
781  innerId = trajectory.lastMeasurement().recHit()->geographicalId().rawId();
782  outerRecHit = trajectory.firstMeasurement().recHit();
783  outerDetId = trajectory.firstMeasurement().recHit()->geographicalId();
784  } else
785  LogError(metname) << "Wrong propagation direction!";
786 
787  const GeomDet* outerDet = theService->trackingGeometry()->idToDet(outerDetId);
788  GlobalPoint outerTSOSPos = outerTSOS.globalParameters().position();
789  bool inside = outerDet->surface().bounds().inside(outerDet->toLocal(outerTSOSPos));
790 
791  GlobalPoint hitPos =
792  (outerRecHit->isValid()) ? outerRecHit->globalPosition() : outerTSOS.globalParameters().position();
793 
794  if (!inside) {
795  LogTrace(metname) << "The Global Muon outerMostMeasurementState is not compatible with the recHit detector! "
796  "Setting outerMost postition to recHit position if recHit isValid: "
797  << outerRecHit->isValid();
798  LogTrace(metname) << "From " << outerTSOSPos << " to " << hitPos;
799  }
800 
801  //build the TrackExtra
802  GlobalPoint v = (inside) ? outerTSOSPos : hitPos;
803  GlobalVector p = outerTSOS.globalParameters().momentum();
804  math::XYZPoint outpos(v.x(), v.y(), v.z());
805  math::XYZVector outmom(p.x(), p.y(), p.z());
806 
807  v = innerTSOS.globalParameters().position();
808  p = innerTSOS.globalParameters().momentum();
809  math::XYZPoint inpos(v.x(), v.y(), v.z());
810  math::XYZVector inmom(p.x(), p.y(), p.z());
811 
812  reco::TrackExtra trackExtra(outpos,
813  outmom,
814  true,
815  inpos,
816  inmom,
817  true,
818  outerTSOS.curvilinearError(),
819  outerId,
820  innerTSOS.curvilinearError(),
821  innerId,
822  trajectory.direction(),
823  trajectory.seedRef());
824 
825  return trackExtra;
826 }
Vector3DBase
Definition: Vector3DBase.h:8
edm::RefProd< TrackCollection >
MuonUpdatorAtVertex.h
MuonSubdetId::GEM
static constexpr int GEM
Definition: MuonSubdetId.h:14
TrajectorySmoother::clone
virtual TrajectorySmoother * clone() const =0
edm::ESHandle::product
T const * product() const
Definition: ESHandle.h:86
TrackExtra.h
FreeTrajectoryState::momentum
GlobalVector momentum() const
Definition: FreeTrajectoryState.h:68
service
Definition: service.py:1
MuonSubdetId::CSC
static constexpr int CSC
Definition: MuonSubdetId.h:12
mps_fire.i
i
Definition: mps_fire.py:355
pwdgSkimBPark_cfi.beamSpot
beamSpot
Definition: pwdgSkimBPark_cfi.py:5
MessageLogger.h
MuonPatternRecoDumper.h
GeomDet
Definition: GeomDet.h:27
MuonTrackLoader::theUpdatingAtVtx
bool theUpdatingAtVtx
Definition: MuonTrackLoader.h:95
hfClusterShapes_cfi.hits
hits
Definition: hfClusterShapes_cfi.py:5
filterCSVwithJSON.copy
copy
Definition: filterCSVwithJSON.py:36
groupFilesInBlocks.tt
int tt
Definition: groupFilesInBlocks.py:144
MuonTrackLoader::MuonTrackLoader
MuonTrackLoader(edm::ParameterSet &parameterSet, edm::ConsumesCollector &iC, const MuonServiceProxy *service=nullptr)
Constructor for the STA reco the args must be specify!
Definition: MuonTrackLoader.cc:93
Trajectory::seedRef
edm::RefToBase< TrajectorySeed > seedRef(void) const
Definition: Trajectory.h:303
Trajectory::chiSquared
float chiSquared() const
Definition: Trajectory.h:241
GlobalTrajectoryParameters::position
GlobalPoint position() const
Definition: GlobalTrajectoryParameters.h:60
PV3DBase::x
T x() const
Definition: PV3DBase.h:59
Trajectory::direction
PropagationDirection const & direction() const
Definition: Trajectory.cc:133
MuonTrackLoader::buildTrackAtPCA
std::pair< bool, reco::Track > buildTrackAtPCA(const Trajectory &trajectory, const reco::BeamSpot &) const
Build a track at the PCA WITHOUT any vertex constriant.
Definition: MuonTrackLoader.cc:672
MuonTrackLoader::thePutTkTrackFlag
bool thePutTkTrackFlag
Definition: MuonTrackLoader.h:111
edm
HLT enums.
Definition: AlignableModifier.h:19
TrackerTopology
Definition: TrackerTopology.h:16
AlCaHLTBitMon_ParallelJobs.p
p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
TransientRecHitRecord.h
TrajectoryStateOnSurface::globalPosition
GlobalPoint globalPosition() const
Definition: TrajectoryStateOnSurface.h:65
FreeTrajectoryState::charge
TrackCharge charge() const
Definition: FreeTrajectoryState.h:69
edm::LogInfo
Definition: MessageLogger.h:254
TransientRecHitRecord
Definition: TransientRecHitRecord.h:14
oppositeToMomentum
Definition: PropagationDirection.h:4
cms::cuda::assert
assert(be >=bs)
FastTrackerRecHitMaskProducer_cfi.trajectories
trajectories
Definition: FastTrackerRecHitMaskProducer_cfi.py:7
TrajectoryMeasurement::updatedState
TrajectoryStateOnSurface const & updatedState() const
Definition: TrajectoryMeasurement.h:184
edm::ParameterSet::getUntrackedParameter
T getUntrackedParameter(std::string const &, T const &) const
reco
fixed size matrix
Definition: AlignmentAlgorithmBase.h:45
FreeTrajectoryState::position
GlobalPoint position() const
Definition: FreeTrajectoryState.h:67
TransientTrack.h
findQualityFiles.v
v
Definition: findQualityFiles.py:179
MuonTrackLoader::theSmoothTkTrackFlag
bool theSmoothTkTrackFlag
Definition: MuonTrackLoader.h:112
edm::Handle< reco::BeamSpot >
MuonTrackLoader::theAllowNoVtxFlag
bool theAllowNoVtxFlag
Definition: MuonTrackLoader.h:113
MuonTrackLoader::hitCloner
TkClonerImpl hitCloner
Definition: MuonTrackLoader.h:104
MuonServiceProxy_cff.MuonServiceProxy
MuonServiceProxy
Definition: MuonServiceProxy_cff.py:15
Trajectory::geometricalInnermostState
TrajectoryStateOnSurface geometricalInnermostState() const
Definition: Trajectory.cc:217
TrackerBounds::isInside
static bool isInside(const GlobalPoint &)
Definition: TrackerBounds.cc:37
edm::Ref
Definition: AssociativeIterator.h:58
PV3DBase::z
T z() const
Definition: PV3DBase.h:61
ndof
Definition: HIMultiTrackSelector.h:49
DetId
Definition: DetId.h:17
reco::TrackExtra
Definition: TrackExtra.h:26
UNLIKELY
#define UNLIKELY(x)
Definition: Likely.h:21
GeomDet::surface
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
TrajectoryStateOnSurface
Definition: TrajectoryStateOnSurface.h:16
debug
#define debug
Definition: HDRShower.cc:19
TrajectoryStateOnSurface::freeState
FreeTrajectoryState const * freeState(bool withErrors=true) const
Definition: TrajectoryStateOnSurface.h:58
Track.h
TrackerBounds.h
MuonTrackLoader::buildTrackUpdatedAtPCA
std::pair< bool, reco::Track > buildTrackUpdatedAtPCA(const reco::Track &trackAtPCA, const reco::BeamSpot &) const
Takes a track at the PCA and applies the vertex constriant.
Definition: MuonTrackLoader.cc:722
MuonPatternRecoDumper
Definition: MuonPatternRecoDumper.h:18
MuonTrackLoader.h
Bounds::inside
virtual bool inside(const Local3DPoint &) const =0
Determine if the point is inside the bounds.
MuonTrackLoader::loadTracks
edm::OrphanHandle< reco::TrackCollection > loadTracks(TrajectoryContainer &, edm::Event &, const TrackerTopology &ttopo, const std::string &="", bool=true)
Convert the trajectories into tracks and load the tracks in the event.
FreeTrajectoryState::curvilinearError
const CurvilinearTrajectoryError & curvilinearError() const
Definition: FreeTrajectoryState.h:89
MuonTrackLoader::buildTrackExtra
reco::TrackExtra buildTrackExtra(const Trajectory &) const
Definition: MuonTrackLoader.cc:753
MuonFwd.h
Surface::bounds
const Bounds & bounds() const
Definition: Surface.h:87
reco::BeamSpot
Definition: BeamSpot.h:21
reco::Track
Definition: Track.h:27
edm::ESHandle< TrajectorySmoother >
MuonSegmentMatcher::theService
const MuonServiceProxy * theService
Definition: MuonSegmentMatcher.h:46
TrajectoryFitterRecord
Definition: TrajectoryFitterRecord.h:12
reco::TrackExtraCollection
std::vector< TrackExtra > TrackExtraCollection
collection of TrackExtra objects
Definition: TrackExtraFwd.h:10
TrajectoryFitter.h
edm::ConsumesCollector::consumes
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
Definition: ConsumesCollector.h:49
MuonTrackLoader::theTrajectoryFlag
bool theTrajectoryFlag
Definition: MuonTrackLoader.h:98
MuonSubdetId::DT
static constexpr int DT
Definition: MuonSubdetId.h:11
GlobalPoint
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
Traj2TrackHits.h
Point3DBase< float, GlobalTag >
GeomDet::toLocal
LocalPoint toLocal(const GlobalPoint &gp) const
Conversion to the R.F. of the GeomDet.
Definition: GeomDet.h:58
TrajTrackAssociation.h
GlobalTrajectoryParameters::momentum
GlobalVector momentum() const
Definition: GlobalTrajectoryParameters.h:65
MuonTrackLoader::theBeamSpotInputTag
edm::InputTag theBeamSpotInputTag
Definition: MuonTrackLoader.h:106
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
MuonTrackLoader::theService
const MuonServiceProxy * theService
Definition: MuonTrackLoader.h:93
reco::TrackExtraBase::setTrajParams
void setTrajParams(TrajParams tmps, Chi2sFive chi2s)
Definition: TrackExtraBase.h:36
edm::LogWarning
Definition: MessageLogger.h:141
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:670
edm::ParameterSet
Definition: ParameterSet.h:36
math::XYZPoint
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
Trajectory::ndof
int ndof(bool bon=true) const
Definition: Trajectory.cc:97
edm::LogError
Definition: MessageLogger.h:183
Trajectory::RecHitContainer
ConstRecHitContainer RecHitContainer
Definition: Trajectory.h:42
DetId::Tracker
Definition: DetId.h:25
duplicaterechits_cfi.trackCollection
trackCollection
Definition: duplicaterechits_cfi.py:4
Event.h
MuonTrackLoader::theL2SeededTkLabel
std::string theL2SeededTkLabel
Label for L2SeededTracks.
Definition: MuonTrackLoader.h:110
Trajectory::lastMeasurement
TrajectoryMeasurement const & lastMeasurement() const
Definition: Trajectory.h:150
MuonTrackLoader::theSmoother
std::unique_ptr< TrajectorySmoother > theSmoother
Definition: MuonTrackLoader.h:103
Traj2TrackHits
Definition: Traj2TrackHits.h:16
MuonTrackLoader::unpackHit
static std::vector< const TrackingRecHit * > unpackHit(const TrackingRecHit &hit)
Definition: MuonTrackLoader.cc:46
MuonTrackLoader::CandidateContainer
MuonCandidate::CandidateContainer CandidateContainer
Definition: MuonTrackLoader.h:46
math::XYZVector
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:31
position
static int position[264][3]
Definition: ReadPGInfo.cc:289
PV3DBase::y
T y() const
Definition: PV3DBase.h:60
LorentzVector.h
reco::TrackExtraBase::trajParams
TrajParams const & trajParams() const
Definition: TrackExtraBase.h:76
MuonUpdatorAtVertex_cff.MuonUpdatorAtVertex
MuonUpdatorAtVertex
Definition: MuonUpdatorAtVertex_cff.py:3
BarrelDetLayer.h
MuonSubdetId::ME0
static constexpr int ME0
Definition: MuonSubdetId.h:15
TrajectorySmoother.h
get
#define get
MuonTrackLoader::theUpdatorAtVtx
std::unique_ptr< MuonUpdatorAtVertex > theUpdatorAtVtx
Definition: MuonTrackLoader.h:96
edm::Ref< TrackCollection >::key_type
std::remove_cv< typename std::remove_reference< argument_type >::type >::type key_type
Definition: Ref.h:164
edm::OrphanHandleBase::isValid
bool isValid() const
Definition: OrphanHandleBase.h:53
instance
static PFTauRenderPlugin instance
Definition: PFTauRenderPlugin.cc:70
reco::TrackExtraBase::setHits
void setHits(TrackingRecHitRefProd const &prod, unsigned firstH, unsigned int nH)
Definition: TrackExtraBase.h:30
TrackingRecHit
Definition: TrackingRecHit.h:21
reco::TrackExtraBase::recHitsSize
unsigned int recHitsSize() const
number of RecHits
Definition: TrackExtraBase.h:44
TrajectoryMeasurement::recHit
ConstRecHitPointer const & recHit() const
Definition: TrajectoryMeasurement.h:190
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
MuonTrackLoader::theSmootherName
std::string theSmootherName
Definition: MuonTrackLoader.h:101
Trajectory.h
MuonTrackLoader::~MuonTrackLoader
virtual ~MuonTrackLoader()
Destructor.
Definition: MuonTrackLoader.cc:125
GeomDet.h
Trajectory::recHits
ConstRecHitContainer recHits() const
Definition: Trajectory.h:186
eostools.move
def move(src, dest)
Definition: eostools.py:511
std
Definition: JetResolutionObject.h:76
edm::OrphanHandle< reco::TrackCollection >
Trajectory::firstMeasurement
TrajectoryMeasurement const & firstMeasurement() const
Definition: Trajectory.h:166
reco::TransientTrack
Definition: TransientTrack.h:19
MuonTrackLoader::theTrackerRecHitBuilderName
std::string theTrackerRecHitBuilderName
Definition: MuonTrackLoader.h:102
FreeTrajectoryState
Definition: FreeTrajectoryState.h:27
MuonTrackLoader::theBeamSpotToken
edm::EDGetTokenT< reco::BeamSpot > theBeamSpotToken
Definition: MuonTrackLoader.h:107
reco::TrackExtraBase::Chi2sFive
std::vector< unsigned char > Chi2sFive
Definition: TrackExtraBase.h:25
TrajectoryMeasurement::ConstRecHitPointer
TrackingRecHit::ConstRecHitPointer ConstRecHitPointer
Definition: TrajectoryMeasurement.h:28
Trajectory
Definition: Trajectory.h:38
MuonSubdetId::RPC
static constexpr int RPC
Definition: MuonSubdetId.h:13
Trajectory::setSeedRef
void setSeedRef(const edm::RefToBase< TrajectorySeed > &seedRef)
Definition: Trajectory.h:305
TrackingComponentsRecord.h
edm::RefToBase::isNonnull
bool isNonnull() const
Checks for non-null.
Definition: RefToBase.h:301
ForwardDetLayer.h
TrajectoryStateOnSurface::curvilinearError
const CurvilinearTrajectoryError & curvilinearError() const
Definition: TrajectoryStateOnSurface.h:72
MuonServiceProxy.h
electronStore.links
links
Definition: electronStore.py:149
edm::parameterSet
ParameterSet const & parameterSet(Provenance const &provenance, ProcessHistory const &history)
Definition: Provenance.cc:11
edm::RefToBase< TrajectorySeed >
edm::OwnVector::push_back
void push_back(D *&d)
Definition: OwnVector.h:326
HLT_2018_cff.track
track
Definition: HLT_2018_cff.py:10352
MuonTrackLoader::TrajectoryContainer
MuonCandidate::TrajectoryContainer TrajectoryContainer
Definition: MuonTrackLoader.h:45
DetId::Muon
Definition: DetId.h:26
LogTrace
#define LogTrace(id)
Definition: MessageLogger.h:671
TrajectoryStateOnSurface::globalParameters
const GlobalTrajectoryParameters & globalParameters() const
Definition: TrajectoryStateOnSurface.h:64
ParameterSet.h
event
Definition: event.py:1
edm::Event
Definition: Event.h:73
MuonTrackLoader::theSmoothingStep
bool theSmoothingStep
Definition: MuonTrackLoader.h:100
reco::TrackExtraBase::TrajParams
std::vector< LocalTrajectoryParameters > TrajParams
Definition: TrackExtraBase.h:24
edm::InputTag
Definition: InputTag.h:15
reco::TrackCollection
std::vector< Track > TrackCollection
collection of Tracks
Definition: TrackFwd.h:14
edm::ConsumesCollector
Definition: ConsumesCollector.h:39
alongMomentum
Definition: PropagationDirection.h:4
TrackToTrackMap.h
hit
Definition: SiStripHitEffFromCalibTree.cc:88
edm::OwnVector< TrackingRecHit >
metname
const std::string metname
Definition: MuonSeedOrcaPatternRecognition.cc:43