Belle II Software  release-08-01-10
metaoptions.py
1 #!/usr/bin/env python3
2 
3 
10 
11 # std
12 from typing import Optional, Iterable, List
13 
14 
16  """
17  Class to simplify the parsing of plot options
18  supplied by the MetaOption named object attached
19  to root plots.
20 
21  A typical meta options list might look like this:
22  ["pvalue-warn=0.9", "pvalue-error=0.4"]
23  """
24 
25  def __init__(self, meta_option_list: Optional[Iterable] = None):
26  """
27  Initialize MetaOptionParser
28  @param meta_option_list: list of meta options read from ROOT object
29  or None
30  """
31  if meta_option_list is None:
32  meta_option_list = []
33  meta_option_list = list(meta_option_list)
34 
35  self.mo: List[str] = meta_option_list
36 
37  def has_option(self, option_name: str) -> bool:
38  """
39  Checks whether an option is contained in the
40  meta options
41  @param option_name: name of the option to check for
42  @return: True if the option is contained in the meta option list
43  False otherwise
44  """
45  return option_name in self.mo
46 
47  def pvalue_warn(self) -> float:
48  """
49  @return: The custom warning level for the pvalue setting of plot
50  comparison. None if no custom value was set for the plot.
51  """
52  return self.float_valuefloat_value("pvalue-warn")
53 
54  def pvalue_error(self) -> float:
55  """
56  @return: The custom error level for the pvalue setting of plot
57  comparison. None if no custom value was set for the plot.
58  """
59  return self.float_valuefloat_value("pvalue-error")
60 
61  def float_value(self, key, default: Optional[float] = None) -> float:
62  """
63  Extract the float value from a meta option list
64  @param key: the key to identify the value from the list
65  @param default: default value
66  @return: The float value or the default value if this key did not exist
67  or the float value could not be parsed.
68  """
69  v = self.parse_key_valueparse_key_value(key)
70  if v is None:
71  return default
72  try:
73  return float(v)
74  except ValueError:
75  return default
76 
77  def int_value(self, key, default: Optional[int] = None) -> int:
78  """
79  Extract the int value from a meta option list
80  @param key: the key to identify the value from the list
81  @param default: default value
82  @return: The int value or None if this key did not exist
83  or the float value could not be parsed.
84  """
85  v = self.parse_key_valueparse_key_value(key)
86  if v is None:
87  return default
88  try:
89  return int(v)
90  except ValueError:
91  return default
92 
93  def parse_key_value(self, key: str):
94  """
95  Searches the meta options list for a key value entry and parses it
96  @param key: The key to look for
97  @retun: The value which was associated to the key or None if the
98  key was not found.
99  """
100  it = [s for s in self.mo if s.startswith(key + "=")]
101  if len(it) == 0:
102  return None
103 
104  key_value_pair = it[0].split("=")
105 
106  if len(key_value_pair) < 2:
107  return None
108 
109  return key_value_pair[1]
def __init__(self, Optional[Iterable] meta_option_list=None)
Definition: metaoptions.py:25
def parse_key_value(self, str key)
Definition: metaoptions.py:93
float float_value(self, key, Optional[float] default=None)
Definition: metaoptions.py:61
int int_value(self, key, Optional[int] default=None)
Definition: metaoptions.py:77
bool has_option(self, str option_name)
Definition: metaoptions.py:37