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 <cstdio>
19 #include <string>
20 #include <sstream>
21 #include <cmath>
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 const std::map<std::string, unsigned int> L1TTauOffline::PlotConfigNames = {
45  {"nVertex", PlotConfig::nVertex},
46  {"ETvsET", PlotConfig::ETvsET},
47  {"PHIvsPHI", PlotConfig::PHIvsPHI}
48 };
49 
50 //
51 // -------------------------------------- Constructor --------------------------------------------
52 //
54  theTauCollection_(consumes < reco::PFTauCollection > (ps.getUntrackedParameter < edm::InputTag > ("tauInputTag"))),
55  AntiMuInputTag_(consumes<reco::PFTauDiscriminator>(ps.getUntrackedParameter<edm::InputTag>("antiMuInputTag"))),
56  AntiEleInputTag_(consumes<reco::PFTauDiscriminator>(ps.getUntrackedParameter<edm::InputTag>("antiEleInputTag"))),
57  DecayModeFindingInputTag_(consumes<reco::PFTauDiscriminator>(ps.getUntrackedParameter<edm::InputTag>("decayModeFindingInputTag"))),
58  comb3TInputTag_(consumes<reco::PFTauDiscriminator>(ps.getUntrackedParameter<edm::InputTag>("comb3TInputTag"))),
59  MuonInputTag_(consumes<reco::MuonCollection>(ps.getUntrackedParameter<edm::InputTag>("muonInputTag"))),
60  MetInputTag_(consumes<reco::PFMETCollection>(ps.getUntrackedParameter<edm::InputTag>("metInputTag"))),
61  VtxInputTag_(consumes<reco::VertexCollection>(ps.getUntrackedParameter<edm::InputTag>("vtxInputTag"))),
62  BsInputTag_(consumes<reco::BeamSpot>(ps.getUntrackedParameter<edm::InputTag>("bsInputTag"))),
63  triggerEvent_(consumes < trigger::TriggerEvent > (ps.getUntrackedParameter < edm::InputTag > ("trigInputTag"))),
64  trigProcess_(ps.getUntrackedParameter<string>("trigProcess")),
65  triggerResults_(consumes < edm::TriggerResults > (ps.getUntrackedParameter < edm::InputTag > ("trigProcess_token"))),
66  triggerPath_(ps.getUntrackedParameter < vector<std::string> > ("triggerNames")),
67  histFolder_(ps.getParameter < std::string > ("histFolder")),
68  efficiencyFolder_(histFolder_ + "/efficiency_raw"),
69  stage2CaloLayer2TauToken_(consumes < l1t::TauBxCollection > (ps.getUntrackedParameter < edm::InputTag > ("l1tInputTag"))),
70  tauEfficiencyThresholds_(ps.getParameter < std::vector<int> > ("tauEfficiencyThresholds")),
71  tauEfficiencyBins_(ps.getParameter < std::vector<double> > ("tauEfficiencyBins")),
72  histDefinitions_(dqmoffline::l1t::readHistDefinitions(ps.getParameterSet("histDefinitions"), PlotConfigNames))
73 {
74  edm::LogInfo("L1TTauOffline") << "Constructor " << "L1TTauOffline::L1TTauOffline " << std::endl;
75 }
76 
77 //
78 // -- Destructor
79 //
81 {
82  edm::LogInfo("L1TTauOffline") << "Destructor L1TTauOffline::~L1TTauOffline " << std::endl;
83 }
84 
85 //
86 // -------------------------------------- beginRun --------------------------------------------
87 //
89 // void L1TTauOffline::dqmBeginRun(edm::Run const &, edm::EventSetup const &)
90 {
91  bool changed = true;
92  m_hltConfig.init(run,iSetup,trigProcess_,changed);
93 
94  edm::LogInfo("L1TTauOffline") << "L1TTauOffline::beginRun" << std::endl;
95 }
96 
97 //
98 // -------------------------------------- bookHistos --------------------------------------------
99 //
101 {
102  edm::LogInfo("L1TTauOffline") << "L1TTauOffline::bookHistograms" << std::endl;
103 
104  //book at beginRun
105  bookTauHistos(ibooker);
106 
107  for ( auto trigNamesIt = triggerPath_.begin() ; trigNamesIt!=triggerPath_.end() ; trigNamesIt++){
108 
109  std::string tNameTmp = (*trigNamesIt);
110  std::string tNamePattern = "";
111  std::size_t found0 = tNameTmp.find("*");
112  if(found0!=std::string::npos) tNamePattern = tNameTmp.substr(0,tNameTmp.size()-1);
113  else tNamePattern = tNameTmp;
114 
115  int tIndex = -1;
116 
117  for (unsigned ipath = 0; ipath < m_hltConfig.size(); ++ipath) {
118 
119  std::string tmpName = m_hltConfig.triggerName(ipath);
120 
121  std::size_t found=tmpName.find(tNamePattern);
122  if (found!=std::string::npos){
123  tIndex = int(ipath);
124  m_trigIndices.push_back(tIndex);
125  }
126  }
127  }
128 }
129 //
130 // -------------------------------------- beginLuminosityBlock --------------------------------------------
131 //
133 {
134  edm::LogInfo("L1TTauOffline") << "L1TTauOffline::beginLuminosityBlock" << std::endl;
135 }
136 
137 //
138 // -------------------------------------- Analyze --------------------------------------------
139 //
141 {
142 
143  m_MaxTauEta = 2.1;
144  m_MaxL1tTauDR = 0.5;
145  m_MaxHltTauDR = 0.5;
146 
148  e.getByToken(theTauCollection_, taus);
149 
150  if(!taus.isValid())
151  {
152  edm::LogWarning("L1TTauOffline") << "invalid collection: reco::PFTauCollection " << std::endl;
153  return;
154  }
155 
157  e.getByToken(MuonInputTag_, muons);
158 
159  if(!muons.isValid())
160  {
161  edm::LogWarning("L1TTauOffline") << "invalid collection: reco::MuonCollection " << std::endl;
162  return;
163  }
164 
166  e.getByToken(BsInputTag_, beamSpot);
167 
168  if(!beamSpot.isValid())
169  {
170  edm::LogWarning("L1TTauOffline") << "invalid collection: reco::BeamSpot " << std::endl;
171  return;
172  }
173 
175  e.getByToken(VtxInputTag_, vertex);
176 
177  if(!vertex.isValid())
178  {
179  edm::LogWarning("L1TTauOffline") << "invalid collection: reco::VertexCollection " << std::endl;
180  return;
181  }
182 
185 
186  if(!l1tCands.isValid())
187  {
188  edm::LogWarning("L1TTauOffline") << "invalid collection: l1t::TauBxCollection " << std::endl;
189  return;
190  }
191 
193  e.getByToken(triggerResults_,trigResults);
194 
195  if(!trigResults.isValid())
196  {
197  edm::LogWarning("L1TTauOffline") << "invalid collection: edm::TriggerResults " << std::endl;
198  return;
199  }
200 
202  e.getByToken(triggerEvent_,trigEvent);
203 
204  if(!trigEvent.isValid())
205  {
206  edm::LogWarning("L1TTauOffline") << "invalid collection: trigger::TriggerEvent " << std::endl;
207  return;
208  }
209 
211  e.getByToken(MetInputTag_, mets);
212 
213  if(!mets.isValid()) {
214  edm::LogWarning("L1TTauOffline") << "invalid collection: reco::PFMETCollection " << std::endl;
215  return;
216  }
217 
218  eSetup.get<IdealMagneticFieldRecord>().get(m_BField);
219  const reco::Vertex primaryVertex = getPrimaryVertex(vertex,beamSpot);
220 
221  getTightMuons(muons,mets,primaryVertex,trigEvent);
222  getProbeTaus(e,taus,muons,primaryVertex);
223  getTauL1tPairs(l1tCands);
224 
225  vector<l1t::Tau> l1tContainer;
226  l1tContainer.reserve(l1tCands->size()+1);
227 
228  for (auto tau = l1tCands->begin(0); tau != l1tCands->end(0); ++tau) {
229  l1tContainer.push_back(*tau);
230  }
231 
232  for(auto tauL1tPairsIt=m_TauL1tPairs.begin(); tauL1tPairsIt!=m_TauL1tPairs.end(); ++tauL1tPairsIt) {
233 
234  float eta = tauL1tPairsIt->eta();
235  float phi = tauL1tPairsIt->phi();
236  float pt = tauL1tPairsIt->pt();
237 
238  // unmatched gmt cands have l1tPt = -1.
239  float l1tPt = tauL1tPairsIt->l1tPt();
240 
241  int counter = 0;
242 
243  for (auto threshold : tauEfficiencyThresholds_) {
244  std::string str_threshold = std::to_string(threshold);
245 
246  int l1tPtCut = threshold;
247  bool l1tAboveCut = (l1tPt >= l1tPtCut);
248 
249  stringstream ptCutToTag; ptCutToTag << l1tPtCut;
250  string ptTag = ptCutToTag.str();
251 
252  if (fabs(eta) < m_MaxTauEta) {
253  if(counter==0) {
254  if(fabs(eta)<1.5) {
255  h_L1TauETvsTauET_EB_->Fill(pt,l1tPt);
256  h_L1TauPhivsTauPhi_EB_->Fill(phi,tauL1tPairsIt->l1tPhi());
257  h_resolutionTauET_EB_->Fill((l1tPt-pt)/pt);
258  h_resolutionTauPhi_EB_->Fill(tauL1tPairsIt->l1tPhi()-phi);
259  } else {
260  h_L1TauETvsTauET_EE_->Fill(pt,l1tPt);
261  h_L1TauPhivsTauPhi_EE_->Fill(phi,tauL1tPairsIt->l1tPhi());
262  h_resolutionTauET_EE_->Fill((l1tPt-pt)/pt);
263  h_resolutionTauPhi_EE_->Fill(tauL1tPairsIt->l1tPhi()-phi);
264  }
265  h_L1TauETvsTauET_EB_EE_->Fill(pt,l1tPt);
266  h_L1TauPhivsTauPhi_EB_EE_->Fill(phi,tauL1tPairsIt->l1tPhi());
267  h_L1TauEtavsTauEta_->Fill(eta,tauL1tPairsIt->l1tEta());
268  h_resolutionTauET_EB_EE_->Fill((l1tPt-pt)/pt);
269  h_resolutionTauPhi_EB_EE_->Fill(tauL1tPairsIt->l1tPhi()-phi);
270  h_resolutionTauEta_->Fill(tauL1tPairsIt->l1tEta()-eta);
271 
272  ++counter;
273  }
274 
275  if(fabs(eta)<1.5) {
278  } else {
281  }
284 
285  if(l1tAboveCut) {
286  if(fabs(eta)<1.5) h_efficiencyNonIsoTauET_EB_pass_[threshold]->Fill(pt);
289 
290  if(tauL1tPairsIt->l1tIso()>0.5) {
291  if(fabs(eta)<1.5) h_efficiencyIsoTauET_EB_pass_[threshold]->Fill(pt);
294  }
295  }
296  }
297  }
298  }//loop over tau-L1 pairs
299 }
300 
301 //
302 // -------------------------------------- endLuminosityBlock --------------------------------------------
303 //
305 {
306  edm::LogInfo("L1TTauOffline") << "L1TTauOffline::endLuminosityBlock" << std::endl;
307 }
308 
309 //
310 // -------------------------------------- endRun --------------------------------------------
311 //
313 {
314  edm::LogInfo("L1TTauOffline") << "L1TTauOffline::endRun" << std::endl;
315 }
316 
317 //
318 // -------------------------------------- book histograms --------------------------------------------
319 //
321 {
322  ibooker.cd();
323  ibooker.setCurrentFolder(histFolder_);
324  dqmoffline::l1t::HistDefinition nVertexDef = histDefinitions_[PlotConfig::nVertex];
325  h_nVertex_ = ibooker.book1D(
326  nVertexDef.name, nVertexDef.title, nVertexDef.nbinsX, nVertexDef.xmin, nVertexDef.xmax
327  );
328  h_tagAndProbeMass_ = ibooker.book1D("tagAndProbeMass", "Invariant mass of tag & probe pair", 100, 40, 140);
329 
330  dqmoffline::l1t::HistDefinition templateETvsET = histDefinitions_[PlotConfig::ETvsET];
331  h_L1TauETvsTauET_EB_ = ibooker.book2D("L1TauETvsTauET_EB",
332  "L1 Tau E_{T} vs PFTau E_{T} (EB); PFTau E_{T} (GeV); L1 Tau E_{T} (GeV)",
333  templateETvsET.nbinsX, &templateETvsET.binsX[0], templateETvsET.nbinsY, &templateETvsET.binsY[0]);
334  h_L1TauETvsTauET_EE_ = ibooker.book2D("L1TauETvsTauET_EE",
335  "L1 Tau E_{T} vs PFTau E_{T} (EE); PFTau E_{T} (GeV); L1 Tau E_{T} (GeV)",
336  templateETvsET.nbinsX, &templateETvsET.binsX[0], templateETvsET.nbinsY, &templateETvsET.binsY[0]);
337  h_L1TauETvsTauET_EB_EE_ = ibooker.book2D("L1TauETvsTauET_EB_EE",
338  "L1 Tau E_{T} vs PFTau E_{T} (EB+EE); PFTau E_{T} (GeV); L1 Tau E_{T} (GeV)",
339  templateETvsET.nbinsX, &templateETvsET.binsX[0], templateETvsET.nbinsY, &templateETvsET.binsY[0]);
340 
341  dqmoffline::l1t::HistDefinition templatePHIvsPHI = histDefinitions_[PlotConfig::PHIvsPHI];
342  h_L1TauPhivsTauPhi_EB_ = ibooker.book2D("L1TauPhivsTauPhi_EB",
343  "#phi_{tau}^{L1} vs #phi_{tau}^{offline} (EB); #phi_{tau}^{offline}; #phi_{tau}^{L1}",
344  templatePHIvsPHI.nbinsX, templatePHIvsPHI.xmin, templatePHIvsPHI.xmax,
345  templatePHIvsPHI.nbinsY, templatePHIvsPHI.ymin, templatePHIvsPHI.ymax);
346  h_L1TauPhivsTauPhi_EE_ = ibooker.book2D("L1TauPhivsTauPhi_EE",
347  "#phi_{tau}^{L1} vs #phi_{tau}^{offline} (EE); #phi_{tau}^{offline}; #phi_{tau}^{L1}",
348  templatePHIvsPHI.nbinsX, templatePHIvsPHI.xmin, templatePHIvsPHI.xmax,
349  templatePHIvsPHI.nbinsY, templatePHIvsPHI.ymin, templatePHIvsPHI.ymax);
350  h_L1TauPhivsTauPhi_EB_EE_ = ibooker.book2D("L1TauPhivsTauPhi_EB_EE",
351  "#phi_{tau}^{L1} vs #phi_{tau}^{offline} (EB+EE); #phi_{tau}^{offline}; #phi_{tau}^{L1}",
352  templatePHIvsPHI.nbinsX, templatePHIvsPHI.xmin, templatePHIvsPHI.xmax,
353  templatePHIvsPHI.nbinsY, templatePHIvsPHI.ymin, templatePHIvsPHI.ymax);
354 
355  h_L1TauEtavsTauEta_ = ibooker.book2D("L1TauEtavsTauEta",
356  "L1 Tau #eta vs PFTau #eta; PFTau #eta; L1 Tau #eta", 100, -3, 3, 100, -3, 3);
357 
358  // tau resolutions
359  h_resolutionTauET_EB_ = ibooker.book1D("resolutionTauET_EB",
360  "tau ET resolution (EB); (L1 Tau E_{T} - PFTau E_{T})/PFTau E_{T}; events", 50, -1, 1.5);
361  h_resolutionTauET_EE_ = ibooker.book1D("resolutionTauET_EE",
362  "tau ET resolution (EE); (L1 Tau E_{T} - PFTau E_{T})/PFTau E_{T}; events", 50, -1, 1.5);
363  h_resolutionTauET_EB_EE_ = ibooker.book1D("resolutionTauET_EB_EE",
364  "tau ET resolution (EB+EE); (L1 Tau E_{T} - PFTau E_{T})/PFTau E_{T}; events", 50, -1, 1.5);
365 
367  ibooker.book1D("resolutionTauPhi_EB",
368  "#phi_{tau} resolution (EB); #phi_{tau}^{L1} - #phi_{tau}^{offline}; events",
369  120, -0.3, 0.3);
371  ibooker.book1D("resolutionTauPhi_EE",
372  "tau #phi resolution (EE); #phi_{tau}^{L1} - #phi_{tau}^{offline}; events",
373  120, -0.3, 0.3);
375  ibooker.book1D("resolutionTauPhi_EB_EE",
376  "tau #phi resolution (EB+EE); #phi_{tau}^{L1} - #phi_{tau}^{offline}; events",
377  120, -0.3, 0.3);
378 
379  h_resolutionTauEta_ = ibooker.book1D("resolutionTauEta",
380  "tau #eta resolution (EB); L1 Tau #eta - PFTau #eta; events", 120, -0.3, 0.3);
381 
382  // tau turn-ons
384  std::vector<float> tauBins(tauEfficiencyBins_.begin(), tauEfficiencyBins_.end());
385  int nBins = tauBins.size() - 1;
386  float* tauBinArray = &(tauBins[0]);
387 
388  for (auto threshold : tauEfficiencyThresholds_) {
389  std::string str_threshold = std::to_string(int(threshold));
391  "efficiencyIsoTauET_EB_threshold_" + str_threshold + "_Num",
392  "iso tau efficiency (EB); PFTau E_{T} (GeV); events", nBins, tauBinArray);
394  "efficiencyIsoTauET_EE_threshold_" + str_threshold + "_Num",
395  "iso tau efficiency (EE); PFTau E_{T} (GeV); events", nBins, tauBinArray);
397  "efficiencyIsoTauET_EB_EE_threshold_" + str_threshold + "_Num",
398  "iso tau efficiency (EB+EE); PFTau E_{T} (GeV); events", nBins, tauBinArray);
399 
401  "efficiencyIsoTauET_EB_threshold_" + str_threshold + "_Den",
402  "iso tau efficiency (EB); PFTau E_{T} (GeV); events", nBins, tauBinArray);
404  "efficiencyIsoTauET_EE_threshold_" + str_threshold + "_Den",
405  "iso tau efficiency (EE); PFTau E_{T} (GeV); events", nBins, tauBinArray);
407  "efficiencyIsoTauET_EB_EE_threshold_" + str_threshold + "_Den",
408  "iso tau efficiency (EB+EE); PFTau E_{T} (GeV); events", nBins, tauBinArray);
409 
410 
411  //non iso
413  "efficiencyNonIsoTauET_EB_threshold_" + str_threshold + "_Num",
414  "inclusive tau efficiency (EB); PFTau E_{T} (GeV); events", nBins, tauBinArray);
416  "efficiencyNonIsoTauET_EE_threshold_" + str_threshold + "_Num",
417  "inclusive tau efficiency (EE); PFTau E_{T} (GeV); events", nBins, tauBinArray);
419  "efficiencyNonIsoTauET_EB_EE_threshold_" + str_threshold + "_Num",
420  "inclusive tau efficiency (EB+EE); PFTau E_{T} (GeV); events", nBins, tauBinArray);
421 
423  "efficiencyNonIsoTauET_EB_threshold_" + str_threshold + "_Den",
424  "inclusive tau efficiency (EB); PFTau E_{T} (GeV); events", nBins, tauBinArray);
426  "efficiencyNonIsoTauET_EE_threshold_" + str_threshold + "_Den",
427  "inclusive tau efficiency (EE); PFTau E_{T} (GeV); events", nBins, tauBinArray);
429  "efficiencyNonIsoTauET_EB_EE_threshold_" + str_threshold + "_Den",
430  "inclusive tau efficiency (EB+EE); PFTau E_{T} (GeV); events", nBins, tauBinArray);
431 
432  }
433 
434  ibooker.cd();
435 
436  return;
437 
438 }
439 
441 
442  reco::Vertex::Point posVtx;
443  reco::Vertex::Error errVtx;
444 
445  bool hasPrimaryVertex = false;
446 
447  if (vertex.isValid())
448  {
449  for (auto vertexIt=vertex->begin();vertexIt!=vertex->end();++vertexIt)
450  {
451  if (vertexIt->isValid() &&
452  !vertexIt->isFake())
453  {
454  posVtx = vertexIt->position();
455  errVtx = vertexIt->error();
456  hasPrimaryVertex = true;
457  break;
458  }
459  }
460  }
461 
462  if ( !hasPrimaryVertex ) {
463  posVtx = beamSpot->position();
464  errVtx(0,0) = beamSpot->BeamWidthX();
465  errVtx(1,1) = beamSpot->BeamWidthY();
466  errVtx(2,2) = beamSpot->sigmaZ();
467  }
468 
469  const reco::Vertex primaryVertex(posVtx,errVtx);
470 
471  return primaryVertex;
472 }
473 
475 
476 
477  double matchDeltaR = 9999;
478 
480 
481  for(auto trigIndexIt = m_trigIndices.begin(); trigIndexIt!=m_trigIndices.end(); ++trigIndexIt) {
482 
483  const vector<string> moduleLabels(m_hltConfig.moduleLabels(*trigIndexIt));
484  const unsigned moduleIndex = m_hltConfig.size((*trigIndexIt))-2;
485 
486  const unsigned hltFilterIndex = triggerEvent->filterIndex(InputTag(moduleLabels[moduleIndex],"",trigProcess_));
487 
488  if (hltFilterIndex < triggerEvent->sizeFilters()) {
489  const Keys triggerKeys(triggerEvent->filterKeys(hltFilterIndex));
490  const Vids triggerVids(triggerEvent->filterIds(hltFilterIndex));
491 
492  const unsigned nTriggers = triggerVids.size();
493  for (size_t iTrig = 0; iTrig < nTriggers; ++iTrig) {
494  const TriggerObject trigObject = trigObjs[triggerKeys[iTrig]];
495 
496  double dRtmp = deltaR((*muon),trigObject);
497  if (dRtmp < matchDeltaR) matchDeltaR = dRtmp;
498  }
499  }
500  }
501 
502  return (matchDeltaR < m_MaxHltTauDR);
503 
504 }
505 
507 
508  m_TauL1tPairs.clear();
509 
510  vector<l1t::Tau> l1tContainer;
511  l1tContainer.reserve(l1tCands->size()+1);
512 
513  for (auto tau = l1tCands->begin(0); tau != l1tCands->end(0); ++tau) {
514  l1tContainer.push_back(*tau);
515  }
516 
517  for (auto probeTauIt = m_ProbeTaus.begin(); probeTauIt!=m_ProbeTaus.end(); ++probeTauIt) {
518 
519  TauL1TPair pairBestCand((*probeTauIt),nullptr);
520 
521  for(auto l1tIt = l1tContainer.begin() ; l1tIt!=l1tContainer.end(); ++l1tIt) {
522 
523  TauL1TPair pairTmpCand((*probeTauIt),&(*l1tIt));
524 
525  if (pairTmpCand.dR() < m_MaxL1tTauDR && pairTmpCand.l1tPt() > pairBestCand.l1tPt())
526  pairBestCand = pairTmpCand;
527 
528  }
529 
530  m_TauL1tPairs.push_back(pairBestCand);
531 
532  }
533 
534 }
535 
537 
538  m_TightMuons.clear();
539 
540  const reco::PFMET *pfmet=nullptr;
541  pfmet=&(mets->front());
542 
543  int nb_mu=0;
544 
545  for(auto muonIt2 = muons->begin(); muonIt2!=muons->end(); ++muonIt2) {
546  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) {
547  ++nb_mu;
548  }
549  }
550  bool foundTightMu=false;
551  for(auto muonIt = muons->begin(); muonIt!=muons->end(); ++muonIt) {
552  if (!matchHlt(trigEvent,&(*muonIt))) continue;
553  float muiso=(muonIt->pfIsolationR04().sumChargedHadronPt+max(muonIt->pfIsolationR04().sumNeutralHadronEt+muonIt->pfIsolationR04().sumPhotonEt-0.5*muonIt->pfIsolationR04().sumPUPt,0.0))/muonIt->pt();
554 
555  if (muiso<0.1 && nb_mu<2 && !foundTightMu && fabs(muonIt->eta())< 2.1 && muonIt->pt()>24 && muon::isLooseMuon((*muonIt))) {
556  float mt=sqrt(pow(muonIt->pt() + pfmet->pt(), 2) - pow(muonIt->px() + pfmet->px(),2) - pow(muonIt->py() + pfmet->py(), 2));
557  if (mt<30){
558  m_TightMuons.push_back(&(*muonIt));
559  foundTightMu=true;
560  }
561  }
562  }
563 }
564 
566 
567  m_ProbeTaus.clear();
568 
570  iEvent.getByToken(AntiMuInputTag_, antimu);
571  if(!antimu.isValid())
572  {
573  edm::LogWarning("L1TTauOffline") << "invalid collection: reco::PFTauDiscriminator " << std::endl;
574  return;
575  }
576 
579  if(!dmf.isValid())
580  {
581  edm::LogWarning("L1TTauOffline") << "invalid collection: reco::PFTauDiscriminator " << std::endl;
582  return;
583  }
584 
586  iEvent.getByToken(AntiEleInputTag_, antiele);
587  if(!antiele.isValid())
588  {
589  edm::LogWarning("L1TTauOffline") << "invalid collection: reco::PFTauDiscriminator " << std::endl;
590  return;
591  }
592 
594  iEvent.getByToken(comb3TInputTag_, comb3T);
595  if(!comb3T.isValid())
596  {
597  edm::LogWarning("L1TTauOffline") << "invalid collection: reco::PFTauDiscriminator " << std::endl;
598  return;
599  }
600 
601  if (!m_TightMuons.empty()){
602  TLorentzVector mymu;
603  mymu.SetPtEtaPhiE(m_TightMuons[0]->pt(),m_TightMuons[0]->eta(),m_TightMuons[0]->phi(),m_TightMuons[0]->energy());
604  int iTau=0;
605  for(auto tauIt = taus->begin(); tauIt!=taus->end(); ++tauIt,++iTau) {
606  reco::PFTauRef tauCandidate(taus, iTau);
607  TLorentzVector mytau;
608  mytau.SetPtEtaPhiE(tauIt->pt(),tauIt->eta(),tauIt->phi(),tauIt->energy());
609 
610  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) {
611  if (mymu.DeltaR(mytau)>0.5 && (mymu+mytau).M()>40 && (mymu+mytau).M()<80 && m_TightMuons[0]->charge()*tauIt->charge()<0){
612  m_ProbeTaus.push_back(&(*tauIt));
613  }
614  }
615  }
616  }
617 }
618 
619 
620 //define this as a plug-in
unsigned int size() const
number of trigger paths in trigger table
std::vector< float > binsX
const_iterator end(int bx) const
edm::EDGetTokenT< reco::VertexCollection > VtxInputTag_
std::vector< std::string > triggerPath_
void endRun(edm::Run const &run, edm::EventSetup const &eSetup) override
double l1tPt() const
Definition: L1TTauOffline.h:66
std::vector< PFTau > PFTauCollection
collection of PFTau objects
Definition: PFTauFwd.h:9
unsigned size(int bx) const
~L1TTauOffline() override
The single EDProduct to be saved for each event (AOD case)
Definition: TriggerEvent.h:25
double m_phi_bar
Definition: L1TTauOffline.h:77
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:519
std::vector< TauL1TPair > m_TauL1tPairs
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
MonitorElement * h_L1TauPhivsTauPhi_EB_
void bookTauHistos(DQMStore::IBooker &)
ParameterSet const & getParameterSet(ParameterSetID const &id)
double px() const final
x coordinate of momentum vector
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
double pt() const final
transverse momentum
static const std::map< std::string, unsigned int > PlotConfigNames
Definition: L1TTauOffline.h:95
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:11
const Point & position() const
position
Definition: Vertex.h:109
void endLuminosityBlock(edm::LuminosityBlock const &lumi, edm::EventSetup const &eSetup) override
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
void analyze(edm::Event const &e, edm::EventSetup const &eSetup) override
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
T sqrt(T t)
Definition: SSEVec.h:18
const l1t::Tau * m_regTau
Definition: L1TTauOffline.h:74
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:118
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_
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:76
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
HistDefinitions readHistDefinitions(const edm::ParameterSet &ps, const std::map< std::string, unsigned int > &mapping)
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:69
edm::EDGetTokenT< reco::MuonCollection > MuonInputTag_
std::string trigProcess_
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:279
std::vector< float > binsY
edm::EDGetTokenT< reco::PFTauDiscriminator > DecayModeFindingInputTag_
MonitorElement * book2D(Args &&...args)
Definition: DQMStore.h:136
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:59
double sigmaZ() const
sigma z
Definition: BeamSpot.h:80
double BeamWidthY() const
beam width Y
Definition: BeamSpot.h:88
double py() const final
y coordinate of momentum vector
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:54
edm::EDGetTokenT< trigger::TriggerEvent > triggerEvent_
edm::EDGetTokenT< reco::PFTauDiscriminator > AntiEleInputTag_
fixed size matrix
HLT enums.
static std::atomic< unsigned int > counter
bool matchHlt(edm::Handle< trigger::TriggerEvent > const &triggerEvent, const reco::Muon *muon)
dqmoffline::l1t::HistDefinitions histDefinitions_
const Point & position() const
position
Definition: BeamSpot.h:62
edm::EDGetTokenT< reco::PFTauCollection > theTauCollection_
void beginLuminosityBlock(edm::LuminosityBlock const &lumi, edm::EventSetup const &eSetup) override
MonitorElement * h_L1TauETvsTauET_EB_EE_
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_
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:43
double m_phi_end
Definition: L1TTauOffline.h:78
Collection of PF MET.