DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
detchannelmaps
src
PD2HDChannelMapSPPluginBase.hpp
Go to the documentation of this file.
1
#pragma once
2
3
#include "
PD2HDChannelMapSP.h
"
4
#include "
detchannelmaps/TPCChannelMap.hpp
"
5
#include "
logging/Logging.hpp
"
// NOLINT
6
7
namespace
dunedaq
{
8
namespace
detchannelmaps
{
9
10
class
PD2HDChannelMapSPPluginBase
:
public
TPCChannelMap
11
{
12
private
:
13
const
uint
m_det_id
;
14
std::unique_ptr<dune::PD2HDChannelMapSP>
m_channel_map
;
15
16
protected
:
17
std::function<uint(std::string)>
m_elem_name_id_converter
;
18
19
public
:
26
explicit
PD2HDChannelMapSPPluginBase
(uint det_id,
const
std::string& channel_map_path)
27
:
m_det_id
(det_id)
28
{
29
30
const
char
* detchannelmaps_share_cstr = getenv(
"DETCHANNELMAPS_SHARE"
);
31
if
(!detchannelmaps_share_cstr) {
32
throw
std::runtime_error(
"Environment variable DETCHANNELMAPS_SHARE is not set"
);
33
}
34
std::string detchannelmaps_share(detchannelmaps_share_cstr);
35
std::string channel_map_file = detchannelmaps_share +
"/config/"
+ channel_map_path;
36
m_channel_map
.reset(
new
dune::PD2HDChannelMapSP
());
37
m_channel_map
->ReadMapFromFile(channel_map_file);
38
}
39
40
PD2HDChannelMapSPPluginBase
(
const
PD2HDChannelMapSPPluginBase
&) =
41
delete
;
42
PD2HDChannelMapSPPluginBase
&
operator=
(
const
PD2HDChannelMapSPPluginBase
&) =
43
delete
;
44
PD2HDChannelMapSPPluginBase
(
PD2HDChannelMapSPPluginBase
&&) =
45
delete
;
46
PD2HDChannelMapSPPluginBase
&
operator=
(
PD2HDChannelMapSPPluginBase
&&) =
47
delete
;
48
60
uint
get_offline_channel_from_det_crate_slot_stream_chan
(uint det,
61
uint crate,
62
uint slot,
63
uint stream,
64
uint channel)
final
65
{
66
67
// Must be a BDE channel
68
if
(det !=
m_det_id
)
69
return
-1;
70
71
// if stream number looks wrong (not 0,1,2,3 or 64,65,66,67)
72
if
((stream & 0xbc))
73
return
-1;
74
75
constexpr
uint n_chan_per_stream = 64;
76
77
uint link = (stream >> 6) & 1;
78
uint stream_in_link = (stream & 0x3);
79
uint wibframechan = n_chan_per_stream * stream_in_link + channel;
80
81
auto
chan_info =
m_channel_map
->GetChanInfoFromWIBElements(crate, slot, link, wibframechan);
82
83
if
(!chan_info.valid) {
84
return
-1;
85
}
86
87
return
chan_info.offlchan;
88
}
89
96
uint
get_plane_from_offline_channel
(uint offchannel)
final
97
{
98
auto
chan_info =
m_channel_map
->GetChanInfoFromOfflChan(offchannel);
99
100
if
(!chan_info.valid) {
101
return
-1;
102
}
103
104
return
chan_info.plane;
105
};
106
113
uint
get_element_id_from_offline_channel
(uint offchannel)
final
114
{
115
auto
chan_info =
m_channel_map
->GetChanInfoFromOfflChan(offchannel);
116
117
if
(!chan_info.valid) {
118
return
-1;
119
}
120
121
return
m_elem_name_id_converter
(chan_info.APAName);
122
123
// There is only one element
124
return
0;
125
}
126
133
std::string
get_element_name_from_offline_channel
(uint offchannel)
final
134
{
135
auto
chan_info =
m_channel_map
->GetChanInfoFromOfflChan(offchannel);
136
137
if
(!chan_info.valid) {
138
return
""
;
139
}
140
141
return
chan_info.APAName;
142
}
143
144
std::optional<TPCChannelMap::TPCChannelInfo>
get_channel_info_from_offline_channel
(uint offchannel)
final
145
{
146
auto
ci =
m_channel_map
->GetChanInfoFromOfflChan(offchannel);
147
148
if
(!ci.valid) {
149
return
std::nullopt;
150
}
151
constexpr
uint n_chan_per_stream = 64;
152
uint16_t slot_id = ci.wib - 1;
153
uint16_t stream_id = ci.link * n_chan_per_stream + ci.wibframechan / n_chan_per_stream;
154
uint16_t chan_id = ci.wibframechan % n_chan_per_stream;
155
156
return
TPCChannelMap::TPCChannelInfo{
m_det_id
, ci.crate, slot_id,
157
stream_id, chan_id,
m_elem_name_id_converter
(ci.APAName) };
158
}
159
};
160
161
}
// namespace detchannelmaps
162
}
// namespace dunedaq
PD2HDChannelMapSP.h
TPCChannelMap.hpp
dune::PD2HDChannelMapSP
Definition
PD2HDChannelMapSP.h:23
dunedaq::detchannelmaps::PD2HDChannelMapSPPluginBase::get_plane_from_offline_channel
uint get_plane_from_offline_channel(uint offchannel) final
Get the plane from offline channel object.
Definition
PD2HDChannelMapSPPluginBase.hpp:96
dunedaq::detchannelmaps::PD2HDChannelMapSPPluginBase::PD2HDChannelMapSPPluginBase
PD2HDChannelMapSPPluginBase(PD2HDChannelMapSPPluginBase &&)=delete
PD2HDChannelMapSPPluginBase is not move-constructible.
dunedaq::detchannelmaps::PD2HDChannelMapSPPluginBase::operator=
PD2HDChannelMapSPPluginBase & operator=(PD2HDChannelMapSPPluginBase &&)=delete
PD2HDChannelMapSPPluginBase is not move-assignable.
dunedaq::detchannelmaps::PD2HDChannelMapSPPluginBase::get_element_name_from_offline_channel
std::string get_element_name_from_offline_channel(uint offchannel) final
Get the tpc element name from offline channel object.
Definition
PD2HDChannelMapSPPluginBase.hpp:133
dunedaq::detchannelmaps::PD2HDChannelMapSPPluginBase::PD2HDChannelMapSPPluginBase
PD2HDChannelMapSPPluginBase(uint det_id, const std::string &channel_map_path)
Construct a new PD2HDChannelMapSPPluginBase object.
Definition
PD2HDChannelMapSPPluginBase.hpp:26
dunedaq::detchannelmaps::PD2HDChannelMapSPPluginBase::get_channel_info_from_offline_channel
std::optional< TPCChannelMap::TPCChannelInfo > get_channel_info_from_offline_channel(uint offchannel) final
Definition
PD2HDChannelMapSPPluginBase.hpp:144
dunedaq::detchannelmaps::PD2HDChannelMapSPPluginBase::get_element_id_from_offline_channel
uint get_element_id_from_offline_channel(uint offchannel) final
Get the element id from offline channel object.
Definition
PD2HDChannelMapSPPluginBase.hpp:113
dunedaq::detchannelmaps::PD2HDChannelMapSPPluginBase::operator=
PD2HDChannelMapSPPluginBase & operator=(const PD2HDChannelMapSPPluginBase &)=delete
PD2HDChannelMapSPPluginBase is not copy-assignable.
dunedaq::detchannelmaps::PD2HDChannelMapSPPluginBase::m_elem_name_id_converter
std::function< uint(std::string)> m_elem_name_id_converter
Definition
PD2HDChannelMapSPPluginBase.hpp:17
dunedaq::detchannelmaps::PD2HDChannelMapSPPluginBase::get_offline_channel_from_det_crate_slot_stream_chan
uint get_offline_channel_from_det_crate_slot_stream_chan(uint det, uint crate, uint slot, uint stream, uint channel) final
Get the offline channel from detector crate slot stream chan object.
Definition
PD2HDChannelMapSPPluginBase.hpp:60
dunedaq::detchannelmaps::PD2HDChannelMapSPPluginBase::m_channel_map
std::unique_ptr< dune::PD2HDChannelMapSP > m_channel_map
Definition
PD2HDChannelMapSPPluginBase.hpp:14
dunedaq::detchannelmaps::PD2HDChannelMapSPPluginBase::PD2HDChannelMapSPPluginBase
PD2HDChannelMapSPPluginBase(const PD2HDChannelMapSPPluginBase &)=delete
PD2HDChannelMapSPPluginBase is not copy-constructible.
dunedaq::detchannelmaps::PD2HDChannelMapSPPluginBase::m_det_id
const uint m_det_id
Definition
PD2HDChannelMapSPPluginBase.hpp:13
Logging.hpp
detchannelmaps
Definition
__init__.py:1
dunedaq
The DUNE-DAQ namespace.
Definition
cib_utilities.cpp:5
Generated on
for DUNE-DAQ by
1.18.0