Belle II Software  release-05-01-25
fastbdt_ugboost.py
1 #!/usr/bin/env python3
2 # -*- coding: utf-8 -*-
3 
4 # Thomas Keck 2017
5 
6 import basf2_mva
7 
8 if __name__ == "__main__":
9  from basf2 import conditions
10  # NOTE: do not use testing payloads in production! Any results obtained like this WILL NOT BE PUBLISHED
11  conditions.testing_payloads = [
12  'localdb/database.txt'
13  ]
14 
15  variables = ['p', 'pt', 'pz', 'phi',
16  'daughter(0, p)', 'daughter(0, pz)', 'daughter(0, pt)', 'daughter(0, phi)',
17  'daughter(1, p)', 'daughter(1, pz)', 'daughter(1, pt)', 'daughter(1, phi)',
18  'daughter(2, p)', 'daughter(2, pz)', 'daughter(2, pt)', 'daughter(2, phi)',
19  'chiProb', 'dr', 'dz', 'dphi',
20  'daughter(0, dr)', 'daughter(1, dr)', 'daughter(0, dz)', 'daughter(1, dz)',
21  'daughter(0, dphi)', 'daughter(1, dphi)',
22  'daughter(0, chiProb)', 'daughter(1, chiProb)', 'daughter(2, chiProb)',
23  'daughter(0, kaonID)', 'daughter(0, pionID)', 'daughter(1, kaonID)', 'daughter(1, pionID)',
24  'daughterAngle(0, 1)', 'daughterAngle(0, 2)', 'daughterAngle(1, 2)',
25  'daughter(2, daughter(0, E))', 'daughter(2, daughter(1, E))',
26  'daughter(2, daughter(0, clusterTiming))', 'daughter(2, daughter(1, clusterTiming))',
27  'daughter(2, daughter(0, clusterE9E25))', 'daughter(2, daughter(1, clusterE9E25))',
28  'daughter(2, daughter(0, minC2HDist))', 'daughter(2, daughter(1, minC2HDist))',
29  'M']
30 
31  variables2 = ['p', 'pt', 'pz', 'phi',
32  'chiProb', 'dr', 'dz', 'dphi',
33  'daughter(2, chiProb)',
34  'daughter(0, kaonID)', 'daughter(0, pionID)', 'daughter(1, kaonID)', 'daughter(1, pionID)',
35  'daughter(2, daughter(0, E))', 'daughter(2, daughter(1, E))',
36  'daughter(2, daughter(0, clusterTiming))', 'daughter(2, daughter(1, clusterTiming))',
37  'daughter(2, daughter(0, clusterE9E25))', 'daughter(2, daughter(1, clusterE9E25))',
38  'daughter(2, daughter(0, minC2HDist))', 'daughter(2, daughter(1, minC2HDist))']
39 
40  general_options = basf2_mva.GeneralOptions()
41  general_options.m_datafiles = basf2_mva.vector("train.root")
42  general_options.m_treename = "tree"
43  general_options.m_variables = basf2_mva.vector(*variables)
44  # Spectators are the variables for which the selection should be uniform
45  general_options.m_spectators = basf2_mva.vector('daughterInvariantMass(0, 1)', 'daughterInvariantMass(0, 2)')
46  general_options.m_target_variable = "isSignal"
47  general_options.m_identifier = "fastbdt"
48 
49  fastbdt_options = basf2_mva.FastBDTOptions()
50  fastbdt_options.m_nTrees = 100
51  fastbdt_options.m_nCuts = 10
52  fastbdt_options.m_nLevels = 5
53  fastbdt_options.m_shrinkage = 0.1
54  fastbdt_options.m_randRatio = 0.5
55  fastbdt_options.m_flatnessLoss = 10.0
56 
57  basf2_mva.teacher(general_options, fastbdt_options)
58 
59  general_options.m_identifier = "fastbdt_baseline"
60  fastbdt_options.m_flatnessLoss = -1.0
61  basf2_mva.teacher(general_options, fastbdt_options)
62 
63  general_options.m_identifier = "fastbdt_drop_feature"
64  fastbdt_options.m_flatnessLoss = -1.0
65  general_options.m_variables = basf2_mva.vector(*variables2)
66  basf2_mva.teacher(general_options, fastbdt_options)