Belle II Software  release-05-01-25
top_digits_raw_digits.py
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 
4 from basf2 import *
5 from ROOT import Belle2
6 from simulation import add_simulation
7 import os
8 import numpy
9 
10 
11 set_random_seed(12345)
12 
13 
14 class DigitTest(Module):
15 
16  """
17  module which ckecks if two collections of TOPDigits are equal
18  """
19 
20  def sortDigits(self, unsortedPyStoreArray):
21  """
22  Use some digit information to sort the digits
23  Returns a python-list containing the sorted digits
24  """
25 
26  # first convert to a python-list to be able to sort
27  py_list = [x for x in unsortedPyStoreArray]
28 
29  # sort via a hierachy of sort keys
30  return sorted(
31  py_list,
32  key=lambda x: (
33  x.getModuleID(),
34  x.getChannel(),
35  x.getRawTime())
36  )
37 
38  def event(self):
39  """
40  load original TOPDigits and the packed/unpacked ones, sort and compare them
41  """
42 
43  # direct from simulation
44  digits = Belle2.PyStoreArray("TOPDigits")
45  # processed by packer and unpacker
46  digitsUnpacked = Belle2.PyStoreArray("TOPDigitsUnpacked")
47 
48  # sort digits
49  digits_sorted = self.sortDigits(digits)
50  digitsUnpacked_sorted = self.sortDigits(digitsUnpacked)
51 
52  # check the sizes
53  if not len(digits_sorted) == len(digitsUnpacked_sorted):
54  B2FATAL("TOPDigits: size not equal after packing and unpacking")
55 
56  # check all quantities between the direct and the packed/unpacked
57  precision = 0.0001 # precision for floats (e.g. in [ns])
58  for i in range(len(digits_sorted)):
59  digit = digits_sorted[i]
60  digitUnpacked = digitsUnpacked_sorted[i]
61 
62  # check the content of the digit
63  assert digit.getModuleID() == digitUnpacked.getModuleID()
64  assert digit.getPixelID() == digitUnpacked.getPixelID()
65  assert digit.getChannel() == digitUnpacked.getChannel()
66  assert digit.getRawTime() == digitUnpacked.getRawTime()
67  assert abs(digit.getTime() - digitUnpacked.getTime()) < precision
68  assert abs(digit.getTimeError() - digitUnpacked.getTimeError()) < precision
69  assert digit.getPulseHeight() == digitUnpacked.getPulseHeight()
70  assert abs(digit.getPulseWidth() - digitUnpacked.getPulseWidth()) < precision
71  assert digit.getIntegral() == digitUnpacked.getIntegral()
72  assert digit.getFirstWindow() == digitUnpacked.getFirstWindow()
73  assert digit.getHitQuality() == digitUnpacked.getHitQuality()
74  assert digit.getStatus() == digitUnpacked.getStatus()
75  assert digit.isChargeShare() == digitUnpacked.isChargeShare()
76  assert digit.isPrimaryChargeShare() == digitUnpacked.isPrimaryChargeShare()
77 
78 
79 main = create_path()
80 
81 eventinfosetter = register_module('EventInfoSetter')
82 eventinfosetter.param({'evtNumList': [10]})
83 main.add_module(eventinfosetter)
84 
85 particlegun = register_module('ParticleGun')
86 particlegun.param('pdgCodes', [13, -13])
87 particlegun.param('nTracks', 10)
88 main.add_module(particlegun)
89 
90 add_simulation(main, components=['TOP'])
91 set_module_parameters(main, type="Geometry", useDB=False, components=["TOP"])
92 
93 converter = register_module('TOPRawDigitConverter')
94 converter.param('outputDigitsName', 'TOPDigitsUnpacked')
95 converter.param('minPulseWidth', 0.0)
96 converter.param('maxPulseWidth', 1000.0)
97 main.add_module(converter)
98 
99 main.add_module(DigitTest())
100 
101 progress = register_module('Progress')
102 main.add_module(progress)
103 
104 process(main)
105 print(statistics)
top_digits_raw_digits.DigitTest
Definition: top_digits_raw_digits.py:14
top_digits_raw_digits.DigitTest.event
def event(self)
Definition: top_digits_raw_digits.py:38
top_digits_raw_digits.DigitTest.sortDigits
def sortDigits(self, unsortedPyStoreArray)
Definition: top_digits_raw_digits.py:20
Belle2::PyStoreArray
a (simplified) python wrapper for StoreArray.
Definition: PyStoreArray.h:58