CMS 3D CMS Logo

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