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 }