Belle II Software  release-05-02-19
TOPASICChannel.h
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2015 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Marko Staric *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 
11 #pragma once
12 
13 #include <TObject.h>
14 #include <top/dbobjects/TOPASICPedestals.h>
15 #include <top/dbobjects/TOPASICGains.h>
16 #include <vector>
17 
18 namespace Belle2 {
27  class TOPASICChannel: public TObject {
28  public:
29 
34  {
35  }
36 
43  TOPASICChannel(int moduleID, unsigned channel, int numWindows):
44  m_moduleID(moduleID), m_channel(channel)
45  {
46  for (int i = 0; i < numWindows; i++) m_pedestals.push_back(NULL);
47  }
48 
52  TOPASICChannel(const TOPASICChannel& chan): TObject()
53  {
54  *this = chan;
55  }
56 
61  {
62  if (this != &chan) {
63  m_moduleID = chan.getModuleID();
64  m_channel = chan.getChannel();
65  for (auto& pedestals : m_pedestals) {
66  if (pedestals) delete pedestals;
67  }
68  m_pedestals = chan.getPedestals();
69  for (auto& pedestals : m_pedestals) {
70  if (pedestals) pedestals = new TOPASICPedestals(*pedestals);
71  }
72  for (auto& gains : m_gains) {
73  if (gains) delete gains;
74  }
75  m_gains = chan.getGains();
76  for (auto& gains : m_gains) {
77  if (gains) gains = new TOPASICGains(*gains);
78  }
79  }
80  return *this;
81  }
82 
87  {
88  for (auto& window : m_pedestals) {
89  if (window) delete window;
90  }
91  for (auto& window : m_gains) {
92  if (window) delete window;
93  }
94  }
95 
101  bool setPedestals(const TOPASICPedestals& pedestals)
102  {
103  unsigned i = pedestals.getASICWindow();
104  if (i < m_pedestals.size()) {
105  if (m_pedestals[i]) {
106  *m_pedestals[i] = pedestals;
107  } else {
108  m_pedestals[i] = new TOPASICPedestals(pedestals);
109  }
110  return true;
111  }
112  return false;
113  }
114 
120  bool setGains(const TOPASICGains& gains)
121  {
122  if (m_gains.empty()) {
123  for (unsigned i = 0; i < m_pedestals.size(); i++) m_gains.push_back(NULL);
124  }
125  unsigned i = gains.getASICWindow();
126  if (i < m_gains.size()) {
127  if (m_gains[i]) {
128  *m_gains[i] = gains;
129  } else {
130  m_gains[i] = new TOPASICGains(gains);
131  }
132  return true;
133  }
134  return false;
135  }
136 
141  int getModuleID() const {return m_moduleID;}
142 
147  unsigned getChannel() const {return m_channel;}
148 
153  unsigned getNumofWindows() const
154  {
155  return m_pedestals.size();
156  }
157 
163  const TOPASICPedestals* getPedestals(unsigned window) const
164  {
165  if (window < m_pedestals.size()) return m_pedestals[window];
166  return NULL;
167  }
168 
173  const std::vector<TOPASICPedestals*>& getPedestals() const {return m_pedestals;}
174 
180  const TOPASICGains* getGains(unsigned window) const
181  {
182  if (window < m_gains.size()) return m_gains[window];
183  if (window < m_pedestals.size()) return &m_defaultGain;
184  return NULL;
185  }
186 
191  const std::vector<TOPASICGains*>& getGains() const {return m_gains;}
192 
197  unsigned getNumofGoodWindows() const
198  {
199  unsigned n = 0;
200  for (auto& pedestal : m_pedestals) if (pedestal) n++;
201  return n;
202  }
203 
204 
205  private:
206 
207  int m_moduleID = 0;
208  unsigned m_channel = 0;
209  std::vector<TOPASICPedestals*> m_pedestals;
210  std::vector<TOPASICGains*> m_gains;
216  };
217 
219 } // end namespace Belle2
220 
Belle2::TOPASICChannel::m_channel
unsigned m_channel
hardware channel number
Definition: TOPASICChannel.h:216
Belle2::TOPASICChannel::m_defaultGain
TOPASICGains m_defaultGain
default gain
Definition: TOPASICChannel.h:220
Belle2::TOPASICChannel::setGains
bool setGains(const TOPASICGains &gains)
Set gains of a single ASIC window.
Definition: TOPASICChannel.h:128
Belle2::TOPASICChannel::ClassDef
ClassDef(TOPASICChannel, 4)
ClassDef.
Belle2::TOPASICChannel
Calibration constants of a singe ASIC channel: pedestals, gains and time axis.
Definition: TOPASICChannel.h:35
Belle2::TOPASICChannel::getGains
const std::vector< TOPASICGains * > & getGains() const
Returns a vector of gains.
Definition: TOPASICChannel.h:199
Belle2::TOPASICChannel::TOPASICChannel
TOPASICChannel()
Default constructor.
Definition: TOPASICChannel.h:41
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::TOPASICChannel::setPedestals
bool setPedestals(const TOPASICPedestals &pedestals)
Set pedestals of a single ASIC window.
Definition: TOPASICChannel.h:109
Belle2::TOPASICChannel::getNumofGoodWindows
unsigned getNumofGoodWindows() const
Return number of good ASIC windows (e.g.
Definition: TOPASICChannel.h:205
Belle2::TOPASICChannel::getNumofWindows
unsigned getNumofWindows() const
Return number of ASIC windows.
Definition: TOPASICChannel.h:161
Belle2::TOPASICPedestals::getASICWindow
unsigned getASICWindow() const
Return ASIC window number.
Definition: TOPASICPedestals.h:74
Belle2::TOPASICChannel::~TOPASICChannel
~TOPASICChannel()
Destructor.
Definition: TOPASICChannel.h:94
Belle2::TOPASICChannel::getChannel
unsigned getChannel() const
Return hardware channel number.
Definition: TOPASICChannel.h:155
Belle2::TOPASICChannel::m_gains
std::vector< TOPASICGains * > m_gains
gains
Definition: TOPASICChannel.h:218
Belle2::TOPASICChannel::getModuleID
int getModuleID() const
Return module ID.
Definition: TOPASICChannel.h:149
Belle2::TOPASICChannel::m_moduleID
int m_moduleID
module ID
Definition: TOPASICChannel.h:215
Belle2::TOPASICChannel::m_pedestals
std::vector< TOPASICPedestals * > m_pedestals
pedestals
Definition: TOPASICChannel.h:217
Belle2::TOPASICChannel::getPedestals
const std::vector< TOPASICPedestals * > & getPedestals() const
Returns a vector of pedestals.
Definition: TOPASICChannel.h:181
Belle2::TOPASICGains
Calibration constants of a single ASIC window: gains.
Definition: TOPASICGains.h:32
Belle2::TOPASICChannel::operator=
TOPASICChannel & operator=(const TOPASICChannel &chan)
Assignment operator.
Definition: TOPASICChannel.h:68
Belle2::TOPASICPedestals
Calibration constants of a single ASIC window: pedestals.
Definition: TOPASICPedestals.h:34