Project
Loading...
Searching...
No Matches
testRCUTrailer.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#define BOOST_TEST_MODULE Test EMCAL Base
12#define BOOST_TEST_MAIN
13#define BOOST_TEST_DYN_LINK
14#include <array>
15#include <boost/test/unit_test.hpp>
17
25BOOST_AUTO_TEST_CASE(RCUTrailer_test)
26{
27 // common settings
28 int firmware = 2,
29 activeFECA = 0,
30 activeFECB = 1,
31 baselineCorr = 0,
32 presamples = 0,
33 postsamples = 0,
34 glitchfilter = 0,
35 presamplesNoZS = 1,
36 postsamplesNoZS = 1,
37 samplesChannel = 15,
38 samplesPretrigger = 0,
39 timesample = 100;
40 bool havePolarity = false,
41 haveSecBaselineCorr = false,
42 haveZS = true,
43 haveSpareReadout = true;
45
47 trailer.setRCUID(0);
48 trailer.setFirmwareVersion(firmware);
49 trailer.setActiveFECsA(activeFECA);
50 trailer.setActiveFECsB(activeFECB);
51 trailer.setPayloadSize(20);
52 trailer.setTimeSamplePhaseNS(425, timesample);
53 trailer.setBaselineCorrection(baselineCorr);
54 trailer.setPolarity(havePolarity);
55 trailer.setNumberOfPresamples(presamples);
56 trailer.setNumberOfPostsamples(postsamples);
57 trailer.setSecondBaselineCorrection(false);
58 trailer.setGlitchFilter(glitchfilter);
59 trailer.setNumberOfNonZeroSuppressedPostsamples(postsamplesNoZS);
60 trailer.setNumberOfNonZeroSuppressedPresamples(presamplesNoZS);
61 trailer.setNumberOfPretriggerSamples(samplesPretrigger);
62 trailer.setNumberOfSamplesPerChannel(samplesChannel);
63 trailer.setZeroSuppression(haveZS);
64 trailer.setSparseReadout(haveSpareReadout);
65 trailer.setNumberOfAltroBuffers(bufmode);
66
67 //
68 // check ALTRO config
69 //
70 auto encoded_config = trailer.encode();
71 auto trailer_decoded_config = o2::emcal::RCUTrailer::constructFromPayloadWords(encoded_config);
72 BOOST_CHECK_EQUAL(trailer_decoded_config.getFirmwareVersion(), firmware);
73 BOOST_CHECK_EQUAL(trailer_decoded_config.getNumberOfPresamples(), presamples);
74 BOOST_CHECK_EQUAL(trailer_decoded_config.getNumberOfPostsamples(), postsamples);
75 BOOST_CHECK_EQUAL(trailer_decoded_config.getNumberOfNonZeroSuppressedPresamples(), presamplesNoZS);
76 BOOST_CHECK_EQUAL(trailer_decoded_config.getNumberOfNonZeroSuppressedPostsamples(), postsamplesNoZS);
77 BOOST_CHECK_EQUAL(trailer_decoded_config.getGlitchFilter(), glitchfilter);
78 BOOST_CHECK_EQUAL(trailer_decoded_config.getNumberOfPretriggerSamples(), samplesPretrigger);
79 BOOST_CHECK_EQUAL(trailer_decoded_config.getNumberOfSamplesPerChannel(), samplesChannel);
80 BOOST_CHECK_EQUAL(trailer_decoded_config.getPolarity(), havePolarity);
81 BOOST_CHECK_EQUAL(trailer_decoded_config.hasSecondBaselineCorr(), haveSecBaselineCorr);
82 BOOST_CHECK_EQUAL(trailer_decoded_config.hasZeroSuppression(), haveZS);
83 BOOST_CHECK_EQUAL(trailer_decoded_config.isSparseReadout(), haveSpareReadout);
84 BOOST_CHECK_EQUAL(trailer_decoded_config.getActiveFECsA(), activeFECA);
85 BOOST_CHECK_EQUAL(trailer_decoded_config.getActiveFECsB(), activeFECB);
86 BOOST_CHECK_CLOSE(trailer_decoded_config.getTimeSampleNS(), timesample, 1);
87 BOOST_CHECK_CLOSE(trailer_decoded_config.getL1PhaseNS(), 25, 1);
88
89 //
90 // Check RCU ID
91 //
92 for (int ircu = 0; ircu < 46; ircu++) {
93 trailer.setRCUID(ircu);
94 auto encoded_rcu = trailer.encode();
95 auto trailer_decoded_rcu = o2::emcal::RCUTrailer::constructFromPayloadWords(encoded_rcu);
96 BOOST_CHECK_EQUAL(trailer_decoded_rcu.getRCUID(), ircu);
97 }
98 trailer.setRCUID(0);
99
100 //
101 // Check buffer modes
102 //
103 std::map<o2::emcal::RCUTrailer::BufferMode_t, int> buffertests = {{o2::emcal::RCUTrailer::BufferMode_t::NBUFFERS4, 4}, {o2::emcal::RCUTrailer::BufferMode_t::NBUFFERS8, 8}};
104 for (auto [bufmode, nbuffers] : buffertests) {
105 trailer.setNumberOfAltroBuffers(bufmode);
106 auto encoded_buffer = trailer.encode();
107 auto trailer_decoded_buffer = o2::emcal::RCUTrailer::constructFromPayloadWords(encoded_buffer);
108 BOOST_CHECK_EQUAL(trailer_decoded_buffer.getNumberOfAltroBuffers(), nbuffers);
109 }
110 trailer.setNumberOfAltroBuffers(bufmode);
111
112 //
113 // Check error counters
114 //
115 std::array<int, 10> nerrors = {0, 1, 6, 10, 112, 232, 255, 52, 22, 76};
116 for (auto error : nerrors) {
118 auto encoded_error = trailer.encode();
119 auto trailer_decoded_error = o2::emcal::RCUTrailer::constructFromPayloadWords(encoded_error);
120 BOOST_CHECK_EQUAL(trailer_decoded_error.getNumberOfChannelLengthMismatch(), error);
121 }
123 for (auto error : nerrors) {
125 auto encoded_error = trailer.encode();
126 auto trailer_decoded_error = o2::emcal::RCUTrailer::constructFromPayloadWords(encoded_error);
127 BOOST_CHECK_EQUAL(trailer_decoded_error.getNumberOfChannelAddressMismatch(), error);
128 }
130}
Information stored in the RCU trailer.
Definition RCUTrailer.h:75
void setNumberOfNonZeroSuppressedPostsamples(uint16_t npostsamples)
Set the number of postsamples before zero suppression.
Definition RCUTrailer.h:304
void setPayloadSize(uint32_t size)
set the payload size in number of DDL (32-bit) words
Definition RCUTrailer.h:174
void setTimeSamplePhaseNS(uint64_t triggertime, uint64_t timesample)
Set the time sample length and L1 phase based on the trigger time.
void setNumberOfNonZeroSuppressedPresamples(uint16_t npresamples)
Set the number of presamples after zero suppression.
Definition RCUTrailer.h:308
void setNumberOfChannelAddressMismatch(uint16_t nchannel)
Set the number of channels with address mismatch.
Definition RCUTrailer.h:207
static RCUTrailer constructFromPayloadWords(const gsl::span< const uint32_t > payloadwords)
Decode RCU trailer from payload.
void setSparseReadout(bool isSparse)
Set sparse readout mode.
Definition RCUTrailer.h:324
BufferMode_t
Handler for encoding of the number of ALTRO buffers in the configuration.
Definition RCUTrailer.h:117
@ NBUFFERS8
8 ALTRO buffers
Definition RCUTrailer.h:119
@ NBUFFERS4
4 ALTRO buffers
Definition RCUTrailer.h:118
void setNumberOfAltroBuffers(BufferMode_t bufmode)
Set the number of ALTRO buffers.
Definition RCUTrailer.h:328
void setNumberOfPretriggerSamples(uint16_t nsamples)
Set the number of pretrigger samples.
Definition RCUTrailer.h:312
void setBaselineCorrection(uint16_t baselineCorrection)
Set baseline correction method.
Definition RCUTrailer.h:280
void setSecondBaselineCorrection(bool doHave)
Specify whether second basedline correction has been applied.
Definition RCUTrailer.h:296
void setGlitchFilter(uint16_t glitchfilter)
Set the glitch filter.
Definition RCUTrailer.h:300
void setActiveFECsA(uint16_t value)
Definition RCUTrailer.h:219
void setActiveFECsB(uint16_t value)
Definition RCUTrailer.h:220
void setZeroSuppression(bool doHave)
Specify whether zero suppression has been applied.
Definition RCUTrailer.h:320
void setFirmwareVersion(uint8_t version)
Set the firmware version.
Definition RCUTrailer.h:166
std::vector< uint32_t > encode() const
Encode RCU trailer as array of DDL (32-bit) words.
void setNumberOfSamplesPerChannel(uint16_t nsamples)
Set the number of samples per channel.
Definition RCUTrailer.h:316
void setNumberOfChannelLengthMismatch(uint8_t nchannel)
Set the number of channels with length mismatch.
Definition RCUTrailer.h:211
void setRCUID(int rcuid)
Set the ID of the RCU.
Definition RCUTrailer.h:170
void setPolarity(bool doSet)
Set the polarity.
Definition RCUTrailer.h:284
void setNumberOfPostsamples(uint16_t npostsamples)
Set the number of postsamples (after zero suppression)
Definition RCUTrailer.h:292
void setNumberOfPresamples(uint16_t npresamples)
Set the number of presamples (after zero suppression)
Definition RCUTrailer.h:288
BOOST_AUTO_TEST_CASE(RCUTrailer_test)
BOOST_CHECK_EQUAL(triggersD.size(), triggers.size())