File indexing completed on 2025-08-06 08:17:28
0001 #include "RawTowerContainer.h"
0002
0003 #include "RawTower.h"
0004
0005 #include <cstdlib>
0006 #include <iostream>
0007
0008 void RawTowerContainer::compress(const double emin)
0009 {
0010 if (emin <= 0)
0011 {
0012 return;
0013 }
0014 Iterator itr = _towers.begin();
0015 Iterator last = _towers.end();
0016 for (; itr != last;)
0017 {
0018 RawTower *tower = (itr->second);
0019 if (tower->get_energy() < emin)
0020 {
0021 delete tower;
0022 _towers.erase(itr++);
0023 }
0024 else
0025 {
0026 ++itr;
0027 }
0028 }
0029 }
0030
0031 RawTowerContainer::ConstRange
0032 RawTowerContainer::getTowers() const
0033 {
0034 return std::make_pair(_towers.begin(), _towers.end());
0035 }
0036
0037 RawTowerContainer::Range
0038 RawTowerContainer::getTowers()
0039 {
0040 return std::make_pair(_towers.begin(), _towers.end());
0041 }
0042
0043 RawTowerContainer::ConstIterator
0044 RawTowerContainer::AddTower(const unsigned int ieta, const int unsigned iphi, RawTower *rawtower)
0045 {
0046 RawTowerDefs::keytype key = RawTowerDefs::encode_towerid(_caloid, ieta, iphi);
0047 _towers[key] = rawtower;
0048 rawtower->set_id(key);
0049
0050 return _towers.find(key);
0051 }
0052
0053 RawTowerContainer::ConstIterator
0054 RawTowerContainer::AddTower(RawTowerDefs::keytype key, RawTower *twr)
0055 {
0056 if (RawTowerDefs::decode_caloid(key) != _caloid)
0057 {
0058 std::cout << "RawTowerContainer::AddTower - Error - adding tower to wrong container! Container CaloID = "
0059 << _caloid << ", requested CaloID = " << RawTowerDefs::decode_caloid(key) << " based on key " << key << std::endl;
0060 exit(2);
0061 }
0062
0063 _towers[key] = twr;
0064 twr->set_id(key);
0065
0066 return _towers.find(key);
0067 }
0068
0069 RawTower *
0070 RawTowerContainer::getTower(RawTowerDefs::keytype key)
0071 {
0072 ConstIterator it = _towers.find(key);
0073 if (it != _towers.end())
0074 {
0075 return it->second;
0076 }
0077 return nullptr;
0078 }
0079
0080 const RawTower *
0081 RawTowerContainer::getTower(RawTowerDefs::keytype key) const
0082 {
0083 ConstIterator it = _towers.find(key);
0084 if (it != _towers.end())
0085 {
0086 return it->second;
0087 }
0088 return nullptr;
0089 }
0090
0091 RawTower *
0092 RawTowerContainer::getTower(const unsigned int ieta, const unsigned int iphi)
0093 {
0094 RawTowerDefs::keytype key = RawTowerDefs::encode_towerid(_caloid, ieta, iphi);
0095 return getTower(key);
0096 }
0097
0098 const RawTower *
0099 RawTowerContainer::getTower(const unsigned int ieta, const unsigned int iphi) const
0100 {
0101 RawTowerDefs::keytype key = RawTowerDefs::encode_towerid(_caloid, ieta, iphi);
0102 return getTower(key);
0103 }
0104
0105 RawTower *
0106 RawTowerContainer::getTower(const unsigned int ieta, const unsigned int iphi, const unsigned int il)
0107 {
0108 RawTowerDefs::keytype key = RawTowerDefs::encode_towerid(_caloid, ieta, iphi, il);
0109 return getTower(key);
0110 }
0111
0112 const RawTower *
0113 RawTowerContainer::getTower(const unsigned int ieta, const unsigned int iphi, const unsigned int il) const
0114 {
0115 RawTowerDefs::keytype key = RawTowerDefs::encode_towerid(_caloid, ieta, iphi, il);
0116 return getTower(key);
0117 }
0118
0119 int RawTowerContainer::isValid() const
0120 {
0121 return (!_towers.empty());
0122 }
0123
0124 void RawTowerContainer::Reset()
0125 {
0126 while (_towers.begin() != _towers.end())
0127 {
0128 delete _towers.begin()->second;
0129 _towers.erase(_towers.begin());
0130 }
0131 }
0132
0133 void RawTowerContainer::identify(std::ostream &os) const
0134 {
0135 os << "RawTowerContainer, number of towers: " << size() << std::endl;
0136 }
0137
0138 double
0139 RawTowerContainer::getTotalEdep() const
0140 {
0141 double totalenergy = 0;
0142 ConstIterator iter;
0143 for (iter = _towers.begin(); iter != _towers.end(); ++iter)
0144 {
0145 totalenergy += iter->second->get_energy();
0146 }
0147 return totalenergy;
0148 }