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