47 unordered_set<unsigned short> scrodIDs;
48 unordered_set<string> coppers;
49 unordered_set<int> modules;
53 for (
const GearDir& topModule : frontEndMapping.
getNodes(
"TOPModule")) {
55 int moduleCNumber = topModule.getInt(
"@CNumber");
56 int moduleID = topModule.getInt(
"moduleID");
57 if (moduleID == 0)
continue;
58 if (moduleID < 0 or moduleID > c_numModules) {
59 B2ERROR(
"TOP::FrontEndMapper: invalid moduleID in xml file"
60 <<
LogVar(
"moduleID", moduleID)
61 <<
LogVar(
"path", topModule.getPath()));
65 bool moduleMapped =
false;
68 int col = boardstack.getInt(
"@col");
69 if (col < 0 or col >= c_numColumns) {
70 B2ERROR(
"TOP::FrontEndMapper: invalid boardstack number in xml file"
71 <<
LogVar(
"moduleID", moduleID)
72 <<
LogVar(
"boardstack", col)
73 <<
LogVar(
"path", boardstack.getPath()));
76 if (!modules.insert(moduleID * c_numColumns + col).second) {
77 B2ERROR(
"TOP::FrontEndMapper: this boardstack is already mapped."
78 <<
LogVar(
"moduleID", moduleID)
79 <<
LogVar(
"boardstack", col)
80 <<
LogVar(
"path", boardstack.getPath()));
84 unsigned short scrodID = (
unsigned short) boardstack.getInt(
"SCRODid");
85 if (!scrodIDs.insert(scrodID).second) {
86 B2ERROR(
"TOP::FrontEndMapper: this SCROD ID is already used."
87 <<
LogVar(
"moduleID", moduleID)
88 <<
LogVar(
"boardstack", col)
89 <<
LogVar(
"scrod", scrodID)
90 <<
LogVar(
"path", boardstack.getPath() +
"/SCRODid"));
94 string finesseSlot = boardstack.getString(
"FinesseSlot");
96 if (finesseSlot ==
"A") {finesse = 0;}
97 else if (finesseSlot ==
"B") {finesse = 1;}
98 else if (finesseSlot ==
"C") {finesse = 2;}
99 else if (finesseSlot ==
"D") {finesse = 3;}
101 B2ERROR(
"TOP::FrontEndMapper: invalid finesse slot (valid are A, B, C, D)."
102 <<
LogVar(
"FinesseSlot", finesseSlot)
103 <<
LogVar(
"path", boardstack.getPath() +
"/FinesseSlot"));
107 unsigned copperID = (unsigned) boardstack.getInt(
"COPPERid");
109 string copper = boardstack.getString(
"COPPERid") +
" " + finesseSlot;
110 if (!coppers.insert(copper).second) {
111 B2ERROR(
"TOP::FrontEndMapper: this COPPER ID is already used."
112 <<
LogVar(
"moduleID", moduleID)
113 <<
LogVar(
"boardstack", col)
114 <<
LogVar(
"copperID", copper)
115 <<
LogVar(
"path", boardstack.getPath() +
"/COPPERid"));
119 TOPFrontEndMap feemap(moduleID, moduleCNumber, col, scrodID, copperID, finesse,
124 if (moduleMapped) numModules++;
130 m_fromModule[feemap.getModuleID() - 1][feemap.getBoardstackNumber()] = &feemap;
132 m_fromCopper[feemap.getCopperID() * 4 + feemap.getFinesseSlot()] = &feemap;
136 B2INFO(
"TOP::FrontEndMapper: " <<
m_mapping.size() <<
" SCROD's mapped to "
137 << numModules <<
" TOP module(s)");
215 cout <<
" Mapping of TOP front-end electronics" << endl << endl;
217 const char label[5] =
"ABCD";
218 for (
int i = 0; i < c_numModules; i++) {
219 int moduleID = i + 1;
220 cout <<
" slot " << moduleID
222 for (
int bs = 0; bs < c_numColumns; bs++) {
223 const auto* map =
getMap(moduleID, bs);
226 cout <<
" scrod " << map->getScrodID();
227 if (map->getScrodID() < 10) cout <<
" ";
228 if (map->getScrodID() < 100) cout <<
" ";
229 cout <<
" copper " << map->getCopperID();
230 cout <<
" " << label[map->getFinesseSlot()];