16#ifndef O2_HMPID_CTFCODER_H
17#define O2_HMPID_CTFCODER_H
42 template <typename VEC>
46 template <typename VTRG, typename VDIG>
47 o2::ctf::CTFIOSize
decode(const
CTF::base& ec, VTRG& trigVec, VDIG& digVec);
52 template <typename VEC>
53 o2::ctf::CTFIOSize encode_impl(VEC& buff, const
gsl::span<const
Trigger>& trigData, const
gsl::span<const
Digit>& digData);
54 void appendToTree(TTree&
tree,
CTF& ec);
61template <typename VEC>
67 for (
const auto& trig : trigData) {
69 mTrgRecFilt.push_back(trig);
70 auto digIt = digData.begin() + trig.getFirstEntry();
71 auto& trigC = mTrgRecFilt.back();
72 trigC.setDataRange((
int)mDigDataFilt.size(), trig.getNumberOfObjects());
73 std::copy(digIt, digIt + trig.getNumberOfObjects(), std::back_inserter(mDigDataFilt));
76 return encode_impl(buff, mTrgRecFilt, mDigDataFilt);
78 return encode_impl(buff, trigData, digData);
81template <
typename VEC>
82o2::ctf::CTFIOSize CTFCoder::encode_impl(VEC& buff,
const gsl::span<const Trigger>& trigData,
const gsl::span<const Digit>& digData)
97 CTFHelper helper(trigData, digData);
100 auto szIni =
sizeof(CTFHeader) + helper.getSize() * 2. / 3;
106 ec->setHeader(helper.createHeader());
111#define ENCODEHMP(beg, end, slot, bits) CTF::get(buff.data())->encode(beg, end, int(slot), bits, optField[int(slot)], &buff, mCoders[int(slot)], getMemMarginFactor());
125 finaliseCTFOutput<CTF>(buff);
126 iosize.
rawIn = trigData.size() *
sizeof(
Trigger) + digData.size() *
sizeof(Digit);
131template <
typename VTRG,
typename VDIG>
137 std::vector<int16_t> bcInc;
138 std::vector<int32_t> orbitInc;
139 std::vector<uint16_t> q;
140 std::vector<uint32_t> entriesDig;
141 std::vector<uint8_t> chID, ph,
x,
y;
144#define DECODEHMP(part, slot) ec.decode(part, int(slot), mCoders[int(slot)])
159 trigVec.reserve(header.nTriggers);
160 digVec.reserve(header.nDigits);
162 uint32_t digCount = 0;
165 for (uint32_t itrig = 0; itrig < header.nTriggers; itrig++) {
167 if (orbitInc[itrig]) {
168 ir.
bc = bcInc[itrig];
171 ir.
bc += bcInc[itrig];
178 digCount += entriesDig[itrig];
181 uint32_t firstEntryDig = digVec.size();
182 for (uint32_t
id = 0;
id < entriesDig[itrig];
id++) {
183 chid += chID[digCount];
184 auto& dig = digVec.emplace_back(
chid, ph[digCount],
x[digCount],
y[digCount], q[digCount]);
188 trigVec.emplace_back(
ir -
mBCShift, firstEntryDig, entriesDig[itrig]);
190 assert(digCount == header.nDigits);
Declarations for CTFCoderBase class (support of external dictionaries)
#define ENCODEHMP(beg, end, slot, bits)
#define DECODEHMP(part, slot)
Helper for HMPID CTF creation.
void checkDictVersion(const CTFDictHeader &h) const
ctf::ANSHeader mANSVersion
std::string getPrefix() const
o2::utils::IRFrameSelector mIRFrameSelector
virtual void assignDictVersion(CTFDictHeader &h) const
bool canApplyBCShift(const o2::InteractionRecord &ir, long shift) const
<<======================== Auxiliary classes =======================<<
static auto get(void *head)
cast arbitrary buffer head to container class. Head is supposed to respect the alignment
const H & getHeader() const
void print(const std::string &prefix="", int verbosity=1) const
print itself
static constexpr int getNBlocks()
EncodedBlocks< CTFHeader, N, uint32_t > base
static auto create(void *head, size_t sz)
create container from arbitrary buffer of predefined size (in bytes!!!). Head is supposed to respect ...
Static class with identifiers, bitmasks and names for ALICE detectors.
~CTFCoder() final=default
o2::ctf::CTFIOSize encode(VEC &buff, const gsl::span< const Trigger > &trigData, const gsl::span< const Digit > &digData)
entropy-encode data to buffer with CTF
void createCoders(const std::vector< char > &bufVec, o2::ctf::CTFCoderBase::OpType op) final
CTFCoder(o2::ctf::CTFCoderBase::OpType op)
o2::ctf::CTFIOSize decode(const CTF::base &ec, VTRG &trigVec, VDIG &digVec)
entropy decode data from buffer with CTF
HMPID Trigger declaration.
long check(o2::dataformats::IRFrame fr, size_t bwd=0, size_t fwd=0)
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
Defining DataPointCompositeObject explicitly as copiable.
uint16_t bc
bunch crossing ID of interaction
wrapper for the Entropy-encoded triggers and cells of the TF
std::vector< o2::mch::DsChannelId > chid
o2::InteractionRecord ir(0, 0)
std::unique_ptr< TTree > tree((TTree *) flIn.Get(std::string(o2::base::NameConf::CTFTREENAME).c_str()))