ATTPCROOT  0.3.0-alpha
A ROOT-based framework for analyzing data from active target detectors
AtFissionEvent.cxx
Go to the documentation of this file.
1 #include "AtFissionEvent.h"
2 
3 #include "AtContainerManip.h"
4 #include "AtHit.h" // for AtHit
5 #include "AtPattern.h" // for AtPattern
6 #include "AtPatternY.h"
7 #include "AtTrack.h" // for AtTrack, AtTrack::HitVector
8 
9 #include <Math/VectorUtil.h>
10 
11 #include <algorithm> // for find
12 #include <cassert>
13 #include <memory> // for unique_ptr
14 #include <stdexcept> // for invalid_argument
15 
17 
19 
21 {
22  for (auto &hit : obj.fBeamHits)
23  fBeamHits.push_back(hit->Clone());
24  for (int i = 0; i < obj.fFragHits.size(); ++i)
25  for (auto &hit : obj.fFragHits[i])
26  fFragHits[i].push_back(hit->Clone());
27 }
29 
31 {
32  swap(*this, other);
33  return *this;
34 }
35 
37 {
38  const AtPatterns::AtPatternY *patt = nullptr;
39  try {
40  patt = dynamic_cast<const AtPatterns::AtPatternY *>(GetYTrack().GetPattern());
41  } catch (...) {
42  }
43  return patt;
44 }
45 
47 {
48  for (auto &track : fTrackCand) {
49  auto pat = dynamic_cast<const AtPatterns::AtPatternY *>(track.GetPattern());
50  if (pat != nullptr)
51  return track;
52  }
53  throw std::invalid_argument("This event does not contain a Y pattern describing a fission event.");
54 }
55 
57 {
58  auto yPatt = GetYPattern();
59  if (yPatt)
60  return ROOT::Math::VectorUtil::Angle(yPatt->GetFragmentDirection(0), yPatt->GetFragmentDirection(1));
61  return -1;
62 }
63 
65 {
66  auto yPatt = GetYPattern();
67  if (yPatt)
68  return yPatt->GetVertex();
69  else
70  return {-1000, -1000, -1000};
71 }
72 
77 std::vector<AtHit *> AtFissionEvent::GetBeamHits() const
78 {
80 }
81 
86 std::vector<AtHit *> AtFissionEvent::GetFragHits() const
87 {
89  for (auto &hit : fFragHits[1])
90  ret.push_back(hit.get());
91  return ret;
92 }
93 
98 std::vector<AtHit *> AtFissionEvent::GetFragHits(int fragID) const
99 {
100  assert(fragID >= 0 && fragID < 2);
102 }
103 
108 std::vector<AtHit *> AtFissionEvent::GetBeamHitsCorr()
109 {
110  auto &track = GetYTrack();
111  auto pat = GetYPattern();
112 
113  std::vector<AtHit *> ret;
114  for (auto &hit : track.GetHitArray()) {
115  if (pat->GetPointAssignment(hit->GetPosition()) == 2)
116  ret.push_back(hit.get());
117  }
118  return ret;
119 }
120 
125 std::vector<AtHit *> AtFissionEvent::GetFragHitsCorr(int i)
126 {
127  assert(i >= 0 && i < 2);
128  auto &track = GetYTrack();
129  auto pat = GetYPattern();
130 
131  std::vector<AtHit *> ret;
132  for (auto &hit : track.GetHitArray()) {
133  if (pat->GetPointAssignment(hit->GetPosition()) == i)
134  ret.push_back(hit.get());
135  }
136  return ret;
137 }
138 
143 std::vector<AtHit *> AtFissionEvent::GetFragHitsCorr()
144 {
145  auto ret = GetFragHitsCorr(0);
146 
147  for (auto &hit : GetFragHitsCorr(1)) {
148  ret.push_back(hit);
149  }
150  return ret;
151 }
152 
153 void AtFissionEvent::SetFragHits(int fragID, HitVector vec)
154 {
155 
156  assert(fragID >= 0 && fragID < 2);
157  fFragHits[fragID] = std::move(vec);
158 }
AtFissionEvent::GetFoldingAngle
double GetFoldingAngle()
Definition: AtFissionEvent.cxx:56
AtFissionEvent::fBeamHits
HitVector fBeamHits
Definition: AtFissionEvent.h:34
AtFissionEvent::GetYTrack
const AtTrack & GetYTrack() const
Definition: AtFissionEvent.cxx:46
AtPatternEvent
Definition: AtPatternEvent.h:19
AtFissionEvent::GetBeamHits
std::vector< AtHit * > GetBeamHits() const
Definition: AtFissionEvent.cxx:77
AtFissionEvent::GetFragHitsCorr
std::vector< AtHit * > GetFragHitsCorr()
Definition: AtFissionEvent.cxx:143
AtFissionEvent.h
AtFissionEvent::GetVertex
XYZPoint GetVertex() const
Definition: AtFissionEvent.cxx:64
AtFissionEvent::GetBeamHitsCorr
std::vector< AtHit * > GetBeamHitsCorr()
Definition: AtFissionEvent.cxx:108
AtPattern.h
AtFissionEvent::SetFragHits
void SetFragHits(int fragID, HitVector vec)
Definition: AtFissionEvent.cxx:153
AtFissionEvent::GetYPattern
const AtPatterns::AtPatternY * GetYPattern() const
Definition: AtFissionEvent.cxx:36
AtHit.h
AtTrack
Definition: AtTrack.h:25
AtFissionEvent::XYZPoint
ROOT::Math::XYZPoint XYZPoint
Definition: AtFissionEvent.h:31
AtTrack.h
AtFissionEvent::AtFissionEvent
AtFissionEvent()
Definition: AtFissionEvent.cxx:18
ClassImp
ClassImp(AtFissionEvent)
ContainerManip::GetPointerVector
std::vector< T * > GetPointerVector(const std::vector< T > &vec)
Definition: AtContainerManip.h:105
AtFissionEvent::fFragHits
std::array< HitVector, 2 > fFragHits
Definition: AtFissionEvent.h:35
AtContainerManip.h
AtPatternY.h
AtTrack::GetPattern
const AtPatterns::AtPattern * GetPattern() const
Definition: AtTrack.h:84
AtFissionEvent
Definition: AtFissionEvent.h:29
AtPatternEvent::fTrackCand
std::vector< AtTrack > fTrackCand
Definition: AtPatternEvent.h:24
AtFissionEvent::operator=
AtFissionEvent & operator=(AtFissionEvent)
Definition: AtFissionEvent.cxx:30
AtPatterns::AtPatternY
Describes a Y track.
Definition: AtPatternY.h:29
AtFissionEvent::swap
friend void swap(AtFissionEvent &first, AtFissionEvent &second)
Definition: AtFissionEvent.h:46
AtFissionEvent::GetFragHits
std::vector< AtHit * > GetFragHits() const
Definition: AtFissionEvent.cxx:86