Project
Loading...
Searching...
No Matches
CMVContainer.h
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
15
16#ifndef ALICEO2_TPC_CMVCONTAINER_H_
17#define ALICEO2_TPC_CMVCONTAINER_H_
18
19#include <string>
20#include <memory>
21#include <vector>
22#include <cstdint>
23
24#include "TTree.h"
25#include "TPCBase/CRU.h"
26#include "DataFormatsTPC/CMV.h"
27
28namespace o2::tpc
29{
30
31struct CMVPerTF; // forward declaration
32struct CMVPerTFCompressed; // forward declaration
33
36 static constexpr uint8_t kNone = 0x00;
37 static constexpr uint8_t kSparse = 0x01;
38 static constexpr uint8_t kDelta = 0x02;
39 static constexpr uint8_t kZigzag = 0x04;
40 static constexpr uint8_t kVarint = 0x08;
41 static constexpr uint8_t kHuffman = 0x10;
42};
43
61 uint32_t firstOrbit{0};
62 uint16_t firstBC{0};
63 uint8_t mFlags{0};
64
65 std::vector<uint8_t> mData;
66
68 void decompress(CMVPerTF* cmv) const;
69
71 std::unique_ptr<TTree> toTTree() const;
72
73 private:
76 static std::vector<std::pair<int, uint32_t>> decodeSparsePositions(const uint8_t*& ptr, const uint8_t* end);
77
80 static std::vector<uint32_t> decodeValueStream(const uint8_t*& ptr, const uint8_t* end, uint32_t N, uint8_t flags);
81
83 static void decodeSparseValues(const std::vector<uint32_t>& symbols,
84 const std::vector<std::pair<int, uint32_t>>& positions,
85 uint8_t flags, CMVPerTF* cmv);
86
88 static void decodeDenseValues(const std::vector<uint32_t>& symbols, uint8_t flags, CMVPerTF* cmv);
89
90 public:
91 ClassDefNV(CMVPerTFCompressed, 1)
92};
93
96struct CMVPerTF {
97 uint32_t firstOrbit{0};
98 uint16_t firstBC{0};
99
100 // Raw 16-bit CMV values, flat array indexed as [cru * NTimeBinsPerTF + timeBin]
101 uint16_t mDataPerTF[CRU::MaxCRU * cmv::NTimeBinsPerTF]{};
102
104 uint16_t getCMV(const int cru, const int timeBin) const;
105
107 float getCMVFloat(const int cru, const int timeBin) const;
108
110 void zeroSmallValues(float threshold = 1.0f);
111
113 void roundToIntegers(uint16_t threshold);
114
117 void trimGaussianPrecision(float mean, float sigma);
118
121 CMVPerTFCompressed compress(uint8_t flags) const;
122
124 std::unique_ptr<TTree> toTTree() const;
125
127 static void writeToFile(const std::string& filename, const std::unique_ptr<TTree>& tree);
128
129 private:
130 static int32_t cmvToSigned(uint16_t raw);
131 static uint16_t quantizeBelowThreshold(uint16_t raw, float quantizationMean, float quantizationSigma);
132 static uint32_t zigzagEncode(int32_t value);
133 static void encodeVarintInto(uint32_t value, std::vector<uint8_t>& out);
134
135 public:
136 ClassDefNV(CMVPerTF, 1)
137};
138
139} // namespace o2::tpc
140
141#endif // ALICEO2_TPC_CMVCONTAINER_H_
Common mode values data format definition.
TBranch * ptr
@ MaxCRU
Definition CRU.h:31
GLuint GLuint end
Definition glcorearb.h:469
GLsizei const GLfloat * value
Definition glcorearb.h:819
GLbitfield flags
Definition glcorearb.h:1570
Global TPC definitions and constants.
Definition SimTraits.h:168
std::string filename()
Bitmask flags describing which encoding stages are applied in CMVPerTFCompressed.
static constexpr uint8_t kDelta
Delta coding between consecutive values (dense only)
static constexpr uint8_t kVarint
Varint compression of the value stream.
static constexpr uint8_t kHuffman
Canonical Huffman compression of the value stream.
static constexpr uint8_t kNone
No compression — raw uint16 values stored flat.
static constexpr uint8_t kSparse
Non-zero positions stored sparsely (varint-encoded deltas)
static constexpr uint8_t kZigzag
Zigzag encoding of deltas or signed values.
std::unique_ptr< TTree > toTTree() const
Serialise into a TTree; each Fill() call appends one entry (one TF)
void decompress(CMVPerTF *cmv) const
Restore a CMVPerTF from this compressed object into *cmv (must not be null)
std::vector< uint8_t > mData
Encoded payload.
uint8_t mFlags
Bitmask of CMVEncoding values.
uint16_t firstBC
First bunch crossing of this TF.
uint32_t firstOrbit
First orbit of this TF.
uint32_t firstOrbit
First orbit of this TF, from heartbeatOrbit of the first CMV packet.
void zeroSmallValues(float threshold=1.0f)
Zero out raw CMV values whose float magnitude is below threshold.
CMVPerTFCompressed compress(uint8_t flags) const
static void writeToFile(const std::string &filename, const std::unique_ptr< TTree > &tree)
Write the TTree to a ROOT file.
uint16_t mDataPerTF[CRU::MaxCRU *cmv::NTimeBinsPerTF]
void roundToIntegers(uint16_t threshold)
Round values to the nearest integer ADC for all values whose rounded magnitude is <= threshold.
void trimGaussianPrecision(float mean, float sigma)
std::unique_ptr< TTree > toTTree() const
Serialise into a TTree; each Fill() call appends one entry (one TF)
uint16_t getCMV(const int cru, const int timeBin) const
Return the raw 16-bit CMV value for a given CRU and timebin within this TF.
float getCMVFloat(const int cru, const int timeBin) const
Return the float CMV value for a given CRU and timebin within this TF.
uint16_t firstBC
First bunch crossing of this TF, from heartbeatBC of the first CMV packet.
std::unique_ptr< TTree > tree((TTree *) flIn.Get(std::string(o2::base::NameConf::CTFTREENAME).c_str()))