Belle II Software  release-08-01-10
Method Class Reference

Public Member Functions

def __init__ (self, identifier)
 
def train_teacher (self, datafiles, treename, general_options=None, specific_options=None)
 
def apply_expert (self, datafiles, treename)
 

Public Attributes

 identifier
 Identifier of the method.
 
 weightfile
 Weightfile of the method.
 
 general_options
 General options of the method.
 
 specific_options
 Specific options of the method.
 
 importances
 Dictionary of the variable importances calculated by the method.
 
 variables
 List of variables sorted by their importance.
 
 root_variables
 List of the variable importances calculated by the method, but with the root compatible variable names.
 
 root_importances
 Dictionary of the variables sorted by their importance but with root compatoble variable names.
 
 description
 Description of the method as a xml string returned by basf2_mva.info.
 
 spectators
 List of spectators.
 
 root_spectators
 List of spectators with root compatible names.
 

Detailed Description

Wrapper class providing an interface to the method stored under the given identifier.
It loads the Options, can apply the expert and train new ones using the current as a prototype.
This class is used by the basf_mva_evaluation tools

Definition at line 129 of file basf2_mva_util.py.

Constructor & Destructor Documentation

◆ __init__()

def __init__ (   self,
  identifier 
)
Load a method stored under the given identifier
@param identifier identifying the method

Definition at line 136 of file basf2_mva_util.py.

136  def __init__(self, identifier):
137  """
138  Load a method stored under the given identifier
139  @param identifier identifying the method
140  """
141  # Always avoid the top-level 'import ROOT'.
142  import ROOT # noqa
143  # Initialize all the available interfaces
144  ROOT.Belle2.MVA.AbstractInterface.initSupportedInterfaces()
145 
146  self.identifier = identifier
147 
148  self.weightfile = ROOT.Belle2.MVA.Weightfile.load(self.identifier)
149 
150  self.general_options = basf2_mva.GeneralOptions()
151  self.general_options.load(self.weightfile.getXMLTree())
152 
153  # This piece of code should be correct but leads to random segmentation faults
154  # inside python, llvm or pyroot, therefore we use the more dirty code below
155  # Ideas why this is happening:
156  # 1. Ownership of the unique_ptr returned by getOptions()
157  # 2. Some kind of object slicing, although pyroot identifies the correct type
158  # 3. Bug in pyroot
159  # interfaces = ROOT.Belle2.MVA.AbstractInterface.getSupportedInterfaces()
160  # self.interface = interfaces[self.general_options.m_method]
161  # self.specific_options = self.interface.getOptions()
162 
163 
164  self.specific_options = None
165  if self.general_options.m_method == "FastBDT":
166  self.specific_options = basf2_mva.FastBDTOptions()
167  elif self.general_options.m_method == "TMVAClassification":
168  self.specific_options = basf2_mva.TMVAOptionsClassification()
169  elif self.general_options.m_method == "TMVARegression":
170  self.specific_options = basf2_mva.TMVAOptionsRegression()
171  elif self.general_options.m_method == "FANN":
172  self.specific_options = basf2_mva.FANNOptions()
173  elif self.general_options.m_method == "Python":
174  self.specific_options = basf2_mva.PythonOptions()
175  elif self.general_options.m_method == "PDF":
176  self.specific_options = basf2_mva.PDFOptions()
177  elif self.general_options.m_method == "Combination":
178  self.specific_options = basf2_mva.CombinationOptions()
179  elif self.general_options.m_method == "Reweighter":
180  self.specific_options = basf2_mva.ReweighterOptions()
181  elif self.general_options.m_method == "Trivial":
182  self.specific_options = basf2_mva.TrivialOptions()
183  else:
184  raise RuntimeError("Unknown method " + self.general_options.m_method)
185 
186  self.specific_options.load(self.weightfile.getXMLTree())
187 
188  variables = [str(v) for v in self.general_options.m_variables]
189  importances = self.weightfile.getFeatureImportance()
190 
191 
192  self.importances = {k: importances[k] for k in variables}
193 
194  self.variables = list(sorted(variables, key=lambda v: self.importances.get(v, 0.0)))
195 
196  self.root_variables = [ROOT.Belle2.MakeROOTCompatible.makeROOTCompatible(v) for v in self.variables]
197 
198  self.root_importances = {k: importances[k] for k in self.root_variables}
199 
200  self.description = str(basf2_mva.info(self.identifier))
201 
202  self.spectators = [str(v) for v in self.general_options.m_spectators]
203 
204  self.root_spectators = [ROOT.Belle2.MakeROOTCompatible.makeROOTCompatible(v) for v in self.spectators]
205 

Member Function Documentation

◆ apply_expert()

def apply_expert (   self,
  datafiles,
  treename 
)
Apply the expert of the method to data and return the calculated probability and the target
@param datafiles the datafiles
@param treename the name of the tree containing the data

Definition at line 236 of file basf2_mva_util.py.

◆ train_teacher()

def train_teacher (   self,
  datafiles,
  treename,
  general_options = None,
  specific_options = None 
)
Train a new method using this method as a prototype
@param datafiles the training datafiles
@param treename the name of the tree containing the training data
@param general_options general options given to basf2_mva.teacher
  (if None the options of this method are used)
@param specific_options specific options given to basf2_mva.teacher
  (if None the options of this method are used)

Definition at line 206 of file basf2_mva_util.py.


The documentation for this class was generated from the following file: