Belle II Software  release-06-00-14
KLMStripEfficiency.h
1 /**************************************************************************
2  * basf2 (Belle II Analysis Software Framework) *
3  * Author: The Belle II Collaboration *
4  * *
5  * See git log for contributors and copyright holders. *
6  * This file is licensed under LGPL-3.0, see LICENSE.md. *
7  **************************************************************************/
8 
9 #pragma once
10 
11 /* KLM headers. */
12 #include <klm/dataobjects/KLMElementNumbers.h>
13 
14 /* ROOT headers. */
15 #include <TObject.h>
16 
17 /* C++ headers. */
18 #include <cstdint>
19 #include <map>
20 #include <limits>
21 
22 namespace Belle2 {
32  class KLMStripEfficiency: public TObject {
33  public:
34 
39  {
40  }
41 
46  {
47  }
48 
55  void setEfficiency(KLMChannelNumber stripId, float efficiency, float efficiencyError = 0.)
56  {
57  m_efficiency.insert(std::pair<KLMChannelNumber, float>(stripId, efficiency));
58  m_efficiencyError.insert(std::pair<KLMChannelNumber, float>(stripId, efficiencyError));
59  }
60 
71  void setBarrelEfficiency(int section, int sector, int layer, int plane, int strip, float efficiency, float efficiencyError = 0.)
72  {
73  const KLMElementNumbers* elementNumbers = &(KLMElementNumbers::Instance());
74  KLMChannelNumber stripId = elementNumbers->channelNumberBKLM(section, sector, layer, plane, strip);
75  setEfficiency(stripId, efficiency, efficiencyError);
76  }
77 
88  void setEndcapEfficiency(int section, int sector, int layer, int plane, int strip, float efficiency, float efficiencyError = 0.)
89  {
90  const KLMElementNumbers* elementNumbers = &(KLMElementNumbers::Instance());
91  KLMChannelNumber stripId = elementNumbers->channelNumberEKLM(section, sector, layer, plane, strip);
92  setEfficiency(stripId, efficiency, efficiencyError);
93  }
94 
99  float getEfficiency(KLMChannelNumber stripId) const
100  {
101  auto search = m_efficiency.find(stripId);
102  if (search == m_efficiency.end())
103  return std::numeric_limits<float>::quiet_NaN();
104  return search->second;
105  }
106 
115  float getBarrelEfficiency(int section, int sector, int layer, int plane, int strip) const
116  {
117  const KLMElementNumbers* elementNumbers = &(KLMElementNumbers::Instance());
118  KLMChannelNumber stripId = elementNumbers->channelNumberBKLM(section, sector, layer, plane, strip);
119  return getEfficiency(stripId);
120  }
121 
130  float getEndcapEfficiency(int section, int sector, int layer, int plane, int strip) const
131  {
132  const KLMElementNumbers* elementNumbers = &(KLMElementNumbers::Instance());
133  KLMChannelNumber stripId = elementNumbers->channelNumberEKLM(section, sector, layer, plane, strip);
134  return getEfficiency(stripId);
135  }
136 
142  {
143  auto search = m_efficiencyError.find(stripId);
144  if (search == m_efficiencyError.end())
145  return std::numeric_limits<float>::quiet_NaN();
146  return search->second;
147  }
148 
157  float getBarrelEfficiencyError(int section, int sector, int layer, int plane, int strip) const
158  {
159  const KLMElementNumbers* elementNumbers = &(KLMElementNumbers::Instance());
160  KLMChannelNumber stripId = elementNumbers->channelNumberBKLM(section, sector, layer, plane, strip);
161  return getEfficiencyError(stripId);
162  }
163 
172  float getEndcapEfficiencyError(int section, int sector, int layer, int plane, int strip) const
173  {
174  const KLMElementNumbers* elementNumbers = &(KLMElementNumbers::Instance());
175  KLMChannelNumber stripId = elementNumbers->channelNumberEKLM(section, sector, layer, plane, strip);
176  return getEfficiencyError(stripId);
177  }
178 
179  private:
180 
182  std::map<KLMChannelNumber, float> m_efficiency;
183 
185  std::map<KLMChannelNumber, float> m_efficiencyError;
186 
189 
190  };
191 
193 }
KLM element numbers.
KLMChannelNumber channelNumberBKLM(int section, int sector, int layer, int plane, int strip) const
Get channel number for BKLM.
static const KLMElementNumbers & Instance()
Instantiation.
KLMChannelNumber channelNumberEKLM(int section, int sector, int layer, int plane, int strip) const
Get channel number for EKLM.
DBObject used to store the efficiencies of KLM strips.
std::map< KLMChannelNumber, float > m_efficiencyError
KLM strip efficiency error.
float getBarrelEfficiency(int section, int sector, int layer, int plane, int strip) const
Returns efficiency of a given BKLM strip using the geometrical infos.
float getEfficiencyError(KLMChannelNumber stripId) const
Returns error on efficiency of a given KLM strip using directly the stripId.
float getBarrelEfficiencyError(int section, int sector, int layer, int plane, int strip) const
Returns error on efficiency of a given BKLM strip using the geometrical infos.
~KLMStripEfficiency()
Default destructor.
std::map< KLMChannelNumber, float > m_efficiency
KLM strip efficiency.
void setEfficiency(KLMChannelNumber stripId, float efficiency, float efficiencyError=0.)
Set efficiency and relative error for a single KLM strip using directly the stripId.
ClassDef(KLMStripEfficiency, 1)
Class version.
void setEndcapEfficiency(int section, int sector, int layer, int plane, int strip, float efficiency, float efficiencyError=0.)
Set efficiency and relative error for a single EKLM strip using the geometrical infos.
float getEndcapEfficiencyError(int section, int sector, int layer, int plane, int strip) const
Returns error on efficiency of a given EKLM strip using the geometrical infos.
float getEndcapEfficiency(int section, int sector, int layer, int plane, int strip) const
Returns efficiency of a given EKLM strip using the geometrical infos.
void setBarrelEfficiency(int section, int sector, int layer, int plane, int strip, float efficiency, float efficiencyError=0.)
Set efficiency and relative error for a single BKLM strip using the geometrical infos.
float getEfficiency(KLMChannelNumber stripId) const
Returns efficiency of a given KLM strip using directly the stripId.
KLMStripEfficiency()
Default constructor.
uint16_t KLMChannelNumber
Channel number.
Abstract base class for different kinds of events.