Belle II Software  release-05-01-25
TOPRawDigit.cc
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2017 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Marko Petric, Marko Staric *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 
11 #include <top/dataobjects/TOPRawDigit.h>
12 
13 #include <framework/logging/Logger.h>
14 
15 #include <math.h>
16 
17 using namespace std;
18 
19 namespace Belle2 {
25  bool TOPRawDigit::isPedestalJump() const
26  {
27  if (m_sampleRise == 0) {
28  if ((m_dSampleFall + 1) % 64 == 0) return true;
29  } else if ((m_sampleRise + 1) % 64 == 0) {
30  if (m_dSampleFall % 64 == 0) return true;
31  }
32  return false;
33  }
34 
35 
36  bool TOPRawDigit::isAtWindowDiscontinuity(unsigned short storageDepth) const
37  {
38  if (m_windows.empty()) return false;
39 
40  unsigned size = m_windows.size();
41  unsigned i0 = getSampleRise() / c_WindowSize;
42  if (i0 >= size) i0 = size - 1;
43  unsigned i1 = (getSampleFall() + 1) / c_WindowSize;
44  if (i1 >= size) i1 = size - 1;
45  if (i0 == i1) return false;
46 
47  int diff = m_windows[i1] - m_windows[i0];
48  if (diff < 0) diff += storageDepth;
49  if (diff != 1) return true;
50  return false;
51  }
52 
53 
54  bool TOPRawDigit::areWindowsInOrder(unsigned short storageDepth) const
55  {
56  unsigned lastSample = getSampleFall() + 1;
57  unsigned last = lastSample / c_WindowSize + 1;
58  unsigned size = m_windows.size();
59  for (unsigned i = 1; i < std::min(last, size); i++) {
60  int diff = m_windows[i] - m_windows[i - 1];
61  if (diff < 0) diff += storageDepth;
62  if (diff != 1) return false;
63  }
64  return true;
65  }
66 
67 
68  double TOPRawDigit::correctTime(double time, unsigned short storageDepth) const
69  {
70  if (m_windows.empty()) return time;
71 
72  unsigned last = int(time) / c_WindowSize + 1;
73  unsigned size = m_windows.size();
74  int missing = 0;
75  for (unsigned i = 1; i < std::min(last, size); i++) {
76  int diff = m_windows[i] - m_windows[i - 1];
77  if (diff < 0) diff += storageDepth;
78  if (diff != 1) missing += diff - 1;
79  if (diff == 0) B2ERROR("TOPRawDigit: two consecutive windows with the same number");
80  }
81 
82  return time + missing * c_WindowSize;
83  }
84 
85 
86  double TOPRawDigit::timeErrorCoefficient(double y1, double y2) const
87  {
88  double dy = y2 - y1;
89  double ym = m_VPeak / 2.0;
90  double a = 1.0 / (2.0 * dy);
91  double b = (ym - y2) / (dy * dy);
92  double c = (ym - y1) / (dy * dy);
93 
94  return sqrt(a * a + b * b + c * c);
95  }
96 
98 } // end Belle2 namespace
99 
100 
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19