Belle II Software development
TrgEclTiming.cc
1/**************************************************************************
2 * basf2 (Belle II Analysis Software Framework) *
3 * Author: The Belle II Collaboration *
4 * *
5 * See git log for contributors and copyright holders. *
6 * This file is licensed under LGPL-3.0, see LICENSE.md. *
7 **************************************************************************/
8
9#define TRG_SHORT_NAMES
10#define TRGECLCLUSTER_SHORT_NAMES
11#include <framework/gearbox/Unit.h>
12
13#include "trg/ecl/TrgEclTiming.h"
14
15using namespace std;
16using namespace Belle2;
17//
18//
19//
21{
22 m_TCMap = new TrgEclMapping();
23 m_TCEnergy.clear();
24 m_TCTiming.clear();
25 m_TCId.clear();
30 m_EventTimingQualityThreshold = {1.0, 20.0}; // GeV
31}
32//
33//
34//
39//
40//
41//
42void
43TrgEclTiming::Setup(const std::vector<int>& HitTCId,
44 const std::vector<double>& HitTCEnergy,
45 const std::vector<double>& HitTCTiming)
46{
47 m_TCId = HitTCId;
48 m_TCEnergy = HitTCEnergy;
49 m_TCTiming = HitTCTiming;
50
51 return;
52}
53//========================================================
54// timing method selection
55//========================================================
57{
58 double EventTiming = 0;
59
60 if (method == 0) {
61 // Fastest timing (belle)
62 EventTiming = getEventTiming00();
63 } else if (method == 1) {
64 // Maximum energy
65 EventTiming = getEventTiming01();
66 } else {
67 // Energy weighted timing
68 EventTiming = getEventTiming02();
69 }
70
71 return EventTiming;
72}
73//========================================================
74// Fastest TC timing ( same as belle )
75//========================================================
77{
78 m_Source = 0;
79 double FastestEnergy = 0;
80 double FastestTiming = 9999;
81 int FastestTCId = 0;
82 const int hit_size = m_TCTiming.size();
83
84 for (int ihit = 0; ihit < hit_size; ihit++) {
85 if (m_TCTiming[ihit] < FastestTiming) {
86 FastestTiming = m_TCTiming[ihit];
87 FastestTCId = m_TCId[ihit];
88 FastestEnergy = m_TCEnergy[ihit];
89 }
90 }
91
92 if (FastestTCId < 81) {
93 m_Source = 1;
94 } else if (FastestTCId < 513) {
95 m_Source = 2;
96 } else {
97 m_Source = 4;
98 }
99
100 m_EventTimingTCId = FastestTCId;
101 m_EventTimingTCThetaId = m_TCMap->getTCThetaIdFromTCId(FastestTCId);
102 m_EventTimingTCEnergy = FastestEnergy;
103
104 return FastestTiming;
105}
106//========================================================
107// Timing from most energetic TC timing
108//========================================================
110{
111 m_Source = 0;
112
113 double maxEnergy = 0;
114 double maxTiming = 0;
115 int maxTCId = 0;
116 const int hit_size = m_TCTiming.size();
117
118 for (int ihit = 0; ihit < hit_size; ihit++) {
119 if (m_TCEnergy[ihit] > maxEnergy) {
120 maxEnergy = m_TCEnergy[ihit] ;
121 maxTiming = m_TCTiming[ihit] ;
122 maxTCId = m_TCId[ihit];
123 }
124 }
125 if (maxTCId < 81) {
126 m_Source = 1;
127 } else if (maxTCId < 513) {
128 m_Source = 2;
129 } else {
130 m_Source = 4;
131 }
132
133 if (hit_size == 0) {
135 } else {
136 if (maxEnergy > m_EventTimingQualityThreshold[1]) {
138 } else if (maxEnergy > m_EventTimingQualityThreshold[0]) {
140 } else {
142 }
143 }
144
145 m_EventTimingTCId = maxTCId;
146 m_EventTimingTCThetaId = m_TCMap->getTCThetaIdFromTCId(maxTCId);
147 m_EventTimingTCEnergy = maxEnergy;
148
149 return maxTiming;
150}
151//========================================================
152// Energy weighted TC timing
153//========================================================
155{
156 m_Source = 0;
157 std::vector<double> maxEnergy;
158 std::vector<double> maxTiming;
159
160 const int NtopTC = m_NofTopTC;
161 int maxTCId = 0;
162
163 maxEnergy.clear();
164 maxTiming.clear();
165 maxEnergy.resize(NtopTC, 0);
166 maxTiming.resize(NtopTC, 0);
167
168 const int hit_size = m_TCTiming.size();
169 double E_sum = 0;
170 double EventTiming = 0;
171
172 for (int iNtopTC = 0; iNtopTC < NtopTC ; iNtopTC++) {
173 for (int ihit = 0; ihit < hit_size; ihit++) {
174 if (iNtopTC == 0) {
175 if (maxEnergy[iNtopTC] < m_TCEnergy[ihit]) {
176 maxEnergy[iNtopTC] = m_TCEnergy[ihit];
177 maxTiming[iNtopTC] = m_TCTiming[ihit];
178 maxTCId = m_TCId[ihit];
179 }
180 } else if (iNtopTC > 0) {
181 if (maxEnergy[iNtopTC - 1] > m_TCEnergy[ihit] &&
182 maxEnergy[iNtopTC] < m_TCEnergy[ihit]) {
183 maxEnergy[iNtopTC] = m_TCEnergy[ihit];
184 maxTiming[iNtopTC] = m_TCTiming[ihit];
185 }
186 }
187 }
188 E_sum += maxEnergy[iNtopTC];
189 EventTiming += maxEnergy[iNtopTC] * maxTiming[iNtopTC];
190 }
191
192 EventTiming /= E_sum;
193
194 if (maxTCId < 81) {
195 m_Source = 1;
196 } else if (maxTCId < 513) {
197 m_Source = 2;
198 } else {
199 m_Source = 4;
200 }
201
202 return EventTiming;
203}
204//========================================================
205//
206//========================================================
A class of TC Mapping.
double getEventTiming00()
Fastest TC Timing.
std::vector< double > m_TCTiming
TC Timing.
void Setup(const std::vector< int > &, const std::vector< double > &, const std::vector< double > &)
SetUp.
int m_EventTimingQualityFlag
Event timing quality flag (for SVD DAQ) 3:= super-fine timing 2:= fine timing 1:= other 0:= no TC hit...
int m_Source
Timing Source (FWD, Barrel, Backward)
int m_EventTimingTCThetaId
TC ThetaId of event timing source.
std::vector< double > m_TCEnergy
TC Energy.
double getEventTiming02()
Energy weighted Timing of Top 3 energetic TC.
int m_EventTimingTCId
TCId of event timing source.
double getEventTiming01()
The Most energetic TC Timing.
std::vector< int > m_TCId
TC Id.
virtual ~TrgEclTiming()
Constructor.
std::vector< double > m_EventTimingQualityThreshold
energy threshold(low, high) for quality flag (GeV)
double getEventTiming(int)
get Evnet-timing
TrgEclTiming()
Constructor.
TrgEclMapping * m_TCMap
Object of TC Mapping.
double m_EventTimingTCEnergy
TC Energy of event timing source.
Abstract base class for different kinds of events.
STL namespace.