ATLAS Offline Software
Loading...
Searching...
No Matches
TauAnalysisTools Namespace Reference

Classes

class  BuildTruthTaus
class  CommonDiTauEfficiencyTool
class  CommonDiTauSmearingTool
class  CommonEfficiencyTool
class  CommonSmearingTool
class  DiTauEfficiencyCorrectionsTool
class  DiTauSelectionCut
class  DiTauSelectionCutAbsCharge
class  DiTauSelectionCutAbsEta
class  DiTauSelectionCutNSubjets
class  DiTauSelectionCutOmniIDWP
class  DiTauSelectionCutOmniScore
class  DiTauSelectionCutPt
class  DiTauSelectionTool
class  DiTauSmearingTool
class  DiTauTruthMatchingTool
class  IBuildTruthTaus
class  IDiTauEfficiencyCorrectionsTool
class  IDiTauSelectionTool
 Interface for tau selector tool. More...
class  IDiTauSmearingTool
class  IDiTauTruthMatchingTool
class  ITauEfficiencyCorrectionsTool
class  ITauHFVetoTool
class  ITauSelectionTool
 Interface for tau selector tool. More...
class  ITauSmearingTool
class  ITauTruthMatchingTool
class  ITauTruthTrackMatchingTool
class  TauAnalysisToolsExampleAthena
class  TauEfficiencyCorrectionsTool
class  TauHFVetoTool
class  TauSelectionCut
class  TauSelectionCutAbsCharge
class  TauSelectionCutAbsEta
class  TauSelectionCutEleIDWP
class  TauSelectionCutGNTauScoreSigTrans
class  TauSelectionCutJetIDWP
class  TauSelectionCutMuonOLR
class  TauSelectionCutNTracks
class  TauSelectionCutPt
class  TauSelectionCutRNNEleScoreSigTrans
class  TauSelectionCutRNNJetScoreSigTrans
class  TauSelectionTool
class  TauSmearingTool
class  TauTruthMatchingTool
class  TauTruthTrackMatchingTool

Enumerations

enum  JetID {
  JETIDNONEUNCONFIGURED = 0 , JETIDNONE = 1 , JETIDBDTVERYLOOSE = 2 , JETIDBDTLOOSE = 3 ,
  JETIDBDTMEDIUM = 4 , JETIDBDTTIGHT = 5 , JETIDRNNVERYLOOSE = 6 , JETIDRNNLOOSE = 7 ,
  JETIDRNNMEDIUM = 8 , JETIDRNNTIGHT = 9 , JETIDGNTAUVERYLOOSE = 10 , JETIDGNTAULOOSE = 11 ,
  JETIDGNTAUMEDIUM = 12 , JETIDGNTAUTIGHT = 13
}
enum  OmniID {
  OMNIIDNONE = 0 , OMNIIDVERYLOOSE = 1 , OMNIIDLOOSE = 2 , OMNIIDMEDIUM = 3 ,
  OMNIIDTIGHT = 4
}
enum  EleID {
  ELEIDNONEUNCONFIGURED = 0 , ELEIDNONE = 1 , ELEIDRNNLOOSE = 2 , ELEIDRNNMEDIUM = 3 ,
  ELEIDRNNTIGHT = 4
}
enum  SelectionCuts {
  NoCut = 0 , CutPt = 1 , CutAbsEta = 1<<1 , CutPhi = 1<<2 ,
  CutNTrack = 1<<3 , CutAbsCharge = 1<<4 , CutJetIDWP = 1<<5 , CutEleRNNScoreSigTrans = 1<<6 ,
  CutEleIDWP = 1<<7 , CutMuonOLR = 1<<8 , CutJetRNNScoreSigTrans = 1<<9 , CutGNTauScoreSigTrans = 1<<10
}
enum  DiTauSelectionCuts {
  NoDiTauCut = 0 , DiTauCutPt = 1 , DiTauCutAbsEta = 1<<1 , DiTauCutNSubjets = 1<<2 ,
  DiTauCutAbsCharge = 1<<3 , DiTauCutOmniScore = 1<<4 , DiTauCutOmniIDWP = 1<<5
}
enum  EfficiencyCorrectionType {
  SFRecoHadTau = 0 , SFJetIDHadTau = 4 , SFEleIDHadTau = 8 , SFEleIDElectron = 10 ,
  SFTriggerHadTau = 12 , SFDecayModeHadTau = 16
}
enum  EfficiencyCorrectionSystematicType { STAT = 1 , SYST = 2 }
enum  TruthMatchedParticleType {
  Unknown = 0 , TruthHadronicTau = 1 , TruthLeptonicTau = 2 , TruthMuon = 3 ,
  TruthElectron = 4 , TruthJet = 5 , TruthHadronicDiTau = 6
}
enum  TrackType_t {
  UnclassifiedTrack = 0 , TauTrack = 1 , ConversionTrack = 2 , UnderlyingEventTrack = 3 ,
  SecondaryTrack = 4 , PileupTrack = 5 , FakeTrack = 6
}

Functions

double TruthLeadPt (const xAOD::DiTauJet &xDiTau)
 return the truth vis pT of the leading pT matched particle.
double TruthSubleadPt (const xAOD::DiTauJet &xDiTau)
 return the truth vis pT of the subleading pT matched particle.
double TruthDeltaR (const xAOD::DiTauJet &xDiTau)
 return the dR of between the leading and subleading pT matched particle.
