24 import multiprocessing
25 import SetMetaTimeModule
26 from caf.utils
import IoV
28 NUMBER_OF_PROCESSES = 20
30 b2.set_log_level(b2.LogLevel.ERROR)
33 b2.use_central_database(
"Calibration_Offline_Development")
40 """ Main class to steer the production of ROOT tuples for beast """
42 def __init__(self, iov, file_paths, output_dir):
44 super(CalculationProcess, self).
__init__()
55 rootinput = b2.register_module(
'RootInput')
56 rootinput.param(
'inputFileNames', self.
file_pathsfile_paths)
59 'EventMetaData',
'RawPXDs',
'RawSVDs',
'RawCDCs'])
60 gearbox = b2.register_module(
'Gearbox')
61 gearbox.param(
'fileName',
'geometry/Beast2_phase2.xml')
62 geometry = b2.register_module(
'Geometry')
63 geometry.param(
'components', [
'PXD',
'SVD',
'CDC'])
64 pxdclusterizer = b2.register_module(
'PXDClusterizer')
65 pxdclusterizer.param(
'ElectronicNoise', 1.0)
66 pxdclusterizer.param(
'SeedSN', 9.0)
67 pxdtupleproducer = b2.register_module(
'PXDBgTupleProducer')
68 pxdtupleproducer.param(
70 '{}/pxd_beast_tuple_exp_{}_run_{}.root'.format(
76 main = b2.create_path()
77 main.add_module(rootinput)
79 main.add_module(gearbox)
80 main.add_module(geometry)
81 main.add_module(
'PXDUnpacker')
82 main.add_module(
"ActivatePXDPixelMasker")
83 main.add_module(
"ActivatePXDGainCalibrator")
84 main.add_module(
"PXDRawHitSorter")
85 main.add_module(pxdclusterizer)
86 main.add_module(pxdtupleproducer)
87 main.add_module(b2.register_module(
'Progress'))
97 def worker(task_q, done_q):
98 for iov, file_paths, output_dir
in iter(task_q.get,
'STOP'):
99 print(
"Start processing IoV={}".format(str(iov)))
106 if __name__ ==
"__main__":
110 parser = argparse.ArgumentParser(
111 description=
"Produce pxd tuples and histofiles from ROOT formatted raw data")
116 help=
'Compute mask for specific IoV')
117 parser.add_argument(
'--runHigh', default=-1, type=int,
118 help=
'Compute mask for specific IoV')
123 help=
'Compute mask for specific IoV')
128 help=
'Name of output directory for tuples')
129 args = parser.parse_args()
132 iov_to_calibrate = IoV(
136 run_high=args.runHigh)
138 map_file_path =
"file_iov_map.pkl"
139 with open(map_file_path,
'br')
as map_file:
140 files_to_iovs = pickle.load(map_file)
143 iov_set = set(files_to_iovs.values())
148 if iov_to_calibrate.contains(iov):
149 file_paths = [k
for k, v
in files_to_iovs.items()
if v == iov]
150 iovs_to_files[iov] = file_paths
153 task_queue = multiprocessing.Queue()
154 done_queue = multiprocessing.Queue()
157 for iov, file_paths
in iovs_to_files.items():
158 task_queue.put((iov, file_paths, args.outputDir))
161 for i
in range(NUMBER_OF_PROCESSES):
162 multiprocessing.Process(
163 target=worker, args=(
164 task_queue, done_queue)).start()
167 print(
'Unordered results:')
168 for i
in range(len(iovs_to_files)):
169 print(
'\t', done_queue.get())
172 for i
in range(NUMBER_OF_PROCESSES):
173 task_queue.put(
'STOP')
def __init__(self, iov, file_paths, output_dir)
output_dir
output directory