DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
triggeralgs
include
triggeralgs
TriggerObjectOverlay.hpp
Go to the documentation of this file.
1
8
9
#ifndef TRIGGERALGS_INCLUDE_TRIGGERALGS_TRIGGEROBJECTOVERLAY_HPP_
10
#define TRIGGERALGS_INCLUDE_TRIGGERALGS_TRIGGEROBJECTOVERLAY_HPP_
11
12
13
#include "
trgdataformats/TriggerActivityData.hpp
"
14
#include "
trgdataformats/TriggerObjectOverlay.hpp
"
15
16
#include "
triggeralgs/TriggerPrimitive.hpp
"
17
#include "
triggeralgs/TriggerActivity.hpp
"
18
#include "
triggeralgs/TriggerCandidate.hpp
"
19
20
namespace
triggeralgs
{
21
22
// TypeToOverlayType acts as a "map" from a type to its overlay type
23
// (eg from TriggerCandidate to dunedaq::trgdataformats::TriggerCandidate). The point of
24
// having this is so that we can call the various overlay conversion
25
// functions below without having to explicitly specify the template
26
// arguments. An alternative way to do this would be to have
27
// TriggerActivity and TriggerCandidate each contain a using declaration
28
// like `using overlay_t = dunedaq::trgdataformats::Trigger(Activity|Candidate);`, but I
29
// couldn't figure out the right forward declaration for the overlay
30
// types in the TriggerCandidate/TriggerActivity header files
31
template
<
class
T>
32
struct
TypeToOverlayType
;
33
34
template
<>
35
struct
TypeToOverlayType
<
TriggerActivity
>
36
{
37
using
overlay_t
=
dunedaq::trgdataformats::TriggerActivity
;
38
using
data_t
=
dunedaq::trgdataformats::TriggerActivityData
;
39
};
40
41
template
<>
42
struct
TypeToOverlayType
<
TriggerCandidate
>
43
{
44
using
overlay_t
=
dunedaq::trgdataformats::TriggerCandidate
;
45
using
data_t
=
dunedaq::trgdataformats::TriggerCandidateData
;
46
};
47
48
// Populate a TriggerObjectOverlay in `buffer`, created from
49
// `object`. The necessary size for the buffer can be found with
50
// `get_overlay_nbytes()`
51
template<class Object, class Overlay = typename TypeToOverlayType<Object>::overlay_t,
52
class
Data =
typename
TypeToOverlayType<Object>::data_t
>
53
void
54
write_overlay
(
const
Object&
object
,
void
* buffer)
55
{
56
Overlay* overlay =
reinterpret_cast<
Overlay*
>
(buffer);
57
overlay->data =
static_cast<
Data
>
(object);
58
overlay->n_inputs =
object
.inputs.size();
59
for
(
size_t
i = 0; i <
object
.inputs.size(); ++i) {
60
overlay->inputs[i] =
object
.inputs[i];
61
}
62
}
63
64
// Calculate the size of buffer (in bytes) required to store an
65
// overlay created from `object`
66
template<class Object, class Overlay = typename TypeToOverlayType<Object>::overlay_t>
67
size_t
68
get_overlay_nbytes
(
const
Object&
object
)
69
{
70
// Need to check that this is actually right: what does sizeof
71
// return when the class contains a flexible array member? Seems to
72
// work in unit tests, so probably this is right
73
return
sizeof
(Overlay) +
object
.inputs.size() *
sizeof
(
typename
Overlay::input_t);
74
}
75
76
// Given an overlay object (dunedaq::trgdataformats::TriggerActivity or
77
// dunedaq::trgdataformats::TriggerCandidate), create a corresponding non-overlay object
78
// (triggeralgs::TriggerActivity or triggeralgs::TriggerCandidate) with the same contents, and return it
79
template<class Object, class Overlay = typename TypeToOverlayType<Object>::overlay_t,
80
class
Data =
typename
TypeToOverlayType<Object>::data_t>
81
Object
82
read_overlay
(
const
Overlay& overlay)
83
{
84
Object ret;
85
// overlay.data is a Trigger(Activity|Candidate)Data, which is the
86
// base class of Trigger(Activity|Candidate). So we want to set the
87
// base-class part of `ret` to `overlay.data`, which is what the
88
// static_cast is for. We have to do the cast on the pointer to get
89
// reference semantics (without the &, we get a _copy_ of ret, which
90
// is not what we want)
91
*
static_cast<
Data*
>
(&ret) = overlay.data;
92
for
(uint64_t i = 0; i < overlay.n_inputs; ++i) {
93
ret.inputs.push_back(overlay.inputs[i]);
94
}
95
return
ret;
96
}
97
98
// Given a buffer containing an overlay object (dunedaq::trgdataformats::TriggerActivity
99
// or dunedaq::trgdataformats::TriggerCandidate), create a corresponding non-overlay
100
// object (triggeralgs::TriggerActivity or triggeralgs::TriggerCandidate) with the same
101
// contents, and return it. This function requires the return type to
102
// be explicitly specified as a template argument, unlike the other
103
// functions in this file. Eg
104
//
105
// TriggerActivity activity_read = read_overlay_from_buffer<TriggerActivity>(buffer);
106
template<class Object, class Overlay = typename TypeToOverlayType<Object>::overlay_t>
107
Object
108
read_overlay_from_buffer
(
const
void
* buffer)
109
{
110
return
read_overlay<Object, Overlay>
(*
reinterpret_cast<
const
Overlay*
>
(buffer));
111
}
112
113
}
// namespace triggeralgs
114
115
#endif
// TRIGGERALGS_INCLUDE_TRIGGERALGS_TRIGGEROBJECTOVERLAY_HPP_
TriggerActivityData.hpp
TriggerActivity.hpp
TriggerCandidate.hpp
dunedaq::trgdataformats::TriggerActivity
TriggerObjectOverlay< TriggerActivityData, TriggerPrimitive > TriggerActivity
Definition
TriggerObjectOverlay.hpp:31
dunedaq::trgdataformats::TriggerCandidate
TriggerObjectOverlay< TriggerCandidateData, TriggerActivityData > TriggerCandidate
Definition
TriggerObjectOverlay.hpp:33
triggeralgs
Definition
AbstractFactory.hpp:18
triggeralgs::read_overlay_from_buffer
Object read_overlay_from_buffer(const void *buffer)
Definition
TriggerObjectOverlay.hpp:108
triggeralgs::write_overlay
void write_overlay(const Object &object, void *buffer)
Definition
TriggerObjectOverlay.hpp:54
triggeralgs::read_overlay
Object read_overlay(const Overlay &overlay)
Definition
TriggerObjectOverlay.hpp:82
triggeralgs::get_overlay_nbytes
size_t get_overlay_nbytes(const Object &object)
Definition
TriggerObjectOverlay.hpp:68
dunedaq::trgdataformats::TriggerActivityData
Definition
TriggerActivityData.hpp:18
dunedaq::trgdataformats::TriggerCandidateData
Definition
TriggerCandidateData.hpp:21
triggeralgs::TriggerActivity
Definition
TriggerActivity.hpp:20
triggeralgs::TriggerCandidate
Definition
TriggerCandidate.hpp:20
triggeralgs::TypeToOverlayType< TriggerActivity >::data_t
dunedaq::trgdataformats::TriggerActivityData data_t
Definition
TriggerObjectOverlay.hpp:38
triggeralgs::TypeToOverlayType< TriggerActivity >::overlay_t
dunedaq::trgdataformats::TriggerActivity overlay_t
Definition
TriggerObjectOverlay.hpp:37
triggeralgs::TypeToOverlayType< TriggerCandidate >::data_t
dunedaq::trgdataformats::TriggerCandidateData data_t
Definition
TriggerObjectOverlay.hpp:45
triggeralgs::TypeToOverlayType< TriggerCandidate >::overlay_t
dunedaq::trgdataformats::TriggerCandidate overlay_t
Definition
TriggerObjectOverlay.hpp:44
triggeralgs::TypeToOverlayType
Definition
TriggerObjectOverlay.hpp:32
TriggerObjectOverlay.hpp
TriggerPrimitive.hpp
Generated on
for DUNE-DAQ by
1.17.0