18 NUMBER_OF_PROCESSES = 20
21 set_log_level(LogLevel.ERROR)
24 use_central_database(
"Calibration_Offline_Development")
26 from caf.utils
import IoV
27 import SetMetaTimeModule
29 import multiprocessing
33 from ROOT
import Belle2
37 """ Main class to steer the production of ROOT tuples for beast """
38 def __init__(self, iov, file_paths, output_dir):
40 super(CalculationProcess, self).
__init__()
51 rootinput = register_module(
'RootInput')
52 rootinput.param(
'inputFileNames', self.
file_paths)
53 rootinput.param(
'branchNames', [
'EventMetaData',
'RawPXDs',
'RawSVDs',
'RawCDCs'])
54 gearbox = register_module(
'Gearbox')
55 gearbox.param(
'fileName',
'geometry/Beast2_phase2.xml')
56 geometry = register_module(
'Geometry')
57 geometry.param(
'components', [
'PXD',
'SVD',
'CDC'])
58 pxdclusterizer = register_module(
'PXDClusterizer')
59 pxdclusterizer.param(
'ElectronicNoise', 1.0)
60 pxdclusterizer.param(
'SeedSN', 9.0)
61 pxdtupleproducer = register_module(
'PXDBgTupleProducer')
62 pxdtupleproducer.param(
'outputFileName',
63 '{}/pxd_beast_tuple_exp_{}_run_{}.root'.format(self.
output_dir,
69 main.add_module(rootinput)
71 main.add_module(gearbox)
72 main.add_module(geometry)
73 main.add_module(
'PXDUnpacker')
74 main.add_module(
"ActivatePXDPixelMasker")
75 main.add_module(
"ActivatePXDGainCalibrator")
76 main.add_module(
"PXDRawHitSorter")
77 main.add_module(pxdclusterizer)
78 main.add_module(pxdtupleproducer)
79 main.add_module(register_module(
'Progress'))
89 def worker(task_q, done_q):
90 for iov, file_paths, output_dir
in iter(task_q.get,
'STOP'):
91 print(
"Start processing IoV={}".format(str(iov)))
98 if __name__ ==
"__main__":
102 parser = argparse.ArgumentParser(description=
"Produce pxd tuples and histofiles from ROOT formatted raw data")
103 parser.add_argument(
'--runLow', default=0, type=int, help=
'Compute mask for specific IoV')
104 parser.add_argument(
'--runHigh', default=-1, type=int, help=
'Compute mask for specific IoV')
105 parser.add_argument(
'--expNo', default=3, type=int, help=
'Compute mask for specific IoV')
106 parser.add_argument(
'--outputDir', default=
'./', type=str, help=
'Name of output directory for tuples')
107 args = parser.parse_args()
110 iov_to_calibrate = IoV(exp_low=args.expNo, run_low=args.runLow, exp_high=args.expNo, run_high=args.runHigh)
112 map_file_path =
"file_iov_map.pkl"
113 with open(map_file_path,
'br')
as map_file:
114 files_to_iovs = pickle.load(map_file)
117 iov_set = set(files_to_iovs.values())
122 if iov_to_calibrate.contains(iov):
123 file_paths = [k
for k, v
in files_to_iovs.items()
if v == iov]
124 iovs_to_files[iov] = file_paths
127 task_queue = multiprocessing.Queue()
128 done_queue = multiprocessing.Queue()
131 for iov, file_paths
in iovs_to_files.items():
132 task_queue.put((iov, file_paths, args.outputDir))
135 for i
in range(NUMBER_OF_PROCESSES):
136 multiprocessing.Process(target=worker, args=(task_queue, done_queue)).start()
139 print(
'Unordered results:')
140 for i
in range(len(iovs_to_files)):
141 print(
'\t', done_queue.get())
144 for i
in range(NUMBER_OF_PROCESSES):
145 task_queue.put(
'STOP')