File indexing completed on 2026-08-31 08:21:35
0001 #ifndef TRACKBASEHISTORIC_SVTXTRACKV5_H
0002 #define TRACKBASEHISTORIC_SVTXTRACKV5_H
0003
0004 #include "SvtxTrack.h"
0005 #include "SvtxTrackState.h"
0006
0007 #include <cmath>
0008 #include <cstddef>
0009 #include <iostream>
0010 #include <limits>
0011 #include <map>
0012
0013 class PHObject;
0014
0015 class SvtxTrack_v5 : public SvtxTrack
0016 {
0017 public:
0018 SvtxTrack_v5();
0019
0020
0021 SvtxTrack_v5(const SvtxTrack&);
0022
0023
0024 SvtxTrack_v5(const SvtxTrack_v5&);
0025
0026
0027 SvtxTrack_v5& operator=(const SvtxTrack_v5& source);
0028
0029
0030 ~SvtxTrack_v5() override;
0031
0032
0033 void identify(std::ostream& os = std::cout) const override;
0034 void Reset() override { *this = SvtxTrack_v5(); }
0035 int isValid() const override;
0036 PHObject* CloneMe() const override { return new SvtxTrack_v5(*this); }
0037
0038
0039 using PHObject::CopyFrom;
0040
0041 void CopyFrom(const SvtxTrack&) override;
0042 void CopyFrom(SvtxTrack* source) override
0043 {
0044 CopyFrom(*source);
0045 }
0046
0047
0048
0049
0050
0051 unsigned int get_id() const override { return _track_id; }
0052 void set_id(unsigned int id) override { _track_id = id; }
0053
0054 short int get_crossing() const override { return _track_crossing; }
0055 void set_crossing(short int crossing) override { _track_crossing = crossing; }
0056
0057 unsigned int get_vertex_id() const override { return _vertex_id; }
0058 void set_vertex_id(unsigned int id) override { _vertex_id = id; }
0059
0060 bool get_positive_charge() const override { return m_charge > 0; }
0061 void set_positive_charge(bool ispos) override { m_charge = ispos ? 1 : -1; }
0062
0063 int get_charge() const override { return m_charge; }
0064 void set_charge(int charge) override { m_charge = (charge > 0) ? 1 : -1; }
0065
0066 float get_chisq() const override { return _chisq; }
0067 void set_chisq(float chisq) override { _chisq = chisq; }
0068
0069 unsigned int get_ndf() const override { return _ndf; }
0070 void set_ndf(int ndf) override;
0071
0072 float get_quality() const override { return (_ndf != 0) ? _chisq / _ndf : NAN; }
0073
0074 float get_x() const override;
0075 void set_x(float x) override;
0076
0077 float get_y() const override;
0078 void set_y(float y) override;
0079
0080 float get_z() const override;
0081 void set_z(float z) override;
0082
0083 float get_pos(unsigned int i) const override;
0084
0085 float get_px() const override;
0086 void set_px(float px) override;
0087
0088 float get_py() const override;
0089 void set_py(float py) override;
0090
0091 float get_pz() const override;
0092 void set_pz(float pz) override;
0093
0094 float get_mom(unsigned int i) const override;
0095
0096 float get_p() const override { return sqrt(pow(get_px(), 2) + pow(get_py(), 2) + pow(get_pz(), 2)); }
0097 float get_pt() const override { return sqrt(pow(get_px(), 2) + pow(get_py(), 2)); }
0098 float get_eta() const override { return asinh(get_pz() / get_pt()); }
0099 float get_phi() const override { return atan2(get_py(), get_px()); }
0100
0101 float get_error(int i, int j) const override;
0102 void set_error(int i, int j, float value) override;
0103
0104
0105
0106
0107
0108 unsigned int get_nmvtx_clusters() const { return _nmvtx_clusters; }
0109 void set_nmvtx_clusters(unsigned int nclusters) { _nmvtx_clusters = compress_cluster_count(nclusters); }
0110
0111 unsigned int get_nintt_clusters() const { return _nintt_clusters; }
0112 void set_nintt_clusters(unsigned int nclusters) { _nintt_clusters = compress_cluster_count(nclusters); }
0113
0114 unsigned int get_ntpc_clusters() const { return _ntpc_clusters; }
0115 void set_ntpc_clusters(unsigned int nclusters) { _ntpc_clusters = compress_cluster_count(nclusters); }
0116
0117 unsigned int get_ntpot_clusters() const { return _ntpot_clusters; }
0118 void set_ntpot_clusters(unsigned int nclusters) { _ntpot_clusters = compress_cluster_count(nclusters); }
0119
0120
0121
0122
0123 bool empty_states() const override { return _states.empty(); }
0124 size_t size_states() const override { return _states.size(); }
0125 size_t count_states(float pathlength) const override { return _states.count(pathlength); }
0126 void clear_states() override;
0127
0128 const SvtxTrackState* get_state(float pathlength) const override;
0129 SvtxTrackState* get_state(float pathlength) override;
0130 SvtxTrackState* insert_state(const SvtxTrackState* state) override;
0131 size_t erase_state(float pathlength) override;
0132
0133 ConstStateIter begin_states() const override { return _states.begin(); }
0134 ConstStateIter find_state(float pathlength) const override { return _states.find(pathlength); }
0135 ConstStateIter end_states() const override { return _states.end(); }
0136
0137 StateIter begin_states() override { return _states.begin(); }
0138 StateIter find_state(float pathlength) override { return _states.find(pathlength); }
0139 StateIter end_states() override { return _states.end(); }
0140
0141 private:
0142 static unsigned char compress_cluster_count(unsigned int nclusters);
0143
0144 const SvtxTrackState* get_pca_state() const;
0145 SvtxTrackState* get_pca_state();
0146
0147
0148 StateMap _states;
0149
0150
0151 float _chisq = std::numeric_limits<float>::quiet_NaN();
0152 unsigned int _track_id = std::numeric_limits<unsigned int>::max();
0153 unsigned int _vertex_id = std::numeric_limits<unsigned int>::max();
0154 short int _track_crossing = std::numeric_limits<short int>::max();
0155 signed char m_charge = 0;
0156 unsigned char _ndf = 0;
0157 unsigned char _nmvtx_clusters = 0;
0158 unsigned char _nintt_clusters = 0;
0159 unsigned char _ntpc_clusters = 0;
0160 unsigned char _ntpot_clusters = 0;
0161
0162 ClassDefOverride(SvtxTrack_v5, 1)
0163 };
0164
0165 #endif