ATLAS Offline Software
Loading...
Searching...
No Matches
PanTauSeed.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
7
8// default constructor
27
28
29// destructor
31{
32 if(m_Features != nullptr) delete m_Features;
33
34 //delete the constituents
35 for(unsigned int iConst=0; iConst<m_ConstituentsList_All.size(); iConst++) {
37 if(curConst != nullptr) delete curConst;
38 }
42
43 // also clear the constituent matrix
44 // dont delete the entries as they point to the (at this point already deleted) constituents in m_ConstituentsList
45 for(unsigned int iType=0; iType<m_Constituents.size(); iType++) {
46 std::vector<PanTau::TauConstituent*> curConsts = m_Constituents[iType];
47 curConsts.clear();
48 }
49 m_Constituents.clear();
50}
51
52
53//copy constructor
73
74
76{
77 if (this != &seed){
78
79 if (!this->container() && !this->hasStore() ) {
81 }
82 this->IParticle::operator=( seed );
83 this->m_p4 = seed.m_p4;
84 m_IsValidSeed = seed.m_IsValidSeed;
85 m_TechnicalQuality = seed.m_TechnicalQuality;
86 m_TauJet = seed.m_TauJet;
87 m_Constituents = seed.m_Constituents;
88 m_TypeHLVs = seed.m_TypeHLVs;
89 m_ConstituentsList_Core = seed.m_ConstituentsList_Core;
90 m_ConstituentsList_AllSelected = seed.m_ConstituentsList_AllSelected;
91 m_ConstituentsList_All = seed.m_ConstituentsList_All;
92 m_decayModeHack_CellBasedShots = seed.m_decayModeHack_CellBasedShots;
93
94 if(m_Features) delete m_Features;
95 m_Features = (seed.m_Features ? new PanTau::TauFeature(*seed.m_Features) : nullptr);
96 }
97 return *this;
98}
99
100
102 // static Accessor< float > acc( "pt" );
103 // return acc( *this );
104 return p4().Pt();
105}
106
108 // static Accessor<float > acc( "eta" );
109 // return acc( *this );
110 return p4().Eta();
111}
112
114 // static Accessor< float > acc( "phi" );
115 // return acc( *this );
116 return p4().Phi();
117}
118
119double PanTau::PanTauSeed::m() const {
120 // static Accessor< float> acc( "m" );
121 // return acc( *this );
122 return p4().M();
123}
124
126 return p4().E();
127}
128
130 return p4().Rapidity();
131}
132
136
137void PanTau::PanTauSeed::setP4(float pt, float eta, float phi, float m){
138 static const Accessor< float > acc1( "pt" );
139 acc1( *this ) = pt;
140 static const Accessor< float > acc2( "eta" );
141 acc2( *this ) = eta;
142 static const Accessor< float > acc3( "phi" );
143 acc3( *this ) = phi;
144 static const Accessor< float > acc4( "m" );
145 acc4( *this ) = m;
146 //Need to recalculate m_p4
147 m_p4.SetPtEtaPhiM( pt, eta, phi, m);
148}
149
151 static const Accessor< float > acc( "pt" );
152 acc( *this ) = pt;
153 //Need to recalculate m_p4
154 m_p4.SetPtEtaPhiM( pt, eta(), phi(), m());
155}
156
158 static const Accessor< float > acc( "eta" );
159 acc( *this ) = eta;
160 //Need to recalculate m_p4
161 m_p4.SetPtEtaPhiM( pt(), eta, phi(), m());
162}
163
165 static const Accessor< float > acc( "phi" );
166 acc( *this ) = phi;
167 //Need to recalculate m_p4
168 m_p4.SetPtEtaPhiM( pt(), eta(), phi, m());
169}
170
172 static const Accessor< float > acc( "m" );
173 acc( *this ) = m;
174 //Need to recalculate m_p4
175 m_p4.SetPtEtaPhiM( pt(), eta(), phi(), m);
176}
177
178
182
183
184
187 const std::vector<PanTau::TauConstituent*>& tauConstituents,
188 const std::vector<PanTau::TauConstituent*>& tauConstituentsAll,
189 const std::vector<int>& pantauSeed_TechnicalQuality
190 )
191 :
192 IParticle()
193{
194
195 // *This may be a bug!!! change to Set*Pt*EtaPhiM?? ***
196 // PanTau::SetP4EEtaPhiM( m_p4, tauJet->ptIntermediateAxis() * cosh( tauJet->etaIntermediateAxis() ), tauJet->etaIntermediateAxis(), tauJet->phiIntermediateAxis(), tauJet->mIntermediateAxis() );
197 m_p4.SetPtEtaPhiM(tauJet->ptIntermediateAxis(), tauJet->etaIntermediateAxis(), tauJet->phiIntermediateAxis(), tauJet->mIntermediateAxis() );
198 m_IsValidSeed = true;
199 m_TechnicalQuality = pantauSeed_TechnicalQuality;
200 m_TauJet = tauJet;
203
204 //save a copy of the flat constituents list and also split into core/wide constituents
205 m_ConstituentsList_All = tauConstituentsAll;
206 m_ConstituentsList_AllSelected = tauConstituents; //all types are in here, this is the complete list
207 for(unsigned int iConst=0; iConst<tauConstituents.size(); iConst++) {
208 bool isCoreChrg = tauConstituents[iConst]->isOfType(PanTau::TauConstituent::t_Charged);
209 bool isCoreNeut = tauConstituents[iConst]->isOfType(PanTau::TauConstituent::t_Neutral);
210 bool isCorePi0 = tauConstituents[iConst]->isOfType(PanTau::TauConstituent::t_Pi0Neut);
211
212 if(isCoreChrg || isCoreNeut || isCorePi0) m_ConstituentsList_Core.push_back(tauConstituents[iConst]); // Core only contains the currently used objects
213
214 }
215
216 //create the constituents lists
217 for(int iType=0; iType<PanTau::TauConstituent::t_nTypes; iType++) {
218 m_Constituents.emplace_back(0 );
219 m_TypeHLVs.emplace_back(0,0,0,0 );
220 }
221
222 //assign tauConstituents
223 TLorentzVector hlv_SumConstituents_Core = TLorentzVector(0,0,0,0);
224
225 int nCharged = 0;
226 int nPi0Neut = 0;
227
228 for(unsigned int iConst=0; iConst<tauConstituents.size(); iConst++) {
229 PanTau::TauConstituent* curConst = tauConstituents.at(iConst);
230 std::vector<int> curTypes = curConst->getTypeFlags();
231
232 for(unsigned int curType=0; curType<curTypes.size(); curType++) {
233 if(curTypes.at(curType) == 0) continue;
234
235 if(curType == static_cast<int>(PanTau::TauConstituent::t_Charged)) nCharged++;
236 if(curType == static_cast<int>(PanTau::TauConstituent::t_Pi0Neut)) nPi0Neut++;
237
238 if((unsigned int)curType >= m_Constituents.size()) {
239 continue;
240 }
241
242 //fill into sorted lists
243 m_Constituents.at(curType).push_back(curConst);
244 m_TypeHLVs.at(curType) += curConst->p4();
245
246 }//end loop over types
247
248 //add all charged and neutral constituents (i.e. from core region) to core proto momentum
249 if(curConst->isOfType(PanTau::TauConstituent::t_Charged)) {hlv_SumConstituents_Core += curConst->p4(); continue;}
250 if(curConst->isOfType(PanTau::TauConstituent::t_Pi0Neut)) {hlv_SumConstituents_Core += curConst->p4(); continue;}
251
252 }//end loop over constituents
253 m_ProtoMomentum_Core = hlv_SumConstituents_Core;
254
255 //set mode as obtained from subalg
258
261 }
262
263}
264
265
268 const std::vector<int>& pantauSeed_TechnicalQuality)
269 :
270 IParticle(),
272 m_TypeHLVs(),
278{
279 // *This may be a bug!!! change to Set*Pt*EtaPhiM?? ***
280 // PanTau::SetP4EEtaPhiM( m_p4, tauJet->ptIntermediateAxis() * cosh( tauJet->etaIntermediateAxis() ), tauJet->etaIntermediateAxis(), tauJet->phiIntermediateAxis(), tauJet->mIntermediateAxis() );
281 m_p4.SetPtEtaPhiM(tauJet->ptIntermediateAxis(), tauJet->etaIntermediateAxis(), tauJet->phiIntermediateAxis(), tauJet->mIntermediateAxis() );
282 m_IsValidSeed = false;
283 m_TechnicalQuality = pantauSeed_TechnicalQuality;
284 m_TauJet = tauJet;
286}
287
288
289int PanTau::PanTauSeed::getDecayMode(int nCharged, int nNeutral) {
290
291 int decayMode;
292
293 // 1 Prong modes
294 if(nCharged == 1 && nNeutral == 0) decayMode = static_cast<int>(xAOD::TauJetParameters::Mode_1p0n);
295 else if(nCharged == 1 && nNeutral == 1) decayMode = static_cast<int>(xAOD::TauJetParameters::Mode_1p1n);
296 else if(nCharged == 1 && nNeutral > 1) decayMode = static_cast<int>(xAOD::TauJetParameters::Mode_1pXn);
297 // 3 prong modes
298 else if(nCharged == 3 && nNeutral == 0) decayMode = static_cast<int>(xAOD::TauJetParameters::Mode_3p0n);
299 else if(nCharged == 3 && nNeutral > 0) decayMode = static_cast<int>(xAOD::TauJetParameters::Mode_3pXn);
300 // other mode
301 else if(nCharged == 2) decayMode = static_cast<int>(xAOD::TauJetParameters::Mode_Other);
302 else if(nCharged == 4) decayMode = static_cast<int>(xAOD::TauJetParameters::Mode_Other);
303 else if(nCharged == 5) decayMode = static_cast<int>(xAOD::TauJetParameters::Mode_Other);
304 else if(nCharged == 0) decayMode = static_cast<int>(xAOD::TauJetParameters::Mode_NotSet);
305 else if(nCharged >= 6) decayMode = static_cast<int>(xAOD::TauJetParameters::Mode_NotSet);
306 else decayMode = static_cast<int>(xAOD::TauJetParameters::Mode_Error);
307
308 return decayMode;
309}
310
311
312std::string PanTau::PanTauSeed::getDecayModeName(int decayMode) {
313
315
316 if(mode == xAOD::TauJetParameters::Mode_1p0n) return "1p0n";
317 if(mode == xAOD::TauJetParameters::Mode_1p1n) return "1p1n";
318 if(mode == xAOD::TauJetParameters::Mode_1pXn) return "1pXn";
319 if(mode == xAOD::TauJetParameters::Mode_3p0n) return "3p0n";
320 if(mode == xAOD::TauJetParameters::Mode_3pXn) return "3pXn";
321 if(mode == xAOD::TauJetParameters::Mode_Other) return "Other";
322 if(mode == xAOD::TauJetParameters::Mode_Error) return "Error";
323 if(mode == xAOD::TauJetParameters::Mode_NotSet) return "NotSet";
324 return "InvalidMode!!!";
325}
326
327
328bool PanTau::PanTauSeed::isOfTechnicalQuality(int pantauSeed_TechnicalQuality) const {
329 if(pantauSeed_TechnicalQuality > PanTau::PanTauSeed::t_nTechnicalQualities) {
330 return false;
331 }
332 if(m_TechnicalQuality[pantauSeed_TechnicalQuality] == 1) return true;
333 return false;
334}
335
336
337std::vector<PanTau::TauConstituent*> PanTau::PanTauSeed::getConstituentsOfType(int tauConstituent_Type, bool& foundit) {
338 if(tauConstituent_Type > PanTau::TauConstituent::t_nTypes) {
339 foundit = false;
340 return std::vector<TauConstituent*>(0);
341 }
342 foundit = true;
343 if(tauConstituent_Type == static_cast<int>(PanTau::TauConstituent::t_NoType)) return m_ConstituentsList_AllSelected;
344 return m_Constituents.at(tauConstituent_Type);
345}
346
347
349 bool isOK = false;
350 std::vector<PanTau::TauConstituent*> consts = this->getConstituentsOfType(tauConstituent_Type, isOK);
351 if(isOK) {
352 return static_cast<int>(consts.size());
353 }
354 return -1;
355}
356
357
358TLorentzVector PanTau::PanTauSeed::getSubsystemHLV(int tauConstituent_Type, bool& foundit) {
359 if(tauConstituent_Type > PanTau::TauConstituent::t_nTypes) {
360 foundit = false;
361 return {0,0,0,0};
362 }
363 foundit = true;
364 return m_TypeHLVs.at(tauConstituent_Type);
365}
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
virtual double eta() const
The pseudorapidity ( ) of the particle.
bool m_decayModeHack_CellBasedShots
Definition PanTauSeed.h:198
std::vector< PanTau::TauConstituent * > m_ConstituentsList_AllSelected
Definition PanTauSeed.h:188
virtual FourMom_t p4() const
The full 4-momentum of the particle as a TLoretzVector.
static std::string getDecayModeName(int decayMode)
void setEta(float eta)
set the eta
std::vector< PanTau::TauConstituent * > getConstituentsOfType(int tauConstituent_Type, bool &foundit)
void setPhi(float phi)
set the phi
void setPt(float pt)
set the Pt
virtual xAOD::Type::ObjectType type() const
The type of the object as a simple enumeration, remains pure virtual in e/gamma.
std::vector< PanTau::TauConstituent * > m_ConstituentsList_Core
Definition PanTauSeed.h:187
std::vector< PanTau::TauConstituent * > m_ConstituentsList_All
Definition PanTauSeed.h:192
TLorentzVector m_ProtoMomentum_Core
Definition PanTauSeed.h:178
PanTau::TauFeature * m_Features
flag to indicate whether the decay mode by cellbased was
Definition PanTauSeed.h:203
virtual double m() const
The invariant mass of the particle.
PanTauSeed & operator=(const PanTauSeed &seed)
FourMom_t m_p4
4-momentum object
Definition PanTauSeed.h:161
IParticle::FourMom_t FourMom_t
Definition of the 4-momentum type.
Definition PanTauSeed.h:90
int getNumberOfConstituentsOfType(int tauConstituent_Type)
virtual double pt() const
The transverse momentum ( ) of the particle.
std::vector< TLorentzVector > m_TypeHLVs
Definition PanTauSeed.h:184
void setP4(float pt, float eta, float phi, float m)
set the 4-vec
std::vector< std::vector< PanTau::TauConstituent * > > m_Constituents
Definition PanTauSeed.h:175
bool isOfTechnicalQuality(int pantauSeed_TechnicalQuality) const
virtual double e() const
The total energy of the particle.
static int getDecayMode(int nCharged, int nNeutral)
virtual double rapidity() const
The true rapidity (y) of the particle.
virtual double phi() const
The azimuthal angle ( ) of the particle.
TLorentzVector getSubsystemHLV(int tauConstituent_Type, bool &foundit)
void setM(float m)
set the Mass
xAOD::TauJet * m_TauJet
Definition PanTauSeed.h:171
std::vector< int > m_TechnicalQuality
Definition PanTauSeed.h:168
Input object for PanTau.
virtual FourMom_t p4() const
The full 4-momentum of the particle as a TLorentzVector.
bool isOfType(TauConstituent::Type aType) const
const std::vector< int > & getTypeFlags() const
Class containing features of a tau seed.
Definition TauFeature.h:19
void makePrivateStore()
Create a new (empty) private store for this object.
bool hasStore() const
Return true if this object has an associated store.
const SG::AuxVectorData * container() const
Return the container holding this element.
IParticle()=default
SG::Accessor< T, ALLOC > Accessor
Definition AuxElement.h:572
double ptIntermediateAxis() const
double mIntermediateAxis() const
double etaIntermediateAxis() const
double phiIntermediateAxis() const
ObjectType
Type of objects that have a representation in the xAOD EDM.
Definition ObjectType.h:32
@ Tau
The object is a tau (jet)
Definition ObjectType.h:49
TauJet_v3 TauJet
Definition of the current "tau version".