Back to home page

sPhenix code displayed by LXR

 
 

    


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

0001 #ifndef TRACKBASEHISTORIC_SVTXTRACKV4_H
0002 #define TRACKBASEHISTORIC_SVTXTRACKV4_H
0003 
0004 #include "SvtxTrack.h"
0005 #include "SvtxTrackState.h"
0006 #include "TrackSeed.h"
0007 
0008 #include <trackbase/TrkrDefs.h>
0009 
0010 #include <cmath>
0011 #include <cstddef>  // for size_t
0012 #include <iostream>
0013 #include <map>
0014 #include <utility>  // for pair
0015 
0016 class PHObject;
0017 
0018 class SvtxTrack_v4 : public SvtxTrack
0019 {
0020  public:
0021   SvtxTrack_v4();
0022 
0023   //* base class copy constructor
0024   SvtxTrack_v4(const SvtxTrack&);
0025 
0026   //* copy constructor
0027   SvtxTrack_v4(const SvtxTrack_v4&);
0028 
0029   //* assignment operator
0030   SvtxTrack_v4& operator=(const SvtxTrack_v4& track);
0031 
0032   //* destructor
0033   ~SvtxTrack_v4() override;
0034 
0035   // The "standard PHObject response" functions...
0036   void identify(std::ostream& os = std::cout) const override;
0037   void Reset() override { *this = SvtxTrack_v4(); }
0038   int isValid() const override;
0039   PHObject* CloneMe() const override { return new SvtxTrack_v4(*this); }
0040 
0041   //! import PHObject CopyFrom, in order to avoid clang warning
0042   using PHObject::CopyFrom;
0043   // copy content from base class
0044   void CopyFrom(const SvtxTrack&) override;
0045   void CopyFrom(SvtxTrack* source) override
0046   {
0047     CopyFrom(*source);
0048   }
0049 
0050   //
0051   // basic track information ---------------------------------------------------
0052   //
0053 
0054   unsigned int get_id() const override { return _track_id; }
0055   void set_id(unsigned int id) override { _track_id = id; }
0056 
0057   TrackSeed* get_tpc_seed() const override { return _tpc_seed; }
0058   void set_tpc_seed(TrackSeed* seed) override { _tpc_seed = seed; }
0059 
0060   TrackSeed* get_silicon_seed() const override { return _silicon_seed; }
0061   void set_silicon_seed(TrackSeed* seed) override { _silicon_seed = seed; }
0062 
0063   short int get_crossing() const override { return _track_crossing; }
0064   void set_crossing(short int cross) override { _track_crossing = cross; }
0065 
0066   unsigned int get_vertex_id() const override { return _vertex_id; }
0067   void set_vertex_id(unsigned int id) override { _vertex_id = id; }
0068 
0069   bool get_positive_charge() const override { return _is_positive_charge; }
0070   void set_positive_charge(bool ispos) override { _is_positive_charge = ispos; }
0071 
0072   int get_charge() const override { return (get_positive_charge()) ? 1 : -1; }
0073   void set_charge(int charge) override { (charge > 0) ? set_positive_charge(true) : set_positive_charge(false); }
0074 
0075   float get_chisq() const override { return _chisq; }
0076   void set_chisq(float chisq) override { _chisq = chisq; }
0077 
0078   unsigned int get_ndf() const override { return _ndf; }
0079   void set_ndf(int ndf) override { _ndf = ndf; }
0080 
0081   float get_quality() const override { return (_ndf != 0) ? _chisq / _ndf : NAN; }
0082 
0083   float get_x() const override { return _states.find(0.0)->second->get_x(); }
0084   void set_x(float x) override { _states[0.0]->set_x(x); }
0085 
0086   float get_y() const override { return _states.find(0.0)->second->get_y(); }
0087   void set_y(float y) override { _states[0.0]->set_y(y); }
0088 
0089   float get_z() const override { return _states.find(0.0)->second->get_z(); }
0090   void set_z(float z) override { _states[0.0]->set_z(z); }
0091 
0092   float get_pos(unsigned int i) const override { return _states.find(0.0)->second->get_pos(i); }
0093 
0094   float get_px() const override { return _states.find(0.0)->second->get_px(); }
0095   void set_px(float px) override { _states[0.0]->set_px(px); }
0096 
0097   float get_py() const override { return _states.find(0.0)->second->get_py(); }
0098   void set_py(float py) override { _states[0.0]->set_py(py); }
0099 
0100   float get_pz() const override { return _states.find(0.0)->second->get_pz(); }
0101   void set_pz(float pz) override { _states[0.0]->set_pz(pz); }
0102 
0103   float get_mom(unsigned int i) const override { return _states.find(0.0)->second->get_mom(i); }
0104 
0105   float get_p() const override { return sqrt(pow(get_px(), 2) + pow(get_py(), 2) + pow(get_pz(), 2)); }
0106   float get_pt() const override { return sqrt(pow(get_px(), 2) + pow(get_py(), 2)); }
0107   float get_eta() const override { return asinh(get_pz() / get_pt()); }
0108   float get_phi() const override { return atan2(get_py(), get_px()); }
0109 
0110   float get_error(int i, int j) const override { return _states.find(0.0)->second->get_error(i, j); }
0111   void set_error(int i, int j, float value) override { return _states[0.0]->set_error(i, j, value); }
0112 
0113   //
0114   // state methods -------------------------------------------------------------
0115   //
0116   bool empty_states() const override { return _states.empty(); }
0117   size_t size_states() const override { return _states.size(); }
0118   size_t count_states(float pathlength) const override { return _states.count(pathlength); }
0119   // cppcheck-suppress virtualCallInConstructor
0120   void clear_states() override;
0121 
0122   const SvtxTrackState* get_state(float pathlength) const override;
0123   SvtxTrackState* get_state(float pathlength) override;
0124   SvtxTrackState* insert_state(const SvtxTrackState* state) override;
0125   size_t erase_state(float pathlength) override;
0126 
0127   ConstStateIter begin_states() const override { return _states.begin(); }
0128   ConstStateIter find_state(float pathlength) const override { return _states.find(pathlength); }
0129   ConstStateIter end_states() const override { return _states.end(); }
0130 
0131   StateIter begin_states() override { return _states.begin(); }
0132   StateIter find_state(float pathlength) override { return _states.find(pathlength); }
0133   StateIter end_states() override { return _states.end(); }
0134 
0135  private:
0136   // track information
0137   TrackSeed* _tpc_seed = nullptr;
0138   TrackSeed* _silicon_seed = nullptr;
0139   unsigned int _track_id = UINT_MAX;
0140   unsigned int _vertex_id = UINT_MAX;
0141   bool _is_positive_charge = false;
0142   float _chisq = NAN;
0143   unsigned int _ndf = 0;
0144   short int _track_crossing = SHRT_MAX;
0145 
0146   // track state information
0147   StateMap _states;  //< path length => state object
0148 
0149   ClassDefOverride(SvtxTrack_v4, 4)
0150 };
0151 
0152 #endif