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
24
26
27#include "unistd.h"
28#include <chrono>
29#include <functional>
30#include <memory>
31#include <random>
32#include <string>
33#include <utility>
34#include <vector>
35
38
39namespace dunedaq {
40namespace snbmodules {
41
42template<class ReadoutType>
44{
45public:
46 explicit FileSourceModel(std::string name, std::atomic<bool>& run_marker, double rate_khz)
48 , m_name(name)
49 , m_rate_khz(rate_khz)
50 , m_packet_count{ 0 }
52 , m_raw_data_sender(nullptr)
54 {
55 }
56
57 // void init(const appfwk::DAQModule::CommandData_t& /*args*/) {}
58 void set_sender(const std::string& conn_name);
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<raw_sender_ct> m_raw_data_sender;
108
109 bool m_sender_is_set = false;
110 // using module_conf_t = dunedaq::snbmodules::sourceemulatorconfig::Conf;
111 // module_conf_t m_conf;
112 // using link_conf_t = dunedaq::snbmodules::sourceemulatorconfig::LinkConfiguration;
113 // link_conf_t m_link_conf;
114
115 std::unique_ptr<dunedaq::datahandlinglibs::RateLimiter> m_rate_limiter;
116 std::unique_ptr<dunedaq::datahandlinglibs::BufferedFileReader<ReadoutType>> m_file_reader;
117
119};
120
121} // namespace snbmodules
122} // namespace dunedaq
123
124// Declarations
126
127#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
void set_sender(const std::string &conn_name)
std::shared_ptr< raw_sender_ct > m_raw_data_sender
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 &)
std::vector< std::string > m_file_names
std::vector< std::string >::const_iterator m_file_iterator
void start(const appfwk::DAQModule::CommandData_t &)
std::atomic< bool > run_marker
Global atomic for process lifetime.
The DUNE-DAQ namespace.
SourceID is a generalized representation of the source of a piece of data in the DAQ....
Definition SourceID.hpp:32