Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2026-07-16 08:13:59

0001 #include "TowerInfoContainerv5.h"
0002 #include "TowerInfov5.h"
0003 
0004 #include <TClonesArray.h>
0005 #include <TSystem.h>
0006 
0007 #include <cstdlib>
0008 
0009 TowerInfoContainerv5::TowerInfoContainerv5(DETECTOR detec)
0010   : _detector(detec)
0011 {
0012   int nchannels = get_channels(detec);
0013   _clones = new TClonesArray("TowerInfov5", 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 TowerInfoContainerv5::TowerInfoContainerv5(const TowerInfoContainerv5& source)
0023   : TowerInfoContainer(source)
0024   , _clones(new TClonesArray("TowerInfov5", source.size()))
0025   , _detector(source.get_detectorid())
0026 {
0027   for (unsigned int i = 0; i < source.size(); ++i)
0028   {
0029     auto* tower = static_cast<TowerInfov5*>(_clones->ConstructedAt(i, "C"));
0030     auto* source_tower = static_cast<TowerInfov5*>(source._clones->UncheckedAt(i));
0031     tower->copy_tower(source_tower);
0032   }
0033 }
0034 
0035 TowerInfoContainerv5::~TowerInfoContainerv5()
0036 {
0037   delete _clones;
0038 }
0039 
0040 void TowerInfoContainerv5::identify(std::ostream& os) const
0041 {
0042   os << "TowerInfoContainerv5 of size " << size() << std::endl;
0043 }
0044 
0045 void TowerInfoContainerv5::Reset()
0046 {
0047   // clear content of towers in the container for the next event
0048 
0049   for (Int_t i = 0; i < _clones->GetEntriesFast(); ++i)
0050   {
0051     TowerInfo* twr = (TowerInfov5*) _clones->UncheckedAt(i);
0052 
0053     if (twr == nullptr)
0054     {
0055       std::cout << __PRETTY_FUNCTION__ << " Fatal access error:"
0056                 << " _clones->GetSize() = " << _clones->GetSize()
0057                 << " _clones->GetEntriesFast() = " << _clones->GetEntriesFast()
0058                 << " i = " << i << std::endl;
0059       _clones->Print();
0060       gSystem->Exit(1);
0061       exit(1);
0062     }
0063     twr->Reset();
0064   }
0065 }
0066 
0067 TowerInfov5* TowerInfoContainerv5::get_tower_at_channel(int pos)
0068 {
0069   return (TowerInfov5*) _clones->At(pos);
0070 }
0071 
0072 TowerInfov5* TowerInfoContainerv5::get_tower_at_key(int pos)
0073 {
0074   int index = decode_key(pos);
0075   return (TowerInfov5*) _clones->At(index);
0076 }