17from generators
import add_kkmc_generator
18from simulation
import add_simulation
19from validation_gt
import get_validation_globaltags
20from rawdata
import add_unpackers
21from reconstruction
import add_reconstruction
22from argparse
import ArgumentParser
28parser = ArgumentParser(description=
"Measure the execution time.")
33 choices=[
"high",
"low",
"data"],
34 help=
"Multiplicity or type of events",
36parser.add_argument(
"-l",
"--limits", help=
"Name of file containing limits")
37parser.add_argument(
"-f",
"--file", help=
"Name of benchmark output file")
38parser.add_argument(
"-c",
"--csv", help=
"Name of statistics csv file")
39args = parser.parse_args()
42main = b2.create_path()
43b2.set_log_level(b2.LogLevel.ERROR)
45if args.multiplicity ==
"data":
47 b2.conditions.override_globaltags(get_validation_globaltags())
49 input_files = glob.glob(
50 os.environ.get(
"BELLE2_VALIDATION_DATA_DIR",
"")
51 +
"/rawdata/physics.0010.05095*.root"
53 main.add_module(
"RootInput", inputFileNames=input_files)
55 main.add_module(
"EventInfoPrinter").set_log_level(b2.LogLevel.INFO)
58 main.add_module(
"Gearbox")
59 main.add_module(
"Geometry", useDB=
True)
66 main.add_module(
"EventInfoSetter", evtNumList=[1000])
67 main.add_module(
"EventInfoPrinter").set_log_level(b2.LogLevel.INFO)
69 if args.multiplicity ==
"high":
71 main.add_module(
"EvtGenInput")
73 elif args.multiplicity ==
"low":
75 add_kkmc_generator(main,
"mu+mu-")
81 os.environ.get(
"BELLE2_BACKGROUND_DIR",
"/sw/belle2/bkg") +
"/*.root"
86add_reconstruction(main)
89b2.process(main, calculateStatistics=
True)
91if args.csv
is not None:
92 b2.statistics.csv(args.csv)
96limits_file = args.limits
97default_limits_file = args.multiplicity +
".limits"
98if limits_file
is None and os.path.isfile(default_limits_file):
99 limits_file = default_limits_file
100if limits_file
is not None:
101 for line
in open(limits_file).readlines():
102 entries = line.split()
103 limits[entries[0]] = float(entries[1])
105 limits[entries[0]] /= float(entries[2])
110for module
in b2.statistics.modules:
111 if "Sum_" not in module.name:
113 category = module.name[4:]
114 categories.append(category)
115 if category
not in times.keys():
117 times[category] += module.time_mean(b2.statistics.EVENT) * 1e-6
121if args.file
is not None:
122 output = open(args.file,
"w")
125b2.set_log_level(b2.LogLevel.INFO)
127for category
in categories:
128 if category
not in times.keys():
130 time = times[category]
131 message = f
"Execution time per event for {category} is {time:.0f} ms"
133 if category
in limits.keys():
134 fraction = time / limits[category]
135 if fraction > max_fraction:
136 max_fraction = fraction
137 message += f
" = {fraction:.0%} of the limit."
141 b2.B2WARNING(message)
147 if output
is not None:
148 output.write(f
"{category} {time:.2f}")
150 output.write(f
" {fraction:.4f}")
153if output
is not None:
157sys.exit(0
if max_fraction <= 1
else 1)