DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
PD2HDChannelMapSPPluginBase.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "PD2HDChannelMapSP.h"
5#include "logging/Logging.hpp" // NOLINT
6
7namespace dunedaq {
8namespace detchannelmaps {
9
10class PD2HDChannelMapSPPluginBase : public TPCChannelMap
11{
12private:
13 const uint m_det_id;
14 std::unique_ptr<dune::PD2HDChannelMapSP> m_channel_map;
15
16protected:
17 std::function<uint(std::string)> m_elem_name_id_converter;
18
19public:
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;
37 m_channel_map->ReadMapFromFile(channel_map_file);
38 }
39
41 delete;
43 delete;
45 delete;
47 delete;
48
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
uint get_plane_from_offline_channel(uint offchannel) final
Get the plane from offline channel object.
PD2HDChannelMapSPPluginBase(PD2HDChannelMapSPPluginBase &&)=delete
PD2HDChannelMapSPPluginBase is not move-constructible.
PD2HDChannelMapSPPluginBase & operator=(PD2HDChannelMapSPPluginBase &&)=delete
PD2HDChannelMapSPPluginBase is not move-assignable.
std::string get_element_name_from_offline_channel(uint offchannel) final
Get the tpc element name from offline channel object.
PD2HDChannelMapSPPluginBase(uint det_id, const std::string &channel_map_path)
Construct a new PD2HDChannelMapSPPluginBase object.
std::optional< TPCChannelMap::TPCChannelInfo > get_channel_info_from_offline_channel(uint offchannel) final
uint get_element_id_from_offline_channel(uint offchannel) final
Get the element id from offline channel object.
PD2HDChannelMapSPPluginBase & operator=(const PD2HDChannelMapSPPluginBase &)=delete
PD2HDChannelMapSPPluginBase is not copy-assignable.
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.
PD2HDChannelMapSPPluginBase(const PD2HDChannelMapSPPluginBase &)=delete
PD2HDChannelMapSPPluginBase is not copy-constructible.
The DUNE-DAQ namespace.