Belle II Software development
rename_payload.py
1
8
9import argparse
10
11import basf2
12from ROOT import Belle2 as B2 # noqa: N811
13
14
15def parse_args() -> argparse.Namespace:
16 parser = argparse.ArgumentParser(
17 description='Copy a payload from a global tag into a local database and rename it.',
18 )
19 parser.add_argument(
20 '--gt', required=True,
21 help='Global tag to process'
22 )
23 parser.add_argument(
24 '--input-payload', '-i', required=True,
25 help='Name of the payload to read from the global tag'
26 )
27 parser.add_argument(
28 '--output-payload', '-o', required=True,
29 help='Name under which to store the payload locally'
30 )
31 parser.add_argument(
32 '--exp', type=int, required=True,
33 help='Experiment number to use when looking up the payload',
34 )
35 parser.add_argument(
36 '--run', type=int, required=True,
37 help='Run number to use when looking up the payload',
38 )
39 return parser.parse_args()
40
41
42def make_event_meta_data(exp: int, run: int, event: int = 0) -> None:
43 """Register and populate a minimal EventMetaData so PyDBObj works."""
44 B2.DataStore.Instance().setInitializeActive(True)
45 event_meta_data = B2.PyStoreObj('EventMetaData')
46 event_meta_data.registerInDataStore()
47 event_meta_data.assign(B2.EventMetaData(event, run, exp), True)
48 B2.DataStore.Instance().setInitializeActive(False)
49
50
51def load_payload(name: str):
52 """Fetch a payload by name for the exp/run set in EventMetaData, or B2FATAL."""
53 payload = B2.PyDBObj(name)
54 if not payload.isValid():
55 basf2.B2FATAL(f'{name} is not valid for the requested exp/run')
56 return payload.obj(), payload.getIoV()
57
58
59def main() -> None:
60 args = parse_args()
61
62 basf2.conditions.override_globaltags([args.gt])
63
64 make_event_meta_data(args.exp, args.run)
65
66 payload_obj, iov = load_payload(args.input_payload)
67
68 db = B2.Database.Instance()
69 ok = db.storeData(args.output_payload, payload_obj, iov)
70 if not ok:
71 basf2.B2FATAL(f'Failed to store payload as {args.output_payload!r}')
72
73 basf2.B2INFO(
74 f'Stored payload {args.input_payload!r} (from {args.gt!r}, '
75 f'exp={args.exp}, run={args.run}) as {args.output_payload!r}'
76 )
77
78
79if __name__ == '__main__':
80 main()
Definition main.py:1