Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-12-16 09:19:46

0001 #include "RawTowerv1.h"
0002 
0003 #include <iostream>
0004 
0005 RawTowerv1::RawTowerv1(const RawTower& tower)
0006   : towerid(tower.get_id())
0007   , energy(tower.get_energy())
0008   , time(tower.get_time())
0009 {
0010   CellConstRange cell_range = tower.get_g4cells();
0011 
0012   for (CellConstIterator cell_iter = cell_range.first;
0013        cell_iter != cell_range.second; ++cell_iter)
0014   {
0015     add_ecell(cell_iter->first, cell_iter->second);
0016   }
0017 
0018   ShowerConstRange shower_range = tower.get_g4showers();
0019 
0020   for (ShowerConstIterator shower_iter = shower_range.first;
0021        shower_iter != shower_range.second; ++shower_iter)
0022   {
0023     add_eshower(shower_iter->first, shower_iter->second);
0024   }
0025 }
0026 
0027 RawTowerv1::RawTowerv1(RawTowerDefs::keytype id)
0028   : towerid(id)
0029 {
0030 }
0031 
0032 RawTowerv1::RawTowerv1(const unsigned int ieta, const unsigned int iphi)
0033   : towerid(RawTowerDefs::encode_towerid(RawTowerDefs::NONE, ieta, iphi))
0034 {
0035 }
0036 
0037 RawTowerv1::RawTowerv1(const RawTowerDefs::CalorimeterId caloid,
0038                        const unsigned int ieta, const unsigned int iphi)
0039   : towerid(RawTowerDefs::encode_towerid(caloid, ieta, iphi))
0040 {
0041 }
0042 
0043 void RawTowerv1::Reset()
0044 {
0045   energy = 0;
0046   time = std::numeric_limits<float>::quiet_NaN();
0047   ecells.clear();
0048   eshowers.clear();
0049 }
0050 
0051 int RawTowerv1::isValid() const
0052 {
0053   return get_energy() != 0;
0054 }
0055 
0056 void RawTowerv1::identify(std::ostream& os) const
0057 {
0058   RawTowerDefs::CalorimeterId caloid = RawTowerDefs::decode_caloid(towerid);
0059   if (caloid == RawTowerDefs::LFHCAL)
0060   {
0061     os << "RawTowerv1: etabin: " << get_bineta() << ", phibin: " << get_binphi() << ", l-bin: " << get_binl()
0062        << " energy=" << get_energy() << std::endl;
0063   }
0064   else
0065   {
0066     os << "RawTowerv1: etabin: " << get_bineta() << ", phibin: " << get_binphi()
0067        << " energy=" << get_energy() << std::endl;
0068   }
0069   return;
0070 }
0071 
0072 void RawTowerv1::add_ecell(const CellKeyType g4cellid,
0073                            const float ecell)
0074 {
0075   if (!ecells.contains(g4cellid))
0076   {
0077     ecells[g4cellid] = ecell;
0078   }
0079   else
0080   {
0081     ecells[g4cellid] += ecell;
0082   }
0083 }
0084 
0085 void RawTowerv1::add_eshower(const int g4showerid, const float eshower)
0086 {
0087   if (!eshowers.contains(g4showerid))
0088   {
0089     eshowers[g4showerid] = eshower;
0090   }
0091   else
0092   {
0093     eshowers[g4showerid] += eshower;
0094   }
0095 }
0096 
0097 int RawTowerv1::get_bineta() const
0098 {
0099   RawTowerDefs::CalorimeterId caloid = RawTowerDefs::decode_caloid(towerid);
0100   if (caloid == RawTowerDefs::LFHCAL)
0101   {
0102     return RawTowerDefs::decode_index1v2(towerid);
0103   }
0104 
0105   return RawTowerDefs::decode_index1(towerid);
0106 }
0107 
0108 int RawTowerv1::get_binphi() const
0109 {
0110   RawTowerDefs::CalorimeterId caloid = RawTowerDefs::decode_caloid(towerid);
0111   if (caloid == RawTowerDefs::LFHCAL)
0112   {
0113     return RawTowerDefs::decode_index2v2(towerid);
0114   }
0115 
0116   return RawTowerDefs::decode_index2(towerid);
0117 }