void split (const std::string &sInput, const char cDelim, std::vector< std::string > &vOut)
void split (TEnv &rEnv, const std::string &sIn, const char cDelim, std::vector< std::string > &vOut)
void split (TEnv &rEnv, const std::string &sIn, const char cDelim, std::vector< size_t > &vOut)
void split (TEnv &rEnv, const std::string &sIn, const char cDelim, std::vector< int > &vOut)
void split (TEnv &rEnv, const std::string &sIn, const char cDelim, std::vector< unsigned > &vOut)
void split (TEnv &rEnv, const std::string &sIn, const char cDelim, std::vector< float > &vOut)
void split (TEnv &rEnv, const std::string &sIn, const char cDelim, std::vector< double > &vOut)
double tauPt (const xAOD::TauJet &xTau)
 return tau pt in GeV
double tauP (const xAOD::TauJet &xTau)
 return tau P in GeV
double tauEta (const xAOD::TauJet &xTau)
 return tau eta
double tauAbsEta (const xAOD::TauJet &xTau)
 return absolute tau eta
double finalTauPt (const xAOD::TauJet &xTau)
 return MVA based tau pt in GeV
double finalTauEta (const xAOD::TauJet &xTau)
 return MVA based tau eta
double finalTauAbsEta (const xAOD::TauJet &xTau)
 return MVA based absolute tau eta
double finalTauP (const xAOD::TauJet &xTau)
 return MVA based tau P in GeV
double tauLeadTrackEta (const xAOD::TauJet &xTau)
 return leading charge tau track eta
double truthTauPt (const xAOD::TauJet &xTau)
 return truth match tau pt in GeV (if hadronic truth tau match)
double truthVisTauPt (const xAOD::TauJet &xTau)
 return truth match visible tau pt in GeV (if hadronic truth tau match)
double truthTauAbsEta (const xAOD::TauJet &xTau)
 return truth match tau eta (if hadronic truth tau match)
double truthDecayMode (const xAOD::TauJet &xTau)
 return truth decay mode (if hadronic truth tau match)
const xAOD::TruthParticlegetTruth (const xAOD::TauJet &xTau)
xAOD::TauJetParameters::DecayMode getTruthDecayMode (const xAOD::TruthParticle &xTruthTau)
 Get the Truth Decay Mode from TruthTau particle.
xAOD::TauJetParameters::DecayMode getTruthDecayMode (const xAOD::TauJet &xTau)
 Get the Truth Decay Mode from TruthTau particle.
int getNTauDecayParticles (const xAOD::TruthParticle &xTruthTau, int iPdgId, bool bCompareAbsoluteValues)
 Count truth matched decay particles of a particular PDGID.
bool testFileForEOFContainsCharacters (const std::string &sFileName)
 returns true if last line in file is empty or the line starts with the number sign
void createPi0Vectors (const xAOD::TauJet *xTau, std::vector< TLorentzVector > &vPi0s)
void correctedPi0Vectors (const xAOD::TauJet *xTau, std::vector< TLorentzVector > &correctedPi0s, TLorentzVector &TauP4)
TruthMatchedParticleType getTruthParticleType (const xAOD::TauJet &xTau)
 return TauJet match type
TruthMatchedParticleType getTruthParticleType (const xAOD::DiTauJet &xDiTau)
 return DiTauJet match type
std::vector< const xAOD::TauJet * > combineTauJetsWithMuonRM (const xAOD::TauJetContainer *taus_std, const xAOD::TauJetContainer *taus_muonRM)
 combine the standard taujets container with the muon removal container

Enumeration Type Documentation

◆ DiTauSelectionCuts

◆ EfficiencyCorrectionSystematicType

◆ EfficiencyCorrectionType

Enumerator
SFRecoHadTau 
SFJetIDHadTau 
SFEleIDHadTau 
SFEleIDElectron 
SFTriggerHadTau 
SFDecayModeHadTau 

Definition at line 75 of file PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h.

76 {
77 SFRecoHadTau = 0,
78 // SFRecoJet = 1,
79 // SFRecoElectron = 2,
80 // SFRecoMuon = 3,
81
82 SFJetIDHadTau = 4,
83 // SFJetIDJet = 5,
84 // SFJetIDElectron = 6,
85 // SFJetIDMuon = 7,
86
87 SFEleIDHadTau = 8,
88 // SFEleIDJet = 9,
89 SFEleIDElectron = 10,
90 // SFEleIDMuon = 11,
91
92 SFTriggerHadTau = 12,
93 // SFEleIDJet = 13,
94 // SFEleIDElectron = 14,
95 // SFEleIDMuon = 15,
96
98 };

◆ EleID

◆ JetID

Enumerator
JETIDNONEUNCONFIGURED 
JETIDNONE 
JETIDBDTVERYLOOSE 
JETIDBDTLOOSE 
JETIDBDTMEDIUM 
JETIDBDTTIGHT 
JETIDRNNVERYLOOSE 
JETIDRNNLOOSE 
JETIDRNNMEDIUM 
JETIDRNNTIGHT 
JETIDGNTAUVERYLOOSE 
JETIDGNTAULOOSE 
JETIDGNTAUMEDIUM 
JETIDGNTAUTIGHT 

Definition at line 11 of file PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h.

12 {
14 JETIDNONE = 1,
16 JETIDBDTLOOSE = 3,
18 JETIDBDTTIGHT = 5,
20 JETIDRNNLOOSE = 7,
22 JETIDRNNTIGHT = 9,
24 JETIDGNTAULOOSE = 11,
26 JETIDGNTAUTIGHT = 13,
27 };

◆ OmniID

◆ SelectionCuts

Enumerator
NoCut 
CutPt 
CutAbsEta 
CutPhi 
CutNTrack 
CutAbsCharge 
CutJetIDWP 
CutEleRNNScoreSigTrans 
CutEleIDWP 
CutMuonOLR 
CutJetRNNScoreSigTrans 
CutGNTauScoreSigTrans 

Definition at line 47 of file PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h.

