Belle II Software  release-05-01-25
ARICHMergerMapping.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, Manca Mrvar *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 
11 #include <framework/logging/Logger.h>
12 
13 #include <arich/dbobjects/ARICHMergerMapping.h>
14 #include <iostream>
15 
16 using namespace std;
17 using namespace Belle2;
18 
19 ARICHMergerMapping:: ARICHMergerMapping()
20 {
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);
24 }
25 
26 unsigned ARICHMergerMapping::getModuleID(unsigned mergerID, unsigned febSlot) const
27 {
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];
31 }
32 
33 unsigned ARICHMergerMapping::getMergerID(unsigned moduleID) const
34 {
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;
37  return id;
38 }
39 
40 unsigned ARICHMergerMapping::getFEBSlot(unsigned moduleID) const
41 {
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;
44  return id;
45 }
46 
47 unsigned ARICHMergerMapping::getMergerSN(unsigned mergerID) const
48 {
49  unsigned mergerSN = m_mergerID.find(mergerID)->second;
50  return mergerSN;
51 }
52 
53 unsigned ARICHMergerMapping::getMergerIDfromSN(unsigned mergerSN) const
54 {
55  unsigned mergerID = 99;
56  for (auto& i : m_mergerID) { if (i.second == mergerSN) mergerID = i.first; }
57 
58  return mergerID;
59 }
60 
61 void ARICHMergerMapping::addMapping(unsigned moduleID, unsigned mergerID, unsigned febSlot, unsigned mergerSN)
62 {
63 
64 // if (!(mergerID > 0 && mergerID < N_MERGERS + 1 && febSlot > 0 && febSlot < N_FEB2MERGER + 1 && moduleID < N_MERGERS * N_FEB2MERGER)) { B2ERROR("ARICHMergerMapping::addMapping: invalid mergerID/febSlot/moduleID!"); return;}
65 
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;
69 
70  m_mergerID.insert(std::pair<unsigned, unsigned>(mergerID, mergerSN));
71 }
72 
73 void ARICHMergerMapping::print() const
74 {
75 
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++) {
80  bool isUsed = false;
81  for (int j = 1; j < N_FEB2MERGER + 1; j++) {
82  if (getModuleID(i, j)) { isUsed = true; break;}
83  }
84 
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;
90  }
91 
92  }
93 }
94 
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19