CMS 3D CMS Logo

L1TTauOffline.cc
Go to the documentation of this file.
1 
10 
14 
15 #include "TLorentzVector.h"
16 
17 #include <iomanip>
18 #include <stdio.h>
19 #include <string>
20 #include <sstream>
21 #include <math.h>
22 #include <algorithm>
23 
24 using namespace reco;
25 using namespace trigger;
26 using namespace edm;
27 using namespace std;
28 
29 TauL1TPair::TauL1TPair(const TauL1TPair& tauL1tPair) {
30 
31  m_tau = tauL1tPair.m_tau;
32  m_regTau = tauL1tPair.m_regTau;
33 
34  m_eta = tauL1tPair.m_eta;
35  m_phi_bar = tauL1tPair.m_phi_bar;
36  m_phi_end = tauL1tPair.m_phi_end;
37 
38 }
39 
40 double TauL1TPair::dR() {
41  return deltaR(m_regTau->eta(),m_regTau->phi(),eta(),phi());
42 }
43 
44 
45 //
46 // -------------------------------------- Constructor --------------------------------------------
47 //
49  theTauCollection_(consumes < reco::PFTauCollection > (ps.getUntrackedParameter < edm::InputTag > ("tauInputTag"))),
50  AntiMuInputTag_(consumes<reco::PFTauDiscriminator>(ps.getUntrackedParameter<edm::InputTag>("antiMuInputTag"))),
51  AntiEleInputTag_(consumes<reco::PFTauDiscriminator>(ps.getUntrackedParameter<edm::InputTag>("antiEleInputTag"))),
52  DecayModeFindingInputTag_(consumes<reco::PFTauDiscriminator>(ps.getUntrackedParameter<edm::InputTag>("decayModeFindingInputTag"))),
53  comb3TInputTag_(consumes<reco::PFTauDiscriminator>(ps.getUntrackedParameter<edm::InputTag>("comb3TInputTag"))),
54  MuonInputTag_(consumes<reco::MuonCollection>(ps.getUntrackedParameter<edm::InputTag>("muonInputTag"))),
55  MetInputTag_(consumes<reco::PFMETCollection>(ps.getUntrackedParameter<edm::InputTag>("metInputTag"))),
56  VtxInputTag_(consumes<reco::VertexCollection>(ps.getUntrackedParameter<edm::InputTag>("vtxInputTag"))),
57  BsInputTag_(consumes<reco::BeamSpot>(ps.getUntrackedParameter<edm::InputTag>("bsInputTag"))),
58  triggerEvent_(consumes < trigger::TriggerEvent > (ps.getUntrackedParameter < edm::InputTag > ("trigInputTag"))),
59  trigProcess_(ps.getUntrackedParameter<string>("trigProcess")),
60  triggerResults_(consumes < edm::TriggerResults > (ps.getUntrackedParameter < edm::InputTag > ("trigProcess_token"))),
61  triggerPath_(ps.getUntrackedParameter < vector<std::string> > ("triggerNames")),
62  histFolder_(ps.getParameter < std::string > ("histFolder")),
63  efficiencyFolder_(histFolder_ + "/efficiency_raw"),
64  stage2CaloLayer2TauToken_(consumes < l1t::TauBxCollection > (ps.getUntrackedParameter < edm::InputTag > ("l1tInputTag"))),
65  tauEfficiencyThresholds_(ps.getParameter < std::vector<int> > ("tauEfficiencyThresholds")),
66  tauEfficiencyBins_(ps.getParameter < std::vector<double> > ("tauEfficiencyBins"))
67 {
68  edm::LogInfo("L1TTauOffline") << "Constructor " << "L1TTauOffline::L1TTauOffline " << std::endl;
69 }
70 
71 //
72 // -- Destructor
73 //
75 {
76  edm::LogInfo("L1TTauOffline") << "Destructor L1TTauOffline::~L1TTauOffline " << std::endl;
77 }
78 
79 //
80 // -------------------------------------- beginRun --------------------------------------------
81 //
83 // void L1TTauOffline::dqmBeginRun(edm::Run const &, edm::EventSetup const &)
84 {
85  bool changed = true;
86  m_hltConfig.init(run,iSetup,trigProcess_,changed);
87 
88  edm::LogInfo("L1TTauOffline") << "L1TTauOffline::beginRun" << std::endl;
89 }
90 
91 //
92 // -------------------------------------- bookHistos --------------------------------------------
93 //
95 {
96  edm::LogInfo("L1TTauOffline") << "L1TTauOffline::bookHistograms" << std::endl;
97 
98  //book at beginRun
99  bookTauHistos(ibooker);
100 
101  for ( auto trigNamesIt = triggerPath_.begin() ; trigNamesIt!=triggerPath_.end() ; trigNamesIt++){
102 
103  std::string tNameTmp = (*trigNamesIt);
104  std::string tNamePattern = "";
105  std::size_t found0 = tNameTmp.find("*");
106  if(found0!=std::string::npos) tNamePattern = tNameTmp.substr(0,tNameTmp.size()-1);
107  else tNamePattern = tNameTmp;
108 
109  int tIndex = -1;
110 
111  for (unsigned ipath = 0; ipath < m_hltConfig.size(); ++ipath) {
112 
113  std::string tmpName = m_hltConfig.triggerName(ipath);
114 
115  std::size_t found=tmpName.find(tNamePattern);
116  if (found!=std::string::npos){
117  tIndex = int(ipath);
118  m_trigIndices.push_back(tIndex);
119  }
120  }
121  }
122 }
123 //
124 // -------------------------------------- beginLuminosityBlock --------------------------------------------
125 //
127 {
128  edm::LogInfo("L1TTauOffline") << "L1TTauOffline::beginLuminosityBlock" << std::endl;
129 }
130 
131 //
132 // -------------------------------------- Analyze --------------------------------------------
133 //
135 {
136 
137  m_MaxTauEta = 2.1;
138  m_MaxL1tTauDR = 0.5;
139  m_MaxHltTauDR = 0.5;
140 
142  e.getByToken(theTauCollection_, taus);
143 
144  if(!taus.isValid())
145  {
146  //edm::LogError("L1TTauOffline") << "invalid collection: reco::PFTauCollection " << std::endl;
147  return;
148  }
149 
151  e.getByToken(MuonInputTag_, muons);
152 
153  if(!muons.isValid())
154  {
155  //edm::LogError("L1TTauOffline") << "invalid collection: reco::MuonCollection " << std::endl;
156  return;
157  }
158 
160  e.getByToken(BsInputTag_, beamSpot);
161 
162  if(!beamSpot.isValid())
163  {
164  //edm::LogError("L1TTauOffline") << "invalid collection: reco::BeamSpot " << std::endl;
165  return;
166  }
167 
169  e.getByToken(VtxInputTag_, vertex);
170 
171  if(!vertex.isValid())
172  {
173  //edm::LogError("L1TTauOffline") << "invalid collection: reco::VertexCollection " << std::endl;
174  return;
175  }
176 
179 
180  if(!l1tCands.isValid())
181  {
182  //edm::LogError("L1TTauOffline") << "invalid collection: l1t::TauBxCollection " << std::endl;
183  return;
184  }
185 
187  e.getByToken(triggerResults_,trigResults);
188 
189  if(!trigResults.isValid())
190  {
191  //edm::LogError("L1TTauOffline") << "invalid collection: edm::TriggerResults " << std::endl;
192  return;
193  }
194 
196  e.getByToken(triggerEvent_,trigEvent);
197 
198  if(!trigEvent.isValid())
199  {
200  //edm::LogError("L1TTauOffline") << "invalid collection: trigger::TriggerEvent " << std::endl;
201  return;
202  }
203 
205  e.getByToken(MetInputTag_, mets);
206 
207  if(!mets.isValid()) {
208  //edm::LogError("L1TTauOffline") << "invalid collection: reco::PFMETCollection " << std::endl;
209  return;
210  }
211 
212  eSetup.get<IdealMagneticFieldRecord>().get(m_BField);
213  const reco::Vertex primaryVertex = getPrimaryVertex(vertex,beamSpot);
214 
215  getTightMuons(muons,mets,primaryVertex,trigEvent);
216  getProbeTaus(e,taus,muons,primaryVertex);
217  getTauL1tPairs(l1tCands);
218 
219  vector<l1t::Tau> l1tContainer;
220  l1tContainer.reserve(l1tCands->size()+1);
221 
222  for (auto tau = l1tCands->begin(0); tau != l1tCands->end(0); ++tau) {
223  l1tContainer.push_back(*tau);
224  }
225 
226  for(auto tauL1tPairsIt=m_TauL1tPairs.begin(); tauL1tPairsIt!=m_TauL1tPairs.end(); ++tauL1tPairsIt) {
227 
228  float eta = tauL1tPairsIt->eta();
229  float phi = tauL1tPairsIt->phi();
230  float pt = tauL1tPairsIt->pt();
231 
232  // unmatched gmt cands have l1tPt = -1.
233  float l1tPt = tauL1tPairsIt->l1tPt();
234 
235  int counter = 0;
236 
237  for (auto threshold : tauEfficiencyThresholds_) {
238  std::string str_threshold = std::to_string(threshold);
239 
240  int l1tPtCut = threshold;
241  bool l1tAboveCut = (l1tPt >= l1tPtCut);
242 
243  stringstream ptCutToTag; ptCutToTag << l1tPtCut;
244  string ptTag = ptCutToTag.str();
245 
246  if (fabs(eta) < m_MaxTauEta) {
247  if(counter==0) {
248  if(fabs(eta)<1.5) {
249  h_L1TauETvsTauET_EB_->Fill(pt,l1tPt);
250  h_L1TauPhivsTauPhi_EB_->Fill(phi,tauL1tPairsIt->l1tPhi());
251  h_resolutionTauET_EB_->Fill((l1tPt-pt)/pt);
252  h_resolutionTauPhi_EB_->Fill(tauL1tPairsIt->l1tPhi()-phi);
253  } else {
254  h_L1TauETvsTauET_EE_->Fill(pt,l1tPt);
255  h_L1TauPhivsTauPhi_EE_->Fill(phi,tauL1tPairsIt->l1tPhi());
256  h_resolutionTauET_EE_->Fill((l1tPt-pt)/pt);
257  h_resolutionTauPhi_EE_->Fill(tauL1tPairsIt->l1tPhi()-phi);
258  }
259  h_L1TauETvsTauET_EB_EE_->Fill(pt,l1tPt);
260  h_L1TauPhivsTauPhi_EB_EE_->Fill(phi,tauL1tPairsIt->l1tPhi());
261  h_L1TauEtavsTauEta_->Fill(eta,tauL1tPairsIt->l1tEta());
262  h_resolutionTauET_EB_EE_->Fill((l1tPt-pt)/pt);
263  h_resolutionTauPhi_EB_EE_->Fill(tauL1tPairsIt->l1tPhi()-phi);
264  h_resolutionTauEta_->Fill(tauL1tPairsIt->l1tEta()-eta);
265 
266  ++counter;
267  }
268 
269  if(fabs(eta)<1.5) {
272  } else {
275  }
278 
279  if(l1tAboveCut) {
280  if(fabs(eta)<1.5) h_efficiencyNonIsoTauET_EB_pass_[threshold]->Fill(pt);
283 
284  if(tauL1tPairsIt->l1tIso()>0.5) {
285  if(fabs(eta)<1.5) h_efficiencyIsoTauET_EB_pass_[threshold]->Fill(pt);
288  }
289  }
290  }
291  }
292  }//loop over tau-L1 pairs
293 }
294 
295 //
296 // -------------------------------------- endLuminosityBlock --------------------------------------------
297 //
299 {
300  edm::LogInfo("L1TTauOffline") << "L1TTauOffline::endLuminosityBlock" << std::endl;
301 }
302 
303 //
304 // -------------------------------------- endRun --------------------------------------------
305 //
307 {
308  edm::LogInfo("L1TTauOffline") << "L1TTauOffline::endRun" << std::endl;
309 }
310 
311 //
312 // -------------------------------------- book histograms --------------------------------------------
313 //
315 {
316  ibooker.cd();
317  ibooker.setCurrentFolder(histFolder_.c_str());
318  h_nVertex_ = ibooker.book1D("nVertex", "Number of event vertices in collection", 40, -0.5, 39.5);
319  h_tagAndProbeMass_ = ibooker.book1D("tagAndProbeMass", "Invariant mass of tag & probe pair", 100, 40, 140);
320 
321  h_L1TauETvsTauET_EB_ = ibooker.book2D("L1TauETvsTauET_EB",
322  "L1 Tau E_{T} vs PFTau E_{T} (EB); PFTau E_{T} (GeV); L1 Tau E_{T} (GeV)", 300, 0, 300, 300,
323  0, 300);
324  h_L1TauETvsTauET_EE_ = ibooker.book2D("L1TauETvsTauET_EE",
325  "L1 Tau E_{T} vs PFTau E_{T} (EE); PFTau E_{T} (GeV); L1 Tau E_{T} (GeV)", 300, 0, 300, 300,
326  0, 300);
327  h_L1TauETvsTauET_EB_EE_ = ibooker.book2D("L1TauETvsTauET_EB_EE",
328  "L1 Tau E_{T} vs PFTau E_{T} (EB+EE); PFTau E_{T} (GeV); L1 Tau E_{T} (GeV)", 300, 0, 300,
329  300, 0, 300);
330 
331  h_L1TauPhivsTauPhi_EB_ = ibooker.book2D("L1TauPhivsTauPhi_EB",
332  "#phi_{tau}^{L1} vs #phi_{tau}^{offline} (EB); #phi_{tau}^{offline}; #phi_{tau}^{L1}", 100,
333  -4, 4, 100, -4, 4);
334  h_L1TauPhivsTauPhi_EE_ = ibooker.book2D("L1TauPhivsTauPhi_EE",
335  "#phi_{tau}^{L1} vs #phi_{tau}^{offline} (EE); #phi_{tau}^{offline}; #phi_{tau}^{L1}", 100,
336  -4, 4, 100, -4, 4);
337  h_L1TauPhivsTauPhi_EB_EE_ = ibooker.book2D("L1TauPhivsTauPhi_EB_EE",
338  "#phi_{tau}^{L1} vs #phi_{tau}^{offline} (EB+EE); #phi_{tau}^{offline}; #phi_{tau}^{L1}", 100,
339  -4, 4, 100, -4, 4);
340 
341  h_L1TauEtavsTauEta_ = ibooker.book2D("L1TauEtavsTauEta",
342  "L1 Tau #eta vs PFTau #eta; PFTau #eta; L1 Tau #eta", 100, -3, 3, 100, -3, 3);
343 
344  // tau resolutions
345  h_resolutionTauET_EB_ = ibooker.book1D("resolutionTauET_EB",
346  "tau ET resolution (EB); (L1 Tau E_{T} - PFTau E_{T})/PFTau E_{T}; events", 50, -1, 1.5);
347  h_resolutionTauET_EE_ = ibooker.book1D("resolutionTauET_EE",
348  "tau ET resolution (EE); (L1 Tau E_{T} - PFTau E_{T})/PFTau E_{T}; events", 50, -1, 1.5);
349  h_resolutionTauET_EB_EE_ = ibooker.book1D("resolutionTauET_EB_EE",
350  "tau ET resolution (EB+EE); (L1 Tau E_{T} - PFTau E_{T})/PFTau E_{T}; events", 50, -1, 1.5);
351 
353  ibooker.book1D("resolutionTauPhi_EB",
354  "#phi_{tau} resolution (EB); #phi_{tau}^{L1} - #phi_{tau}^{offline}; events",
355  120, -0.3, 0.3);
357  ibooker.book1D("resolutionTauPhi_EE",
358  "tau #phi resolution (EE); #phi_{tau}^{L1} - #phi_{tau}^{offline}; events",
359  120, -0.3, 0.3);
361  ibooker.book1D("resolutionTauPhi_EB_EE",
362  "tau #phi resolution (EB+EE); #phi_{tau}^{L1} - #phi_{tau}^{offline}; events",
363  120, -0.3, 0.3);
364 
365  h_resolutionTauEta_ = ibooker.book1D("resolutionTauEta",
366  "tau #eta resolution (EB); L1 Tau #eta - PFTau #eta; events", 120, -0.3, 0.3);
367 
368  // tau turn-ons
369  ibooker.setCurrentFolder(efficiencyFolder_.c_str());
370  std::vector<float> tauBins(tauEfficiencyBins_.begin(), tauEfficiencyBins_.end());
371  int nBins = tauBins.size() - 1;
372  float* tauBinArray = &(tauBins[0]);
373 
374  for (auto threshold : tauEfficiencyThresholds_) {
375  std::string str_threshold = std::to_string(int(threshold));
377  "efficiencyIsoTauET_EB_threshold_" + str_threshold + "_Num",
378  "iso tau efficiency (EB); PFTau E_{T} (GeV); events", nBins, tauBinArray);
380  "efficiencyIsoTauET_EE_threshold_" + str_threshold + "_Num",
381  "iso tau efficiency (EE); PFTau E_{T} (GeV); events", nBins, tauBinArray);
383  "efficiencyIsoTauET_EB_EE_threshold_" + str_threshold + "_Num",
384  "iso tau efficiency (EB+EE); PFTau E_{T} (GeV); events", nBins, tauBinArray);
385 
387  "efficiencyIsoTauET_EB_threshold_" + str_threshold + "_Den",
388  "iso tau efficiency (EB); PFTau E_{T} (GeV); events", nBins, tauBinArray);
390  "efficiencyIsoTauET_EE_threshold_" + str_threshold + "_Den",
391  "iso tau efficiency (EE); PFTau E_{T} (GeV); events", nBins, tauBinArray);
393  "efficiencyIsoTauET_EB_EE_threshold_" + str_threshold + "_Den",
394  "iso tau efficiency (EB+EE); PFTau E_{T} (GeV); events", nBins, tauBinArray);
395 
396 
397  //non iso
399  "efficiencyNonIsoTauET_EB_threshold_" + str_threshold + "_Num",
400  "inclusive tau efficiency (EB); PFTau E_{T} (GeV); events", nBins, tauBinArray);
402  "efficiencyNonIsoTauET_EE_threshold_" + str_threshold + "_Num",
403  "inclusive tau efficiency (EE); PFTau E_{T} (GeV); events", nBins, tauBinArray);
405  "efficiencyNonIsoTauET_EB_EE_threshold_" + str_threshold + "_Num",
406  "inclusive tau efficiency (EB+EE); PFTau E_{T} (GeV); events", nBins, tauBinArray);
407 
409  "efficiencyNonIsoTauET_EB_threshold_" + str_threshold + "_Den",
410  "inclusive tau efficiency (EB); PFTau E_{T} (GeV); events", nBins, tauBinArray);
412  "efficiencyNonIsoTauET_EE_threshold_" + str_threshold + "_Den",
413  "inclusive tau efficiency (EE); PFTau E_{T} (GeV); events", nBins, tauBinArray);
415  "efficiencyNonIsoTauET_EB_EE_threshold_" + str_threshold + "_Den",
416  "inclusive tau efficiency (EB+EE); PFTau E_{T} (GeV); events", nBins, tauBinArray);
417 
418  }
419 
420  ibooker.cd();
421 
422  return;
423 
424 }
425 
427 
428  reco::Vertex::Point posVtx;
429  reco::Vertex::Error errVtx;
430 
431  bool hasPrimaryVertex = false;
432 
433  if (vertex.isValid())
434  {
435  for (auto vertexIt=vertex->begin();vertexIt!=vertex->end();++vertexIt)
436  {
437  if (vertexIt->isValid() &&
438  !vertexIt->isFake())
439  {
440  posVtx = vertexIt->position();
441  errVtx = vertexIt->error();
442  hasPrimaryVertex = true;
443  break;
444  }
445  }
446  }
447 
448  if ( !hasPrimaryVertex ) {
449  posVtx = beamSpot->position();
450  errVtx(0,0) = beamSpot->BeamWidthX();
451  errVtx(1,1) = beamSpot->BeamWidthY();
452  errVtx(2,2) = beamSpot->sigmaZ();
453  }
454 
455  const reco::Vertex primaryVertex(posVtx,errVtx);
456 
457  return primaryVertex;
458 }
459 
461 
462 
463  double matchDeltaR = 9999;
464 
466 
467  for(auto trigIndexIt = m_trigIndices.begin(); trigIndexIt!=m_trigIndices.end(); ++trigIndexIt) {
468 
469  const vector<string> moduleLabels(m_hltConfig.moduleLabels(*trigIndexIt));
470  const unsigned moduleIndex = m_hltConfig.size((*trigIndexIt))-2;
471 
472  const unsigned hltFilterIndex = triggerEvent->filterIndex(InputTag(moduleLabels[moduleIndex],"",trigProcess_));
473 
474  if (hltFilterIndex < triggerEvent->sizeFilters()) {
475  const Keys triggerKeys(triggerEvent->filterKeys(hltFilterIndex));
476  const Vids triggerVids(triggerEvent->filterIds(hltFilterIndex));
477 
478  const unsigned nTriggers = triggerVids.size();
479  for (size_t iTrig = 0; iTrig < nTriggers; ++iTrig) {
480  const TriggerObject trigObject = trigObjs[triggerKeys[iTrig]];
481 
482  double dRtmp = deltaR((*muon),trigObject);
483  if (dRtmp < matchDeltaR) matchDeltaR = dRtmp;
484  }
485  }
486  }
487 
488  return (matchDeltaR < m_MaxHltTauDR);
489 
490 }
491 
493 
494  m_TauL1tPairs.clear();
495 
496  vector<l1t::Tau> l1tContainer;
497  l1tContainer.reserve(l1tCands->size()+1);
498 
499  for (auto tau = l1tCands->begin(0); tau != l1tCands->end(0); ++tau) {
500  l1tContainer.push_back(*tau);
501  }
502 
503  for (auto probeTauIt = m_ProbeTaus.begin(); probeTauIt!=m_ProbeTaus.end(); ++probeTauIt) {
504 
505  TauL1TPair pairBestCand((*probeTauIt),0);
506 
507  for(auto l1tIt = l1tContainer.begin() ; l1tIt!=l1tContainer.end(); ++l1tIt) {
508 
509  TauL1TPair pairTmpCand((*probeTauIt),&(*l1tIt));
510 
511  if (pairTmpCand.dR() < m_MaxL1tTauDR && pairTmpCand.l1tPt() > pairBestCand.l1tPt())
512  pairBestCand = pairTmpCand;
513 
514  }
515 
516  m_TauL1tPairs.push_back(pairBestCand);
517 
518  }
519 
520 }
521 
523 
524  m_TightMuons.clear();
525 
526  const reco::PFMET *pfmet=NULL;
527  pfmet=&(mets->front());
528 
529  int nb_mu=0;
530 
531  for(auto muonIt2 = muons->begin(); muonIt2!=muons->end(); ++muonIt2) {
532  if (fabs(muonIt2->eta())< 2.4 && muonIt2->pt()>10 && muon::isLooseMuon((*muonIt2)) && (muonIt2->pfIsolationR04().sumChargedHadronPt+max(muonIt2->pfIsolationR04().sumNeutralHadronEt+muonIt2->pfIsolationR04().sumPhotonEt-0.5*muonIt2->pfIsolationR04().sumPUPt,0.0))/muonIt2->pt()<0.3) {
533  ++nb_mu;
534  }
535  }
536  bool foundTightMu=false;
537  for(auto muonIt = muons->begin(); muonIt!=muons->end(); ++muonIt) {
538  if (!matchHlt(trigEvent,&(*muonIt))) continue;
539  float muiso=(muonIt->pfIsolationR04().sumChargedHadronPt+max(muonIt->pfIsolationR04().sumNeutralHadronEt+muonIt->pfIsolationR04().sumPhotonEt-0.5*muonIt->pfIsolationR04().sumPUPt,0.0))/muonIt->pt();
540 
541  if (muiso<0.1 && nb_mu<2 && !foundTightMu && fabs(muonIt->eta())< 2.1 && muonIt->pt()>24 && muon::isLooseMuon((*muonIt))) {
542  float mt=sqrt(pow(muonIt->pt() + pfmet->pt(), 2) - pow(muonIt->px() + pfmet->px(),2) - pow(muonIt->py() + pfmet->py(), 2));
543  if (mt<30){
544  m_TightMuons.push_back(&(*muonIt));
545  foundTightMu=true;
546  }
547  }
548  }
549 }
550 
552 
553  m_ProbeTaus.clear();
554 
556  iEvent.getByToken(AntiMuInputTag_, antimu);
557  if(!antimu.isValid())
558  {
559  //edm::LogError("L1TTauOffline") << "invalid collection: reco::PFTauDiscriminator " << std::endl;
560  return;
561  }
562 
565  if(!dmf.isValid())
566  {
567  //edm::LogError("L1TTauOffline") << "invalid collection: reco::PFTauDiscriminator " << std::endl;
568  return;
569  }
570 
572  iEvent.getByToken(AntiEleInputTag_, antiele);
573  if(!antiele.isValid())
574  {
575  //edm::LogError("L1TTauOffline") << "invalid collection: reco::PFTauDiscriminator " << std::endl;
576  return;
577  }
578 
580  iEvent.getByToken(comb3TInputTag_, comb3T);
581  if(!comb3T.isValid())
582  {
583  //edm::LogError("L1TTauOffline") << "invalid collection: reco::PFTauDiscriminator " << std::endl;
584  return;
585  }
586 
587  if (m_TightMuons.size()>0){
588  TLorentzVector mymu;
589  mymu.SetPtEtaPhiE(m_TightMuons[0]->pt(),m_TightMuons[0]->eta(),m_TightMuons[0]->phi(),m_TightMuons[0]->energy());
590  int iTau=0;
591  for(auto tauIt = taus->begin(); tauIt!=taus->end(); ++tauIt,++iTau) {
592  reco::PFTauRef tauCandidate(taus, iTau);
593  TLorentzVector mytau;
594  mytau.SetPtEtaPhiE(tauIt->pt(),tauIt->eta(),tauIt->phi(),tauIt->energy());
595 
596  if (fabs(tauIt->charge())==1 && fabs(tauIt->eta())< 2.1 && tauIt->pt()>20 && (*antimu)[tauCandidate] > 0.5 && (*antiele)[tauCandidate] > 0.5 && (*dmf)[tauCandidate] > 0.5 && (*comb3T)[tauCandidate] > 0.5) {
597  if (mymu.DeltaR(mytau)>0.5 && (mymu+mytau).M()>40 && (mymu+mytau).M()<80 && m_TightMuons[0]->charge()*tauIt->charge()<0){
598  m_ProbeTaus.push_back(&(*tauIt));
599  }
600  }
601  }
602  }
603 }
604 
605 
606 //define this as a plug-in
unsigned int size() const
number of trigger paths in trigger table
const_iterator end(int bx) const
virtual double pt() const final
transverse momentum
edm::EDGetTokenT< reco::VertexCollection > VtxInputTag_
std::vector< std::string > triggerPath_
double l1tPt() const
Definition: L1TTauOffline.h:64
std::vector< PFTau > PFTauCollection
collection of PFTau objects
Definition: PFTauFwd.h:9
unsigned size(int bx) const
The single EDProduct to be saved for each event (AOD case)
Definition: TriggerEvent.h:25
double m_phi_bar
Definition: L1TTauOffline.h:75
const std::string & triggerName(unsigned int triggerIndex) const
std::map< double, MonitorElement * > h_efficiencyIsoTauET_EB_pass_
std::vector< int > m_trigIndices
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:460
std::vector< TauL1TPair > m_TauL1tPairs
void analyze(edm::Event const &e, edm::EventSetup const &eSetup)
void cd(void)
Definition: DQMStore.cc:269
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
MonitorElement * h_L1TauPhivsTauPhi_EB_
void bookTauHistos(DQMStore::IBooker &)
edm::ESHandle< MagneticField > m_BField
void dqmBeginRun(const edm::Run &run, const edm::EventSetup &iSetup) override
const Keys & filterKeys(trigger::size_type index) const
Definition: TriggerEvent.h:111
trigger::size_type filterIndex(const edm::InputTag &filterTag) const
find index of filter in data-member vector from filter tag
Definition: TriggerEvent.h:123
edm::EDGetTokenT< reco::PFTauDiscriminator > comb3TInputTag_
math::Error< dimension >::type Error
covariance error matrix (3x3)
Definition: Vertex.h:43
#define NULL
Definition: scimark2.h:8
std::vector< Vertex > VertexCollection
collection of Vertex objects
Definition: VertexFwd.h:9
std::vector< double > tauEfficiencyBins_
std::map< double, MonitorElement * > h_efficiencyNonIsoTauET_EB_EE_pass_
delete x;
Definition: CaloConfig.h:22
MonitorElement * h_nVertex_
std::map< double, MonitorElement * > h_efficiencyIsoTauET_EE_pass_
std::map< double, MonitorElement * > h_efficiencyNonIsoTauET_EB_total_
std::map< double, MonitorElement * > h_efficiencyNonIsoTauET_EB_pass_
std::string efficiencyFolder_
void getProbeTaus(const edm::Event &e, edm::Handle< reco::PFTauCollection > const &taus, edm::Handle< reco::MuonCollection > const &muons, const reco::Vertex &vertex)
BXVector< Tau > TauBxCollection
Definition: Tau.h:10
const Point & position() const
position
Definition: Vertex.h:109
std::string histFolder_
std::map< double, MonitorElement * > h_efficiencyNonIsoTauET_EB_EE_total_
std::vector< Muon > MuonCollection
collection of Muon objects
Definition: MuonFwd.h:9
MonitorElement * h_resolutionTauPhi_EB_
bool isLooseMuon(const reco::Muon &)
L1TTauOffline(const edm::ParameterSet &ps)
void Fill(long long x)
MonitorElement * h_L1TauPhivsTauPhi_EE_
std::vector< int > tauEfficiencyThresholds_
HLTConfigProvider m_hltConfig
const Vids & filterIds(trigger::size_type index) const
Definition: TriggerEvent.h:110
std::vector< const reco::PFTau * > m_ProbeTaus
int iEvent
Definition: GenABIO.cc:230
MonitorElement * h_resolutionTauPhi_EB_EE_
const reco::Vertex getPrimaryVertex(edm::Handle< reco::VertexCollection > const &vertex, edm::Handle< reco::BeamSpot > const &beamSpot)
const TriggerObjectCollection & getObjects() const
Definition: TriggerEvent.h:98
virtual double px() const final
x coordinate of momentum vector
T sqrt(T t)
Definition: SSEVec.h:18
const l1t::Tau * m_regTau
Definition: L1TTauOffline.h:72
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:115
std::map< double, MonitorElement * > h_efficiencyIsoTauET_EB_total_
MonitorElement * h_resolutionTauPhi_EE_
auto deltaR(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
Definition: deltaR.h:28
math::XYZPoint Point
point in the space
Definition: Vertex.h:39
std::map< double, MonitorElement * > h_efficiencyIsoTauET_EB_EE_pass_
MonitorElement * h_L1TauEtavsTauEta_
double BeamWidthX() const
beam width X
Definition: BeamSpot.h:86
edm::EDGetTokenT< l1t::TauBxCollection > stage2CaloLayer2TauToken_
virtual ~L1TTauOffline()
std::map< double, MonitorElement * > h_efficiencyIsoTauET_EB_EE_total_
edm::EDGetTokenT< reco::PFTauDiscriminator > AntiMuInputTag_
bool isValid() const
Definition: HandleBase.h:74
MonitorElement * h_resolutionTauEta_
double m_eta
Definition: L1TTauOffline.h:74
std::map< double, MonitorElement * > h_efficiencyNonIsoTauET_EE_total_
edm::EDGetTokenT< reco::BeamSpot > BsInputTag_
edm::EDGetTokenT< reco::PFMETCollection > MetInputTag_
const std::vector< std::string > & moduleLabels(unsigned int trigger) const
label(s) of module(s) on a trigger path
double deltaR(double eta1, double eta2, double phi1, double phi2)
Definition: TreeUtility.cc:17
MonitorElement * h_resolutionTauET_EB_EE_
edm::EDGetTokenT< edm::TriggerResults > triggerResults_
std::vector< TriggerObject > TriggerObjectCollection
collection of trigger physics objects (e.g., all isolated muons)
Definition: TriggerObject.h:81
std::vector< const reco::Muon * > m_TightMuons
MonitorElement * h_resolutionTauET_EE_
std::map< double, MonitorElement * > h_efficiencyIsoTauET_EE_total_
const reco::PFTau * m_tau
Definition: L1TTauOffline.h:67
edm::EDGetTokenT< reco::MuonCollection > MuonInputTag_
std::string trigProcess_
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:277
edm::EDGetTokenT< reco::PFTauDiscriminator > DecayModeFindingInputTag_
MonitorElement * book2D(Args &&...args)
Definition: DQMStore.h:133
MonitorElement * h_tagAndProbeMass_
std::vector< size_type > Keys
double dR()
bool init(const edm::Run &iRun, const edm::EventSetup &iSetup, const std::string &processName, bool &changed)
d&#39;tor
const T & get() const
Definition: EventSetup.h:55
double sigmaZ() const
sigma z
Definition: BeamSpot.h:80
double BeamWidthY() const
beam width Y
Definition: BeamSpot.h:88
void getTauL1tPairs(edm::Handle< l1t::TauBxCollection > const &l1tCands)
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
TauL1TPair(const reco::PFTau *tau, const l1t::Tau *regTau)
Definition: L1TTauOffline.h:52
edm::EDGetTokenT< trigger::TriggerEvent > triggerEvent_
edm::EDGetTokenT< reco::PFTauDiscriminator > AntiEleInputTag_
void endRun(edm::Run const &run, edm::EventSetup const &eSetup)
fixed size matrix
HLT enums.
static std::atomic< unsigned int > counter
void endLuminosityBlock(edm::LuminosityBlock const &lumi, edm::EventSetup const &eSetup)
bool matchHlt(edm::Handle< trigger::TriggerEvent > const &triggerEvent, const reco::Muon *muon)
const Point & position() const
position
Definition: BeamSpot.h:62
edm::EDGetTokenT< reco::PFTauCollection > theTauCollection_
MonitorElement * h_L1TauETvsTauET_EB_EE_
void beginLuminosityBlock(edm::LuminosityBlock const &lumi, edm::EventSetup const &eSetup)
MonitorElement * h_L1TauETvsTauET_EE_
MonitorElement * h_L1TauPhivsTauPhi_EB_EE_
void getTightMuons(edm::Handle< reco::MuonCollection > const &muons, edm::Handle< reco::PFMETCollection > const &mets, const reco::Vertex &vertex, edm::Handle< trigger::TriggerEvent > const &trigEvent)
const_iterator begin(int bx) const
MonitorElement * h_resolutionTauET_EB_
virtual double py() const final
y coordinate of momentum vector
MonitorElement * h_L1TauETvsTauET_EB_
std::vector< int > Vids
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:40
std::map< double, MonitorElement * > h_efficiencyNonIsoTauET_EE_pass_
Definition: Run.h:42
double m_phi_end
Definition: L1TTauOffline.h:76
Collection of PF MET.