48 {
49 // FIXME: harmonise names for RNN score cuts: "CutEleRNNScore" vs "CutJetRNNScoreSigTrans"
50 NoCut = 0, // 000000000000
51 CutPt = 1, // 000000000001
52 CutAbsEta = 1<<1, // 000000000010
53 CutPhi = 1<<2, // 000000000100
54 CutNTrack = 1<<3, // 000000001000
55 CutAbsCharge = 1<<4, // 000000010000
56 CutJetIDWP = 1<<5, // 000000100000
57 CutEleRNNScoreSigTrans = 1<<6, // 000001000000
58 CutEleIDWP = 1<<7, // 000010000000
59 CutMuonOLR = 1<<8, // 000100000000
60 CutJetRNNScoreSigTrans = 1<<9, // 001000000000
61 CutGNTauScoreSigTrans = 1<<10 // 010000000000
62 };

◆ TrackType_t

Enumerator
UnclassifiedTrack 
TauTrack 
ConversionTrack 
UnderlyingEventTrack 
SecondaryTrack 
PileupTrack 
FakeTrack 

Definition at line 27 of file TauTruthTrackMatchingTool.h.

28{
29 UnclassifiedTrack = 0, // Track is unclassified
30 TauTrack = 1, // Track is from direct tau decay
31 ConversionTrack = 2, // Track is from conversion
32 UnderlyingEventTrack = 3, // Track is from underlying event
33 SecondaryTrack = 4, // Track is a secondary track
34 PileupTrack = 5, // Track is from pileup
35 FakeTrack = 6 // Track is a fake
36};

◆ TruthMatchedParticleType

Function Documentation

◆ combineTauJetsWithMuonRM()

std::vector< const xAOD::TauJet * > TauAnalysisTools::combineTauJetsWithMuonRM ( const xAOD::TauJetContainer * taus_std,
const xAOD::TauJetContainer * taus_muonRM )

combine the standard taujets container with the muon removal container

Special function to combine the muon-removed taus with the standard taus. This can impact your MET calculation and OLR. You will know if you need this, otherwise please consult TauCP group.

Definition at line 554 of file PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx.

554 {
558 // std::string message = "found " + std::to_string(taus_muonRM->size()) + " muon-removal taus";
559 // Info("TauAnalysisTools::getTauJetsWithMuonRM", message.c_str());
560 std::vector<const xAOD::TauJet*> taus_murm_vec(taus_muonRM->begin(), taus_muonRM->end());
561 std::vector<const xAOD::TauJet*> taus_combined;
563 originalTauJetAcc ("originalTauJet");
564 for(const xAOD::TauJet* tau_std : *taus_std){
565 auto replacement_itr = std::find_if(taus_murm_vec.begin(), taus_murm_vec.end(),
566 [&](const xAOD::TauJet* tau_murm){
567 auto link_to_ori_tau = originalTauJetAcc (*tau_murm);
568 if (!link_to_ori_tau.isValid()) { return false; }
569 if (*link_to_ori_tau == tau_std){ return true; }
570 return false;
571 }
572 );
573 if (replacement_itr == taus_murm_vec.end()) { taus_combined.push_back(tau_std); }
574 else {
575 // message = "replacement found at TauJets_MuonRM index " + std::to_string((*replacement_itr)->index()) + " for TauJets index " + std::to_string(tau_std->index());
576 // Info("TauAnalysisTools::getTauJetsWithMuonRM", message.c_str());
577 taus_combined.push_back(*replacement_itr);
578 taus_murm_vec.erase(replacement_itr);
579 // message = std::to_string(taus_murm_vec.size()) + " muon-removal taus left";
580 // Info("TauAnalysisTools::getTauJetsWithMuonRM", message.c_str());
581 }
582 }
583 // Every muon-removal tau should have been used, otherwise there is a problem.
584 assert(taus_murm_vec.empty());
585 return taus_combined;
586}
if(febId1==febId2)
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
Helper class to provide constant type-safe access to aux data.
TauJet_v3 TauJet
Definition of the current "tau version".

◆ correctedPi0Vectors()

void TauAnalysisTools::correctedPi0Vectors ( const xAOD::TauJet * xTau,
std::vector< TLorentzVector > & correctedPi0s,
TLorentzVector & TauP4 )

Definition at line 391 of file PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx.

