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
for
(
auto
output :
conf
->get_outputs()) {
14
if
(output->get_data_type() ==
"TPSet"
) {
15
try
{
16
m_tpset_sink
=
iomanager::IOManager::get
()->get_sender<
dunedaq::trigger::TPSet
>(output->UID());
17
}
catch
(
const
ers::Issue
& excpt) {
18
throw
datahandlinglibs::ResourceQueueError(
ERS_HERE
,
"tp queue"
,
"DefaultRequestHandlerModel"
, excpt);
19
}
20
}
21
}
22
inherited2::conf
(
conf
);
23
}
24
25
void
26
TPRequestHandler::scrap
(
const
appfwk::DAQModule::CommandData_t& args)
27
{
28
m_tpset_sink
.reset();
29
inherited2::scrap
(args);
30
}
31
32
void
33
TPRequestHandler::start
(
const
appfwk::DAQModule::CommandData_t& args)
34
{
35
36
m_oldest_ts
=0;
37
m_newest_ts
=0;
38
m_start_win_ts
=0;
39
m_end_win_ts
=0;
40
m_first_cycle
=
true
;
41
42
inherited2::start
(args);
43
rcif::cmd::StartParams
start_params = args.get<
rcif::cmd::StartParams
>();
44
m_run_number
= start_params.
run
;
45
46
}
47
48
void
49
TPRequestHandler::periodic_data_transmission
() {
50
51
if
(
m_tpset_sink
==
nullptr
)
return
;
52
53
dunedaq::dfmessages::DataRequest
dr;
54
55
{
56
std::unique_lock<std::mutex> lock(
m_cv_mutex
);
57
m_cv
.wait(lock, [&] {
return
!
m_cleanup_requested
; });
58
m_requests_running
++;
59
}
60
m_cv
.notify_all();
61
if
(
m_latency_buffer
->occupancy() != 0) {
62
// Prepare response
63
RequestResult
rres(ResultCode::kUnknown, dr);
64
std::vector<std::pair<void*, size_t>> frag_pieces;
65
66
// Get the newest TP
67
SkipListAcc
acc(
inherited2::m_latency_buffer
->get_skip_list());
68
auto
tail = acc.last();
69
auto
head = acc.first();
70
m_newest_ts
= (*tail).get_timestamp();
71
m_oldest_ts
= (*head).get_timestamp();
72
73
if
(
m_first_cycle
) {
74
m_start_win_ts
=
m_oldest_ts
;
75
m_first_cycle
=
false
;
76
}
77
if
(
m_newest_ts
-
m_start_win_ts
>
m_ts_set_sender_offset_ticks
) {
78
m_end_win_ts
=
m_newest_ts
-
m_ts_set_sender_offset_ticks
;
79
frag_pieces =
get_fragment_pieces
(
m_start_win_ts
,
m_end_win_ts
, rres);
80
auto
num_tps = frag_pieces.size();
81
trigger::TPSet
tpset;
82
tpset.
run_number
=
m_run_number
;
83
tpset.
type
= num_tps>0 ?
trigger::TPSet::Type::kPayload
:
trigger::TPSet::Type::kHeartbeat
;
84
tpset.
origin
=
m_sourceid
;
85
tpset.
start_time
=
m_start_win_ts
;
// provisory timestamp, will be filled with first TP
86
tpset.
end_time
=
m_end_win_ts
;
// provisory timestamp, will be filled with last TP
87
tpset.
seqno
=
m_next_tpset_seqno
++;
// NOLINT(runtime/increment_decrement)
88
// reserve the space for efficiency
89
if
(num_tps > 0) {
90
tpset.
objects
.reserve(frag_pieces.size());
91
bool
first_tp =
true
;
92
for
(
auto
f : frag_pieces) {
93
trgdataformats::TriggerPrimitive
tp = *(
static_cast<
trgdataformats::TriggerPrimitive
*
>
(f.first));
94
95
if
(first_tp) {
96
tpset.
start_time
= tp.
time_start
;
97
first_tp =
false
;
98
}
99
tpset.
end_time
= tp.
time_start
;
100
tpset.
objects
.emplace_back(std::move(tp));
101
}
102
}
103
if
(!
m_tpset_sink
->try_send(std::move(tpset),
iomanager::Sender::s_no_block
)) {
104
ers::warning
(DroppedTPSet(
ERS_HERE
,
m_start_win_ts
,
m_end_win_ts
));
105
m_num_periodic_send_failed
++;
106
}
107
m_num_periodic_sent
++;
108
109
//remember what we sent for the next loop
110
m_start_win_ts
=
m_end_win_ts
;
111
}
112
}
113
{
114
std::lock_guard<std::mutex> lock(
m_cv_mutex
);
115
m_requests_running
--;
116
}
117
m_cv
.notify_all();
118
return
;
119
}
120
121
}
// namespace fdreadoutlibs
122
}
// namespace dunedaq
ERS_HERE
#define ERS_HERE
Definition
LocalContext.hpp:141
TPRequestHandler.hpp
dunedaq::appmodel::DataHandlerModule
Definition
DataHandlerModule.hpp:36
dunedaq::datahandlinglibs::DefaultRequestHandlerModel::m_cv_mutex
std::mutex m_cv_mutex
Definition
DefaultRequestHandlerModel.hpp:244
dunedaq::datahandlinglibs::DefaultRequestHandlerModel::m_cleanup_requested
std::atomic< bool > m_cleanup_requested
Definition
DefaultRequestHandlerModel.hpp:246
dunedaq::datahandlinglibs::DefaultRequestHandlerModel::m_cv
std::condition_variable m_cv
Definition
DefaultRequestHandlerModel.hpp:245
dunedaq::datahandlinglibs::DefaultRequestHandlerModel::m_num_periodic_send_failed
std::atomic< uint64_t > m_num_periodic_send_failed
Definition
DefaultRequestHandlerModel.hpp:301
dunedaq::datahandlinglibs::DefaultRequestHandlerModel::m_num_periodic_sent
std::atomic< uint64_t > m_num_periodic_sent
Definition
DefaultRequestHandlerModel.hpp:300
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:443
dunedaq::datahandlinglibs::DefaultRequestHandlerModel::m_latency_buffer
std::shared_ptr< LatencyBufferType > & m_latency_buffer
Definition
DefaultRequestHandlerModel.hpp:231
dunedaq::datahandlinglibs::DefaultRequestHandlerModel::m_sourceid
daqdataformats::SourceID m_sourceid
Definition
DefaultRequestHandlerModel.hpp:272
dunedaq::datahandlinglibs::DefaultRequestHandlerModel::m_requests_running
std::atomic< int > m_requests_running
Definition
DefaultRequestHandlerModel.hpp:247
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:72
dunedaq::trigger::TPRequestHandler::scrap
void scrap(const appfwk::DAQModule::CommandData_t &args) override
Definition
TPRequestHandler.cpp:26
dunedaq::trigger::TPRequestHandler::m_oldest_ts
timestamp_t m_oldest_ts
Definition
TPRequestHandler.hpp:75
dunedaq::trigger::TPRequestHandler::m_first_cycle
bool m_first_cycle
Definition
TPRequestHandler.hpp:79
dunedaq::trigger::TPRequestHandler::m_tpset_sink
std::shared_ptr< iomanager::SenderConcept< dunedaq::trigger::TPSet > > m_tpset_sink
Definition
TPRequestHandler.hpp:71
dunedaq::trigger::TPRequestHandler::m_ts_set_sender_offset_ticks
uint64_t m_ts_set_sender_offset_ticks
Definition
TPRequestHandler.hpp:80
dunedaq::trigger::TPRequestHandler::m_end_win_ts
timestamp_t m_end_win_ts
Definition
TPRequestHandler.hpp:78
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:33
dunedaq::trigger::TPRequestHandler::m_newest_ts
timestamp_t m_newest_ts
Definition
TPRequestHandler.hpp:76
dunedaq::trigger::TPRequestHandler::m_next_tpset_seqno
uint64_t m_next_tpset_seqno
Definition
TPRequestHandler.hpp:73
dunedaq::trigger::TPRequestHandler::m_start_win_ts
timestamp_t m_start_win_ts
Definition
TPRequestHandler.hpp:77
ers::Issue
Base class for any user define issue.
Definition
Issue.hpp:80
DataHandlerConf.hpp
RequestHandler.hpp
dunedaq::trigger
Definition
AlgorithmPlugins.hpp:24
dunedaq::trigger::TPSet
Set< trgdataformats::TriggerPrimitive > TPSet
Definition
TPSet.hpp:20
dunedaq
Including Qt Headers.
Definition
module.cpp:16
ers::warning
void warning(const Issue &issue)
Definition
ers.hpp:126
Nljs.hpp
dunedaq::datahandlinglibs::RequestHandlerConcept::RequestResult
Definition
RequestHandlerConcept.hpp:83
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:77
dunedaq::rcif::cmd::StartParams::run
RunNumber run
Definition
Structs.hpp:80
dunedaq::trgdataformats::TriggerPrimitive
A single energy deposition on a TPC or PDS channel.
Definition
TriggerPrimitive.hpp:27
dunedaq::trgdataformats::TriggerPrimitive::time_start
uint64_t time_start
Definition
TriggerPrimitive.hpp:39
Generated on
for DUNE-DAQ by
1.17.0