Belle II Software  release-06-02-00
TOPCalModuleAlignment.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 #include <top/dbobjects/TOPCalModuleAlignment.h>
10 #include <framework/logging/Logger.h>
11 
12 using namespace std;
13 
14 namespace Belle2 {
20  void TOPCalModuleAlignment::setAlpha(int moduleID, double alpha, double errAlpha)
21  {
22  unsigned module = moduleID - 1;
23  if (module >= c_numModules) {
24  B2ERROR("Invalid module number, constant not set (" << ClassName() << ")");
25  return;
26  }
27  m_alpha[module] = alpha;
28  m_errAlpha[module] = errAlpha;
29  }
30 
31  void TOPCalModuleAlignment::setBeta(int moduleID, double beta, double errBeta)
32  {
33  unsigned module = moduleID - 1;
34  if (module >= c_numModules) {
35  B2ERROR("Invalid module number, constant not set (" << ClassName() << ")");
36  return;
37  }
38  m_beta[module] = beta;
39  m_errBeta[module] = errBeta;
40  }
41 
42  void TOPCalModuleAlignment::setGamma(int moduleID, double gamma, double errGamma)
43  {
44  unsigned module = moduleID - 1;
45  if (module >= c_numModules) {
46  B2ERROR("Invalid module number, constant not set (" << ClassName() << ")");
47  return;
48  }
49  m_gamma[module] = gamma;
50  m_errGamma[module] = errGamma;
51  }
52 
53  void TOPCalModuleAlignment::setX(int moduleID, double x, double errX)
54  {
55  unsigned module = moduleID - 1;
56  if (module >= c_numModules) {
57  B2ERROR("Invalid module number, constant not set (" << ClassName() << ")");
58  return;
59  }
60  m_x[module] = x;
61  m_errX[module] = errX;
62  }
63 
64  void TOPCalModuleAlignment::setY(int moduleID, double y, double errY)
65  {
66  unsigned module = moduleID - 1;
67  if (module >= c_numModules) {
68  B2ERROR("Invalid module number, constant not set (" << ClassName() << ")");
69  return;
70  }
71  m_y[module] = y;
72  m_errY[module] = errY;
73  }
74 
75  void TOPCalModuleAlignment::setZ(int moduleID, double z, double errZ)
76  {
77  unsigned module = moduleID - 1;
78  if (module >= c_numModules) {
79  B2ERROR("Invalid module number, constant not set (" << ClassName() << ")");
80  return;
81  }
82  m_z[module] = z;
83  m_errZ[module] = errZ;
84  }
85 
86  void TOPCalModuleAlignment::setCalibrated(int moduleID)
87  {
88  unsigned module = moduleID - 1;
89  if (module >= c_numModules) {
90  B2ERROR("Invalid module number, status not set (" << ClassName() << ")");
91  return;
92  }
93  m_status[module] = c_Calibrated;
94  }
95 
96  void TOPCalModuleAlignment::setUnusable(int moduleID)
97  {
98  unsigned module = moduleID - 1;
99  if (module >= c_numModules) {
100  B2ERROR("Invalid module number, status not set (" << ClassName() << ")");
101  return;
102  }
103  m_status[module] = c_Unusable;
104  }
105 
106  double TOPCalModuleAlignment::getAlpha(int moduleID) const
107  {
108  unsigned module = moduleID - 1;
109  if (module >= c_numModules) {
110  B2WARNING("Invalid module number, returning 0 (" << ClassName() << ")");
111  return 0;
112  }
113  return m_alpha[module];
114  }
115 
116  double TOPCalModuleAlignment::getBeta(int moduleID) const
117  {
118  unsigned module = moduleID - 1;
119  if (module >= c_numModules) {
120  B2WARNING("Invalid module number, returning 0 (" << ClassName() << ")");
121  return 0;
122  }
123  return m_beta[module];
124  }
125 
126  double TOPCalModuleAlignment::getGamma(int moduleID) const
127  {
128  unsigned module = moduleID - 1;
129  if (module >= c_numModules) {
130  B2WARNING("Invalid module number, returning 0 (" << ClassName() << ")");
131  return 0;
132  }
133  return m_gamma[module];
134  }
135 
136  double TOPCalModuleAlignment::getX(int moduleID) const
137  {
138  unsigned module = moduleID - 1;
139  if (module >= c_numModules) {
140  B2WARNING("Invalid module number, returning 0 (" << ClassName() << ")");
141  return 0;
142  }
143  return m_x[module];
144  }
145 
146  double TOPCalModuleAlignment::getY(int moduleID) const
147  {
148  unsigned module = moduleID - 1;
149  if (module >= c_numModules) {
150  B2WARNING("Invalid module number, returning 0 (" << ClassName() << ")");
151  return 0;
152  }
153  return m_y[module];
154  }
155 
156  double TOPCalModuleAlignment::getZ(int moduleID) const
157  {
158  unsigned module = moduleID - 1;
159  if (module >= c_numModules) {
160  B2WARNING("Invalid module number, returning 0 (" << ClassName() << ")");
161  return 0;
162  }
163  return m_z[module];
164  }
165 
166  double TOPCalModuleAlignment::getAlphaErr(int moduleID) const
167  {
168  unsigned module = moduleID - 1;
169  if (module >= c_numModules) {
170  B2WARNING("Invalid module number, returning 0 (" << ClassName() << ")");
171  return 0;
172  }
173  return m_errAlpha[module];
174  }
175 
176  double TOPCalModuleAlignment::getBetaErr(int moduleID) const
177  {
178  unsigned module = moduleID - 1;
179  if (module >= c_numModules) {
180  B2WARNING("Invalid module number, returning 0 (" << ClassName() << ")");
181  return 0;
182  }
183  return m_errBeta[module];
184  }
185 
186  double TOPCalModuleAlignment::getGammaErr(int moduleID) const
187  {
188  unsigned module = moduleID - 1;
189  if (module >= c_numModules) {
190  B2WARNING("Invalid module number, returning 0 (" << ClassName() << ")");
191  return 0;
192  }
193  return m_errGamma[module];
194  }
195 
196  double TOPCalModuleAlignment::getXErr(int moduleID) const
197  {
198  unsigned module = moduleID - 1;
199  if (module >= c_numModules) {
200  B2WARNING("Invalid module number, returning 0 (" << ClassName() << ")");
201  return 0;
202  }
203  return m_errX[module];
204  }
205 
206  double TOPCalModuleAlignment::getYErr(int moduleID) const
207  {
208  unsigned module = moduleID - 1;
209  if (module >= c_numModules) {
210  B2WARNING("Invalid module number, returning 0 (" << ClassName() << ")");
211  return 0;
212  }
213  return m_errY[module];
214  }
215 
216  double TOPCalModuleAlignment::getZErr(int moduleID) const
217  {
218  unsigned module = moduleID - 1;
219  if (module >= c_numModules) {
220  B2WARNING("Invalid module number, returning 0 (" << ClassName() << ")");
221  return 0;
222  }
223  return m_errZ[module];
224  }
225 
226  bool TOPCalModuleAlignment::isCalibrated(int moduleID) const
227  {
228  unsigned module = moduleID - 1;
229  if (module >= c_numModules) return false ;
230  return m_status[module] == c_Calibrated;
231  }
232 
233  bool TOPCalModuleAlignment::isDefault(int moduleID) const
234  {
235  unsigned module = moduleID - 1;
236  if (module >= c_numModules) return false ;
237  return m_status[module] == c_Default;
238  }
239 
240  bool TOPCalModuleAlignment::isUnusable(int moduleID) const
241  {
242  unsigned module = moduleID - 1;
243  if (module >= c_numModules) return false ;
244  return m_status[module] == c_Unusable;
245  }
246 
247  bool TOPCalModuleAlignment::areAllCalibrated() const
248  {
249  for (int i = 0; i < c_numModules; i++) {
250  if (m_status[i] != c_Calibrated) return false;
251  }
252  return true;
253  }
254 
255  bool TOPCalModuleAlignment::areAllPrecise(double spatialPrecision,
256  double angularPrecision) const
257  {
258  for (int i = 0; i < c_numModules; i++) {
259  if (m_errAlpha[i] > angularPrecision) return false;
260  if (m_errBeta[i] > angularPrecision) return false;
261  if (m_errGamma[i] > angularPrecision) return false;
262  if (m_errX[i] > spatialPrecision) return false;
263  if (m_errY[i] > spatialPrecision) return false;
264  if (m_errZ[i] > spatialPrecision) return false;
265  }
266  return true;
267  }
268 
269  void TOPCalModuleAlignment::setTransformations() const
270  {
271  for (int i = 0; i < c_numModules; i++) {
272  TRotation rot;
273  TVector3 vec;
274  if (m_status[i] == c_Calibrated) {
275  rot.RotateX(m_alpha[i]).RotateY(m_beta[i]).RotateZ(m_gamma[i]);
276  vec.SetXYZ(m_x[i], m_y[i], m_z[i]);
277  }
278  m_rotations.push_back(rot);
279  m_translations.push_back(vec);
280  }
281  m_rotations.push_back(TRotation()); // for invalid module ID
282  m_translations.push_back(TVector3()); // for invalid module ID
283  }
284 
285  const TRotation& TOPCalModuleAlignment::getRotation(int moduleID) const
286  {
287  if (m_rotations.empty()) setTransformations();
288  unsigned module = moduleID - 1;
289  if (module >= c_numModules) {
290  B2ERROR("Invalid module number, returning identity rotation (" << ClassName() << ")");
291  return m_rotations[c_numModules];
292  }
293  return m_rotations[module];
294  }
295 
296  const TVector3& TOPCalModuleAlignment::getTranslation(int moduleID) const
297  {
298  if (m_translations.empty()) setTransformations();
299  unsigned module = moduleID - 1;
300  if (module >= c_numModules) {
301  B2ERROR("Invalid module number, returning null vector (" << ClassName() << ")");
302  return m_translations[c_numModules];
303  }
304  return m_translations[module];
305  }
306 
307 
309 } // namespace Belle2
310 
Abstract base class for different kinds of events.