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