ATLAS Offline Software
TauPi0Selector.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
7 
8 
9 TauPi0Selector::TauPi0Selector(const std::string& name) :
11 }
12 
13 
14 
16  // Clear vector of cell-based pi0 PFO Links. Required when rerunning on xAOD level.
17  pTau.clearProtoPi0PFOLinks();
18 
19  // Decay mode enum
20  auto kDecayModeProto = xAOD::TauJetParameters::PanTau_DecayModeProto;
21 
22  // 0, >=5 prong taus will have Mode_NotSet
23  if (pTau.nTracks() == 0 || pTau.nTracks() >5 ) {
25  return StatusCode::SUCCESS;
26  }
27 
28  // 1-5 prong taus have Mode_Other by default
29  // 1, 3 prong taus will be over-written
31 
32  // Apply selection to the pi0, and count the number
33  int nRecoPi0s=0;
34  for(size_t i=0; i<pTau.nProtoNeutralPFOs(); i++) {
35  xAOD::PFO* neutralPFO = neutralPFOContainer.at( pTau.protoNeutralPFO(i)->index() );
36 
37  // Set number of pi0s to 0 for all neutral PFOs. Required when rerunning on xAOD level
39 
40  // Only consider PFOs within 0.2 cone of the tau axis
41  if (pTau.p4().DeltaR(neutralPFO->p4()) > m_maxDeltaRNeutral) continue;
42 
43  int etaBin = getEtaBin( neutralPFO->cluster(0)->eta() );
44 
45  // Apply Et cut
46  if (neutralPFO->p4().Et() < m_clusterEtCut[etaBin]) continue;
47 
48  // Apply BDT score cut
49  double BDTScore = neutralPFO->bdtPi0Score();
50  if ((pTau.nTracks() == 1 && BDTScore < m_clusterBDTCut_1prong[etaBin]) ||
51  (pTau.nTracks() > 1 && BDTScore < m_clusterBDTCut_mprong[etaBin])) continue;
52 
53  int nHitsInEM1 = 0;
54  if (!neutralPFO->attribute(xAOD::PFODetails::cellBased_NHitsInEM1, nHitsInEM1)) {
55  ATH_MSG_WARNING("Couldn't retrieve nHitsInEM1. Will set it to 0.");
56  }
57 
58  // nHitsInEM1 < 3 --- one pi0; nHitsInEM1 >= 3 --- two pi0s
59  // FIXME: what about nHitsInEM1 == 0 ?
60  if (nHitsInEM1 < 3) {
62  ++nRecoPi0s;
63  }
64  else {
66  nRecoPi0s += 2;
67  }
68 
69  pTau.addProtoPi0PFOLink(ElementLink< xAOD::PFOContainer > (neutralPFO, neutralPFOContainer));
70  }
71 
72  // Set Proto Decay Mode based on the number charged tracks and pi0s
73  if (pTau.nTracks()==1) {
74  if (nRecoPi0s==0) {
76  }
77  else if (nRecoPi0s==1) {
79  }
80  else {
82  }
83  }
84  else if (pTau.nTracks()==3) {
85  if (nRecoPi0s==0) {
87  }
88  else {
90  }
91  }
92 
93  return StatusCode::SUCCESS;
94 }
95 
96 
97 
98 int TauPi0Selector::getEtaBin(double eta) const {
99  int etaBin = -1;
100 
101  double absEta = std::abs(eta);
102 
103  if (absEta < 0.80) {
104  etaBin = 0;
105  }
106  else if (absEta < 1.40) {
107  etaBin = 1;
108  }
109  else if (absEta < 1.50) {
110  etaBin = 2;
111  }
112  else if (absEta < 1.90) {
113  etaBin = 3;
114  }
115  else {
116  etaBin = 4;
117  }
118 
119  return etaBin;
120 }
xAOD::TauJetParameters::Mode_1p0n
@ Mode_1p0n
Definition: TauDefs.h:386
xAOD::TauJetParameters::Mode_1p1n
@ Mode_1p1n
Definition: TauDefs.h:387
xAOD::TauJet_v3::nProtoNeutralPFOs
size_t nProtoNeutralPFOs() const
Get the number of cellbased_neutral PFO particles associated with this tau.
Definition: TauJet_v3.cxx:904
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:83
xAOD::TauJet_v3::setPanTauDetail
void setPanTauDetail(TauJetParameters::PanTauDetails panTauDetail, int value)
Definition: TauJet_v3.cxx:367
xAOD::PFO_v1::attribute
bool attribute(PFODetails::PFOAttributes AttributeType, T &anAttribute) const
get a PFO Variable via enum
xAOD::TauJet_v3::nTracks
size_t nTracks(TauJetParameters::TauTrackFlag flag=TauJetParameters::TauTrackFlag::classifiedCharged) const
Definition: TauJet_v3.cxx:488
TauRecToolBase
The base class for all tau tools.
Definition: TauRecToolBase.h:21
xAOD::PFODetails::cellBased_NHitsInEM1
@ cellBased_NHitsInEM1
Definition: Event/xAOD/xAODPFlow/xAODPFlow/PFODefs.h:132
TauPi0Selector::TauPi0Selector
TauPi0Selector(const std::string &name)
Definition: TauPi0Selector.cxx:9
TauPi0Selector::executePi0nPFO
virtual StatusCode executePi0nPFO(xAOD::TauJet &pTau, xAOD::PFOContainer &pNeutralPFOContainer) const override
Definition: TauPi0Selector.cxx:15
TauGNNUtils::Variables::Scalar::absEta
bool absEta(const xAOD::TauJet &tau, float &out)
Definition: TauGNNUtils.cxx:107
xAOD::TauJetParameters::Mode_1pXn
@ Mode_1pXn
Definition: TauDefs.h:388
TauPi0Selector.h
xAOD::etaBin
setSAddress setEtaMS setDirPhiMS setDirZMS setBarrelRadius setEndcapAlpha setEndcapRadius setInterceptInner setEtaMap etaBin
Definition: L2StandAloneMuon_v1.cxx:149
xAOD::TauJet_v3::clearProtoPi0PFOLinks
void clearProtoPi0PFOLinks()
Remove all cellbased_pi0 PFOs from the tau.
Definition: TauJet_v3.cxx:945
xAOD::CaloCluster_v1::eta
virtual double eta() const
The pseudorapidity ( ) of the particle.
Definition: CaloCluster_v1.cxx:251
lumiFormat.i
int i
Definition: lumiFormat.py:85
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
xAOD::TauJet_v3
Class describing a tau jet.
Definition: TauJet_v3.h:41
TauPi0Selector::m_clusterEtCut
Gaudi::Property< std::vector< double > > m_clusterEtCut
Definition: TauPi0Selector.h:37
xAOD::PFO_v1::p4
virtual FourMom_t p4() const
The full 4-momentum of the particle.
Definition: PFO_v1.cxx:95
SG::AuxElement::index
size_t index() const
Return the index of this element within its container.
xAOD::PFO_v1::bdtPi0Score
float bdtPi0Score() const
get BDT Score used to classify clusters as Pi0 like or not
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
xAOD::TauJetParameters::Mode_3p0n
@ Mode_3p0n
Definition: TauDefs.h:389
xAOD::PFO_v1
Class describing a particle flow object.
Definition: PFO_v1.h:35
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
xAOD::TauJet_v3::addProtoPi0PFOLink
void addProtoPi0PFOLink(const ElementLink< PFOContainer > &pfo)
add a cellbased_pi0 PFO to the tau
Definition: TauJet_v3.cxx:939
xAOD::PFODetails::nPi0Proto
@ nPi0Proto
Definition: Event/xAOD/xAODPFlow/xAODPFlow/PFODefs.h:31
xAOD::TauJetParameters::PanTau_DecayModeProto
@ PanTau_DecayModeProto
Definition: TauDefs.h:359
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
xAOD::TauJet_v3::p4
virtual FourMom_t p4() const
The full 4-momentum of the particle.
Definition: TauJet_v3.cxx:96
xAOD::TauJetParameters::Mode_3pXn
@ Mode_3pXn
Definition: TauDefs.h:390
xAOD::TauJet_v3::protoNeutralPFO
const PFO * protoNeutralPFO(size_t i) const
Get the pointer to a given cellbased_neutral PFO associated with this tau.
xAOD::PFO_v1::cluster
const CaloCluster * cluster(unsigned int index) const
Retrieve a const pointer to a CaloCluster.
Definition: PFO_v1.cxx:669
DataVector::at
const T * at(size_type n) const
Access an element, as an rvalue.
xAOD::PFO_v1::setAttribute
void setAttribute(PFODetails::PFOAttributes AttributeType, const T &anAttribute)
Set a PFO Variable via enum - overwrite is allowed.
xAOD::TauJetParameters::Mode_NotSet
@ Mode_NotSet
Definition: TauDefs.h:392
TauPi0Selector::m_maxDeltaRNeutral
Gaudi::Property< double > m_maxDeltaRNeutral
Definition: TauPi0Selector.h:38
TauPi0Selector::getEtaBin
int getEtaBin(double eta) const
Get eta bin of Pi0Cluster.
Definition: TauPi0Selector.cxx:98
TauPi0Selector::m_clusterBDTCut_mprong
Gaudi::Property< std::vector< double > > m_clusterBDTCut_mprong
Definition: TauPi0Selector.h:40
xAOD::TauJetParameters::Mode_Other
@ Mode_Other
Definition: TauDefs.h:391
TauPi0Selector::m_clusterBDTCut_1prong
Gaudi::Property< std::vector< double > > m_clusterBDTCut_1prong
Definition: TauPi0Selector.h:39