Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-06 08:18:15

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