Belle II Software  release-05-01-25
test_validation_metadata_tools.py
1 #!/usr/bin/env python3
2 
3 # std
4 import unittest
5 import tempfile
6 import pathlib
7 
8 # 3rd
9 import ROOT
10 import basf2
11 import modularAnalysis
12 import generators as ge
13 
14 # ours
15 from validation_tools.metadata import create_validation_histograms
16 from validationplots import get_metadata
17 
18 
19 TRIVIAL_DECFILE = """
20 Alias MyB+ B+
21 Alias MyB- B-
22 
23 Decay Upsilon(4S)
24 1.0 MyB+ MyB- VSS;
25 Enddecay
26 
27 End
28 """
29 
30 
31 class TestValidationMetadataSetter(unittest.TestCase):
32  """ This test tests the ValidationMetadataSetter module via its interface
33  :func:`validation_tools.metadata.create_validation_histograms`
34  """
35  def setUp(self):
36  """ Open temporary directory to work in. """
37 
38  self.tmp_dir = tempfile.TemporaryDirectory()
39 
40  def tearDown(self):
41  """ Clean up temporary directory """
42  self.tmp_dir.cleanup()
43 
44  def test(self):
45  """ Perform tests """
46  tmp_dir_path = pathlib.Path(self.tmp_dir.name)
47 
48  dec_path = tmp_dir_path / "test_y4s_trivial.dec"
49  with dec_path.open("w") as decfile:
50  decfile.write(TRIVIAL_DECFILE)
51 
52  # Run basf2
53  # ----------------------------------------------------------------------
54 
55  path = basf2.create_path()
56  modularAnalysis.setupEventInfo(noEvents=10, path=path)
57  ge.add_evtgen_generator(
58  path=path,
59  finalstate='signal',
60  signaldecfile=basf2.find_file(str(dec_path))
61  )
62 
64 
65  modularAnalysis.fillParticleListFromMC("Upsilon(4S)", "", path=path)
66 
67  out_file_path = tmp_dir_path / "out.root"
68  create_validation_histograms(
69  path,
70  out_file_path,
71  "Upsilon(4S)",
72  variables_1d=[
73  (
74  "M", 100, 5, 15, "mass", "me <wontreply@dont.try>",
75  "description of M", "nothing to check",
76  "x label"
77  )
78  ],
79  variables_2d=[
80  (
81  "M", 100, 5, 15, "M", 100, 5, 15, "mass vs mass",
82  "me <wontreply@dont.try>", "some description nobody reads",
83  "nothing to check", "x label", "why label?", "mop1, mop2"
84  )
85  ],
86  description="Overall description of plots in this package."
87  )
88 
89  basf2.process(path=path)
90 
91  # Test outcome
92  # ----------------------------------------------------------------------
93 
94  tf = ROOT.TFile(str(out_file_path))
95 
96  # Overall
97  # *******
98 
99  d = tf.Get("Description")
100  self.assertEqual(
101  d.GetTitle(),
102  "Overall description of plots in this package."
103  )
104 
105  # 1D Histogram
106  # ************
107 
108  md = get_metadata(tf.Get("M"))
109  self.assertEqual(md["description"], "description of M")
110  self.assertEqual(md["check"], "nothing to check")
111  self.assertEqual(md["metaoptions"], [])
112  self.assertEqual(md["contact"], "me <wontreply@dont.try>")
113 
114  # 2D Histogram
115  # ************
116 
117  md = get_metadata(tf.Get("MM"))
118  self.assertEqual(md["description"], "some description nobody reads")
119  self.assertEqual(md["check"], "nothing to check")
120  self.assertEqual(md["metaoptions"], ["mop1", "mop2"])
121  self.assertEqual(md["contact"], "me <wontreply@dont.try>")
122 
123 
124 if __name__ == "__main__":
125  unittest.main()
test_validation_metadata_tools.TestValidationMetadataSetter.tmp_dir
tmp_dir
Temporary directory.
Definition: test_validation_metadata_tools.py:38
modularAnalysis.loadGearbox
def loadGearbox(path, silence_warning=False)
Definition: modularAnalysis.py:324
basf2.process
def process(path, max_event=0)
Definition: __init__.py:25
modularAnalysis.fillParticleListFromMC
def fillParticleListFromMC(decayString, cut, addDaughters=False, skipNonPrimaryDaughters=False, writeOut=False, path=None)
Definition: modularAnalysis.py:907
test_validation_metadata_tools.TestValidationMetadataSetter.tearDown
def tearDown(self)
Definition: test_validation_metadata_tools.py:40
test_validation_metadata_tools.TestValidationMetadataSetter
Definition: test_validation_metadata_tools.py:31
test_validation_metadata_tools.TestValidationMetadataSetter.setUp
def setUp(self)
Definition: test_validation_metadata_tools.py:35
validation_tools.metadata
Definition: metadata.py:1
modularAnalysis.setupEventInfo
def setupEventInfo(noEvents, path)
Definition: modularAnalysis.py:306
test_validation_metadata_tools.TestValidationMetadataSetter.test
def test(self)
Definition: test_validation_metadata_tools.py:44