ATLAS Offline Software
Loading...
Searching...
No Matches
TrigTauCluster.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/*******************************************************
7
8NAME: TrigTauCluster.cxx
9PACKAGE: Trigger/TrigEvent/TrigCaloEvent
10AUTHORS: Denis O. Damazio, Carlos Osuna, Xin Wu
11
12PURPOSE: Keep the important output variables
13 from the Calorimeter LVL2 Tau Trigger.
14 Optionally seed ID Trigger and EF.
15 Variables here should be RAW variables
16 not corrected.
17INHERITFROM: TrigCaloCluster
18DATE: October 17th, 2005
19
20******************************************************/
21
22
24#include <cmath>
25
26TrigTauCluster::TrigTauCluster(float energy, float eta, float phi, long roi_word) :
28{
29 setRoIword(roi_word);
30 m_EMenergy = 0;
31 m_HADenergy = 0;
32 m_eCalib = 0;
33 m_EMRadius2 = 0;
34 m_CaloRadius = 0;
35 m_IsoFrac = 0;
37 m_numTotCells = 0;
38 m_stripWidth = 0;
40 m_EMRadius3S = 0;
41 m_CoreFrac = 0;
42 m_EMFrac = 0;
43 m_HadRadius = 0;
44 m_clusterDetails.reset();
45}
46
47
49 unsigned int details_index, float energy,
50 float eta, float phi, long roi_word) :
52{
53 setRoIword(roi_word);
54 m_EMenergy = 0;
55 m_HADenergy = 0;
56 m_eCalib = 0;
57 m_EMRadius2 = 0;
58 m_CaloRadius = 0;
59 m_IsoFrac = 0;
61 m_numTotCells = 0;
62 m_stripWidth = 0;
64 m_EMRadius3S = 0;
65 m_CoreFrac = 0;
66 m_EMFrac = 0;
67 m_HadRadius = 0;
68
70 if(details_cont != NULL && details_cont->size() > details_index)
71 {
72 m_clusterDetails.toIndexedElement(*details_cont, details_index);
73 if(!m_clusterDetails.isValid())
74 {
75 m_clusterDetails.reset();
76 m_valid=false;
77 }
78 }
79}
80
81// Destructor
85
86// Copy constructor (Note that also the base class is copied)
88 m_EMenergy(ttc->EMenergy()),
89 m_HADenergy(ttc->HADenergy()),
90 m_eCalib(ttc->eCalib()),
91 m_EMRadius2(ttc->EMRadius2()),
93 m_IsoFrac(ttc->IsoFrac()),
99 m_CoreFrac(ttc->CoreFrac()),
100 m_EMFrac(ttc->EMFrac()),
101 m_HadRadius(ttc->HadRadius()),
102 m_valid(false)
103{
104 //set ElementLink to cluster
105 if(m_clusterDetails.isValid())
106 {
107 m_clusterDetails.toIndexedElement(ttc->m_clusterDetails.getStorableObjectRef(), ttc->m_clusterDetails.index());
108 }
109 else
110 {
111 m_clusterDetails.reset();
112 }
113}
114
115// Simple debug method using MsgStream
116void TrigTauCluster::print(void) const
117{
119 std::cout << "m_EMenergy : " << m_EMenergy << "; ";
120 std::cout << "m_HADenergy : " << m_HADenergy << "; ";
121 std::cout << "m_eCalib : " << m_eCalib << "; ";
122 std::cout << "Eta : " << eta() << "; ";
123 std::cout << "Phi : " << phi() << "; ";
124 std::cout << "m_numStripCells : " << m_numStripCells << "; ";
125 std::cout << "m_numTotCells : " << m_numTotCells << "; ";
126/* std::cout << "m_EMenergyNarrow: ";
127 for ( int i = 0 ; i < NUMEMSAMP ; i++ )
128 std::cout << trigtauDetails->EMenergyNarrow(i) << "; ";
129 std::cout << std::endl;
130 std::cout << "m_HADenergyNarrow: ";
131 for ( int i = 0 ; i < NUMHADSAMP ; i++ )
132 std::cout << trigtauDetails->HADenergyNarrow(i) << "; ";
133 std::cout << std::endl; */
134}
135
136// Simple debug method using MsgStream
137void TrigTauCluster::print ( MsgStream& log ) const
138{
140 log << MSG::DEBUG << "mEMenergy : " << m_EMenergy << "; ";
141 log << MSG::DEBUG << "m_HADenergy : " << m_HADenergy << "; ";
142 log << MSG::DEBUG << "m_eCalib : " << m_eCalib << "; ";
143 log << MSG::DEBUG << "Eta : " << eta() << "; ";
144 log << MSG::DEBUG << "Phi : " << phi() << "; ";
145 log << MSG::DEBUG << "m_numStripCells : " << m_numStripCells << "; ";
146 log << MSG::DEBUG << "m_numTotCells : " << m_numTotCells << "; ";
147/* log <<MSG::DEBUG<< "m_EMenergyNarrow : ";
148 for ( int i = 0 ; i < NUMEMSAMP ; i++ )
149 log <<MSG::DEBUG<< trigtauDetails->EMenergyNarrow(i) << "; ";
150 log << endmsg;
151 log <<MSG::DEBUG<< "m_HADenergyNarrow : ";
152 for ( int i = 0 ; i < NUMHADSAMP ; i++ )
153 log <<MSG::DEBUG<< trigtauDetails->HADenergyNarrow(i) << "; ";
154 log << endmsg; */
155}
156
158{
159 if(m_clusterDetails.isValid())
160 {
161 return (*m_clusterDetails);
162 }
163 else
164 {
165 return NULL;
166 }
167}
168
174
179
180
181bool operator== (const TrigTauCluster& clus1, const TrigTauCluster& clus2 )
182{
183 if(static_cast<const TrigCaloCluster&>(clus1) != static_cast<const TrigCaloCluster&>(clus2))
184 {
185 return false;
186 }
187
188 double epsilon=0.001;
189 if(std::fabs(clus1.EMenergy() - clus2.EMenergy()) > epsilon) return false;
190 if(std::fabs(clus1.HADenergy() - clus2.HADenergy()) > epsilon) return false;
191 if(std::fabs(clus1.eCalib() - clus2.eCalib()) > epsilon) return false;
192 if(std::fabs(clus1.EMRadius2() - clus2.EMRadius2()) > epsilon) return false;
193 if(std::fabs(clus1.CaloRadius() - clus2.CaloRadius()) > epsilon) return false;
194 if(std::fabs(clus1.IsoFrac() - clus2.IsoFrac()) > epsilon) return false;
195 if(std::abs(clus1.numStripCells() - clus2.numStripCells()) > epsilon) return false;
196 if(std::abs(clus1.numTotCells() - clus2.numTotCells()) > epsilon) return false;
197 if(std::fabs(clus1.stripWidth() - clus2.stripWidth()) > epsilon) return false;
198 if(std::fabs(clus1.stripWidthOffline() - clus2.stripWidthOffline() ) > epsilon) return false;
199 if(std::fabs(clus1.EMRadius3S() - clus2.EMRadius3S()) > epsilon) return false;
200 if(std::fabs(clus1.CoreFrac() - clus2.CoreFrac()) > epsilon) return false;
201 if(std::fabs(clus1.EMFrac() - clus2.EMFrac()) > epsilon) return false;
202 if(std::fabs(clus1.HadRadius() - clus2.HadRadius()) > epsilon) return false;
203
204 if(clus1.clusterDetails() != 0 && clus2.clusterDetails() != 0 && clus1.clusterDetails() != clus2.clusterDetails())
205 {
206 return false;
207 }
208
209 return true;
210}
211
212std::string str(const TrigTauCluster& tau)
213{
214 std::stringstream stream;
215 stream << str(static_cast<const TrigCaloCluster&>(tau))
216 << "; EMenergy:" << tau.EMenergy()
217 << "; HADenergy:" << tau.HADenergy()
218 << "; eCalib:" << tau.eCalib()
219 << "; EMRadius2:" << tau.EMRadius2()
220 << "; CaloRadius:" << tau.CaloRadius()
221 << "; IsoFrac:" << tau.IsoFrac()
222 << "; numStripCells:" << tau.numStripCells()
223 << "; numTotCells:" << tau.numTotCells()
224 << "; stripWidth:" << tau.stripWidth()
225 << "; stripWidthOffline:" << tau.stripWidthOffline()
226 << "; EMRadius3S:" << tau.EMRadius3S()
227 << "; CoreFrac:" << tau.CoreFrac()
228 << "; EMFrac:" << tau.EMFrac()
229 << "; HadRadius:" << tau.HadRadius();
230 if(tau.clusterDetails() != 0)
231 {
232 stream << "; " << str(*tau.clusterDetails());
233 }
234
235 return stream.str();
236}
237
238MsgStream& operator<< (MsgStream& m, const TrigTauCluster& tau)
239{
240 return (m << str(tau));
241}
242
243
244void diff(const TrigTauCluster& clus1, const TrigTauCluster& clus2, std::map< std::string, double >& varChange)
245{
246 const double epsilon = 0.001;
247 diff(static_cast<const TrigCaloCluster&>(clus1), static_cast<const TrigCaloCluster&>(clus2), varChange);
248
249 if(std::fabs(clus1.EMenergy() - clus2.EMenergy()) > epsilon)
250 {
251 varChange["EMEnergy"] = clus1.EMenergy() - clus2.EMenergy();
252 }
253 if(std::fabs(clus1.HADenergy() - clus2.HADenergy()) > epsilon)
254 {
255 varChange["HADenergy"] = clus1.HADenergy() - clus2.HADenergy();
256 }
257 if(std::fabs(clus1.eCalib() - clus2.eCalib()) > epsilon)
258 {
259 varChange["eCalib"] = clus1.eCalib() - clus2.eCalib();
260 }
261 if(std::fabs(clus1.EMRadius2() - clus2.EMRadius2()) > epsilon)
262 {
263 varChange["EMRadius2"] = clus1.EMRadius2() - clus2.EMRadius2();
264 }
265 if(std::fabs(clus1.CaloRadius() - clus2.CaloRadius()) > epsilon)
266 {
267 varChange["CaloRadius"] = clus1.CaloRadius() - clus2.CaloRadius();
268 }
269 if(std::fabs(clus1.IsoFrac() - clus2.IsoFrac()) > epsilon)
270 {
271 varChange["IsoFrac"] = clus1.IsoFrac() - clus2.IsoFrac();
272 }
273 if(std::abs(clus1.numStripCells() - clus2.numStripCells()) > epsilon)
274 {
275 varChange["numStripCells"] = clus1.numStripCells() - clus2.numStripCells();
276 }
277 if(std::abs(clus1.numTotCells() - clus2.numTotCells()) > epsilon)
278 {
279 varChange["numTotCells"] = clus1.numTotCells() - clus2.numTotCells();
280 }
281 if(std::fabs(clus1.stripWidth() - clus2.stripWidth()) > epsilon)
282 {
283 varChange["stripWidth"] = clus1.stripWidth() - clus2.stripWidth();
284 }
285 if(std::fabs(clus1.stripWidthOffline() - clus2.stripWidthOffline()) > epsilon)
286 {
287 varChange["stripWidthOffline"] = clus1.stripWidthOffline() - clus2.stripWidthOffline();
288 }
289 if(std::fabs(clus1.EMRadius3S() - clus2.EMRadius3S()) > epsilon)
290 {
291 varChange["EMRadius3S"] = clus1.EMRadius3S() - clus2.EMRadius3S();
292 }
293 if(std::fabs(clus1.CoreFrac() - clus2.CoreFrac()) > epsilon)
294 {
295 varChange["CoreFrac"] = clus1.CoreFrac() - clus2.CoreFrac();
296 }
297 if(std::fabs(clus1.EMFrac() - clus2.EMFrac()) > epsilon)
298 {
299 varChange["EMFrac"] = clus1.EMFrac() - clus2.EMFrac();
300 }
301 if(std::fabs(clus1.HadRadius() - clus2.HadRadius()) > epsilon)
302 {
303 varChange["HadRadius"] = clus1.HadRadius() - clus2.HadRadius();
304 }
305
306 if(clus1.clusterDetails() != 0 && clus2.clusterDetails() == 0)
307 {
308 varChange["clusterDetails "] = 1;
309 }
310 else if(clus1.clusterDetails() == 0 && clus2.clusterDetails() != 0)
311 {
312 varChange["clusterDetails "] = -1;
313 }
314 else if(clus1.clusterDetails() != 0 && clus2.clusterDetails() != 0 && clus1.clusterDetails() != clus2.clusterDetails())
315 {
316 diff(clus1.clusterDetails(), clus2.clusterDetails(), varChange);
317 }
318 return;
319}
320// End of file TrigTauCluster.cxx
MsgStream & operator<<(MsgStream &m, const TrigTauCluster &tau)
Helper operator for printing the object.
bool operator==(const TrigTauCluster &clus1, const TrigTauCluster &clus2)
Operator comparing two TrigTauCluster objects for equality.
void diff(const TrigTauCluster &clus1, const TrigTauCluster &clus2, std::map< std::string, double > &varChange)
Comparison with feedback.
size_type size() const noexcept
Returns the number of elements in the collection.
TrigCaloCluster(float energy=0.0, float eta=-10.0, float phi=-10.0, long roi_word=0)
Constructor, please note the default values.
void print(void) const
Prints out cluster variables to std::cout.
Container from TrigTauClusterDetails type objects.
Class with calibrated variables for tau clustering.
float HadRadius() const
get Hadronic Radius
int numStripCells() const
get Number of fired strips
float EMRadius3S() const
get EM Radius 3S
float CoreFrac() const
get Core Fraction
const TrigTauClusterDetails * clusterDetails() const
accessor to TrigTauClusterDetails*
TrigTauCluster(float energy=0.0, float eta=-10.0, float phi=-10.0, long roi_word=0)
Constructors, please note the default values.
~TrigTauCluster()
Destructor.
float eta() const
get Eta of the cluster
float EMRadius2() const
get EM Radius
float eCalib() const
get Calibrated Energy
float stripWidthOffline() const
get Width as in offline
float m_stripWidth
Width in the strip sampling.
float m_CaloRadius
Total Calo Radius.
float m_IsoFrac
Isolation Fraction.
float m_EMenergy
EM Energy.
float m_EMRadius2
EM Radius.
ElementLink< TrigTauClusterDetailsContainer > m_clusterDetails
ElementLink to TrigTauClusterDetailsContainer.
float phi() const
get Phi of the cluster
float m_HADenergy
HAD Energy.
float m_EMFrac
EM Fraction.
float stripWidth() const
get Width in the strip sampling
int numTotCells() const
get Number of total cells in the cluster
const ElementLink< TrigTauClusterDetailsContainer > & clusterDetailsLink() const
float EMenergy() const
get EM Energy
float CaloRadius() const
get Total Calo Radius
float m_stripWidthOffline
Width calculated as in Offline tauRec.
void setClusterDetails(const ElementLink< TrigTauClusterDetailsContainer > &clusterDetailsLink)
float HADenergy() const
get HAD Energy
float energy() const
get Raw Energy
float m_eCalib
Calibrated Energy.
float m_EMRadius3S
EM Radius 3S.
int m_numTotCells
Total number of cells in the cluster.
float m_HadRadius
Hadronic Radius.
float IsoFrac() const
get Isolation Fraction
int m_numStripCells
Number of fired strips.
float EMFrac() const
get EM Fraction
float m_CoreFrac
Core Fraction.
void print(void) const
Prints out cluster variables to std::cout.