Belle II Software  release-08-01-10
test_std_photons.py
1 #!/usr/bin/env python3
2 
3 
10 
11 import inspect
12 import unittest
13 
14 from basf2 import create_path
15 import stdPhotons
16 
17 
18 class TestStdPhotons(unittest.TestCase):
19  """Test case for standard photon lists"""
20 
21  def _check_list(self, listtype=None, std_function=stdPhotons.stdPhotons, expected_lists=["all"]):
22  """check that a given listtype function works"""
23  testpath = create_path()
24  if (std_function is stdPhotons.stdPhotons) and (listtype is not None):
25  std_function(listtype, path=testpath)
26  else:
27  std_function(path=testpath)
28 
29  # verify that we load only the list-creating modules
30  self.assertEqual(
31  len(testpath.modules()), len(set(expected_lists)) + 1 if listtype == 'all' else len(set(expected_lists)) + 3,
32  f"List {listtype} doesn't work with function {std_function.__name__}")
33  self.assertTrue(all((module.type() == "ParticleLoader") or (module.type() == "ParticleListManipulator")
34  or (module.type() == "ParticleSelector")
35  for module in testpath.modules()))
36 
37  #
38  built_list = []
39  for module in testpath.modules():
40  for param in module.available_params():
41  if param.name == 'decayStrings':
42  name = param.values[0].split(':')[1]
43  built_list.append(name)
44  if param.name == 'outputListName':
45  name = str(param.values).split(':')[1]
46  built_list.append(name)
47 
48  # we have the particle lists we expect
49  for a, b in zip(built_list, expected_lists):
50  self.assertEqual(a, b, f"Loaded list \'{a}\' instead of \'{b}\' with function {std_function.__name__}")
51 
52  def test_nonsense_list(self):
53  """Check that the builder function raises a ValueError for a non-existing list name."""
54  self.assertRaises(ValueError, self._check_list_check_list, "flibble")
55 
57  """
58  Check that the default list type is one of the lists in the cases that are checked for in :func:`stdPhotons.stdPhotons`.
59 
60  This test relies on ``ValueError`` being raised for nonsense list types, which is tested by
61  :func:`test_nonsense_list`. However, :func:`test_nonsense_list` doesn't ensure that the default list works, so
62  for that this test is needed.
63  """
64  test_path = create_path()
65  try:
66  stdPhotons.stdPhotons(path=test_path)
67  except ValueError:
68  stdPhotons_signature = inspect.signature(stdPhotons.stdPhotons)
69  default_listtype = stdPhotons_signature.parameters["listtype"].default
70  self.fail(f"stdPhotons default listtype {default_listtype} is not in set of allowed list names.")
71 
73  """Check that the default list type (loose) works."""
74  # basically a duplicate of test_loose_list
75  self._check_list_check_list(expected_lists=["cdc", "cdc", "loose"])
76 
77  def test_all_list(self):
78  """check that the builder function works with the all list"""
79  self._check_list_check_list("all", expected_lists=["all"])
80 
81  def test_cdc_list(self):
82  """check that the builder function works with the cdc list"""
83  self._check_list_check_list("cdc", expected_lists=["cdc"])
84 
85  def test_loose_list(self):
86  """check that the builder function works with the loose list"""
87  self._check_list_check_list("loose", expected_lists=["cdc", "cdc", "loose"])
88 
89  def test_default_list(self):
90  """check that the builder function works with the default (loose) list"""
91  self._check_list_check_list(expected_lists=["cdc", "cdc", "loose"])
92 
93  def test_tight_list(self):
94  """check that the builder function works with the tight list"""
95  self._check_list_check_list("tight", expected_lists=["cdc", "cdc", "loose", "tight"])
96 
98  """check that the builder function works with the pi0eff60_May2020 list"""
99  self._check_list_check_list("pi0eff60_May2020", expected_lists=["pi0eff60_May2020"])
100 
102  """check that the builder function works with the pi0eff50_May2020 list"""
103  self._check_list_check_list("pi0eff50_May2020", expected_lists=["pi0eff50_May2020"])
104 
106  """check that the builder function works with the pi0eff40_May2020 list"""
107  self._check_list_check_list("pi0eff40_May2020", expected_lists=["pi0eff40_May2020"])
108 
110  """check that the builder function works with the pi0eff30_May2020 list"""
111  self._check_list_check_list("pi0eff30_May2020", expected_lists=["pi0eff30_May2020"])
112 
114  """check that the builder function works with the pi0eff20_May2020 list"""
115  self._check_list_check_list("pi0eff20_May2020", expected_lists=["pi0eff20_May2020"])
116 
118  """check that the builder function works with the pi0eff10_May2020 list"""
119  self._check_list_check_list("pi0eff10_May2020", expected_lists=["pi0eff10_May2020"])
120 
121  def test_skim(self):
122  """check that the builder function works with the skim list"""
123  self._check_list_check_list("skim", std_function=stdPhotons.loadStdSkimPhoton, expected_lists=["cdc", "cdc", "loose", "skim"])
124 
125  def test_belle(self):
126  """check that the builder function works with the belle list"""
127  self._check_list_check_list("goodBelle", std_function=stdPhotons.loadStdGoodBellePhoton, expected_lists=["goodBelle"])
128 
129 
130 if __name__ == '__main__':
131  unittest.main()
def _check_list(self, listtype=None, std_function=stdPhotons.stdPhotons, expected_lists=["all"])
def stdPhotons(listtype='loose', path=None, beamBackgroundMVAWeight="", fakePhotonMVAWeight="", biasCorrectionTable="")
Definition: stdPhotons.py:19