14 <contact>wsut@uni-bonn.de</contact>
27 import modularAnalysis
as ma
30 tempdir = tempfile.mkdtemp()
33 b2.conditions.append_testing_payloads(
'localdb/database.txt')
35 fei.core.Teacher.MaximumNumberOfMVASamples = int(1e7)
36 fei.core.Teacher.MinimumNumberOfMVASamples = int(10)
38 particles = fei.get_unittest_channels(specific=
True)
41 sig_path = b2.create_path()
42 ma.inputMdst(filename=b2.find_file(
'mdst14.root',
'validation',
False),
44 ma.fillParticleList(
'mu+:sig',
'muonID > 0.5 and dr < 1 and abs(dz) < 2', writeOut=
True, path=sig_path)
45 ma.reconstructDecay(
'tau+:sig -> mu+:sig',
'', 1, writeOut=
True, path=sig_path)
46 ma.matchMCTruth(
'tau+:sig', path=sig_path)
47 ma.reconstructDecay(
'B+:sig -> tau+:sig',
'', writeOut=
True, path=sig_path)
48 ma.matchMCTruth(
'B+:sig', path=sig_path)
49 ma.buildRestOfEvent(
'B+:sig', path=sig_path)
51 configuration = fei.config.FeiConfiguration(prefix=
'FEI_VALIDATION', cache=-1, training=
True, monitor=
False)
52 feistate = fei.get_path(particles, configuration)
55 path = b2.create_path()
56 roe_path = b2.create_path()
57 cond_module = b2.register_module(
'SignalSideParticleFilter')
58 cond_module.param(
'particleLists', [
'B+:sig'])
59 cond_module.if_true(feistate.path, b2.AfterConditionPath.END)
60 roe_path.add_module(cond_module)
61 path.add_path(sig_path)
62 path.for_each(
'RestOfEvent',
'RestOfEvents', roe_path)
64 assert feistate.stage == 0
66 b2.process(path, max_event=10000)
67 assert len(glob.glob(
'mcParticlesCount.root')) == 1
70 path = b2.create_path()
71 configuration = fei.config.FeiConfiguration(prefix=
'FEI_VALIDATION', cache=0, training=
True, monitor=
False)
72 feistate = fei.get_path(particles, configuration)
73 roe_path = b2.create_path()
74 cond_module = b2.register_module(
'SignalSideParticleFilter')
75 cond_module.param(
'particleLists', [
'B+:sig'])
76 cond_module.if_true(feistate.path, b2.AfterConditionPath.END)
77 roe_path.add_module(cond_module)
78 path.add_path(sig_path)
79 path.for_each(
'RestOfEvent',
'RestOfEvents', roe_path)
81 assert feistate.stage == 1
83 b2.process(path, max_event=10000)
86 assert len(glob.glob(
'training_input.root')) == 1
87 f = ROOT.TFile.Open(
"training_input.root",
"read")
88 assert sum([
'gamma' in key.GetName()[:5]
for key
in f.GetListOfKeys()]) == 2
89 assert sum([
'mu+' in key.GetName()[:4]
for key
in f.GetListOfKeys()]) == 1
90 assert sum([
'pi+' in key.GetName()[:4]
for key
in f.GetListOfKeys()]) == 1
91 assert sum([
'K+' in key.GetName()[:3]
for key
in f.GetListOfKeys()]) == 1
95 fei.do_trainings(particles, configuration)
98 shutil.move(
"training_input.root", f
"training_input_stage{feistate.stage-1}.root")
101 assert len(glob.glob(
'gamma*.xml')) == 2
102 assert len(glob.glob(
'mu+*.xml')) == 1
103 assert len(glob.glob(
'pi+*.xml')) == 1
104 assert len(glob.glob(
'K+*.xml')) == 1
107 path = b2.create_path()
108 feistate = fei.get_path(particles, configuration)
109 roe_path = b2.create_path()
110 cond_module = b2.register_module(
'SignalSideParticleFilter')
111 cond_module.param(
'particleLists', [
'B+:sig'])
112 cond_module.if_true(feistate.path, b2.AfterConditionPath.END)
113 roe_path.add_module(cond_module)
114 path.add_path(sig_path)
115 path.for_each(
'RestOfEvent',
'RestOfEvents', roe_path)
117 assert feistate.stage == 2
119 b2.process(path, max_event=10000)
122 assert len(glob.glob(
'training_input.root')) == 1
123 f = ROOT.TFile.Open(
"training_input.root",
"read")
124 assert sum([
'pi0' in key.GetName()[:4]
for key
in f.GetListOfKeys()]) == 1
128 fei.do_trainings(particles, configuration)
131 shutil.move(
"training_input.root", f
"training_input_stage{feistate.stage-1}.root")
134 assert len(glob.glob(
'pi0*.xml')) == 1
137 path = b2.create_path()
138 feistate = fei.get_path(particles, configuration)
139 roe_path = b2.create_path()
140 cond_module = b2.register_module(
'SignalSideParticleFilter')
141 cond_module.param(
'particleLists', [
'B+:sig'])
142 cond_module.if_true(feistate.path, b2.AfterConditionPath.END)
143 roe_path.add_module(cond_module)
144 path.add_path(sig_path)
145 path.for_each(
'RestOfEvent',
'RestOfEvents', roe_path)
147 assert feistate.stage == 4
149 b2.process(path, max_event=10000)
152 assert len(glob.glob(
'training_input.root')) == 1
153 f = ROOT.TFile.Open(
"training_input.root",
"read")
154 assert sum([
'D' in key.GetName()[:2]
for key
in f.GetListOfKeys()]) == 5
158 fei.do_trainings(particles, configuration)
161 shutil.move(
"training_input.root", f
"training_input_stage{feistate.stage-1}.root")
164 assert len(glob.glob(
'D*.xml')) == 5
167 subprocess.call([
"analysis-fei-mergefiles",
"training_input.root"] + glob.glob(
"training_input_stage*.root"))
170 assert len(glob.glob(
'training_input*.root')) == 4
173 configuration = fei.config.FeiConfiguration(prefix=
'FEI_VALIDATION', cache=0, monitor=
True)
174 path = b2.create_path()
175 feistate = fei.get_path(particles, configuration)
176 roe_path = b2.create_path()
177 cond_module = b2.register_module(
'SignalSideParticleFilter')
178 cond_module.param(
'particleLists', [
'B+:sig'])
179 cond_module.if_true(feistate.path, b2.AfterConditionPath.END)
180 roe_path.add_module(cond_module)
181 path.add_path(sig_path)
182 path.for_each(
'RestOfEvent',
'RestOfEvents', roe_path)
184 assert feistate.stage == 7
186 b2.process(path, max_event=10000)
189 assert len(glob.glob(
'Monitor_FSPLoader.root')) == 1
191 assert len(glob.glob(
'Monitor_ModuleStatistics.root')) == 1
193 assert len(glob.glob(
'Monitor_Final.root')) == 1
194 f = ROOT.TFile.Open(
"Monitor_Final.root",
"read")
195 assert f.GetListOfKeys().GetEntries() == 7
198 prereconstruction_files = [
199 'Monitor_PreReconstruction_BeforeRanking.root',
200 'Monitor_PreReconstruction_AfterRanking.root',
201 'Monitor_PreReconstruction_AfterVertex.root',
202 'Monitor_PostReconstruction_AfterMVA.root'
205 for fname
in prereconstruction_files:
206 assert len(glob.glob(fname)) == 1
207 f = ROOT.TFile.Open(fname,
"read")
208 assert f.GetListOfKeys().GetEntries() == 11
211 postreconstruction_files = [
212 'Monitor_PostReconstruction_BeforePostCut.root',
213 'Monitor_PostReconstruction_BeforeRanking.root',
214 'Monitor_PostReconstruction_AfterRanking.root'
217 for fname
in postreconstruction_files:
218 assert len(glob.glob(fname)) == 1
219 f = ROOT.TFile.Open(fname,
"read")
220 assert f.GetListOfKeys().GetEntries() == 7
223 shutil.rmtree(tempdir)