391 {
392 //reset the pi0s
393 correctedPi0s.clear();
394
395 int iDecayMode = -1;
396
398 {
399 Error("TauAnalysisTools::correctedPi0Vectors", "Failed to retrieve panTauDetail decay mode.");
400 return;
401 }
402
403 //Reading in the pi0 vector from createPi0Vectors
404 std::vector<TLorentzVector> vPi0s;
405 createPi0Vectors(xTau,vPi0s);
406
408 //Adding up Pi0 P4s from createPi0Vectors
409 TLorentzVector Sum_vPi0s;
410 for(unsigned int i = 0; i < vPi0s.size() ; i++){
411 Sum_vPi0s += vPi0s[i];
412 }
413
414 //Get sum of the chargedPFO (i.e. tau track) p4
415 TLorentzVector Sum_ChrgPFOP4;
416 for(const xAOD::TauTrack* track : xTau->tracks()) {
417 Sum_ChrgPFOP4 += track->p4();
418 }
419
420 //Get tau FinalCalib P4 (explicitly requiring p4(xAOD::TauJetParameters::TauCalibType::FinalCalib) should be superfluous, as FinalCalib is the default p4)
421 TLorentzVector FinalCalibP4 = xTau->p4();
422
423 //Calculate the difference 3-vector between FinalCalib and Sum of chargedPFOP4
424 double px = FinalCalibP4.Px() - Sum_ChrgPFOP4.Px();
425 double py = FinalCalibP4.Py() - Sum_ChrgPFOP4.Py();
426 double pz = FinalCalibP4.Pz() - Sum_ChrgPFOP4.Pz();
427
428 double p_correctedPi0s = std::sqrt( std::pow(px,2.) + std::pow(py,2.) + std::pow(pz,2.) );
429 double p_vPi0s = Sum_vPi0s.P();
430
431 //Calucate scale factor for the pi0 3-vector momentum
432 double X = p_correctedPi0s/p_vPi0s;
433
434 //Scale the pi0s with X and recalculate the new pi0 energy
435 double px_scaled, py_scaled, pz_scaled, e;
437 for(unsigned int i = 0; i < vPi0s.size() ; i++){
438 px_scaled = vPi0s[i].Px() * X;
439 py_scaled = vPi0s[i].Py() * X;
440 pz_scaled = vPi0s[i].Pz() * X;
441 e = std::sqrt( std::pow(px_scaled,2.) + std::pow(py_scaled,2.) + std::pow(pz_scaled,2.) + std::pow(mPi0,2.) );
442
443 //Append the corrected pi0P4 to correctedPi0s
444 TLorentzVector P4_correctedPi0s;
445 P4_correctedPi0s.SetPxPyPzE(px_scaled,py_scaled,pz_scaled,e);
446 correctedPi0s.push_back(P4_correctedPi0s);
447 }
448 }else{
449 correctedPi0s = vPi0s;
450 }
451
452 //Correct angles between pi0s for 1pXn decays with 1 cluster
453 if(iDecayMode == xAOD::TauJetParameters::DecayMode::Mode_1pXn && xTau->nPi0PFOs() == 1){
454
455 //Get Function of Delta R between the two Pi0s
456 TF1 DeltaRdist("DeltaRdist", "pol3", 0, 67500);
457 DeltaRdist.SetParameter(0, 0.07924);
458 DeltaRdist.SetParameter(1, -2.078/1000000.);
459 DeltaRdist.SetParameter(2, 2.619/100000000000.);
460 DeltaRdist.SetParameter(3, -1.238/10000000000000000.);
461
462 //Get Sum of pi0 P4.Pt()
463 TLorentzVector SumPi0_P4;
464 for( unsigned int i = 0 ; i < correctedPi0s.size() ; i++){
465 SumPi0_P4 += correctedPi0s[i];
466 }
467
468 float SumPi0_pt = SumPi0_P4.Pt();
469
470 //Get delta R value (mean of true DeltaR distribution)
471 float deltaR;
472 if(SumPi0_pt >= 67500){
473 deltaR = 0.020; // = DeltaRdist.Eval(67500);
474 } else{
475 deltaR = DeltaRdist.Eval(SumPi0_pt);
476 }
477
478 TLorentzVector correctedPi0_0, correctedPi0_1;
479 correctedPi0_0.SetPtEtaPhiM( correctedPi0s[0].Pt()/cos(0.5*deltaR/std::sqrt(2.0)), correctedPi0s[0].Eta()+0.5*deltaR/std::sqrt(2.0), correctedPi0s[0].Phi()+0.5*deltaR/std::sqrt(2.0), correctedPi0s[0].M() );
480 correctedPi0_1.SetPtEtaPhiM( correctedPi0s[1].Pt()/cos(0.5*deltaR/std::sqrt(2.0)), correctedPi0s[1].Eta()-0.5*deltaR/std::sqrt(2.0), correctedPi0s[1].Phi()-0.5*deltaR/std::sqrt(2.0), correctedPi0s[1].M() );
481
482 std::vector<TLorentzVector> AngleCorrectedPi0s;
483 AngleCorrectedPi0s.push_back(correctedPi0_0);
484 AngleCorrectedPi0s.push_back(correctedPi0_1);
485
486 //Reparametrise: Delta R -> mass of pi0 Cluster
487 TLorentzVector PionCluster_angleCorrected = AngleCorrectedPi0s[0]+AngleCorrectedPi0s[1];
488
489 double dNewMomentum = std::sqrt(PionCluster_angleCorrected.E()/2. * PionCluster_angleCorrected.E()/2. - PionCluster_angleCorrected.M() / 2. * PionCluster_angleCorrected.M() / 2.);
490 correctedPi0s[0].SetVectM(PionCluster_angleCorrected.Vect() * (dNewMomentum / PionCluster_angleCorrected.P()), PionCluster_angleCorrected.M() / 2.);
491 correctedPi0s[1] = correctedPi0s[0];
492 }
493
494 //Calculate the new tau P4
495 for(const xAOD::TauTrack* track : xTau->tracks()) {
496 TauP4 += track->p4();
497 }
498
499 for(unsigned int iPi0=0; iPi0 < correctedPi0s.size(); iPi0++) {
500 TauP4 += correctedPi0s[iPi0];
501 }
502
503}
Scalar deltaR(const MatrixBase< Derived > &vec) const
@ Phi
Definition RPCdef.h:8
@ Eta
Definition RPCdef.h:8
virtual FourMom_t p4() const
The full 4-momentum of the particle.
Definition TauJet_v3.cxx:96
size_t nPi0PFOs() const
Get the number of pi0 PFO particles associated with this tau.
bool panTauDetail(TauJetParameters::PanTauDetails panTauDetail, int &value) const
Get and set values of pantau details variables via enum.
std::vector< const TauTrack * > tracks(TauJetParameters::TauTrackFlag flag=TauJetParameters::TauTrackFlag::classifiedCharged) const
Get the v<const pointer> to a given tauTrack collection associated with this tau.
constexpr double piZeroMassInMeV
the mass of the pi zero (in MeV)
void createPi0Vectors(const xAOD::TauJet *xTau, std::vector< TLorentzVector > &vPi0s)
TauTrack_v1 TauTrack
Definition of the current version.
Definition TauTrack.h:16

◆ createPi0Vectors()

