12#define BOOST_TEST_MODULE Test ZDCCTFIO
13#define BOOST_TEST_MAIN
14#define BOOST_TEST_DYN_LINK
19#include <boost/test/unit_test.hpp>
20#include <boost/test/data/test_case.hpp>
21#include <boost/test/data/dataset.hpp>
28#include <TStopwatch.h>
33namespace boost_data = boost::unit_test::data;
39 std::vector<BCData> bcdata;
53 for (
int irof = 0; irof < 1000; irof++) {
54 ir += 1 + gRandom->Integer(100);
56 uint32_t channPatt = 0, triggers = 0;
60 channPatt |= 0x1 << ich;
64 if (gRandom->Rndm() > 0.4) {
65 triggers |= 0x1 << ich;
69 auto& bcd = bcdata.emplace_back(firstChEntry,
chandata.size() - firstChEntry,
ir, channPatt, triggers, gRandom->Integer(0xff));
70 for (
int im = 0; im <
NModules; im++) {
71 bcd.moduleTriggers[im] = gRandom->Rndm() > 0.7 ? gRandom->Integer((0x1 << 10) - 1) : 0;
83 pedsdata[
i].data[ic] = gRandom->Integer(0xffff);
84 pedsdata[
i].scaler[ic] = (ic > 0 ?
pedsdata[
i].scaler[ic - 1] : 0) + gRandom->Integer(20);
90 std::vector<o2::ctf::BufferType>
vec;
97 LOG(info) <<
"Compressed in " <<
sw.CpuTime() <<
" s";
103 TFile
flOut(
"test_ctf_zdc.root",
"recreate");
109 LOG(info) <<
"Wrote to tree in " <<
sw.CpuTime() <<
" s";
116 TFile
flIn(
"test_ctf_zdc.root");
121 LOG(info) <<
"Read back from tree in " <<
sw.CpuTime() <<
" s";
135 LOG(info) <<
"Decompressed in " <<
sw.CpuTime() <<
" s";
137 LOG(info) <<
"Testing BCData: BOOST_CHECK bcdataD.size() " <<
bcdataD.size() <<
" bcdata.size() " << bcdata.size();
139 for (
size_t i = 0;
i < bcdata.size();
i++) {
140 bool cmpBCData = (bcdata[
i].ir ==
bcdataD[
i].ir &&
142 bcdata[
i].moduleTriggers ==
bcdataD[
i].moduleTriggers &&
143 bcdata[
i].channels ==
bcdataD[
i].channels &&
144 bcdata[
i].triggers ==
bcdataD[
i].triggers &&
145 bcdata[
i].ext_triggers ==
bcdataD[
i].ext_triggers);
148 LOG(error) <<
"Mismatch in BC data " <<
i;
155 LOG(info) <<
"Testing ChannelData: BOOST_CHECK(chandataD.size() " <<
chandataD.size() <<
" chandata.size()) " <<
chandata.size();
161 LOG(error) <<
"Mismatch in ChannelData " <<
i;
168 LOG(info) <<
"Testing OrbitData: BOOST_CHECK(pedsdataD.size() " <<
pedsdataD.size() <<
" pedsdata.size()) " <<
pedsdata.size();
173 LOG(error) <<
"Mismatch in OrbitData " <<
i;
BOOST_DATA_TEST_CASE(DefaultConstructorNofSamplesIsInvariant, boost::unit_test::data::make(nsamples), nofSamples)
Definition of the Names Generator class.
class for entropy encoding/decoding of ZDC data
static constexpr std::string_view CTFTREENAME
void setANSVersion(const ctf::ANSHeader &ansVersion) noexcept
void readFromTree(TTree &tree, const std::string &name, int ev=0)
read from tree to non-flat object
static auto get(void *head)
cast arbitrary buffer head to container class. Head is supposed to respect the alignment
static auto getImage(const void *newHead)
get const image of the container wrapper, with pointers in the image relocated to new head
o2::ctf::CTFIOSize decode(const CTF::base &ec, VTRG &trigVec, VCHAN &chanVec, VPED &pedVec)
entropy decode data from buffer with CTF
o2::ctf::CTFIOSize encode(VEC &buff, const gsl::span< const BCData > &trgData, const gsl::span< const ChannelData > &chanData, const gsl::span< const OrbitData > &pedData)
entropy-encode data to buffer with CTF
constexpr int LHCMaxBunches
constexpr ANSHeader ANSVersionCompat
constexpr ANSHeader ANSVersion1
constexpr int NTimeBinsPerBC
constexpr int NDigiChannels
std::vector< OrbitData > pedsdataD
std::vector< BCData > bcdataD
std::vector< o2::ctf::BufferType > vec
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"
TFile flOut("test_ctf_zdc.root", "recreate")
std::vector< o2::ctf::ANSHeader > ANSVersions
o2::InteractionRecord irPed(o2::constants::lhc::LHCMaxBunches - 1, irFirst.orbit)
o2::InteractionRecord ir(0, 0)
std::vector< ChannelData > chandataD
std::array< float, NTimeBinsPerBC > chanVals
TTree ctfTree(std::string(o2::base::NameConf::CTFTREENAME).c_str(), "O2 CTF tree")
std::vector< ChannelData > chandata
std::vector< OrbitData > pedsdata
TFile flIn("test_ctf_zdc.root")
std::unique_ptr< TTree > tree((TTree *) flIn.Get(std::string(o2::base::NameConf::CTFTREENAME).c_str()))