12#define BOOST_TEST_MODULE Test CPVCTFIO
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>
29#include <TStopwatch.h>
34namespace boost_data = boost::unit_test::data;
40 std::vector<TriggerRecord> triggers;
46 for (
int irof = 0; irof < 1000; irof++) {
47 ir += 1 + gRandom->Integer(200);
50 int n = 1 + gRandom->Poisson(100);
51 for (
int i =
n;
i--;) {
52 char mult = gRandom->Integer(30);
53 char mod = 2 + gRandom->Integer(3);
54 char exMax = gRandom->Integer(3);
55 float x = 72.3 * 2. * (gRandom->Rndm() - 0.5);
56 float z = 63.3 * 2. * (gRandom->Rndm() - 0.5);
57 float e = 10000. * gRandom->Rndm();
58 clusters.emplace_back(mult, mod, exMax,
x,
z, e);
64 std::vector<o2::ctf::BufferType>
vec;
71 LOG(info) <<
"Compressed in " <<
sw.CpuTime() <<
" s";
77 TFile
flOut(
"test_ctf_cpv.root",
"recreate");
83 LOG(info) <<
"Wrote to tree in " <<
sw.CpuTime() <<
" s";
88 LOG(info) <<
"Start reading from tree ";
91 TFile
flIn(
"test_ctf_cpv.root");
96 LOG(info) <<
"Read back from tree in " <<
sw.CpuTime() <<
" s";
109 LOG(info) <<
"Decompressed in " <<
sw.CpuTime() <<
" s";
113 LOG(info) <<
" BOOST_CHECK triggersD.size() " <<
triggersD.size() <<
" triggers.size() " << triggers.size()
114 <<
" BOOST_CHECK(clustersD.size() " <<
clustersD.size() <<
" clusters.size()) " <<
clusters.size();
116 for (
size_t i = 0;
i < triggers.size();
i++) {
117 const auto& dor = triggers[
i];
119 LOG(
debug) <<
" Orig.TriggerRecord " <<
i <<
" " << dor.getBCData() <<
" " << dor.getFirstEntry() <<
" " << dor.getNumberOfObjects();
120 LOG(
debug) <<
" Deco.TriggerRecord " <<
i <<
" " << ddc.getBCData() <<
" " << ddc.getFirstEntry() <<
" " << ddc.getNumberOfObjects();
123 BOOST_CHECK(dor.getNumberOfObjects() == ddc.getNumberOfObjects());
124 BOOST_CHECK(dor.getFirstEntry() == dor.getFirstEntry());
130 BOOST_CHECK(cor.getMultiplicity() == cdc.getMultiplicity());
132 if (cor.getEnergy() < 100.) {
133 BOOST_CHECK(TMath::Abs(cor.getEnergy() - cdc.getEnergy()) < 1.);
135 float eTr = cor.getEnergy();
138 float xCor, zCor, xCdc, zCdc;
139 cor.getLocalPosition(xCor, zCor);
140 cdc.getLocalPosition(xCdc, zCdc);
class for entropy encoding/decoding of CPV data
uint64_t exp(uint64_t base, uint8_t exp) noexcept
BOOST_DATA_TEST_CASE(DefaultConstructorNofSamplesIsInvariant, boost::unit_test::data::make(nsamples), nofSamples)
Definition of the Names Generator class.
static constexpr std::string_view CTFTREENAME
o2::ctf::CTFIOSize decode(const CTF::base &ec, VTRG &trigVec, VCLUSTER &cluVec)
entropy decode data from buffer with CTF
o2::ctf::CTFIOSize encode(VEC &buff, const gsl::span< const TriggerRecord > &trigData, const gsl::span< const Cluster > &cluData)
entropy-encode data to buffer with CTF
Contains CPV cluster parameters.
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
GLdouble GLdouble GLdouble z
constexpr ANSHeader ANSVersionCompat
constexpr ANSHeader ANSVersion1
std::vector< o2::ctf::BufferType > vec
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"
TFile flIn("test_ctf_cpv.root")
std::vector< o2::ctf::ANSHeader > ANSVersions
o2::InteractionRecord ir(0, 0)
std::vector< TriggerRecord > triggersD
TTree ctfTree(std::string(o2::base::NameConf::CTFTREENAME).c_str(), "O2 CTF tree")
std::vector< Cluster > clusters
std::vector< Cluster > clustersD
std::unique_ptr< TTree > tree((TTree *) flIn.Get(std::string(o2::base::NameConf::CTFTREENAME).c_str()))
TFile flOut("test_ctf_cpv.root", "recreate")