Belle II Software  release-05-02-19
BKLMElementNumbers.h
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2019 Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Kirill Chilikin *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 
11 #pragma once
12 
13 /* C++ headers. */
14 #include <cstdint>
15 #include <string>
16 
17 namespace Belle2 {
26  class BKLMElementNumbers {
27 
28  public:
29 
33  enum Section {
34 
37 
39  c_ForwardSection = 1,
40 
41  };
42 
46  enum Sector {
47 
53  c_ChimneySector = 3,
54 
55  };
56 
60  enum Layer {
61 
63  c_FirstRPCLayer = 3,
64 
65  };
66 
70  enum Plane {
71 
73  c_ZPlane = 0,
74 
76  c_PhiPlane = 1,
77 
78  };
79 
84 
89 
98  static uint16_t channelNumber(int section, int sector, int layer, int plane,
99  int strip);
100 
110  static void channelNumberToElementNumbers(
111  uint16_t channel, int* section, int* sector, int* layer, int* plane,
112  int* strip);
113 
121  static uint16_t planeNumber(int section, int sector, int layer, int plane);
122 
131  static void planeNumberToElementNumbers(
132  uint16_t planeGlobal, int* section, int* sector, int* layer, int* plane);
133 
141  static uint16_t moduleNumber(int section, int sector, int layer, bool fatalError = true);
142 
150  static void moduleNumberToElementNumbers(
151  uint16_t module, int* section, int* sector, int* layer);
152 
158  static uint16_t sectorNumber(int section, int sector);
159 
166  static int layerGlobalNumber(int section, int sector, int layer);
167 
175  static int getNStrips(int section, int sector, int layer, int plane);
176 
182  static bool checkSection(int section, bool fatalError = true);
183 
189  static bool checkSector(int sector, bool fatalError = true);
190 
196  static bool checkLayer(int layer, bool fatalError = true);
197 
203  static bool checkPlane(int plane, bool fatalError = true);
204 
214  static bool checkChannelNumber(
215  int section, int sector, int layer, int plane, int strip, bool fatalError = true);
216 
222  static std::string getHSLBName(int copper, int slot);
223 
227  static constexpr int getMaximalSectionNumber()
228  {
229  return m_MaximalSectionNumber;
230  }
231 
235  static constexpr int getMaximalSectorNumber()
236  {
237  return m_MaximalSectorNumber;
238  }
239 
243  static constexpr int getMaximalLayerNumber()
244  {
245  return m_MaximalLayerNumber;
246  }
247 
251  static constexpr int getMaximalPlaneNumber()
252  {
253  return m_MaximalPlaneNumber;
254  }
255 
259  static constexpr int getMaximalSectorGlobalNumber()
260  {
262  }
263 
267  static constexpr int getMaximalLayerGlobalNumber()
268  {
270  }
271 
275  static constexpr int getTotalChannelNumber()
276  {
277  return m_TotalChannelNumber;
278  }
279 
287  static void layerGlobalNumberToElementNumbers(int layerGlobal, int* section, int* sector, int* layer);
288 
292  static int getSectionByModule(int module)
293  {
294  return (module & BKLM_SECTION_MASK) >> BKLM_SECTION_BIT;
295  }
296 
300  static int getSectorByModule(int module)
301  {
302  return ((module & BKLM_SECTOR_MASK) >> BKLM_SECTOR_BIT) + 1;
303  }
304 
308  static int getLayerByModule(int module)
309  {
310  return ((module & BKLM_LAYER_MASK) >> BKLM_LAYER_BIT) + 1;
311  }
312 
316  static int getPlaneByModule(int module)
317  {
318  return (module & BKLM_PLANE_MASK) >> BKLM_PLANE_BIT;
319  }
320 
324  static int getStripByModule(int module)
325  {
326  return ((module & BKLM_STRIP_MASK) >> BKLM_STRIP_BIT) + 1;
327  }
328 
334  static void setSectionInModule(int& module, int section)
335  {
336  module = (module & (~BKLM_SECTION_MASK)) | (section << BKLM_SECTION_BIT);
337  }
338 
344  static void setSectorInModule(int& module, int sector)
345  {
346  module = (module & (~BKLM_SECTOR_MASK)) | ((sector - 1) << BKLM_SECTOR_BIT);
347  }
348 
354  static void setLayerInModule(int& module, int layer)
355  {
356  module = (module & (~BKLM_LAYER_MASK)) | ((layer - 1) << BKLM_LAYER_BIT);
357  }
358 
364  static void setPlaneInModule(int& module, int plane)
365  {
366  module = (module & (~BKLM_PLANE_MASK)) | (plane << BKLM_PLANE_BIT);
367  }
368 
374  static void setStripInModule(int& module, int strip)
375  {
376  module = (module & (~BKLM_STRIP_MASK)) | ((strip - 1) << BKLM_STRIP_BIT);
377  }
378 
383  static uint16_t getModuleByModule(int module)
384  {
385  return module & BKLM_MODULEID_MASK;
386  }
387 
391  static uint16_t getChannelByModule(int module)
392  {
393  return module & BKLM_MODULESTRIPID_MASK;
394  }
395 
399  static bool hitsFromSameModule(int module1, int module2)
400  {
401  return getModuleByModule(module1) == getModuleByModule(module2);
402  }
403 
407  static bool hitsFromSamePlane(int module1, int module2)
408  {
409  const int mask = BKLM_MODULEID_MASK | BKLM_PLANE_MASK;
410  return (module1 & mask) == (module2 & mask);
411  }
412 
416  static bool hitsFromSameChannel(int module1, int module2)
417  {
418  return getChannelByModule(module1) == getChannelByModule(module2);
419  }
420 
421  protected:
422 
424  static constexpr int m_MaximalSectionNumber = 1;
425 
427  static constexpr int m_MaximalSectorNumber = 8;
428 
430  static constexpr int m_MaximalLayerNumber = 15;
431 
433  static constexpr int m_MaximalPlaneNumber = 1;
434 
436  static constexpr int m_TotalChannelNumber = 21978;
437 
439  static constexpr int BKLM_STRIP_BIT = 0;
440 
445  static constexpr int BKLM_PLANE_BIT = 6;
446 
448  static constexpr int BKLM_LAYER_BIT = 7;
449 
454  static constexpr int BKLM_SECTOR_BIT = 11;
455 
457  static constexpr int BKLM_SECTION_BIT = 14;
458 
460  static constexpr int BKLM_STRIP_MASK = (63 << BKLM_STRIP_BIT);
461 
463  static constexpr int BKLM_PLANE_MASK = (1 << BKLM_PLANE_BIT);
464 
466  static constexpr int BKLM_LAYER_MASK = (15 << BKLM_LAYER_BIT);
467 
472  static constexpr int BKLM_SECTOR_MASK = (7 << BKLM_SECTOR_BIT);
473 
475  static constexpr int BKLM_SECTION_MASK = (1 << BKLM_SECTION_BIT);
476 
478  static constexpr int BKLM_MODULEID_MASK =
480 
482  static constexpr int BKLM_MODULESTRIPID_MASK =
485 
486  };
487 
489 }
Belle2::BKLMElementNumbers::m_MaximalSectorNumber
static constexpr int m_MaximalSectorNumber
Maximal sector number (1-based).
Definition: BKLMElementNumbers.h:435
Belle2::BKLMElementNumbers::planeNumber
static uint16_t planeNumber(int section, int sector, int layer, int plane)
Get plane number.
Definition: BKLMElementNumbers.cc:49
Belle2::BKLMElementNumbers::sectorNumber
static uint16_t sectorNumber(int section, int sector)
Get sector number.
Definition: BKLMElementNumbers.cc:89
Belle2::BKLMElementNumbers::getTotalChannelNumber
static constexpr int getTotalChannelNumber()
Get total number of channels.
Definition: BKLMElementNumbers.h:283
Belle2::BKLMElementNumbers::BKLM_STRIP_BIT
static constexpr int BKLM_STRIP_BIT
Bit position for strip-1 [0..47].
Definition: BKLMElementNumbers.h:447
Belle2::BKLMElementNumbers::hitsFromSameChannel
static bool hitsFromSameChannel(int module1, int module2)
Check whether the hits are from the same channel.
Definition: BKLMElementNumbers.h:424
Belle2::BKLMElementNumbers::getStripByModule
static int getStripByModule(int module)
Get strip number by module identifier.
Definition: BKLMElementNumbers.h:332
Belle2::BKLMElementNumbers::getMaximalLayerGlobalNumber
static constexpr int getMaximalLayerGlobalNumber()
Get maximal layer global number.
Definition: BKLMElementNumbers.h:275
Belle2::BKLMElementNumbers::getSectorByModule
static int getSectorByModule(int module)
Get sector number by module identifier.
Definition: BKLMElementNumbers.h:308
Belle2::Sector
Sector is a central part of storing information for VXD trackFinders.
Definition: Sector.h:53
Belle2::BKLMElementNumbers::checkChannelNumber
static bool checkChannelNumber(int section, int sector, int layer, int plane, int strip, bool fatalError=true)
Check channel number.
Definition: BKLMElementNumbers.cc:184
Belle2::BKLMElementNumbers::setSectionInModule
static void setSectionInModule(int &module, int section)
Set section number in module identifier.
Definition: BKLMElementNumbers.h:342
Belle2::BKLMElementNumbers::checkLayer
static bool checkLayer(int layer, bool fatalError=true)
Check if layer number is correct.
Definition: BKLMElementNumbers.cc:164
Belle2::BKLMElementNumbers::Section
Section
Constants for section numbers.
Definition: BKLMElementNumbers.h:41
Belle2::BKLMElementNumbers::BKLM_PLANE_BIT
static constexpr int BKLM_PLANE_BIT
Bit position for plane-1 [0..1].
Definition: BKLMElementNumbers.h:453
Belle2::BKLMElementNumbers::Layer
Layer
Constants for layer numbers.
Definition: BKLMElementNumbers.h:68
Belle2::BKLMElementNumbers::setLayerInModule
static void setLayerInModule(int &module, int layer)
Set layer number in module identifier.
Definition: BKLMElementNumbers.h:362
Belle2::BKLMElementNumbers::c_ZPlane
@ c_ZPlane
Z.
Definition: BKLMElementNumbers.h:81
Belle2::BKLMElementNumbers::getHSLBName
static std::string getHSLBName(int copper, int slot)
Get HSLB name.
Definition: BKLMElementNumbers.cc:203
Belle2::BKLMElementNumbers::BKLM_MODULESTRIPID_MASK
static constexpr int BKLM_MODULESTRIPID_MASK
Bit mask for module-and-strip identifier.
Definition: BKLMElementNumbers.h:490
Belle2::BKLMElementNumbers::getLayerByModule
static int getLayerByModule(int module)
Get layer number by module identifier.
Definition: BKLMElementNumbers.h:316
Belle2::BKLMElementNumbers::c_ForwardSection
@ c_ForwardSection
Forward.
Definition: BKLMElementNumbers.h:47
Belle2::BKLMElementNumbers::getChannelByModule
static uint16_t getChannelByModule(int module)
Get channel number by module identifier.
Definition: BKLMElementNumbers.h:399
Belle2::BKLMElementNumbers::BKLM_LAYER_BIT
static constexpr int BKLM_LAYER_BIT
Bit position for layer-1 [0..14]; 0 is innermost.
Definition: BKLMElementNumbers.h:456
Belle2::BKLMElementNumbers::c_ChimneySector
@ c_ChimneySector
Chimney sector: BB3 in 1-based notation; BB2 in 0-based notation.
Definition: BKLMElementNumbers.h:61
Belle2::BKLMElementNumbers::setPlaneInModule
static void setPlaneInModule(int &module, int plane)
Set plane number in module identifier.
Definition: BKLMElementNumbers.h:372
Belle2::BKLMElementNumbers::setSectorInModule
static void setSectorInModule(int &module, int sector)
Set sector number in module identifier.
Definition: BKLMElementNumbers.h:352
Belle2::BKLMElementNumbers::getMaximalSectorNumber
static constexpr int getMaximalSectorNumber()
Get maximal sector number (1-based).
Definition: BKLMElementNumbers.h:243
Belle2::BKLMElementNumbers::getModuleByModule
static uint16_t getModuleByModule(int module)
Get module number by module identifier (the input identifier may contain other data).
Definition: BKLMElementNumbers.h:391
Belle2::BKLMElementNumbers::BKLM_SECTOR_MASK
static constexpr int BKLM_SECTOR_MASK
Bit mask for sector-1 [0..7].
Definition: BKLMElementNumbers.h:480
Belle2::BKLMElementNumbers::hitsFromSamePlane
static bool hitsFromSamePlane(int module1, int module2)
Check whether the hits are from the same plane.
Definition: BKLMElementNumbers.h:415
Belle2::BKLMElementNumbers::layerGlobalNumberToElementNumbers
static void layerGlobalNumberToElementNumbers(int layerGlobal, int *section, int *sector, int *layer)
Get element numbers by layer global number (0-based).
Definition: BKLMElementNumbers.cc:196
Belle2::BKLMElementNumbers::BKLM_PLANE_MASK
static constexpr int BKLM_PLANE_MASK
Bit mask for plane-1 [0..1]; 0 is inner-plane and phiReadout plane,.
Definition: BKLMElementNumbers.h:471
Belle2::BKLMElementNumbers::BKLM_SECTION_BIT
static constexpr int BKLM_SECTION_BIT
Bit position for detector end [0..1]; forward is 0.
Definition: BKLMElementNumbers.h:465
Belle2::BKLMElementNumbers::~BKLMElementNumbers
~BKLMElementNumbers()
Destructor.
Definition: BKLMElementNumbers.cc:23
Belle2::BKLMElementNumbers::m_TotalChannelNumber
static constexpr int m_TotalChannelNumber
Total number of channels (1-based).
Definition: BKLMElementNumbers.h:444
Belle2::BKLMElementNumbers::getSectionByModule
static int getSectionByModule(int module)
Get section number by module identifier.
Definition: BKLMElementNumbers.h:300
Belle2::BKLMElementNumbers::c_BackwardSection
@ c_BackwardSection
Backward.
Definition: BKLMElementNumbers.h:44
Belle2::BKLMElementNumbers::getMaximalLayerNumber
static constexpr int getMaximalLayerNumber()
Get maximal layer number (1-based).
Definition: BKLMElementNumbers.h:251
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::BKLMElementNumbers::getPlaneByModule
static int getPlaneByModule(int module)
Get plane number (0 = z, 1 = phi) by module identifier.
Definition: BKLMElementNumbers.h:324
Belle2::BKLMElementNumbers::BKLM_LAYER_MASK
static constexpr int BKLM_LAYER_MASK
Bit mask for layer-1 [0..15]; 0 is innermost and 14 is outermost.
Definition: BKLMElementNumbers.h:474
Belle2::BKLMElementNumbers::getMaximalSectorGlobalNumber
static constexpr int getMaximalSectorGlobalNumber()
Get maximal sector global number.
Definition: BKLMElementNumbers.h:267
Belle2::BKLMElementNumbers::BKLMElementNumbers
BKLMElementNumbers()
Constructor.
Definition: BKLMElementNumbers.cc:19
Belle2::BKLMElementNumbers::channelNumberToElementNumbers
static void channelNumberToElementNumbers(uint16_t channel, int *section, int *sector, int *layer, int *plane, int *strip)
Get element numbers by channel number.
Definition: BKLMElementNumbers.cc:38
Belle2::BKLMElementNumbers::checkSector
static bool checkSector(int sector, bool fatalError=true)
Check if sector number is correct.
Definition: BKLMElementNumbers.cc:154
Belle2::BKLMElementNumbers::BKLM_MODULEID_MASK
static constexpr int BKLM_MODULEID_MASK
Bit mask for module identifier.
Definition: BKLMElementNumbers.h:486
Belle2::BKLMElementNumbers::m_MaximalLayerNumber
static constexpr int m_MaximalLayerNumber
Maximal layer number (1-based).
Definition: BKLMElementNumbers.h:438
Belle2::BKLMElementNumbers::checkPlane
static bool checkPlane(int plane, bool fatalError=true)
Check if plane number is correct.
Definition: BKLMElementNumbers.cc:174
Belle2::BKLMElementNumbers::BKLM_SECTION_MASK
static constexpr int BKLM_SECTION_MASK
Bit mask for detector end [0..1]; forward is 0.
Definition: BKLMElementNumbers.h:483
Belle2::BKLMElementNumbers::layerGlobalNumber
static int layerGlobalNumber(int section, int sector, int layer)
Get layer global number.
Definition: BKLMElementNumbers.cc:97
Belle2::BKLMElementNumbers::checkSection
static bool checkSection(int section, bool fatalError=true)
Check if section number is correct.
Definition: BKLMElementNumbers.cc:144
Belle2::BKLMElementNumbers::hitsFromSameModule
static bool hitsFromSameModule(int module1, int module2)
Check whether the hits are from the same module.
Definition: BKLMElementNumbers.h:407
Belle2::BKLMElementNumbers::BKLM_SECTOR_BIT
static constexpr int BKLM_SECTOR_BIT
Bit position for sector-1 [0..7].
Definition: BKLMElementNumbers.h:462
Belle2::BKLMElementNumbers::getMaximalPlaneNumber
static constexpr int getMaximalPlaneNumber()
Get maximal plane number (0-based).
Definition: BKLMElementNumbers.h:259
Belle2::BKLMElementNumbers::BKLM_STRIP_MASK
static constexpr int BKLM_STRIP_MASK
Bit mask for strip-1 [0..47].
Definition: BKLMElementNumbers.h:468
Belle2::BKLMElementNumbers::getMaximalSectionNumber
static constexpr int getMaximalSectionNumber()
Get maximal section number (0-based).
Definition: BKLMElementNumbers.h:235
Belle2::BKLMElementNumbers::c_FirstRPCLayer
@ c_FirstRPCLayer
First RPC layer.
Definition: BKLMElementNumbers.h:71
Plane
Plane.
Definition: TRGCDCHoughMapping.cc:24
Belle2::BKLMElementNumbers::moduleNumberToElementNumbers
static void moduleNumberToElementNumbers(uint16_t module, int *section, int *sector, int *layer)
Get element numbers by module number.
Definition: BKLMElementNumbers.cc:81
Belle2::BKLMElementNumbers::channelNumber
static uint16_t channelNumber(int section, int sector, int layer, int plane, int strip)
Get channel number.
Definition: BKLMElementNumbers.cc:27
Belle2::BKLMElementNumbers::m_MaximalSectionNumber
static constexpr int m_MaximalSectionNumber
Maximal section number (0-based).
Definition: BKLMElementNumbers.h:432
Belle2::BKLMElementNumbers::m_MaximalPlaneNumber
static constexpr int m_MaximalPlaneNumber
Maximal plane number (0-based).
Definition: BKLMElementNumbers.h:441
Belle2::BKLMElementNumbers::getNStrips
static int getNStrips(int section, int sector, int layer, int plane)
Get number of strips.
Definition: BKLMElementNumbers.cc:108
Belle2::BKLMElementNumbers::setStripInModule
static void setStripInModule(int &module, int strip)
Set strip number in module identifier.
Definition: BKLMElementNumbers.h:382
Belle2::BKLMElementNumbers::c_PhiPlane
@ c_PhiPlane
Phi.
Definition: BKLMElementNumbers.h:84
Belle2::BKLMElementNumbers::planeNumberToElementNumbers
static void planeNumberToElementNumbers(uint16_t planeGlobal, int *section, int *sector, int *layer, int *plane)
Get element numbers by plane number.
Definition: BKLMElementNumbers.cc:62
Belle2::BKLMElementNumbers::moduleNumber
static uint16_t moduleNumber(int section, int sector, int layer, bool fatalError=true)
Get module number.
Definition: BKLMElementNumbers.cc:71