Belle II Software  release-05-01-25
svd_packer_unpacker.py
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 
4 from basf2 import *
5 from svd import add_svd_simulation
6 from ROOT import Belle2
7 import os
8 import numpy
9 
10 import simulation
11 
12 svd_digits_pack_unpack_collection = "SVDShaperDigits_test"
13 set_random_seed(42)
14 
15 
17 
18  """
19  module which ckecks if two collection of SVDShaperDigits are equal
20  """
21 
22  def sortDigits(self, unsortedPyStoreArray):
23  """ use some digit information to sort the SVDShaperDigits list
24  Returns a python-list containing the SVDShaperDigits
25  """
26 
27  # first convert to a python-list to be abple to sort
28  py_list = [x for x in unsortedPyStoreArray]
29 
30  # sort via a hierachy of sort keys
31  return sorted(
32  py_list,
33  key=lambda x: (
34  x.getSensorID().getLayerNumber(),
35  x.getSensorID().getLadderNumber(),
36  x.getSensorID().getSensorNumber(),
37  x.isUStrip()))
38 
39  def event(self):
40  """ load SVDShaperDigits of the simulation and the packed/unpacked ones
41  and compare them"""
42 
43  svdDigitsPackedUnpacked = Belle2.PyStoreArray(svd_digits_pack_unpack_collection)
44  # direct from simulation
45  svdDigits = Belle2.PyStoreArray("SVDShaperDigits")
46 
47  svdDigits_sorted = self.sortDigits(svdDigits)
48  svdDigitsPackedUnpacked_sorted = self.sortDigits(svdDigitsPackedUnpacked)
49 
50  if not len(svdDigits_sorted) == len(svdDigitsPackedUnpacked_sorted):
51  B2FATAL("SVDShaperDigits count not equal after packing and unpacking")
52 
53  # check all quantities between the direct and the packed/unpacked svd digits
54  for i in range(len(svdDigits_sorted)):
55 
56  # sort the digits, because the packer sorts the
57  # the 32-bit frames are sorted by FADC numbers by the packer module
58  hit = svdDigits_sorted[i]
59  hitPackedUnpacked = svdDigitsPackedUnpacked_sorted[i]
60 
61  # check content of the digit
62  assert hit.getTime() == hitPackedUnpacked.getTime()
63  assert hit.getIndex() == hitPackedUnpacked.getIndex()
64 
65  # note: The charge will only be checked if between 0 and 255
66  # These two cases will be addressed in future SVDShaperDigits and packer/unpacker version
67  assert numpy.isclose(hit.getCharge(), hitPackedUnpacked.getCharge())
68 
69  # check the VxdID information
70  assert hit.getSensorID().getID() == hitPackedUnpacked.getSensorID().getID()
71  assert hit.getSensorID().getLayerNumber() == hitPackedUnpacked.getSensorID().getLayerNumber()
72  assert hit.getSensorID().getLadderNumber() == hitPackedUnpacked.getSensorID().getLadderNumber()
73  assert hit.getSensorID().getSensorNumber() == hitPackedUnpacked.getSensorID().getSensorNumber()
74  assert hit.getSensorID().getSegmentNumber() == hitPackedUnpacked.getSensorID().getSegmentNumber()
75 
76 
77 # to run the framework the used modules need to be registered
78 particlegun = register_module('ParticleGun')
79 particlegun.param('pdgCodes', [13, -13])
80 particlegun.param('nTracks', 10)
81 
82 # Create Event information
83 eventinfosetter = register_module('EventInfoSetter')
84 eventinfosetter.param({'evtNumList': [10], 'runList': [1]})
85 # Show progress of processing
86 progress = register_module('Progress')
87 
88 main = create_path()
89 # init path
90 main.add_module(eventinfosetter)
91 main.add_module(particlegun)
92 # add simulation for svd only
93 add_svd_simulation(main)
94 
95 main.add_module(progress)
96 
97 nodeid = 0
98 Packer = register_module('SVDPacker')
99 Packer.param('NodeID', nodeid)
100 Packer.param('svdShaperDigitListName', 'SVDShaperDigits')
101 Packer.param('rawSVDListName', 'SVDRaw')
102 main.add_module(Packer)
103 
104 unPacker = register_module('SVDUnpacker')
105 unPacker.param('rawSVDListName', 'SVDRaw')
106 unPacker.param('svdShaperDigitListName', svd_digits_pack_unpack_collection)
107 main.add_module(unPacker)
108 
109 # run custom test module to check if the SVDShaperDigits and the
110 # svd_digits_pack_unpack_collection collections are equal
111 main.add_module(SvdPackerUnpackerTestModule())
112 
113 # Process events
114 process(main)
Belle2::getID
int getID(const std::vector< double > &breaks, double t)
get id of the time point t
Definition: calibTools.h:71
svd_packer_unpacker.SvdPackerUnpackerTestModule
Definition: svd_packer_unpacker.py:16
svd_packer_unpacker.SvdPackerUnpackerTestModule.sortDigits
def sortDigits(self, unsortedPyStoreArray)
Definition: svd_packer_unpacker.py:22
Belle2::PyStoreArray
a (simplified) python wrapper for StoreArray.
Definition: PyStoreArray.h:58
svd_packer_unpacker.SvdPackerUnpackerTestModule.event
def event(self)
Definition: svd_packer_unpacker.py:39