DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
CreateSource.hpp
Go to the documentation of this file.
1
8#ifndef ASIOLIBS_SRC_CREATESOURCE_HPP_
9#define ASIOLIBS_SRC_CREATESOURCE_HPP_
10
11#include "SourceConcept.hpp"
12#include "SourceModel.hpp"
14
19
20#include <memory>
21#include <string>
22
23namespace dunedaq {
24
26DUNE_DAQ_TYPESTRING(dunedaq::fdreadoutlibs::types::TDEFrameTypeAdapter, "TDEFrame")
27DUNE_DAQ_TYPESTRING(dunedaq::fdreadoutlibs::types::CRTBernTypeAdapter, "CRTBernFrame")
28DUNE_DAQ_TYPESTRING(dunedaq::fdreadoutlibs::types::CRTGrenobleTypeAdapter, "CRTGrenobleFrame")
29
30namespace asiolibs {
31
32std::shared_ptr<SourceConcept>
33createSourceModel(const std::string& conn_uid, bool callback_mode)
34{
35 auto datatypes = dunedaq::iomanager::IOManager::get()->get_datatypes(conn_uid);
36 if (datatypes.size() != 1) {
37 ers::error(dunedaq::datahandlinglibs::GenericConfigurationError(ERS_HERE,
38 "Multiple output data types specified! Expected only a single type!"));
39 }
40 std::string raw_dt{ *datatypes.begin() };
41 TLOG() << "Choosing specializations for SourceModel for output connection "
42 << " [uid:" << conn_uid << " , data_type:" << raw_dt << ']';
43
44 if (raw_dt.find("WIBEthFrame") != std::string::npos) {
45 // Create Model
46 auto source_model = std::make_shared<SourceModel<fdreadoutlibs::types::DUNEWIBEthTypeAdapter>>();
47
48 // For callback acquisition later (lazy)
49 source_model->set_sink_name(conn_uid);
50
51 // Setup sink (acquire pointer from QueueRegistry)
52 source_model->set_sink(conn_uid, callback_mode);
53
54 // Get parser and sink
55 //auto& parser = source_model->get_parser();
56 //auto& sink = source_model->get_sink();
57 //auto& error_sink = source_model->get_error_sink();
58
59 // Modify parser as needed...
60 //parser.process_chunk_func = parsers::fixsizedChunkInto<fdreadoutlibs::types::ProtoWIBSuperChunkTypeAdapter>(sink);
61 //if (error_sink != nullptr) {
62 // parser.process_chunk_with_error_func = parsers::errorChunkIntoSink(error_sink);
63 //}
64 // parser.process_block_func = ...
65
66 // Return with setup model
67 return source_model;
68
69 } else if (raw_dt.find("TDEFrame") != std::string::npos) {
70 // WIB2 specific char arrays
71 auto source_model = std::make_shared<SourceModel<fdreadoutlibs::types::TDEFrameTypeAdapter>>();
72 source_model->set_sink_name(conn_uid);
73 source_model->set_sink(conn_uid, callback_mode);
74 //auto& parser = source_model->get_parser();
75 //parser.process_chunk_func = parsers::fixsizedChunkInto<fdreadoutlibs::types::DUNEWIBSuperChunkTypeAdapter>(sink);
76 return source_model;
77 } else if (raw_dt.find("CRTBernFrame") != std::string::npos) {
78 auto source_model = std::make_shared<SourceModel<fdreadoutlibs::types::CRTBernTypeAdapter>>();
79 source_model->set_sink_name(conn_uid);
80 source_model->set_sink(conn_uid, callback_mode);
81 return source_model;
82 } else if (raw_dt.find("CRTGrenobleFrame") != std::string::npos) {
83 auto source_model = std::make_shared<SourceModel<fdreadoutlibs::types::CRTGrenobleTypeAdapter>>();
84 source_model->set_sink_name(conn_uid);
85 source_model->set_sink(conn_uid, callback_mode);
86 return source_model;
87 }
88
89 return nullptr;
90}
91
92} // namespace asiolibs
93} // namespace dunedaq
94
95#endif // ASIOLIBS_SRC_CREATESOURCE_HPP_
#define ERS_HERE
#define DUNE_DAQ_TYPESTRING(Type, typestring)
static std::shared_ptr< IOManager > get()
Definition IOManager.hpp:40
#define TLOG(...)
Definition macro.hpp:22
Including Qt Headers.
void error(const Issue &issue)
Definition ers.hpp:81