Project
Loading...
Searching...
No Matches
SubTimeFrameFileReader.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
12// Adapthed with minimal changes from Gvozden Nescovic code to read sTFs files created by DataDistribution
13
14#ifndef ALICEO2_SUBTIMEFRAME_FILE_READER_RAWDD_H_
15#define ALICEO2_SUBTIMEFRAME_FILE_READER_RAWDD_H_
16
18#include <Headers/DataHeader.h>
19#include <Headers/STFHeader.h>
21#include <Headers/Stack.h>
22#include <fairmq/Parts.h>
23#include <fairmq/Device.h>
26// RSREM
27// #include <boost/filesystem.hpp>
28// #include <boost/iostreams/device/mapped_file.hpp>
29#include <fstream>
30#include <vector>
31#include <unordered_map>
32
33namespace o2f = o2::framework;
34
35namespace o2
36{
37
38namespace rawdd
39{
40
44using MessagesPerRoute = std::unordered_map<std::string, std::unique_ptr<fair::mq::Parts>>;
45
47{
48 public:
49
51 SubTimeFrameFileReader(const std::string& pFileName, o2::detectors::DetID::mask_t detMask, int verb, bool sup0xccdb, bool repaireHeaders, bool rejectDistSTF);
53
55 std::unique_ptr<MessagesPerRoute> read(fair::mq::Device* device, const std::vector<o2f::OutputRoute>& outputRoutes, const std::string& rawChannel, size_t slice);
56
57 private:
58 std::unordered_map<o2::header::DataOrigin, bool> mDetOrigMap;
59
60 std::unique_ptr<BinFileOp> mFile;
61 // RSREM
62 // std::string mFileName;
63 // boost::iostreams::mapped_file_source mFileMap;
64 // std::uint64_t mFileMapOffset = 0;
65 // std::uint64_t mFileSize = 0;
66
67 int mVerbosity = 0;
68 bool mSup0xccdb = true;
69 bool mRepaireHeaders = true;
70 bool mRejectDistSTF = true;
71
72 const std::string describeHeader(const o2::header::DataHeader& hd, bool full = false) const;
73
74 // helper to make sure written chunks are buffered, only allow pointers
75 template <typename pointer, typename = std::enable_if_t<std::is_pointer<pointer>::value>>
76 inline bool read_advance(pointer pPtr, std::uint64_t pLen)
77 {
78 if (!mFile) {
79 return false;
80 }
81 return mFile->read_advance(pPtr, pLen);
82 }
83
84 // return the pointer
85 // inline unsigned char* peek() { mFile->peek(); }
86
87 // inline bool ignore_nbytes(const std::size_t pLen) { mFle->ignore_nbytes(pLen); }
88
89 std::size_t getHeaderStackSize();
90 o2::header::Stack getHeaderStack(std::size_t& pOrigsize);
91
92 // flags for upgrading DataHeader versions
93 static std::uint64_t sStfId; // TODO: add id to files metadata
94};
95} // namespace rawdd
96} // namespace o2
97
98#endif /* ALICEO2_SUBTIMEFRAME_FILE_READER_RAWDD_H_ */
std::unique_ptr< MessagesPerRoute > read(fair::mq::Device *device, const std::vector< o2f::OutputRoute > &outputRoutes, const std::string &rawChannel, size_t slice)
Read a single TF from the file.
GLenum void ** pointer
Definition glcorearb.h:805
Defining ITS Vertex explicitly as messageable.
Definition Cartesian.h:288
std::unordered_map< std::string, std::unique_ptr< fair::mq::Parts > > MessagesPerRoute
SubTimeFrameFileReader.
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
the main header struct
Definition DataHeader.h:620
a move-only header stack with serialized headers This is the flat buffer where all the headers in a m...
Definition Stack.h:33