Belle II Software light-2607-kasei
TrainingData Class Reference

Public Member Functions

 __init__ (self, typing.Sequence[config.Particle] particles, config.FeiConfiguration config, typing.Mapping[int, typing.Mapping[str, float]] mc_counts)
 
pybasf2.Path reconstruct (self)
 

Public Attributes

 particles = particles
 list of config.Particle objects
 
 config = config
 config.FeiConfiguration object
 
 mc_counts = mc_counts
 containing number of MC Particles
 

Detailed Description

Steers the creation of the training data.
The training data is used to train a multivariate classifier for each channel.
The training of the FEI at its core is just generating this training data for each channel.
After we created the training data for a stage, we have to train the classifiers (see Teacher class further down).

Definition at line 206 of file core.py.

Constructor & Destructor Documentation

◆ __init__()

__init__ ( self,
typing.Sequence[config.Particle] particles,
config.FeiConfiguration config,
typing.Mapping[int, typing.Mapping[str, float]] mc_counts )
Create a new TrainingData object
@param particles list of config.Particle objects
@param config config.FeiConfiguration object
@param mc_counts containing number of MC Particles

Definition at line 214 of file core.py.

215 mc_counts: typing.Mapping[int, typing.Mapping[str, float]]):
216 """
217 Create a new TrainingData object
218 @param particles list of config.Particle objects
219 @param config config.FeiConfiguration object
220 @param mc_counts containing number of MC Particles
221 """
222
223 self.particles = particles
224
225 self.config = config
226
227 self.mc_counts = mc_counts
228

Member Function Documentation

◆ reconstruct()

pybasf2.Path reconstruct ( self)
Returns pybasf2.Path which creates the training data for the given particles

Definition at line 229 of file core.py.

229 def reconstruct(self) -> pybasf2.Path:
230 """
231 Returns pybasf2.Path which creates the training data for the given particles
232 """
233 import ROOT # noqa
234 path = basf2.create_path()
235
236 for particle in self.particles:
237 pdgcode = abs(pdg.from_name(particle.name))
238 nSignal = self.mc_counts[pdgcode]['sum']
239 print(f"FEI-core: TrainingData: nSignal for {particle.name}: {nSignal}")
240
241 # For D-Mesons we usually have a efficiency of 10^-3 including branching fraction
242 if pdgcode > 400:
243 nSignal /= 1000
244 # For B-Mesons we usually have a efficiency of 10^-4 including branching fraction
245 if pdgcode > 500:
246 nSignal /= 10000
247
248 for channel in particle.channels:
249 weightfile = f'{channel.label}.xml'
250 if basf2_mva.available(weightfile):
251 B2INFO(f"FEI-core: Skipping preparing Training Data for {weightfile}, already available")
252 continue
253 filename = 'training_input.root'
254
255 # nBackground = nEvents * nBestCandidates
256 nBackground = self.mc_counts[0]['sum'] * channel.preCutConfig.bestCandidateCut
257 inverseSamplingRates = {}
258 # For some very pure channels (Jpsi), this sampling can be too aggressive and training fails.
259 # It can therefore be disabled in the preCutConfig.
260 if nBackground > Teacher.MaximumNumberOfMVASamples and not channel.preCutConfig.noBackgroundSampling:
261 inverseSamplingRates[0] = max(
262 1, int((int(nBackground / Teacher.MaximumNumberOfMVASamples) + 1) * channel.preCutConfig.bkgSamplingFactor))
263 elif channel.preCutConfig.bkgSamplingFactor > 1:
264 inverseSamplingRates[0] = int(channel.preCutConfig.bkgSamplingFactor)
265
266 if nSignal > Teacher.MaximumNumberOfMVASamples and not channel.preCutConfig.noSignalSampling:
267 inverseSamplingRates[1] = int(nSignal / Teacher.MaximumNumberOfMVASamples) + 1
268
269 spectators = [channel.mvaConfig.target] + list(channel.mvaConfig.spectators.keys())
270 if channel.mvaConfig.sPlotVariable is not None:
271 spectators.append(channel.mvaConfig.sPlotVariable)
272
273 if self.config.monitor:
274 hist_variables = ['mcErrors', 'mcParticleStatus'] + channel.mvaConfig.variables + spectators
275 hist_variables_2d = [(x, channel.mvaConfig.target)
276 for x in channel.mvaConfig.variables + spectators if x is not channel.mvaConfig.target]
277 hist_filename = os.path.join(self.config.monitoring_path, 'Monitor_TrainingData.root')
278 ma.variablesToHistogram(channel.name, variables=config.variables2binnings(hist_variables),
279 variables_2d=config.variables2binnings_2d(hist_variables_2d),
280 filename=hist_filename,
281 ignoreCommandLineOverride=True,
282 directory=config.removeJPsiSlash(f'{channel.label}'), path=path)
283
284 teacher = basf2.register_module('VariablesToNtuple')
285 teacher.set_name(f'VariablesToNtuple_{channel.name}')
286 teacher.param('fileName', filename)
287 teacher.param('treeName', ROOT.Belle2.MakeROOTCompatible.makeROOTCompatible(f'{channel.label} variables'))
288 teacher.param('variables', channel.mvaConfig.variables + spectators)
289 teacher.param('particleList', channel.name)
290 teacher.param('sampling', (channel.mvaConfig.target, inverseSamplingRates))
291 teacher.param('ignoreCommandLineOverride', True)
292 path.add_module(teacher)
293 return path
294
295
from_name(name)
Definition pdg.py:63

Member Data Documentation

◆ config

config = config

config.FeiConfiguration object

Definition at line 225 of file core.py.

◆ mc_counts

mc_counts = mc_counts

containing number of MC Particles

Definition at line 227 of file core.py.

◆ particles

particles = particles

list of config.Particle objects

Definition at line 223 of file core.py.


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