Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-06 08:17:29

0001 #include "TowerInfoContainerv1.h"
0002 #include "TowerInfov1.h"
0003 
0004 #include <TClonesArray.h>
0005 
0006 #include <cassert>
0007 
0008 TowerInfoContainerv1::TowerInfoContainerv1(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("TowerInfov1", nchannels);
0033   _clones->SetOwner();
0034   _clones->SetName("TowerInfoContainerv1");
0035   for (int i = 0; i < nchannels; ++i)
0036   {
0037     // as tower numbers are fixed per event
0038     // construct towers once per run, and clear the towers for first use
0039     _clones->ConstructedAt(i, "C");
0040   }
0041 }
0042 
0043 TowerInfoContainerv1::~TowerInfoContainerv1()
0044 {
0045   delete _clones;
0046 }
0047 
0048 TowerInfoContainerv1::TowerInfoContainerv1(const TowerInfoContainerv1& source)
0049   : TowerInfoContainer(source)
0050 {
0051   _detector = source.get_detectorid();
0052   _clones = new TClonesArray("TowerInfov1", source.size());
0053   _clones->SetOwner();
0054   _clones->SetName("TowerInfoContainerv1");
0055   for (unsigned int i = 0; i < source.size(); ++i)
0056   {
0057     // as tower numbers are fixed per event
0058     // construct towers once per run, and clear the towers for first use
0059     _clones->ConstructedAt(i, "C");
0060   }
0061 }
0062 
0063 void TowerInfoContainerv1::identify(std::ostream& os) const
0064 {
0065   os << "TowerInfoContainerv1 of size " << size() << std::endl;
0066 }
0067 
0068 void TowerInfoContainerv1::Reset()
0069 {
0070   // clear content of towers in the container for the next event
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     // same as TClonesArray::Clear() but only clear but not to erase all towers
0087     obj->Clear();
0088     obj->ResetBit(kHasUUID);
0089     obj->ResetBit(kIsReferenced);
0090     obj->SetUniqueID(0);
0091   }
0092 }
0093 
0094 TowerInfov1* TowerInfoContainerv1::get_tower_at_channel(int pos)
0095 {
0096   return (TowerInfov1*) _clones->At(pos);
0097 }
0098 
0099 TowerInfov1* TowerInfoContainerv1::get_tower_at_key(int pos)
0100 {
0101   int index = decode_key(pos);
0102   return (TowerInfov1*) _clones->At(index);
0103 }
0104 
0105 unsigned int TowerInfoContainerv1::encode_key(unsigned int towerIndex)
0106 {
0107   int key = 0;
0108   if (_detector == DETECTOR::EMCAL)
0109   {
0110     key = TowerInfoContainerv1::encode_emcal(towerIndex);
0111   }
0112   else if (_detector == DETECTOR::HCAL)
0113   {
0114     key = TowerInfoContainerv1::encode_hcal(towerIndex);
0115   }
0116   else if (_detector == DETECTOR::SEPD)
0117   {
0118     key = TowerInfoContainerv1::encode_epd(towerIndex);
0119   }
0120   else if (_detector == DETECTOR::MBD)
0121   {
0122     key = TowerInfoContainerv1::encode_mbd(towerIndex);
0123   }
0124   else if (_detector == DETECTOR::ZDC)
0125   {
0126     key = TowerInfoContainerv1::encode_zdc(towerIndex);
0127   }
0128   return key;
0129 }
0130 
0131 unsigned int TowerInfoContainerv1::decode_key(unsigned int tower_key)
0132 {
0133   int index = 0;
0134 
0135   if (_detector == DETECTOR::EMCAL)
0136   {
0137     index = TowerInfoContainerv1::decode_emcal(tower_key);
0138   }
0139   else if (_detector == DETECTOR::HCAL)
0140   {
0141     index = TowerInfoContainerv1::decode_hcal(tower_key);
0142   }
0143   else if (_detector == DETECTOR::SEPD)
0144   {
0145     index = TowerInfoContainerv1::decode_epd(tower_key);
0146   }
0147   else if (_detector == DETECTOR::MBD)
0148   {
0149     index = TowerInfoContainerv1::decode_mbd(tower_key);
0150   }
0151   else if (_detector == DETECTOR::ZDC)
0152   {
0153     index = TowerInfoContainerv1::decode_zdc(tower_key);
0154   }
0155   return index;
0156 }