Belle II Software  release-05-01-25
klm_packer_unpacker.py
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 
4 import basf2
5 import simulation as sim
6 from ROOT import Belle2
7 
8 basf2.set_random_seed(321)
9 basf2.set_log_level(basf2.LogLevel.INFO)
10 
11 
12 class PackerUnpackerTest(basf2.Module):
13 
14  """
15  module which checks if two collections of EKLMDigits and BKLMDigits are
16  equal
17  """
18 
19  def sort_klm_digits(self, unsortedPyStoreArray):
20  """
21  Use some digit information to sort the digits
22  Returns a python-list containing the sorted digits
23  """
24 
25  # first convert to a python-list to be able to sort
26  py_list = [x for x in unsortedPyStoreArray]
27 
28  # sort via a hierachy of sort keys
29  return sorted(
30  py_list,
31  key=lambda x: (
32  x.getSubdetector(),
33  x.getSection(),
34  x.getSector(),
35  x.getLayer(),
36  x.getPlane(),
37  x.getStrip())
38  )
39 
40  def event(self):
41  """
42  load original digits and the packed/unpacked ones, sort and compare them
43  """
44 
45  # direct from simulation
46  klm_digits = Belle2.PyStoreArray("KLMDigits")
47  # processed by packer and unpacker
48  klm_digits_unpacked = Belle2.PyStoreArray("KLMDigitsUnpacked")
49 
50  # sort digits
51  klm_digits_sorted = self.sort_klm_digits(klm_digits)
52  klm_digits_unpacked_sorted = self.sort_klm_digits(klm_digits_unpacked)
53 
54  # check the size
55  if not len(klm_digits_sorted) == len(klm_digits_unpacked_sorted):
56  basf2.B2FATAL("KLMDigits: size not equal after packing and unpacking")
57  # check all quantities between the direct and the packed/unpacked
58  for i in range(len(klm_digits_sorted)):
59 
60  digit = klm_digits_sorted[i]
61  digit_unpacked = klm_digits_unpacked_sorted[i]
62 
63  # check the content of the digit
64  assert digit.getSubdetector() == digit_unpacked.getSubdetector()
65  assert digit.getSection() == digit_unpacked.getSection()
66  assert digit.getSector() == digit_unpacked.getSector()
67  assert digit.getLayer() == digit_unpacked.getLayer()
68  assert digit.getPlane() == digit_unpacked.getPlane()
69  assert digit.getStrip() == digit_unpacked.getStrip()
70  assert digit.inRPC() == digit_unpacked.inRPC()
71  assert digit.getCharge() == digit_unpacked.getCharge()
72  assert digit.getCTime() == digit_unpacked.getCTime()
73  assert digit.getTDC() == digit_unpacked.getTDC()
74  assert digit.getFitStatus() == digit_unpacked.getFitStatus()
75 
76 
77 main = basf2.create_path()
78 
79 eventinfosetter = basf2.register_module('EventInfoSetter')
80 eventinfosetter.param('evtNumList', 50)
81 main.add_module(eventinfosetter)
82 
83 particlegun = basf2.register_module('ParticleGun')
84 particlegun.param('pdgCodes', [13, -13])
85 particlegun.param('nTracks', 10)
86 particlegun.param('momentumParams', [0.5, 4.0])
87 main.add_module(particlegun)
88 
89 sim.add_simulation(main, components=['KLM'])
90 basf2.set_module_parameters(main, type='Geometry', useDB=False, components=['KLM'])
91 
92 klm_packer = basf2.register_module('KLMPacker')
93 main.add_module(klm_packer)
94 
95 unpacker = basf2.register_module('KLMUnpacker')
96 unpacker.param('outputKLMDigitsName', 'KLMDigitsUnpacked')
97 main.add_module(unpacker)
98 
99 main.add_module(PackerUnpackerTest())
100 
101 progress = basf2.register_module('Progress')
102 main.add_module(progress)
103 
104 basf2.process(main)
105 print(basf2.statistics)
klm_packer_unpacker.PackerUnpackerTest.sort_klm_digits
def sort_klm_digits(self, unsortedPyStoreArray)
Definition: klm_packer_unpacker.py:19
basf2.process
def process(path, max_event=0)
Definition: __init__.py:25
klm_packer_unpacker.PackerUnpackerTest.event
def event(self)
Definition: klm_packer_unpacker.py:40
klm_packer_unpacker.PackerUnpackerTest
Definition: klm_packer_unpacker.py:12
Belle2::PyStoreArray
a (simplified) python wrapper for StoreArray.
Definition: PyStoreArray.h:58