DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
FileSourceModel.hpp
Go to the documentation of this file.
1
8#ifndef snbmodules_INCLUDE_snbmodules_MODELS_FileSourceModel_HPP_
9#define snbmodules_INCLUDE_snbmodules_MODELS_FileSourceModel_HPP_
10
12#include "iomanager/Sender.hpp"
13
14#include "logging/Logging.hpp"
15
17#include "confmodel/GeoId.hpp"
18
25
27
28#include "unistd.h"
29#include <chrono>
30#include <functional>
31#include <memory>
32#include <random>
33#include <string>
34#include <utility>
35#include <vector>
36
39
40namespace dunedaq {
41namespace snbmodules {
42
43template<class ReadoutType>
45{
46public:
47 explicit FileSourceModel(std::string name, std::atomic<bool>& run_marker, double rate_khz)
49 , m_name(name)
50 , m_rate_khz(rate_khz)
51 , m_packet_count{ 0 }
54 {
55 }
56
57 // void init(const appfwk::DAQModule::CommandData_t& /*args*/) {}
59
60 void conf(const confmodel::DetectorStream* stream_conf, const appmodel::SNBFileSourceParameters* file_params);
61 void scrap(const appfwk::DAQModule::CommandData_t& /*args*/)
62 {
63 if (m_file_reader != nullptr) {
64 m_file_reader->close();
65 }
66 m_file_reader.reset();
67 m_is_configured = false;
68 }
69 bool is_configured() override { return m_is_configured; }
70
71 void start(const appfwk::DAQModule::CommandData_t& /*args*/);
72 void stop(const appfwk::DAQModule::CommandData_t& /*args*/);
73 // void get_info(opmonlib::InfoCollector& ci, int /*level*/);
74
75protected:
76 // The data emulator function that the worker thread runs
77 void run_produce();
78 virtual void generate_opmon_data() override;
79
80 void open_next_file();
81
82private:
83 // Constuctor params
84 std::atomic<bool>& m_run_marker;
85
86 // CONFIGURATION
87 std::string m_name;
88 bool m_is_configured = false;
89 double m_rate_khz;
90
91 std::vector<std::string> m_file_names;
92 std::vector<std::string>::const_iterator m_file_iterator;
95
97
98 // STATS
99 std::atomic<int> m_packet_count{ 0 };
100 std::atomic<int> m_packet_count_tot{ 0 };
101
102 // sourceemulatorconfig::Conf m_cfg;
103
104 // RAW SENDER
105 std::chrono::milliseconds m_raw_sender_timeout_ms;
107 std::shared_ptr<std::function<void(ReadoutType&&)>> m_raw_data_callback{ nullptr };
108 // using module_conf_t = dunedaq::snbmodules::sourceemulatorconfig::Conf;
109 // module_conf_t m_conf;
110 // using link_conf_t = dunedaq::snbmodules::sourceemulatorconfig::LinkConfiguration;
111 // link_conf_t m_link_conf;
112
113 std::unique_ptr<dunedaq::datahandlinglibs::RateLimiter> m_rate_limiter;
114 std::unique_ptr<dunedaq::datahandlinglibs::BufferedFileReader<ReadoutType>> m_file_reader;
115
117};
118
119} // namespace snbmodules
120} // namespace dunedaq
121
122// Declarations
124
125#endif // snbmodules_INCLUDE_snbmodules_MODELS_FileSourceModel_HPP_
void stop(const appfwk::DAQModule::CommandData_t &)
FileSourceModel(std::string name, std::atomic< bool > &run_marker, double rate_khz)
std::unique_ptr< dunedaq::datahandlinglibs::RateLimiter > m_rate_limiter
std::chrono::milliseconds m_raw_sender_timeout_ms
virtual void generate_opmon_data() override
void conf(const confmodel::DetectorStream *stream_conf, const appmodel::SNBFileSourceParameters *file_params)
std::unique_ptr< dunedaq::datahandlinglibs::BufferedFileReader< ReadoutType > > m_file_reader
utilities::ReusableThread m_producer_thread
void scrap(const appfwk::DAQModule::CommandData_t &)
void set_sender(const appmodel::DataMoveCallbackConf *sink)
std::vector< std::string > m_file_names
std::shared_ptr< std::function< void(ReadoutType &&)> > m_raw_data_callback
std::vector< std::string >::const_iterator m_file_iterator
const appmodel::DataMoveCallbackConf * m_raw_sender_conf
void start(const appfwk::DAQModule::CommandData_t &)
std::atomic< bool > run_marker
Global atomic for process lifetime.
Including Qt Headers.
SourceID is a generalized representation of the source of a piece of data in the DAQ....
Definition SourceID.hpp:32