Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-05 08:17:51

0001 #include "PHG4ScintillatorSlatContainer.h"
0002 
0003 #include "PHG4ScintillatorSlat.h"  // for PHG4ScintillatorSlat
0004 #include "PHG4ScintillatorSlatDefs.h"
0005 
0006 #include <cstdlib>
0007 
0008 void PHG4ScintillatorSlatContainer::Reset()
0009 {
0010   while (slatmap.begin() != slatmap.end())
0011   {
0012     delete slatmap.begin()->second;
0013     slatmap.erase(slatmap.begin());
0014   }
0015   return;
0016 }
0017 
0018 void PHG4ScintillatorSlatContainer::identify(std::ostream& os) const
0019 {
0020   std::map<unsigned int, PHG4ScintillatorSlat*>::const_iterator iter;
0021   os << "Number of slats: " << size() << std::endl;
0022   for (iter = slatmap.begin(); iter != slatmap.end(); ++iter)
0023   {
0024     os << "slat key 0x" << std::hex << iter->first << std::dec << std::endl;
0025     (iter->second)->identify();
0026   }
0027   return;
0028 }
0029 
0030 PHG4ScintillatorSlatContainer::ConstIterator
0031 PHG4ScintillatorSlatContainer::AddScintillatorSlat(const PHG4ScintillatorSlatDefs::keytype key, PHG4ScintillatorSlat* newslat)
0032 {
0033   if (slatmap.find(key) != slatmap.end())
0034   {
0035     std::cout << "PHG4ScintillatorSlatContainer::AddScintillatorSlatSpecifyKey: duplicate key: " << key << " exiting now" << std::endl;
0036     exit(1);
0037   }
0038   newslat->set_key(key);
0039   slatmap[key] = newslat;
0040   return slatmap.find(key);
0041 }
0042 
0043 PHG4ScintillatorSlatContainer::ConstRange
0044 PHG4ScintillatorSlatContainer::getScintillatorSlats(const short icolumn) const
0045 {
0046 // NOLINTNEXTLINE(hicpp-signed-bitwise)
0047   if ((icolumn >> PHG4ScintillatorSlatDefs::columnbits) > 0)
0048   {
0049     std::cout << " column id too large: " << icolumn << std::endl;
0050     exit(1);
0051   }
0052   //  unsigned int shiftval = detid << slat_idbits;
0053 // NOLINTNEXTLINE(hicpp-signed-bitwise)
0054   PHG4ScintillatorSlatDefs::keytype keylow = icolumn << PHG4ScintillatorSlatDefs::columnbits;
0055 // NOLINTNEXTLINE(hicpp-signed-bitwise)
0056   PHG4ScintillatorSlatDefs::keytype keyup = ((icolumn + 1) << PHG4ScintillatorSlatDefs::columnbits) - 1;
0057   //   cout << "keylow: 0x" << hex << keylow << dec << std::endl;
0058   //   cout << "keyup: 0x" << hex << keyup << dec << std::endl;
0059   ConstRange retpair;
0060   retpair.first = slatmap.lower_bound(keylow);
0061   retpair.second = slatmap.upper_bound(keyup);
0062   return retpair;
0063 }
0064 
0065 PHG4ScintillatorSlatContainer::ConstRange
0066 PHG4ScintillatorSlatContainer::getScintillatorSlats() const
0067 {
0068   return std::make_pair(slatmap.begin(), slatmap.end());
0069 }
0070 
0071 PHG4ScintillatorSlat*
0072 PHG4ScintillatorSlatContainer::findScintillatorSlat(PHG4ScintillatorSlatDefs::keytype key)
0073 {
0074   PHG4ScintillatorSlatContainer::ConstIterator it = slatmap.find(key);
0075 
0076   if (it != slatmap.end())
0077   {
0078     return it->second;
0079   }
0080 
0081   return nullptr;
0082 }
0083 
0084 double
0085 PHG4ScintillatorSlatContainer::getTotalEdep() const
0086 {
0087   ConstIterator iter;
0088   double totalenergy = 0;
0089   for (iter = slatmap.begin(); iter != slatmap.end(); ++iter)
0090   {
0091     totalenergy += iter->second->get_edep();
0092   }
0093   return totalenergy;
0094 }