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
60 b2.process(path, max_event=10000)
61 assert len(glob.glob(
'RootOutput.root')) == 1
62 assert len(glob.glob(
'mcParticlesCount.root')) == 1
65 path = b2.create_path()
66 ma.inputMdstList([
'./RootOutput.root'], path)
69 empty_path = b2.create_path()
70 skimfilter = b2.register_module(
'VariableToReturnValue')
71 skimfilter.param(
'variable',
'nCleanedTracks(dr < 2 and abs(dz) < 4)')
72 skimfilter.if_value(
'>{}'.format(maxTracks), empty_path, b2.AfterConditionPath.END)
73 path.add_module(skimfilter)
75 configuration = fei.config.FeiConfiguration(prefix=
'FEI_VALIDATION', cache=feistate.stage, training=
True, monitor=
False)
76 feistate = fei.get_path(particles, configuration)
77 path.add_path(feistate.path)
78 path.add_module(
'RootOutput')
80 assert feistate.stage == 1
82 b2.process(path, max_event=10000)
85 assert len(glob.glob(
'RootOutput.root')) == 1
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 ma.inputMdstList([
'./RootOutput.root'], path)
111 empty_path = b2.create_path()
112 skimfilter = b2.register_module(
'VariableToReturnValue')
113 skimfilter.param(
'variable',
'nCleanedTracks(dr < 2 and abs(dz) < 4)')
114 skimfilter.if_value(
'>{}'.format(maxTracks), empty_path, b2.AfterConditionPath.END)
115 path.add_module(skimfilter)
117 configuration = fei.config.FeiConfiguration(prefix=
'FEI_VALIDATION', cache=feistate.stage, training=
True, monitor=
False)
118 feistate = fei.get_path(particles, configuration)
119 path.add_path(feistate.path)
120 path.add_module(
'RootOutput')
122 assert feistate.stage == 2
124 b2.process(path, max_event=10000)
127 assert len(glob.glob(
'RootOutput.root')) == 1
128 assert len(glob.glob(
'training_input.root')) == 1
129 f = ROOT.TFile.Open(
"training_input.root",
"read")
130 assert sum([
'pi0' in key.GetName()[:4]
for key
in f.GetListOfKeys()]) == 1
134 fei.do_trainings(particles, configuration)
137 shutil.move(
"training_input.root", f
"training_input_stage{feistate.stage-1}.root")
140 assert len(glob.glob(
'pi0*.xml')) == 1
143 path = b2.create_path()
144 ma.inputMdstList([
'./RootOutput.root'], path)
147 empty_path = b2.create_path()
148 skimfilter = b2.register_module(
'VariableToReturnValue')
149 skimfilter.param(
'variable',
'nCleanedTracks(dr < 2 and abs(dz) < 4)')
150 skimfilter.if_value(
'>{}'.format(maxTracks), empty_path, b2.AfterConditionPath.END)
151 path.add_module(skimfilter)
153 configuration = fei.config.FeiConfiguration(prefix=
'FEI_VALIDATION', cache=feistate.stage, training=
True, monitor=
False)
154 feistate = fei.get_path(particles, configuration)
155 path.add_path(feistate.path)
156 path.add_module(
'RootOutput')
158 assert feistate.stage == 4
160 b2.process(path, max_event=10000)
163 assert len(glob.glob(
'RootOutput.root')) == 1
164 assert len(glob.glob(
'training_input.root')) == 1
165 f = ROOT.TFile.Open(
"training_input.root",
"read")
166 assert sum([
'D' in key.GetName()[:2]
for key
in f.GetListOfKeys()]) == 5
170 fei.do_trainings(particles, configuration)
173 shutil.move(
"training_input.root", f
"training_input_stage{feistate.stage-1}.root")
176 assert len(glob.glob(
'D*.xml')) == 5
179 subprocess.call([
"analysis-fei-mergefiles",
"training_input.root"] + glob.glob(
"training_input_stage*.root"))
182 assert len(glob.glob(
'training_input*.root')) == 4
185 path = b2.create_path()
186 ma.inputMdst(filename=b2.find_file(
'mdst14.root',
'validation',
False),
190 empty_path = b2.create_path()
191 skimfilter = b2.register_module(
'VariableToReturnValue')
192 skimfilter.param(
'variable',
'nCleanedTracks(dr < 2 and abs(dz) < 4)')
193 skimfilter.if_value(
'>{}'.format(maxTracks), empty_path, b2.AfterConditionPath.END)
194 path.add_module(skimfilter)
196 configuration = fei.config.FeiConfiguration(prefix=
'FEI_VALIDATION', cache=0, monitor=
True)
197 feistate = fei.get_path(particles, configuration)
198 path.add_path(feistate.path)
200 assert feistate.stage == 7
202 b2.process(path, max_event=10000)
205 assert len(glob.glob(
'Monitor_FSPLoader.root')) == 1
207 assert len(glob.glob(
'Monitor_ModuleStatistics.root')) == 1
209 assert len(glob.glob(
'Monitor_Final.root')) == 1
210 f = ROOT.TFile.Open(
"Monitor_Final.root",
"read")
211 assert f.GetListOfKeys().GetEntries() == 7
214 prereconstruction_files = [
215 'Monitor_PreReconstruction_BeforeRanking.root',
216 'Monitor_PreReconstruction_AfterRanking.root',
217 'Monitor_PreReconstruction_AfterVertex.root',
218 'Monitor_PostReconstruction_AfterMVA.root'
221 for fname
in prereconstruction_files:
222 assert len(glob.glob(fname)) == 1
223 f = ROOT.TFile.Open(fname,
"read")
224 assert f.GetListOfKeys().GetEntries() == 11
227 postreconstruction_files = [
228 'Monitor_PostReconstruction_BeforePostCut.root',
229 'Monitor_PostReconstruction_BeforeRanking.root',
230 'Monitor_PostReconstruction_AfterRanking.root'
233 for fname
in postreconstruction_files:
234 assert len(glob.glob(fname)) == 1
235 f = ROOT.TFile.Open(fname,
"read")
236 assert f.GetListOfKeys().GetEntries() == 7
239 shutil.rmtree(tempdir)