Belle II Software  release-05-01-25
arich_packer_unpacker.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 PackerUnpackerTest(Module):
15 
16  """
17  module which ckecks if two collections of ARICHDigits 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.getChannelID())
35  )
36 
37  def event(self):
38  """
39  load original ARICHDigits and the packed/unpacked ones, sort and compare them
40  """
41 
42  # direct from simulation
43  digits = Belle2.PyStoreArray("ARICHDigits")
44  # processed by packer and unpacker
45  digitsUnpacked = Belle2.PyStoreArray("ARICHDigitsUnpacked")
46 
47  # sort digits
48  digits_sorted = self.sortDigits(digits)
49  digitsUnpacked_sorted = self.sortDigits(digitsUnpacked)
50 
51  # check the sizes
52  if not len(digits_sorted) == len(digitsUnpacked_sorted):
53  B2FATAL("ARICHDigits: size not equal after packing and unpacking")
54 
55  # check all quantities between the direct and the packed/unpacked
56  for i in range(len(digits_sorted)):
57 
58  digit = digits_sorted[i]
59  digitUnpacked = digitsUnpacked_sorted[i]
60 
61  # check the content of the digit
62  assert digit.getModuleID() == digitUnpacked.getModuleID()
63  assert digit.getChannelID() == digitUnpacked.getChannelID()
64  assert digit.getBitmap() == digitUnpacked.getBitmap()
65 
66 
67 main = create_path()
68 
69 eventinfosetter = register_module('EventInfoSetter')
70 eventinfosetter.param({'evtNumList': [10]})
71 main.add_module(eventinfosetter)
72 
73 particlegun = register_module('ParticleGun')
74 particlegun.param('pdgCodes', [13, -13])
75 particlegun.param('nTracks', 10)
76 particlegun.param('thetaGeneration', 'uniformCos')
77 particlegun.param('thetaParams', [20.0, 25.0])
78 
79 main.add_module(particlegun)
80 
81 add_simulation(main, components=['ARICH'])
82 set_module_parameters(main, type="Geometry", useDB=False, components=["ARICH"])
83 
84 Packer = register_module('ARICHPacker')
85 main.add_module(Packer)
86 
87 unPacker = register_module('ARICHUnpacker')
88 unPacker.param('outputDigitsName', 'ARICHDigitsUnpacked')
89 main.add_module(unPacker)
90 
91 main.add_module(PackerUnpackerTest())
92 
93 progress = register_module('Progress')
94 main.add_module(progress)
95 
96 process(main)
97 print(statistics)
arich_packer_unpacker.PackerUnpackerTest.sortDigits
def sortDigits(self, unsortedPyStoreArray)
Definition: arich_packer_unpacker.py:20
Belle2::PyStoreArray
a (simplified) python wrapper for StoreArray.
Definition: PyStoreArray.h:58
arich_packer_unpacker.PackerUnpackerTest.event
def event(self)
Definition: arich_packer_unpacker.py:37
arich_packer_unpacker.PackerUnpackerTest
Definition: arich_packer_unpacker.py:14