11 #include <framework/logging/Logger.h>
13 #include <arich/dbobjects/ARICHMergerMapping.h>
19 ARICHMergerMapping:: ARICHMergerMapping()
21 m_merger2module.assign(N_MERGERS * N_FEB2MERGER, 0);
22 m_module2merger.assign(N_MERGERS * N_FEB2MERGER, 0);
23 m_isMapped.assign(N_MERGERS * N_FEB2MERGER, 0);
26 unsigned ARICHMergerMapping::getModuleID(
unsigned mergerID,
unsigned febSlot)
const
28 if (!(mergerID > 0 && mergerID < N_MERGERS + 1 && febSlot > 0 && febSlot < N_FEB2MERGER + 1)) { B2ERROR(
"ARICHMergerMapping::getModuleID: invalid merger ID " << mergerID <<
" or febSlot " << febSlot);
return 0;}
29 unsigned id = (mergerID - 1) * N_FEB2MERGER + (febSlot - 1);
30 return (
unsigned)m_merger2module[id];
33 unsigned ARICHMergerMapping::getMergerID(
unsigned moduleID)
const
35 if (!m_isMapped[moduleID - 1]) { B2WARNING(
"ARICHMergerMapping::getMergerID: Module " << moduleID <<
" not not mapped to merger!");
return 0;}
36 unsigned id = (unsigned)m_module2merger[moduleID - 1] / N_FEB2MERGER + 1;
40 unsigned ARICHMergerMapping::getFEBSlot(
unsigned moduleID)
const
42 if (!m_isMapped[moduleID - 1]) { B2WARNING(
"ARICHMergerMapping::getMergerID: Module " << moduleID <<
" not not mapped to merger!");
return 0;}
43 unsigned id = (unsigned)m_module2merger[moduleID - 1] % N_FEB2MERGER + 1;
47 unsigned ARICHMergerMapping::getMergerSN(
unsigned mergerID)
const
49 unsigned mergerSN = m_mergerID.find(mergerID)->second;
53 unsigned ARICHMergerMapping::getMergerIDfromSN(
unsigned mergerSN)
const
55 unsigned mergerID = 99;
56 for (
auto& i : m_mergerID) {
if (i.second == mergerSN) mergerID = i.first; }
61 void ARICHMergerMapping::addMapping(
unsigned moduleID,
unsigned mergerID,
unsigned febSlot,
unsigned mergerSN)
66 m_module2merger[moduleID - 1] = (uint16_t)((mergerID - 1) * N_FEB2MERGER + (febSlot - 1));
67 m_merger2module[(mergerID - 1) * N_FEB2MERGER + (febSlot - 1)] = (uint16_t)moduleID;
68 m_isMapped[moduleID - 1] = 1;
70 m_mergerID.insert(std::pair<unsigned, unsigned>(mergerID, mergerSN));
73 void ARICHMergerMapping::print()
const
76 std::cout << std::endl;
77 std::cout <<
"Mapping of modules to mergers" << std::endl;
78 std::cout << std::endl;
79 for (
int i = 1; i < N_MERGERS + 1; i++) {
81 for (
int j = 1; j < N_FEB2MERGER + 1; j++) {
82 if (getModuleID(i, j)) { isUsed =
true;
break;}
85 if (!isUsed)
continue;
86 std::cout <<
" Modules connected to merger " << i <<
" (SN = " << getMergerSN(i) <<
")" << std::endl;
87 for (
int j = 1; j < N_FEB2MERGER + 1; j++) {
88 if (getModuleID(i, j)) std::cout <<
" FEB slot " << j <<
": " << getModuleID(i, j) << std::endl;
89 else std::cout <<
" FEB slot " << j <<
" not connected" << std::endl;