11 #include <arich/dbobjects/ARICHCopperMapping.h>
12 #include <framework/logging/Logger.h>
14 #include <arich/dbobjects/ARICHMergerMapping.h>
23 ARICHCopperMapping::ARICHCopperMapping()
25 m_merger2copper.assign(N_MERGERS, std::make_pair(0, 0));
28 unsigned ARICHCopperMapping::getCopperID(
unsigned mergerID)
const
31 return (
unsigned)m_merger2copper[mergerID - 1].first;
34 unsigned ARICHCopperMapping::getFinesse(
unsigned mergerID)
const
37 return (
unsigned)m_merger2copper[mergerID - 1].second;
40 void ARICHCopperMapping::addMapping(
unsigned mergerID,
unsigned copperID,
unsigned finesse)
44 if (finesse > 3) B2ERROR(
"ARICHCopperMapping::addMapping: invalid finesse number (0-3)!");
46 m_merger2copper[mergerID - 1] = std::make_pair(copperID, finesse);
48 if (m_copper2merger.find(copperID) == m_copper2merger.end()) {
49 std::vector<uint16_t> mergerList = {0, 0, 0, 0};
50 mergerList[finesse] = mergerID;
51 m_copper2merger.insert(std::pair<uint16_t, std::vector<uint16_t>>((uint16_t)copperID, mergerList));
53 std::vector<uint16_t>& mergerList = m_copper2merger[copperID];
54 mergerList[finesse] = mergerID;
57 if (std::find(m_copperIDs.begin(), m_copperIDs.end(), uint16_t(copperID)) == m_copperIDs.end()) m_copperIDs.push_back(copperID);
60 unsigned ARICHCopperMapping::getMergerID(
unsigned copperID,
unsigned finesse)
const
62 if (finesse > 3) B2ERROR(
"ARICHCopperMapping::getMergerID: invalid finesse number (0-3)!");
63 auto it = m_copper2merger.find(copperID);
64 if (it == m_copper2merger.end())
return 0;
65 return (
unsigned)it->second[finesse];
68 void ARICHCopperMapping::print()
const
71 cout <<
"Mapping of merger to copper boards" << endl;
73 for (
auto copper : m_copperIDs) {
74 cout <<
" Merger boards connected to copper board " << copper << endl;
75 for (
int i = 0; i < 4; i++) {
76 if (getMergerID(copper, i)) cout <<
" Finesse " << i <<
": " << getMergerID(copper, i) << endl;
77 else cout <<
" Finesse " << i <<
": not connected" << endl;