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()
41 path = b2.create_path()
43 ma.inputMdst(filename=b2.find_file(
'mdst14.root',
'validation',
False),
47 empty_path = b2.create_path()
48 skimfilter = b2.register_module(
'VariableToReturnValue')
49 skimfilter.param(
'variable',
'nCleanedTracks(dr < 2 and abs(dz) < 4)')
50 skimfilter.if_value(
'>{}'.format(maxTracks), empty_path, b2.AfterConditionPath.END)
51 path.add_module(skimfilter)
53 configuration = fei.config.FeiConfiguration(prefix=
'FEI_VALIDATION', cache=-1, training=
True, monitor=
False)
54 feistate = fei.get_path(particles, configuration)
55 path.add_path(feistate.path)
56 path.add_module(
'RootOutput')
58 assert feistate.stage == 0
59 path.add_module(
'Progress')
61 b2.process(path, max_event=10000)
62 assert len(glob.glob(
'RootOutput.root')) == 1
63 assert len(glob.glob(
'mcParticlesCount.root')) == 1
66 path = b2.create_path()
67 ma.inputMdstList([
'./RootOutput.root'], path)
70 empty_path = b2.create_path()
71 skimfilter = b2.register_module(
'VariableToReturnValue')
72 skimfilter.param(
'variable',
'nCleanedTracks(dr < 2 and abs(dz) < 4)')
73 skimfilter.if_value(
'>{}'.format(maxTracks), empty_path, b2.AfterConditionPath.END)
74 path.add_module(skimfilter)
76 configuration = fei.config.FeiConfiguration(prefix=
'FEI_VALIDATION', cache=feistate.stage, training=
True, monitor=
False)
77 feistate = fei.get_path(particles, configuration)
78 path.add_path(feistate.path)
79 path.add_module(
'RootOutput')
81 assert feistate.stage == 1
82 path.add_module(
'Progress')
84 b2.process(path, max_event=10000)
87 assert len(glob.glob(
'RootOutput.root')) == 1
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 ma.inputMdstList([
'./RootOutput.root'], path)
113 empty_path = b2.create_path()
114 skimfilter = b2.register_module(
'VariableToReturnValue')
115 skimfilter.param(
'variable',
'nCleanedTracks(dr < 2 and abs(dz) < 4)')
116 skimfilter.if_value(
'>{}'.format(maxTracks), empty_path, b2.AfterConditionPath.END)
117 path.add_module(skimfilter)
119 configuration = fei.config.FeiConfiguration(prefix=
'FEI_VALIDATION', cache=feistate.stage, training=
True, monitor=
False)
120 feistate = fei.get_path(particles, configuration)
121 path.add_path(feistate.path)
122 path.add_module(
'RootOutput')
124 assert feistate.stage == 2
125 path.add_module(
'Progress')
127 b2.process(path, max_event=10000)
130 assert len(glob.glob(
'RootOutput.root')) == 1
131 assert len(glob.glob(
'training_input.root')) == 1
132 f = ROOT.TFile.Open(
"training_input.root",
"read")
133 assert sum([
'pi0' in key.GetName()[:4]
for key
in f.GetListOfKeys()]) == 1
137 fei.do_trainings(particles, configuration)
140 shutil.move(
"training_input.root", f
"training_input_stage{feistate.stage-1}.root")
143 assert len(glob.glob(
'pi0*.xml')) == 1
146 path = b2.create_path()
147 ma.inputMdstList([
'./RootOutput.root'], path)
150 empty_path = b2.create_path()
151 skimfilter = b2.register_module(
'VariableToReturnValue')
152 skimfilter.param(
'variable',
'nCleanedTracks(dr < 2 and abs(dz) < 4)')
153 skimfilter.if_value(
'>{}'.format(maxTracks), empty_path, b2.AfterConditionPath.END)
154 path.add_module(skimfilter)
156 configuration = fei.config.FeiConfiguration(prefix=
'FEI_VALIDATION', cache=feistate.stage, training=
True, monitor=
False)
157 feistate = fei.get_path(particles, configuration)
158 path.add_path(feistate.path)
159 path.add_module(
'RootOutput')
161 assert feistate.stage == 4
162 path.add_module(
'Progress')
164 b2.process(path, max_event=10000)
167 assert len(glob.glob(
'RootOutput.root')) == 1
168 assert len(glob.glob(
'training_input.root')) == 1
169 f = ROOT.TFile.Open(
"training_input.root",
"read")
170 assert sum([
'D' in key.GetName()[:2]
for key
in f.GetListOfKeys()]) == 5
174 fei.do_trainings(particles, configuration)
177 shutil.move(
"training_input.root", f
"training_input_stage{feistate.stage-1}.root")
180 assert len(glob.glob(
'D*.xml')) == 5
183 subprocess.call([
"analysis-fei-mergefiles",
"training_input.root"] + glob.glob(
"training_input_stage*.root"))
186 assert len(glob.glob(
'training_input*.root')) == 4
189 path = b2.create_path()
190 ma.inputMdst(filename=b2.find_file(
'mdst14.root',
'validation',
False),
194 empty_path = b2.create_path()
195 skimfilter = b2.register_module(
'VariableToReturnValue')
196 skimfilter.param(
'variable',
'nCleanedTracks(dr < 2 and abs(dz) < 4)')
197 skimfilter.if_value(
'>{}'.format(maxTracks), empty_path, b2.AfterConditionPath.END)
198 path.add_module(skimfilter)
200 configuration = fei.config.FeiConfiguration(prefix=
'FEI_VALIDATION', cache=0, monitor=
True)
201 feistate = fei.get_path(particles, configuration)
202 path.add_path(feistate.path)
204 assert feistate.stage == 7
205 path.add_module(
'Progress')
207 b2.process(path, max_event=10000)
210 assert len(glob.glob(
'Monitor_FSPLoader.root')) == 1
212 assert len(glob.glob(
'Monitor_ModuleStatistics.root')) == 1
214 assert len(glob.glob(
'Monitor_Final.root')) == 1
215 f = ROOT.TFile.Open(
"Monitor_Final.root",
"read")
216 assert f.GetListOfKeys().GetEntries() == 7
219 prereconstruction_files = [
220 'Monitor_PreReconstruction_BeforeRanking.root',
221 'Monitor_PreReconstruction_AfterRanking.root',
222 'Monitor_PreReconstruction_AfterVertex.root',
223 'Monitor_PostReconstruction_AfterMVA.root'
226 for fname
in prereconstruction_files:
227 assert len(glob.glob(fname)) == 1
228 f = ROOT.TFile.Open(fname,
"read")
229 assert f.GetListOfKeys().GetEntries() == 11
232 postreconstruction_files = [
233 'Monitor_PostReconstruction_BeforePostCut.root',
234 'Monitor_PostReconstruction_BeforeRanking.root',
235 'Monitor_PostReconstruction_AfterRanking.root'
238 for fname
in postreconstruction_files:
239 assert len(glob.glob(fname)) == 1
240 f = ROOT.TFile.Open(fname,
"read")
241 assert f.GetListOfKeys().GetEntries() == 7
244 shutil.rmtree(tempdir)