31from caf.strategies
import SequentialRunByRun
32from caf.utils
import ExpRun, IoV
33from caf
import backends
34from caf.framework
import Calibration, CAF
35from ROOT.Belle2
import PXDHotPixelMaskCalibrationAlgorithm
38b2.set_log_level(b2.LogLevel.INFO)
41parser = argparse.ArgumentParser(
42 description=
"Compute hot pixel masks for PXD from rawhit occupancy")
47 help=
'Compute mask for specific IoV')
48parser.add_argument(
'--runHigh', default=-1, type=int,
49 help=
'Compute mask for specific IoV')
54 help=
'Compute mask for specific IoV')
55parser.add_argument(
'--maxSubRuns', default=20, type=int,
56 help=
'Maximum number of subruns to use')
57args = parser.parse_args()
61pxd_ignore_run_list = [ExpRun(3, 484), ExpRun(3, 485), ExpRun(3, 486), ExpRun(3, 524)]
64iov_to_calibrate = IoV(
68 run_high=args.runHigh)
70map_file_path =
"file_iov_map.pkl"
71with open(map_file_path,
'br')
as map_file:
72 files_to_iovs = pickle.load(map_file)
75input_file_iov_set = set(files_to_iovs.values())
76print(f
'Number of distinct iovs {len(input_file_iov_set)}')
81for file_iov
in input_file_iov_set:
82 if iov_to_calibrate.contains(file_iov):
83 subruns = [k
for k, v
in files_to_iovs.items()
if v == file_iov]
84 input_files.extend(subruns[:args.maxSubRuns])
87print(f
'Number selected input files: {len(input_files)}')
90hotpixelcollector = b2.register_module(
"PXDRawHotPixelMaskCollector")
91hotpixelcollector.param(
"granularity",
"run")
94gearbox = b2.register_module(
'Gearbox')
95gearbox.param(
'fileName',
'geometry/Beast2_phase2.xml')
96geometry = b2.register_module(
'Geometry')
97geometry.param(
'components', [
'PXD'])
98pre_collector_path = b2.create_path()
99pre_collector_path.add_module(gearbox)
100pre_collector_path.add_module(geometry)
101pre_collector_path.add_module(
'PXDUnpacker')
106hotpixelkiller = PXDHotPixelMaskCalibrationAlgorithm()
109hotpixelkiller.forceContinueMasking =
False
111hotpixelkiller.minEvents = 30000
114hotpixelkiller.minHits = 15
116hotpixelkiller.pixelMultiplier = 7
118hotpixelkiller.maskDrains =
True
120hotpixelkiller.drainMultiplier = 7
122hotpixelkiller.maskRows =
True
124hotpixelkiller.rowMultiplier = 7
126hotpixelkiller.setPrefix(
"PXDRawHotPixelMaskCollector")
130 name=
"PXDHotPixelMaskCalibrationAlgorithm",
131 collector=hotpixelcollector,
132 algorithms=hotpixelkiller,
133 input_files=input_files)
134cal.pre_collector_path = pre_collector_path
137cal.files_to_iovs = files_to_iovs
141cal.strategies = SequentialRunByRun
143cal.ignored_runs = pxd_ignore_run_list
144cal.algorithms[0].params[
"iov_coverage"] = iov_to_calibrate
146cal.max_files_per_collector_job = 1
150cal_fw.add_calibration(cal)
152cal_fw.backend = backends.Local(max_processes=20)
157cal_fw.output_dir = f
'calibration_results_range_{args.runLow}_{args.runHigh}'
158cal_fw.run(iov=iov_to_calibrate)