Back to home page

sPhenix code displayed by LXR

 
 

    


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     // as tower numbers are fixed per event
0017     // construct towers once per run, and clear the towers for first use
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     // as tower numbers are fixed per event
0030     // construct towers once per run, and clear the towers for first use
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   // clear content of towers in the container for the next event
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 }