File indexing completed on 2025-08-06 08:18:14
0001 #ifndef TRACKBASEHISTORIC_SVTXTRACKV2_H
0002 #define TRACKBASEHISTORIC_SVTXTRACKV2_H
0003
0004 #include "SvtxTrack.h"
0005 #include "SvtxTrackState.h"
0006
0007 #include <trackbase/TrkrDefs.h>
0008
0009 #include <cmath>
0010 #include <cstddef> // for size_t
0011 #include <iostream>
0012 #include <map>
0013 #include <utility> // for pair
0014
0015 class PHObject;
0016
0017 class SvtxTrack_v2 : public SvtxTrack
0018 {
0019 public:
0020 SvtxTrack_v2();
0021
0022
0023 SvtxTrack_v2(const SvtxTrack&);
0024
0025
0026 SvtxTrack_v2(const SvtxTrack_v2&);
0027
0028
0029 SvtxTrack_v2& operator=(const SvtxTrack_v2& track);
0030
0031
0032 ~SvtxTrack_v2() override;
0033
0034
0035 void identify(std::ostream& os = std::cout) const override;
0036 void Reset() override { *this = SvtxTrack_v2(); }
0037 int isValid() const override;
0038 PHObject* CloneMe() const override { return new SvtxTrack_v2(*this); }
0039
0040
0041 using PHObject::CopyFrom;
0042
0043 void CopyFrom(const SvtxTrack&) override;
0044 void CopyFrom(SvtxTrack* source) override
0045 {
0046 CopyFrom(*source);
0047 }
0048
0049
0050
0051
0052
0053 unsigned int get_id() const override { return _track_id; }
0054 void set_id(unsigned int id) override { _track_id = id; }
0055
0056 unsigned int get_vertex_id() const override { return _vertex_id; }
0057 void set_vertex_id(unsigned int id) override { _vertex_id = id; }
0058
0059 bool get_positive_charge() const override { return _is_positive_charge; }
0060 void set_positive_charge(bool ispos) override { _is_positive_charge = ispos; }
0061
0062 int get_charge() const override { return (get_positive_charge()) ? 1 : -1; }
0063 void set_charge(int charge) override { (charge > 0) ? set_positive_charge(true) : set_positive_charge(false); }
0064
0065 float get_chisq() const override { return _chisq; }
0066 void set_chisq(float chisq) override { _chisq = chisq; }
0067
0068 unsigned int get_ndf() const override { return _ndf; }
0069 void set_ndf(int ndf) override { _ndf = ndf; }
0070
0071 float get_quality() const override { return (_ndf != 0) ? _chisq / _ndf : NAN; }
0072
0073 float get_dca() const override { return _dca; }
0074 void set_dca(float dca) override { _dca = dca; }
0075
0076 float get_dca_error() const override { return _dca_error; }
0077 void set_dca_error(float dca_error) override { _dca_error = dca_error; }
0078
0079 float get_dca2d() const override { return _dca2d; }
0080 void set_dca2d(float dca2d) override { _dca2d = dca2d; }
0081
0082 float get_dca2d_error() const override { return _dca2d_error; }
0083 void set_dca2d_error(float error) override { _dca2d_error = error; }
0084
0085 float get_dca3d_xy() const override { return _dca3d_xy; }
0086 void set_dca3d_xy(float dcaxy) override { _dca3d_xy = dcaxy; }
0087
0088 float get_dca3d_xy_error() const override { return _dca3d_xy_error; }
0089 void set_dca3d_xy_error(float error) override { _dca3d_xy_error = error; }
0090
0091 float get_dca3d_z() const override { return _dca3d_z; }
0092 void set_dca3d_z(float dcaz) override { _dca3d_z = dcaz; }
0093
0094 float get_dca3d_z_error() const override { return _dca3d_z_error; }
0095 void set_dca3d_z_error(float error) override { _dca3d_z_error = error; }
0096
0097 float get_x() const override { return _states.find(0.0)->second->get_x(); }
0098 void set_x(float x) override { _states[0.0]->set_x(x); }
0099
0100 float get_y() const override { return _states.find(0.0)->second->get_y(); }
0101 void set_y(float y) override { _states[0.0]->set_y(y); }
0102
0103 float get_z() const override { return _states.find(0.0)->second->get_z(); }
0104 void set_z(float z) override { _states[0.0]->set_z(z); }
0105
0106 float get_pos(unsigned int i) const override { return _states.find(0.0)->second->get_pos(i); }
0107
0108 float get_px() const override { return _states.find(0.0)->second->get_px(); }
0109 void set_px(float px) override { _states[0.0]->set_px(px); }
0110
0111 float get_py() const override { return _states.find(0.0)->second->get_py(); }
0112 void set_py(float py) override { _states[0.0]->set_py(py); }
0113
0114 float get_pz() const override { return _states.find(0.0)->second->get_pz(); }
0115 void set_pz(float pz) override { _states[0.0]->set_pz(pz); }
0116
0117 float get_mom(unsigned int i) const override { return _states.find(0.0)->second->get_mom(i); }
0118
0119 float get_p() const override { return sqrt(pow(get_px(), 2) + pow(get_py(), 2) + pow(get_pz(), 2)); }
0120 float get_pt() const override { return sqrt(pow(get_px(), 2) + pow(get_py(), 2)); }
0121 float get_eta() const override { return asinh(get_pz() / get_pt()); }
0122 float get_phi() const override { return atan2(get_py(), get_px()); }
0123
0124 float get_error(int i, int j) const override { return _states.find(0.0)->second->get_error(i, j); }
0125 void set_error(int i, int j, float value) override { return _states[0.0]->set_error(i, j, value); }
0126
0127
0128
0129
0130 bool empty_states() const override { return _states.empty(); }
0131 size_t size_states() const override { return _states.size(); }
0132 size_t count_states(float pathlength) const override { return _states.count(pathlength); }
0133
0134 void clear_states() override;
0135
0136 const SvtxTrackState* get_state(float pathlength) const override;
0137 SvtxTrackState* get_state(float pathlength) override;
0138 SvtxTrackState* insert_state(const SvtxTrackState* state) override;
0139 size_t erase_state(float pathlength) override;
0140
0141 ConstStateIter begin_states() const override { return _states.begin(); }
0142 ConstStateIter find_state(float pathlength) const override { return _states.find(pathlength); }
0143 ConstStateIter end_states() const override { return _states.end(); }
0144
0145 StateIter begin_states() override { return _states.begin(); }
0146 StateIter find_state(float pathlength) override { return _states.find(pathlength); }
0147 StateIter end_states() override { return _states.end(); }
0148
0149
0150
0151
0152
0153
0154 void clear_clusters() override { _cluster_ids.clear(); }
0155 bool empty_clusters() const override { return _cluster_ids.empty(); }
0156 size_t size_clusters() const override { return _cluster_ids.size(); }
0157
0158 void insert_cluster(unsigned int clusterid) override { _cluster_ids.insert(clusterid); }
0159 size_t erase_cluster(unsigned int clusterid) override { return _cluster_ids.erase(clusterid); }
0160 ConstClusterIter begin_clusters() const override { return _cluster_ids.begin(); }
0161 ConstClusterIter find_cluster(unsigned int clusterid) const override { return _cluster_ids.find(clusterid); }
0162 ConstClusterIter end_clusters() const override { return _cluster_ids.end(); }
0163 ClusterIter find_cluster(unsigned int clusterid) override { return _cluster_ids.find(clusterid); }
0164 ClusterIter begin_clusters() override { return _cluster_ids.begin(); }
0165 ClusterIter end_clusters() override { return _cluster_ids.end(); }
0166
0167
0168 void clear_cluster_keys() override { _cluster_keys.clear(); }
0169 bool empty_cluster_keys() const override { return _cluster_keys.empty(); }
0170 size_t size_cluster_keys() const override { return _cluster_keys.size(); }
0171
0172 void insert_cluster_key(TrkrDefs::cluskey clusterid) override { _cluster_keys.insert(clusterid); }
0173 size_t erase_cluster_key(TrkrDefs::cluskey clusterid) override { return _cluster_keys.erase(clusterid); }
0174 ConstClusterKeyIter find_cluster_key(TrkrDefs::cluskey clusterid) const override { return _cluster_keys.find(clusterid); }
0175 ConstClusterKeyIter begin_cluster_keys() const override { return _cluster_keys.begin(); }
0176 ConstClusterKeyIter end_cluster_keys() const override { return _cluster_keys.end(); }
0177 ClusterKeyIter find_cluster_keys(unsigned int clusterid) override { return _cluster_keys.find(clusterid); }
0178 ClusterKeyIter begin_cluster_keys() override { return _cluster_keys.begin(); }
0179 ClusterKeyIter end_cluster_keys() override { return _cluster_keys.end(); }
0180
0181
0182
0183
0184 float get_cal_dphi(CAL_LAYER layer) const override;
0185 void set_cal_dphi(CAL_LAYER layer, float dphi) override { _cal_dphi[layer] = dphi; }
0186
0187 float get_cal_deta(CAL_LAYER layer) const override;
0188 void set_cal_deta(CAL_LAYER layer, float deta) override { _cal_deta[layer] = deta; }
0189
0190 float get_cal_energy_3x3(CAL_LAYER layer) const override;
0191 void set_cal_energy_3x3(CAL_LAYER layer, float energy_3x3) override { _cal_energy_3x3[layer] = energy_3x3; }
0192
0193 float get_cal_energy_5x5(CAL_LAYER layer) const override;
0194 void set_cal_energy_5x5(CAL_LAYER layer, float energy_5x5) override { _cal_energy_5x5[layer] = energy_5x5; }
0195
0196 unsigned int get_cal_cluster_id(CAL_LAYER layer) const override;
0197 void set_cal_cluster_id(CAL_LAYER layer, unsigned int id) override { _cal_cluster_id[layer] = id; }
0198
0199 TrkrDefs::cluskey get_cal_cluster_key(CAL_LAYER layer) const override;
0200 void set_cal_cluster_key(CAL_LAYER layer, TrkrDefs::cluskey id) override { _cal_cluster_key[layer] = id; }
0201
0202 float get_cal_cluster_e(CAL_LAYER layer) const override;
0203 void set_cal_cluster_e(CAL_LAYER layer, float e) override { _cal_cluster_e[layer] = e; }
0204
0205
0206 float get_acts_covariance(unsigned int i, unsigned int j) const override { return _acts_trajectory_covariance[i][j]; }
0207 void set_acts_covariance(unsigned int i, unsigned int j, float value) override { _acts_trajectory_covariance[i][j] = value; }
0208
0209 private:
0210
0211 float _acts_trajectory_covariance[6][6] = {};
0212
0213
0214 unsigned int _track_id = UINT_MAX;
0215 unsigned int _vertex_id = UINT_MAX;
0216 bool _is_positive_charge = false;
0217 float _chisq = NAN;
0218 unsigned int _ndf = 0;
0219
0220
0221 float _dca = NAN;
0222 float _dca_error = NAN;
0223 float _dca2d = NAN;
0224 float _dca2d_error = NAN;
0225 float _dca3d_xy = NAN;
0226 float _dca3d_xy_error = NAN;
0227 float _dca3d_z = NAN;
0228 float _dca3d_z_error = NAN;
0229
0230
0231
0232
0233 StateMap _states;
0234
0235
0236 ClusterSet _cluster_ids;
0237 ClusterKeySet _cluster_keys;
0238
0239
0240 std::map<CAL_LAYER, float> _cal_dphi;
0241 std::map<CAL_LAYER, float> _cal_deta;
0242 std::map<CAL_LAYER, float> _cal_energy_3x3;
0243 std::map<CAL_LAYER, float> _cal_energy_5x5;
0244 std::map<CAL_LAYER, int> _cal_cluster_id;
0245 std::map<CAL_LAYER, TrkrDefs::cluskey> _cal_cluster_key;
0246 std::map<CAL_LAYER, float> _cal_cluster_e;
0247
0248 ClassDefOverride(SvtxTrack_v2, 2)
0249 };
0250
0251 #endif