Belle II Software  release-08-01-10
create_data_sample.py
1 #!/usr/bin/env python3
2 
3 
10 
11 # Create a simple data sample with some variables
12 
13 import basf2 as b2
14 import modularAnalysis as ma
15 import vertex as vx
16 variables = ['p', 'pt', 'pz', 'phi',
17  'daughter(0, p)', 'daughter(0, pz)', 'daughter(0, pt)', 'daughter(0, phi)',
18  'daughter(1, p)', 'daughter(1, pz)', 'daughter(1, pt)', 'daughter(1, phi)',
19  'daughter(2, p)', 'daughter(2, pz)', 'daughter(2, pt)', 'daughter(2, phi)',
20  'chiProb', 'dr', 'dz', 'dphi',
21  'daughter(0, dr)', 'daughter(1, dr)', 'daughter(0, dz)', 'daughter(1, dz)',
22  'daughter(0, dphi)', 'daughter(1, dphi)',
23  'daughter(0, chiProb)', 'daughter(1, chiProb)', 'daughter(2, chiProb)',
24  'daughter(0, kaonID)', 'daughter(0, pionID)', 'daughter(1, kaonID)', 'daughter(1, pionID)',
25  'daughterAngle(0, 1)', 'daughterAngle(0, 2)', 'daughterAngle(1, 2)',
26  'daughter(2, daughter(0, E))', 'daughter(2, daughter(1, E))',
27  'daughter(2, daughter(0, clusterTiming))', 'daughter(2, daughter(1, clusterTiming))',
28  'daughter(2, daughter(0, clusterE9E25))', 'daughter(2, daughter(1, clusterE9E25))',
29  'daughter(2, daughter(0, minC2TDist))', 'daughter(2, daughter(1, minC2TDist))',
30  'daughterInvM(0, 1)', 'daughterInvM(0, 2)', 'daughterInvM(1, 2)']
31 spectators = ['isSignal', 'M']
32 
33 
34 def reconstruction_path(inputfiles):
35  path = b2.create_path()
36  ma.inputMdstList(inputfiles, path=path)
37  ma.fillParticleLists([('K-', 'kaonID > 0.5'), ('pi+', 'pionID > 0.5'),
38  ('gamma', '[[clusterReg == 1 and E > 0.10] or [clusterReg == 2 and E > 0.09] or '
39  '[clusterReg == 3 and E > 0.16]] and abs(clusterTiming) < 20 and clusterE9E25 > 0.7'
40  ' and minC2TDist > 35')],
41  path=path)
42  ma.reconstructDecay('pi0 -> gamma gamma', '0.1 < M < 1.6', path=path)
43  vx.kFit('pi0', 0.1, fit_type='massvertex', path=path)
44  ma.reconstructDecay('D0 -> K- pi+ pi0', '1.8 < M < 1.9', path=path)
45  vx.kFit('D0', 0.1, path=path)
46  ma.applyCuts('D0', '1.7 < M < 1.9', path=path)
47  ma.matchMCTruth('D0', path=path)
48  ma.applyCuts('D0', 'isNAN(isSignal) == False', path=path)
49  return path
50 
51 
52 if __name__ == "__main__":
53 
54  # Create a train, test and validation sample with different MC files
55  path = reconstruction_path([b2.find_file('ccbar_sample_to_train.root', 'examples', False)])
56  ma.variablesToNtuple('D0', variables + spectators, filename='train.root', treename='tree', path=path)
57  b2.process(path, 100000)
58 
59  path = reconstruction_path([b2.find_file('ccbar_sample_to_test.root', 'examples', False)])
60  ma.variablesToNtuple('D0', variables + spectators, filename='test.root', treename='tree', path=path)
61  b2.process(path, 100000)
62 
63  path = reconstruction_path([b2.find_file('ccbar_sample_to_test.root', 'examples', False)])
64  ma.variablesToNtuple('D0', variables + spectators, filename='validation.root', treename='tree', path=path)
65  b2.process(path, 100000)