ATTPCROOT  0.3.0-alpha
A ROOT-based framework for analyzing data from active target detectors
AtTrack.cxx
Go to the documentation of this file.
1 #include "AtTrack.h"
2 
3 #include "AtPattern.h"
4 
5 #include <Math/Vector3D.h> // for DisplacementVector3D
6 #include <Rtypes.h>
7 
8 #include <iterator>
9 #include <numeric>
10 
11 constexpr auto cRED = "\033[1;31m";
12 constexpr auto cYELLOW = "\033[1;33m";
13 constexpr auto cNORMAL = "\033[0m";
14 constexpr auto cGREEN = "\033[1;32m";
15 
17 
23 {
24  swap(*this, obj);
25  return *this;
26 }
27 
29  : fTrackID(o.fTrackID), fIsMerged(o.fIsMerged), fVertexToZDist(o.fVertexToZDist), fGeoThetaAngle(o.fGeoThetaAngle),
30  fGeoPhiAngle(o.fGeoPhiAngle), fGeoRadius(o.fGeoRadius), fGeoCenter(o.fGeoCenter),
31  fHitClusterArray(o.fHitClusterArray)
32 {
33  fPattern = (o.fPattern != nullptr) ? o.fPattern->Clone() : nullptr;
34  for (auto &hit : o.fHitArray)
35  fHitArray.push_back(hit->Clone());
36 }
37 
38 void AtTrack::AddClusterHit(std::shared_ptr<AtHitCluster> hitCluster)
39 {
40  fHitClusterArray.push_back(std::move(*hitCluster));
41 }
42 
44 {
45  Double_t maxR = 0.;
46  XYZPoint maxPos;
47  for (auto &nHit : fHitArray) {
48  auto temp = nHit->GetPosition();
49  if (temp.Rho() > maxR) {
50  maxR = temp.Rho();
51  maxPos = temp;
52  }
53  }
54  return maxPos;
55 }
56 
58 {
59  Double_t minR = 999.;
60  XYZPoint minPos;
61  for (auto &nHit : fHitArray) {
62  auto temp = nHit->GetPosition();
63  if (temp.Rho() < minR) {
64  minR = temp.Rho();
65  minPos = temp;
66  }
67  }
68  return minPos;
69 }
70 
72 {
73  Double_t meanTime = 0.0;
74 
75  if (fHitArray.size() > 0) {
76  Int_t sum = std::accumulate(begin(fHitArray), end(fHitArray), 0,
77  [](int i, HitPtr &hit) { return hit->GetTimeStamp() + i; });
78  return sum / (Double_t)fHitArray.size();
79  } else
80  return meanTime;
81 }
82 
84 {
85  if (fHitArray.size() > 0) {
86  AtHit fhit = *fHitArray.front(); // Last hit of the track (Low TB)
87  AtHit lhit = *fHitArray.back(); // First hit of the track (High TB)
88  return GetLinearRange(fhit.GetPosition(), lhit.GetPosition());
89  } else
90  return 0;
91 }
92 
94 {
95  if (fHitArray.size() > 0) {
96  AtHit fhit = *fHitArray.front();
97  return GetLinearRange(fhit.GetPosition(), vertex);
98  } else
99  return 0;
100 }
101 
102 Double_t AtTrack::GetLinearRange(const XYZPoint &vertex, const XYZPoint &maxPos)
103 {
104  return (vertex - maxPos).R();
105 }
106 
108 {
109 
110  Double_t charge = 0;
111 
112  if (fHitArray.size() > 0) {
113  return std::accumulate(begin(fHitArray), end(fHitArray), 0.0,
114  [](double i, const HitPtr &hit) { return hit->GetCharge() + i; });
115  } else
116  return -10.0;
117 }
118 
120 {
121  std::sort(fHitArray.begin(), fHitArray.end(), AtHit::SortHitTimePtr);
122 }
123 
125 {
126 
127  std::sort(fHitClusterArray.begin(), fHitClusterArray.end(), SortClusterHitZ);
128 }
AtTrack::swap
friend void swap(AtTrack &a, AtTrack &b) noexcept
ADL-findable swap for AtTrack.
Definition: AtTrack.h:60
AtTrack::fPattern
PatternPtr fPattern
Definition: AtTrack.h:36
cNORMAL
constexpr auto cNORMAL
Definition: AtTrack.cxx:13
AtTrack::SortClusterHitArrayZ
void SortClusterHitArrayZ()
Definition: AtTrack.cxx:124
AtPattern.h
AtTrack::operator=
AtTrack & operator=(AtTrack obj)
Copy assignment using copy-swap idiom.
Definition: AtTrack.cxx:22
AtTrack::GetMeanTime
Double_t GetMeanTime()
Definition: AtTrack.cxx:71
AtTrack::SortHitArrayTime
void SortHitArrayTime()
Definition: AtTrack.cxx:119
AtTrack::fHitClusterArray
std::vector< AtHitCluster > fHitClusterArray
Definition: AtTrack.h:45
AtTrack::SortClusterHitZ
static Bool_t SortClusterHitZ(const AtHitCluster &lhs, const AtHitCluster &rhs)
Definition: AtTrack.h:126
AtTrack::GetLinearRange
Double_t GetLinearRange()
Definition: AtTrack.cxx:83
cRED
constexpr auto cRED
Definition: AtTrack.cxx:11
AtHit::GetPosition
const XYZPoint & GetPosition() const
Definition: AtHit.h:79
AtHit::SortHitTimePtr
static Bool_t SortHitTimePtr(const std::unique_ptr< AtHit > &lhs, const std::unique_ptr< AtHit > &rhs)
Definition: AtHit.h:97
ClassImp
ClassImp(AtTrack)
AtTrack
Definition: AtTrack.h:25
AtTrack.h
AtTrack::HitPtr
std::unique_ptr< AtHit > HitPtr
Definition: AtTrack.h:29
AtTrack::AddClusterHit
void AddClusterHit(std::shared_ptr< AtHitCluster > hitCluster)
Definition: AtTrack.cxx:38
AtTrack::GetGeoQEnergy
Double_t GetGeoQEnergy()
Definition: AtTrack.cxx:107
cYELLOW
constexpr auto cYELLOW
Definition: AtTrack.cxx:12
AtTrack::GetLastPoint
XYZPoint GetLastPoint()
Definition: AtTrack.cxx:43
AtTrack::AtTrack
AtTrack()=default
cGREEN
constexpr auto cGREEN
Definition: AtTrack.cxx:14
AtTrack::fHitArray
HitVector fHitArray
Definition: AtTrack.h:35
AtTrack::GetFirstPoint
XYZPoint GetFirstPoint()
Definition: AtTrack.cxx:57
AtTrack::XYZPoint
ROOT::Math::XYZPoint XYZPoint
Definition: AtTrack.h:28
AtHit
Point in space with charge.
Definition: AtHit.h:27