ATLAS Offline Software
Loading...
Searching...
No Matches
TrigMissingET.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
8#include "GaudiKernel/MsgStream.h"
9
10#include <stdio.h>
11#include <string.h>
12
13
14
16 m_ex(0), m_ey(0), m_ez(0), m_sum_et(0), m_sum_e(0),
17 m_flag(0), m_roiWord(0)
18{
20 // 1. muons + all calo samplings in barrel + calo samplings in both end-caps
21 char names25[25][6] = {"EMB0", "EMB1", "EMB2", "EMB3",
22 "EME0", "EME1", "EME2", "EME3",
23 "HEC0", "HEC1", "HEC2", "HEC3",
24 "TiB0", "TiB1", "TiB2",
25 "TiG1", "TiG2", "TiG3",
26 "TiE0", "TiE1", "TiE2",
27 "FCa0", "FCa1", "FCa2",
28 "Muon"};
29
30 // 2. only muons
31 char names1[1][6] = {"Muon"};
32
33 // 3. muons + sum of all EM + sum of all HAD
34 char names3[3][6] = {"Muon", "E.M.", "Had."};
35
36 // 4. muons + EM_barrel + EM_endcaps + HAD_barrel + HAD_endcaps
37 char names5[5][6] = {"Muon", "EM_B", "EM_E", "HadB", "HadE"};
38
39 if (n>0) m_compVec.reserve(n);
40 for (int i=0; i<n; ++i) {
42 if (n==25) {
43 c.setName(names25[i]);
44 } else if (n==1) {
45 c.setName(names1[i]);
46 } else if (n==3) {
47 c.setName(names3[i]);
48 } else if (n==5) {
49 c.setName(names5[i]);
50 } else {
51 c.setName("????");
52 }
53 m_compVec.push_back(c);
54 }
55}
56
57
58TrigMissingET::TrigMissingET(std::vector< TrigMissingEtComponent >&& compVec)
59 : m_ex(0), m_ey(0), m_ez(0), m_sum_et(0), m_sum_e(0),
60 m_flag(0), m_roiWord(0),
61 m_compVec (std::move(compVec))
62{
63}
64
65
66
67
69{
70
71 m_ex=0;
72 m_ey=0;
73 m_ez=0;
74 m_sum_et=0;
75 m_sum_e=0;
76 m_flag=0;
77
78 for (unsigned int i=0; i<m_compVec.size(); ++i) {
79 m_compVec[i].reset();
80 }
81
82}
83
84
85std::string TrigMissingET::getNameOfComponent(unsigned int index) const
86{
87 if (index < m_compVec.size())
88 return m_compVec[index].name();
89 else
90 return std::string("WRONG INDEX!");
91}
92
93
94float TrigMissingET::getExComponent(unsigned int index) const{
95 if (index < m_compVec.size())
96 return m_compVec[index].ex();
97 else
98 return 0; //<! safe but silent!
99}
100
101
102float TrigMissingET::getEyComponent(unsigned int index) const{
103 if (index < m_compVec.size())
104 return m_compVec[index].ey();
105 else
106 return 0; //<! safe but silent!
107}
108
109
110float TrigMissingET::getEzComponent(unsigned int index) const{
111 if (index < m_compVec.size())
112 return m_compVec[index].ez();
113 else
114 return 0; //<! safe but silent!
115}
116
117
118float TrigMissingET::getSumEtComponent(unsigned int index) const{
119 if (index < m_compVec.size())
120 return m_compVec[index].sumEt();
121 else
122 return 0; //<! safe but silent!
123}
124
125
126float TrigMissingET::getSumEComponent(unsigned int index) const{
127 if (index < m_compVec.size())
128 return m_compVec[index].sumE();
129 else
130 return 0; //<! safe but silent!
131}
132
133
134short TrigMissingET::getSumOfSigns(unsigned int index) const{
135 if (index < m_compVec.size())
136 return m_compVec[index].sumOfSigns();
137 else
138 return 0; //<! safe but silent!
139}
140
141
142unsigned short TrigMissingET::getUsedChannels(unsigned int index) const{
143 if (index < m_compVec.size())
144 return m_compVec[index].usedChannels();
145 else
146 return 0; //<! safe but silent!
147}
148
149
150short TrigMissingET::getStatus(unsigned int index) const{
151 if (index < m_compVec.size())
152 return m_compVec[index].status();
153 else
154 return 0; //<! safe but silent!
155}
156
157
158float TrigMissingET::getComponentCalib0(unsigned int index) const{
159 if (index < m_compVec.size())
160 return m_compVec[index].calib0();
161 else
162 return 0; //<! safe but silent!
163}
164
165
166float TrigMissingET::getComponentCalib1(unsigned int index) const{
167 if (index < m_compVec.size())
168 return m_compVec[index].calib1();
169 else
170 return 0; //<! safe but silent!
171}
172
173
174
175
176void TrigMissingET::setNameOfComponent(unsigned int index, const char* str){
177 if (index < m_compVec.size()) m_compVec[index].setName(str);
178}
179
180
181void TrigMissingET::setExComponent(unsigned int index, float value){
182 if (index < m_compVec.size()) m_compVec[index].setEx(value);
183}
184
185
186void TrigMissingET::setEyComponent(unsigned int index, float value){
187 if (index < m_compVec.size()) m_compVec[index].setEy(value);
188}
189
190
191void TrigMissingET::setEzComponent(unsigned int index, float value){
192 if (index < m_compVec.size()) m_compVec[index].setEz(value);
193}
194
195
196void TrigMissingET::setSumEtComponent(unsigned int index, float value){
197 if (index < m_compVec.size()) m_compVec[index].setSumEt(value);
198}
199
200
201void TrigMissingET::setSumEComponent(unsigned int index, float value){
202 if (index < m_compVec.size()) m_compVec[index].setSumE(value);
203}
204
205
206void TrigMissingET::setComponentCalib0(unsigned int index, float value){
207 if (index < m_compVec.size()) m_compVec[index].setCalib0(value);
208}
209
210
211void TrigMissingET::setComponentCalib1(unsigned int index, float value){
212 if (index < m_compVec.size()) m_compVec[index].setCalib1(value);
213}
214
215
216void TrigMissingET::setSumOfSigns(unsigned int index, short value){
217 if (index < m_compVec.size()) m_compVec[index].setSumOfSigns(value);
218}
219
220
221void TrigMissingET::setUsedChannels(unsigned int index, unsigned short value){
222 if (index < m_compVec.size()) m_compVec[index].setUsedChannels(value);
223}
224
225
226void TrigMissingET::setStatus(unsigned int index, short value){
227 if (index < m_compVec.size()) m_compVec[index].setStatus(value);
228}
229
230
231
232
233
234bool operator== ( const TrigMissingET& a, const TrigMissingET& b ) {
235
236 const double DELTA=1e-3; // distance used to compare floats
237
238 if( a.getNumOfComponents() != b.getNumOfComponents() )
239 return false;
240 if( a.getFlag() != b.getFlag() )
241 return false;
242 if( a.RoIword() != b.RoIword() )
243 return false;
244
245 if( fabsf(a.ex() - b.ex()) > DELTA )
246 return false;
247 if( fabsf(a.ey() - b.ey()) > DELTA )
248 return false;
249 if( fabsf(a.ez() - b.ez()) > DELTA )
250 return false;
251 if( fabsf(a.sumEt() - b.sumEt()) > DELTA )
252 return false;
253 if( fabsf(a.sumE() - b.sumE()) > DELTA )
254 return false;
255
256 for (unsigned u=0; u<a.getNumOfComponents(); ++u) {
257 if( a.getNameOfComponent(u) != b.getNameOfComponent(u) )
258 return false;
259 if( a.getStatus(u) != b.getStatus(u) )
260 return false;
261 if( a.getSumOfSigns(u) != b.getSumOfSigns(u) )
262 return false;
263 if( a.getUsedChannels(u) != b.getUsedChannels(u) )
264 return false;
265 if( fabsf(a.getExComponent(u) - b.getExComponent(u)) > DELTA )
266 return false;
267 if( fabsf(a.getEyComponent(u) - b.getEyComponent(u)) > DELTA )
268 return false;
269 if( fabsf(a.getEzComponent(u) - b.getEzComponent(u)) > DELTA )
270 return false;
271 if( fabsf(a.getSumEtComponent(u) - b.getSumEtComponent(u)) > DELTA )
272 return false;
273 if( fabsf(a.getSumEComponent(u) - b.getSumEComponent(u)) > DELTA )
274 return false;
275 if( fabsf(a.getComponentCalib0(u) - b.getComponentCalib0(u)) > DELTA )
276 return false;
277 if( fabsf(a.getComponentCalib1(u) - b.getComponentCalib1(u)) > DELTA )
278 return false;
279 }
280
281 return true;
282}
283
284
285std::string str (const TrigMissingET& a){
286 std::string s="";
287
289
290 s += strformat("MEx = %10.2f MeV\n", a.ex());
291 s += strformat("MEy = %10.2f MeV\n", a.ey());
292 s += strformat("MEz = %10.2f MeV\n", a.ez());
293
294 float et = std::sqrt(a.ex()*a.ex()+a.ey()*a.ey());
295 s += strformat("MEt = %10.2f MeV\n", et);
296 s += strformat("SumEt = %10.2f MeV\n", a.sumEt());
297 s += strformat("SumE = %10.2f MeV\n", a.sumE());
298
299 s += strformat("Event status = 0x%08x\n", (unsigned)a.getFlag());
300 unsigned int N = a.getNumOfComponents();
301 s += strformat("Auxiliary components = %4u\n", N);
302
303 if (N==0) return s; // basic info only
304
305 // header
306 s += "__name_____status__usedCh.__sumOfSigns__calib1_calib0";
307 s += "/MeV___Ex/MeV_____Ey/MeV_____Ez/MeV___SumE/MeV__SumEt/MeV\n";
308
309 for (unsigned int i=0; i<N; ++i){
310 s += strformat(
311 "%10s 0x%04x %8d %11d %7.2f %8.2f %10.2f %10.2f %10.2f %10.2f %10.2f\n",
312 a.getNameOfComponent(i).c_str(),
313 (unsigned)a.getStatus(i),
314 a.getUsedChannels(i),
315 a.getSumOfSigns(i),
316 a.getComponentCalib1(i),
317 a.getComponentCalib0(i),
318 a.getExComponent(i),
319 a.getEyComponent(i),
320 a.getEzComponent(i),
321 a.getSumEComponent(i),
322 a.getSumEtComponent(i));
323 }
324
325 return s;
326}
327
328
329MsgStream& operator<< (MsgStream& m, const TrigMissingET& d) {
330 return ( m << str( d ) );
331}
332
333
334
335void diff(const TrigMissingET& a, const TrigMissingET& b,
336 std::map<std::string, double>& variableChange){
337
338 const double DELTA=1e-3; // distance used to compare floats
339
340 int Na = a.getNumOfComponents();
341 int Nb = b.getNumOfComponents();
342 if( Na != Nb )
343 variableChange[ "NumOfComponents" ] = Na - Nb;
344
345 unsigned aFlag = (unsigned) a.getFlag();
346 unsigned bFlag = (unsigned) b.getFlag();
347 if( aFlag != bFlag )
348 variableChange[ "FlagsXOR" ] = aFlag ^ bFlag;
349
350 unsigned long aRoI = (unsigned long) a.RoIword();
351 unsigned long bRoI = (unsigned long) b.RoIword();
352 if( aRoI != bRoI )
353 variableChange[ "RoIwordsXOR" ] = aRoI ^ bRoI;
354
355 float aEx = a.ex();
356 float bEx = b.ex();
357 if( fabsf(aEx - bEx) > DELTA )
358 variableChange[ "Ex" ] = aEx - bEx;
359
360 float aEy = a.ey();
361 float bEy = b.ey();
362 if( fabsf(aEy - bEy) > DELTA )
363 variableChange[ "Ey" ] = aEy - bEy;
364
365 float aEz = a.ez();
366 float bEz = b.ez();
367 if( fabsf(aEz - bEz) > DELTA )
368 variableChange[ "Ez" ] = aEz - bEz;
369
370 float aSumEt = a.sumEt();
371 float bSumEt = b.sumEt();
372 if( fabsf(aSumEt - bSumEt) > DELTA )
373 variableChange[ "sumEt" ] = aSumEt - bSumEt;
374
375 float aSumE = a.sumE();
376 float bSumE = b.sumE();
377 if( fabsf(aSumE - bSumE) > DELTA )
378 variableChange[ "sumE" ] = aSumE - bSumE;
379
380 for (unsigned u=0; u<a.getNumOfComponents(); ++u) {
381 std::string num = CxxUtils::strformat("%02u", u);
382 std::string key;
383
384 if( a.getNameOfComponent(u) != b.getNameOfComponent(u) ) {
385 key="CompNameStrCmp"; key+=num;
386 variableChange[ key.c_str() ] =
387 strcmp(a.getNameOfComponent(u).c_str(),
388 b.getNameOfComponent(u).c_str());
389 }
390
391 unsigned aFlag = (unsigned) a.getStatus(u);
392 unsigned bFlag = (unsigned) b.getStatus(u);
393 if( aFlag != bFlag ) {
394 key="CompStatusXOR"; key+=num;
395 variableChange[ key.c_str() ] = aFlag ^ bFlag;
396 }
397
398 int aSigns = a.getSumOfSigns(u);
399 int bSigns = b.getSumOfSigns(u);
400 if( aSigns != bSigns ) {
401 key="CompSumSigns"; key+=num;
402 variableChange[ key.c_str() ] = aSigns - bSigns;
403 }
404
405 int aChans = a.getUsedChannels(u);
406 int bChans = b.getUsedChannels(u);
407 if( aChans != bChans ) {
408 key="CompUsedChans"; key+=num;
409 variableChange[ key.c_str() ] = aChans - bChans;
410 }
411
412 float aEx = a.getExComponent(u);
413 float bEx = b.getExComponent(u);
414 if( fabsf(aEx - bEx) > DELTA ) {
415 key="CompEx"; key+=num;
416 variableChange[ key.c_str() ] = aEx - bEx;
417 }
418
419 float aEy = a.getEyComponent(u);
420 float bEy = b.getEyComponent(u);
421 if( fabsf(aEy - bEy) > DELTA ) {
422 key="CompEy"; key+=num;
423 variableChange[ key.c_str() ] = aEy - bEy;
424 }
425
426 float aEz = a.getEzComponent(u);
427 float bEz = b.getEzComponent(u);
428 if( fabsf(aEz - bEz) > DELTA ) {
429 key="CompEz"; key+=num;
430 variableChange[ key.c_str() ] = aEz - bEz;
431 }
432
433 float aSumEt = a.getSumEtComponent(u);
434 float bSumEt = b.getSumEtComponent(u);
435 if( fabsf(aSumEt - bSumEt) > DELTA ) {
436 key="CompSumEt"; key+=num;
437 variableChange[ key.c_str() ] = aSumEt - bSumEt;
438 }
439
440 float aSumE = a.getSumEComponent(u);
441 float bSumE = b.getSumEComponent(u);
442 if( fabsf(aSumE - bSumE) > DELTA ) {
443 key="CompSumE"; key+=num;
444 variableChange[ key.c_str() ] = aSumE - bSumE;
445 }
446
447 float aCalib0 = a.getComponentCalib0(u);
448 float bCalib0 = b.getComponentCalib0(u);
449 if( fabsf(aCalib0 - bCalib0) > DELTA ) {
450 key="CompCalib0_"; key+=num;
451 variableChange[ key.c_str() ] = aCalib0 - bCalib0;
452 }
453
454 float aCalib1 = a.getComponentCalib1(u);
455 float bCalib1 = b.getComponentCalib1(u);
456 if( fabsf(aCalib1 - bCalib1) > DELTA ) {
457 key="CompCalib1_"; key+=num;
458 variableChange[ key.c_str() ] = aCalib1 - bCalib1;
459 }
460 }
461
462 return;
463}
464
std::string strformat(const char *fmt,...)
return a std::string according to a format fmt and varargs
Definition StrFormat.cxx:49
static const double DELTA
static Double_t a
Provide helper functions to create formatted strings.
bool operator==(const TrigMissingET &a, const TrigMissingET &b)
Operator comparing two objects for equality.
MsgStream & operator<<(MsgStream &m, const TrigMissingET &d)
void diff(const TrigMissingET &a, const TrigMissingET &b, std::map< std::string, double > &variableChange)
Comparison with feedback.
void clear()
reset contents
int m_flag
Basic information: event status flag: 0 (default) means OK.
TrigMissingET()=default
default constructor
std::vector< TrigMissingEtComponent > m_compVec
Auxiliary information: components from different calo layers and muons.
MET trigger slice components (auxiliary information for TrigMissingET).
std::string strformat(const char *fmt,...)
return a std::string according to a format fmt and varargs
Definition StrFormat.cxx:49
str index
Definition DeMoScan.py:362
Definition index.py:1
STL namespace.
Extra patterns decribing particle interation process.