NAIA  1.1.1
TrTrack.cpp
Go to the documentation of this file.
1 #include <bitset>
2 #include <fmt/format.h>
3 
4 #include "Containers/TrTrack.h"
5 
6 namespace NAIA {
7 const std::string TrTrackBase::BranchName = "TrTrackBaseData";
8 const std::string TrTrackPlus::BranchName = "TrTrackPlusData";
9 const std::string SecondTrTrackBase::BranchName = "SecondTrTrackBaseData";
10 const std::string TrTrackBaseStandalone::BranchName = "TrTrackBaseDataSt";
11 
12 using namespace TrTrack;
13 
14 bool TrTrackBaseData::FitIDExists(Fit fit, Span span) const {
15  return (Rigidity.find(fit) != end(Rigidity) && Rigidity.at(fit).find(span) != end(Rigidity.at(fit)));
16 }
17 
19  Span bestspan = FitIDExists(fit, Span::FullSpan)
21  : (FitIDExists(fit, Span::InnerL1) > 0
23  : (FitIDExists(fit, Span::InnerL9) > 0 ? Span::InnerL9 : Span::InnerOnly));
24  return bestspan;
25 }
26 
28  TrTrackHitPos.clear();
29  TrTrackFitPos.clear();
30 
31  Rigidity.clear();
32  TrChiSq.clear();
33 
34  Charge.clear();
35  ChargeRMS.clear();
36  InnerCharge.clear();
37  InnerChargeRMS.clear();
38  LayerChargeXY.clear();
39  LayerChargeStatus.clear();
40 
41  m_trackPattern = 0;
42 
43  _beta = 1.0f;
44  _fit_ID.clear();
45 }
46 
48  TrackFeetDistance.clear();
49 
50  RigidityTOI.clear();
51  InvRigErr.clear();
52  PartialRigidity.clear();
53  PartialInvRigErr.clear();
54  PartialTrChiSq.clear();
55  PartialTrTrackResidual.clear();
56 
57  TrTrackResidual.clear();
58  UnbiasedCharge.clear();
59  LayerCharge.clear();
60  LayerEdep.clear();
61 
62  NClusters.clear();
63  ClustersEdep.clear();
64  MaxClusterEdep.clear();
65  MaxClusterDistance.clear();
66  ClusterSignalRatio.clear();
67 
68  DirectionalStoermerCutoff = {0, 0};
69 
70  _fit_ID.clear();
71 }
72 
73 void TrTrackBaseData::Dump() const {
74  fmt::print("{:=^120} \n", " TrTrackBaseData ");
75  if (!Rigidity.empty()) {
76  for (const auto &fitIter : Rigidity) {
77  fmt::print("Fit {}\n", TrTrack::fitNames[fitIter.first]);
78  fmt::print(" {:<30} {:>15} {:>15} {:>15}\n", "Span", "Rigidity", "TrChiSqX", "TrChiSqY");
79  for (auto spanIter : fitIter.second) {
80  fmt::print(" - {:<28} = {:> 12.4f} GV {:> 15.4f} {:> 15.4f}\n", TrTrack::spanNames[spanIter.first],
81  spanIter.second, TrChiSq.at(fitIter.first).at(spanIter.first).at(Side::X),
82  TrChiSq.at(fitIter.first).at(spanIter.first).at(Side::Y));
83  }
84  }
85  }
86 
87  if (!Charge.empty()) {
88  fmt::print("{:-^120}\n", "");
89  fmt::print("{:<32} {:>15} {:>15} {:>15} {:>32}\n", "Charge type", "Standard", "Hu Liu", "Yi Jia", "status");
90 
91  fmt::print(" - {:<28} = ", "Global charge");
92  for (auto chType : TrTrack::recoTypes) {
93  fmt::print("{:> 15.4f} ", ContainsKeys(Charge, chType) ? Charge.at(chType) : 0);
94  }
95  fmt::print("\n");
96 
97  fmt::print(" - {:<28} = ", "Inner tracker charge");
98  for (auto chType : TrTrack::recoTypes) {
99  fmt::print("{:> 15.4f} ", ContainsKeys(InnerCharge, chType) ? InnerCharge.at(chType) : 0);
100  }
101  fmt::print("\n");
102 
103  fmt::print(" - {:<28} = ", "Global charge RMS");
104  for (auto chType : TrTrack::recoTypes) {
105  fmt::print("{:> 15.4f} ", ContainsKeys(ChargeRMS, chType) ? ChargeRMS.at(chType) : 0);
106  }
107  fmt::print("\n");
108 
109  fmt::print(" - {:<28} = ", "Inner tracker charge RMS");
110  for (auto chType : TrTrack::recoTypes) {
111  fmt::print("{:> 15.4f} ", ContainsKeys(InnerChargeRMS, chType) ? InnerChargeRMS.at(chType) : 0);
112  }
113  fmt::print("\n");
114 
115  for (size_t ijl = 0; ijl < 9; ijl++) {
116  if (!ContainsKeys(LayerChargeXY, ijl))
117  continue;
118 
119  fmt::print(" - {:<28} = ", fmt::format("Layer {}", ijl));
120  for (auto chType : TrTrack::recoTypes) {
121  if (ContainsKeys(LayerChargeXY, ijl, chType))
122  fmt::print("{:> 15.4f} ", LayerChargeXY.at(ijl).at(chType));
123  else
124  fmt::print("{:>15} ", "");
125  }
126  std::bitset<32> dummy(ContainsKeys(LayerChargeStatus, ijl) ? LayerChargeStatus.at(ijl) : 0xFFFF);
127  fmt::print("{:>32} ", dummy.to_string());
128  fmt::print("\n");
129  }
130  }
131 
132  fmt::print("{:-^120}\n", "");
133 }
134 
135 void TrTrackPlusData::Dump() const {
136  fmt::print("{:=^120} \n", " TrTrackPlusData ");
137  if (!InvRigErr.empty()) {
138  for (const auto &fitIter : InvRigErr) {
139  fmt::print("Fit {}\n", TrTrack::fitNames[fitIter.first]);
140  if (RigidityTOI.find(fitIter.first) == end(RigidityTOI)) {
141  fmt::print(" {:<30} {:>15} {:>15}\n", "Span", "", "InvRigErr");
142  for (auto spanIter : fitIter.second) {
143  fmt::print(" - {:<28} = {:>15} {:>15}\n", TrTrack::spanNames[spanIter.first], "",
144  InvRigErr.at(fitIter.first).at(spanIter.first));
145  }
146  } else {
147  fmt::print(" {:<30} {:>15} {:>15}\n", "Span", "RigidityTOI", "InvRigErr");
148  for (auto spanIter : fitIter.second) {
149  fmt::print(" - {:<28} = {:> 12.4f} GV {:>15}\n", TrTrack::spanNames[spanIter.first],
150  RigidityTOI.at(fitIter.first).at(spanIter.first), InvRigErr.at(fitIter.first).at(spanIter.first));
151  }
152  }
153  }
154  }
155 
156  fmt::print("{:-^120}\n", "");
157  fmt::print("{:<32} {:>15} {:>15} {:>15} {:>15}\n", "\"Partial\" variables", "Rigidity", "InvRigErr", "TrChiSqX",
158  "TrChiSqY");
159  for (unsigned int ijl = 0; ijl < 9; ijl++) {
160  if (!ContainsKeys(PartialRigidity, ijl))
161  continue;
162 
163  for (auto &fitIter : PartialRigidity.at(ijl)) {
164  auto fit = fitIter.first;
165 
166  fmt::print(" - {:<28} = {:>15} {:>15} {:>15} {:>15}\n",
167  fmt::format("Layer {} - Fit {}", ijl + 1, TrTrack::fitNames[fit]), PartialRigidity.at(ijl).at(fit),
168  PartialInvRigErr.at(ijl).at(fit), PartialTrChiSq.at(ijl).at(fit).at(TrTrack::Side::X),
169  PartialTrChiSq.at(ijl).at(fit).at(TrTrack::Side::Y));
170  }
171  }
172 
173  if (!LayerCharge.empty()) {
174  fmt::print("{:-^120}\n", "");
175  fmt::print("{:<32} {:>15} {:>15} {:>15}\n", "Charge type", "Standard", "Hu Liu", "Yi Jia");
176  for (size_t ijl = 0; ijl < 9; ijl++) {
177  fmt::print(" - {:<28} = ", fmt::format("Layer {} X", ijl));
178  for (auto chType : TrTrack::recoTypes) {
179  if (ContainsKeys(LayerCharge, ijl, chType, TrTrack::Side::X))
180  fmt::print("{:> 15.4f} ", LayerCharge.at(ijl).at(chType).at(TrTrack::Side::X));
181  else
182  fmt::print("{:>15} ", "");
183  }
184  fmt::print("\n");
185  fmt::print(" - {:<28} = ", fmt::format("Layer {} Y", ijl));
186  for (auto chType : TrTrack::recoTypes) {
187  if (ContainsKeys(LayerCharge, ijl, chType, TrTrack::Side::Y))
188  fmt::print("{:> 15.4f} ", LayerCharge.at(ijl).at(chType).at(TrTrack::Side::Y));
189  else
190  fmt::print("{:>15} ", "");
191  }
192  fmt::print("\n");
193  }
194  }
195  fmt::print("{:-^120}\n", "");
196 }
197 
200 
201  for (unsigned int i = 0u; i < 9; ++i) {
202  result[i] = static_cast<HitClusterAssociation>((m_trackPattern & (0b11 << (2 * i))) >> (2 * i));
203  }
204 
205  return result;
206 }
207 } // namespace NAIA
NAIA::TrTrack::FullSpan
@ FullSpan
Track constructed with all available hits (inner tracker + layer 1 + layer 9)
Definition: Utils.h:162
NAIA::TrTrack::InnerL9
@ InnerL9
Track constructed with inner tracker + layer9 hits.
Definition: Utils.h:161
NAIA::end
NAIAChain::EventItr end(NAIAChain &chain)
Definition: NAIAChain.h:298
NAIA::TrTrackPlusData::Clear
void Clear()
Clear container content.
Definition: TrTrack.cpp:47
NAIA::SecondTrTrackBase::BranchName
static const std::string BranchName
Definition: TrTrack.h:253
NAIA::TrTrack::X
@ X
Definition: Utils.h:207
NAIA::HitClusterAssociation
HitClusterAssociation
Definition: TrTrack.h:55
NAIA::TrTrack::Span
Span
Definition: Utils.h:157
NAIA
Definition: Event.h:13
NAIA::TrTrack::spanNames
static const std::array< std::string, numSpans > spanNames
Definition: Utils.h:170
NAIA::TrTrack::InnerOnly
@ InnerOnly
Track constructed with only inner tracker hits.
Definition: Utils.h:159
NAIA::ContainsKeys
std::enable_if< std::is_convertible< Key, size_t >::value, bool >::type ContainsKeys(const std::array< T, N > &container, Key key)
Definition: Utils.hpp:53
NAIA::TrTrackPlusData::Dump
void Dump() const
Dump on screen container content.
Definition: TrTrack.cpp:135
NAIA::TrTrack::recoTypes
constexpr std::array< ChargeRecoType, numChargeRecos > recoTypes
Definition: Utils.h:96
NAIA::TrTrackBaseData::Clear
void Clear()
Clear container content.
Definition: TrTrack.cpp:27
NAIA::TrTrackBase::BranchName
static const std::string BranchName
Definition: TrTrack.h:223
TrTrack.h
TrTrack container class description.
NAIA::TrTrackPlus::BranchName
static const std::string BranchName
Definition: TrTrack.h:238
NAIA::TrTrack::Y
@ Y
Definition: Utils.h:207
NAIA::TrTrackBaseData::Dump
void Dump() const
Dump on screen container content.
Definition: TrTrack.cpp:73
NAIA::TrTrackBaseData::GetBestSpan
TrTrack::Span GetBestSpan(TrTrack::Fit fit=TrTrack::Fit::Choutko) const
Get the best Span available for this track.
Definition: TrTrack.cpp:18
NAIA::LayerVariable
std::map< unsigned int, T > LayerVariable
Definition: Utils.h:54
NAIA::TrTrack::InnerL1
@ InnerL1
Track constructed with inner tracker + layer 1 hits.
Definition: Utils.h:160
NAIA::TrTrack::Fit
Fit
Definition: Utils.h:177
NAIA::TrTrack::fitNames
static const std::array< std::string, numFits > fitNames
Definition: Utils.h:190
NAIA::TrTrackBaseStandalone::BranchName
static const std::string BranchName
Definition: TrTrack.h:268
NAIA::TrTrackBaseData::GetTrackPattern
LayerVariable< HitClusterAssociation > GetTrackPattern() const
Get the track pattern for a given tracker side. One bit per layer, set to 1 if there is a hit on that...
Definition: TrTrack.cpp:198
NAIA::TrTrackBaseData::FitIDExists
bool FitIDExists(TrTrack::Fit fit, TrTrack::Span span) const
Check if a given combination of fit and span is available for this track.
Definition: TrTrack.cpp:14