void TauAnalysisTools::createPi0Vectors ( const xAOD::TauJet * xTau,
std::vector< TLorentzVector > & vPi0s )

Definition at line 329 of file PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx.

330{
331 // reset the pi0s
332 vPi0s.clear();
333
334 // Since the PFO links as they come out of reconstruction, only correspond to
335 // calorimeter clusters, whereas we want the consts_pi0 vectors to correspond
336 // to real pi0s, we need to be careful to collect the PFOs correctly to pi0s
337 // for the cases where number of pi0s does not match to the decay mode:
338 size_t iNumPi0PFO = xTau->nPi0PFOs();
339
340 int iDecayMode = -1;
341
343 {
344 Error("TauAnalysisTools::createPi0Vectors", "Failed to retrieve panTauDetail decay mode.");
345 return;
346 }
347
348 if (iDecayMode == xAOD::TauJetParameters::DecayMode::Mode_1p1n && iNumPi0PFO > 1)
349 {
350 // float fMassPi0 = ParticleConstants::piZeroMassInMeV;
352
353 // combine both photons (with 0 mass from Pantau) to one pi0 vector:
354 const xAOD::PFO* xPfo1 = xTau->pi0PFO(0);
355 const xAOD::PFO* xPfo2 = xTau->pi0PFO(1);
356 vPi0s.push_back(xPfo1->p4() + xPfo2->p4());
357
358 // re-set the mass to one pi0:
359 double dNewMomentum = std::sqrt(vPi0s[0].E() * vPi0s[0].E() - fMassPi0Squared);
360 vPi0s[0].SetPxPyPzE(vPi0s[0].Vect().Unit().Px() * dNewMomentum,
361 vPi0s[0].Vect().Unit().Py() * dNewMomentum,
362 vPi0s[0].Vect().Unit().Pz() * dNewMomentum,
363 vPi0s[0].E());
364 }
365 else if (iDecayMode == xAOD::TauJetParameters::DecayMode::Mode_1pXn && iNumPi0PFO == 1)
366 {
367 // make a single pi0 from a PFO that contains two pi0s:
368 const xAOD::PFO* xPfo = xTau->pi0PFO(0);
369 // add the 2-pi0 vector preliminarily to the pi0vector:
370 vPi0s.push_back(xPfo->p4());
371
372 // re-set the mass back to one pi0:
373 double dNewMomentum = std::sqrt(vPi0s[0].E() / 2 * vPi0s[0].E() / 2 - vPi0s[0].M() / 2. * vPi0s[0].M() / 2.);
374 vPi0s[0].SetVectM(vPi0s[0].Vect() * (dNewMomentum / vPi0s[0].P()), vPi0s[0].M() / 2.);
375
376 // create another pi0 from the same vector:
377 vPi0s.push_back(vPi0s[0]);
378 }
379 else
380 {
381 // if it's not any of the special cases above then just collect the PFOs:
382 for (size_t iPFO = 0; iPFO < iNumPi0PFO; iPFO++)
383 {
384 vPi0s.push_back(xTau->pi0PFO(iPFO)->p4());
385 }
386 }
387}
static Double_t P(Double_t *tt, Double_t *par)
virtual FourMom_t p4() const
The full 4-momentum of the particle.
Definition PFO_v1.cxx:95
const PFO * pi0PFO(size_t i) const
Get the pointer to a given pi0 PFO associated with this tau.
PFO_v1 PFO
Definition of the current "pfo version".
Definition PFO.h:17

◆ finalTauAbsEta()

double TauAnalysisTools::finalTauAbsEta ( const xAOD::TauJet & xTau)

return MVA based absolute tau eta

Definition at line 127 of file PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx.

128{
129 // return MVA based absolute tau eta
130 return std::abs(xTau.etaFinalCalib());
131}
double etaFinalCalib() const

◆ finalTauEta()

double TauAnalysisTools::finalTauEta ( const xAOD::TauJet & xTau)

return MVA based tau eta

Definition at line 120 of file PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx.

121{
122 // return MVA based tau eta
123 return xTau.etaFinalCalib();
124}

◆ finalTauP()

double TauAnalysisTools::finalTauP ( const xAOD::TauJet & xTau)

return MVA based tau P in GeV

Definition at line 134 of file PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx.

135{
136 // return tau P in GeV
138}

◆ finalTauPt()

double TauAnalysisTools::finalTauPt ( const xAOD::TauJet & xTau)

return MVA based tau pt in GeV

Definition at line 113 of file PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx.

114{
115 // return MVA based tau pt in GeV
116 return xTau.ptFinalCalib()/GeV;
117}
double ptFinalCalib() const

◆ getNTauDecayParticles()

int TauAnalysisTools::getNTauDecayParticles ( const xAOD::TruthParticle & xTruthTau,
int iPdgId,
bool bCompareAbsoluteValues )

Count truth matched decay particles of a particular PDGID.

Parameters
xTruthTauTruthTau
iPdgIdPDGID to count over
bCompareAbsoluteValuestrue to ignore pdgid charge
Returns
int

Definition at line 269 of file PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx.

270{
271 int iNum = 0;
272 static const SG::ConstAccessor<std::vector<int> > accDecayModeVector("DecayModeVector");
273 if (!accDecayModeVector.isAvailable(xTruthTau))
274 {
275 Warning("TauAnalysisTools::getNTauDecayParticles", "passed truth particle is not a truth tau, return 0");
276 return 0;
277 }
278
279 for(auto iPdgId2 : accDecayModeVector(xTruthTau))
280 if (!bCompareAbsoluteValues)
281 {
282 if (iPdgId2 == iPdgId) iNum++;
283 }
284 else
285 {
286 if (std::abs(iPdgId2) == std::abs(iPdgId)) iNum++;
287 }
288 return iNum;
289}

◆ getTruth()

