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
0047 if ((icolumn >> PHG4ScintillatorSlatDefs::columnbits) > 0)
0048 {
0049 std::cout << " column id too large: " << icolumn << std::endl;
0050 exit(1);
0051 }
0052
0053
0054 PHG4ScintillatorSlatDefs::keytype keylow = icolumn << PHG4ScintillatorSlatDefs::columnbits;
0055
0056 PHG4ScintillatorSlatDefs::keytype keyup = ((icolumn + 1) << PHG4ScintillatorSlatDefs::columnbits) - 1;
0057
0058
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 }