6 <contact>wsut@uni-bonn.de</contact>
21 import modularAnalysis
as ma
22 from ROOT
import Belle2
26 basf2_mva.loadRootDictionary()
28 tempdir = tempfile.mkdtemp()
31 b2.conditions.append_testing_payloads(
'localdb/database.txt')
33 fei.core.Teacher.MaximumNumberOfMVASamples = int(1e7)
34 fei.core.Teacher.MinimumNumberOfMVASamples = int(10)
36 particles = fei.get_unittest_channels()
38 sig_path = b2.create_path()
39 ma.inputMdst(environmentType=
'default',
40 filename=b2.find_file(
'mdst12.root',
'validation',
False),
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)
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)
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)
62 assert feistate.stage == 0
64 b2.process(path, max_event=10000)
65 assert len(glob.glob(
'mcParticlesCount.root')) == 1
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)
79 assert feistate.stage == 1, feistate.stage
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
87 fei.do_trainings(particles, configuration)
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
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)
105 assert feistate.stage == 2
107 b2.process(path, max_event=10000)
108 assert len(glob.glob(
'pi0*')) == 1
110 fei.do_trainings(particles, configuration)
111 assert len(glob.glob(
'pi0*')) == 3
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)
124 assert feistate.stage == 4
126 b2.process(path, max_event=10000)
127 assert len(glob.glob(
'D*')) == 5
130 fei.do_trainings(particles, configuration)
131 assert len(glob.glob(
'D*')) == 15
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)
144 assert feistate.stage == 7
146 configuration = fei.config.FeiConfiguration(prefix=
'FEI_VALIDATION', monitor=
True, training=
False)
147 feistate = fei.get_path(particles, configuration)
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)
160 assert feistate.stage == 7
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
175 shutil.rmtree(tempdir)