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
65 path.add_module(
'Progress')
67 b2.process(path, max_event=10000)
68 assert len(glob.glob(
'mcParticlesCount.root')) == 1
71 path = b2.create_path()
72 configuration = fei.config.FeiConfiguration(prefix=
'FEI_VALIDATION', cache=0, training=
True, monitor=
False)
73 feistate = fei.get_path(particles, configuration)
74 roe_path = b2.create_path()
75 cond_module = b2.register_module(
'SignalSideParticleFilter')
76 cond_module.param(
'particleLists', [
'B+:sig'])
77 cond_module.if_true(feistate.path, b2.AfterConditionPath.END)
78 roe_path.add_module(cond_module)
79 path.add_path(sig_path)
80 path.for_each(
'RestOfEvent',
'RestOfEvents', roe_path)
82 assert feistate.stage == 1
83 path.add_module(
'Progress')
85 b2.process(path, max_event=10000)
88 assert len(glob.glob(
'training_input.root')) == 1
89 f = ROOT.TFile.Open(
"training_input.root",
"read")
90 assert sum([
'gamma' in key.GetName()[:5]
for key
in f.GetListOfKeys()]) == 2
91 assert sum([
'mu+' in key.GetName()[:4]
for key
in f.GetListOfKeys()]) == 1
92 assert sum([
'pi+' in key.GetName()[:4]
for key
in f.GetListOfKeys()]) == 1
93 assert sum([
'K+' in key.GetName()[:3]
for key
in f.GetListOfKeys()]) == 1
97 fei.do_trainings(particles, configuration)
100 shutil.move(
"training_input.root", f
"training_input_stage{feistate.stage-1}.root")
103 assert len(glob.glob(
'gamma*.xml')) == 2
104 assert len(glob.glob(
'mu+*.xml')) == 1
105 assert len(glob.glob(
'pi+*.xml')) == 1
106 assert len(glob.glob(
'K+*.xml')) == 1
109 path = b2.create_path()
110 feistate = fei.get_path(particles, configuration)
111 roe_path = b2.create_path()
112 cond_module = b2.register_module(
'SignalSideParticleFilter')
113 cond_module.param(
'particleLists', [
'B+:sig'])
114 cond_module.if_true(feistate.path, b2.AfterConditionPath.END)
115 roe_path.add_module(cond_module)
116 path.add_path(sig_path)
117 path.for_each(
'RestOfEvent',
'RestOfEvents', roe_path)
119 assert feistate.stage == 2
120 path.add_module(
'Progress')
122 b2.process(path, max_event=10000)
125 assert len(glob.glob(
'training_input.root')) == 1
126 f = ROOT.TFile.Open(
"training_input.root",
"read")
127 assert sum([
'pi0' in key.GetName()[:4]
for key
in f.GetListOfKeys()]) == 1
131 fei.do_trainings(particles, configuration)
134 shutil.move(
"training_input.root", f
"training_input_stage{feistate.stage-1}.root")
137 assert len(glob.glob(
'pi0*.xml')) == 1
140 path = b2.create_path()
141 feistate = fei.get_path(particles, configuration)
142 roe_path = b2.create_path()
143 cond_module = b2.register_module(
'SignalSideParticleFilter')
144 cond_module.param(
'particleLists', [
'B+:sig'])
145 cond_module.if_true(feistate.path, b2.AfterConditionPath.END)
146 roe_path.add_module(cond_module)
147 path.add_path(sig_path)
148 path.for_each(
'RestOfEvent',
'RestOfEvents', roe_path)
150 assert feistate.stage == 4
151 path.add_module(
'Progress')
153 b2.process(path, max_event=10000)
156 assert len(glob.glob(
'training_input.root')) == 1
157 f = ROOT.TFile.Open(
"training_input.root",
"read")
158 assert sum([
'D' in key.GetName()[:2]
for key
in f.GetListOfKeys()]) == 5
162 fei.do_trainings(particles, configuration)
165 shutil.move(
"training_input.root", f
"training_input_stage{feistate.stage-1}.root")
168 assert len(glob.glob(
'D*.xml')) == 5
171 subprocess.call([
"analysis-fei-mergefiles",
"training_input.root"] + glob.glob(
"training_input_stage*.root"))
174 assert len(glob.glob(
'training_input*.root')) == 4
177 configuration = fei.config.FeiConfiguration(prefix=
'FEI_VALIDATION', cache=0, monitor=
True)
178 path = b2.create_path()
179 feistate = fei.get_path(particles, configuration)
180 roe_path = b2.create_path()
181 cond_module = b2.register_module(
'SignalSideParticleFilter')
182 cond_module.param(
'particleLists', [
'B+:sig'])
183 cond_module.if_true(feistate.path, b2.AfterConditionPath.END)
184 roe_path.add_module(cond_module)
185 path.add_path(sig_path)
186 path.for_each(
'RestOfEvent',
'RestOfEvents', roe_path)
188 assert feistate.stage == 7
189 path.add_module(
'Progress')
191 b2.process(path, max_event=10000)
194 assert len(glob.glob(
'Monitor_FSPLoader.root')) == 1
196 assert len(glob.glob(
'Monitor_ModuleStatistics.root')) == 1
198 assert len(glob.glob(
'Monitor_Final.root')) == 1
199 f = ROOT.TFile.Open(
"Monitor_Final.root",
"read")
200 assert f.GetListOfKeys().GetEntries() == 7
203 prereconstruction_files = [
204 'Monitor_PreReconstruction_BeforeRanking.root',
205 'Monitor_PreReconstruction_AfterRanking.root',
206 'Monitor_PreReconstruction_AfterVertex.root',
207 'Monitor_PostReconstruction_AfterMVA.root'
210 for fname
in prereconstruction_files:
211 assert len(glob.glob(fname)) == 1
212 f = ROOT.TFile.Open(fname,
"read")
213 assert f.GetListOfKeys().GetEntries() == 11
216 postreconstruction_files = [
217 'Monitor_PostReconstruction_BeforePostCut.root',
218 'Monitor_PostReconstruction_BeforeRanking.root',
219 'Monitor_PostReconstruction_AfterRanking.root'
222 for fname
in postreconstruction_files:
223 assert len(glob.glob(fname)) == 1
224 f = ROOT.TFile.Open(fname,
"read")
225 assert f.GetListOfKeys().GetEntries() == 7
228 shutil.rmtree(tempdir)