DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
PdspChannelMapService.hpp
Go to the documentation of this file.
1
10// Class: PdspChannelMapService
11// Module type: service
12// File: PdspChannelMapService.h
13// Author: Jingbo Wang (jiowang@ucdavis.edu), February 2018
14//
15// Implementation of hardware-offline channel mapping reading from a file.
16// Separate files for TPC wires and SSP modules
18
19#ifndef DETCHANNELMAPS_PDSPCHANNELMAPSERVICE_HPP_
20#define DETCHANNELMAPS_PDSPCHANNELMAPSERVICE_HPP_
21
22#include <fstream>
23#include <iostream>
24#include <limits>
25#include <map>
26#include <string>
27#include <vector>
28
29namespace dunedaq {
30namespace detchannelmaps {
31
33{
34
35public:
36 PdspChannelMapService(std::string, std::string);
37
38 typedef enum _FelixOrRCE
39 {
41 kFELIX
43
45
46 // TPC channel map accessors
47
48 // Map instrumentation numbers (crate:slot:fiber:FEMBchannel) to offline channel number
49 // FEMB channel number is really the stream index number, but for FELIX, it is restricted to be in the range 0:127, so
50 // really it's more like an FEMB channel number
51
52 unsigned int GetOfflineNumberFromDetectorElements(unsigned int crate,
53 unsigned int slot,
54 unsigned int fiber,
55 unsigned int fembchannel,
56 FelixOrRCE frswitch);
57
59 unsigned int APAFromOfflineChannel(unsigned int offlineChannel) const;
60
62 unsigned int InstalledAPAFromOfflineChannel(unsigned int offlineChannel) const;
63
65 unsigned int WIBFromOfflineChannel(unsigned int offlineChannel) const;
66
68 unsigned int FEMBFromOfflineChannel(unsigned int offlineChannel) const;
69
71 unsigned int FEMBChannelFromOfflineChannel(unsigned int offlineChannel) const;
72
74 unsigned int StreamChannelFromOfflineChannel(unsigned int offlineChannel, FelixOrRCE frswitch) const;
75
77 unsigned int SlotIdFromOfflineChannel(unsigned int offlineChannel) const;
78
80 unsigned int FiberIdFromOfflineChannel(unsigned int offlineChannel) const;
81
83 unsigned int ChipFromOfflineChannel(unsigned int offlineChannel) const;
84
86 unsigned int ChipChannelFromOfflineChannel(unsigned int offlineChannel) const;
87
89 unsigned int ASICFromOfflineChannel(unsigned int offlineChannel);
90
92 unsigned int ASICChannelFromOfflineChannel(unsigned int offlineChannel);
93
94 // replaced by these
95
96 unsigned int AsicFromOfflineChannel(unsigned int offlineChannel) const;
97
98 unsigned int AsicChannelFromOfflineChannel(unsigned int offlineChannel) const;
99
100 unsigned int AsicLinkFromOfflineChannel(unsigned int offlineChannel) const;
101
103 unsigned int PlaneFromOfflineChannel(unsigned int offlineChannel) const;
104
105 // SSP channel map accessors
106
107 unsigned int SSPOfflineChannelFromOnlineChannel(unsigned int onlineChannel);
108
109 unsigned int SSPOnlineChannelFromOfflineChannel(unsigned int offlineChannel) const;
110
111 unsigned int SSPAPAFromOfflineChannel(unsigned int offlineChannel) const;
112
113 unsigned int SSPWithinAPAFromOfflineChannel(unsigned int offlineChannel) const;
114
115 unsigned int SSPGlobalFromOfflineChannel(unsigned int offlineChannel) const;
116
117 unsigned int SSPChanWithinSSPFromOfflineChannel(unsigned int offlineChannel) const;
118
119 unsigned int OpDetNoFromOfflineChannel(unsigned int offlineChannel) const;
120
121private:
122 // hardcoded TPC channel map sizes
123 // Note -- we are assuming that FELIX with its two fibers per fragment knows the fiber numbers and that we aren't
124 // encoding double-size channel lists for FELIX with single fiber numbers.
125
126 const size_t fNChans = 15360;
127 const size_t fNCrates = 6;
128 const size_t fNSlots = 5;
129 const size_t fNFibers = 4;
130 const size_t fNFEMBChans = 128;
131
132 // hardcoded SSP channel map sizes
133
134 const size_t fNSSPChans = 288;
135 // const size_t fNSSPs = 24;
136 // const size_t fNSSPsPerAPA = 4;
137 const size_t fNChansPerSSP = 12;
138 const size_t fNAPAs = 6;
139
140 // control behavior in case we need to fall back to default behavior
141
146
149
150 // TPC Maps
151 unsigned int farrayCsfcToOffline[6][5][4][128]; // implement as an array. Do our own bounds checking
152
153 // lookup tables as functions of offline channel number
154
155 unsigned int fvAPAMap[15360]; // APA(=crate)
156 unsigned int fvWIBMap[15360]; // WIB(slot)
157 unsigned int fvFEMBMap[15360]; // FEMB(fiber)
158 unsigned int fvFEMBChannelMap[15360]; // FEMB internal channel
159 unsigned int fvStreamChannelMap[15360]; // RCE(FELIX) internal channel
160 unsigned int fvSlotIdMap[15360]; // global WIB(slot) ID
161 unsigned int fvFiberIdMap[15360]; // global FEMB(fiber) ID
162 unsigned int fvChipMap[15360]; // Chip
163 unsigned int fvChipChannelMap[15360]; // Chip internal channel
164 unsigned int fvASICMap[15360]; // ASIC
165 unsigned int fvASICChannelMap[15360]; // ASIC internal channel
166 unsigned int fvPlaneMap[15360]; // Plane type
167
168 unsigned int fFELIXarrayCsfcToOffline[6][5][4][128]; // implement as an array. Do our own bounds checking
169 unsigned int fFELIXvAPAMap[15360]; // APA(=crate)
170 unsigned int fFELIXvWIBMap[15360]; // WIB(slot)
171 unsigned int fFELIXvFEMBMap[15360]; // FEMB(fiber)
172 unsigned int fFELIXvFEMBChannelMap[15360]; // FEMB internal channel
173 unsigned int fFELIXvStreamChannelMap[15360]; // RCE(FELIX) internal channel
174 unsigned int fFELIXvSlotIdMap[15360]; // global WIB(slot) ID
175 unsigned int fFELIXvFiberIdMap[15360]; // global FEMB(fiber) ID
176 unsigned int fFELIXvChipMap[15360]; // Chip
177 unsigned int fFELIXvChipChannelMap[15360]; // Chip internal channel
178 unsigned int fFELIXvASICMap[15360]; // ASIC
179 unsigned int fFELIXvASICChannelMap[15360]; // ASIC internal channel
180 unsigned int fFELIXvPlaneMap[15360]; // Plane type
181
182 unsigned int
183 fvInstalledAPA[6]; // APA as installed. This array maps the two conventions. Argument = offline, value = installed
184 unsigned int fvTPCSet_VsInstalledAPA[6]; // inverse map
185
186 // SSP Maps
187
188 unsigned int farraySSPOnlineToOffline[288]; // all accesses to this array need to be bounds-checked first.
189 unsigned int farraySSPOfflineToOnline[288];
190 unsigned int fvSSPAPAMap[288];
191 unsigned int fvSSPWithinAPAMap[288]; // Global SSP number 11, 12, 21, etc.
192 unsigned int fvSSPGlobalMap[288]; // Also global SSP number 11, 12, 21, etc.
193 unsigned int fvSSPChanWithinSSPMap[288];
194 unsigned int fvOpDetNoMap[288]; // PDS op det number
195
196 size_t count_bits(size_t i); // returns the number of bits set, for use in determing whether to print a warning out
197
198 //-----------------------------------------------
199
200 void check_offline_channel(unsigned int offlineChannel) const
201 {
202 if (offlineChannel >= fNChans) {
203 throw std::logic_error("Offline TPC Channel Number out of range");
204 }
205 };
206
207 void SSP_check_offline_channel(unsigned int offlineChannel) const
208 {
209 if (offlineChannel >= fNSSPChans) {
210 throw std::logic_error("Offline SSP Channel Number out of range");
211 }
212 };
213};
214
215} // namespace detchannelmaps
216} // namespace dunedaq
217
218#endif // DETCHANNELMAPS_PDSPCHANNELMAPSERVICE_HPP_
void check_offline_channel(unsigned int offlineChannel) const
unsigned int AsicFromOfflineChannel(unsigned int offlineChannel) const
unsigned int SSPChanWithinSSPFromOfflineChannel(unsigned int offlineChannel) const
unsigned int AsicLinkFromOfflineChannel(unsigned int offlineChannel) const
unsigned int FEMBFromOfflineChannel(unsigned int offlineChannel) const
Returns FEMB/fiber.
unsigned int ChipChannelFromOfflineChannel(unsigned int offlineChannel) const
Returns chip channel number.
unsigned int OpDetNoFromOfflineChannel(unsigned int offlineChannel) const
unsigned int ChipFromOfflineChannel(unsigned int offlineChannel) const
Returns chip number.
unsigned int ASICChannelFromOfflineChannel(unsigned int offlineChannel)
Returns ASIC channel number – to be deprecated.
unsigned int SSPOnlineChannelFromOfflineChannel(unsigned int offlineChannel) const
unsigned int FiberIdFromOfflineChannel(unsigned int offlineChannel) const
Returns global fiber ID.
unsigned int SSPGlobalFromOfflineChannel(unsigned int offlineChannel) const
unsigned int ASICFromOfflineChannel(unsigned int offlineChannel)
Returns ASIC number – to be deprecated.
unsigned int SlotIdFromOfflineChannel(unsigned int offlineChannel) const
Returns global slot ID.
enum dunedaq::detchannelmaps::PdspChannelMapService::_FelixOrRCE FelixOrRCE
unsigned int APAFromOfflineChannel(unsigned int offlineChannel) const
Returns APA/crate.
unsigned int StreamChannelFromOfflineChannel(unsigned int offlineChannel, FelixOrRCE frswitch) const
Returns RCE(FELIX) stream(frame) channel.
unsigned int AsicChannelFromOfflineChannel(unsigned int offlineChannel) const
unsigned int WIBFromOfflineChannel(unsigned int offlineChannel) const
Returns WIB/slot.
unsigned int InstalledAPAFromOfflineChannel(unsigned int offlineChannel) const
Returns APA/crate in installation notation.
unsigned int SSPAPAFromOfflineChannel(unsigned int offlineChannel) const
unsigned int SSPOfflineChannelFromOnlineChannel(unsigned int onlineChannel)
unsigned int SSPWithinAPAFromOfflineChannel(unsigned int offlineChannel) const
unsigned int GetOfflineNumberFromDetectorElements(unsigned int crate, unsigned int slot, unsigned int fiber, unsigned int fembchannel, FelixOrRCE frswitch)
unsigned int FEMBChannelFromOfflineChannel(unsigned int offlineChannel) const
Returns FEMB channel.
void SSP_check_offline_channel(unsigned int offlineChannel) const
unsigned int PlaneFromOfflineChannel(unsigned int offlineChannel) const
Returns plane.
Including Qt Headers.