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
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
0025
0026
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
0047 if (this == &source)
0048 {
0049 return;
0050 }
0051
0052
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
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
0144 const auto pathlength = state->get_pathlength();
0145 auto iterator = _states.lower_bound(pathlength);
0146 if (iterator == _states.end() || pathlength < iterator->first)
0147 {
0148
0149 const auto copy = static_cast<SvtxTrackState*>(state->CloneMe());
0150 iterator = _states.insert(iterator, std::make_pair(pathlength, copy));
0151 }
0152
0153
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 }