Back to home page

sPhenix code displayed by LXR

 
 

    


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)  // no need to loop through the map if we don't apply a cut
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);  // force tower key to be synced to container 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);  // force tower key to be synced to container 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 }