12#ifndef DETECTOR_BASE_RAWFILEREADER_H
13#define DETECTOR_BASE_RAWFILEREADER_H
20#include <unordered_map>
64 using LinkSpec_t = uint64_t;
69 static constexpr std::string_view
CardNames[] = {
"CRU",
"RORC"};
89 static constexpr std::string_view
ErrNames[] = {
91 "Wrong RDH.packetCounter increment",
92 "Wrong RDH.pageCnt increment",
93 "RDH.stop set of 1st HBF page",
94 "New HBF starts w/o closing old one",
95 "Data does not start with TF/HBF",
96 "Number of HBFs per TF not as expected",
97 "Number of TFs is less than expected",
98 "Wrong HBF orbit increment",
99 "TF does not start by new superpage",
100 "No SOX found on 1st page",
101 "Mismatch between flagged and calculated new TF start"
134 using OrigDescCard = std::tuple<o2::header::DataOrigin, o2::header::DataDescription, ReadoutCardType>;
135 using InputsMap = std::map<OrigDescCard, std::vector<std::string>>;
169 void print(
const std::string& pref =
"")
const;
197 template <
typename H>
216 void print(
bool verbose =
false,
const std::string& pref =
"")
const;
225 RawFileReader(
const std::string& config =
"",
int verbosity = 0,
size_t buffsize = 50 * 1024UL,
const std::string& onlyDet = {});
232 bool addFile(
const std::string& sname) {
return addFile(sname, mDefDataOrigin, mDefDataDescription, mDefCardType); }
251 void printStat(
bool verbose =
false)
const;
288 static InputsMap parseInput(
const std::string& confUri,
const std::string& onlyDet = {},
bool verbose =
false);
293 int getLinkLocalID(
const RDHAny& rdh,
int fileID);
294 bool preprocessFile(
int ifl);
303 std::vector<std::string> mFileNames;
304 std::vector<FILE*> mFiles;
305 std::vector<std::unique_ptr<char[]>> mFileBuffers;
306 std::vector<OrigDescCard> mDataSpecs;
307 bool mInitDone =
false;
309 std::unordered_map<LinkSpec_t, int> mLinkEntries;
310 std::vector<LinkData> mLinksData;
311 std::vector<int> mOrderedIDs;
312 uint32_t mMaxTFToRead = 0xffffffff;
313 uint32_t mNTimeFrames = 0;
314 uint32_t mNextTF2Read = 0;
315 uint32_t mOrbitMin = 0xffffffff;
316 uint32_t mOrbitMax = 0;
317 size_t mBufferSize = 5 * 1024UL;
318 int mNominalSPageSize = 0x1 << 20;
319 int mCurrentFileID = 0;
320 long int mPosInFile = 0;
321 bool mMultiLinkFile =
false;
322 bool mCacheData =
false;
323 bool mStopProcessing =
false;
324 uint32_t mCheckErrors = 0;
326 bool mPreferCalculatedTFStart =
false;
Static class with identifiers, bitmasks and names for ALICE detectors.
const std::vector< int > & getLinksOrder() const
void setCacheData(bool v)
uint32_t getOrbitMax() const
void printStat(bool verbose=false) const
uint32_t getNextTFToRead() const
void setVerbosity(int v=1)
static InputsMap parseInput(const std::string &confUri, const std::string &onlyDet={}, bool verbose=false)
ReadoutCardType getDefaultReadoutCardType() const
std::tuple< o2::header::DataOrigin, o2::header::DataDescription, ReadoutCardType > OrigDescCard
void setNextTFToRead(uint32_t tf)
void setDefaultDataDescription(const std::string &desc)
static std::string nochk_expl(ErrTypes e)
void setTFAutodetect(FirstTFDetection v)
FirstTFDetection getTFAutodetect() const
void setBufferSize(size_t s)
void setDefaultDataOrigin(const std::string &orig)
std::map< OrigDescCard, std::vector< std::string > > InputsMap
void setNominalSPageSize(int n=0x1<< 20)
uint32_t getMaxTFToRead() const
void setDefaultDataDescription(const o2::header::DataDescription d)
bool addFile(const std::string &sname)
static constexpr std::string_view CardNames[]
LinkSubSpec_t getLinkSubSpec(int i) const
void setDefaultDataOrigin(const o2::header::DataOrigin o)
uint32_t getCheckErrors() const
void loadFromInputsMap(const InputsMap &inp)
int getNominalSPageSize() const
void setMaxTFToRead(uint32_t n)
bool isProcessingStopped() const
LinkSpec_t getLinkSpec(int i) const
size_t getBufferSize() const
static constexpr bool ErrCheckDefaults[]
static constexpr std::string_view ErrNamesShort[]
uint32_t getNTimeFrames() const
static o2::header::DataDescription getDataDescription(const std::string &ors)
bool getCacheData() const
static std::string nochk_opt(ErrTypes e)
void setCheckErrors(uint32_t m=0xffffffff)
const LinkData & getLink(int i) const
LinkData & getLink(int i)
void setIROfSOX(const o2::InteractionRecord &ir)
@ ErrWrongPacketCounterIncrement
@ ErrWrongPageCounterIncrement
void setDefaultReadoutCardType(ReadoutCardType t=CRU)
o2::header::DataDescription getDefaultDataSpecification() const
static o2::header::DataOrigin getDataOrigin(const std::string &ors)
const LinkData & getLinkWithSpec(LinkSpec_t s) const
void imposeFirstTF(uint32_t orbit)
static constexpr std::string_view ErrNames[]
uint32_t getOrbitMin() const
o2::header::DataOrigin getDefaultDataOrigin() const
bool addFile(const std::string &sname, o2::header::DataOrigin origin, o2::header::DataDescription desc, ReadoutCardType t=CRU)
void setPreferCalculatedTFStart(bool v)
constexpr o2::header::DataDescription gDataDescriptionInvalid
constexpr o2::header::DataOrigin gDataOriginFLP
constexpr o2::header::DataOrigin gDataOriginInvalid
constexpr o2::header::DataDescription gDataDescriptionRawData
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
std::unique_ptr< GPUReconstructionTimeframe > tf
bool testFlag(uint8_t fl) const
std::unique_ptr< char[]> dataCache
different flags
void setFlag(uint8_t fl, bool v=true)
LinkBlock()=default
optional cache for fast access
uint16_t fileID
ir starting the block
LinkBlock(int fid, size_t offs)
bool preprocessCRUPage(const RDHAny &rdh, bool newSPage)
std::string describe() const
LinkSubSpec_t subspec
Link subspec augmented by its origin.
size_t readNextTF(char *buff)
o2::header::DataOrigin origin
size_t readNextSuperPage(char *buff, const PartStat *pstat=nullptr)
size_t getLargestSuperPage() const
uint32_t nTimeFrames
subspec according to DataDistribution
o2::header::DataDescription description
o2::InteractionRecord irOfSOX
RDH with the running info of the last RDH seen.
LinkData(const H &rdh, RawFileReader *r)
std::vector< LinkBlock > blocks
size_t getLargestTF() const
size_t getNextTFSuperPagesStat(std::vector< PartStat > &parts) const
LinkData()=default
next block which should be read
size_t readNextHBF(char *buff)
std::vector< std::pair< int, uint32_t > > tfStartBlock
bool continuousRO
CRU vs RORC detector.
size_t getNextHBFSize() const
bool rewindToTF(uint32_t tf)
size_t getNextTFSize() const
std::string rawChannelConfig
std::string metricChannel
o2::InteractionRecord ir(0, 0)