Project
Loading...
Searching...
No Matches
testPedestal.cxx
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
12#define BOOST_TEST_MODULE Test_EMCAL_Calib
13#define BOOST_TEST_MAIN
14#define BOOST_TEST_DYN_LINK
15
16#include <boost/test/unit_test.hpp>
17#include <array>
18#include <random>
20#include "EMCALCalib/Pedestal.h"
21
23
24namespace o2
25{
26namespace emcal
27{
28
29using pedestalarray = std::vector<short>;
30
32{
33 std::random_device rd{};
34 std::mt19937 gen{rd()};
35 std::normal_distribution gaussrand{40., 5.};
36 pedestalarray pedestalcontainer(isLEDMON ? 480 : 17664);
37 for (std::size_t ichan{0}; ichan < pedestalcontainer.size(); ++ichan) {
38 pedestalcontainer[ichan] = std::round(gaussrand(gen));
39 }
40
41 return pedestalcontainer;
42}
43
44pedestalarray shiftPedestalValue(const pedestalarray& input, short shift = 1)
45{
46 pedestalarray shifted;
47 for (std::size_t ichan{0}; ichan < input.size(); ++ichan) {
48 shifted[ichan] = input[ichan] + shift;
49 }
50 return shifted;
51}
52
54{
55 auto pedestalsHG = createRandomPedestals(false),
56 pedestalsLG = createRandomPedestals(false),
57 pedestalsLEDMONHG = createRandomPedestals(true),
58 pedestalsLEDMONLG = createRandomPedestals(true);
59
60 o2::emcal::Pedestal pedestalObject;
61 for (std::size_t ichan{0}; ichan < pedestalsHG.size(); ++ichan) {
62 pedestalObject.addPedestalValue(ichan, pedestalsHG[ichan], false, false);
63 pedestalObject.addPedestalValue(ichan, pedestalsLG[ichan], true, false);
64 }
65 for (std::size_t ichan{0}; ichan < pedestalsLEDMONHG.size(); ++ichan) {
66 pedestalObject.addPedestalValue(ichan, pedestalsLEDMONHG[ichan], false, true);
67 pedestalObject.addPedestalValue(ichan, pedestalsLEDMONLG[ichan], true, true);
68 }
69
70 // test adding entries beyond range
71 for (std::size_t ichan{17665}; ichan < 18000; ++ichan) {
72 BOOST_CHECK_EXCEPTION(pedestalObject.addPedestalValue(ichan, 2, false, true), o2::emcal::CalibContainerIndexException, [ichan](const o2::emcal::CalibContainerIndexException& e) { return e.getIndex() == ichan; });
73 BOOST_CHECK_EXCEPTION(pedestalObject.addPedestalValue(ichan, 3, true, false), o2::emcal::CalibContainerIndexException, [ichan](const o2::emcal::CalibContainerIndexException& e) { return e.getIndex() == ichan; });
74 }
75
76 // test reading values in range
77 for (std::size_t ichan{0}; ichan < pedestalsHG.size(); ++ichan) {
78 BOOST_CHECK_EQUAL(pedestalObject.getPedestalValue(ichan, false, false), pedestalsHG[ichan]);
79 BOOST_CHECK_EQUAL(pedestalObject.getPedestalValue(ichan, true, false), pedestalsLG[ichan]);
80 }
81 for (std::size_t ichan{0}; ichan < pedestalsLEDMONHG.size(); ++ichan) {
82 BOOST_CHECK_EQUAL(pedestalObject.getPedestalValue(ichan, false, true), pedestalsLEDMONHG[ichan]);
83 BOOST_CHECK_EQUAL(pedestalObject.getPedestalValue(ichan, true, true), pedestalsLEDMONLG[ichan]);
84 }
85
86 // test reading entries beyond range
87 for (std::size_t ichan{17665}; ichan < 18000; ++ichan) {
88 BOOST_CHECK_EXCEPTION(pedestalObject.getPedestalValue(ichan, false, false), o2::emcal::CalibContainerIndexException, [ichan](const o2::emcal::CalibContainerIndexException& e) { return e.getIndex() == ichan; });
89 BOOST_CHECK_EXCEPTION(pedestalObject.getPedestalValue(ichan, true, false), o2::emcal::CalibContainerIndexException, [ichan](const o2::emcal::CalibContainerIndexException& e) { return e.getIndex() == ichan; });
90 BOOST_CHECK_EXCEPTION(pedestalObject.getPedestalValue(ichan, false, true), o2::emcal::CalibContainerIndexException, [ichan](const o2::emcal::CalibContainerIndexException& e) { return e.getIndex() == ichan; });
91 BOOST_CHECK_EXCEPTION(pedestalObject.getPedestalValue(ichan, true, true), o2::emcal::CalibContainerIndexException, [ichan](const o2::emcal::CalibContainerIndexException& e) { return e.getIndex() == ichan; });
92 }
93
94 // tests for operator==
95 // shift pedestal by 1 for false test
96 // Test all cases:
97 // - same object
98 // - same HG, different LG
99 // - same LG, different HG
100 // - both HG and LG different
101 /*
102 auto shiftedPedestalsHG = shiftPedestalValue(pedestalsHG, 1),
103 shiftedPedestalsLG = shiftPedestalValue(pedestalsLG, 1);
104 o2::emcal::Pedestal same, differLow, differHigh, differBoth;
105 for (std::size_t ichan{0}; ichan < pedestalsHG.size(); ++ichan) {
106 same.addPedestalValue(ichan, pedestalsHG[ichan], false);
107 same.addPedestalValue(ichan, pedestalsLG[ichan], true);
108 differLow.addPedestalValue(ichan, pedestalsHG[ichan], false);
109 differLow.addPedestalValue(ichan, shiftedPedestalsLG[ichan], true);
110 differHigh.addPedestalValue(ichan, shiftedPedestalsHG[ichan], false);
111 differHigh.addPedestalValue(ichan, pedestalsLG[ichan], true);
112 differBoth.addPedestalValue(ichan, shiftedPedestalsHG[ichan], false);
113 differBoth.addPedestalValue(ichan, shiftedPedestalsLG[ichan], true);
114 }
115 BOOST_CHECK_EQUAL(pedestalObject, same);
116 BOOST_CHECK_NE(pedestalObject, differLow);
117 BOOST_CHECK_NE(pedestalObject, differHigh);
118 BOOST_CHECK_NE(pedestalObject, differBoth);
119 */
120}
121
122} // namespace emcal
123
124} // namespace o2
default_random_engine gen(dev())
Error handling for invalid index in calibration request.
CCDB container for pedestal values.
Definition Pedestal.h:48
short getPedestalValue(unsigned short cellID, bool isLowGain, bool isLEDMON) const
Get the time calibration coefficient for a certain cell.
Definition Pedestal.cxx:47
void addPedestalValue(unsigned short cellID, short pedestal, bool isLowGain, bool isLEDMON)
Add pedestal to the container.
Definition Pedestal.cxx:27
BOOST_AUTO_TEST_CASE(asynch_schedule_test)
std::vector< short > pedestalarray
pedestalarray shiftPedestalValue(const pedestalarray &input, short shift=1)
pedestalarray createRandomPedestals(bool isLEDMON)
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
std::random_device rd
BOOST_CHECK_EQUAL(triggersD.size(), triggers.size())