Back to home page

sPhenix code displayed by LXR

 
 

    


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

0001 /**
0002  * @file trackbase/TrkrClusterHitAssocv2.cc
0003  * @author D. McGlinchey
0004  * @date June 2018
0005  * @brief TrkrClusterHitAssoc implementation
0006  */
0007 
0008 #include "TrkrClusterHitAssocv2.h"
0009 #include "TrkrDefs.h"
0010 
0011 #include <ostream>  // for operator<<, endl, basic_ostream, ostream, basic_o...
0012 
0013 namespace
0014 {
0015   TrkrClusterHitAssocv2::Map dummy_map;
0016 }
0017 
0018 //_________________________________________________________________________
0019 void TrkrClusterHitAssocv2::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         m_map[layer][phi_segment][z_segment].clear();
0028       }
0029     }
0030   }
0031 }
0032 
0033 //_________________________________________________________________________
0034 void TrkrClusterHitAssocv2::identify(std::ostream& os) const
0035 {
0036   std::multimap<TrkrDefs::cluskey, TrkrDefs::hitkey>::const_iterator iter;
0037   os << "-----TrkrClusterHitAssocv2-----" << std::endl;
0038   os << "Number of associations: " << size() << std::endl;
0039   for (unsigned int layer = 0; layer < max_layer; layer++)
0040   {
0041     for (unsigned int phi_segment = 0; phi_segment < max_phisegment; phi_segment++)
0042     {
0043       for (unsigned int z_segment = 0; z_segment < max_zsegment; z_segment++)
0044       {
0045         for (const auto& pair : m_map[layer][phi_segment][z_segment])
0046         {
0047           os << "clus key " << pair.first << std::dec
0048              << " layer " << TrkrDefs::getLayer(pair.first)
0049              << " hit key: " << pair.second << std::endl;
0050         }
0051       }
0052     }
0053   }
0054   os << "------------------------------" << std::endl;
0055 
0056   return;
0057 }
0058 
0059 //_________________________________________________________________________
0060 void TrkrClusterHitAssocv2::addAssoc(TrkrDefs::cluskey ckey, unsigned int hidx)
0061 {
0062   unsigned int layer = TrkrDefs::getLayer(ckey);
0063   unsigned int sector = TrkrDefs::getPhiElement(ckey);
0064   unsigned int side = TrkrDefs::getZElement(ckey);
0065 
0066   // bound check
0067   if (layer < max_layer && sector < max_phisegment && side < max_zsegment)
0068   {
0069     m_map[layer][sector][side].insert(std::make_pair(ckey, hidx));
0070   }
0071   else
0072   {
0073     std::cout
0074         << "TrkrClusterHitAssocv2::addAssoc - out of range access."
0075         << " layer: " << layer
0076         << " sector: " << sector
0077         << " side: " << side
0078         << std::endl;
0079   }
0080 }
0081 
0082 //_________________________________________________________________________
0083 TrkrClusterHitAssocv2::Map* TrkrClusterHitAssocv2::getClusterMap(TrkrDefs::hitsetkey hitsetkey)
0084 {
0085   unsigned int layer = TrkrDefs::getLayer(hitsetkey);
0086   unsigned int sector = TrkrDefs::getPhiElement(hitsetkey);
0087   unsigned int side = TrkrDefs::getZElement(hitsetkey);
0088 
0089   // bound check
0090   if (layer < max_layer && sector < max_phisegment && side < max_zsegment)
0091   {
0092     return &m_map[layer][sector][side];
0093   }
0094   else
0095   {
0096     std::cout
0097         << "TrkrClusterHitAssocv2::getClusterMap - out of range access."
0098         << " layer: " << layer
0099         << " sector: " << sector
0100         << " side: " << side
0101         << std::endl;
0102     return nullptr;
0103   }
0104 }
0105 
0106 //_________________________________________________________________________
0107 TrkrClusterHitAssocv2::ConstRange TrkrClusterHitAssocv2::getHits(TrkrDefs::cluskey ckey)
0108 {
0109   unsigned int layer = TrkrDefs::getLayer(ckey);
0110   unsigned int sector = TrkrDefs::getPhiElement(ckey);
0111   unsigned int side = TrkrDefs::getZElement(ckey);
0112 
0113   // bound check
0114   if (layer < max_layer && sector < max_phisegment && side < max_zsegment)
0115   {
0116     return std::make_pair(m_map[layer][sector][side].lower_bound(ckey), m_map[layer][sector][side].upper_bound(ckey));
0117   }
0118   else
0119   {
0120     std::cout
0121         << "TrkrClusterHitAssocv2::getHits - out of range access."
0122         << " layer: " << layer
0123         << " sector: " << sector
0124         << " side: " << side
0125         << std::endl;
0126     return std::make_pair(dummy_map.cbegin(), dummy_map.cend());
0127   }
0128 }
0129 
0130 //_________________________________________________________________________
0131 unsigned int TrkrClusterHitAssocv2::size() const
0132 {
0133   unsigned int size = 0;
0134   for (unsigned layer = 0; layer < max_layer; layer++)
0135   {
0136     for (unsigned phi_segment = 0; phi_segment < max_phisegment; phi_segment++)
0137     {
0138       for (unsigned z_segment = 0; z_segment < max_zsegment; z_segment++)
0139       {
0140         size += m_map[layer][phi_segment][z_segment].size();
0141       }
0142     }
0143   }
0144 
0145   return size;
0146 }