const xAOD::TruthParticle * TauAnalysisTools::getTruth ( const xAOD::TauJet & xTau)

Definition at line 207 of file PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx.

208{
210 static const SG::ConstAccessor<Link_t> accTruthParticleLink("truthParticleLink");
211 if (!accTruthParticleLink(xTau))
212 {
213 Error("TauAnalysisTools::getTruth", "No truth match information available. Please run TauTruthMatchingTool first");
214 }
215
216 const Link_t xTruthTauLink = accTruthParticleLink(xTau);
217 const xAOD::TruthParticle* xTruthTau = xTruthTauLink.cachedElement();
218
219 return xTruthTau;
220}
TruthParticle_v1 TruthParticle
Typedef to implementation.

◆ getTruthDecayMode() [1/2]

xAOD::TauJetParameters::DecayMode TauAnalysisTools::getTruthDecayMode ( const xAOD::TauJet & xTau)

Get the Truth Decay Mode from TruthTau particle.

check hadronic truth match and get getTruthDecayMode from truth particle

Definition at line 224 of file PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx.

225{
226 const xAOD::TruthParticle* xTruthTau = getTruth(xTau);
227
228 static const SG::ConstAccessor<char> accIsHadronicTau ("IsHadronicTau");
229 if (xTruthTau!=nullptr && accIsHadronicTau(*xTruthTau))
230 return getTruthDecayMode(*xTruthTau);
231 else
233}
const xAOD::TruthParticle * getTruth(const xAOD::TauJet &xTau)
xAOD::TauJetParameters::DecayMode getTruthDecayMode(const xAOD::TruthParticle &xTruthTau)
Get the Truth Decay Mode from TruthTau particle.

◆ getTruthDecayMode() [2/2]

xAOD::TauJetParameters::DecayMode TauAnalysisTools::getTruthDecayMode ( const xAOD::TruthParticle & xTruthTau)

Get the Truth Decay Mode from TruthTau particle.

Counts p0 and charged Kaons and pions

Parameters
xTruthTauTruthParticle
Returns
xAOD::TauJetParameters::DecayMode
Note
Method returns Mode_Error if TruthParticle is not decorated as hadronic TruthTau

Definition at line 236 of file PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx.

237{
238 static const SG::ConstAccessor<size_t> accNumCharged ("numCharged");
239 if (!(accNumCharged.isAvailable(xTruthTau)))
240 {
241 // passed truth particle is not a truth tau
243 }
244
245 int iCharged = getNTauDecayParticles(xTruthTau,MC::PIPLUS, true) + getNTauDecayParticles(xTruthTau,MC::KPLUS, true);
246 int iNeutral = getNTauDecayParticles(xTruthTau,MC::PI0, true);
247 if (iCharged == 1)
248 {
249 if (iNeutral == 0) return xAOD::TauJetParameters::DecayMode::Mode_1p0n;
250 if (iNeutral == 1) return xAOD::TauJetParameters::DecayMode::Mode_1p1n;
251 if (iNeutral >= 2) return xAOD::TauJetParameters::DecayMode::Mode_1pXn;
252 }
253 else if (iCharged == 3)
254 {
255 if (iNeutral == 0) return xAOD::TauJetParameters::DecayMode::Mode_3p0n;
256 if (iNeutral >= 1) return xAOD::TauJetParameters::DecayMode::Mode_3pXn;
257 }
258
259 if (iCharged == 2 or iCharged == 4 or iCharged == 5)
261 if (iCharged == 0 or iCharged >=6)
263
264 // if you got here, something should have gone wrong
266}
static const int PI0
static const int KPLUS
static const int PIPLUS
int getNTauDecayParticles(const xAOD::TruthParticle &xTruthTau, int iPdgId, bool bCompareAbsoluteValues)
Count truth matched decay particles of a particular PDGID.

◆ getTruthParticleType() [1/2]

TruthMatchedParticleType TauAnalysisTools::getTruthParticleType ( const xAOD::DiTauJet & xDiTau)

return DiTauJet match type

Definition at line 540 of file PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx.

541{
542 static const SG::ConstAccessor<char> accIsTruthHadronic("IsTruthHadronic");
543 if (!accIsTruthHadronic.isAvailable(xDiTau))
544 Error("TauAnalysisTools::getTruthParticleType", "No truth match information available. Please run DiTauTruthMatchingTool first");
545
546 TruthMatchedParticleType eTruthMatchedParticleType = Unknown;
547
548 if (accIsTruthHadronic(xDiTau))
549 eTruthMatchedParticleType = TruthHadronicDiTau;
550
551 return eTruthMatchedParticleType;
552}

◆ getTruthParticleType() [2/2]

TruthMatchedParticleType TauAnalysisTools::getTruthParticleType ( const xAOD::TauJet & xTau)

return TauJet match type

Definition at line 506 of file PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx.

507{
509 static const SG::ConstAccessor< Link_t > accTruthParticleLink("truthParticleLink");
510 if (!accTruthParticleLink.isAvailable(xTau))
511 Error("TauAnalysisTools::getTruthParticleType", "No truth match information available. Please run TauTruthMatchingTool first.");
512
513 const xAOD::TruthParticle* xTruthParticle = xAOD::TauHelpers::getTruthParticle(&xTau);
514 if (xTruthParticle)
515 {
516 if (xTruthParticle->isTau())
517 {
518 static const SG::ConstAccessor<char> accIsHadronicTau("IsHadronicTau");
519 if (static_cast<bool>(accIsHadronicTau(*xTruthParticle)))
520 return TruthHadronicTau;
521 else
522 return TruthLeptonicTau;
523 }
524 if (xTruthParticle->isMuon())
525 return TruthMuon;
526 if (xTruthParticle->isElectron())
527 return TruthElectron;
528 }
529
530 // TODO: use const xAOD::Jet* xTruthJet = xAOD::TauHelpers::getLink<xAOD::Jet>(&xTau, "truthJetLink");
531 // currently it is unavailable as templated class is not in icc file
532 static const SG::ConstAccessor< ElementLink< xAOD::JetContainer > > accTruthJetLink("truthJetLink");
533 const ElementLink< xAOD::JetContainer > lTruthParticleLink = accTruthJetLink(xTau);
534 if (lTruthParticleLink.isValid())
535 return TruthJet;
536
537 return Unknown;
538}
bool isElectron() const
Whether the particle is an electron (or positron)
bool isTau() const
Whether the particle is a tau (or antitau)
bool isMuon() const
Whether the particle is a muon (or antimuon)
const xAOD::TruthParticle * getTruthParticle(const xAOD::IParticle *, bool debug=false)
return the truthParticle associated to the given IParticle (if any)

