26 set_log_level(LogLevel.INFO)
32 from ROOT.Belle2
import PXDHotPixelMaskCalibrationAlgorithm
33 from caf.framework
import Calibration, CAF
34 from caf
import backends
35 from caf.utils
import ExpRun, IoV
36 from caf.utils
import get_iov_from_file
37 from caf.utils
import find_absolute_file_paths
38 from caf.strategies
import SequentialRunByRun, SingleIOV, SimpleRunByRun
41 parser = argparse.ArgumentParser(description=
"Compute hot pixel masks for PXD from rawhit occupancy")
42 parser.add_argument(
'--runLow', default=0, type=int, help=
'Compute mask for specific IoV')
43 parser.add_argument(
'--runHigh', default=-1, type=int, help=
'Compute mask for specific IoV')
44 parser.add_argument(
'--expNo', default=3, type=int, help=
'Compute mask for specific IoV')
45 parser.add_argument(
'--maxSubRuns', default=20, type=int, help=
'Maximum number of subruns to use')
46 args = parser.parse_args()
50 pxd_ignore_run_list = [ExpRun(3, 484), ExpRun(3, 485), ExpRun(3, 486), ExpRun(3, 524)]
53 iov_to_calibrate = IoV(exp_low=args.expNo, run_low=args.runLow, exp_high=args.expNo, run_high=args.runHigh)
55 map_file_path =
"file_iov_map.pkl"
56 with open(map_file_path,
'br')
as map_file:
57 files_to_iovs = pickle.load(map_file)
60 input_file_iov_set = set(files_to_iovs.values())
61 print(
'Number of distinct iovs {}'.format(len(input_file_iov_set)))
66 for file_iov
in input_file_iov_set:
67 if iov_to_calibrate.contains(file_iov):
68 subruns = [k
for k, v
in files_to_iovs.items()
if v == file_iov]
69 input_files.extend(subruns[:args.maxSubRuns])
72 print(
'Number selected input files: {}'.format(len(input_files)))
75 hotpixelcollector = register_module(
"PXDRawHotPixelMaskCollector")
76 hotpixelcollector.param(
"granularity",
"run")
79 gearbox = register_module(
'Gearbox')
80 gearbox.param(
'fileName',
'geometry/Beast2_phase2.xml')
81 geometry = register_module(
'Geometry')
82 geometry.param(
'components', [
'PXD'])
83 pre_collector_path = create_path()
84 pre_collector_path.add_module(gearbox)
85 pre_collector_path.add_module(geometry)
86 pre_collector_path.add_module(
'PXDUnpacker')
90 hotpixelkiller = PXDHotPixelMaskCalibrationAlgorithm()
92 hotpixelkiller.forceContinueMasking =
False
93 hotpixelkiller.minEvents = 30000
94 hotpixelkiller.minHits = 15
95 hotpixelkiller.pixelMultiplier = 7
96 hotpixelkiller.maskDrains =
True
97 hotpixelkiller.drainMultiplier = 7
98 hotpixelkiller.maskRows =
True
99 hotpixelkiller.rowMultiplier = 7
101 hotpixelkiller.setPrefix(
"PXDRawHotPixelMaskCollector")
105 name=
"PXDHotPixelMaskCalibrationAlgorithm",
106 collector=hotpixelcollector,
107 algorithms=hotpixelkiller,
108 input_files=input_files)
109 cal.pre_collector_path = pre_collector_path
112 cal.files_to_iovs = files_to_iovs
116 cal.strategies = SequentialRunByRun
118 cal.ignored_runs = pxd_ignore_run_list
119 cal.algorithms[0].params[
"iov_coverage"] = iov_to_calibrate
121 cal.max_files_per_collector_job = 1
125 cal_fw.add_calibration(cal)
129 cal_fw.heartbeat = 30
131 cal_fw.output_dir =
'calibration_results_range_{}_{}'.format(args.runLow, args.runHigh)
132 cal_fw.run(iov=iov_to_calibrate)