Back to home page

sPhenix code displayed by LXR

 
 

    


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

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   CopyFrom(source);
0036   return *this;
0037 }
0038 
0039 SvtxTrack_v4::~SvtxTrack_v4()
0040 {
0041   clear_states();
0042 }
0043 
0044 void SvtxTrack_v4::CopyFrom(const SvtxTrack& source)
0045 {
0046   // do nothing if copying onto oneself
0047   if (this == &source)
0048   {
0049     return;
0050   }
0051 
0052   // parent class method
0053   SvtxTrack::CopyFrom(source);
0054 
0055   _tpc_seed = source.get_tpc_seed();
0056   _silicon_seed = source.get_silicon_seed();
0057   _vertex_id = source.get_vertex_id();
0058   _is_positive_charge = source.get_positive_charge();
0059   _chisq = source.get_chisq();
0060   _ndf = source.get_ndf();
0061   _track_crossing = source.get_crossing();
0062 
0063   // copy the states over into new state objects stored here
0064   clear_states();
0065   for (auto iter = source.begin_states(); iter != source.end_states(); ++iter)
0066   {
0067     _states.insert(std::make_pair(iter->first, static_cast<SvtxTrackState*>(iter->second->CloneMe())));
0068   }
0069 }
0070 
0071 void SvtxTrack_v4::identify(std::ostream& os) const
0072 {
0073   os << "SvtxTrack_v4 Object ";
0074   os << "id: " << get_id() << " ";
0075   os << "vertex id: " << get_vertex_id() << " ";
0076   os << "charge: " << get_charge() << " ";
0077   os << "chisq: " << get_chisq() << " ndf:" << get_ndf() << " ";
0078   os << "nstates: " << _states.size() << " ";
0079   os << std::endl;
0080 
0081   os << "(px,py,pz) = ("
0082      << get_px() << ","
0083      << get_py() << ","
0084      << get_pz() << ")" << std::endl;
0085 
0086   os << "(x,y,z) = (" << get_x() << "," << get_y() << "," << get_z() << ")" << std::endl;
0087 
0088   os << "Silicon clusters " << std::endl;
0089   if (_silicon_seed)
0090   {
0091     for (auto iter = _silicon_seed->begin_cluster_keys();
0092          iter != _silicon_seed->end_cluster_keys();
0093          ++iter)
0094     {
0095       std::cout << *iter << ", ";
0096     }
0097   }
0098   os << std::endl
0099      << "Tpc + TPOT clusters " << std::endl;
0100   if (_tpc_seed)
0101   {
0102     for (auto iter = _tpc_seed->begin_cluster_keys();
0103          iter != _tpc_seed->end_cluster_keys();
0104          ++iter)
0105     {
0106       std::cout << *iter << ", ";
0107     }
0108   }
0109   os << std::endl;
0110 
0111   return;
0112 }
0113 
0114 void SvtxTrack_v4::clear_states()
0115 {
0116   for (const auto& pair : _states)
0117   {
0118     delete pair.second;
0119   }
0120 
0121   _states.clear();
0122 }
0123 
0124 int SvtxTrack_v4::isValid() const
0125 {
0126   return 1;
0127 }
0128 
0129 const SvtxTrackState* SvtxTrack_v4::get_state(float pathlength) const
0130 {
0131   const auto iter = _states.find(pathlength);
0132   return (iter == _states.end()) ? nullptr : iter->second;
0133 }
0134 
0135 SvtxTrackState* SvtxTrack_v4::get_state(float pathlength)
0136 {
0137   const auto iter = _states.find(pathlength);
0138   return (iter == _states.end()) ? nullptr : iter->second;
0139 }
0140 
0141 SvtxTrackState* SvtxTrack_v4::insert_state(const SvtxTrackState* state)
0142 {
0143   // find closest iterator
0144   const auto pathlength = state->get_pathlength();
0145   auto iterator = _states.lower_bound(pathlength);
0146   if (iterator == _states.end() || pathlength < iterator->first)
0147   {
0148     // pathlength not found. Make a copy and insert
0149     const auto copy = static_cast<SvtxTrackState*>(state->CloneMe());
0150     iterator = _states.insert(iterator, std::make_pair(pathlength, copy));
0151   }
0152 
0153   // return matching state
0154   return iterator->second;
0155 }
0156 
0157 size_t SvtxTrack_v4::erase_state(float pathlength)
0158 {
0159   StateIter iter = _states.find(pathlength);
0160   if (iter == _states.end())
0161   {
0162     return _states.size();
0163   }
0164 
0165   delete iter->second;
0166   _states.erase(iter);
0167   return _states.size();
0168 }