File indexing completed on 2026-07-16 08:13:59
0001 #include "TowerInfoContainerSimv3.h"
0002 #include "TowerInfoSimv3.h"
0003
0004 #include <TClonesArray.h>
0005 #include <TSystem.h>
0006
0007 #include <cstdlib>
0008
0009 TowerInfoContainerSimv3::TowerInfoContainerSimv3(DETECTOR detec)
0010 : _detector(detec)
0011 {
0012 int nchannels = get_channels(detec);
0013 _clones = new TClonesArray("TowerInfoSimv3", nchannels);
0014 for (int i = 0; i < nchannels; ++i)
0015 {
0016
0017
0018 _clones->ConstructedAt(i, "C");
0019 }
0020 }
0021
0022 TowerInfoContainerSimv3::TowerInfoContainerSimv3(const TowerInfoContainerSimv3& source)
0023 : TowerInfoContainer(source)
0024 , _clones(new TClonesArray("TowerInfoSimv3", (int) source.size()))
0025 , _detector(source.get_detectorid())
0026 {
0027 for (int i = 0; i < (int) source.size(); ++i)
0028 {
0029
0030
0031 auto* tower = static_cast<TowerInfoSimv3*>(_clones->ConstructedAt(i, "C"));
0032 auto* source_tower = static_cast<TowerInfoSimv3*>(source._clones->UncheckedAt(i));
0033 tower->copy_tower(source_tower);
0034 }
0035 }
0036
0037 TowerInfoContainerSimv3::~TowerInfoContainerSimv3()
0038 {
0039 delete _clones;
0040 }
0041
0042 void TowerInfoContainerSimv3::identify(std::ostream& os) const
0043 {
0044 os << "TowerInfoContainerSimv3 of size " << size() << std::endl;
0045 }
0046
0047 void TowerInfoContainerSimv3::Reset()
0048 {
0049
0050
0051 for (Int_t i = 0; i < _clones->GetEntriesFast(); ++i)
0052 {
0053 TowerInfo* twr = (TowerInfoSimv3*) _clones->UncheckedAt(i);
0054
0055 if (twr == nullptr)
0056 {
0057 std::cout << __PRETTY_FUNCTION__ << " Fatal access error:"
0058 << " _clones->GetSize() = " << _clones->GetSize()
0059 << " _clones->GetEntriesFast() = " << _clones->GetEntriesFast()
0060 << " i = " << i << std::endl;
0061 _clones->Print();
0062 gSystem->Exit(1);
0063 exit(1);
0064 }
0065 twr->Reset();
0066 }
0067 }
0068
0069 TowerInfoSimv3* TowerInfoContainerSimv3::get_tower_at_channel(int pos)
0070 {
0071 return (TowerInfoSimv3*) _clones->At(pos);
0072 }
0073
0074 TowerInfoSimv3* TowerInfoContainerSimv3::get_tower_at_key(int pos)
0075 {
0076 int index = (int) decode_key(pos);
0077 return (TowerInfoSimv3*) _clones->At(index);
0078 }