DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
trigger
src
TPRequestHandler.cpp
Go to the documentation of this file.
1
#include "
trigger/TPRequestHandler.hpp
"
2
#include "
appmodel/DataHandlerConf.hpp
"
3
#include "
appmodel/RequestHandler.hpp
"
4
5
#include "
rcif/cmd/Nljs.hpp
"
6
7
namespace
dunedaq
{
8
namespace
trigger
{
9
10
void
11
TPRequestHandler::conf
(
const
appmodel::DataHandlerModule
*
conf
)
12
{
13
14
for
(
auto
output :
conf
->
get_outputs
()) {
15
if
(output->get_data_type() ==
"TPSet"
) {
16
try
{
17
m_tpset_sink
=
iomanager::IOManager::get
()->get_sender<
dunedaq::trigger::TPSet
>(output->UID());
18
}
catch
(
const
ers::Issue
& excpt) {
19
throw
datahandlinglibs::ResourceQueueError(
ERS_HERE
,
"tp queue"
,
"DefaultRequestHandlerModel"
, excpt);
20
}
21
}
22
}
23
inherited2::conf
(
conf
);
24
}
25
26
void
27
TPRequestHandler::scrap
(
const
appfwk::DAQModule::CommandData_t& args)
28
{
29
m_tpset_sink
.reset();
30
inherited2::scrap
(args);
31
}
32
33
void
34
TPRequestHandler::start
(
const
appfwk::DAQModule::CommandData_t& args)
35
{
36
37
m_oldest_ts
= 0;
38
m_newest_ts
= 0;
39
m_start_win_ts
= 0;
40
m_end_win_ts
= 0;
41
m_first_cycle
=
true
;
42
43
inherited2::start
(args);
44
rcif::cmd::StartParams
start_params = args.get<
rcif::cmd::StartParams
>();
45
m_run_number
= start_params.
run
;
46
}
47
48
void
49
TPRequestHandler::periodic_data_transmission
()
50
{
51
52
if
(
m_tpset_sink
==
nullptr
)
53
return
;
54
55
dunedaq::dfmessages::DataRequest
dr;
56
57
{
58
std::unique_lock<std::mutex> lock(
m_cv_mutex
);
59
m_cv
.wait(lock, [&] {
return
!
m_cleanup_requested
; });
60
m_requests_running
++;
61
}
62
m_cv
.notify_all();
63
if
(
m_latency_buffer
->occupancy() != 0) {
64
// Prepare response
65
RequestResult
rres(ResultCode::kUnknown, dr);
66
std::vector<std::pair<void*, size_t>> frag_pieces;
67
68
// Get the newest TP
69
SkipListAcc
acc(
inherited2::m_latency_buffer
->get_skip_list());
70
auto
tail = acc.last();
71
auto
head = acc.first();
72
m_newest_ts
= (*tail).get_timestamp();
73
m_oldest_ts
= (*head).get_timestamp();
74
75
if
(
m_first_cycle
) {
76
m_start_win_ts
=
m_oldest_ts
;
77
m_first_cycle
=
false
;
78
}
79
if
(
m_newest_ts
-
m_start_win_ts
>
m_ts_set_sender_offset_ticks
) {
80
m_end_win_ts
=
m_newest_ts
-
m_ts_set_sender_offset_ticks
;
81
frag_pieces =
get_fragment_pieces
(
m_start_win_ts
,
m_end_win_ts
, rres);
82
auto
num_tps = frag_pieces.size();
83
trigger::TPSet
tpset;
84
tpset.
run_number
=
m_run_number
;
85
tpset.
type
= num_tps > 0 ?
trigger::TPSet::Type::kPayload
:
trigger::TPSet::Type::kHeartbeat
;
86
tpset.
origin
=
m_sourceid
;
87
tpset.
start_time
=
m_start_win_ts
;
// provisory timestamp, will be filled with first TP
88
tpset.
end_time
=
m_end_win_ts
;
// provisory timestamp, will be filled with last TP
89
tpset.
seqno
=
m_next_tpset_seqno
++;
// NOLINT(runtime/increment_decrement)
90
// reserve the space for efficiency
91
if
(num_tps > 0) {
92
tpset.
objects
.reserve(frag_pieces.size());
93
bool
first_tp =
true
;
94
for
(
auto
f : frag_pieces) {
95
trgdataformats::TriggerPrimitive
tp = *(
static_cast<
trgdataformats::TriggerPrimitive
*
>
(f.first));
96
97
if
(first_tp) {
98
tpset.
start_time
= tp.
time_start
;
99
first_tp =
false
;
100
}
101
tpset.
end_time
= tp.
time_start
;
102
tpset.
objects
.emplace_back(std::move(tp));
103
}
104
}
105
if
(!
m_tpset_sink
->try_send(std::move(tpset),
iomanager::Sender::s_no_block
)) {
106
ers::warning
(DroppedTPSet(
ERS_HERE
,
m_start_win_ts
,
m_end_win_ts
));
107
m_num_periodic_send_failed
++;
108
}
109
m_num_periodic_sent
++;
110
111
// remember what we sent for the next loop
112
m_start_win_ts
=
m_end_win_ts
;
113
}
114
}
115
{
116
std::lock_guard<std::mutex> lock(
m_cv_mutex
);
117
m_requests_running
--;
118
}
119
m_cv
.notify_all();
120
return
;
121
}
122
123
}
// namespace fdreadoutlibs
124
}
// namespace dunedaq
ERS_HERE
#define ERS_HERE
Definition
LocalContext.hpp:127
TPRequestHandler.hpp
dunedaq::appmodel::DataHandlerModule
Definition
DataHandlerModule.hpp:36
dunedaq::confmodel::DaqModule::get_outputs
const std::vector< const dunedaq::confmodel::Connection * > & get_outputs() const
Get "outputs" relationship value. Output connections from this module.
Definition
DaqModule.hpp:138
dunedaq::datahandlinglibs::DefaultRequestHandlerModel::m_cv_mutex
std::mutex m_cv_mutex
Definition
DefaultRequestHandlerModel.hpp:243
dunedaq::datahandlinglibs::DefaultRequestHandlerModel::m_cleanup_requested
std::atomic< bool > m_cleanup_requested
Definition
DefaultRequestHandlerModel.hpp:245
dunedaq::datahandlinglibs::DefaultRequestHandlerModel::m_cv
std::condition_variable m_cv
Definition
DefaultRequestHandlerModel.hpp:244
dunedaq::datahandlinglibs::DefaultRequestHandlerModel::m_num_periodic_send_failed
std::atomic< uint64_t > m_num_periodic_send_failed
Definition
DefaultRequestHandlerModel.hpp:300
dunedaq::datahandlinglibs::DefaultRequestHandlerModel::m_num_periodic_sent
std::atomic< uint64_t > m_num_periodic_sent
Definition
DefaultRequestHandlerModel.hpp:299
dunedaq::datahandlinglibs::DefaultRequestHandlerModel::get_fragment_pieces
std::vector< std::pair< void *, size_t > > get_fragment_pieces(uint64_t start_win_ts, uint64_t end_win_ts, RequestResult &rres)
Definition
DefaultRequestHandlerModel.hxx:444
dunedaq::datahandlinglibs::DefaultRequestHandlerModel::m_latency_buffer
std::shared_ptr< LatencyBufferType > & m_latency_buffer
Definition
DefaultRequestHandlerModel.hpp:230
dunedaq::datahandlinglibs::DefaultRequestHandlerModel::m_sourceid
daqdataformats::SourceID m_sourceid
Definition
DefaultRequestHandlerModel.hpp:271
dunedaq::datahandlinglibs::DefaultRequestHandlerModel::m_requests_running
std::atomic< int > m_requests_running
Definition
DefaultRequestHandlerModel.hpp:246
dunedaq::datahandlinglibs::DefaultSkipListRequestHandler< TriggerPrimitiveTypeAdapter >::SkipListAcc
typename folly::ConcurrentSkipList< TriggerPrimitiveTypeAdapter >::Accessor SkipListAcc
Definition
DefaultSkipListRequestHandler.hpp:35
dunedaq::datahandlinglibs::RequestHandlerConcept::start
virtual void start(const appfwk::DAQModule::CommandData_t &args)=0
dunedaq::datahandlinglibs::RequestHandlerConcept::scrap
virtual void scrap(const appfwk::DAQModule::CommandData_t &args)=0
dunedaq::datahandlinglibs::RequestHandlerConcept::conf
virtual void conf(const appmodel::DataHandlerModule *conf)=0
dunedaq::iomanager::IOManager::get
static std::shared_ptr< IOManager > get()
Definition
IOManager.hpp:40
dunedaq::iomanager::Sender::s_no_block
static constexpr timeout_t s_no_block
Definition
Sender.hpp:26
dunedaq::trigger::Set::objects
std::vector< T > objects
Definition
Set.hpp:61
dunedaq::trigger::Set::run_number
daqdataformats::run_number_t run_number
Definition
Set.hpp:45
dunedaq::trigger::Set::start_time
timestamp_t start_time
Definition
Set.hpp:55
dunedaq::trigger::Set::origin
origin_t origin
Definition
Set.hpp:48
dunedaq::trigger::Set::type
Type type
Definition
Set.hpp:52
dunedaq::trigger::Set< trgdataformats::TriggerPrimitive >::kHeartbeat
@ kHeartbeat
Definition
Set.hpp:36
dunedaq::trigger::Set< trgdataformats::TriggerPrimitive >::kPayload
@ kPayload
Definition
Set.hpp:35
dunedaq::trigger::Set::seqno
seqno_t seqno
Definition
Set.hpp:42
dunedaq::trigger::Set::end_time
timestamp_t end_time
Definition
Set.hpp:58
dunedaq::trigger::TPRequestHandler::m_run_number
uint64_t m_run_number
Definition
TPRequestHandler.hpp:65
dunedaq::trigger::TPRequestHandler::scrap
void scrap(const appfwk::DAQModule::CommandData_t &args) override
Definition
TPRequestHandler.cpp:27
dunedaq::trigger::TPRequestHandler::m_oldest_ts
timestamp_t m_oldest_ts
Definition
TPRequestHandler.hpp:68
dunedaq::trigger::TPRequestHandler::m_first_cycle
bool m_first_cycle
Definition
TPRequestHandler.hpp:72
dunedaq::trigger::TPRequestHandler::m_tpset_sink
std::shared_ptr< iomanager::SenderConcept< dunedaq::trigger::TPSet > > m_tpset_sink
Definition
TPRequestHandler.hpp:64
dunedaq::trigger::TPRequestHandler::m_ts_set_sender_offset_ticks
uint64_t m_ts_set_sender_offset_ticks
Definition
TPRequestHandler.hpp:73
dunedaq::trigger::TPRequestHandler::m_end_win_ts
timestamp_t m_end_win_ts
Definition
TPRequestHandler.hpp:71
dunedaq::trigger::TPRequestHandler::conf
void conf(const appmodel::DataHandlerModule *conf) override
Definition
TPRequestHandler.cpp:11
dunedaq::trigger::TPRequestHandler::periodic_data_transmission
void periodic_data_transmission() override
Periodic data transmission - relevant for trigger in particular.
Definition
TPRequestHandler.cpp:49
dunedaq::trigger::TPRequestHandler::start
void start(const appfwk::DAQModule::CommandData_t &args) override
Definition
TPRequestHandler.cpp:34
dunedaq::trigger::TPRequestHandler::m_newest_ts
timestamp_t m_newest_ts
Definition
TPRequestHandler.hpp:69
dunedaq::trigger::TPRequestHandler::m_next_tpset_seqno
uint64_t m_next_tpset_seqno
Definition
TPRequestHandler.hpp:66
dunedaq::trigger::TPRequestHandler::m_start_win_ts
timestamp_t m_start_win_ts
Definition
TPRequestHandler.hpp:70
ers::Issue
Base class for any user define issue.
Definition
Issue.hpp:76
DataHandlerConf.hpp
RequestHandler.hpp
dunedaq::trigger
Definition
AlgorithmPlugins.hpp:24
dunedaq::trigger::TPSet
Set< trgdataformats::TriggerPrimitive > TPSet
Definition
TPSet.hpp:20
dunedaq
The DUNE-DAQ namespace.
Definition
cib_utilities.cpp:5
ers::warning
void warning(const Issue &issue)
Definition
ers.hpp:150
Nljs.hpp
dunedaq::datahandlinglibs::RequestHandlerConcept::RequestResult
Definition
RequestHandlerConcept.hpp:84
dunedaq::dfmessages::DataRequest
This message represents a request for data sent to a single component of the DAQ.
Definition
DataRequest.hpp:26
dunedaq::rcif::cmd::StartParams
Definition
Structs.hpp:75
dunedaq::rcif::cmd::StartParams::run
RunNumber run
Definition
Structs.hpp:78
dunedaq::trgdataformats::TriggerPrimitive
A single energy deposition on a TPC or PDS channel.
Definition
TriggerPrimitive.hpp:32
dunedaq::trgdataformats::TriggerPrimitive::time_start
uint64_t time_start
Definition
TriggerPrimitive.hpp:49
Generated on
for DUNE-DAQ by
1.18.0