NAIA
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups
TofFill.cpp
Go to the documentation of this file.
1 #include "Containers/Tof.h"
2 
3 namespace NAIA {
4 using namespace Tof;
5 
6 void TofBaseData::Fill(BetaR *betaPtr, BetaHR *betahPtr, bool standalone) {
7  if (betaPtr && !standalone) {
8  Beta[BetaType::Evgeni] = betaPtr->Beta;
9  }
10 
11  if (betahPtr) {
12  Beta[BetaType::BetaH] = _isMC ? betahPtr->GetMCBeta() : betahPtr->GetBeta();
13 
14  int nlayers = 0;
15  float qrms = 0;
16  if (betahPtr->IsGoodQPathL(0) || betahPtr->IsGoodQPathL(1))
17  Charge[ChargeType::Upper] =
18  betahPtr->GetQ(nlayers, qrms, 2, TofClusterHR::DefaultQOptIon,
19  1000 * betahPtr->IsGoodQPathL(0) + 100 * betahPtr->IsGoodQPathL(1), Beta[BetaType::BetaH]);
20  if (betahPtr->IsGoodQPathL(2) || betahPtr->IsGoodQPathL(3))
21  Charge[ChargeType::Lower] =
22  betahPtr->GetQ(nlayers, qrms, 2, TofClusterHR::DefaultQOptIon,
23  10 * betahPtr->IsGoodQPathL(2) + 1 * betahPtr->IsGoodQPathL(3), Beta[BetaType::BetaH]);
24  if ((betahPtr->IsGoodQPathL(0) || betahPtr->IsGoodQPathL(1)) &&
25  (betahPtr->IsGoodQPathL(2) || betahPtr->IsGoodQPathL(3)))
26  Charge[ChargeType::Total] = betahPtr->GetQ(nlayers, qrms, 2, TofClusterHR::DefaultQOptIon,
27  1000 * betahPtr->IsGoodQPathL(0) + 100 * betahPtr->IsGoodQPathL(1) +
28  10 * betahPtr->IsGoodQPathL(2) + 1 * betahPtr->IsGoodQPathL(3),
29  Beta[BetaType::BetaH]);
30 
31  double tofh_time;
32  AMSPoint tofh_point;
33  AMSDir tofh_dir;
34  betahPtr->TInterpolate(tofRefZ, tofh_point, tofh_dir, tofh_time, false);
35  m_pointAndDir.emplace_back(tofh_point.x(), tofh_point.y(), tofh_point.z());
36  m_pointAndDir.emplace_back(tofh_dir.x(), tofh_dir.y(), tofh_dir.z());
37  }
38 }
39 
41  LayerGoodPathl.resize(4);
42  LayerCharge.resize(4);
43 }
44 
45 void TofPlusData::Fill(BetaR *betaPtr, BetaHR *betahPtr, bool standalone) {
46  auto *evPtr = AMSEventR::Head();
47 
48  if (betaPtr && !standalone) {
49  BetaPattern[BetaType::Evgeni] = static_cast<short>(betaPtr->Pattern);
50  }
51 
52  if (betahPtr) {
53  short tofhbetapatt = 0;
54  for (int i = 0; i < 4; i++) {
55  if (!(betahPtr->TestExistHL(i))) {
56  tofhbetapatt = static_cast<short>(tofhbetapatt | (1 << i));
57  }
58  }
59  BetaPattern[BetaType::BetaH] = tofhbetapatt;
60 
61  Chi2Coo = betahPtr->GetNormChi2C();
62  Chi2Time = betahPtr->GetNormChi2T();
63 
64  NTrkClusters = static_cast<short>(betahPtr->GetSumHit());
65  NBetaClusters = static_cast<short>(betahPtr->GetUseHit());
66 
67  // this is fucking bad. 4 lines to get one variable. (FOR FUCK'S SAKE STOP USING REFERENCES FOR OUTPUT!!!)
68  int nhit;
69  float qrms;
70  betahPtr->GetQ(nhit, qrms);
71  NChargeClusters = static_cast<short>(nhit);
72 
73  // same here... gbatch has the mother of all bad APIs
74  betahPtr->GetZ(nhit, ChargeLikelihood);
75 
76  ResizeMembers();
77  for (int ip = 0; ip < 4; ip++) {
78  LayerGoodPathl[ip] = betahPtr->IsGoodQPathL(ip);
79  LayerCharge[ip] = betahPtr->GetQL(ip);
80  if (betahPtr->GetClusterHL(ip)) {
81  LayerEdep[ip] = betahPtr->GetClusterHL(ip)->GetEdep();
82  }
83 
84  // taken from dbar code
85  if (betahPtr->TestExistHL(ip)) {
86  float ltime = betahPtr->GetTime(ip); // ns
87  for (auto &cluster : evPtr->TofClusterH()) {
88  if (cluster.Layer != ip || (cluster.NBetaHUsed() > 0) || !cluster.IsGoodTime())
89  continue;
90 
91  float dt = cluster.Time - ltime; // later cluster has positive dt
92  float tcut = ip < 2 ? 10 : 4; // 10ns for top layers, 4 ns for bottom layers
93 
94  int itm = -1;
95  if (std::fabs(dt) <= tcut)
96  itm = 0; // around-time hits ("in time")
97  else if (dt > tcut)
98  itm = 1; // later hits ("off time")
99 
100  switch (itm) {
101  case 0:
102  NClusters[ip][BetaClusterType::OnTime]++;
103  AverageDTime[ip][BetaClusterType::OnTime] += dt;
104  AverageEdep[ip][BetaClusterType::OnTime] += cluster.GetEdep();
105  break;
106  case 1:
107  NClusters[ip][BetaClusterType::OffTime]++;
108  AverageDTime[ip][BetaClusterType::OffTime] += dt;
109  AverageEdep[ip][BetaClusterType::OffTime] += cluster.GetEdep();
110  break;
111  default:
112  break;
113  }
114  }
115  }
116  }
117  }
118 }
119 
120 } // namespace NAIA
const float tofRefZ
Definition: Utils.h:321
Charge estimated using the upper half of the TRD.
Definition: Utils.h:226
void ResizeMembers()
Definition: TofFill.cpp:40
IHEP reconstruction.
Definition: Utils.h:342
Tof container class description.
Charge estimated using the whole TRD.
Definition: Utils.h:225
Charge estimated using the lower half of the TRD.
Definition: Utils.h:227