Belle II Software development
PxdROIPayloadTestModule Class Reference
Inheritance diagram for PxdROIPayloadTestModule:

Public Member Functions

def sortROIs (self, unsortedPyStoreArray)
 
def event (self)
 

Detailed Description

module which checks if the roy payload from HLT can be created and depacked correctly

Definition at line 22 of file pxd_roi_payload.py.

Member Function Documentation

◆ event()

def event (   self)
 load the PXD Digits of the simulation and the packed/unpacked ones
and compare them

Definition at line 45 of file pxd_roi_payload.py.

45 def event(self):
46 """ load the PXD Digits of the simulation and the packed/unpacked ones
47 and compare them"""
48
49 orgroisuns = Belle2.PyStoreArray('ROIs')
50 if not orgroisuns:
51 b2.B2FATAL("ROIs not in file")
52 return
53
54 unpackedroisuns = Belle2.PyStoreArray('PXDROIsPayHLT')
55 if not unpackedroisuns:
56 b2.B2FATAL("PXDROIsPayHLT not in file")
57 return
58
59 # To make a 1:1 comparison, we have to sort both arrays.
60 # As the order of the payload differs from the original array.
61 # (its sorted by DHHID)
62 # We have to sort both, because sorting by coordinate is not defined.
63
64 orgrois = self.sortROIs(orgroisuns)
65 unpackedrois = self.sortROIs(unpackedroisuns)
66
67 # For some unknown reason, the ROI array contains a lot of
68 # doubles. For creating the payload, these have been removed. to make a 1:1
69 # comparison, we have to skip the following check and lateron skip ROIs
70 # which are identical to the one before (ordered array).
71
72 # if not len(orgrois) == len(unpackedrois):
73 # B2FATAL("Org. ROIs and Unpacked ROIs count not equal after packing and unpacking")
74
75 print(f"Comparing {len(orgrois)} ROIs ")
76
77 def f(x):
78 return (
79 x.getSensorID(),
80 x.getMinUid(),
81 x.getMaxUid(),
82 x.getMinVid(),
83 x.getMaxVid())
84
85 # check all quantities between the direct and the packed/unpacked pxd digits
86 # for i in range(len(orgrois)):
87 # org = orgrois[i]
88 # if i == 0 or f(org) != f(orgrois[i - 1]):
89 # B2INFO(" Org $%X %3d %3d %3d %3d" % (org.getSensorID().getID(), org.getMinUid(),
90 # org.getMaxUid(), org.getMinVid(), org.getMaxVid()))
91
92 # for i in range(len(unpackedrois)):
93 # unp = unpackedrois[i]
94 # B2INFO(" Unp $%X %3d %3d %3d %3d" % (unp.getSensorID().getID(),
95 # unp.getMinUid(), unp.getMaxUid(), unp.getMinVid(), unp.getMaxVid()))
96
97 j = 0
98 for i in range(len(orgrois)):
99 org = orgrois[i]
100 if i != 0 and f(org) == f(orgrois[i - 1]):
101 b2.B2WARNING("Found the same ROI a second time (Double ROI)!")
102 b2.B2WARNING(
103 f"Check ${org.getSensorID().getID():X} {int(org.getMinUid()):3d} {int(org.getMaxUid()):3d} " +
104 f"{int(org.getMinVid()):3d} {int(org.getMaxVid()):3d}")
105 if i == 0 or f(org) != f(orgrois[i - 1]):
106 if j == len(unpackedrois):
107 b2.B2FATAL("Unpacked ROIs comparison exceeds array limit!")
108 break
109
110 unp = unpackedrois[j]
111
112 b2.B2INFO(
113 f"Check Org ${org.getSensorID().getID():X} {org.getMinUid():3d} {org.getMaxUid():3d} " +
114 f"{org.getMinVid():3d} {org.getMaxVid():3d} Unp ${unp.getSensorID().getID():X} {unp.getMinUid():3d} " +
115 f"{unp.getMaxUid():3d} {unp.getMinVid():3d} {unp.getMaxVid():3d}")
116 # compare all available quantities
117 if unp.getMinUid() == 0 and unp.getMinVid() == 0 and unp.getMaxUid() == 250 - 1 and unp.getMaxVid() == 768 - 1:
118 b2.B2INFO("Full size ROI")
119 if org.getSensorID().getID() != unp.getSensorID().getID():
120 b2.B2INFO("DHHID changed")
121 if j == len(unpackedrois):
122 b2.B2FATAL("Unpacked ROIs comparison exceeds array limit!")
123 break
124 j += 1
125 unp = unpackedrois[j]
126
127 if not(unp.getMinUid() == 0 and unp.getMinVid() == 0 and unp.getMaxUid() == 250 - 1 and unp.getMaxVid() == 768 - 1):
128 assert org.getSensorID().getID() == unp.getSensorID().getID()
129 assert org.getMinUid() == unp.getMinUid()
130 assert org.getMaxUid() == unp.getMaxUid()
131 assert org.getMinVid() == unp.getMinVid()
132 assert org.getMaxVid() == unp.getMaxVid()
133 j += 1
134
135
136# to run the framework the used modules need to be registered
A (simplified) python wrapper for StoreArray.
Definition: PyStoreArray.h:72

◆ sortROIs()

def sortROIs (   self,
  unsortedPyStoreArray 
)
 sort ROI list
    Returns a python-list containing the ROIs

Definition at line 28 of file pxd_roi_payload.py.

28 def sortROIs(self, unsortedPyStoreArray):
29 """ sort ROI list
30 Returns a python-list containing the ROIs
31 """
32
33 # first convert to a python-list to be able to sort
34 py_list = list(unsortedPyStoreArray)
35
36 # sort via a hierachy of sort keys
37 return sorted(py_list,
38 key=lambda x: (
39 x.getSensorID(),
40 x.getMinUid(),
41 x.getMaxUid(),
42 x.getMinVid(),
43 x.getMaxVid()))
44

The documentation for this class was generated from the following file: