Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-06 08:18:11

0001 /**
0002  * @file trackbase/TrkrClusterContainerv2.cc
0003  * @author D. McGlinchey, Hugo Pereira Da Costa
0004  * @date June 2018
0005  * @brief Implementation of TrkrClusterContainerv2
0006  */
0007 #include "TrkrClusterContainerv2.h"
0008 #include "TrkrCluster.h"
0009 #include "TrkrDefs.h"
0010 
0011 #include <cstdlib>
0012 
0013 namespace
0014 {
0015   TrkrClusterContainer::Map dummy_map;
0016 }
0017 
0018 //_________________________________________________________________
0019 void TrkrClusterContainerv2::Reset()
0020 {
0021   for (unsigned int layer = 0; layer < max_layer; layer++)
0022   {
0023     for (unsigned int phi_segment = 0; phi_segment < max_phisegment; phi_segment++)
0024     {
0025       for (unsigned int z_segment = 0; z_segment < max_zsegment; z_segment++)
0026       {
0027         for (const auto& pair : m_clusmap[layer][phi_segment][z_segment])
0028         {
0029           delete pair.second;
0030         }
0031 
0032         m_clusmap[layer][phi_segment][z_segment].clear();
0033       }
0034     }
0035   }
0036 }
0037 
0038 //_________________________________________________________________
0039 void TrkrClusterContainerv2::identify(std::ostream& os) const
0040 {
0041   os << "-----TrkrClusterContainerv2-----" << std::endl;
0042   os << "Number of clusters: " << size() << std::endl;
0043 
0044   for (unsigned int layer = 0; layer < max_layer; layer++)
0045   {
0046     for (unsigned int phi_segment = 0; phi_segment < max_phisegment; phi_segment++)
0047     {
0048       for (unsigned int z_segment = 0; z_segment < max_zsegment; z_segment++)
0049       {
0050         const auto iter = m_clusmap[layer][phi_segment][z_segment].begin();
0051         const int flayer = TrkrDefs::getLayer(iter->first);
0052         const unsigned int fsector = TrkrDefs::getPhiElement(iter->first);
0053         const unsigned int fside = TrkrDefs::getZElement(iter->first);
0054         std::cout << "layer: " << layer << " | " << flayer
0055                   << " phi_seg: " << phi_segment << " | " << fsector
0056                   << " z_seg: " << z_segment << " | " << fside
0057                   << " nclu: " << m_clusmap[layer][phi_segment][z_segment].size()
0058                   << std::endl;
0059 
0060         for (const auto& pair : m_clusmap[layer][phi_segment][z_segment])
0061         {
0062           os << "clus key " << pair.first << " layer " << TrkrDefs::getLayer(pair.first) << std::endl;
0063           (pair.second)->identify();
0064         }
0065       }
0066     }
0067   }
0068 
0069   os << "------------------------------" << std::endl;
0070 }
0071 
0072 //_________________________________________________________________
0073 void TrkrClusterContainerv2::removeCluster(TrkrDefs::cluskey key)
0074 {
0075   unsigned int layer = TrkrDefs::getLayer(key);
0076   unsigned int sector = TrkrDefs::getPhiElement(key);
0077   unsigned int side = TrkrDefs::getZElement(key);
0078 
0079   // bound check
0080   if (layer < max_layer && sector < max_phisegment && side < max_zsegment)
0081   {
0082     m_clusmap[layer][sector][side].erase(key);
0083   }
0084   else
0085   {
0086     std::cout
0087         << "TrkrClusterContainerv2::removeCluster - out of range access."
0088         << " layer: " << layer
0089         << " sector: " << sector
0090         << " side: " << side
0091         << std::endl;
0092   }
0093 }
0094 
0095 //_________________________________________________________________
0096 void TrkrClusterContainerv2::addClusterSpecifyKey(const TrkrDefs::cluskey key, TrkrCluster* newclus)
0097 {
0098   unsigned int layer = TrkrDefs::getLayer(key);
0099   unsigned int sector = TrkrDefs::getPhiElement(key);
0100   unsigned int side = TrkrDefs::getZElement(key);
0101 
0102   // bound check
0103   if (layer < max_layer && sector < max_phisegment && side < max_zsegment)
0104   {
0105     const auto [iter, success] = m_clusmap[layer][sector][side].insert(std::make_pair(key, newclus));
0106     if (!success)
0107     {
0108       std::cout << "TrkrClusterContainerv2::AddClusterSpecifyKey: duplicate key: " << key << " exiting now" << std::endl;
0109       exit(1);
0110     }
0111   }
0112   else
0113   {
0114     std::cout
0115         << "TrkrClusterContainerv2::addClusterSpecifyKey - out of range access."
0116         << " layer: " << layer
0117         << " sector: " << sector
0118         << " side: " << side
0119         << std::endl;
0120   }
0121 }
0122 
0123 //_________________________________________________________________
0124 TrkrClusterContainerv2::ConstRange
0125 TrkrClusterContainerv2::getClusters(TrkrDefs::hitsetkey hitsetkey)
0126 {
0127   const unsigned int layer = TrkrDefs::getLayer(hitsetkey);
0128   const unsigned int sector = TrkrDefs::getPhiElement(hitsetkey);
0129   const unsigned int side = TrkrDefs::getZElement(hitsetkey);
0130 
0131   // bound check
0132   if (layer < max_layer && sector < max_phisegment && side < max_zsegment)
0133   {
0134     return std::make_pair(m_clusmap[layer][sector][side].cbegin(), m_clusmap[layer][sector][side].cend());
0135   }
0136   else
0137   {
0138     std::cout
0139         << "TrkrClusterContainerv2::getClusters - out of range access."
0140         << " layer: " << layer
0141         << " sector: " << sector
0142         << " side: " << side
0143         << std::endl;
0144 
0145     return std::make_pair(dummy_map.cbegin(), dummy_map.cend());
0146   }
0147 }
0148 
0149 //_________________________________________________________________
0150 TrkrCluster* TrkrClusterContainerv2::findCluster(TrkrDefs::cluskey key) const
0151 {
0152   const unsigned int layer = TrkrDefs::getLayer(key);
0153   const unsigned int sector = TrkrDefs::getPhiElement(key);
0154   const unsigned int side = TrkrDefs::getZElement(key);
0155 
0156   // bound check
0157   if (layer < max_layer && sector < max_phisegment && side < max_zsegment)
0158   {
0159     auto it = m_clusmap[layer][sector][side].find(key);
0160     if (it != m_clusmap[layer][sector][side].end())
0161     {
0162       return it->second;
0163     }
0164     else
0165     {
0166       return nullptr;
0167     }
0168   }
0169   else
0170   {
0171     std::cout
0172         << "TrkrClusterContainerv2::findOrAddCluster - out of range access."
0173         << " layer: " << layer
0174         << " sector: " << sector
0175         << " side: " << side
0176         << std::endl;
0177     return nullptr;
0178   }
0179 }
0180 
0181 //_________________________________________________________________
0182 unsigned int TrkrClusterContainerv2::size() const
0183 {
0184   unsigned int size = 0;
0185   for (unsigned layer = 0; layer < max_layer; layer++)
0186   {
0187     for (unsigned phi_segment = 0; phi_segment < max_phisegment; phi_segment++)
0188     {
0189       for (unsigned z_segment = 0; z_segment < max_zsegment; z_segment++)
0190       {
0191         size += m_clusmap[layer][phi_segment][z_segment].size();
0192       }
0193     }
0194   }
0195 
0196   return size;
0197 }