CMS 3D CMS Logo

HLTMuonTrackSelector.cc
Go to the documentation of this file.
1 /*
2 * class HLTMuonTrackSelector
3 *
4 * See header file for documentation
5 *
6 * Author: Kyeongpil Lee (kplee@cern.ch)
7 *
8 */
9 
10 #include "HLTMuonTrackSelector.h"
11 
17 
19  : collectionCloner(producesCollector(), iConfig, true),
20  collectionClonerTokens(iConfig.getParameter<edm::InputTag>("track"), consumesCollector()),
21  token_muon(consumes<vector<reco::Muon> >(iConfig.getParameter<edm::InputTag>("muon"))),
22  token_originalMVAVals(consumes<MVACollection>(iConfig.getParameter<edm::InputTag>("originalMVAVals"))),
23  flag_copyMVA(iConfig.getParameter<bool>("copyMVA")) {
24  produces<MVACollection>("MVAValues");
25 }
26 
28 
31  desc.add<edm::InputTag>("track", edm::InputTag());
32  desc.add<edm::InputTag>("muon", edm::InputTag());
33  desc.add<edm::InputTag>("originalMVAVals", edm::InputTag());
34  desc.add<bool>("copyMVA", false);
35  TrackCollectionCloner::fill(desc); // -- add copyExtras and copyTrajectories
36  descriptions.add("HLTMuonTrackSelector", desc);
37 }
38 
41 
42  // -- load tracks
43  auto const& originalTracks = collectionClonerTokens.tracks(iEvent);
44  auto nTrack = originalTracks.size();
45 
46  // -- load muons
47  edm::Handle<vector<reco::Muon> > handle_muon;
48  iEvent.getByToken(token_muon, handle_muon);
49  auto nMuon = handle_muon->size();
50 
51  // -- load MVA values if necessary
52  edm::Handle<MVACollection> handle_originalMVAVals;
53  if (flag_copyMVA) {
54  iEvent.getByToken(token_originalMVAVals, handle_originalMVAVals);
55  assert((*handle_originalMVAVals).size() == nTrack);
56  }
57 
58  // -- containers for selected track informations
59  std::vector<unsigned int> selectedIter;
60  auto selectedMVAVals = std::make_unique<MVACollection>();
61 
62  auto nSelected = 0U;
63 
65  // -- matching -- //
67 
68  // -- iteration over muons
69  for (auto i_mu = 0U; i_mu < nMuon; ++i_mu) {
70  // -- avoids crashing in case the muon is SA only.
71  const reco::Muon& muon(handle_muon->at(i_mu));
72  TrackRef muonTrackRef = (muon.innerTrack().isNonnull()) ? muon.innerTrack() : muon.muonBestTrack();
73 
74  double muonPt = muonTrackRef->pt();
75  double muonEta = muonTrackRef->eta();
76  double muonPhi = muonTrackRef->phi();
77 
78  double smallestDPt = 1e30;
79  unsigned int smallestDPtIter = 9999U;
80 
81  // -- iteration over tracks
82  for (auto i_trk = 0U; i_trk < nTrack; ++i_trk) {
83  auto const& track = originalTracks[i_trk];
84 
85  double trackPt = track.pt();
86  double trackEta = track.eta();
87  double trackPhi = track.phi();
88 
89  if (deltaR(trackEta, trackPhi, muonEta, muonPhi) < 0.1) {
90  double dPt = fabs(trackPt - muonPt);
91 
92  if (dPt < smallestDPt) {
93  smallestDPt = dPt;
94  smallestDPtIter = i_trk;
95  }
96  }
97  } // -- end of track iteration
98 
99  // -- if at least one track is matched
100  if (smallestDPtIter != 9999U) {
101  selectedIter.push_back(smallestDPtIter);
102  if (flag_copyMVA)
103  selectedMVAVals->push_back((*handle_originalMVAVals)[smallestDPtIter]);
104  ++nSelected;
105  }
106 
107  } // -- end of muon iteration
108 
109  assert(producer.selTracks_->empty());
110 
111  // -- produces tracks and associated informations
112  producer(collectionClonerTokens, selectedIter);
113  assert(producer.selTracks_->size() == nSelected);
114 
115  if (flag_copyMVA)
116  iEvent.put(std::move(selectedMVAVals), "MVAValues");
117 }
118 
120 
const TrackCollectionCloner::Tokens collectionClonerTokens
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:131
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
static void fill(edm::ParameterSetDescription &desc)
const edm::EDGetTokenT< vector< reco::Muon > > token_muon
std::unique_ptr< reco::TrackCollection > selTracks_
static void fillDescriptions(edm::ConfigurationDescriptions &)
int iEvent
Definition: GenABIO.cc:224
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
const edm::EDGetTokenT< MVACollection > token_originalMVAVals
Definition: Muon.py:1
ParameterDescriptionBase * add(U const &iLabel, T const &value)
HLTMuonTrackSelector(const edm::ParameterSet &)
reco::TrackCollection const & tracks(edm::Event &evt) const
void add(std::string const &label, ParameterSetDescription const &psetDescription)
fixed size matrix
HLT enums.
void produce(edm::StreamID, edm::Event &, const edm::EventSetup &) const override
def move(src, dest)
Definition: eostools.py:511
TrackCollectionCloner collectionCloner
std::vector< float > MVACollection