12#define BOOST_TEST_MODULE Test TRDCTFIO
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<TriggerRecord> triggers;
50 for (
int irof = 0; irof < 200; irof++) {
51 ir += 1 + gRandom->Integer(600);
52 bool doDigits = gRandom->Rndm() > 0.8;
55 auto startDig =
digits.size();
57 while ((cid += gRandom->Poisson(5)) <
NHCID) {
59 int nTrk = gRandom->Poisson(3);
60 int nDig = doDigits ? nTrk * 5 * (1. + gRandom->Rndm()) : 0;
62 for (
int i = nTrk;
i--;) {
63 tracklets.emplace_back(
formatTrk, hcid, gRandom->Integer(0x1 << 4), gRandom->Integer(0x1 << 2),
64 gRandom->Integer(0x1 << 11), gRandom->Integer(0x1 << 8), gRandom->Integer(0x1 << 24));
66 for (
int i = nDig;
i--;) {
67 auto& dig =
digits.emplace_back(cid, gRandom->Integer(0x1 << 8), gRandom->Integer(0x1 << 8), gRandom->Integer(0x1 << 8));
69 adc[
j] = gRandom->Integer(0x1 << 16);
75 triggers.emplace_back(
ir, startDig,
digits.size() - startDig, startTrk,
tracklets.size() - startTrk);
79 std::vector<o2::ctf::BufferType>
vec;
86 LOG(info) <<
"Compressed in " <<
sw.CpuTime() <<
" s";
92 TFile
flOut(
"test_ctf_trd.root",
"recreate");
98 LOG(info) <<
"Wrote to tree in " <<
sw.CpuTime() <<
" s";
103 LOG(info) <<
"Start reading from tree ";
106 TFile
flIn(
"test_ctf_trd.root");
111 LOG(info) <<
"Read back from tree in " <<
sw.CpuTime() <<
" s";
125 LOG(info) <<
"Decompressed in " <<
sw.CpuTime() <<
" s";
BOOST_DATA_TEST_CASE(DefaultConstructorNofSamplesIsInvariant, boost::unit_test::data::make(nsamples), nofSamples)
Definition of the Names Generator class.
class for entropy encoding/decoding of TRD 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 encode(VEC &buff, const gsl::span< const TriggerRecord > &trigData, const gsl::span< const Tracklet64 > &trkData, const gsl::span< const Digit > &digData)
entropy-encode data to buffer with CTF
o2::ctf::CTFIOSize decode(const CTF::base &ec, VTRG &trigVec, VTRK &trkVec, VDIG &digVec)
entropy decode data from buffer with CTF
constexpr ANSHeader ANSVersionCompat
constexpr ANSHeader ANSVersion1
constexpr int TIMEBINS
the number of time bins
std::array< ADC_t, constants::TIMEBINS > ArrayADC
constexpr uint32_t formatTrk
std::vector< o2::ctf::BufferType > vec
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"
TFile flIn("test_ctf_trd.root")
std::vector< Digit > digits
std::vector< o2::ctf::ANSHeader > ANSVersions
o2::InteractionRecord ir(0, 0)
TFile flOut("test_ctf_trd.root", "recreate")
std::vector< Tracklet64 > tracklets
std::vector< TriggerRecord > triggersD
TTree ctfTree(std::string(o2::base::NameConf::CTFTREENAME).c_str(), "O2 CTF tree")
std::vector< Tracklet64 > trackletsD
std::vector< Digit > digitsD
BOOST_TEST(triggersD==triggers, boost::test_tools::per_element())
std::unique_ptr< TTree > tree((TTree *) flIn.Get(std::string(o2::base::NameConf::CTFTREENAME).c_str()))