◆ split() [1/7]

void TauAnalysisTools::split ( const std::string & sInput,
const char cDelim,
std::vector< std::string > & vOut )

Definition at line 23 of file PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx.

24{
25 std::stringstream sSS(sInput);
26 std::string sItem;
27 while (std::getline(sSS, sItem, cDelim))
28 vOut.push_back(sItem);
29}

◆ split() [2/7]

void TauAnalysisTools::split ( TEnv & rEnv,
const std::string & sIn,
const char cDelim,
std::vector< double > & vOut )

Definition at line 77 of file PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx.

78{
79 std::stringstream sSS(rEnv.GetValue(sKey.c_str(),""));
80 std::string sItem;
81 while (std::getline(sSS, sItem, cDelim))
82 vOut.push_back(stod(sItem));
83}

◆ split() [3/7]

void TauAnalysisTools::split ( TEnv & rEnv,
const std::string & sIn,
const char cDelim,
std::vector< float > & vOut )

Definition at line 68 of file PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx.

69{
70 std::stringstream sSS(rEnv.GetValue(sKey.c_str(),""));
71 std::string sItem;
72 while (std::getline(sSS, sItem, cDelim))
73 vOut.push_back(stof(sItem));
74}

◆ split() [4/7]

void TauAnalysisTools::split ( TEnv & rEnv,
const std::string & sIn,
const char cDelim,
std::vector< int > & vOut )

Definition at line 50 of file PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx.

51{
52 std::stringstream sSS(rEnv.GetValue(sKey.c_str(),""));
53 std::string sItem;
54 while (std::getline(sSS, sItem, cDelim))
55 vOut.push_back(stoi(sItem));
56}

◆ split() [5/7]

void TauAnalysisTools::split ( TEnv & rEnv,
const std::string & sIn,
const char cDelim,
std::vector< size_t > & vOut )

Definition at line 41 of file PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx.

42{
43 std::stringstream sSS(rEnv.GetValue(sKey.c_str(),""));
44 std::string sItem;
45 while (std::getline(sSS, sItem, cDelim))
46 vOut.push_back(size_t(stoi(sItem)));
47}

◆ split() [6/7]

void TauAnalysisTools::split ( TEnv & rEnv,
const std::string & sIn,
const char cDelim,
std::vector< std::string > & vOut )

Definition at line 32 of file PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx.

33{
34 std::stringstream sSS(rEnv.GetValue(sKey.c_str(),""));
35 std::string sItem;
36 while (std::getline(sSS, sItem, cDelim))
37 vOut.push_back(sItem);
38}

◆ split() [7/7]

void TauAnalysisTools::split ( TEnv & rEnv,
const std::string & sIn,
const char cDelim,
std::vector< unsigned > & vOut )

Definition at line 59 of file PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx.

60{
61 std::stringstream sSS(rEnv.GetValue(sKey.c_str(),""));
62 std::string sItem;
63 while (std::getline(sSS, sItem, cDelim))
64 vOut.push_back(stoi(sItem));
65}

◆ tauAbsEta()

double TauAnalysisTools::tauAbsEta ( const xAOD::TauJet & xTau)

return absolute tau eta

Definition at line 106 of file PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx.

107{
108 // return absolute tau eta
109 return std::abs(xTau.eta());
110}
virtual double eta() const
The pseudorapidity ( ) of the particle.

◆ tauEta()

double TauAnalysisTools::tauEta ( const xAOD::TauJet & xTau)

return tau eta

Definition at line 99 of file PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx.

100{
101 // return tau eta
102 return xTau.eta();
103}

◆ tauLeadTrackEta()

double TauAnalysisTools::tauLeadTrackEta ( const xAOD::TauJet & xTau)

return leading charge tau track eta

Definition at line 141 of file PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx.

