CMS 3D CMS Logo

LeptonSkimming.cc
Go to the documentation of this file.
1 
2 // -*- C++ -*-
3 //
4 // Package: Configuration/Skimming
5 // Class: LeptonSkimming
6 //
14 //
15 // Original Author: Georgios Karathanasis georgios.karathanasis@cern.ch
16 // Created: Thu, 29 Nov 2018 15:23:09 GMT
17 //
18 //
19 
21 
22 using namespace edm;
23 using namespace reco;
24 using namespace std;
25 
27  : electronsToken_(consumes<std::vector<reco::GsfElectron>>(iConfig.getParameter<edm::InputTag>("electrons"))),
28  eleBWPToken_(consumes<edm::ValueMap<float>>(iConfig.getParameter<edm::InputTag>("eleBiasedWP"))),
29  eleUnBWPToken_(consumes<edm::ValueMap<float>>(iConfig.getParameter<edm::InputTag>("eleUnbiasedWP"))),
30  muonsToken_(consumes<std::vector<reco::Muon>>(iConfig.getParameter<edm::InputTag>("muons"))),
31  Tracks_(consumes<std::vector<reco::Track>>(iConfig.getParameter<edm::InputTag>("tracks"))),
32  vtxToken_(consumes<std::vector<reco::Vertex>>(iConfig.getParameter<edm::InputTag>("vertices"))),
33  beamSpotToken_(consumes<reco::BeamSpot>(iConfig.getParameter<edm::InputTag>("beamSpot"))),
34  conversionsToken_(consumes<reco::ConversionCollection>(iConfig.getParameter<edm::InputTag>("conversions"))),
35 
36  trgresultsToken_(consumes<edm::TriggerResults>(iConfig.getParameter<edm::InputTag>("triggerresults"))),
37  trigobjectsToken_(consumes<trigger::TriggerEvent>(iConfig.getParameter<edm::InputTag>("triggerobjects"))),
38  bFieldToken_(esConsumes()),
39  HLTFilter_(iConfig.getParameter<vector<string>>("HLTFilter")),
40  HLTPath_(iConfig.getParameter<vector<string>>("HLTPath")) {
42  //mu matching with trigger
43  MuTrgMatchCone = runParameters.getParameter<double>("MuTrgMatchCone");
44  SkipIfNoMuMatch = runParameters.getParameter<bool>("SkipIfNoMuMatch");
45  //track cuts
46  PtTrack_Cut = runParameters.getParameter<double>("PtTrack_Cut");
47  EtaTrack_Cut = runParameters.getParameter<double>("EtaTrack_Cut");
48  MinChi2Track_Cut = runParameters.getParameter<double>("MinChi2Track_Cut");
49  MaxChi2Track_Cut = runParameters.getParameter<double>("MaxChi2Track_Cut");
50  MuTrkMinDR_Cut = runParameters.getParameter<double>("MuTrkMinDR_Cut");
51  TrackMuDz_Cut = runParameters.getParameter<double>("TrackMuDz_Cut");
52  TrgExclusionCone = runParameters.getParameter<double>("TrgExclusionCone");
53  //lepton cuts
54  PtMu_Cut = runParameters.getParameter<double>("PtMu_Cut");
55  PtEl_Cut = runParameters.getParameter<double>("PtEl_Cut");
56  QualMu_Cut = runParameters.getParameter<double>("QualMu_Cut");
57  MuTrgExclusionCone = runParameters.getParameter<double>("MuTrgExclusionCone");
58  ElTrgExclusionCone = runParameters.getParameter<double>("ElTrgExclusionCone");
59  TrkObjExclusionCone = runParameters.getParameter<double>("TrkObjExclusionCone");
60  MuTrgMuDz_Cut = runParameters.getParameter<double>("MuTrgMuDz_Cut");
61  ElTrgMuDz_Cut = runParameters.getParameter<double>("ElTrgMuDz_Cut");
62  BiasedWP = runParameters.getParameter<double>("BiasedWP");
63  UnbiasedWP = runParameters.getParameter<double>("UnbiasedWP");
64  SkimOnlyMuons = runParameters.getParameter<bool>("SkimOnlyMuons");
65  SkimOnlyElectrons = runParameters.getParameter<bool>("SkimOnlyElectrons");
66  //pair cuts
67  MaxMee_Cut = runParameters.getParameter<double>("MaxMee_Cut");
68  MinMee_Cut = runParameters.getParameter<double>("MinMee_Cut");
69  Probee_Cut = runParameters.getParameter<double>("Probee_Cut");
70  Cosee_Cut = runParameters.getParameter<double>("Cosee_Cut");
71  EpairZvtx_Cut = runParameters.getParameter<double>("EpairZvtx_Cut");
72  //kaon
73  PtKTrack_Cut = runParameters.getParameter<double>("PtKTrack_Cut");
74  TrackSdxy_Cut = runParameters.getParameter<double>("TrackSdxy_Cut");
75  Ksdxy_Cut = runParameters.getParameter<double>("Ksdxy_Cut");
76  //triplet
77  MaxMB_Cut = runParameters.getParameter<double>("MaxMB_Cut");
78  MinMB_Cut = runParameters.getParameter<double>("MinMB_Cut");
79  ProbeeK_Cut = runParameters.getParameter<double>("ProbeeK_Cut");
80  CoseeK_Cut = runParameters.getParameter<double>("CoseeK_Cut");
81  SLxy_Cut = runParameters.getParameter<double>("SLxy_Cut");
82  PtB_Cut = runParameters.getParameter<double>("PtB_Cut");
83 
84  ObjPtLargerThanTrack = runParameters.getParameter<bool>("ObjPtLargerThanTrack");
85 }
86 
88  // do anything here that needs to be done at destruction time
89  // (e.g. close files, deallocate resources etc.)
90 }
91 
92 bool LeptonSkimming::hltFired(const edm::Event& iEvent, const edm::EventSetup& iSetup, std::vector<string> HLTPath) {
93  using namespace std;
94  using namespace edm;
95  using namespace reco;
96  using namespace trigger;
97 
99  iEvent.getByToken(trgresultsToken_, trigResults);
100  bool fire = false;
101  if (trigResults.failedToGet())
102  return false;
103  for (unsigned int ip = 0; ip < HLTPath.size(); ip++) {
104  int N_Triggers = trigResults->size();
105  const edm::TriggerNames& trigName = iEvent.triggerNames(*trigResults);
106  for (int i_Trig = 0; i_Trig < N_Triggers; ++i_Trig) {
107  if (!trigResults->accept(i_Trig))
108  continue;
109  const std::string& TrigPath = trigName.triggerName(i_Trig);
110  if (TrigPath.find(HLTPath[ip]) != std::string::npos)
111  fire = true;
112  }
113  }
114  return fire;
115 }
116 
117 std::array<float, 5> LeptonSkimming::hltObject(const edm::Event& iEvent,
118  const edm::EventSetup& iSetup,
119  std::vector<string> Seed) {
120  using namespace std;
121  using namespace edm;
122  using namespace reco;
123  using namespace trigger;
124 
125  edm::Handle<trigger::TriggerEvent> triggerObjectsSummary;
126  iEvent.getByToken(trigobjectsToken_, triggerObjectsSummary);
127  trigger::TriggerObjectCollection selectedObjects;
128 
129  std::vector<std::array<float, 5>> max_per_trigger;
130 
131  for (unsigned int ipath = 0; ipath < Seed.size(); ipath++) {
132  std::vector<std::array<float, 5>> tot_tr_obj_pt_eta_phi;
133  if (!triggerObjectsSummary.isValid())
134  continue;
135  size_t filterIndex = (*triggerObjectsSummary).filterIndex(InputTag(Seed[ipath], "", "HLT"));
136  trigger::TriggerObjectCollection allTriggerObjects = triggerObjectsSummary->getObjects();
137  if (filterIndex < (*triggerObjectsSummary).sizeFilters()) {
138  const trigger::Keys& keys = (*triggerObjectsSummary).filterKeys(filterIndex);
139  for (size_t j = 0; j < keys.size(); j++) {
140  const trigger::TriggerObject& foundObject = (allTriggerObjects)[keys[j]];
141  std::array<float, 5> tr_obj_pt_eta_phi;
142  if (fabs(foundObject.id()) != 13)
143  continue;
144  tr_obj_pt_eta_phi[0] = foundObject.pt();
145  tr_obj_pt_eta_phi[1] = foundObject.eta();
146  tr_obj_pt_eta_phi[2] = foundObject.phi();
147  tr_obj_pt_eta_phi[3] = foundObject.id() / fabs(foundObject.id());
148  tot_tr_obj_pt_eta_phi.push_back(tr_obj_pt_eta_phi);
149  }
150  }
151  //take the max per hlt
152  if (!tot_tr_obj_pt_eta_phi.empty()) {
153  std::sort(tot_tr_obj_pt_eta_phi.begin(),
154  tot_tr_obj_pt_eta_phi.end(),
155  [](const std::array<float, 5>& a, const std::array<float, 5>& b) { return a[0] > b[0]; });
156  max_per_trigger.push_back(tot_tr_obj_pt_eta_phi.at(0));
157  }
158  }
159  //we know that at least a trigger fired
160  //find the total max
161  std::sort(max_per_trigger.begin(),
162  max_per_trigger.end(),
163  [](const std::array<float, 5>& a, const std::array<float, 5>& b) { return a[0] > b[0]; });
164  return max_per_trigger.at(0);
165 }
166 
167 // ------------ method called on each new Event ------------
169  using namespace std;
170  using namespace edm;
171  using namespace reco;
172  using namespace trigger;
173  // using namespace PhysicsTools;
174 
175  test_ev++;
176  //Get a few collections to apply basic electron ID
177  //Get electrons
179  iEvent.getByToken(electronsToken_, electrons);
180  //get bdt values
181  edm::Handle<edm::ValueMap<float>> ele_mva_wp_biased;
182  iEvent.getByToken(eleBWPToken_, ele_mva_wp_biased);
183  edm::Handle<edm::ValueMap<float>> ele_mva_wp_unbiased;
184  iEvent.getByToken(eleUnBWPToken_, ele_mva_wp_unbiased);
185  //get muons
187  iEvent.getByToken(muonsToken_, muons);
188  //Get conversions
190  iEvent.getByToken(conversionsToken_, conversions);
191  // Get the beam spot
192  edm::Handle<reco::BeamSpot> theBeamSpot;
193  iEvent.getByToken(beamSpotToken_, theBeamSpot);
194  //Get vertices
196  iEvent.getByToken(vtxToken_, vertices);
197  //continue if there are no vertices
198  if (vertices->empty())
199  return false;
201  iEvent.getByToken(Tracks_, tracks);
203  iEvent.getByToken(trgresultsToken_, trigResults);
204  auto const& bField = iSetup.getData(bFieldToken_);
205  KalmanVertexFitter theKalmanFitter(false);
206  TransientVertex LLvertex;
207 
208  // trigger1=0; trigger2=0; trigger3=0; trigger4=0; trigger5=0; trigger6=0;
209  nmuons = 0;
210  nel = 0;
211  ntracks = 0;
212 
213  SelectedMu_index = -1;
215  muon_pt.clear();
216  muon_eta.clear();
217  muon_phi.clear();
218  Result = false;
219  el_pt.clear();
220  el_eta.clear();
221  el_phi.clear();
222  Trk_container.clear();
223  MuTracks.clear();
224  ElTracks.clear();
225  object_container.clear();
226  object_id.clear();
227  cleanedTracks.clear();
228  Epair_ObjectId.clear();
229  muon_soft.clear();
230  muon_medium.clear();
231  muon_tight.clear();
232  Epair_ObjectIndex.clear();
233  cleanedObjTracks.clear();
234  cleanedPairTracks.clear();
235  Epair_ObjectIndex.clear();
236  Epair_ObjectId.clear();
237  Epair_TrkIndex.clear();
238  //internal stuff
240  std::array<float, 5> SelectedTrgObj_PtEtaPhiCharge{{-999, -999, -999, -999, -999}};
241  vertex_point.SetCoordinates(-1 * std::numeric_limits<float>::max(),
244  for (const reco::Vertex& vtx : *vertices) {
245  bool isFake = vtx.isFake();
246  if (isFake)
247  continue;
248  vertex_point.SetCoordinates(vtx.x(), vtx.y(), vtx.z());
250  break;
251  }
253  return false;
254 
255  beam_x = theBeamSpot->x0();
256  beam_y = theBeamSpot->y0();
257  beam_z = theBeamSpot->z0();
258  if (!hltFired(iEvent, iSetup, HLTPath_))
259  return false;
260 
263  MuTracks.clear();
264  object_container.clear();
265  object_id.clear();
266  nmuons = 0;
267  for (const reco::Muon& mu : *muons) {
268  if (fabs(mu.eta()) > EtaTrack_Cut)
269  continue;
270  //find triggering muon
271  float deltaRmu = deltaR(mu.eta(), mu.phi(), SelectedTrgObj_PtEtaPhiCharge[1], SelectedTrgObj_PtEtaPhiCharge[2]);
272  if (deltaRmu < MuTrgMatchCone && SelectedMu_DR > deltaRmu) {
274  ZvertexTrg = mu.vz();
275  }
276  //save muons that we want to skim
277  if (!SkimOnlyElectrons) {
278  bool tight = false, soft = false;
279  if (vertices.isValid()) {
280  tight = isTightMuonCustom(*(&mu), (*vertices)[0]);
281  soft = muon::isSoftMuon(*(&mu), (*vertices)[0]);
282  }
283  const Track* mutrack = mu.bestTrack();
284  muon_medium.push_back(isMediumMuonCustom(*(&mu)));
285  muon_tight.push_back(tight);
286  muon_soft.push_back(soft);
287  muon_pt.push_back(mu.pt());
288  muon_eta.push_back(mu.eta());
289  muon_phi.push_back(mu.phi());
290  auto muTrack = std::make_shared<reco::Track>(*mutrack);
291  MuTracks.push_back(muTrack);
292  object_container.push_back(nmuons);
293  object_id.push_back(13);
294  nmuons++;
295  }
296  }
297 
299  return false;
300  }
301 
302  //Save electrons we want to skim
303  ElTracks.clear();
304  if (!SkimOnlyMuons) {
305  for (const reco::GsfElectron& el : *electrons) {
306  bool passConvVeto = !ConversionTools::hasMatchedConversion(*(&el), *conversions, theBeamSpot->position());
307  if (!passConvVeto)
308  continue;
309  reco::GsfTrackRef seed = el.gsfTrack();
310  if (seed.isNull())
311  continue;
312  if ((*ele_mva_wp_biased)[seed] < BiasedWP)
313  continue;
314  if ((*ele_mva_wp_unbiased)[seed] < UnbiasedWP)
315  continue;
316  const Track* eltrack = el.bestTrack();
317  if (fabs(eltrack->eta()) > EtaTrack_Cut)
318  continue;
319  if (eltrack->pt() < PtEl_Cut)
320  continue;
321  auto ElTrack = std::make_shared<reco::Track>(*eltrack);
322  ElTracks.push_back(ElTrack);
323  object_container.push_back(nel);
324  el_pt.push_back(eltrack->pt());
325  el_eta.push_back(eltrack->eta());
326  el_phi.push_back(eltrack->phi());
327  nel++;
328  object_id.push_back(11);
329  }
330  }
331 
332  //Save tracks we want to skim: used both as mu or e candidate
333  cleanedTracks.clear();
334  trk_index = 0;
335  for (const reco::Track& trk : *tracks) {
336  if (!trk.quality(Track::highPurity))
337  continue;
338  if (trk.pt() < PtTrack_Cut)
339  continue;
340  if (fabs(trk.eta()) > EtaTrack_Cut)
341  continue;
342  if (trk.charge() == 0)
343  continue;
344  if (trk.normalizedChi2() > MaxChi2Track_Cut || trk.normalizedChi2() < MinChi2Track_Cut)
345  continue;
346  if (fabs(trk.dxy()) / trk.dxyError() < TrackSdxy_Cut)
347  continue;
349  if (fabs(ZvertexTrg - trk.vz()) > TrackMuDz_Cut)
350  continue;
351  if (deltaR(trk.eta(), trk.phi(), SelectedTrgObj_PtEtaPhiCharge[1], SelectedTrgObj_PtEtaPhiCharge[2]) <
353  continue;
354  }
355  //assignments
356  auto cleanTrack = std::make_shared<reco::Track>(trk);
357  cleanedTracks.push_back(cleanTrack);
358  Trk_container.push_back(trk_index);
359  trk_index++;
360  }
361 
362  //create ll combination
363 
364  // fit track pairs
365  cleanedObjTracks.clear();
366  cleanedPairTracks.clear();
367  TLorentzVector vel1, vel2;
368  std::vector<std::shared_ptr<reco::Track>> cleanedObjects;
369  //add tracks of objects
370  if (!SkimOnlyElectrons) {
371  for (auto& vec : MuTracks)
372  cleanedObjects.push_back(vec);
373  }
374 
375  if (!SkimOnlyMuons) {
376  for (auto& vec : ElTracks)
377  cleanedObjects.push_back(vec);
378  }
379 
380  if (cleanedObjects.empty())
381  return false;
382 
383  for (auto& obj : cleanedObjects) {
384  auto tranobj = std::make_shared<reco::TransientTrack>(reco::TransientTrack(*obj, &bField));
385  unsigned int iobj = &obj - &cleanedObjects[0];
386  unsigned int index = object_container.at(iobj);
387  float massLep = 0.0005;
388  if (object_id.at(iobj) == 13)
389  massLep = 0.105;
390  //posible cut in mu quality
391  if (object_id.at(iobj) == 13 && QualMu_Cut == 1 && !muon_soft.at(index))
392  continue;
393  if (object_id.at(iobj) == 13 && QualMu_Cut == 2 && !muon_medium.at(index))
394  continue;
395  if (object_id.at(iobj) == 13 && QualMu_Cut == 3 && !muon_tight.at(index))
396  continue;
397  // take the corresponding lepton track for lorentz vector
398  vel1.SetPtEtaPhiM(obj->pt(), obj->eta(), obj->phi(), massLep);
399  if (object_id.at(iobj) == 13 && vel1.Pt() < PtMu_Cut)
400  continue;
401  for (auto& trk2 : cleanedTracks) {
402  unsigned int itrk2 = &trk2 - &cleanedTracks[0];
403  //opposite sign
404  if (obj->charge() * trk2->charge() == 1)
405  continue;
406  if (ObjPtLargerThanTrack && vel1.Pt() < trk2->pt())
407  continue;
408  vel2.SetPtEtaPhiM(trk2->pt(), trk2->eta(), trk2->phi(), massLep);
409  //probe side cuts
410  if (object_id.at(iobj) == 13 &&
413  continue;
414  if (object_id.at(iobj) == 11 &&
417  continue;
419  if (object_id.at(iobj) == 13 && fabs(ZvertexTrg - obj->vz()) > MuTrgMuDz_Cut)
420  continue;
421  if (object_id.at(iobj) == 11 && fabs(ZvertexTrg - obj->vz()) > ElTrgMuDz_Cut)
422  continue;
423  }
424  //additional cuts
425  float InvMassLepLep = (vel1 + vel2).M();
426  if (InvMassLepLep > MaxMee_Cut || InvMassLepLep < MinMee_Cut)
427  continue;
428  auto trantrk2 = std::make_shared<reco::TransientTrack>(reco::TransientTrack(*trk2, &bField));
429  std::vector<reco::TransientTrack> tempTracks;
430  tempTracks.reserve(2);
431  tempTracks.push_back(*tranobj);
432  tempTracks.push_back(*trantrk2);
433  LLvertex = theKalmanFitter.vertex(tempTracks);
434  if (!LLvertex.isValid())
435  continue;
437  continue;
439  fabs(ZvertexTrg - LLvertex.position().z()) > EpairZvtx_Cut)
440  continue;
441  GlobalError err = LLvertex.positionError();
442  GlobalPoint Dispbeamspot(-1 * ((theBeamSpot->x0() - LLvertex.position().x()) +
443  (LLvertex.position().z() - theBeamSpot->z0()) * theBeamSpot->dxdz()),
444  -1 * ((theBeamSpot->y0() - LLvertex.position().y()) +
445  (LLvertex.position().z() - theBeamSpot->z0()) * theBeamSpot->dydz()),
446  0);
447  math::XYZVector pperp((vel1 + vel2).Px(), (vel1 + vel2).Py(), 0);
448  math::XYZVector vperp(Dispbeamspot.x(), Dispbeamspot.y(), 0.);
449  float tempCos = vperp.Dot(pperp) / (vperp.R() * pperp.R());
450  if (tempCos < Cosee_Cut)
451  continue;
452  cleanedObjTracks.push_back(obj);
453  cleanedPairTracks.push_back(trk2);
454  Epair_ObjectIndex.push_back(object_container.at(iobj));
455  Epair_ObjectId.push_back(object_id.at(iobj));
456  Epair_TrkIndex.push_back(Trk_container.at(itrk2));
457  }
458  }
459 
460  // B recontrsuction
461  TLorentzVector vK;
462  for (unsigned int iobj = 0; iobj < cleanedObjTracks.size(); iobj++) {
463  auto objtrk = cleanedObjTracks.at(iobj);
464  auto pairtrk = cleanedPairTracks.at(iobj);
465  auto tranobj = std::make_shared<reco::TransientTrack>(reco::TransientTrack(*objtrk, &bField));
466  auto tranpair = std::make_shared<reco::TransientTrack>(reco::TransientTrack(*pairtrk, &bField));
467  //unsigned int index=Epair_ObjectIndex.at(iobj);
468  float massLep = 0.0005;
469  if (Epair_ObjectId.at(iobj) == 13)
470  massLep = 0.105;
471  vel1.SetPtEtaPhiM(objtrk->pt(), objtrk->eta(), objtrk->phi(), massLep);
472  vel2.SetPtEtaPhiM(pairtrk->pt(), pairtrk->eta(), pairtrk->phi(), massLep);
473  for (auto& trk : cleanedTracks) {
474  //reject track corresponding to mu or e
475  if (trk->charge() == objtrk->charge() &&
476  deltaR(objtrk->eta(), objtrk->phi(), trk->eta(), trk->phi()) < TrkObjExclusionCone)
477  continue;
478  if (trk->pt() < PtKTrack_Cut)
479  continue;
480  if (fabs(trk->dxy(vertex_point)) / trk->dxyError() < Ksdxy_Cut)
481  continue;
482  // skip the track that was used as mu or e
483  if (Epair_TrkIndex.at(iobj) == &trk - &cleanedTracks[0])
484  continue;
485  vK.SetPtEtaPhiM(trk->pt(), trk->eta(), trk->phi(), 0.493);
486  //final cuts
487  float InvMass = (vel1 + vel2 + vK).M();
488  if (InvMass > MaxMB_Cut || InvMass < MinMB_Cut)
489  continue;
490  if ((vel1 + vel2 + vK).Pt() < PtB_Cut)
491  continue;
492  auto trantrk = std::make_shared<reco::TransientTrack>(reco::TransientTrack(*trk, &bField));
493  std::vector<reco::TransientTrack> tempTracks;
494  tempTracks.reserve(3);
495  tempTracks.push_back(*tranobj);
496  tempTracks.push_back(*tranpair);
497  tempTracks.push_back(*trantrk);
498  LLvertex = theKalmanFitter.vertex(tempTracks);
499  if (!LLvertex.isValid())
500  continue;
502  continue;
503  GlobalError err = LLvertex.positionError();
504  GlobalPoint Dispbeamspot(-1 * ((theBeamSpot->x0() - LLvertex.position().x()) +
505  (LLvertex.position().z() - theBeamSpot->z0()) * theBeamSpot->dxdz()),
506  -1 * ((theBeamSpot->y0() - LLvertex.position().y()) +
507  (LLvertex.position().z() - theBeamSpot->z0()) * theBeamSpot->dydz()),
508  0);
509  math::XYZVector pperp((vel1 + vel2 + vK).Px(), (vel1 + vel2 + vK).Py(), 0);
510  math::XYZVector vperp(Dispbeamspot.x(), Dispbeamspot.y(), 0.);
511  float tempCos = vperp.Dot(pperp) / (vperp.R() * pperp.R());
512  if (tempCos < CoseeK_Cut)
513  continue;
514  if (SLxy_Cut > Dispbeamspot.perp() / sqrt(err.rerr(Dispbeamspot)))
515  continue;
516  Result = true;
517  break;
518  }
519  if (Result)
520  break;
521  }
522  //decission
523  return Result;
524 }
525 
526 // ------------ method called once each stream before processing any runs, lumis or events ------------
528 
529 // ------------ method called once each stream after processing all runs, lumis and events ------------
531 
532 // ------------ method called when starting to processes a run ------------
533 /*
534 void
535 LeptonSkimming::beginRun(edm::Run const&, edm::EventSetup const&)
536 {
537 }
538 */
539 
540 // ------------ method called when ending the processing of a run ------------
541 /*
542 void
543 LeptonSkimming::endRun(edm::Run const&, edm::EventSetup const&)
544 {
545 }
546 */
547 
548 // ------------ method called when starting to processes a luminosity block ------------
549 /*
550 void
551 LeptonSkimming::beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&)
552 {
553 }
554 */
555 
556 // ------------ method called when ending the processing of a luminosity block ------------
557 /*
558 void
559 LeptonSkimming::endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&)
560 {
561 }
562 */
563 
564 // ------------ method fills 'descriptions' with the allowed parameters for the module ------------
566  //The following says we do not know what parameters are allowed so do no validation
567  // Please change this to state exactly what you do use, even if it is no parameters
569  desc.setUnknown();
570  descriptions.addDefault(desc);
571 }
572 //define this as a plug-in
unsigned int trk_index
std::vector< float > muon_eta
bool accept() const
Has at least one path accepted the event?
ESGetTokenH3DDVariant esConsumes(std::string const &Record, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
float totalChiSquared() const
T perp() const
Definition: PV3DBase.h:69
std::vector< std::shared_ptr< reco::Track > > cleanedTracks
std::vector< unsigned int > object_id
T const & getData(const ESGetToken< T, R > &iToken) const noexcept(false)
Definition: EventSetup.h:119
double TrgExclusionCone
GlobalPoint position() const
const Point & position() const
position
Definition: BeamSpot.h:59
double MaxChi2Track_Cut
T z() const
Definition: PV3DBase.h:61
GlobalError positionError() const
double MinChi2Track_Cut
bool filter(edm::Event &, const edm::EventSetup &) override
edm::EDGetTokenT< reco::VertexCollection > vtxToken_
unsigned int nmuons
double TrkObjExclusionCone
double dydz() const
dydz slope
Definition: BeamSpot.h:80
edm::EDGetTokenT< edm::TriggerResults > trgresultsToken_
muons
the two sets of parameters below are mutually exclusive, depending if RECO or ALCARECO is used the us...
Definition: DiMuonV_cfg.py:214
std::vector< std::shared_ptr< reco::Track > > cleanedPairTracks
float degreesOfFreedom() const
std::vector< Conversion > ConversionCollection
collectin of Conversion objects
Definition: ConversionFwd.h:9
std::vector< unsigned int > Epair_ObjectId
std::vector< string > HLTFilter_
std::vector< unsigned int > Epair_ObjectIndex
CachingVertex< 5 > vertex(const std::vector< reco::TransientTrack > &tracks) const override
std::vector< std::shared_ptr< reco::Track > > MuTracks
std::vector< unsigned int > Epair_TrkIndex
Single trigger physics object (e.g., an isolated muon)
Definition: TriggerObject.h:21
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
reco::TrackBase::Point vertex_point
double x0() const
x coordinate
Definition: BeamSpot.h:61
double pt() const
track transverse momentum
Definition: TrackBase.h:637
bool failedToGet() const
Definition: HandleBase.h:72
T x() const
Definition: PV3DBase.h:59
T y() const
Definition: PV3DBase.h:60
unsigned int size() const
Get number of paths stored.
int iEvent
Definition: GenABIO.cc:224
std::vector< float > SelectedTrgObj_PtEtaPhiCharge
void addDefault(ParameterSetDescription const &psetDescription)
edm::EDGetToken electronsToken_
std::vector< float > el_pt
edm::EDGetTokenT< edm::ValueMap< float > > eleBWPToken_
std::vector< unsigned int > object_container
Definition: Muon.py:1
edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > bFieldToken_
bool isValid() const
T sqrt(T t)
Definition: SSEVec.h:23
static bool hasMatchedConversion(const reco::GsfElectron &ele, const reco::ConversionCollection &convCol, const math::XYZPoint &beamspot, bool allowCkfMatch=true, float lxyMin=2.0, float probMin=1e-6, unsigned int nHitsBeforeVtxMax=0)
const TriggerObjectCollection & getObjects() const
Definition: TriggerEvent.h:102
int id() const
getters
Definition: TriggerObject.h:51
float ChiSquaredProbability(double chiSquared, double nrDOF)
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
std::vector< float > el_eta
bool isTightMuonCustom(const reco::Muon &recoMu, const reco::Vertex recoVtx)
Definition: MuonID.h:36
std::vector< unsigned int > Trk_container
bool isMediumMuonCustom(const reco::Muon &recoMu)
Definition: MuonID.h:27
std::vector< float > muon_medium
double y0() const
y coordinate
Definition: BeamSpot.h:63
edm::EDGetToken Tracks_
unsigned int ntracks
bool isSoftMuon(const reco::Muon &, const reco::Vertex &, bool run2016_hip_mitigation=false)
double ElTrgExclusionCone
unsigned int nel
edm::EDGetTokenT< trigger::TriggerEvent > trigobjectsToken_
std::vector< std::shared_ptr< reco::Track > > cleanedObjTracks
std::vector< std::shared_ptr< reco::Track > > ElTracks
std::vector< float > muon_pt
std::vector< TriggerObject > TriggerObjectCollection
collection of trigger physics objects (e.g., all isolated muons)
Definition: TriggerObject.h:75
double eta() const
pseudorapidity of momentum vector
Definition: TrackBase.h:652
edm::EDGetTokenT< reco::BeamSpot > beamSpotToken_
double MuTrgExclusionCone
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:31
edm::EDGetTokenT< reco::ConversionCollection > conversionsToken_
std::vector< size_type > Keys
std::vector< float > el_phi
double dxdz() const
dxdz slope
Definition: BeamSpot.h:78
edm::EDGetToken muonsToken_
~LeptonSkimming() override
double b
Definition: hdecay.h:120
std::vector< float > muon_tight
bool isValid() const
Definition: HandleBase.h:70
bool hltFired(const edm::Event &iEvent, const edm::EventSetup &iSetup, std::vector< string > HLTPath)
double z0() const
z coordinate
Definition: BeamSpot.h:65
std::vector< float > muon_soft
edm::EDGetTokenT< edm::ValueMap< float > > eleUnBWPToken_
fixed size matrix
std::vector< string > HLTPath_
HLT enums.
std::vector< float > muon_phi
double a
Definition: hdecay.h:121
void beginStream(edm::StreamID) override
std::array< float, 5 > hltObject(const edm::Event &iEvent, const edm::EventSetup &iSetup, std::vector< string > Seed)
LeptonSkimming(const edm::ParameterSet &)
void endStream() override