Belle II Software  release-05-01-25
test_shaperdigit_sorter.py
1 import os
2 import tempfile
3 import basf2
4 import ROOT
5 from ROOT import Belle2
6 import b2test_utils
7 from svd import add_svd_reconstruction
8 
9 
10 class CreateDigits(basf2.Module):
11  """Create SVD ShaperDigits"""
12 
13  def __init__(self, digits):
14  """digits is a list of (sensor, side, strip) for which to generate a digit"""
15  super().__init__()
16  self.svddigits = Belle2.PyStoreArray("SVDShaperDigits")
17  '''shaper digits'''
18  self.digits = digits
19  '''test digits'''
20  self.samples = ROOT.array('unsigned char', 6)()
21  '''six samples'''
22  for i, sample in zip(range(6), [0, 0, 12, 18, 12, 8]):
23  self.samples[i] = sample
24  self.mode = Belle2.SVDModeByte(144)
25  '''svd mode byte'''
26  self.fadc_time = 0
27  '''FADC time'''
28 
29  def initialize(self):
30  '''initialize'''
31  self.svddigits.registerInDataStore()
32 
33  def event(self):
34  '''event'''
35  for sensor, side, strip in self.digits:
36  d = self.svddigits.appendNew()
37  d.__assign__(Belle2.SVDShaperDigit(Belle2.VxdID(3, 1, sensor), side, strip, self.samples, self.fadc_time, self.mode))
38  print('\nGenerated digits:')
39  for digit in self.svddigits:
40  print("digit: sensor %s, side %s, strip %d" %
41  (digit.getSensorID(), 'u' if digit.isUStrip() else 'v', digit.getCellID()))
42 
43 
44 class CheckOrderingOfDigits(basf2.Module):
45  """Check ordering of SVD digits"""
46 
47  def event(self):
48  '''event'''
49  digits = Belle2.PyStoreArray("SVDShaperDigits")
50  current_ID = 0
51  for d in digits:
52  new_ID = d.getUniqueChannelID()
53  if new_ID > current_ID:
54  current_ID = new_ID
55  else:
56  Belle2.B2ERROR('Wrong ordering!')
57 
58 
59 class PrintDigitsAndClusters(basf2.Module):
60  """Print all SVD digits and clusters"""
61 
62  def event(self):
63  digits = Belle2.PyStoreArray("SVDShaperDigits")
64  clusters = Belle2.PyStoreArray("SVDClusters")
65  print('\nSorted digits and clusters:')
66  for d in digits:
67  print("digit: sensor %s, u-side %s, strip %d" %
68  (d.getSensorID(), d.isUStrip(), d.getCellID()))
69  for c in clusters:
70  print("cluster: sensor %s, side %s, position %d size %d" %
71  (c.getSensorID(), 'u' if c.isUCluster() else 'v', c.getPosition(), c.getSize()))
72 
73 
74 if __name__ == "__main__":
76  # basf2.set_log_level(basf2.LogLevel.ERROR)
77  sig_digits = [
78  (2, False, 112),
79  (2, True, 66),
80  (1, True, 12),
81  (2, True, 65),
82  (1, True, 11),
83  (2, False, 113),
84  (1, True, 10)
85  ]
86 
87  basf2.B2INFO('Test SVDShaperDigitSorter\n' +
88  'In this test, we generate some ShaperDigits in radnom order\n' +
89  'and insert them in the DataStore. Then we call shaper digit\n' +
90  'sorter module and check whether the digits are correctly sorted.\n')
91 
92  test_ordering = basf2.create_path()
93  test_ordering.add_module("EventInfoSetter")
94  test_ordering.add_module("Gearbox")
95  test_ordering.add_module("Geometry", components=["SVD"])
96  test_ordering.add_module(CreateDigits(sig_digits))
97  test_ordering.add_module("SVDShaperDigitSorter")
98  add_svd_reconstruction(test_ordering, useCoG=True)
99  test_ordering.add_module(PrintDigitsAndClusters())
100  test_ordering.add_module(CheckOrderingOfDigits())
101 
102  result = b2test_utils.safe_process(test_ordering)
103  basf2.B2INFO('\nTest finished {0}.\n'.format(
104  ['successfully', 'with failure'][result]))
Belle2::VxdID
Class to uniquely identify a any structure of the PXD and SVD.
Definition: VxdID.h:43
test_shaperdigit_sorter.CreateDigits.digits
digits
Definition: test_shaperdigit_sorter.py:18
test_shaperdigit_sorter.CreateDigits.svddigits
svddigits
Definition: test_shaperdigit_sorter.py:16
test_shaperdigit_sorter.CreateDigits.mode
mode
Definition: test_shaperdigit_sorter.py:24
test_shaperdigit_sorter.CreateDigits.fadc_time
fadc_time
Definition: test_shaperdigit_sorter.py:26
Belle2::SVDModeByte
Class to store SVD mode information.
Definition: SVDModeByte.h:79
test_shaperdigit_sorter.CreateDigits.initialize
def initialize(self)
Definition: test_shaperdigit_sorter.py:29
Belle2::SVDShaperDigit
The SVD ShaperDigit class.
Definition: SVDShaperDigit.h:46
test_shaperdigit_sorter.CreateDigits.__init__
def __init__(self, digits)
Definition: test_shaperdigit_sorter.py:13
test_shaperdigit_sorter.CheckOrderingOfDigits
Definition: test_shaperdigit_sorter.py:44
test_shaperdigit_sorter.PrintDigitsAndClusters
Definition: test_shaperdigit_sorter.py:59
test_shaperdigit_sorter.CreateDigits.samples
samples
Definition: test_shaperdigit_sorter.py:20
b2test_utils.clean_working_directory
def clean_working_directory()
Definition: __init__.py:176
Belle2::PyStoreArray
a (simplified) python wrapper for StoreArray.
Definition: PyStoreArray.h:58
test_shaperdigit_sorter.CreateDigits
Definition: test_shaperdigit_sorter.py:10
b2test_utils.safe_process
def safe_process(*args, **kwargs)
Definition: __init__.py:224
test_shaperdigit_sorter.CreateDigits.event
def event(self)
Definition: test_shaperdigit_sorter.py:33
test_shaperdigit_sorter.CheckOrderingOfDigits.event
def event(self)
Definition: test_shaperdigit_sorter.py:47