Belle II Software  release-08-01-10
evtmetadata.py
1 #!/usr/bin/env python3
2 
3 
10 
11 import basf2
12 from ROOT import Belle2
13 from b2test_utils import safe_process
14 
15 basf2.set_random_seed("something important")
16 
17 
18 class NoopModule(basf2.Module):
19 
20  """Doesn't do anything."""
21 
22 
23 class EvtMetaDataTest(basf2.Module):
24 
25  """Prints EventMetaData objects and stops event processing in event 3."""
26 
27  def __init__(self):
28  """constructor."""
29 
30  # need to call super() _if_ we reimplement the constructor
31  super().__init__()
32  basf2.B2INFO('event\trun\texp')
33 
34  def initialize(self):
35  """reimplementation of Module::initialize()."""
36 
37  basf2.B2INFO('EvtMetaDataTest::initialize()')
38 
39  def beginRun(self):
40  """reimplementation of Module::beginRun()."""
41 
42  basf2.B2INFO('EvtMetaDataTest::beginRun()')
43 
44  def event(self):
45  """reimplementation of Module::event()."""
46 
47  evtmetadata = Belle2.PyStoreObj('EventMetaData')
48 
49  if not evtmetadata:
50  basf2.B2ERROR('No EventMetaData found')
51  else:
52  event = evtmetadata.obj().getEvent()
53  run = evtmetadata.obj().getRun()
54  exp = evtmetadata.obj().getExperiment()
55  basf2.B2INFO(f"{event}\t{run}\t{exp}")
56  if event == 4:
57  # stop event processing.
58  evtmetadata.obj().setEndOfData()
59 
60  def endRun(self):
61  """reimplementation of Module::endRun()."""
62 
63  basf2.B2INFO('EvtMetaDataTest::endRun()')
64 
65  def terminate(self):
66  """reimplementation of Module::terminate()."""
67 
68  basf2.B2INFO('EvtMetaDataTest::terminate()')
69 
70 
71 # Normal steering file part begins here
72 
73 for skipNEvents in range(10):
74  # Create main path
75  main = basf2.Path()
76 
77  # not used for anything, just checking wether the master module
78  # can be found if it's not the first module in the path.
79  main.add_module(NoopModule())
80 
81  # exp 0 has only 2 events, so cannot trigger the test module
82  # also tests for a problem where beginRun() wasn't called
83  # exp 1 has only 2 events, so cannot trigger the test module,
84  # exp 2 has no events and will be skipped
85  # exp 3 will be stopped in event 3 by EvtMetaDataTest
86  main.add_module('EventInfoSetter',
87  expList=[0, 1, 2, 3],
88  runList=[0, 1, 2, 3],
89  evtNumList=[2, 2, 0, 5],
90  skipNEvents=skipNEvents)
91 
92  main.add_module(EvtMetaDataTest())
93 
94  safe_process(main)
95 
96 # test skipping to specific events
97 skipToEvents = [
98  [0, 0, 1],
99  [0, 0, 3],
100  [0, 1, 1],
101  [0, 1, 6],
102  [0, 2, 3],
103  [1, 0, 1],
104  [2, 0, 1],
105 ]
106 
107 for event in skipToEvents:
108  basf2.B2INFO("skipping to exp={}, run={}, evt={}".format(*event))
109  main = basf2.Path()
110  main.add_module("EventInfoSetter", evtNumList=[3, 3, 3, 3], expList=[0, 0, 0, 1],
111  runList=[0, 1, 2, 0], skipToEvent=event)
112  main.add_module(EvtMetaDataTest())
113  safe_process(main)
a (simplified) python wrapper for StoreObjPtr.
Definition: PyStoreObj.h:67
static ExpRun getRun(std::map< ExpRun, std::pair< double, double >> runs, double t)
Get exp number + run number from time.
Definition: Splitter.cc:262