Belle II Software  release-05-01-25
CDCWireHitRequirements.h
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2016 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: CDC and tracking group *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 
11 #pragma once
12 
13 #include <TObject.h>
14 #include <framework/logging/Logger.h>
15 #include <boost/property_tree/ptree.hpp>
16 #include <boost/property_tree/json_parser.hpp>
17 
18 namespace Belle2 {
36  class CDCWireHitRequirements: public TObject {
37 
43  typedef std::pair<short, short> intRange_t;
49  typedef std::pair<float, float> floatRange_t;
50 
51  public:
52 
56  CDCWireHitRequirements() = default;
57 
61  explicit CDCWireHitRequirements(boost::property_tree::ptree tree)
62  {
63 
64  try {
65 
66  m_ADCRangeFirstSuperLayer = std::make_pair(tree.get<short>("FirstSuperLayer.ADC.min"),
67  tree.get<short>("FirstSuperLayer.ADC.max"));
68  m_ADCRangeOuterSuperLayers = std::make_pair(tree.get<short>("OuterSuperLayers.ADC.min"),
69  tree.get<short>("OuterSuperLayers.ADC.max"));
70 
71  m_TOTRangeFirstSuperLayer = std::make_pair(tree.get<short>("FirstSuperLayer.TOT.min"),
72  tree.get<short>("FirstSuperLayer.TOT.max"));
73  m_TOTRangeOuterSuperLayers = std::make_pair(tree.get<short>("OuterSuperLayers.TOT.min"),
74  tree.get<short>("OuterSuperLayers.TOT.max"));
75 
76  m_ADCOverTOTRangeFirstSuperLayer = std::make_pair(tree.get<float>("FirstSuperLayer.ADCOverTOT.min"),
77  tree.get<float>("FirstSuperLayer.ADCOverTOT.max"));
78  m_ADCOverTOTRangeOuterSuperLayers = std::make_pair(tree.get<float>("OuterSuperLayers.ADCOverTOT.min"),
79  tree.get<float>("OuterSuperLayers.ADCOverTOT.max"));
80 
81  for (boost::property_tree::ptree::value_type& row : tree.get_child("FirstSuperLayer.MaxADCGivenTOT")) {
82  m_MaxADCGivenTOTFirstSuperLayer.insert(std::make_pair(row.second.get<short>("givenTOT"),
83  row.second.get<short>("maxADC")));
84  }
85  for (boost::property_tree::ptree::value_type& row : tree.get_child("OuterSuperLayers.MaxADCGivenTOT")) {
86  m_MaxADCGivenTOTOuterSuperLayers.insert(std::make_pair(row.second.get<short>("givenTOT"),
87  row.second.get<short>("maxADC")));
88  }
89 
90  } catch (boost::property_tree::ptree_error& e) {
91  // Any problem when parsing the tree?
92  B2FATAL("Cannot parse CDCWireHit requirement information: " << e.what());
93  }
94 
95  }
96 
100  ~CDCWireHitRequirements() = default;
101 
104  {
106  }
107 
109  void setADCRangeFirstSuperLayer(const intRange_t& ADCRangeFirstSuperLayer)
110  {
111  m_ADCRangeFirstSuperLayer = ADCRangeFirstSuperLayer;
112  }
113 
116  {
118  }
119 
121  void setADCRangeOuterSuperLayers(const intRange_t& ADCRangeOuterSuperLayers)
122  {
123  m_ADCRangeOuterSuperLayers = ADCRangeOuterSuperLayers;
124  }
125 
128  {
130  }
131 
133  void setTOTRangeFirstSuperLayer(const intRange_t& TOTRangeFirstSuperLayer)
134  {
135  m_TOTRangeFirstSuperLayer = TOTRangeFirstSuperLayer;
136  }
137 
140  {
142  }
143 
145  void setTOTRangeOuterSuperLayers(const intRange_t& TOTRangeOuterSuperLayers)
146  {
147  m_TOTRangeOuterSuperLayers = TOTRangeOuterSuperLayers;
148  }
149 
152  {
154  }
155 
157  void setADCOverTOTRangeFirstSuperLayer(const floatRange_t& ADCOverTOTRangeFirstSuperLayer)
158  {
159  m_ADCOverTOTRangeFirstSuperLayer = ADCOverTOTRangeFirstSuperLayer;
160  }
161 
164  {
166  }
167 
169  void setADCOverTOTRangeOuterSuperLayers(const floatRange_t& ADCOverTOTRangeOuterSuperLayers)
170  {
171  m_ADCOverTOTRangeOuterSuperLayers = ADCOverTOTRangeOuterSuperLayers;
172  }
173 
175  const std::map<short, short> getMaxADCGivenTOTFirstSuperLayer() const
176  {
178  }
179 
181  short getMaxADCGivenTOTFirstSuperLayer(short tot) const
182  {
183  // Find maxADC given TOT
184  const auto it = m_MaxADCGivenTOTFirstSuperLayer.find(tot);
185 
186  // Check if TOT exists in map or not
187  if (it != m_MaxADCGivenTOTFirstSuperLayer.end()) {
188  return it->second;
189  } else {
190  // By convention, -1 stands for unbounded
191  return -1;
192  }
193  }
194 
196  void setMaxADCGivenTOTFirstSuperLayer(const std::map<short, short>& MaxADCGivenTOTFirstSuperLayer)
197  {
198  m_MaxADCGivenTOTFirstSuperLayer = MaxADCGivenTOTFirstSuperLayer;
199  }
200 
202  const std::map<short, short> getMaxADCGivenTOTOuterSuperLayers() const
203  {
205  }
206 
208  short getMaxADCGivenTOTOuterSuperLayers(short tot) const
209  {
210  // Find maxADC given TOT
211  const auto it = m_MaxADCGivenTOTOuterSuperLayers.find(tot);
212 
213  // Check if TOT exists in map or not
214  if (it != m_MaxADCGivenTOTOuterSuperLayers.end()) {
215  return it->second;
216  } else {
217  // By convention, -1 stands for unbounded
218  return -1;
219  }
220  }
221 
223  void setMaxADCGivenTOTOuterSuperLayers(const std::map<short, short>& MaxADCGivenTOTOuterSuperLayers)
224  {
225  m_MaxADCGivenTOTOuterSuperLayers = MaxADCGivenTOTOuterSuperLayers;
226  }
227 
229  void dump() const
230  {
231  std::string MaxADCGivenTOTFirstSuperLayer = "";
232  for (auto& v : getMaxADCGivenTOTFirstSuperLayer()) {
233  MaxADCGivenTOTFirstSuperLayer += "If TOT == " + std::to_string(v.first) +
234  ", then ADC <= " + std::to_string(v.second) + "\n";
235  }
236 
237  std::string MaxADCGivenTOTOuterSuperLayers = "";
238  for (auto& v : getMaxADCGivenTOTOuterSuperLayers()) {
239  MaxADCGivenTOTOuterSuperLayers += "If TOT == " + std::to_string(v.first) +
240  ", then ADC <= " + std::to_string(v.second) + "\n";
241  }
242 
243  B2INFO(" " << std::endl
244  << "=======================================================" << std::endl
245  << "CDCWireHit requirements (-1 values stand for unbounded)" << std::endl
246  << "=======================================================" << std::endl
247  << "First Super Layer: " << std::endl
248  << getADCRangeFirstSuperLayer().first << " <= ADC <= " << getADCRangeFirstSuperLayer().second << std::endl
249  << getTOTRangeFirstSuperLayer().first << " <= TOT <= " << getTOTRangeFirstSuperLayer().second << std::endl
250  << getADCOverTOTRangeFirstSuperLayer().first << " <= ADC/TOT <= " << getADCOverTOTRangeFirstSuperLayer().second << std::endl
251  << MaxADCGivenTOTFirstSuperLayer << std::endl
252  << "Outer Super Layers: " << std::endl
253  << getADCRangeOuterSuperLayers().first << " <= ADC <= " << getADCRangeOuterSuperLayers().second << std::endl
254  << getTOTRangeOuterSuperLayers().first << " <= TOT <= " << getTOTRangeOuterSuperLayers().second << std::endl
255  << getADCOverTOTRangeOuterSuperLayers().first << " <= ADC/TOT <= " << getADCOverTOTRangeOuterSuperLayers().second << std::endl
256  << MaxADCGivenTOTOuterSuperLayers
257  << "=======================================================" << std::endl);
258 
259  }
260 
261  private:
262 
271 
280 
289 
293  std::map<short, short> m_MaxADCGivenTOTFirstSuperLayer = {};
297  std::map<short, short> m_MaxADCGivenTOTOuterSuperLayers = {};
298 
301  };
302 
304 } // end namespace Belle2
Belle2::CDCWireHitRequirements::setADCOverTOTRangeFirstSuperLayer
void setADCOverTOTRangeFirstSuperLayer(const floatRange_t &ADCOverTOTRangeFirstSuperLayer)
Set allowed ADC/TOT range (first super layer of CDC). An upper value of -1 stands for unbounded.
Definition: CDCWireHitRequirements.h:165
Belle2::CDCWireHitRequirements::getTOTRangeOuterSuperLayers
const intRange_t & getTOTRangeOuterSuperLayers() const
Get allowed TOT range (outer super layers of CDC). An upper value of -1 stands for unbounded.
Definition: CDCWireHitRequirements.h:147
Belle2::CDCWireHitRequirements::ClassDef
ClassDef(CDCWireHitRequirements, 2)
ROOT ClassDef.
prepareAsicCrosstalkSimDB.e
e
aux.
Definition: prepareAsicCrosstalkSimDB.py:53
Belle2::CDCWireHitRequirements::dump
void dump() const
Print content.
Definition: CDCWireHitRequirements.h:237
Belle2::CDCWireHitRequirements::m_ADCRangeOuterSuperLayers
intRange_t m_ADCRangeOuterSuperLayers
Allowed ADC range (outer super layers of CDC).
Definition: CDCWireHitRequirements.h:278
Belle2::CDCWireHitRequirements::getADCRangeFirstSuperLayer
const intRange_t & getADCRangeFirstSuperLayer() const
Get allowed ADC range (first super layer of CDC). An upper value of -1 stands for unbounded.
Definition: CDCWireHitRequirements.h:111
Belle2::CDCWireHitRequirements::m_ADCRangeFirstSuperLayer
intRange_t m_ADCRangeFirstSuperLayer
Allowed ADC range (first super layer of CDC).
Definition: CDCWireHitRequirements.h:274
Belle2::CDCWireHitRequirements::getTOTRangeFirstSuperLayer
const intRange_t & getTOTRangeFirstSuperLayer() const
Get allowed TOT range (first super layer of CDC). An upper value of -1 stands for unbounded.
Definition: CDCWireHitRequirements.h:135
Belle2::CDCWireHitRequirements::getADCOverTOTRangeOuterSuperLayers
const floatRange_t & getADCOverTOTRangeOuterSuperLayers() const
Get allowed ADC/TOT range (outer super layers of CDC). An upper value of -1 stands for unbounded.
Definition: CDCWireHitRequirements.h:171
Belle2::CDCWireHitRequirements::getADCOverTOTRangeFirstSuperLayer
const floatRange_t & getADCOverTOTRangeFirstSuperLayer() const
Get allowed ADC/TOT range (first super layer of CDC). An upper value of -1 stands for unbounded.
Definition: CDCWireHitRequirements.h:159
Belle2::CDCWireHitRequirements::setADCOverTOTRangeOuterSuperLayers
void setADCOverTOTRangeOuterSuperLayers(const floatRange_t &ADCOverTOTRangeOuterSuperLayers)
Set allowed ADC/TOT range (outer super layers of CDC). An upper value of -1 stands for unbounded.
Definition: CDCWireHitRequirements.h:177
Belle2::CDCWireHitRequirements::setTOTRangeOuterSuperLayers
void setTOTRangeOuterSuperLayers(const intRange_t &TOTRangeOuterSuperLayers)
Set allowed TOT range (outer super layers of CDC). An upper value of -1 stands for unbounded.
Definition: CDCWireHitRequirements.h:153
Belle2::CDCWireHitRequirements::getMaxADCGivenTOTFirstSuperLayer
const std::map< short, short > getMaxADCGivenTOTFirstSuperLayer() const
Get map of maximum allowed ADC given TOT (first super layer of CDC). An upper value of -1 stands for ...
Definition: CDCWireHitRequirements.h:183
Belle2::CDCWireHitRequirements::m_MaxADCGivenTOTFirstSuperLayer
std::map< short, short > m_MaxADCGivenTOTFirstSuperLayer
Map of conditions of the type: if TOT==x, then ADC<=y (first super layer of CDC).
Definition: CDCWireHitRequirements.h:301
Belle2::CDCWireHitRequirements::m_TOTRangeFirstSuperLayer
intRange_t m_TOTRangeFirstSuperLayer
Allowed TOT range (first super layer of CDC).
Definition: CDCWireHitRequirements.h:283
Belle2::CDCWireHitRequirements::m_ADCOverTOTRangeFirstSuperLayer
floatRange_t m_ADCOverTOTRangeFirstSuperLayer
Allowed ADC/TOT range (first super layer of CDC).
Definition: CDCWireHitRequirements.h:292
Belle2::CDCWireHitRequirements::CDCWireHitRequirements
CDCWireHitRequirements()=default
Default constructor.
Belle2::CDCWireHitRequirements::setADCRangeOuterSuperLayers
void setADCRangeOuterSuperLayers(const intRange_t &ADCRangeOuterSuperLayers)
Set allowed ADC range (outer super layers of CDC). An upper value of -1 stands for unbounded.
Definition: CDCWireHitRequirements.h:129
Belle2::CDCWireHitRequirements::m_MaxADCGivenTOTOuterSuperLayers
std::map< short, short > m_MaxADCGivenTOTOuterSuperLayers
Map of conditions of the type: if TOT==x, then ADC<=y (outer super layers of CDC).
Definition: CDCWireHitRequirements.h:305
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::CDCWireHitRequirements::m_ADCOverTOTRangeOuterSuperLayers
floatRange_t m_ADCOverTOTRangeOuterSuperLayers
Allowed ADC/TOT range (outer super layers of CDC).
Definition: CDCWireHitRequirements.h:296
Belle2::CDCWireHitRequirements::~CDCWireHitRequirements
~CDCWireHitRequirements()=default
Destructor.
Belle2::CDCWireHitRequirements::floatRange_t
std::pair< float, float > floatRange_t
Float range.
Definition: CDCWireHitRequirements.h:57
Belle2::CDCWireHitRequirements::setADCRangeFirstSuperLayer
void setADCRangeFirstSuperLayer(const intRange_t &ADCRangeFirstSuperLayer)
Set allowed ADC range (first super layer of CDC). An upper value of -1 stands for unbounded.
Definition: CDCWireHitRequirements.h:117
Belle2::CDCWireHitRequirements::intRange_t
std::pair< short, short > intRange_t
Integer range.
Definition: CDCWireHitRequirements.h:51
Belle2::CDCWireHitRequirements::m_TOTRangeOuterSuperLayers
intRange_t m_TOTRangeOuterSuperLayers
Allowed TOT range (outer super layers of CDC).
Definition: CDCWireHitRequirements.h:287
Belle2::CDCWireHitRequirements::setTOTRangeFirstSuperLayer
void setTOTRangeFirstSuperLayer(const intRange_t &TOTRangeFirstSuperLayer)
Set allowed TOT range (first super layer of CDC). An upper value of -1 stands for unbounded.
Definition: CDCWireHitRequirements.h:141
Belle2::CDCWireHitRequirements::getMaxADCGivenTOTOuterSuperLayers
const std::map< short, short > getMaxADCGivenTOTOuterSuperLayers() const
Get map of maximum allowed ADC given TOT (outer super layers of CDC). An upper value of -1 stands for...
Definition: CDCWireHitRequirements.h:210
Belle2::CDCWireHitRequirements::setMaxADCGivenTOTFirstSuperLayer
void setMaxADCGivenTOTFirstSuperLayer(const std::map< short, short > &MaxADCGivenTOTFirstSuperLayer)
Set map of maximum allowed ADC given TOT (first super layer of CDC). An upper value of -1 stands for ...
Definition: CDCWireHitRequirements.h:204
Belle2::CDCWireHitRequirements::getADCRangeOuterSuperLayers
const intRange_t & getADCRangeOuterSuperLayers() const
Get allowed ADC range (outer super layers of CDC). An upper value of -1 stands for unbounded.
Definition: CDCWireHitRequirements.h:123
Belle2::CDCWireHitRequirements::setMaxADCGivenTOTOuterSuperLayers
void setMaxADCGivenTOTOuterSuperLayers(const std::map< short, short > &MaxADCGivenTOTOuterSuperLayers)
Set map of maximum allowed ADC given TOT (outer super layers of CDC). An upper value of -1 stands for...
Definition: CDCWireHitRequirements.h:231