Back to home page

sPhenix code displayed by LXR

 
 

    


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   //* base class copy constructor
0021   SvtxTrack_v5(const SvtxTrack&);
0022 
0023   //* copy constructor
0024   SvtxTrack_v5(const SvtxTrack_v5&);
0025 
0026   //* assignment operator
0027   SvtxTrack_v5& operator=(const SvtxTrack_v5& source);
0028 
0029   //* destructor
0030   ~SvtxTrack_v5() override;
0031 
0032   // The "standard PHObject response" functions...
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   //! import PHObject CopyFrom, in order to avoid clang warning
0039   using PHObject::CopyFrom;
0040   // copy content from base class
0041   void CopyFrom(const SvtxTrack&) override;
0042   void CopyFrom(SvtxTrack* source) override
0043   {
0044     CopyFrom(*source);
0045   }
0046 
0047   //
0048   // basic track information ---------------------------------------------------
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   // cluster count information -------------------------------------------------
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   // state methods -------------------------------------------------------------
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   // track state information
0148   StateMap _states;  //< path length => state object. each state has 30 floats, a string, and a cluskey
0149 
0150   // track information
0151   float _chisq = std::numeric_limits<float>::quiet_NaN(); //4byte
0152   unsigned int _track_id = std::numeric_limits<unsigned int>::max(); //4byte
0153   unsigned int _vertex_id = std::numeric_limits<unsigned int>::max(); //4byte
0154   short int _track_crossing = std::numeric_limits<short int>::max(); //2byte
0155   signed char m_charge = 0; //1byte
0156   unsigned char _ndf = 0; //1byte
0157   unsigned char _nmvtx_clusters = 0; //1byte
0158   unsigned char _nintt_clusters = 0; //1byte
0159   unsigned char _ntpc_clusters = 0; //1byte
0160   unsigned char _ntpot_clusters = 0; //1byte
0161 
0162   ClassDefOverride(SvtxTrack_v5, 1)
0163 };
0164 
0165 #endif