Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-12-17 09:20:46

0001 #include "SvtxTrack_v4.h"
0002 #include "SvtxTrackState.h"
0003 #include "SvtxTrackState_v1.h"
0004 
0005 #include <trackbase/TrkrDefs.h>  // for cluskey
0006 
0007 #include <phool/PHObject.h>  // for PHObject
0008 
0009 #include <climits>
0010 #include <map>
0011 #include <vector>  // for vector
0012 
0013 SvtxTrack_v4::SvtxTrack_v4()
0014 {
0015   // always include the pca point
0016   _states.insert(std::make_pair(0, new SvtxTrackState_v1(0)));
0017 }
0018 
0019 SvtxTrack_v4::SvtxTrack_v4(const SvtxTrack& source)
0020 {
0021   SvtxTrack_v4::CopyFrom(source);
0022 }
0023 
0024 // have to suppress missingMemberCopy from cppcheck, it does not
0025 // go down to the CopyFrom method where things are done correctly
0026 // cppcheck-suppress missingMemberCopy
0027 SvtxTrack_v4::SvtxTrack_v4(const SvtxTrack_v4& source)
0028   : SvtxTrack(source)
0029 {
0030   SvtxTrack_v4::CopyFrom(source);
0031 }
0032 
0033 SvtxTrack_v4& SvtxTrack_v4::operator=(const SvtxTrack_v4& source)
0034 {
0035   if (this != &source)
0036   {
0037     CopyFrom(source);
0038   }
0039   return *this;
0040 }
0041 
0042 SvtxTrack_v4::~SvtxTrack_v4()
0043 {
0044   clear_states();
0045 }
0046 
0047 void SvtxTrack_v4::CopyFrom(const SvtxTrack& source)
0048 {
0049   // do nothing if copying onto oneself
0050   if (this == &source)
0051   {
0052     return;
0053   }
0054 
0055   // parent class method
0056   SvtxTrack::CopyFrom(source);
0057 
0058   _tpc_seed = source.get_tpc_seed();
0059   _silicon_seed = source.get_silicon_seed();
0060   _vertex_id = source.get_vertex_id();
0061   _is_positive_charge = source.get_positive_charge();
0062   _chisq = source.get_chisq();
0063   _ndf = source.get_ndf();
0064   _track_crossing = source.get_crossing();
0065 
0066   // copy the states over into new state objects stored here
0067   clear_states();
0068   for (auto iter = source.begin_states(); iter != source.end_states(); ++iter)
0069   {
0070     _states.insert(std::make_pair(iter->first, static_cast<SvtxTrackState*>(iter->second->CloneMe())));
0071   }
0072 }
0073 
0074 void SvtxTrack_v4::identify(std::ostream& os) const
0075 {
0076   os << "SvtxTrack_v4 Object ";
0077   os << "id: " << get_id() << " ";
0078   os << "vertex id: " << get_vertex_id() << " ";
0079   os << "charge: " << get_charge() << " ";
0080   os << "chisq: " << get_chisq() << " ndf:" << get_ndf() << " ";
0081   os << "nstates: " << _states.size() << " ";
0082   os << std::endl;
0083 
0084   os << "(px,py,pz) = ("
0085      << get_px() << ","
0086      << get_py() << ","
0087      << get_pz() << ")" << std::endl;
0088 
0089   os << "(x,y,z) = (" << get_x() << "," << get_y() << "," << get_z() << ")" << std::endl;
0090 
0091   os << "Silicon clusters " << std::endl;
0092   if (_silicon_seed)
0093   {
0094     for (auto iter = _silicon_seed->begin_cluster_keys();
0095          iter != _silicon_seed->end_cluster_keys();
0096          ++iter)
0097     {
0098       std::cout << *iter << ", ";
0099     }
0100   }
0101   os << std::endl
0102      << "Tpc + TPOT clusters " << std::endl;
0103   if (_tpc_seed)
0104   {
0105     for (auto iter = _tpc_seed->begin_cluster_keys();
0106          iter != _tpc_seed->end_cluster_keys();
0107          ++iter)
0108     {
0109       std::cout << *iter << ", ";
0110     }
0111   }
0112   os << std::endl;
0113 
0114   return;
0115 }
0116 
0117 void SvtxTrack_v4::clear_states()
0118 {
0119   for (const auto& pair : _states)
0120   {
0121     delete pair.second;
0122   }
0123 
0124   _states.clear();
0125 }
0126 
0127 int SvtxTrack_v4::isValid() const
0128 {
0129   return 1;
0130 }
0131 
0132 const SvtxTrackState* SvtxTrack_v4::get_state(float pathlength) const
0133 {
0134   const auto iter = _states.find(pathlength);
0135   return (iter == _states.end()) ? nullptr : iter->second;
0136 }
0137 
0138 SvtxTrackState* SvtxTrack_v4::get_state(float pathlength)
0139 {
0140   const auto iter = _states.find(pathlength);
0141   return (iter == _states.end()) ? nullptr : iter->second;
0142 }
0143 
0144 SvtxTrackState* SvtxTrack_v4::insert_state(const SvtxTrackState* state)
0145 {
0146   // find closest iterator
0147   const auto pathlength = state->get_pathlength();
0148   auto iterator = _states.lower_bound(pathlength);
0149   if (iterator == _states.end() || pathlength < iterator->first)
0150   {
0151     // pathlength not found. Make a copy and insert
0152     auto *const copy = static_cast<SvtxTrackState*>(state->CloneMe());
0153     iterator = _states.insert(iterator, std::make_pair(pathlength, copy));
0154   }
0155 
0156   // return matching state
0157   return iterator->second;
0158 }
0159 
0160 size_t SvtxTrack_v4::erase_state(float pathlength)
0161 {
0162   StateIter iter = _states.find(pathlength);
0163   if (iter == _states.end())
0164   {
0165     return _states.size();
0166   }
0167 
0168   delete iter->second;
0169   _states.erase(iter);
0170   return _states.size();
0171 }