12from ROOT
import Belle2
as B2
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.',
20 '--gt', required=
True,
21 help=
'Global tag to process'
24 '--input-payload',
'-i', required=
True,
25 help=
'Name of the payload to read from the global tag'
28 '--output-payload',
'-o', required=
True,
29 help=
'Name under which to store the payload locally'
32 '--exp', type=int, required=
True,
33 help=
'Experiment number to use when looking up the payload',
36 '--run', type=int, required=
True,
37 help=
'Run number to use when looking up the payload',
39 return parser.parse_args()
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)
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()
62 basf2.conditions.override_globaltags([args.gt])
64 make_event_meta_data(args.exp, args.run)
66 payload_obj, iov = load_payload(args.input_payload)
68 db = B2.Database.Instance()
69 ok = db.storeData(args.output_payload, payload_obj, iov)
71 basf2.B2FATAL(f
'Failed to store payload as {args.output_payload!r}')
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}'
79if __name__ ==
'__main__':