File indexing completed on 2025-08-06 08:18:15
0001 #ifndef TRACKBASEHISTORIC_SVTXTRACKINFOV3_H
0002 #define TRACKBASEHISTORIC_SVTXTRACKINFOV3_H
0003
0004 #include "SvtxTrackInfo.h"
0005 #include "TrackStateInfo_v1.h"
0006
0007 class PHObject;
0008
0009 class SvtxTrackInfo_v3 final : public SvtxTrackInfo
0010 {
0011 public:
0012 enum STATE
0013 {
0014 VERTEX = 0,
0015 OUTER_TPC = 1,
0016 EMCAL_FRONTFACE = 2,
0017 EMCAL_BACKFACE = 3,
0018 HCALIN_FRONTFACE = 4,
0019 HCALIN_BACKFACE = 5,
0020 HCALOUT_FRONTFACE = 6,
0021 HCALOUT_BACKFACE = 7
0022 };
0023
0024 SvtxTrackInfo_v3()
0025 : m_states(8, TrackStateInfo_v1())
0026 {
0027 }
0028
0029
0030 SvtxTrackInfo_v3(const SvtxTrackInfo&)
0031 : m_states(8, TrackStateInfo_v1())
0032 {
0033 }
0034
0035
0036 SvtxTrackInfo_v3(const SvtxTrackInfo_v3& source)
0037 : m_states(8, TrackStateInfo_v1())
0038 {
0039 m_track_id = source.get_track_id();
0040 m_outer_tpc_subsurfkey = source.get_subsurfkey();
0041 m_chisq = source.get_chisq();
0042 m_ndf = source.get_ndf();
0043 m_crossing = source.get_crossing();
0044 m_hitbitmap = source.get_hitbitmap();
0045
0046 for (int istate = STATE::VERTEX; istate <= STATE::HCALOUT_BACKFACE; istate++)
0047 {
0048 set_x(istate, source.get_x(istate));
0049 set_y(istate, source.get_y(istate));
0050 set_z(istate, source.get_z(istate));
0051 set_phi(istate, source.get_phi());
0052 set_theta(istate, source.get_theta());
0053 set_qOp(istate, source.get_qOp());
0054
0055 for (int i = 0; i < 5; i++)
0056 {
0057 for (int j = i; j < 5; j++)
0058 {
0059 set_covariance(istate, i, j, source.get_covariance(istate, i, j));
0060 }
0061 }
0062 }
0063 }
0064
0065
0066 SvtxTrackInfo_v3& operator=(const SvtxTrackInfo_v3& track);
0067
0068
0069 ~SvtxTrackInfo_v3() override {}
0070
0071
0072 void identify(std::ostream& os = std::cout) const override
0073 {
0074 os << "SvtxTrackInfo_v3 class" << std::endl;
0075 }
0076 void Reset() override { *this = SvtxTrackInfo_v3(); }
0077
0078 PHObject* CloneMe() const override { return new SvtxTrackInfo_v3(*this); }
0079
0080
0081 using PHObject::CopyFrom;
0082
0083 void CopyFrom(const SvtxTrackInfo&) override;
0084 void CopyFrom(SvtxTrackInfo* source) override
0085 {
0086 CopyFrom(*source);
0087 }
0088
0089
0090
0091
0092
0093 unsigned int get_track_id() const override { return m_track_id; }
0094 void set_track_id(unsigned int id) override { m_track_id = id; }
0095
0096 uint16_t get_subsurfkey() const override { return m_outer_tpc_subsurfkey; }
0097 void set_subsurfkey(uint16_t key) override { m_outer_tpc_subsurfkey = key; }
0098
0099 float get_chisq() const override { return m_chisq; }
0100 void set_chisq(float chisq) override { m_chisq = chisq; }
0101
0102 uint8_t get_ndf() const override { return m_ndf; }
0103 void set_ndf(uint8_t ndf) override { m_ndf = ndf; }
0104
0105 uint64_t get_hitbitmap() const override { return m_hitbitmap; }
0106 void set_hitbitmap(uint64_t hitbitmap) override { m_hitbitmap = hitbitmap; }
0107
0108 short int get_crossing() const override { return m_crossing; }
0109 void set_crossing(short int crossing) override { m_crossing = crossing; }
0110
0111 float get_x() const override { return m_states.at(STATE::VERTEX).get_x(); }
0112 void set_x(float x) override { m_states.at(STATE::VERTEX).set_x(x); }
0113
0114 float get_y() const override { return m_states.at(STATE::VERTEX).get_y(); }
0115 void set_y(float y) override { m_states.at(STATE::VERTEX).set_y(y); }
0116
0117 float get_z() const override { return m_states.at(STATE::VERTEX).get_z(); }
0118 void set_z(float z) override { m_states.at(STATE::VERTEX).set_z(z); }
0119
0120 float get_pos(unsigned int i) const override { return m_states.at(STATE::VERTEX).get_pos(i); }
0121
0122 float get_px() const override { return m_states.at(STATE::VERTEX).get_px(); }
0123 float get_py() const override { return m_states.at(STATE::VERTEX).get_py(); }
0124 float get_pz() const override { return m_states.at(STATE::VERTEX).get_pz(); }
0125
0126 void set_phi(const float phi) override { m_states.at(STATE::VERTEX).set_phi(phi); }
0127 void set_theta(const float theta) override { m_states.at(STATE::VERTEX).set_theta(theta); }
0128 void set_qOp(const float qop) override { m_states.at(STATE::VERTEX).set_qOp(qop); }
0129
0130 float get_mom(unsigned int i) const override { return m_states.at(STATE::VERTEX).get_mom(i); }
0131
0132 float get_p() const override { return m_states.at(STATE::VERTEX).get_p(); }
0133 float get_pt() const override { return m_states.at(STATE::VERTEX).get_pt(); }
0134 float get_eta() const override { return m_states.at(STATE::VERTEX).get_eta(); }
0135 float get_phi() const override { return m_states.at(STATE::VERTEX).get_phi(); }
0136 float get_theta() const override { return m_states.at(STATE::VERTEX).get_theta(); }
0137 float get_qOp() const override { return m_states.at(STATE::VERTEX).get_qOp(); }
0138 int get_charge() const override { return m_states.at(STATE::VERTEX).get_charge(); }
0139
0140 float get_covariance(int i, int j) const override { return m_states.at(STATE::VERTEX).get_covariance(i, j); }
0141 void set_covariance(int i, int j, float value) override { m_states.at(STATE::VERTEX).set_covariance(i, j, value); }
0142
0143 float get_x(int state) const override { return m_states.at(state).get_x(); }
0144 void set_x(int state, float x) override { m_states.at(state).set_x(x); }
0145
0146 float get_y(int state) const override { return m_states.at(state).get_y(); }
0147 void set_y(int state, float y) override { m_states.at(state).set_y(y); }
0148
0149 float get_z(int state) const override { return m_states.at(state).get_z(); }
0150 void set_z(int state, float z) override { m_states.at(state).set_z(z); }
0151
0152 float get_pos(int state, unsigned int i) const override { return m_states.at(state).get_pos(i); }
0153
0154 float get_px(int state) const override { return m_states.at(state).get_px(); }
0155 float get_py(int state) const override { return m_states.at(state).get_py(); }
0156 float get_pz(int state) const override { return m_states.at(state).get_pz(); }
0157
0158 void set_phi(int state, const float phi) override { m_states.at(state).set_phi(phi); }
0159 void set_theta(int state, const float theta) override { m_states.at(state).set_theta(theta); }
0160 void set_qOp(int state, const float qop) override { m_states.at(state).set_qOp(qop); }
0161
0162 float get_mom(int state, unsigned int i) const override { return m_states.at(state).get_mom(i); }
0163
0164 float get_p(int state) const override { return m_states.at(state).get_p(); }
0165 float get_pt(int state) const override { return m_states.at(state).get_pt(); }
0166 float get_eta(int state) const override { return m_states.at(state).get_eta(); }
0167 float get_phi(int state) const override { return m_states.at(state).get_phi(); }
0168 float get_theta(int state) const override { return m_states.at(state).get_theta(); }
0169 float get_qOp(int state) const override { return m_states.at(state).get_qOp(); }
0170
0171 float get_projected_eta(int state) const override { return asinh(m_states.at(state).get_z() / sqrt(pow(m_states.at(state).get_x(), 2) + pow(m_states.at(state).get_y(), 2))); }
0172 float get_projected_phi(int state) const override { return atan2(m_states.at(state).get_y(), m_states.at(state).get_x()); }
0173
0174 float get_covariance(int state, int i, int j) const override { return m_states.at(state).get_covariance(i, j); }
0175 void set_covariance(int state, int i, int j, float value) override { m_states.at(state).set_covariance(i, j, value); }
0176
0177 private:
0178
0179 unsigned int m_track_id = std::numeric_limits<unsigned int>::quiet_NaN();
0180 uint16_t m_outer_tpc_subsurfkey = std::numeric_limits<uint16_t>::quiet_NaN();
0181 float m_chisq = std::numeric_limits<float>::quiet_NaN();
0182 uint8_t m_ndf = std::numeric_limits<uint8_t>::quiet_NaN();
0183 uint64_t m_hitbitmap = std::numeric_limits<uint64_t>::quiet_NaN();
0184 short int m_crossing = std::numeric_limits<short int>::quiet_NaN();
0185
0186
0187 std::vector<TrackStateInfo_v1> m_states;
0188
0189 ClassDefOverride(SvtxTrackInfo_v3, 1)
0190 };
0191
0192 #endif