File indexing completed on 2025-08-06 08:18:11
0001
0002
0003
0004
0005
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
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
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
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
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 }