-
Notifications
You must be signed in to change notification settings - Fork 184
/
RawTowerContainer.cc
150 lines (129 loc) · 3.43 KB
/
RawTowerContainer.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#include "RawTowerContainer.h"
#include "RawTower.h"
#include <cstdlib>
#include <iostream>
using namespace std;
void RawTowerContainer::compress(const double emin)
{
if (emin <= 0) // no need to loop through the map if we don't apply a cut
{
return;
}
Iterator itr = _towers.begin();
Iterator last = _towers.end();
for (; itr != last;)
{
RawTower *tower = (itr->second);
if (tower->get_energy() < emin)
{
delete tower;
_towers.erase(itr++);
}
else
{
++itr;
}
}
}
RawTowerContainer::ConstRange
RawTowerContainer::getTowers() const
{
return make_pair(_towers.begin(), _towers.end());
}
RawTowerContainer::Range
RawTowerContainer::getTowers()
{
return make_pair(_towers.begin(), _towers.end());
}
RawTowerContainer::ConstIterator
RawTowerContainer::AddTower(const unsigned int ieta, const int unsigned iphi, RawTower *rawtower)
{
RawTowerDefs::keytype key = RawTowerDefs::encode_towerid(_caloid, ieta, iphi);
_towers[key] = rawtower;
rawtower->set_id(key); // force tower key to be synced to container key
return _towers.find(key);
}
RawTowerContainer::ConstIterator
RawTowerContainer::AddTower(RawTowerDefs::keytype key, RawTower *twr)
{
if (RawTowerDefs::decode_caloid(key) != _caloid)
{
cout << "RawTowerContainer::AddTower - Error - adding tower to wrong container! Container CaloID = "
<< _caloid << ", requested CaloID = " << RawTowerDefs::decode_caloid(key) << " based on key " << key << endl;
exit(2);
}
_towers[key] = twr;
twr->set_id(key); // force tower key to be synced to container key
return _towers.find(key);
}
RawTower *
RawTowerContainer::getTower(RawTowerDefs::keytype key)
{
ConstIterator it = _towers.find(key);
if (it != _towers.end())
{
return it->second;
}
return nullptr;
}
const RawTower *
RawTowerContainer::getTower(RawTowerDefs::keytype key) const
{
ConstIterator it = _towers.find(key);
if (it != _towers.end())
{
return it->second;
}
return nullptr;
}
RawTower *
RawTowerContainer::getTower(const unsigned int ieta, const unsigned int iphi)
{
RawTowerDefs::keytype key = RawTowerDefs::encode_towerid(_caloid, ieta, iphi);
return getTower(key);
}
const RawTower *
RawTowerContainer::getTower(const unsigned int ieta, const unsigned int iphi) const
{
RawTowerDefs::keytype key = RawTowerDefs::encode_towerid(_caloid, ieta, iphi);
return getTower(key);
}
RawTower *
RawTowerContainer::getTower(const unsigned int ieta, const unsigned int iphi, const unsigned int il)
{
RawTowerDefs::keytype key = RawTowerDefs::encode_towerid(_caloid, ieta, iphi, il);
return getTower(key);
}
const RawTower *
RawTowerContainer::getTower(const unsigned int ieta, const unsigned int iphi, const unsigned int il) const
{
RawTowerDefs::keytype key = RawTowerDefs::encode_towerid(_caloid, ieta, iphi, il);
return getTower(key);
}
int RawTowerContainer::isValid() const
{
return (!_towers.empty());
}
void RawTowerContainer::Reset()
{
while (_towers.begin() != _towers.end())
{
delete _towers.begin()->second;
_towers.erase(_towers.begin());
}
}
void RawTowerContainer::identify(std::ostream &os) const
{
os << "RawTowerContainer, number of towers: " << size() << std::endl;
}
double
RawTowerContainer::getTotalEdep() const
{
double totalenergy = 0;
ConstIterator iter;
for (iter = _towers.begin(); iter != _towers.end(); ++iter)
{
totalenergy += iter->second->get_energy();
}
return totalenergy;
}