PandaRoot
PndFtsTrack.h
Go to the documentation of this file.
1 //
2 // Created by Bartosz Sobol on 11.03.2021.
3 //
4 
5 #pragma once
6 
7 #include <utility>
8 #include <vector>
9 
10 #include "PndFtsHelpers.h"
11 
12 namespace PndFtsTrackFinder {
13 
14 struct LineSubtrack {
15 
16  LineSubtrack() = default;
17 
18  inline LineSubtrack(const float dd, Line line, RawHitVector hits, const uint32_t parentEventId)
19  : fDd{dd}, fLine{std::move(line)}, fHits{std::move(hits)}, fParentEventId{parentEventId} {};
20 
21  inline LineSubtrack(const float dd, Line line, const uint32_t parentEventId) : fDd{dd}, fLine{std::move(line)}, fHits{}, fParentEventId{parentEventId} {};
22 
23  float fDd{};
26  uint32_t fParentEventId{};
27 };
28 
29 using LineSubtrackVector = std::vector<LineSubtrack>;
30 
31 struct LineTrack {
32 
33  LineTrack() = default;
34 
35  inline LineTrack(Line lineZOX, Line lineZOY, RawHitVector hits, uint32_t parentEventId)
36  : fLineZOX{std::move(lineZOX)}, fLineZOY{std::move(lineZOY)}, fHits{std::move(hits)}, fParentEventId{parentEventId} {};
37 
38  // It does construct not finished object, but is more efficient.
39  inline LineTrack(Line lineZOX, Line lineZOY, uint32_t parentEventId) : fLineZOX{std::move(lineZOX)}, fLineZOY{std::move(lineZOY)}, fHits{}, fParentEventId{parentEventId} {};
40 
41  inline bool operator<(const LineTrack &rhs) const { return this->fParentEventId < rhs.fParentEventId; }
42 
43  Line fLineZOX{};
44  Line fLineZOY{};
46  uint32_t fParentEventId{};
47 };
48 
49 using LineTrackVector = std::vector<LineTrack>;
50 
52 
53  CircleSubtrack() = default;
54 
55  inline CircleSubtrack(const float dd, Circle circle, RawHitVector hits, const uint32_t parentEventId)
56  : fDd{dd}, fCircle{std::move(circle)}, fHits{std::move(hits)}, fParentEventId{parentEventId} {};
57 
58  float fDd{};
59  Circle fCircle{};
61  uint32_t fParentEventId{};
62 };
63 
64 using CircleSubtrackVector = std::vector<CircleSubtrack>;
65 
66 struct CircleTrack {
67 
68  inline CircleTrack(Circle circleZOX, Line lineZOY, RawHitVector hits, uint32_t parentEventId)
69  : fCircleZOX{std::move(circleZOX)}, fLineZOY{std::move(lineZOY)}, fHits{std::move(hits)}, fParentEventId{parentEventId} {};
70 
71  // It does construct not finished object, but is more efficient.
72  inline CircleTrack(Circle circleZOX, Line lineZOY, uint32_t parentEventId)
73  : fCircleZOX{std::move(circleZOX)}, fLineZOY{std::move(lineZOY)}, fHits{}, fParentEventId{parentEventId} {};
74 
78  uint32_t fParentEventId;
79 
80  inline bool operator<(const CircleTrack &rhs) const { return this->fParentEventId < rhs.fParentEventId; }
81 };
82 
83 using CircleTrackVector = std::vector<CircleTrack>;
84 
86  inline PndFtsFullTrack() = default;
87 
88  inline PndFtsFullTrack(Line ft12LineZOX, Line ft12LineZOY, Circle ft34CircleZOX, Line ft34LineZOY, uint32_t parentEventId)
89  : fFT12LineZOX{std::move(ft12LineZOX)}, fFT12LineZOY{std::move(ft12LineZOY)}, fFT56LineZOX{}, fFT56LineZOY{}, fFT34LineZOY{std::move(ft34LineZOY)},
90  fFT34CircleZOX{std::move(ft34CircleZOX)}, fHits{}, fParentEventId{parentEventId}
91  {
92  }
93 
94  inline PndFtsFullTrack(Line ft12LineZOX, Line ft12LineZOY, Line ft56LineZOX, Line ft56LineZOY, Line ft34LineZOY, Circle ft34CircleZOX, RawHitVector hits, uint32_t parentEventId)
95  : fFT12LineZOX{std::move(ft12LineZOX)}, fFT12LineZOY{std::move(ft12LineZOY)}, fFT56LineZOX{std::move(ft56LineZOX)}, fFT56LineZOY{std::move(ft56LineZOY)},
96  fFT34LineZOY{std::move(ft34LineZOY)}, fFT34CircleZOX{std::move(ft34CircleZOX)}, fHits{std::move(hits)}, fParentEventId{parentEventId}
97  {
98  }
99 
100  Line fFT12LineZOX{};
101  Line fFT12LineZOY{};
102  Line fFT56LineZOX{};
103  Line fFT56LineZOY{};
104  Line fFT34LineZOY{};
105  Circle fFT34CircleZOX{};
107  uint32_t fParentEventId{};
108 
109  inline bool operator<(const PndFtsFullTrack &rhs) const { return this->fParentEventId < rhs.fParentEventId; }
110 };
111 
112 struct PndFtsAnalyticTrack : public FairTimeStamp {
113  inline PndFtsAnalyticTrack() = default;
114 
115  explicit inline PndFtsAnalyticTrack(const PndFtsFullTrack &fullTrack)
116  : fFT12LineZOX{fullTrack.fFT12LineZOX}, fFT12LineZOY{fullTrack.fFT12LineZOY}, fFT56LineZOX{fullTrack.fFT56LineZOX}, fFT56LineZOY{fullTrack.fFT56LineZOY},
117  fFT34LineZOY{fullTrack.fFT34LineZOY}, fFT34CircleZOX{fullTrack.fFT34CircleZOX}, fDeltaThetaZOX{std::abs(std::atan(fFT56LineZOX.fSlope) - std::atan(fFT12LineZOX.fSlope))}
118  {
119  }
120 
121  Line fFT12LineZOX{};
122  Line fFT12LineZOY{};
123  Line fFT56LineZOX{};
124  Line fFT56LineZOY{};
125  Line fFT34LineZOY{};
126  Circle fFT34CircleZOX{};
127  float fDeltaThetaZOX{};
128 
129  ClassDef(PndFtsAnalyticTrack, 1);
130 };
131 
132 using FullTrackVector = std::vector<PndFtsFullTrack>;
133 
134 } // namespace PndFtsTrackFinder
std::vector< CircleSubtrack > CircleSubtrackVector
Definition: PndFtsTrack.h:64
CircleSubtrack(const float dd, Circle circle, RawHitVector hits, const uint32_t parentEventId)
Definition: PndFtsTrack.h:55
PndFtsFullTrack(Line ft12LineZOX, Line ft12LineZOY, Line ft56LineZOX, Line ft56LineZOY, Line ft34LineZOY, Circle ft34CircleZOX, RawHitVector hits, uint32_t parentEventId)
Definition: PndFtsTrack.h:94
LineSubtrack(const float dd, Line line, const uint32_t parentEventId)
Definition: PndFtsTrack.h:21
std::vector< CircleTrack > CircleTrackVector
Definition: PndFtsTrack.h:83
std::vector< PndFtsSimpleHit > RawHitVector
PndFtsFullTrack(Line ft12LineZOX, Line ft12LineZOY, Circle ft34CircleZOX, Line ft34LineZOY, uint32_t parentEventId)
Definition: PndFtsTrack.h:88
LineTrack(Line lineZOX, Line lineZOY, RawHitVector hits, uint32_t parentEventId)
Definition: PndFtsTrack.h:35
LineSubtrack(const float dd, Line line, RawHitVector hits, const uint32_t parentEventId)
Definition: PndFtsTrack.h:18
PndFtsAnalyticTrack(const PndFtsFullTrack &fullTrack)
Definition: PndFtsTrack.h:115
bool operator<(const PndFtsFullTrack &rhs) const
Definition: PndFtsTrack.h:109
std::vector< LineTrack > LineTrackVector
Definition: PndFtsTrack.h:49
bool operator<(const LineTrack &rhs) const
Definition: PndFtsTrack.h:41
CircleTrack(Circle circleZOX, Line lineZOY, RawHitVector hits, uint32_t parentEventId)
Definition: PndFtsTrack.h:68
CircleTrack(Circle circleZOX, Line lineZOY, uint32_t parentEventId)
Definition: PndFtsTrack.h:72
bool operator<(const CircleTrack &rhs) const
Definition: PndFtsTrack.h:80
LineTrack(Line lineZOX, Line lineZOY, uint32_t parentEventId)
Definition: PndFtsTrack.h:39
std::vector< PndFtsFullTrack > FullTrackVector
Definition: PndFtsTrack.h:132
std::vector< LineSubtrack > LineSubtrackVector
Definition: PndFtsTrack.h:29