Belle II Software  release-06-00-14
eclWaveforms.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 #include <ecl/dataobjects/ECLWaveforms.h>
9 #include <ecl/digitization/ECLCompress.h>
10 #include <gtest/gtest.h>
11 
12 using namespace std;
13 
14 namespace Belle2 {
19  namespace ECL {
20 
22  class ECLWaveformsTest : public ::testing::Test {};
23 
25  TEST_F(ECLWaveformsTest, Constructor)
26  {
27  ECLWaveforms q;
28  EXPECT_EQ(q.getStore().size(), 0);
29  }
30 
32  TEST_F(ECLWaveformsTest, Getter)
33  {
34  const int N = 2;
35  vector<unsigned int> t(N);
36  ECLWaveforms q;
37  t.swap(q.getStore());
38  EXPECT_EQ(q.getStore().size(), N);
39  }
40 
42  class BitStreamTest : public ::testing::Test {};
43 
45  TEST_F(BitStreamTest, Constructor)
46  {
47  BitStream q;
48  EXPECT_EQ(q.getPos(), 0);
49  EXPECT_EQ(q.getStore().size(), 1);
50 
51  int N = 128;
52  BitStream q2(N);
53  EXPECT_EQ(q2.getPos(), 0);
54  EXPECT_EQ(q2.getStore().size(), N);
55  }
56 
58  TEST_F(BitStreamTest, functionality)
59  {
60  int N = 128;
61  BitStream q(N);
62 
63  for (unsigned int i = 0; i < 32; i++) {
64  unsigned int k = 1u << i;
65  q.putNBits(k, i + 1);
66  }
67  EXPECT_EQ(q.getPos(), 528);
68  q.setPos(0);
69  for (unsigned int i = 0; i < 32; i++) {
70  unsigned int k0 = 1u << i, k = q.getNBits(i + 1);
71  EXPECT_EQ(k, k0);
72  }
73  EXPECT_EQ(q.getPos(), 528);
74 
75  q.resize();
76  q.setPos(0);
77  for (unsigned int i = 0; i < 32; i++) {
78  unsigned int k0 = 1u << i, k = q.getNBits(i + 1);
79  EXPECT_EQ(k, k0);
80  }
81  EXPECT_EQ(q.getPos(), 528);
82  }
83 
85  class ECLBaseCompressTest : public ::testing::Test {};
86 
88  TEST_F(ECLBaseCompressTest, functionality)
89  {
91 
92  int N = 128;
93  for (int off = 0; off < 32; ++off) {
94  BitStream q2(N);
95 
96  q2.setPos(off);
97  int A[31];
98  for (int i = 0; i < 31; i++) A[i] = 4000 + ((i % 2) * 1000 - 500);
99  q.compress(q2, A);
100 
101  q2.setPos(off);
102  int B[31];
103  q.uncompress(q2, B);
104  for (int i = 0; i < 31; i++) EXPECT_EQ(A[i], B[i]);
105  }
106  }
107 
109  class ECLDeltaCompressTest : public ::testing::Test {};
110 
112  TEST_F(ECLDeltaCompressTest, functionality)
113  {
115 
116  int N = 128;
117  for (int off = 0; off < 32; ++off) {
118  BitStream q2(N);
119 
120  q2.setPos(off);
121  int A[31];
122  for (int i = 0; i < 31; i++) A[i] = 4000 + ((i % 2) * 1000 - 500);
123  q.compress(q2, A);
124 
125  q2.setPos(off);
126  int B[31];
127  q.uncompress(q2, B);
128  for (int i = 0; i < 31; i++) EXPECT_EQ(A[i], B[i]);
129  }
130  }
131 
133  class ECLDCTCompressTest : public ::testing::Test {};
134 
136  TEST_F(ECLDCTCompressTest, functionality)
137  {
138  width_t widths_phs2_scale10[] = {
139  {5, 7, 9, 32},// 5.82104
140  {4, 6, 8, 32},// 4.76806
141  {4, 6, 8, 32},// 4.70815
142  {4, 6, 8, 32},// 4.61517
143  {3, 5, 7, 32},// 4.42656
144  {3, 5, 7, 32},// 4.22157
145  {3, 5, 7, 32},// 4.01412
146  {3, 5, 7, 32},// 3.80959
147  {2, 4, 6, 32},// 3.60224
148  {2, 4, 6, 32},// 3.31705
149  {2, 4, 6, 32},// 3.03457
150  {2, 3, 5, 32},// 2.71501
151  {2, 3, 5, 32},// 2.45094
152  {2, 3, 5, 32},// 2.25788
153  {2, 3, 5, 32},// 2.13303
154  {2, 3, 5, 32},// 2.06428
155  {2, 3, 5, 32},// 2.02847
156  {2, 3, 5, 32},// 2.01253
157  {1, 2, 4, 32},// 1.86085
158  {1, 2, 4, 32},// 1.68465
159  {1, 2, 4, 32},// 1.53003
160  {1, 2, 4, 32},// 1.38031
161  {1, 2, 4, 32},// 1.27103
162  {1, 2, 4, 32},// 1.18264
163  {1, 2, 4, 32},// 1.11546
164  {1, 2, 4, 32},// 1.07223
165  {1, 2, 4, 32},// 1.04641
166  {1, 2, 4, 32},// 1.03003
167  {1, 2, 4, 32},// 1.01772
168  {1, 2, 3, 32},// 1.01304
169  {1, 2, 4, 32},// 1.0107
170  };
171 
172  ECLDCTCompress q(1, 3500, widths_phs2_scale10);
173 
174  int N = 128;
175  for (int off = 0; off < 1; ++off) {
176  BitStream q2(N);
177 
178  q2.setPos(off);
179  int A[31];
180  for (int i = 0; i < 31; i++) A[i] = 4000 + ((i % 2) * 1000 - 500);
181  q.compress(q2, A);
182 
183  q2.setPos(off);
184  int B[31];
185  q.uncompress(q2, B);
186  for (int i = 0; i < 31; i++) EXPECT_NEAR(A[i], B[i], 10);
187  }
188  }
189  }
191 } // namespace
Class to store ECL waveforms for entire calorimeter.
Definition: ECLWaveforms.h:21
Declare BitStream test.
Definition: eclWaveforms.cc:42
Bit stream struct.
Definition: ECLCompress.h:28
Declare ECLBaseCompress test.
Definition: eclWaveforms.cc:85
ECL waveform compression/decompression to/from the BitStream storage with the BASE algorithm.
Definition: ECLCompress.h:128
Declare ECLDCTCompress test.
Declare ECLDeltaCompress test.
ECL waveform compression/decompression to/from the BitStream storage with the DELTA algorithm.
Definition: ECLCompress.h:137
Declare ECLWaveforms test.
Definition: eclWaveforms.cc:22
TEST_F(GlobalLabelTest, LargeNumberOfTimeDependentParameters)
Test large number of time-dep params for registration and retrieval.
Definition: globalLabel.cc:72
Abstract base class for different kinds of events.
Bit widths for the prefix coding to encode integers which are mainly concentrated around zero and pro...
Definition: ECLCompress.h:97