32 from caf.strategies
import SequentialRunByRun
33 from caf.utils
import ExpRun, IoV
34 from caf
import backends
35 from caf.framework
import Calibration, CAF
36 from ROOT.Belle2
import PXDHotPixelMaskCalibrationAlgorithm
39 b2.set_log_level(b2.LogLevel.INFO)
42 parser = argparse.ArgumentParser(
43 description=
"Compute hot pixel masks for PXD from rawhit occupancy")
48 help=
'Compute mask for specific IoV')
49 parser.add_argument(
'--runHigh', default=-1, type=int,
50 help=
'Compute mask for specific IoV')
55 help=
'Compute mask for specific IoV')
56 parser.add_argument(
'--maxSubRuns', default=20, type=int,
57 help=
'Maximum number of subruns to use')
58 args = parser.parse_args()
62 pxd_ignore_run_list = [ExpRun(3, 484), ExpRun(3, 485), ExpRun(3, 486), ExpRun(3, 524)]
65 iov_to_calibrate = IoV(
69 run_high=args.runHigh)
71 map_file_path =
"file_iov_map.pkl"
72 with open(map_file_path,
'br')
as map_file:
73 files_to_iovs = pickle.load(map_file)
76 input_file_iov_set = set(files_to_iovs.values())
77 print(
'Number of distinct iovs {}'.format(len(input_file_iov_set)))
82 for file_iov
in input_file_iov_set:
83 if iov_to_calibrate.contains(file_iov):
84 subruns = [k
for k, v
in files_to_iovs.items()
if v == file_iov]
85 input_files.extend(subruns[:args.maxSubRuns])
88 print(
'Number selected input files: {}'.format(len(input_files)))
91 hotpixelcollector = b2.register_module(
"PXDRawHotPixelMaskCollector")
92 hotpixelcollector.param(
"granularity",
"run")
95 gearbox = b2.register_module(
'Gearbox')
96 gearbox.param(
'fileName',
'geometry/Beast2_phase2.xml')
97 geometry = b2.register_module(
'Geometry')
98 geometry.param(
'components', [
'PXD'])
99 pre_collector_path = b2.create_path()
100 pre_collector_path.add_module(gearbox)
101 pre_collector_path.add_module(geometry)
102 pre_collector_path.add_module(
'PXDUnpacker')
107 hotpixelkiller = PXDHotPixelMaskCalibrationAlgorithm()
110 hotpixelkiller.forceContinueMasking =
False
112 hotpixelkiller.minEvents = 30000
115 hotpixelkiller.minHits = 15
117 hotpixelkiller.pixelMultiplier = 7
119 hotpixelkiller.maskDrains =
True
121 hotpixelkiller.drainMultiplier = 7
123 hotpixelkiller.maskRows =
True
125 hotpixelkiller.rowMultiplier = 7
127 hotpixelkiller.setPrefix(
"PXDRawHotPixelMaskCollector")
131 name=
"PXDHotPixelMaskCalibrationAlgorithm",
132 collector=hotpixelcollector,
133 algorithms=hotpixelkiller,
134 input_files=input_files)
135 cal.pre_collector_path = pre_collector_path
138 cal.files_to_iovs = files_to_iovs
142 cal.strategies = SequentialRunByRun
144 cal.ignored_runs = pxd_ignore_run_list
145 cal.algorithms[0].params[
"iov_coverage"] = iov_to_calibrate
147 cal.max_files_per_collector_job = 1
151 cal_fw.add_calibration(cal)
156 cal_fw.heartbeat = 30
158 cal_fw.output_dir =
'calibration_results_range_{}_{}'.format(
159 args.runLow, args.runHigh)
160 cal_fw.run(iov=iov_to_calibrate)