@@ -185,3 +185,29 @@ void CTFCoder::createCoders(const std::string& dictPath, o2::ctf::CTFCoderBase::
185185 MAKECODER (cc.pattMap , CTF::BLCpattMap);
186186 // clang-format on
187187}
188+
189+ // /________________________________
190+ size_t CTFCoder::estimateCompressedSize (const CompressedInfos& cc)
191+ {
192+ size_t sz = 0 ;
193+ // clang-format off
194+ // RS FIXME this is very crude estimate, instead, an empirical values should be used
195+ #define VTP (vec ) typename std::remove_reference<decltype (vec)>::type::value_type
196+ #define ESTSIZE (vec, slot ) mCoders [int (slot)] ? \
197+ rans::calculateMaxBufferSize (vec.size (), reinterpret_cast <const o2::rans::LiteralEncoder64<VTP (vec)>*>(mCoders [int (slot)].get ())->getAlphabetRangeBits (), sizeof (VTP (vec)) ) : vec.size ()*sizeof (VTP (vec))
198+
199+ sz += ESTSIZE (cc.bcIncROF , CTF::BLCbcIncROF);
200+ sz += ESTSIZE (cc.orbitIncROF , CTF::BLCorbitIncROF);
201+ sz += ESTSIZE (cc.ndigROF , CTF::BLCndigROF);
202+ sz += ESTSIZE (cc.ndiaROF , CTF::BLCndiaROF);
203+ sz += ESTSIZE (cc.timeFrameInc , CTF::BLCtimeFrameInc);
204+ sz += ESTSIZE (cc.timeTDCInc , CTF::BLCtimeTDCInc);
205+ sz += ESTSIZE (cc.stripID , CTF::BLCstripID);
206+ sz += ESTSIZE (cc.chanInStrip , CTF::BLCchanInStrip);
207+ sz += ESTSIZE (cc.tot , CTF::BLCtot);
208+ sz += ESTSIZE (cc.pattMap , CTF::BLCpattMap);
209+ // clang-format on
210+
211+ LOG (INFO) << " Estimated output size is " << sz << " bytes" ;
212+ return sz;
213+ }
0 commit comments