File indexing completed on 2025-08-06 08:17:29
0001 #include "TowerInfoContainerSimv2.h"
0002 #include "TowerInfoSimv2.h"
0003
0004 #include <TClonesArray.h>
0005
0006 #include <cassert>
0007
0008 TowerInfoContainerSimv2::TowerInfoContainerSimv2(DETECTOR detec)
0009 : _detector(detec)
0010 {
0011 int nchannels = 744;
0012 if (_detector == DETECTOR::SEPD)
0013 {
0014 nchannels = 744;
0015 }
0016 else if (_detector == DETECTOR::EMCAL)
0017 {
0018 nchannels = 24576;
0019 }
0020 else if (_detector == DETECTOR::HCAL)
0021 {
0022 nchannels = 1536;
0023 }
0024 else if (_detector == DETECTOR::MBD)
0025 {
0026 nchannels = 256;
0027 }
0028 else if (_detector == DETECTOR::ZDC)
0029 {
0030 nchannels = 52;
0031 }
0032 _clones = new TClonesArray("TowerInfoSimv2", nchannels);
0033 _clones->SetOwner();
0034 _clones->SetName("TowerInfoContainerSimv2");
0035 for (int i = 0; i < nchannels; ++i)
0036 {
0037
0038
0039 _clones->ConstructedAt(i, "C");
0040 }
0041 }
0042
0043 TowerInfoContainerSimv2::TowerInfoContainerSimv2(const TowerInfoContainerSimv2& source)
0044 : TowerInfoContainer(source)
0045 , _clones(new TClonesArray("TowerInfoSimv2", (int) source.size()))
0046 , _detector(source.get_detectorid())
0047 {
0048 _clones->SetOwner();
0049 _clones->SetName("TowerInfoContainerSimv2");
0050 for (int i = 0; i < (int) source.size(); ++i)
0051 {
0052
0053
0054 _clones->ConstructedAt(i, "C");
0055 }
0056 }
0057
0058 TowerInfoContainerSimv2::~TowerInfoContainerSimv2()
0059 {
0060 delete _clones;
0061 }
0062
0063 void TowerInfoContainerSimv2::identify(std::ostream& os) const
0064 {
0065 os << "TowerInfoContainerSimv2 of size " << size() << std::endl;
0066 }
0067
0068 void TowerInfoContainerSimv2::Reset()
0069 {
0070
0071
0072 for (Int_t i = 0; i < _clones->GetEntriesFast(); ++i)
0073 {
0074 TObject* obj = _clones->UncheckedAt(i);
0075
0076 if (obj == nullptr)
0077 {
0078 std::cout << __PRETTY_FUNCTION__ << " Fatal access error:"
0079 << " _clones->GetSize() = " << _clones->GetSize()
0080 << " _clones->GetEntriesFast() = " << _clones->GetEntriesFast()
0081 << " i = " << i << std::endl;
0082 _clones->Print();
0083 }
0084
0085 assert(obj);
0086
0087 obj->Clear();
0088 obj->ResetBit(kHasUUID);
0089 obj->ResetBit(kIsReferenced);
0090 obj->SetUniqueID(0);
0091 }
0092 }
0093
0094 TowerInfoSimv2* TowerInfoContainerSimv2::get_tower_at_channel(int pos)
0095 {
0096 return (TowerInfoSimv2*) _clones->At(pos);
0097 }
0098
0099 TowerInfoSimv2* TowerInfoContainerSimv2::get_tower_at_key(int pos)
0100 {
0101 int index = (int) decode_key(pos);
0102 return (TowerInfoSimv2*) _clones->At(index);
0103 }
0104
0105 unsigned int TowerInfoContainerSimv2::encode_key(unsigned int towerIndex)
0106 {
0107 unsigned int key = 0;
0108 if (_detector == DETECTOR::EMCAL)
0109 {
0110 key = TowerInfoContainer::encode_emcal(towerIndex);
0111 }
0112 else if (_detector == DETECTOR::HCAL)
0113 {
0114 key = TowerInfoContainer::encode_hcal(towerIndex);
0115 }
0116 else if (_detector == DETECTOR::SEPD)
0117 {
0118 key = TowerInfoContainer::encode_epd(towerIndex);
0119 }
0120 else if (_detector == DETECTOR::MBD)
0121 {
0122 key = TowerInfoContainer::encode_mbd(towerIndex);
0123 }
0124 else if (_detector == DETECTOR::ZDC)
0125 {
0126 key = TowerInfoContainer::encode_zdc(towerIndex);
0127 }
0128 return key;
0129 }
0130
0131 unsigned int TowerInfoContainerSimv2::decode_key(unsigned int tower_key)
0132 {
0133 unsigned int index = 0;
0134
0135 if (_detector == DETECTOR::EMCAL)
0136 {
0137 index = TowerInfoContainer::decode_emcal(tower_key);
0138 }
0139 else if (_detector == DETECTOR::HCAL)
0140 {
0141 index = TowerInfoContainer::decode_hcal(tower_key);
0142 }
0143 else if (_detector == DETECTOR::SEPD)
0144 {
0145 index = TowerInfoContainer::decode_epd(tower_key);
0146 }
0147 else if (_detector == DETECTOR::MBD)
0148 {
0149 index = TowerInfoContainer::decode_mbd(tower_key);
0150 }
0151 else if (_detector == DETECTOR::ZDC)
0152 {
0153 index = TowerInfoContainer::decode_zdc(tower_key);
0154 }
0155 return index;
0156 }