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