Belle II Software  release-05-01-25
__init__.py
1 #!/usr/bin/env python3
2 # -*- coding: utf-8 -*-
3 
4 from basf2 import *
5 from ROOT import Belle2
6 import math
7 
8 
9 def add_pxd_unpacker(path):
10  pxdunpacker = register_module('PXDUnpacker')
11  path.add_module(pxdunpacker)
12 
13  pxderrorcheck = register_module('PXDPostErrorChecker')
14  path.add_module(pxderrorcheck)
15 
16  pxdhitsorter = register_module('PXDRawHitSorter')
17  path.add_module(pxdhitsorter)
18  if 'ActivatePXDPixelMasker' not in [e.name() for e in path.modules()]:
19  path.add_module('ActivatePXDPixelMasker')
20 
21 
22 def add_pxd_packer(path):
23  pxdpacker = register_module('PXDPacker')
24  pxdpacker.param('dhe_to_dhc', [
25  [
26  0,
27  2,
28  4,
29  34,
30  36,
31  38,
32  ],
33  [
34  1,
35  6,
36  8,
37  40,
38  42,
39  44,
40  ],
41  [
42  2,
43  10,
44  12,
45  46,
46  48,
47  50,
48  ],
49  [
50  3,
51  14,
52  16,
53  52,
54  54,
55  56,
56  ],
57  [
58  4,
59  3,
60  5,
61  35,
62  37,
63  39,
64  ],
65  [
66  5,
67  7,
68  9,
69  41,
70  43,
71  45,
72  ],
73  [
74  6,
75  11,
76  13,
77  47,
78  49,
79  51,
80  ],
81  [
82  7,
83  15,
84  17,
85  53,
86  55,
87  57,
88  ],
89  ])
90 
91  path.add_module(pxdpacker)
92 
93 
94 def add_pxd_reconstruction(path, clusterName=None, digitsName=None, usePXDClusterShapes=False):
95 
96  if usePXDClusterShapes:
97  if 'ActivatePXDClusterPositionEstimator' not in [e.name() for e in path.modules()]:
98  shape_activator = register_module('ActivatePXDClusterPositionEstimator')
99  shape_activator.set_name('ActivatePXDClusterPositionEstimator')
100  path.add_module(shape_activator)
101 
102  if 'PXDClusterizer' not in [e.name() for e in path.modules()]:
103  clusterizer = register_module('PXDClusterizer')
104  clusterizer.set_name('PXDClusterizer')
105  if clusterName:
106  clusterizer.param('Clusters', clusterName)
107  if digitsName:
108  clusterizer.param('Digits', digitsName)
109  path.add_module(clusterizer)
110 
111 
112 def add_pxd_simulation(path, digitsName=None, activatePixelMasks=True, activateGainCorrection=True):
113 
114  if activatePixelMasks and 'ActivatePXDPixelMasker' not in [e.name() for e in path.modules()]:
115  path.add_module('ActivatePXDPixelMasker')
116  if activateGainCorrection and 'ActivatePXDGainCalibrator' not in [e.name() for e in path.modules()]:
117  path.add_module('ActivatePXDGainCalibrator')
118 
119  digitizer = register_module('PXDDigitizer')
120  if digitsName:
121  digitizer.param('Digits', digitsName)
122  path.add_module(digitizer)
123 
124 
125 def add_pxd_fullframe(path, min_ladders=(1, 1), max_ladders=(8, 12)):
126  modules = []
127  for layer in [1, 2]:
128  min_ladder = min_ladders[layer - 1]
129  max_ladder = max_ladders[layer - 1]
130  for ladder in range(min_ladder, max_ladder + 1):
131  for sensor in [1, 2]:
132  modules.append((layer, ladder, sensor))
133 
134  for (layer, ladder, sensor) in modules:
135  path.add_module('ROIGenerator', ROIListName='ROIs', nROIs=1, TrigDivider=1,
136  Layer=layer, Ladder=ladder, Sensor=sensor,
137  MinU=0, MaxU=249, MinV=0, MaxV=767)
138 
139 
140 def add_pxd_fullframe_phase3_early(path):
141  add_pxd_fullframe(path, min_ladders=(1, 4), max_ladders=(8, 5))
142 
143 
144 def add_pxd_percentframe(path, min_ladders=(1, 1), max_ladders=(8, 12), fraction=0.1, random_position=False):
145  modules = []
146  for layer in [1, 2]:
147  min_ladder = min_ladders[layer - 1]
148  max_ladder = max_ladders[layer - 1]
149  for ladder in range(min_ladder, max_ladder + 1):
150  for sensor in [1, 2]:
151  modules.append((layer, ladder, sensor))
152 
153  # Center ROI and make them a bit more realistic, enlarge in z ;-)
154  # Random position not supported yet -> need change in module code
155  s = math.sqrt(fraction)
156  MinU = max(0, int(250 / 2 * (1 - 0.5 * s)))
157  MaxU = 249 - MinU
158  MinV = max(0, int(768 / 2 * (1 - 2.0 * s)))
159  MaxV = 767 - MinV
160 
161  for (layer, ladder, sensor) in modules:
162  path.add_module('ROIGenerator', ROIListName='ROIs', nROIs=1, TrigDivider=1,
163  Layer=layer, Ladder=ladder, Sensor=sensor,
164  MinU=MinU, MaxU=MaxU, MinV=MinV, MaxV=MaxV, Random=random_position)
165 
166 
167 def add_pxd_percentframe_phase3_early(path, fraction=0.1, random_position=False):
168  add_pxd_percentframe(path, min_ladders=(1, 4), max_ladders=(8, 5), fraction=fraction, random_position=random_position)
169 
170 
171 def add_roi_payload_assembler(path, ignore_hlt_decision):
172  path.add_module('ROIPayloadAssembler',
173  ROIListName='ROIs', ROIpayloadName='ROIpayload',
174  SendAllDownscaler=0, SendROIsDownscaler=1,
175  AcceptAll=ignore_hlt_decision, NoRejectFlag=False)
176 
177 
178 def add_roi_finder(path):
179  """
180  Add the PXDDataReduction module to preserve the tracking informaiton for ROI calculation
181  :param path: The path to which the module should be added
182  :param calcROIs: True: turn on the ROI calculation, False: turn off
183  """
184 
185  path.add_module('PXDROIFinder', recoTrackListName='RecoTracks',
186  PXDInterceptListName='PXDIntercepts', ROIListName='ROIs',
187  tolerancePhi=0.15, toleranceZ=0.5,
188  sigmaSystU=0.02, sigmaSystV=0.02,
189  numSigmaTotU=10, numSigmaTotV=10,
190  maxWidthU=0.5, maxWidthV=0.5)