DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
datahandlinglibs
include
datahandlinglibs
utils
FileSourceBuffer.hpp
Go to the documentation of this file.
1
8
#ifndef DATAHANDLINGLIBS_INCLUDE_DATAHANDLINGLIBS_UTILS_FILESOURCEBUFFER_HPP_
9
#define DATAHANDLINGLIBS_INCLUDE_DATAHANDLINGLIBS_UTILS_FILESOURCEBUFFER_HPP_
10
11
#include "
datahandlinglibs/DataHandlingIssues.hpp
"
12
#include "
datahandlinglibs/ReadoutLogging.hpp
"
13
14
#include "
logging/Logging.hpp
"
15
16
#include <fstream>
17
#include <limits>
18
#include <string>
19
#include <vector>
20
21
using
dunedaq::datahandlinglibs::logging::TLVL_BOOKKEEPING
;
22
23
namespace
dunedaq
{
24
namespace
datahandlinglibs
{
25
26
class
FileSourceBuffer
27
{
28
public
:
29
explicit
FileSourceBuffer
(
int
input_limit,
int
chunk_size = 0)
30
:
m_input_limit
(input_limit)
31
,
m_chunk_size
(chunk_size)
32
,
m_element_count
(0)
33
,
m_source_filename
(
""
)
34
{}
35
36
FileSourceBuffer
(
const
FileSourceBuffer
&) =
delete
;
37
FileSourceBuffer
&
operator=
(
const
FileSourceBuffer
&) =
delete
;
38
FileSourceBuffer
(
FileSourceBuffer
&&) =
delete
;
39
FileSourceBuffer
&
operator=
(
FileSourceBuffer
&&) =
delete
;
40
41
void
read
(
const
std::string& sourcefile)
42
{
43
m_source_filename
= sourcefile;
44
try
{
45
46
// Open file
47
m_rawdata_ifs
.open(
m_source_filename
, std::ios::in | std::ios::binary);
48
if
(!
m_rawdata_ifs
) {
49
throw
CannotOpenFile(
ERS_HERE
,
m_source_filename
);
50
}
51
52
// Check file size
53
m_rawdata_ifs
.ignore(std::numeric_limits<std::streamsize>::max());
54
std::streamsize filesize =
m_rawdata_ifs
.gcount();
55
if
(filesize >
m_input_limit
) {
// bigger than configured limit
56
std::ostringstream oss;
57
oss <<
"File size limit exceeded, "
58
<<
"filesize is "
<< filesize <<
", "
59
<<
"configured limit is "
<<
m_input_limit
<<
", "
60
<<
"filename is "
<<
m_source_filename
;
61
ers::warning
(
GenericConfigurationError
(
ERS_HERE
, oss.str()));
62
}
63
64
// Check for exact match
65
if
(
m_chunk_size
> 0) {
66
int
remainder = filesize %
m_chunk_size
;
67
if
(remainder > 0) {
68
ers::info
(FileHasExtraData(
ERS_HERE
, remainder, filesize,
m_chunk_size
,
m_source_filename
));
69
}
70
// Set usable element count
71
m_element_count
= filesize /
m_chunk_size
;
72
TLOG_DEBUG
(
TLVL_BOOKKEEPING
) <<
"Available elements: "
<< std::to_string(
m_element_count
);
73
}
74
75
// Read file into input buffer
76
m_rawdata_ifs
.seekg(0, std::ios::beg);
77
m_input_buffer
.reserve(filesize);
78
m_input_buffer
.insert(
79
m_input_buffer
.begin(), std::istreambuf_iterator<char>(
m_rawdata_ifs
), std::istreambuf_iterator<char>());
80
TLOG_DEBUG
(
TLVL_BOOKKEEPING
) <<
"Available bytes "
<< std::to_string(
m_input_buffer
.size());
81
82
}
catch
(
const
std::exception& ex) {
83
throw
GenericConfigurationError
(
ERS_HERE
,
"Cannot read file: "
+
m_source_filename
, ex.what());
84
}
85
}
86
87
const
int
&
num_elements
() {
return
std::ref(
m_element_count
); }
88
89
std::vector<std::uint8_t>&
get
()
// NOLINT(build/unsigned)
90
{
91
return
std::ref(
m_input_buffer
);
92
}
93
94
private
:
95
// Configuration
96
int
m_input_limit
;
97
int
m_chunk_size
;
98
int
m_element_count
;
99
std::string
m_source_filename
;
100
101
// Internals
102
std::ifstream
m_rawdata_ifs
;
103
std::vector<std::uint8_t>
m_input_buffer
;
// NOLINT(build/unsigned)
104
};
105
106
}
// namespace datahandlinglibs
107
}
// namespace dunedaq
108
109
#endif
// DATAHANDLINGLIBS_INCLUDE_DATAHANDLINGLIBS_UTILS_FILESOURCEBUFFER_HPP_
DataHandlingIssues.hpp
TLVL_BOOKKEEPING
@ TLVL_BOOKKEEPING
Definition
IfaceWrapper.cpp:53
ERS_HERE
#define ERS_HERE
Definition
LocalContext.hpp:141
ReadoutLogging.hpp
dunedaq::datahandlinglibs::FileSourceBuffer::m_rawdata_ifs
std::ifstream m_rawdata_ifs
Definition
FileSourceBuffer.hpp:102
dunedaq::datahandlinglibs::FileSourceBuffer::FileSourceBuffer
FileSourceBuffer(FileSourceBuffer &&)=delete
FileSourceBuffer is not move-constructible.
dunedaq::datahandlinglibs::FileSourceBuffer::read
void read(const std::string &sourcefile)
Definition
FileSourceBuffer.hpp:41
dunedaq::datahandlinglibs::FileSourceBuffer::FileSourceBuffer
FileSourceBuffer(int input_limit, int chunk_size=0)
Definition
FileSourceBuffer.hpp:29
dunedaq::datahandlinglibs::FileSourceBuffer::num_elements
const int & num_elements()
Definition
FileSourceBuffer.hpp:87
dunedaq::datahandlinglibs::FileSourceBuffer::m_chunk_size
int m_chunk_size
Definition
FileSourceBuffer.hpp:97
dunedaq::datahandlinglibs::FileSourceBuffer::m_input_buffer
std::vector< std::uint8_t > m_input_buffer
Definition
FileSourceBuffer.hpp:103
dunedaq::datahandlinglibs::FileSourceBuffer::m_element_count
int m_element_count
Definition
FileSourceBuffer.hpp:98
dunedaq::datahandlinglibs::FileSourceBuffer::operator=
FileSourceBuffer & operator=(FileSourceBuffer &&)=delete
FileSourceBuffer is not move-assignable.
dunedaq::datahandlinglibs::FileSourceBuffer::FileSourceBuffer
FileSourceBuffer(const FileSourceBuffer &)=delete
FileSourceBuffer is not copy-constructible.
dunedaq::datahandlinglibs::FileSourceBuffer::get
std::vector< std::uint8_t > & get()
Definition
FileSourceBuffer.hpp:89
dunedaq::datahandlinglibs::FileSourceBuffer::operator=
FileSourceBuffer & operator=(const FileSourceBuffer &)=delete
FileSourceBuffer is not copy-assginable.
dunedaq::datahandlinglibs::FileSourceBuffer::m_input_limit
int m_input_limit
Definition
FileSourceBuffer.hpp:96
dunedaq::datahandlinglibs::FileSourceBuffer::m_source_filename
std::string m_source_filename
Definition
FileSourceBuffer.hpp:99
Logging.hpp
TLOG_DEBUG
#define TLOG_DEBUG(lvl,...)
Definition
Logging.hpp:112
dunedaq::datahandlinglibs::logging::TLVL_BOOKKEEPING
@ TLVL_BOOKKEEPING
Definition
ReadoutLogging.hpp:26
dunedaq::datahandlinglibs
Definition
DataHandlingConcept.hpp:16
dunedaq
Including Qt Headers.
Definition
module.cpp:16
dunedaq::GenericConfigurationError
SourceID[" << sourceid << "] Command daqdataformats::SourceID Readout Initialization std::string initerror Configuration std::string conferror GenericConfigurationError
Definition
DataHandlingIssues.hpp:51
ers::warning
void warning(const Issue &issue)
Definition
ers.hpp:126
ers::info
void info(const Issue &issue)
Definition
ers.hpp:106
Generated on
for DUNE-DAQ by
1.17.0