Belle II Software  release-05-01-25
test_fei_specific.py
1 #!/usr/bin/env python3
2 # -*- coding: utf-8 -*-
3 
4 """
5 <header>
6  <contact>wsut@uni-bonn.de</contact>
7 </header>
8 """
9 
10 import fei
11 from fei.default_channels import get_unittest_channels
12 import os
13 import sys
14 
15 import tempfile
16 import shutil
17 import glob
18 import sys
19 
20 import basf2 as b2
21 import modularAnalysis as ma
22 from ROOT import Belle2
23 import basf2_mva
24 import pdg
25 
26 basf2_mva.loadRootDictionary()
27 
28 tempdir = tempfile.mkdtemp()
29 os.chdir(tempdir)
30 
31 b2.conditions.append_testing_payloads('localdb/database.txt')
32 
33 fei.core.Teacher.MaximumNumberOfMVASamples = int(1e7)
34 fei.core.Teacher.MinimumNumberOfMVASamples = int(10)
35 
36 particles = fei.get_unittest_channels()
37 
38 sig_path = b2.create_path()
39 ma.inputMdst(environmentType='default',
40  filename=b2.find_file('mdst12.root', 'validation', False),
41  path=sig_path)
42 ma.fillParticleList('mu+:sig', 'muonID > 0.5 and dr < 1 and abs(dz) < 2', writeOut=True, path=sig_path)
43 ma.reconstructDecay('tau+:sig -> mu+:sig', '', 1, writeOut=True, path=sig_path)
44 ma.matchMCTruth('tau+:sig', path=sig_path)
45 ma.reconstructDecay('B+:sig -> tau+:sig', '', writeOut=True, path=sig_path)
46 ma.matchMCTruth('B+:sig', path=sig_path)
47 ma.buildRestOfEvent('B+:sig', path=sig_path)
48 
49 particles = get_unittest_channels(specific=True)
50 configuration = fei.config.FeiConfiguration(prefix='FEI_VALIDATION', training=True, cache=-1)
51 feistate = fei.get_path(particles, configuration)
52 
53 path = b2.create_path()
54 roe_path = b2.create_path()
55 cond_module = ma.register_module('SignalSideParticleFilter')
56 cond_module.param('particleLists', ['B+:sig'])
57 cond_module.if_true(feistate.path, b2.AfterConditionPath.END)
58 roe_path.add_module(cond_module)
59 path.add_path(sig_path)
60 path.for_each('RestOfEvent', 'RestOfEvents', roe_path)
61 
62 assert feistate.stage == 0
63 print(path)
64 b2.process(path, max_event=10000)
65 assert len(glob.glob('mcParticlesCount.root')) == 1
66 
67 configuration = fei.config.FeiConfiguration(prefix='FEI_VALIDATION', training=True, cache=0)
68 fei.do_trainings(particles, configuration)
69 path = b2.create_path()
70 feistate = fei.get_path(particles, configuration)
71 roe_path = b2.create_path()
72 cond_module = ma.register_module('SignalSideParticleFilter')
73 cond_module.param('particleLists', ['B+:sig'])
74 cond_module.if_true(feistate.path, b2.AfterConditionPath.END)
75 roe_path.add_module(cond_module)
76 path.add_path(sig_path)
77 path.for_each('RestOfEvent', 'RestOfEvents', roe_path)
78 
79 assert feistate.stage == 1, feistate.stage
80 print(path)
81 b2.process(path, max_event=10000)
82 assert len(glob.glob('gamma*')) == 2
83 assert len(glob.glob('mu+*')) == 1
84 assert len(glob.glob('pi+*')) == 1
85 assert len(glob.glob('K+*')) == 1
86 
87 fei.do_trainings(particles, configuration)
88 
89 assert len(glob.glob('gamma*')) == 6
90 assert len(glob.glob('mu+*')) == 3
91 assert len(glob.glob('pi+*')) == 3
92 assert len(glob.glob('K+*')) == 3
93 
94 fei.do_trainings(particles, configuration)
95 path = b2.create_path()
96 feistate = fei.get_path(particles, configuration)
97 roe_path = b2.create_path()
98 cond_module = ma.register_module('SignalSideParticleFilter')
99 cond_module.param('particleLists', ['B+:sig'])
100 cond_module.if_true(feistate.path, b2.AfterConditionPath.END)
101 roe_path.add_module(cond_module)
102 path.add_path(sig_path)
103 path.for_each('RestOfEvent', 'RestOfEvents', roe_path)
104 
105 assert feistate.stage == 2
106 print(path)
107 b2.process(path, max_event=10000)
108 assert len(glob.glob('pi0*')) == 1
109 
110 fei.do_trainings(particles, configuration)
111 assert len(glob.glob('pi0*')) == 3
112 
113 fei.do_trainings(particles, configuration)
114 path = b2.create_path()
115 feistate = fei.get_path(particles, configuration)
116 roe_path = b2.create_path()
117 cond_module = ma.register_module('SignalSideParticleFilter')
118 cond_module.param('particleLists', ['B+:sig'])
119 cond_module.if_true(feistate.path, b2.AfterConditionPath.END)
120 roe_path.add_module(cond_module)
121 path.add_path(sig_path)
122 path.for_each('RestOfEvent', 'RestOfEvents', roe_path)
123 
124 assert feistate.stage == 4
125 print(path)
126 b2.process(path, max_event=10000)
127 assert len(glob.glob('D*')) == 5
128 
129 # One training will fail D -> pi pi due to low statistic
130 fei.do_trainings(particles, configuration)
131 assert len(glob.glob('D*')) == 15
132 
133 fei.do_trainings(particles, configuration)
134 path = b2.create_path()
135 feistate = fei.get_path(particles, configuration)
136 roe_path = b2.create_path()
137 cond_module = ma.register_module('SignalSideParticleFilter')
138 cond_module.param('particleLists', ['B+:sig'])
139 cond_module.if_true(feistate.path, b2.AfterConditionPath.END)
140 roe_path.add_module(cond_module)
141 path.add_path(sig_path)
142 path.for_each('RestOfEvent', 'RestOfEvents', roe_path)
143 
144 assert feistate.stage == 7
145 
146 configuration = fei.config.FeiConfiguration(prefix='FEI_VALIDATION', monitor=True, training=False)
147 feistate = fei.get_path(particles, configuration)
148 
149 fei.do_trainings(particles, configuration)
150 path = b2.create_path()
151 feistate = fei.get_path(particles, configuration)
152 roe_path = b2.create_path()
153 cond_module = ma.register_module('SignalSideParticleFilter')
154 cond_module.param('particleLists', ['B+:sig'])
155 cond_module.if_true(feistate.path, b2.AfterConditionPath.END)
156 roe_path.add_module(cond_module)
157 path.add_path(sig_path)
158 path.for_each('RestOfEvent', 'RestOfEvents', roe_path)
159 
160 assert feistate.stage == 7
161 print(path)
162 b2.process(path, max_event=10000)
163 assert len(glob.glob('Monitor_FSPLoader.root')) == 1
164 assert len(glob.glob('Monitor_TrainingData_*')) == 11
165 assert len(glob.glob('Monitor_PreReconstruction_BeforeRanking_*')) == 11
166 assert len(glob.glob('Monitor_PreReconstruction_AfterRanking_*')) == 11
167 assert len(glob.glob('Monitor_PreReconstruction_AfterVertex_*')) == 11
168 assert len(glob.glob('Monitor_PostReconstruction_AfterMVA_*')) == 6
169 assert len(glob.glob('Monitor_PostReconstruction_BeforePostCut_*')) == 5
170 assert len(glob.glob('Monitor_PostReconstruction_BeforeRanking_*')) == 5
171 assert len(glob.glob('Monitor_PostReconstruction_AfterRanking_*')) == 5
172 assert len(glob.glob('Monitor_Final_*')) == 5
173 assert len(glob.glob('Monitor_ModuleStatistics.root')) == 1
174 
175 shutil.rmtree(tempdir)
fei.default_channels
Definition: default_channels.py:1