Belle II Software  release-05-01-25
SVDShaperDigit.cc
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2010 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Peter Kvasnicka *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 
11 #include <vxd/dataobjects/VxdID.h>
12 #include <svd/dataobjects/SVDModeByte.h>
13 #include <svd/dataobjects/SVDShaperDigit.h>
14 #include <vector>
15 #include <string>
16 #include <limits>
17 #include <gtest/gtest.h>
18 
19 namespace Belle2 {
24  namespace SVD {
25 
29  TEST(SVDShaperDigit, ConstructEmpty)
30  {
31  // Create an empty 6-digit
32  SVDShaperDigit digit;
33  // Test getters
34  EXPECT_EQ(0, digit.getSensorID());
35  EXPECT_TRUE(digit.isUStrip());
36  EXPECT_EQ(0, digit.getCellID());
37  const SVDShaperDigit::APVFloatSamples& samples = digit.getSamples();
38  for (auto sample : samples)
39  EXPECT_EQ(SVDShaperDigit::APVFloatSampleType(0), sample);
40  EXPECT_EQ(0.0, digit.getFADCTime());
41  EXPECT_EQ(SVDModeByte::c_DefaultID, digit.getModeByte().getID());
42  EXPECT_EQ("0-suppr/global/6 samples/???", std::string(digit.getModeByte()));
43  }
44 
48  TEST(SVDShaperDigit, ConstructFromContainer)
49  {
50  // Create an arbitrary 6-digit
51  VxdID sensorID(3, 4, 1);
52  short int cellID = 132;
53  char digitFADCTime(-16);
54  SVDModeByte digitModeByte(151);
55 
56  std::vector<int> init_samples({0, 5, 10, 9, 6, 5});
57  SVDShaperDigit digit(sensorID, false, cellID, init_samples, digitFADCTime, digitModeByte);
58  // Test getters
59  EXPECT_EQ(sensorID, digit.getSensorID());
60  EXPECT_FALSE(digit.isUStrip());
61  EXPECT_EQ(cellID, digit.getCellID());
62  const SVDShaperDigit::APVFloatSamples& samples = digit.getSamples();
63  for (size_t isample = 0; isample < SVDShaperDigit::c_nAPVSamples; ++isample)
64  EXPECT_EQ(static_cast<SVDShaperDigit::APVFloatSampleType>(init_samples[isample]),
65  samples[isample]);
66  EXPECT_EQ(static_cast<float>(digitFADCTime), digit.getFADCTime());
67  EXPECT_EQ(digitModeByte, digit.getModeByte());
68  EXPECT_EQ("0-suppr/global/6 samples/???", std::string(digit.getModeByte()));
69  }
70 
74  TEST(SVDShaperDigit, ConstructFromCArray)
75  {
76  // Create an arbitrary 6-digit
77  VxdID sensorID(3, 4, 1);
78  short int cellID = 132;
79  char digitFADCTime(-16);
80  unsigned char digitModeByte(151);
81 
82  // floats must work, too.
83  float init_samples[SVDShaperDigit::c_nAPVSamples] = {0, 5, 10, 9, 6, 5};
84  SVDShaperDigit digit(
85  sensorID, false, cellID, init_samples, digitFADCTime, digitModeByte
86  );
87  // Test getters
88  EXPECT_EQ(sensorID, digit.getSensorID());
89  EXPECT_FALSE(digit.isUStrip());
90  EXPECT_EQ(cellID, digit.getCellID());
91  const SVDShaperDigit::APVFloatSamples& samples = digit.getSamples();
92  for (size_t isample = 0; isample < SVDShaperDigit::c_nAPVSamples; ++isample)
93  EXPECT_EQ(static_cast<SVDShaperDigit::APVFloatSampleType>(init_samples[isample]),
94  samples[isample]);
95  EXPECT_EQ(static_cast<float>(digitFADCTime), digit.getFADCTime());
96  EXPECT_EQ(digitModeByte, digit.getModeByte());
97  EXPECT_EQ("0-suppr/global/6 samples/???", std::string(digit.getModeByte()));
98  }
102  TEST(SVDShaperDigit, ConstructDefaultTimeMode)
103  {
104  // Create an arbitrary 6-digit
105  VxdID sensorID(3, 4, 1);
106  short int cellID = 132;
107 
108  double init_samples[6] = {0, 5, 10, 9, 6, 5};
109  SVDShaperDigit digit(sensorID, false, cellID, init_samples);
110  // Test that time and error are set correctly.
111  EXPECT_EQ(0.0, digit.getFADCTime());
112  EXPECT_EQ(SVDModeByte::c_DefaultID, digit.getModeByte());
113  EXPECT_EQ("0-suppr/global/6 samples/???", std::string(digit.getModeByte()));
114  }
115 
117  TEST(SVDShaperDigit, SampleTrimming)
118  {
119  // Create an arbitrary 6-digit
120  VxdID sensorID(3, 4, 1);
121  short int cellID = 132;
122 
123  auto sampleMin =
124  static_cast<SVDShaperDigit::APVFloatSampleType>(std::numeric_limits<SVDShaperDigit::APVRawSampleType>::lowest());
125  auto sampleMax =
126  static_cast<SVDShaperDigit::APVFloatSampleType>(std::numeric_limits<SVDShaperDigit::APVRawSampleType>::max());
127 
128  std::vector<float> init_samples({0, -10, 255, 256, 500, -1});
129  SVDShaperDigit digit(sensorID, false, cellID, init_samples);
130  const auto& samples = digit.getSamples();
131  for (size_t isample = 0; isample < SVDShaperDigit::c_nAPVSamples; ++isample) {
132  auto trimmedSample = std::max(sampleMin, std::min(sampleMax, init_samples[isample]));
133  EXPECT_EQ(trimmedSample, samples[isample]);
134  }
135  }
136 
138  TEST(SVDShaperDigit, TrimmingFunction)
139  {
140 
141  // Create an arbitrary 6-digit
142  auto sampleMin =
143  static_cast<SVDShaperDigit::APVFloatSampleType>(std::numeric_limits<SVDShaperDigit::APVRawSampleType>::lowest());
144  auto sampleMax =
145  static_cast<SVDShaperDigit::APVFloatSampleType>(std::numeric_limits<SVDShaperDigit::APVRawSampleType>::max());
146 
147  std::vector<float> init_samples({0, -10, 255, 256, 500, -1});
148  for (size_t isample = 0; isample < SVDShaperDigit::c_nAPVSamples; ++isample) {
149  auto trimmedSample = std::max(sampleMin, std::min(sampleMax, init_samples[isample]));
150  EXPECT_EQ(trimmedSample, SVDShaperDigit::trimToSampleRange(init_samples[isample]));
151  }
152  }
153  } // namespace SVD
155 } // namespace Belle2
Belle2::VxdID
Class to uniquely identify a any structure of the PXD and SVD.
Definition: VxdID.h:43
Belle2::SVDModeByte::c_DefaultID
static const baseType c_DefaultID
Default / non-informative id 10010111 = 151 Run type: zero-suppressed, 2 Event type: global run,...
Definition: SVDModeByte.h:116
Belle2::SVDModeByte
Class to store SVD mode information.
Definition: SVDModeByte.h:79
Belle2::SVDShaperDigit::APVFloatSampleType
float APVFloatSampleType
Types for array of samples for processing.
Definition: SVDShaperDigit.h:62
Belle2::SVDShaperDigit
The SVD ShaperDigit class.
Definition: SVDShaperDigit.h:46
Belle2::SVDShaperDigit::APVFloatSamples
std::array< APVFloatSampleType, c_nAPVSamples > APVFloatSamples
array of APVFloatSampleType objects
Definition: SVDShaperDigit.h:63
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::SVDShaperDigit::trimToSampleRange
static SVDShaperDigit::APVRawSampleType trimToSampleRange(T x)
Convert a value to sample range.
Definition: SVDShaperDigit.h:188
Belle2::SVDShaperDigit::c_nAPVSamples
static const std::size_t c_nAPVSamples
Number of APV samples stored.
Definition: SVDShaperDigit.h:51
Belle2::SVD::TEST
TEST(NNTimeFitter, DISABLED_CompareNetworkCoefficient)
Compare NN fitter parameter dump from Python with internal data representation in C++ to verify that ...
Definition: NNFitterTest.cc:37