CMS 3D CMS Logo

GlobalMuonTrajectoryBuilder.cc
Go to the documentation of this file.
1 
25 
26 //---------------
27 // C++ Headers --
28 //---------------
29 
30 #include <iostream>
31 #include <iomanip>
32 #include <algorithm>
33 
34 //-------------------------------
35 // Collaborating Class Headers --
36 //-------------------------------
37 
40 
42 
44 
48 
49 using namespace std;
50 using namespace edm;
51 
52 //----------------
53 // Constructors --
54 //----------------
55 
59  ) : GlobalTrajectoryBuilderBase(par, service, iC)
60 
61 {
62 
63  theTkTrackLabel = par.getParameter<edm::InputTag>("TrackerCollectionLabel");
65 
66 }
67 
68 
69 //--------------
70 // Destructor --
71 //--------------
72 
74 }
75 
76 //
77 // get information from event
78 //
80 
81  const std::string category = "Muon|RecoMuon|GlobalMuonTrajectoryBuilder|setEvent";
82 
84 
85  // get tracker TrackCollection from Event
86  event.getByToken(allTrackerTracksToken,allTrackerTracks);
87  LogDebug(category)
88  << " Found " << allTrackerTracks->size()
89  << " tracker Tracks with label "<< theTkTrackLabel;
90 
91 }
92 
93 //
94 // reconstruct trajectories
95 //
97 
98  const std::string category = "Muon|RecoMuon|GlobalMuonTrajectoryBuilder|trajectories";
99 
100  // cut on muons with low momenta
101  LogTrace(category) << " STA pt " << staCandIn.second->pt() << " rho " << staCandIn.second->innerMomentum().Rho() << " R " << staCandIn.second->innerMomentum().R() << " theCut " << thePtCut;
102 
103  // convert the STA track into a Trajectory if Trajectory not already present
104  TrackCand staCand(staCandIn);
105 
106  vector<TrackCand> regionalTkTracks = makeTkCandCollection(staCand);
107  LogTrace(category) << " Found " << regionalTkTracks.size() << " tracks within region of interest";
108 
109  // match tracker tracks to muon track
110  vector<TrackCand> trackerTracks = trackMatcher()->match(staCand, regionalTkTracks);
111  LogTrace(category) << " Found " << trackerTracks.size() << " matching tracker tracks within region of interest";
112 
113  if ( trackerTracks.empty() ) {
114  if ( staCandIn.first == nullptr) delete staCand.first;
115 
116  return CandidateContainer();
117  }
118 
119  // build a combined tracker-muon MuonCandidate
120  //
121  // turn tkMatchedTracks into MuonCandidates
122  //
123  LogTrace(category) << " Turn tkMatchedTracks into MuonCandidates";
124  CandidateContainer tkTrajs;
125  for (vector<TrackCand>::const_iterator tkt = trackerTracks.begin(); tkt != trackerTracks.end(); tkt++) {
126 
127  MuonCandidate* muonCand = new MuonCandidate( nullptr ,staCand.second,(*tkt).second, nullptr);
128  tkTrajs.push_back(muonCand);
129  }
130 
131  if ( tkTrajs.empty() ) {
132  LogTrace(category) << " tkTrajs empty";
133  if ( staCandIn.first == nullptr) delete staCand.first;
134 
135  return CandidateContainer();
136  }
137 
138  CandidateContainer result = build(staCand, tkTrajs);
139  LogTrace(category) << " Found "<< result.size() << " GLBMuons from one STACand";
140 
141  // free memory
142  if ( staCandIn.first == nullptr) delete staCand.first;
143 
144  for( CandidateContainer::const_iterator it = tkTrajs.begin(); it != tkTrajs.end(); ++it) {
145  if ( (*it)->trajectory() ) delete (*it)->trajectory();
146  if ( (*it)->trackerTrajectory() ) delete (*it)->trackerTrajectory();
147  if ( *it ) delete (*it);
148  }
149  tkTrajs.clear();
150 
151 
152  return result;
153 
154 }
155 
156 //
157 // make a TrackCand collection using tracker Track, Trajectory information
158 //
159 vector<GlobalMuonTrajectoryBuilder::TrackCand> GlobalMuonTrajectoryBuilder::makeTkCandCollection(const TrackCand& staCand) {
160 
161  const std::string category = "Muon|RecoMuon|GlobalMuonTrajectoryBuilder|makeTkCandCollection";
162 
163  vector<TrackCand> tkCandColl;
164 
165  vector<TrackCand> tkTrackCands;
166 
167  for ( unsigned int position = 0; position != allTrackerTracks->size(); ++position ) {
169  TrackCand tkCand = TrackCand((Trajectory*)nullptr,tkTrackRef);
170  tkTrackCands.push_back(tkCand);
171  }
172 
173 
174  tkCandColl = chooseRegionalTrackerTracks(staCand,tkTrackCands);
175 
176  return tkCandColl;
177 
178 }
#define LogDebug(id)
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
T getParameter(std::string const &) const
MuonCandidate::CandidateContainer CandidateContainer
GlobalMuonTrackMatcher * trackMatcher() const
std::pair< const Trajectory *, reco::TrackRef > TrackCand
MuonTrajectoryBuilder::CandidateContainer trajectories(const TrackCand &) override
reconstruct trajectories from standalone and tracker only Tracks
void setEvent(const edm::Event &) override
pass the Event to the algo at each event
std::vector< Track > TrackCollection
collection of Tracks
Definition: TrackFwd.h:15
std::vector< TrackCand > makeTkCandCollection(const TrackCand &) override
make a TrackCand collection using tracker Track, Trajectory information
std::vector< TrackCand > chooseRegionalTrackerTracks(const TrackCand &, const std::vector< TrackCand > &)
choose tracker tracks within region of interest
edm::EDGetTokenT< reco::TrackCollection > allTrackerTracksToken
~GlobalMuonTrajectoryBuilder() override
destructor
void setEvent(const edm::Event &) override
pass the Event to the algo at each event
std::vector< MuonCandidate * > CandidateContainer
Definition: MuonCandidate.h:20
double match(const TrackCand &sta, const TrackCand &track, int matchOption=0, int surfaceOption=1) const
#define LogTrace(id)
GlobalMuonTrajectoryBuilder(const edm::ParameterSet &, const MuonServiceProxy *, edm::ConsumesCollector &)
constructor with Parameter Set and MuonServiceProxy
edm::Handle< reco::TrackCollection > allTrackerTracks
MuonTrajectoryBuilder::CandidateContainer build(const TrackCand &, MuonTrajectoryBuilder::CandidateContainer &) const
build combined trajectory from sta Track and tracker RecHits
HLT enums.
static int position[264][3]
Definition: ReadPGInfo.cc:509
Definition: event.py:1