ATLAS Offline Software
Loading...
Searching...
No Matches
TauSelectionCuts.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
5
6// local include(s)
9
10// framework include(s)
13
14// EDM include(s)
16
17using namespace TauAnalysisTools;
18
19//______________________________________________________________________________
21 : m_sName(sName)
22 , m_hHistCutPre(nullptr)
23 , m_hHistCut(nullptr)
24 , m_tTST(tTST)
25{
26}
27
28//______________________________________________________________________________
30{
31 // FIXME: could use unique_ptr
32 delete m_hHistCutPre;
33 delete m_hHistCut;
34}
35
36//______________________________________________________________________________
38{
39 m_hHistCutPre->Write();
40 m_hHistCut->Write();
41}
42
43//______________________________________________________________________________
44TH1F* TauSelectionCut::CreateControlPlot(const char* sName, const char* sTitle, int iBins, double dXLow, double dXUp)
45{
46 if (m_tTST->m_bCreateControlPlots)
47 {
48 TH1F* hHist = new TH1F(sName, sTitle, iBins, dXLow, dXUp);
49 hHist->SetDirectory(0);
50 return hHist;
51 }
52
53 return nullptr;
54}
55
56//______________________________________________________________________________
61
62//______________________________________________________________________________
67
68
69//______________________________________________________________________________
70void TauSelectionCut::setProperty(const std::string& name, const std::string& value)
71{
72 std::map<std::string, std::string&>::iterator it = m_mProperties.find(name);
73 if(it == m_mProperties.end() )
74 throw std::runtime_error (("Undeclared property: " + name + "\n").c_str());
75 it->second = value;
76}
77
78//______________________________________________________________________________
79void TauSelectionCut::declareProperty(const std::string& name, std::string& loc)
80{
81 std::pair<std::string, std::string&> p(name, loc);
82 m_mProperties.insert(p);
83}
84
85//______________________________________________________________________________
86std::string TauSelectionCut::getProperty(const std::string& name)
87{
88 std::map<std::string, std::string&>::iterator it = m_mProperties.find(name);
89 if(it == m_mProperties.end() )
90 throw std::runtime_error (("Undeclared property: " + name + "\n").c_str());
91
92 return it->second;
93}
94
95
96//_______________________________SelectionCutPt_________________________________
97//______________________________________________________________________________
99 : TauSelectionCut("CutPt", tTST)
100{
101 m_hHistCutPre = CreateControlPlot("hPt_pre","Pt_pre;#tau-p_{T} [GeV]; events",100,0,100);
102 m_hHistCut = CreateControlPlot("hPt_cut","Pt_cut;#tau-p_{T} [GeV]; events",100,0,100);
103}
104
105//______________________________________________________________________________
106void TauSelectionCutPt::fillHistogram(const xAOD::TauJet& xTau, TH1F& hHist) const
107{
108 hHist.Fill(xTau.pt()/1000.);
109}
110
111//______________________________________________________________________________
113{
114 info.addCut( "Pt",
115 "Selection of taus according to their transverse momentum" );
116}
117//______________________________________________________________________________
119 asg::AcceptData& acceptData)
120{
121 // save tau pt in GeV
122 double pt = xTau.pt() / 1000.;
123 // in case of only one entry in vector, run for lower limits
124 if (m_tTST->m_vPtRegion.size() == 1)
125 {
126 if ( pt >= m_tTST->m_vPtRegion.at(0) )
127 {
128 acceptData.setCutResult( "Pt", true );
129 return true;
130 }
131 }
132 unsigned int iNumPtRegion = m_tTST->m_vPtRegion.size()/2;
133 for( unsigned int iPtRegion = 0; iPtRegion < iNumPtRegion; iPtRegion++ )
134 {
135 if ( pt >= m_tTST->m_vPtRegion.at(iPtRegion*2) and pt <= m_tTST->m_vPtRegion.at(iPtRegion*2+1))
136 {
137 acceptData.setCutResult( "Pt", true );
138 return true;
139 }
140 }
141 m_tTST->msg() << MSG::VERBOSE << "Tau failed pt requirement, tau pt [GeV]: " << pt << endmsg;
142 return false;
143}
144
145//_____________________________SelectionCutAbsEta_______________________________
146//______________________________________________________________________________
148 : TauSelectionCut("CutAbsEta", tTST)
149{
150 m_hHistCutPre = CreateControlPlot("hEta_pre","Eta_pre;#tau-#eta; events",100,-3,3);
151 m_hHistCut = CreateControlPlot("hEta_cut","Eta_cut;#tau-#eta; events",100,-3,3);
152}
153
154//______________________________________________________________________________
155void TauSelectionCutAbsEta::fillHistogram(const xAOD::TauJet& xTau, TH1F& hHist) const
156{
157 hHist.Fill(xTau.eta());
158}
159
160//______________________________________________________________________________
162{
163 info.addCut( "AbsEta",
164 "Selection of taus according to their absolute pseudorapidity" );
165}
166//______________________________________________________________________________
168 asg::AcceptData& acceptData)
169{
170 // check regions of eta, if tau is in one region then return true; false otherwise
171 unsigned int iNumEtaRegion = m_tTST->m_vAbsEtaRegion.size()/2;
172 for( unsigned int iEtaRegion = 0; iEtaRegion < iNumEtaRegion; iEtaRegion++ )
173 {
174 if ( std::abs( xTau.eta() ) >= m_tTST->m_vAbsEtaRegion.at(iEtaRegion*2) and std::abs( xTau.eta() ) <= m_tTST->m_vAbsEtaRegion.at(iEtaRegion*2+1))
175 {
176 acceptData.setCutResult( "AbsEta", true );
177 return true;
178 }
179 }
180 m_tTST->msg() << MSG::VERBOSE << "Tau failed eta requirement, tau eta: " << xTau.eta() << endmsg;
181 return false;
182}
183
184//____________________________SelectionCutAbsCharge_____________________________
185//______________________________________________________________________________
187 : TauSelectionCut("CutAbsCharge", tTST)
188{
189 m_hHistCutPre = CreateControlPlot("hCharge_pre","Charge_pre;charge; events",7,-3.5,3.5);
190 m_hHistCut = CreateControlPlot("hCharge_cut","Charge_cut;charge; events",7,-3.5,3.5);
191}
192
193//______________________________________________________________________________
194void TauSelectionCutAbsCharge::fillHistogram(const xAOD::TauJet& xTau, TH1F& hHist) const
195{
196 hHist.Fill(xTau.charge());
197}
198
199//______________________________________________________________________________
201{
202 info.addCut( "AbsCharge",
203 "Selection of taus according to their absolute charge" );
204}
205//______________________________________________________________________________
207 asg::AcceptData& acceptData)
208{
209 // check charge, if tau has one of the charges requiered then return true; false otherwise
210 for( unsigned int iCharge = 0; iCharge < m_tTST->m_vAbsCharges.size(); iCharge++ )
211 {
212 if ( std::abs( xTau.charge() ) == m_tTST->m_vAbsCharges.at(iCharge) )
213 {
214 acceptData.setCutResult( "AbsCharge", true );
215 return true;
216 }
217 }
218 m_tTST->msg() << MSG::VERBOSE << "Tau failed charge requirement, tau charge: " << xTau.charge() << endmsg;
219 return false;
220}
221
222//_____________________________SelectionCutNTracks______________________________
223//______________________________________________________________________________
225 : TauSelectionCut("CutNTrack", tTST)
226{
227 m_hHistCutPre = CreateControlPlot("hNTrack_pre","NTrack_pre;number of tracks; events",22,-1.5,20.5);
228 m_hHistCut = CreateControlPlot("hNTrack_cut","NTrack_cut;number of tracks; events",22,-1.5,20.5);
229}
230
231//______________________________________________________________________________
232void TauSelectionCutNTracks::fillHistogram(const xAOD::TauJet& xTau, TH1F& hHist) const
233{
234 hHist.Fill(xTau.nTracks());
235}
236
237//______________________________________________________________________________
239{
240 info.addCut( "NTrack",
241 "Selection of taus according to their number of associated tracks" );
242}
243//______________________________________________________________________________
245 asg::AcceptData& acceptData)
246{
247 // check track multiplicity, if tau has one of the number of tracks requiered then return true; false otherwise
248 for( size_t iNumTrack = 0; iNumTrack < m_tTST->m_vNTracks.size(); iNumTrack++ )
249 {
250 if ( static_cast<unsigned> (xTau.nTracks()) == m_tTST->m_vNTracks.at(iNumTrack) )
251 {
252 acceptData.setCutResult( "NTrack", true );
253 return true;
254 }
255 }
256 m_tTST->msg() << MSG::VERBOSE << "Tau failed nTracks requirement, tau number of tracks: " << xTau.nTracks() << endmsg;
257 return false;
258}
259
260//___________________________SelectionCutRNNJetScoreSigTrans____________________________
261//______________________________________________________________________________
263 : TauSelectionCut("CutJetRNNScoreSigTrans", tTST)
264{
265 m_hHistCutPre = CreateControlPlot("hJetRNNSigTrans_pre","JetRNNSigTrans_pre;RNNJetSigTransScore; events",100,0,1);
266 m_hHistCut = CreateControlPlot("hJetRNNSigTrans_cut","JetRNNSigTrans_cut;RNNJetSigTransScore; events",100,0,1);
267}
268//______________________________________________________________________________
273//______________________________________________________________________________
275{
276 info.addCut( "JetRNNScoreSigTrans",
277 "Selection of taus according to their JetRNNScore" );
278}
279//______________________________________________________________________________
281 asg::AcceptData& acceptData)
282{
283 // check JetRNNscore, if tau has a JetRNN score in one of the regions requiered then return true; false otherwise
284 double dJetRNNScoreSigTrans = xTau.discriminant(xAOD::TauJetParameters::RNNJetScoreSigTrans);
285 unsigned int iNumJetRNNSigTransRegion = m_tTST->m_vJetRNNSigTransRegion.size()/2;
286 for( unsigned int iJetRNNSigTransRegion = 0; iJetRNNSigTransRegion < iNumJetRNNSigTransRegion; iJetRNNSigTransRegion++ )
287 {
288 if ( dJetRNNScoreSigTrans >= m_tTST->m_vJetRNNSigTransRegion.at(iJetRNNSigTransRegion*2) and dJetRNNScoreSigTrans <= m_tTST->m_vJetRNNSigTransRegion.at(iJetRNNSigTransRegion*2+1))
289 {
290 acceptData.setCutResult( "JetRNNScoreSigTrans", true );
291 return true;
292 }
293 }
294 m_tTST->msg() << MSG::VERBOSE << "Tau failed JetRNNScore requirement, tau JetRNNScore: " << dJetRNNScoreSigTrans << endmsg;
295 return false;
296}
297
298//___________________________SelectionCutGNTauScoreSigTrans____________________________
299//______________________________________________________________________________
301 : TauSelectionCut("CutGNTauScoreSigTrans", tTST)
302{
303 m_hHistCutPre = CreateControlPlot("hGNTauSigTrans_pre","GNTauSigTrans_pre;GNTauSigTransScore; events",100,0,1);
304 m_hHistCut = CreateControlPlot("hGNTauSigTrans_cut","GNTauSigTrans_cut;GNTauSigTransScore; events",100,0,1);
305}
306//______________________________________________________________________________
308{
309 static const SG::ConstAccessor<float> acc_GNTauScoreSigTrans("GNTauScoreSigTrans_v0prune");
310 hHist.Fill(acc_GNTauScoreSigTrans(xTau));
311}
312//______________________________________________________________________________
314{
315 info.addCut( "GNTauScoreSigTrans",
316 "Selection of taus according to their GNTauScore" );
317}
318//______________________________________________________________________________
320 asg::AcceptData& acceptData)
321{
322 // check GNTau score, if tau has a GNTau score in one of the regions requiered then return true; false otherwise
323 static const SG::ConstAccessor<float> acc ("GNTauScoreSigTrans_v0prune");
324 float dGNTauScoreSigTrans = acc(xTau);
325 unsigned int iNumGNTauSigTransRegion = m_tTST->m_vGNTauSigTransRegion.size()/2;
326 for( unsigned int iGNTauSigTransRegion = 0; iGNTauSigTransRegion < iNumGNTauSigTransRegion; iGNTauSigTransRegion++ )
327 {
328 if ( dGNTauScoreSigTrans >= m_tTST->m_vGNTauSigTransRegion.at(iGNTauSigTransRegion*2) and dGNTauScoreSigTrans <= m_tTST->m_vGNTauSigTransRegion.at(iGNTauSigTransRegion*2+1))
329 {
330 acceptData.setCutResult( "GNTauScoreSigTrans", true );
331 return true;
332 }
333 }
334 m_tTST->msg() << MSG::VERBOSE << "Tau failed GNTauScore requirement, tau GNTauScore: " << dGNTauScoreSigTrans << endmsg;
335 return false;
336}
337
338//_____________________________SelectionCutJetIDWP______________________________
339//______________________________________________________________________________
341 : TauSelectionCut("CutJetIDWP", tTST)
342{
343 m_hHistCutPre = CreateControlPlot("hJetIDWP_pre","JetIDWP_pre;; events",8,-.5,7.5);
344 m_hHistCut = CreateControlPlot("hJetIDWP_cut","JetIDWP_cut;; events",8,-.5,7.5);
345 // only proceed if histograms are defined
346 if (!m_hHistCutPre or !m_hHistCut)
347 return;
348
349 m_hHistCutPre->GetXaxis()->SetBinLabel(1,"!VeryLoose");
350 m_hHistCutPre->GetXaxis()->SetBinLabel(2,"VeryLoose");
351 m_hHistCutPre->GetXaxis()->SetBinLabel(3,"!Loose");
352 m_hHistCutPre->GetXaxis()->SetBinLabel(4,"Loose");
353 m_hHistCutPre->GetXaxis()->SetBinLabel(5,"!Medium");
354 m_hHistCutPre->GetXaxis()->SetBinLabel(6,"Medium");
355 m_hHistCutPre->GetXaxis()->SetBinLabel(7,"!Tight");
356 m_hHistCutPre->GetXaxis()->SetBinLabel(8,"Tight");
357 m_hHistCut->GetXaxis()->SetBinLabel(1,"!VeryLoose");
358 m_hHistCut->GetXaxis()->SetBinLabel(2,"VeryLoose");
359 m_hHistCut->GetXaxis()->SetBinLabel(3,"!Loose");
360 m_hHistCut->GetXaxis()->SetBinLabel(4,"Loose");
361 m_hHistCut->GetXaxis()->SetBinLabel(5,"!Medium");
362 m_hHistCut->GetXaxis()->SetBinLabel(6,"Medium");
363 m_hHistCut->GetXaxis()->SetBinLabel(7,"!Tight");
364 m_hHistCut->GetXaxis()->SetBinLabel(8,"Tight");
365}
366
367//______________________________________________________________________________
368void TauSelectionCutJetIDWP::fillHistogram(const xAOD::TauJet& xTau, TH1F& hHist) const
369{
370 if(m_tTST->m_useGNTau){
371 static const SG::ConstAccessor<char> acc_gnTauVeryLoose("GNTauVL_v0prune");
372 static const SG::ConstAccessor<char> acc_gnTauLoose("GNTauL_v0prune");
373 static const SG::ConstAccessor<char> acc_gnTauMedium("GNTauM_v0prune");
374 static const SG::ConstAccessor<char> acc_gnTauTight("GNTauT_v0prune");
375 hHist.Fill(acc_gnTauVeryLoose(xTau));
376 hHist.Fill(acc_gnTauLoose(xTau)+2);
377 hHist.Fill(acc_gnTauMedium(xTau)+4);
378 hHist.Fill(acc_gnTauTight(xTau)+6);
379 } else {
384 }
385}
386
387//______________________________________________________________________________
389{
390 info.addCut( "JetIDWP",
391 "Selection of taus according to their JetIDScore" );
392}
393//______________________________________________________________________________
395 asg::AcceptData& acceptData)
396{
397 // check Jet ID working point, if tau passes JetID working point then return true; false otherwise
398 bool bPass = false;
399 switch (m_tTST->m_iJetIDWP)
400 {
401 case JETIDNONE:
402 bPass = true;
403 break;
406 break;
407 case JETIDRNNLOOSE:
408 if (xTau.isTau(xAOD::TauJetParameters::JetRNNSigLoose)) bPass = true;
409 break;
410 case JETIDRNNMEDIUM:
411 if (xTau.isTau(xAOD::TauJetParameters::JetRNNSigMedium)) bPass = true;
412 break;
413 case JETIDRNNTIGHT:
414 if (xTau.isTau(xAOD::TauJetParameters::JetRNNSigTight)) bPass = true;
415 break;
417 static const SG::ConstAccessor<char> acc_gnTauVeryLoose("GNTauVL_v0prune");
418 if (!acc_gnTauVeryLoose.isAvailable(xTau)) m_tTST->msg() << MSG::WARNING << "GnTau VeryLoose WP not available" << endmsg;
419 else bPass = acc_gnTauVeryLoose(xTau);
420 break;
421 case JETIDGNTAULOOSE:
422 static const SG::ConstAccessor<char> acc_gnTauLoose("GNTauL_v0prune");
423 if (!acc_gnTauLoose.isAvailable(xTau)) m_tTST->msg() << MSG::WARNING << "GnTau Loose WP not available" << endmsg;
424 else bPass = acc_gnTauLoose(xTau);
425 break;
426 case JETIDGNTAUMEDIUM:
427 static const SG::ConstAccessor<char> acc_gnTauMedium("GNTauM_v0prune");
428 if (!acc_gnTauMedium.isAvailable(xTau)) m_tTST->msg() << MSG::WARNING << "GnTau Medium WP not available" << endmsg;
429 else bPass = acc_gnTauMedium(xTau);
430 break;
431 case JETIDGNTAUTIGHT:
432 static const SG::ConstAccessor<char> acc_gnTauTight("GNTauT_v0prune");
433 if (!acc_gnTauTight.isAvailable(xTau)) m_tTST->msg() << MSG::WARNING << "GnTau Tight WP not available" << endmsg;
434 else bPass = acc_gnTauTight(xTau);
435 break;
436 default:
437 m_tTST->msg() << MSG::WARNING << "The jet ID working point with the enum " << m_tTST->m_iJetIDWP << " is not available" << endmsg;
438 break;
439 }
440 if (bPass)
441 {
442 acceptData.setCutResult( "JetIDWP", true );
443 return true;
444 }
445 m_tTST->msg() << MSG::VERBOSE << "Tau failed JetIDWP requirement, tau transformed RNN score: " << xTau.discriminant(xAOD::TauJetParameters::RNNJetScoreSigTrans) << endmsg;
446 return false;
447}
448
449//___________________________SelectionCutRNNEleScore____________________________
450//______________________________________________________________________________
452 : TauSelectionCut("CutEleRNNScoreSigTrans", tTST)
453{
454 m_hHistCutPre = CreateControlPlot("hEleRNNSigTrans_pre","EleRNNSigTrans_pre;RNNEleScoreSigTrans; events",100,0,1);
455 m_hHistCut = CreateControlPlot("hEleRNNSigTrans_cut","EleRNNSigTrans_cut;RNNEleScoreSigTrans; events",100,0,1);
456}
457
458//______________________________________________________________________________
460{
461 SG::ConstAccessor<float> acc ("RNNEleScoreSigTrans_v"+std::to_string(m_tTST->m_iEleIDVersion));
462 if(m_tTST->m_iEleIDVersion!=0){
463 hHist.Fill(acc(xTau));
464 } else {
466 }
467}
468
469//______________________________________________________________________________
471{
472 info.addCut( "EleRNNScoreSigTrans",
473 "Selection of taus according to their EleRNNScoreSigTrans" );
474}
475//______________________________________________________________________________
477 asg::AcceptData& acceptData)
478{
479 SG::ConstAccessor<float> acc ("RNNEleScoreSigTrans_v"+std::to_string(m_tTST->m_iEleIDVersion));
480 float fEleRNNScoreSigTrans = 0.;
481 if(m_tTST->m_iEleIDVersion!=0){
482 fEleRNNScoreSigTrans = acc(xTau);
483 }else{
485 }
486 unsigned int iNumEleRNNSigTransRegion = m_tTST->m_vEleRNNSigTransRegion.size()/2;
487 for( unsigned int iEleRNNSigTransRegion = 0; iEleRNNSigTransRegion < iNumEleRNNSigTransRegion; iEleRNNSigTransRegion++ )
488 {
489 if ( fEleRNNScoreSigTrans >= m_tTST->m_vEleRNNSigTransRegion.at(iEleRNNSigTransRegion*2) and fEleRNNScoreSigTrans <= m_tTST->m_vEleRNNSigTransRegion.at(iEleRNNSigTransRegion*2+1))
490 {
491 acceptData.setCutResult("EleRNNScoreSigTrans", true );
492 return true;
493 }
494 }
495 m_tTST->msg() << MSG::VERBOSE << "Tau failed EleRNNScoreSigTrans requirement, tau EleRNNScoreSigTrans: " << fEleRNNScoreSigTrans << endmsg;
496 return false;
497}
498
499//____________________________SelectionCutEleIDWP______________________________
500//______________________________________________________________________________
502 : TauSelectionCut("CutEleIDWP", tTST)
503{
504 m_hHistCutPre = CreateControlPlot("hEleIDWP_pre","EleIDWP_pre;; events",6,-.5,5.5);
505 m_hHistCut = CreateControlPlot("hEleIDWP_cut","EleIDWP_cut;; events",6,-.5,5.5);
506 // only proceed if histograms are defined
507 if (!m_hHistCutPre or !m_hHistCut)
508 return;
509 m_hHistCutPre->GetXaxis()->SetBinLabel(1,"!Loose");
510 m_hHistCutPre->GetXaxis()->SetBinLabel(2,"Loose");
511 m_hHistCutPre->GetXaxis()->SetBinLabel(3,"!Medium");
512 m_hHistCutPre->GetXaxis()->SetBinLabel(4,"Medium");
513 m_hHistCutPre->GetXaxis()->SetBinLabel(5,"!Tight");
514 m_hHistCutPre->GetXaxis()->SetBinLabel(6,"Tight");
515 m_hHistCut->GetXaxis()->SetBinLabel(1,"!Loose");
516 m_hHistCut->GetXaxis()->SetBinLabel(2,"Loose");
517 m_hHistCut->GetXaxis()->SetBinLabel(3,"!Medium");
518 m_hHistCut->GetXaxis()->SetBinLabel(4,"Medium");
519 m_hHistCut->GetXaxis()->SetBinLabel(5,"!Tight");
520 m_hHistCut->GetXaxis()->SetBinLabel(6,"Tight");
521}
522
523//___________________________________________________________________________
524void TauSelectionCutEleIDWP::fillHistogram(const xAOD::TauJet& xTau, TH1F& hHist) const
525{
526 if (m_tTST->m_iEleIDVersion!=0){
527 SG::ConstAccessor<char> accLoose ("EleRNNLoose_v"+std::to_string(m_tTST->m_iEleIDVersion));
528 SG::ConstAccessor<char> accMedium ("EleRNNMedium_v"+std::to_string(m_tTST->m_iEleIDVersion));
529 SG::ConstAccessor<char> accTight ("EleRNNTight_v"+std::to_string(m_tTST->m_iEleIDVersion));
530 hHist.Fill((accLoose(xTau) == 1));
531 hHist.Fill((accMedium(xTau) == 1)+2);
532 hHist.Fill((accTight(xTau) == 1)+4);
533 }
534 else{
537 hHist.Fill(xTau.isTau(xAOD::TauJetParameters::EleRNNTight)+4);
538 }
539}
540
541//______________________________________________________________________________
543{
544 info.addCut( "EleIDWP",
545 "Selection of taus according to their EleID working point" );
546}
547//______________________________________________________________________________
549 asg::AcceptData& acceptData)
550{
551 // check EleID WP, if tau passes EleID working point then return true; false otherwise
552 bool bPass = false;
553 switch (m_tTST->m_iEleIDWP)
554 {
555 case ELEIDNONE:
556 bPass = true;
557 break;
559 bPass = true;
560 break;
561 case ELEIDRNNLOOSE:
562 if (m_tTST->m_iEleIDVersion!=0){
563 SG::ConstAccessor<char> accLoose ("EleRNNLoose_v"+std::to_string(m_tTST->m_iEleIDVersion));
564 if (accLoose(xTau) == 1)bPass = true;
565 }
566 else if (xTau.isTau(xAOD::TauJetParameters::EleRNNLoose)) bPass = true;
567 break;
568 case ELEIDRNNMEDIUM:
569 if (m_tTST->m_iEleIDVersion!=0){
570 SG::ConstAccessor<char> accMedium ("EleRNNMedium_v"+std::to_string(m_tTST->m_iEleIDVersion));
571 if (accMedium(xTau) == 1)bPass = true;
572 }
573 else if (xTau.isTau(xAOD::TauJetParameters::EleRNNMedium)) bPass = true;
574 break;
575 case ELEIDRNNTIGHT:
576 if (m_tTST->m_iEleIDVersion!=0){
577 SG::ConstAccessor<char> accTight ("EleRNNTight_v"+std::to_string(m_tTST->m_iEleIDVersion));
578 if (accTight(xTau) == 1)bPass = true;
579 }
580 else if (xTau.isTau(xAOD::TauJetParameters::EleRNNTight)) bPass = true;
581 break;
582 default:
583 m_tTST->msg() << MSG::WARNING << "The electron ID working point with the enum " << m_tTST->m_iEleIDWP << " is not available" << endmsg;
584 break;
585 }
586
587 // apply eVeto cut only for 1 prong tau
588 if( xTau.nTracks() != 1){
589 bPass = true;
590 }
591
592 if (bPass)
593 {
594 acceptData.setCutResult( "EleIDWP", true );
595 return true;
596 }
597 m_tTST->msg() << MSG::VERBOSE << "Tau failed EleID WP requirement" << endmsg;
598 return false;
599}
600
601//added by Li-Gang Xia < ligang.xia@cern.ch >
602//____________________________SelectionCutMuonOLR______________________________
603//______________________________________________________________________________
605 : TauSelectionCut("CutMuonOLR", tTST)
606 , m_bTauMuonOLR(true)
607{
608 m_hHistCutPre = CreateControlPlot("hMuonOLR_pre","MuonOLR_pre;; events",2,-.5,1.5);
609 m_hHistCut = CreateControlPlot("hMuonOLR_cut","MuonOLR_cut;; events",2,-.5,1.5);
610 // only proceed if histograms are defined
611 if (!m_hHistCutPre or !m_hHistCut)
612 return;
613 m_hHistCutPre->GetXaxis()->SetBinLabel(1,"!MuonOLR");
614 m_hHistCutPre->GetXaxis()->SetBinLabel(2,"MuonOLR");
615 m_hHistCut->GetXaxis()->SetBinLabel(1,"!MuonOLR");
616 m_hHistCut->GetXaxis()->SetBinLabel(2,"MuonOLR");
617}
618
619//______________________________________________________________________________
620void TauSelectionCutMuonOLR::fillHistogram(const xAOD::TauJet& /*xTau*/, TH1F& hHist) const
621{
622 hHist.Fill(m_bTauMuonOLR);
623}
624
625//______________________________________________________________________________
627{
628 info.addCut( "MuonOLR",
629 "Selection of taus according to their MuonOLR" );
630}
631//______________________________________________________________________________
633 asg::AcceptData& acceptData)
634{
635 if (!m_tTST->m_bMuonOLR)
636 {
637 acceptData.setCutResult( "MuonOLR", true );
638 return true;
639 }
640
641 // MuonOLR : removing tau overlapped with muon satisfying pt>2GeV and not calo-tagged
642 m_bTauMuonOLR = true;
643
644 static const SG::ConstAccessor<char> acc_taumuonolr ("passTATTauMuonOLR");
645 if ( acc_taumuonolr.isAvailable(xTau) ) {
646 m_bTauMuonOLR = static_cast<bool>(acc_taumuonolr(xTau));
647 } else {
648 // fallback to manual calculation
649 SG::ReadHandle<xAOD::MuonContainer> muonContainerHandle( m_tTST->m_muonContainerKey );
650 if (!muonContainerHandle.isValid()) {
651 m_tTST->msg() << MSG::ERROR << "Could not retrieve xAOD::MuonContainer with key " << muonContainerHandle.key() << endmsg;
652 return false;
653 }
654 const xAOD::MuonContainer* muonContainer = muonContainerHandle.cptr();
655
656 for( auto xMuon : *muonContainer )
657 {
658 if(xMuon->pt() < 2000.) continue; // pt > 2 GeV
659 if(xMuon->muonType() == xAOD::Muon::CaloTagged) continue; // not calo-tagged
660 if(xMuon->p4().DeltaR( xTau.p4() ) > 0.2 ) continue; // delta R < 0.2
661 m_bTauMuonOLR = false; // muon-tau overlapped
662 break;
663 }
664 }
665
666 if(m_bTauMuonOLR)
667 {
668 acceptData.setCutResult( "MuonOLR", true );
669 return true;
670 }
671
672 m_tTST->msg() << MSG::VERBOSE << "Tau failed MuonOLR requirement" << endmsg;
673 return false;
674}
#define endmsg
Handle class for reading from StoreGate.
Helper class to provide constant type-safe access to aux data.
xAOD::MuonContainer * muonContainer
Helper class to provide constant type-safe access to aux data.
bool isAvailable(const ELT &e) const
Test to see if this variable exists in the store.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
const_pointer_type cptr()
Dereference the pointer.
virtual const std::string & key() const override final
Return the StoreGate ID for the referenced object.
virtual void fillHistogram(const xAOD::TauJet &xTau, TH1F &hHist) const override
virtual void setAcceptInfo(asg::AcceptInfo &info) const override
virtual bool accept(const xAOD::TauJet &xTau, asg::AcceptData &accept) override
virtual void setAcceptInfo(asg::AcceptInfo &info) const override
virtual void fillHistogram(const xAOD::TauJet &xTau, TH1F &hHist) const override
virtual bool accept(const xAOD::TauJet &xTau, asg::AcceptData &accept) override
virtual void fillHistogram(const xAOD::TauJet &xTau, TH1F &hHist) const override
virtual void setAcceptInfo(asg::AcceptInfo &info) const override
virtual bool accept(const xAOD::TauJet &xTau, asg::AcceptData &accept) override
virtual bool accept(const xAOD::TauJet &xTau, asg::AcceptData &accept) override
virtual void setAcceptInfo(asg::AcceptInfo &info) const override
virtual void fillHistogram(const xAOD::TauJet &xTau, TH1F &hHist) const override
virtual void setAcceptInfo(asg::AcceptInfo &info) const override
virtual void fillHistogram(const xAOD::TauJet &xTau, TH1F &hHist) const override
virtual bool accept(const xAOD::TauJet &xTau, asg::AcceptData &accept) override
virtual bool accept(const xAOD::TauJet &xTau, asg::AcceptData &accept) override
virtual void fillHistogram(const xAOD::TauJet &xTau, TH1F &hHist) const override
virtual void setAcceptInfo(asg::AcceptInfo &info) const override
virtual void fillHistogram(const xAOD::TauJet &xTau, TH1F &hHist) const override
virtual void setAcceptInfo(asg::AcceptInfo &info) const override
virtual bool accept(const xAOD::TauJet &xTau, asg::AcceptData &accept) override
TauSelectionCutPt(TauSelectionTool *tTST)
virtual void fillHistogram(const xAOD::TauJet &xTau, TH1F &hHist) const override
virtual bool accept(const xAOD::TauJet &xTau, asg::AcceptData &accept) override
virtual void setAcceptInfo(asg::AcceptInfo &info) const override
virtual bool accept(const xAOD::TauJet &xTau, asg::AcceptData &accept) override
virtual void setAcceptInfo(asg::AcceptInfo &info) const override
virtual void fillHistogram(const xAOD::TauJet &xTau, TH1F &hHist) const override
virtual void fillHistogram(const xAOD::TauJet &xTau, TH1F &hHist) const override
virtual bool accept(const xAOD::TauJet &xTau, asg::AcceptData &accept) override
virtual void setAcceptInfo(asg::AcceptInfo &info) const override
virtual void fillHistogram(const xAOD::TauJet &xTau, TH1F &hHist) const =0
void fillHistogramCutPre(const xAOD::TauJet &xTau)
void declareProperty(const std::string &name, std::string &loc)
void setProperty(const std::string &name, const std::string &value)
std::string getProperty(const std::string &name)
void fillHistogramCut(const xAOD::TauJet &xTau)
TauSelectionCut(const std::string &sName, TauAnalysisTools::TauSelectionTool *tTST)
TH1F * CreateControlPlot(const char *sName, const char *sTitle, int iBins, double dXLow, double dXUp)
std::map< std::string, std::string & > m_mProperties
void setCutResult(const std::string &cutName, bool cutResult)
Set the result of a cut, based on the cut name (safer)
Definition AcceptData.h:134
float charge() const
virtual FourMom_t p4() const
The full 4-momentum of the particle.
Definition TauJet_v3.cxx:96
virtual double pt() const
The transverse momentum ( ) of the particle.
double discriminant(TauJetParameters::TauID discID) const
Get value of discriminant.
bool isTau(TauJetParameters::IsTauFlag flag) const
Get Flag for tau acceptance based on predefined arbitrary criteria.
virtual double eta() const
The pseudorapidity ( ) of the particle.
size_t nTracks(TauJetParameters::TauTrackFlag flag=TauJetParameters::TauTrackFlag::classifiedCharged) const
@ RNNEleScoreSigTrans
RNN score which is signal transformed/flattened.
Definition TauDefs.h:96
@ RNNJetScoreSigTrans
RNN score which is signal transformed/flattened.
Definition TauDefs.h:92
TauJet_v3 TauJet
Definition of the current "tau version".
MuonContainer_v1 MuonContainer
Definition of the current "Muon container version".