DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
PD2HDChannelMapSP.cpp
Go to the documentation of this file.
1
2// Class: PD2HDChannelMapSP
3// Module type: standalone algorithm
4// File: PD2HDChannelMapSP.cxx
5// Author: Tom Junk, May 2022
6//
7// Implementation of hardware-offline channel mapping reading from a file.
9
10#include "PD2HDChannelMapSP.h"
11
12#include <fstream>
13#include <iostream>
14#include <sstream>
15
16// so far, nothing needs to be done in the constructor
17
19
20void
22{
23 std::ifstream inFile(fullname, std::ios::in);
24 std::string line;
25
26 while (std::getline(inFile, line)) {
27 std::stringstream linestream(line);
28
29 HDChanInfo_t chanInfo;
30 linestream >> chanInfo.offlchan >> chanInfo.crate >> chanInfo.APAName >> chanInfo.wib >> chanInfo.link >>
31 chanInfo.femb_on_link >> chanInfo.cebchan >> chanInfo.plane >> chanInfo.chan_in_plane >> chanInfo.femb >>
32 chanInfo.asic >> chanInfo.asicchan >> chanInfo.wibframechan;
33
34 chanInfo.valid = true;
35
36 // fill maps.
37
39
40 DetToChanInfo[chanInfo.crate][chanInfo.wib][chanInfo.link][chanInfo.wibframechan] = chanInfo;
41 OfflToChanInfo[chanInfo.offlchan] = chanInfo;
42 }
43 inFile.close();
44}
45
48 unsigned int slot,
49 unsigned int link,
50 unsigned int wibframechan) const
51{
52
53 unsigned int wib = slot + 1;
54
55 HDChanInfo_t badInfo = {};
56 badInfo.valid = false;
57
58 // a hack -- ununderstood crates are mapped to crate 2
59 // for use in the Coldbox
60 // crate 2 has the lowest-numbered offline channels
61 // data with two ununderstood crates, or an ununderstood crate and crate 2,
62 // will have duplicate channels.
63
64 auto fm1 = DetToChanInfo.find(crate);
65 if (fm1 == DetToChanInfo.end()) {
66 unsigned int substituteCrate = 2;
67 fm1 = DetToChanInfo.find(substituteCrate);
68 if (fm1 == DetToChanInfo.end())
69 return badInfo;
70 }
71 auto& m1 = fm1->second;
72
73 auto fm2 = m1.find(wib);
74 if (fm2 == m1.end())
75 return badInfo;
76 auto& m2 = fm2->second;
77
78 auto fm3 = m2.find(link);
79 if (fm3 == m2.end())
80 return badInfo;
81 auto& m3 = fm3->second;
82
83 auto fm4 = m3.find(wibframechan);
84 if (fm4 == m3.end())
85 return badInfo;
86 return fm4->second;
87}
88
90dune::PD2HDChannelMapSP::GetChanInfoFromOfflChan(unsigned int offlineChannel) const
91{
92 auto ci = OfflToChanInfo.find(offlineChannel);
93 if (ci == OfflToChanInfo.end()) {
94 HDChanInfo_t badInfo = {};
95 badInfo.valid = false;
96 return badInfo;
97 }
98 return ci->second;
99}
void ReadMapFromFile(std::string &fullname)
struct dune::PD2HDChannelMapSP::HDChanInfo HDChanInfo_t
std::unordered_map< unsigned int, std::unordered_map< unsigned int, std::unordered_map< unsigned int, std::unordered_map< unsigned int, HDChanInfo_t > > > > DetToChanInfo
std::unordered_map< unsigned int, HDChanInfo_t > OfflToChanInfo
HDChanInfo_t GetChanInfoFromOfflChan(unsigned int offlchan) const
void check_offline_channel(unsigned int offlineChannel) const
HDChanInfo_t GetChanInfoFromWIBElements(unsigned int crate, unsigned int slot, unsigned int link, unsigned int wibframechan) const
Definition wib.pb.cc:23