142{
143 // return leading charge tau track eta
144 double dTrackEta = 0.;
145 double dTrackMaxPt = 0.;
146 for( unsigned int iNumTrack = 0; iNumTrack < xTau.nTracks(); iNumTrack++)
147 {
148 if (xTau.track(iNumTrack)->pt() > dTrackMaxPt)
149 {
150 dTrackMaxPt = xTau.track(iNumTrack)->pt();
151 dTrackEta = xTau.track(iNumTrack)->eta();
152 }
153 }
154 return dTrackEta;
155}
const TauTrack * track(size_t i, TauJetParameters::TauTrackFlag flag=TauJetParameters::TauTrackFlag::classifiedCharged, int *container_index=0) const
Get the pointer to a given tauTrack associated with this tau /*container index needed by trackNonCons...
size_t nTracks(TauJetParameters::TauTrackFlag flag=TauJetParameters::TauTrackFlag::classifiedCharged) const
virtual double eta() const
The pseudorapidity ( ) of the particle.
virtual double pt() const
The transverse momentum ( ) of the particle.

◆ tauP()

double TauAnalysisTools::tauP ( const xAOD::TauJet & xTau)

return tau P in GeV

Definition at line 92 of file PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx.

93{
94 // return tau P in GeV
95 return xTau.p4().P()/1000.;
96}

◆ tauPt()

double TauAnalysisTools::tauPt ( const xAOD::TauJet & xTau)

return tau pt in GeV

Definition at line 85 of file PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx.

86{
87 // return tau pt in GeV
88 return xTau.pt()/1000.;
89}
virtual double pt() const
The transverse momentum ( ) of the particle.

◆ testFileForEOFContainsCharacters()

bool TauAnalysisTools::testFileForEOFContainsCharacters ( const std::string & sFileName)

returns true if last line in file is empty or the line starts with the number sign

Definition at line 292 of file PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx.

293{
294 // returns true if last line in file is empty or the line starts with the
295 // number sign #
296
297 std::ifstream fInputFile;
298 fInputFile.open(sFileName);
299 if(!fInputFile.is_open())
300 return true;
301
302 fInputFile.seekg(-1,fInputFile.end);
303
304 bool bKeepLooping = true;
305 while(bKeepLooping)
306 {
307 char ch;
308 fInputFile.get(ch);
309
310 if(static_cast<int>(fInputFile.tellg()) <= 1)
311 {
312 fInputFile.seekg(0);
313 bKeepLooping = false;
314 }
315 else if(ch == '\n')
316 bKeepLooping = false;
317 else
318 fInputFile.seekg(-2,fInputFile.cur);
319 }
320
321 std::string sLastLine;
322 getline(fInputFile,sLastLine);
323 fInputFile.close();
324
325 return (sLastLine.size() == 0 or sLastLine[0] == '#');
326}

◆ truthDecayMode()

double TauAnalysisTools::truthDecayMode ( const xAOD::TauJet & xTau)

return truth decay mode (if hadronic truth tau match)

Definition at line 199 of file PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx.

200{
201 // return truth tau decay mode.
202 int iDecayMode = getTruthDecayMode(xTau);
203 return static_cast<double>(iDecayMode);
204}

◆ TruthDeltaR()

double TauAnalysisTools::TruthDeltaR ( const xAOD::DiTauJet & xDiTau)

return the dR of between the leading and subleading pT matched particle.

Definition at line 336 of file CommonDiTauEfficiencyTool.cxx.

337{
338 // return truth taus distance delta R
339 static const SG::ConstAccessor< float > acc( "TruthVisDeltaR" );
340 return acc( xDiTau );
341}

◆ TruthLeadPt()

double TauAnalysisTools::TruthLeadPt ( const xAOD::DiTauJet & xDiTau)

return the truth vis pT of the leading pT matched particle.

Definition at line 320 of file CommonDiTauEfficiencyTool.cxx.

321{
322 // return leading truth tau pt in GeV
323 static const SG::ConstAccessor< float > acc( "TruthVisLeadPt" );
324 return acc( xDiTau ) * 0.001;
325}

◆ TruthSubleadPt()

double TauAnalysisTools::TruthSubleadPt ( const xAOD::DiTauJet & xDiTau)

return the truth vis pT of the subleading pT matched particle.

Definition at line 328 of file CommonDiTauEfficiencyTool.cxx.

329{
330 // return subleading truth tau pt in GeV
331 static const SG::ConstAccessor< float > acc( "TruthVisSubleadPt" );
332 return acc( xDiTau ) * 0.001;
333}

◆ truthTauAbsEta()

double TauAnalysisTools::truthTauAbsEta ( const xAOD::TauJet & xTau)

return truth match tau eta (if hadronic truth tau match)

Definition at line 185 of file PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx.

186{
187 // return truth tau absolute eta
188 const xAOD::TruthParticle* xTruthTau = getTruth(xTau);
189
190 // if there is a truth tau return absolute eta, otherwise return -5 (getTruth will print an error)
191 static const SG::ConstAccessor<char> accIsHadronicTau ("IsHadronicTau");
192 if (xTruthTau!=nullptr && accIsHadronicTau (*xTruthTau))
193 return std::abs(xTruthTau->eta());
194 else
195 return -5.;
196}
virtual double eta() const override final
The pseudorapidity ( ) of the particle.

◆ truthTauPt()

double TauAnalysisTools::truthTauPt ( const xAOD::TauJet & xTau)

return truth match tau pt in GeV (if hadronic truth tau match)

Definition at line 158 of file PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx.

159{
160 // return truth tau Pt in GeV
161 const xAOD::TruthParticle* xTruthTau = getTruth(xTau);
162
163 // if there is a truth tau return pT, otherwise return 0 (getTruth will print an error)
164 static const SG::ConstAccessor<char> accIsHadronicTau ("IsHadronicTau");
165 if (xTruthTau!=nullptr && accIsHadronicTau (*xTruthTau))
166 return xTruthTau->pt()/GeV;
167 else
168 return 0.;
169}
virtual double pt() const override final
The transverse momentum ( ) of the particle.

◆ truthVisTauPt()

double TauAnalysisTools::truthVisTauPt ( const xAOD::TauJet & xTau)

return truth match visible tau pt in GeV (if hadronic truth tau match)

Definition at line 171 of file PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx.

172{
173 // return truth visible tau Pt in GeV
174 const xAOD::TruthParticle* xTruthTau = getTruth(xTau);
175
176 // if there is a truth tau return visible pT, otherwise return 0 (getTruth will print an error)
177 static const SG::ConstAccessor<char> accIsHadronicTau ("IsHadronicTau");
178 static const SG::ConstAccessor<double> accPtVis("pt_vis");
179 if (xTruthTau!=nullptr && accIsHadronicTau (*xTruthTau))
180 return (accPtVis(*xTruthTau)/GeV);
181 else
182 return 0.;
183}