Back to home page

sPhenix code displayed by LXR

 
 

    


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   //* base class copy constructor
0030   SvtxTrackInfo_v3(const SvtxTrackInfo&)
0031     : m_states(8, TrackStateInfo_v1())
0032   {
0033   }
0034 
0035   //* copy constructor
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   //* assignment operator
0066   SvtxTrackInfo_v3& operator=(const SvtxTrackInfo_v3& track);
0067 
0068   //* destructor
0069   ~SvtxTrackInfo_v3() override {}
0070 
0071   // The "standard PHObject response" functions...
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   //! import PHObject CopyFrom, in order to avoid clang warning
0081   using PHObject::CopyFrom;
0082   // copy content
0083   void CopyFrom(const SvtxTrackInfo&) override;
0084   void CopyFrom(SvtxTrackInfo* source) override
0085   {
0086     CopyFrom(*source);
0087   }
0088 
0089   //
0090   // basic track information ---------------------------------------------------
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   // track information
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   // track state information
0187   std::vector<TrackStateInfo_v1> m_states;
0188 
0189   ClassDefOverride(SvtxTrackInfo_v3, 1)
0190 };
0191 
0192 #endif