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 <iostream>
13#include <fstream>
14#include <sstream>
15
16// so far, nothing needs to be done in the constructor
17
21
23{
24 std::ifstream inFile(fullname, std::ios::in);
25 std::string line;
26
27 while (std::getline(inFile,line)) {
28 std::stringstream linestream(line);
29
30 HDChanInfo_t chanInfo;
31 linestream
32 >> chanInfo.offlchan
33 >> chanInfo.crate
34 >> chanInfo.APAName
35 >> chanInfo.wib
36 >> chanInfo.link
37 >> chanInfo.femb_on_link
38 >> chanInfo.cebchan
39 >> chanInfo.plane
40 >> chanInfo.chan_in_plane
41 >> chanInfo.femb
42 >> chanInfo.asic
43 >> chanInfo.asicchan
44 >> chanInfo.wibframechan;
45
46 chanInfo.valid = true;
47
48 // fill maps.
49
50 check_offline_channel(chanInfo.offlchan);
51
52 DetToChanInfo[chanInfo.crate][chanInfo.wib][chanInfo.link][chanInfo.wibframechan] = chanInfo;
53 OfflToChanInfo[chanInfo.offlchan] = chanInfo;
54
55 }
56 inFile.close();
57
58}
59
61 unsigned int crate,
62 unsigned int slot,
63 unsigned int link,
64 unsigned int wibframechan ) const {
65
66 unsigned int wib = slot + 1;
67
68 HDChanInfo_t badInfo = {};
69 badInfo.valid = false;
70
71// a hack -- ununderstood crates are mapped to crate 2
72// for use in the Coldbox
73// crate 2 has the lowest-numbered offline channels
74// data with two ununderstood crates, or an ununderstood crate and crate 2,
75// will have duplicate channels.
76
77 auto fm1 = DetToChanInfo.find(crate);
78 if (fm1 == DetToChanInfo.end())
79 {
80 unsigned int substituteCrate = 2;
81 fm1 = DetToChanInfo.find(substituteCrate);
82 if (fm1 == DetToChanInfo.end()) return badInfo;
83 }
84 auto& m1 = fm1->second;
85
86 auto fm2 = m1.find(wib);
87 if (fm2 == m1.end()) return badInfo;
88 auto& m2 = fm2->second;
89
90 auto fm3 = m2.find(link);
91 if (fm3 == m2.end()) return badInfo;
92 auto& m3 = fm3->second;
93
94 auto fm4 = m3.find(wibframechan);
95 if (fm4 == m3.end()) return badInfo;
96 return fm4->second;
97}
98
99
101 auto ci = OfflToChanInfo.find(offlineChannel);
102 if (ci == OfflToChanInfo.end())
103 {
104 HDChanInfo_t badInfo = {};
105 badInfo.valid = false;
106 return badInfo;
107 }
108 return ci->second;
109
110}
void ReadMapFromFile(std::string &fullname)
HDChanInfo_t GetChanInfoFromOfflChan(unsigned int offlchan) const
HDChanInfo_t GetChanInfoFromWIBElements(unsigned int crate, unsigned int slot, unsigned int link, unsigned int wibframechan) const
Definition wib.pb.cc:23