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