Project
Loading...
Searching...
No Matches
testPileupTool.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 TRD Pileup Tool
13#define BOOST_TEST_MAIN
14#define BOOST_TEST_DYN_LINK
15#include <boost/test/unit_test.hpp>
16
18#include "DataFormatsTRD/SignalArray.h" // for SignalContainer
20
21#include <algorithm>
22
23namespace o2
24{
25namespace trd
26{
27
28BOOST_AUTO_TEST_CASE(TRDPileupTool_test)
29{
30 PileupTool tool;
31
32 double triggerTime;
33 std::vector<SignalArray> signalArrays(3);
34 std::array<SignalContainer, constants::MAXCHAMBER> chamberSignals;
35 std::deque<std::array<SignalContainer, constants::MAXCHAMBER>> pileupSignals;
36
37 // set the signals
38 signalArrays[0].firstTBtime = 0;
39 signalArrays[1].firstTBtime = 2000;
40 signalArrays[2].firstTBtime = 4900;
41 std::fill(signalArrays[0].signals.begin(), signalArrays[0].signals.end(), 1);
42 std::fill(signalArrays[1].signals.begin(), signalArrays[1].signals.end(), 1);
43 std::fill(signalArrays[2].signals.begin(), signalArrays[2].signals.end(), 1);
44 signalArrays[0].labels = {1}; // dummy label;
45 signalArrays[1].labels = {1}; // dummy label;
46 signalArrays[2].labels = {1}; // dummy label;
47
48 triggerTime = 0;
49 // simulate that chamber 0 recieves three signals at t1,...t2,...t3
50 // with t1 triggering, and t2 incoming before t1+30tb, and t3 to far in the future
51 // all with key = 1111
52 chamberSignals[0][1111] = signalArrays[0]; // chamber 0, with key 1, first signal at t1
53 pileupSignals.push_back(chamberSignals); // pileup
54 chamberSignals[0][1111] = signalArrays[1]; // chamber 0, with key 1, second signal at t2
55 pileupSignals.push_back(chamberSignals); // pileup
56 chamberSignals[0][1111] = signalArrays[2]; // chamber 0, with key 1, third signal at t3
57 pileupSignals.push_back(chamberSignals); // pileup
58
59 std::array<float, constants::TIMEBINS> expected1 = {
60 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 02, 02, 02, 02, 02, 02, 02, 02, 02, 02};
61
62 auto result1 = tool.addSignals(pileupSignals, triggerTime);
63
64 pileupSignals.clear();
65 triggerTime = 2000;
66 // simulate that chamber 0 recieves three signals at t1,...t2,...t3
67 // with t2 triggering, and t1 from the past, and t3 incoming before t2+30tb
68 // all with key = 1111
69 chamberSignals[0][1111] = signalArrays[0]; // chamber 0, with key 1, first signal at t1
70 pileupSignals.push_back(chamberSignals); // pileup
71 chamberSignals[0][1111] = signalArrays[1]; // chamber 0, with key 1, second signal at t2
72 pileupSignals.push_back(chamberSignals); // pileup
73 chamberSignals[0][1111] = signalArrays[2]; // chamber 0, with key 1, third signal at t3
74 pileupSignals.push_back(chamberSignals); // pileup
75
76 std::array<float, constants::TIMEBINS> expected2 = {
77 02, 02, 02, 02, 02, 02, 02, 02, 02, 02, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 02};
78
79 auto result2 = tool.addSignals(pileupSignals, triggerTime);
80
81 pileupSignals.clear();
82 triggerTime = 4900;
83 // simulate that chamber 0 recieves three signals at t1,...t2,...t3
84 // with t3 triggering, and t1 and t2 from the past
85 // note that t1 is too old
86 // all with key = 1111
87 chamberSignals[0][1111] = signalArrays[0]; // chamber 0, with key 1, first signal at t1
88 pileupSignals.push_back(chamberSignals); // pileup
89 chamberSignals[0][1111] = signalArrays[1]; // chamber 0, with key 1, second signal at t2
90 pileupSignals.push_back(chamberSignals); // pileup
91 chamberSignals[0][1111] = signalArrays[2]; // chamber 0, with key 1, third signal at t3
92 pileupSignals.push_back(chamberSignals); // pileup
93
94 std::array<float, constants::TIMEBINS> expected3 = {
95 02, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01};
96
97 auto result3 = tool.addSignals(pileupSignals, triggerTime);
98
99 BOOST_TEST(result1[1111].signals == expected1, boost::test_tools::per_element());
100 BOOST_TEST(result2[1111].signals == expected2, boost::test_tools::per_element());
101 BOOST_TEST(result3[1111].signals == expected3, boost::test_tools::per_element());
102}
103
104} // namespace trd
105} // namespace o2
Global TRD definitions and constants.
BOOST_AUTO_TEST_CASE(TRDDigit_test)
Definition testDigit.cxx:48
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
SignalContainer addSignals(std::deque< std::array< SignalContainer, constants::MAXCHAMBER > > &, const double &)
BOOST_TEST(digits==digitsD, boost::test_tools::per_element())