Belle II Software  release-06-00-14
python_normalization.py
1 #!/usr/bin/env python3
2 # -*- coding: utf-8 -*-
3 
4 
11 
12 import basf2_mva
13 
14 import numpy as np
15 import os
16 import tempfile
17 import sys
18 from b2test_utils import skip_test
19 
20 variables = ['M', 'p', 'pt', 'pz',
21  'daughter(0, p)', 'daughter(0, pz)', 'daughter(0, pt)',
22  'daughter(1, p)', 'daughter(1, pz)', 'daughter(1, pt)',
23  'daughter(2, p)', 'daughter(2, pz)', 'daughter(2, pt)',
24  'chiProb', 'dr', 'dz',
25  'daughter(0, dr)', 'daughter(1, dr)',
26  'daughter(0, dz)', 'daughter(1, dz)',
27  'daughter(0, chiProb)', 'daughter(1, chiProb)', 'daughter(2, chiProb)',
28  'daughter(0, kaonID)', 'daughter(0, pionID)',
29  'daughterInvariantMass(0, 1)', 'daughterInvariantMass(0, 2)', 'daughterInvariantMass(1, 2)']
30 
31 
32 def apply(state, X):
33  """
34  Test apply function
35  """
36  print(X.mean(axis=0))
37  print(X.std(axis=0))
38  p = np.zeros(len(X))
39  return np.require(p, dtype=np.float32, requirements=['A', 'W', 'C', 'O'])
40 
41 
42 def begin_fit(state, Xtest, Stest, ytest, wtest):
43  """
44  Test begin_fit function
45  """
46  print(Xtest.mean(axis=0))
47  print(Xtest.std(axis=0))
48  return state
49 
50 
51 def partial_fit(state, X, S, y, w, epoch):
52  """
53  Test partial_fit function
54  """
55  print(X.mean(axis=0))
56  print(X.std(axis=0))
57  return True
58 
59 
60 print("Executed python script")
61 
62 if __name__ == "__main__":
63 
64  # Skip test if files are not available
65  if not (os.path.isfile('train.root') and os.path.isfile('test.root')):
66  skip_test('Necessary files "train.root" and "test.root" not available.')
67 
68  general_options = basf2_mva.GeneralOptions()
69  general_options.m_datafiles = basf2_mva.vector("train.root")
70  general_options.m_treename = "tree"
71  general_options.m_variables = basf2_mva.vector(*variables)
72  general_options.m_target_variable = "isSignal"
73  general_options.m_identifier = "Python.xml"
74 
75  specific_options = basf2_mva.PythonOptions()
76  specific_options.m_training_fraction = 0.9
77  specific_options.m_nIterations = 1
78  specific_options.m_mini_batch_size = 0
79  specific_options.m_framework = 'test'
80  specific_options.m_steering_file = 'mva/tests/python_normalization.py'
81  specific_options.m_normalize = False
82 
83  olddir = os.getcwd()
84  with tempfile.TemporaryDirectory() as tempdir:
85  os.symlink(os.path.abspath('train.root'), tempdir + '/' + os.path.basename('train.root'))
86  os.chdir(tempdir)
87 
88  basf2_mva.teacher(general_options, specific_options)
89  basf2_mva.expert(basf2_mva.vector("Python.xml"),
90  basf2_mva.vector('train.root'), 'tree', 'expert.root')
91  specific_options.m_normalize = True
92  basf2_mva.teacher(general_options, specific_options)
93  basf2_mva.expert(basf2_mva.vector("Python.xml"),
94  basf2_mva.vector('train.root'), 'tree', 'expert.root')
95  os.chdir(olddir)