PandaRoot
PndFtsTrack.h
Go to the documentation of this file.
1 //****************************************************************************
2 //* This file is part of PandaRoot. *
3 //* *
4 //* PandaRoot is distributed under the terms of the *
5 //* GNU General Public License (GPL) version 3, *
6 //* copied verbatim in the file "LICENSE". *
7 //* *
8 //* Copyright (C) 2006 - 2024 FAIR GmbH and copyright holders of PandaRoot *
9 //* The copyright holders are listed in the file "COPYRIGHTHOLDERS". *
10 //* The authors are listed in the file "AUTHORS". *
11 //****************************************************************************
12 
13 //
14 // Created by Bartosz Sobol on 11.03.2021.
15 //
16 
17 #pragma once
18 
19 #include <utility>
20 #include <vector>
21 
22 #include "PndFtsHelpers.h"
23 
24 namespace PndFtsTrackFinder {
25 
26 struct LineSubtrack {
27 
28  LineSubtrack() = default;
29 
30  inline LineSubtrack(const float dd, Line line, SimpleHitVector hits, const uint32_t parentEventId)
31  : fDd{dd}, fLine{std::move(line)}, fHits{std::move(hits)}, fParentEventId{parentEventId} {};
32 
33  inline LineSubtrack(const float dd, Line line, const uint32_t parentEventId) : fDd{dd}, fLine{std::move(line)}, fHits{}, fParentEventId{parentEventId} {};
34 
35  float fDd{};
38  uint32_t fParentEventId{};
39 };
40 
41 using LineSubtrackVector = std::vector<LineSubtrack>;
42 
43 struct LineTrack {
44 
45  LineTrack() = default;
46 
47  inline LineTrack(Line lineZOX, Line lineZOY, SimpleHitVector hits, uint32_t parentEventId)
48  : fLineZOX{std::move(lineZOX)}, fLineZOY{std::move(lineZOY)}, fHits{std::move(hits)}, fParentEventId{parentEventId} {};
49 
50  // It does construct not finished object, but is more efficient.
51  inline LineTrack(Line lineZOX, Line lineZOY, uint32_t parentEventId) : fLineZOX{std::move(lineZOX)}, fLineZOY{std::move(lineZOY)}, fHits{}, fParentEventId{parentEventId} {};
52 
53  inline bool operator<(const LineTrack &rhs) const { return this->fParentEventId < rhs.fParentEventId; }
54 
55  Line fLineZOX{};
56  Line fLineZOY{};
58  uint32_t fParentEventId{};
59 };
60 
61 using LineTrackVector = std::vector<LineTrack>;
62 
64 
65  CircleSubtrack() = default;
66 
67  inline CircleSubtrack(const float dd, Circle circle, SimpleHitVector hits, const uint32_t parentEventId)
68  : fDd{dd}, fCircle{std::move(circle)}, fHits{std::move(hits)}, fParentEventId{parentEventId} {};
69 
70  float fDd{};
71  Circle fCircle{};
73  uint32_t fParentEventId{};
74 };
75 
76 using CircleSubtrackVector = std::vector<CircleSubtrack>;
77 
78 struct CircleTrack {
79 
80  inline CircleTrack(Circle circleZOX, Line lineZOY, SimpleHitVector hits, uint32_t parentEventId)
81  : fCircleZOX{std::move(circleZOX)}, fLineZOY{std::move(lineZOY)}, fHits{std::move(hits)}, fParentEventId{parentEventId} {};
82 
83  // It does construct not finished object, but is more efficient.
84  inline CircleTrack(Circle circleZOX, Line lineZOY, uint32_t parentEventId)
85  : fCircleZOX{std::move(circleZOX)}, fLineZOY{std::move(lineZOY)}, fHits{}, fParentEventId{parentEventId} {};
86 
90  uint32_t fParentEventId;
91 
92  inline bool operator<(const CircleTrack &rhs) const { return this->fParentEventId < rhs.fParentEventId; }
93 };
94 
95 using CircleTrackVector = std::vector<CircleTrack>;
96 
98  inline PndFtsFullTrack() = default;
99 
100  inline PndFtsFullTrack(Line ft12LineZOX, Line ft12LineZOY, Circle ft34CircleZOX, Line ft34LineZOY, uint32_t parentEventId)
101  : fFT12LineZOX{std::move(ft12LineZOX)}, fFT12LineZOY{std::move(ft12LineZOY)}, fFT56LineZOX{}, fFT56LineZOY{}, fFT34LineZOY{std::move(ft34LineZOY)},
102  fFT34CircleZOX{std::move(ft34CircleZOX)}, fHits{}, fParentEventId{parentEventId}
103  {
104  }
105 
106  inline PndFtsFullTrack(Line ft12LineZOX, Line ft12LineZOY, Line ft56LineZOX, Line ft56LineZOY, Line ft34LineZOY, Circle ft34CircleZOX, SimpleHitVector hits, uint32_t parentEventId)
107  : fFT12LineZOX{std::move(ft12LineZOX)}, fFT12LineZOY{std::move(ft12LineZOY)}, fFT56LineZOX{std::move(ft56LineZOX)}, fFT56LineZOY{std::move(ft56LineZOY)},
108  fFT34LineZOY{std::move(ft34LineZOY)}, fFT34CircleZOX{std::move(ft34CircleZOX)}, fHits{std::move(hits)}, fParentEventId{parentEventId}
109  {
110  }
111 
112  Line fFT12LineZOX{};
113  Line fFT12LineZOY{};
114  Line fFT56LineZOX{};
115  Line fFT56LineZOY{};
116  Line fFT34LineZOY{};
117  Circle fFT34CircleZOX{};
119  uint32_t fParentEventId{};
120 
121  inline bool operator<(const PndFtsFullTrack &rhs) const { return this->fParentEventId < rhs.fParentEventId; }
122 };
123 
124 struct PndFtsAnalyticTrack : public FairTimeStamp {
125  inline PndFtsAnalyticTrack() = default;
126 
127  explicit inline PndFtsAnalyticTrack(const PndFtsFullTrack &fullTrack)
128  : fFT12LineZOX{fullTrack.fFT12LineZOX}, fFT12LineZOY{fullTrack.fFT12LineZOY}, fFT56LineZOX{fullTrack.fFT56LineZOX}, fFT56LineZOY{fullTrack.fFT56LineZOY},
129  fFT34LineZOY{fullTrack.fFT34LineZOY}, fFT34CircleZOX{fullTrack.fFT34CircleZOX}, fDeltaThetaZOX{std::abs(std::atan(fFT56LineZOX.fSlope) - std::atan(fFT12LineZOX.fSlope))}
130  {
131  }
132 
133  Line fFT12LineZOX{};
134  Line fFT12LineZOY{};
135  Line fFT56LineZOX{};
136  Line fFT56LineZOY{};
137  Line fFT34LineZOY{};
138  Circle fFT34CircleZOX{};
139  float fDeltaThetaZOX{};
140 
141  ClassDef(PndFtsAnalyticTrack, 1);
142 };
143 
144 using FullTrackVector = std::vector<PndFtsFullTrack>;
145 
146 } // namespace PndFtsTrackFinder
std::vector< CircleSubtrack > CircleSubtrackVector
Definition: PndFtsTrack.h:76
LineSubtrack(const float dd, Line line, const uint32_t parentEventId)
Definition: PndFtsTrack.h:33
std::vector< CircleTrack > CircleTrackVector
Definition: PndFtsTrack.h:95
PndFtsFullTrack(Line ft12LineZOX, Line ft12LineZOY, Circle ft34CircleZOX, Line ft34LineZOY, uint32_t parentEventId)
Definition: PndFtsTrack.h:100
PndFtsAnalyticTrack(const PndFtsFullTrack &fullTrack)
Definition: PndFtsTrack.h:127
bool operator<(const PndFtsFullTrack &rhs) const
Definition: PndFtsTrack.h:121
LineTrack(Line lineZOX, Line lineZOY, SimpleHitVector hits, uint32_t parentEventId)
Definition: PndFtsTrack.h:47
std::vector< PndFtsSimpleHit > SimpleHitVector
std::vector< LineTrack > LineTrackVector
Definition: PndFtsTrack.h:61
bool operator<(const LineTrack &rhs) const
Definition: PndFtsTrack.h:53
CircleTrack(Circle circleZOX, Line lineZOY, uint32_t parentEventId)
Definition: PndFtsTrack.h:84
bool operator<(const CircleTrack &rhs) const
Definition: PndFtsTrack.h:92
LineTrack(Line lineZOX, Line lineZOY, uint32_t parentEventId)
Definition: PndFtsTrack.h:51
std::vector< PndFtsFullTrack > FullTrackVector
Definition: PndFtsTrack.h:144
LineSubtrack(const float dd, Line line, SimpleHitVector hits, const uint32_t parentEventId)
Definition: PndFtsTrack.h:30
PndFtsFullTrack(Line ft12LineZOX, Line ft12LineZOY, Line ft56LineZOX, Line ft56LineZOY, Line ft34LineZOY, Circle ft34CircleZOX, SimpleHitVector hits, uint32_t parentEventId)
Definition: PndFtsTrack.h:106
CircleSubtrack(const float dd, Circle circle, SimpleHitVector hits, const uint32_t parentEventId)
Definition: PndFtsTrack.h:67
std::vector< LineSubtrack > LineSubtrackVector
Definition: PndFtsTrack.h:41
CircleTrack(Circle circleZOX, Line lineZOY, SimpleHitVector hits, uint32_t parentEventId)
Definition: PndFtsTrack.h:80