Belle II Software  release-05-01-25
ARICHCopperMapping.cc
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2010 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Luka Santelj *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 
11 #include <arich/dbobjects/ARICHCopperMapping.h>
12 #include <framework/logging/Logger.h>
13 
14 #include <arich/dbobjects/ARICHMergerMapping.h>
15 
16 #include <iostream>
17 #include <vector>
18 #include <algorithm>
19 
20 using namespace std;
21 using namespace Belle2;
22 
23 ARICHCopperMapping::ARICHCopperMapping()
24 {
25  m_merger2copper.assign(N_MERGERS, std::make_pair(0, 0));
26 }
27 
28 unsigned ARICHCopperMapping::getCopperID(unsigned mergerID) const
29 {
30 // if (mergerID > N_MERGERS + 1 || mergerID == 0) B2ERROR("ARICHCopperMapping::getCopperID: invalid merger ID number!");
31  return (unsigned)m_merger2copper[mergerID - 1].first;
32 }
33 
34 unsigned ARICHCopperMapping::getFinesse(unsigned mergerID) const
35 {
36 // if (mergerID > N_MERGERS + 1 || mergerID == 0) B2ERROR("ARICHCopperMapping::getFinesse: invalid merger ID number!");
37  return (unsigned)m_merger2copper[mergerID - 1].second;
38 }
39 
40 void ARICHCopperMapping::addMapping(unsigned mergerID, unsigned copperID, unsigned finesse)
41 {
42 
43 // if (mergerID > N_MERGERS + 1 || mergerID == 0) B2ERROR("ARICHCopperMapping::addMapping: invalid merger ID number!");
44  if (finesse > 3) B2ERROR("ARICHCopperMapping::addMapping: invalid finesse number (0-3)!");
45 
46  m_merger2copper[mergerID - 1] = std::make_pair(copperID, finesse);
47 
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));
52  } else {
53  std::vector<uint16_t>& mergerList = m_copper2merger[copperID];
54  mergerList[finesse] = mergerID;
55  }
56 
57  if (std::find(m_copperIDs.begin(), m_copperIDs.end(), uint16_t(copperID)) == m_copperIDs.end()) m_copperIDs.push_back(copperID);
58 }
59 
60 unsigned ARICHCopperMapping::getMergerID(unsigned copperID, unsigned finesse) const
61 {
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];
66 }
67 
68 void ARICHCopperMapping::print() const
69 {
70  cout << endl;
71  cout << "Mapping of merger to copper boards" << endl;
72  cout << 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;
78  }
79  }
80 }
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19