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