14 <contact>wsut@uni-bonn.de</contact>
27 import modularAnalysis
as ma
31 basf2_mva.loadRootDictionary()
33 tempdir = tempfile.mkdtemp()
36 b2.conditions.append_testing_payloads(
'localdb/database.txt')
38 fei.core.Teacher.MaximumNumberOfMVASamples = int(1e7)
39 fei.core.Teacher.MinimumNumberOfMVASamples = int(10)
41 particles = fei.get_unittest_channels()
44 path = b2.create_path()
46 ma.inputMdst(environmentType=
'default',
47 filename=b2.find_file(
'mdst14.root',
'validation',
False),
51 empty_path = b2.create_path()
52 skimfilter = b2.register_module(
'VariableToReturnValue')
53 skimfilter.param(
'variable',
'nCleanedTracks(dr < 2 and abs(dz) < 4)')
54 skimfilter.if_value(
'>{}'.format(maxTracks), empty_path, b2.AfterConditionPath.END)
55 path.add_module(skimfilter)
57 configuration = fei.config.FeiConfiguration(prefix=
'FEI_VALIDATION', cache=-1, training=
True, monitor=
False)
58 feistate = fei.get_path(particles, configuration)
59 path.add_path(feistate.path)
60 path.add_module(
'RootOutput')
62 assert feistate.stage == 0
64 b2.process(path, max_event=10000)
65 assert len(glob.glob(
'RootOutput.root')) == 1
66 assert len(glob.glob(
'mcParticlesCount.root')) == 1
69 path = b2.create_path()
70 ma.inputMdstList(
'default', [
'./RootOutput.root'], path)
73 empty_path = b2.create_path()
74 skimfilter = b2.register_module(
'VariableToReturnValue')
75 skimfilter.param(
'variable',
'nCleanedTracks(dr < 2 and abs(dz) < 4)')
76 skimfilter.if_value(
'>{}'.format(maxTracks), empty_path, b2.AfterConditionPath.END)
77 path.add_module(skimfilter)
79 configuration = fei.config.FeiConfiguration(prefix=
'FEI_VALIDATION', cache=feistate.stage, training=
True, monitor=
False)
80 feistate = fei.get_path(particles, configuration)
81 path.add_path(feistate.path)
82 path.add_module(
'RootOutput')
84 assert feistate.stage == 1
86 b2.process(path, max_event=10000)
89 assert len(glob.glob(
'RootOutput.root')) == 1
90 assert len(glob.glob(
'training_input.root')) == 1
91 f = ROOT.TFile.Open(
"training_input.root",
"read")
92 assert sum([
'gamma' in key.GetName()[:5]
for key
in f.GetListOfKeys()]) == 2
93 assert sum([
'mu+' in key.GetName()[:4]
for key
in f.GetListOfKeys()]) == 1
94 assert sum([
'pi+' in key.GetName()[:4]
for key
in f.GetListOfKeys()]) == 1
95 assert sum([
'K+' in key.GetName()[:3]
for key
in f.GetListOfKeys()]) == 1
99 fei.do_trainings(particles, configuration)
102 shutil.move(
"training_input.root", f
"training_input_stage{feistate.stage-1}.root")
105 assert len(glob.glob(
'gamma*.xml')) == 2
106 assert len(glob.glob(
'mu+*.xml')) == 1
107 assert len(glob.glob(
'pi+*.xml')) == 1
108 assert len(glob.glob(
'K+*.xml')) == 1
111 path = b2.create_path()
112 ma.inputMdstList(
'default', [
'./RootOutput.root'], path)
115 empty_path = b2.create_path()
116 skimfilter = b2.register_module(
'VariableToReturnValue')
117 skimfilter.param(
'variable',
'nCleanedTracks(dr < 2 and abs(dz) < 4)')
118 skimfilter.if_value(
'>{}'.format(maxTracks), empty_path, b2.AfterConditionPath.END)
119 path.add_module(skimfilter)
121 configuration = fei.config.FeiConfiguration(prefix=
'FEI_VALIDATION', cache=feistate.stage, training=
True, monitor=
False)
122 feistate = fei.get_path(particles, configuration)
123 path.add_path(feistate.path)
124 path.add_module(
'RootOutput')
126 assert feistate.stage == 2
128 b2.process(path, max_event=10000)
131 assert len(glob.glob(
'RootOutput.root')) == 1
132 assert len(glob.glob(
'training_input.root')) == 1
133 f = ROOT.TFile.Open(
"training_input.root",
"read")
134 assert sum([
'pi0' in key.GetName()[:4]
for key
in f.GetListOfKeys()]) == 1
138 fei.do_trainings(particles, configuration)
141 shutil.move(
"training_input.root", f
"training_input_stage{feistate.stage-1}.root")
144 assert len(glob.glob(
'pi0*.xml')) == 1
147 path = b2.create_path()
148 ma.inputMdstList(
'default', [
'./RootOutput.root'], path)
151 empty_path = b2.create_path()
152 skimfilter = b2.register_module(
'VariableToReturnValue')
153 skimfilter.param(
'variable',
'nCleanedTracks(dr < 2 and abs(dz) < 4)')
154 skimfilter.if_value(
'>{}'.format(maxTracks), empty_path, b2.AfterConditionPath.END)
155 path.add_module(skimfilter)
157 configuration = fei.config.FeiConfiguration(prefix=
'FEI_VALIDATION', cache=feistate.stage, training=
True, monitor=
False)
158 feistate = fei.get_path(particles, configuration)
159 path.add_path(feistate.path)
160 path.add_module(
'RootOutput')
162 assert feistate.stage == 4
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(environmentType=
'default',
191 filename=b2.find_file(
'mdst14.root',
'validation',
False),
195 empty_path = b2.create_path()
196 skimfilter = b2.register_module(
'VariableToReturnValue')
197 skimfilter.param(
'variable',
'nCleanedTracks(dr < 2 and abs(dz) < 4)')
198 skimfilter.if_value(
'>{}'.format(maxTracks), empty_path, b2.AfterConditionPath.END)
199 path.add_module(skimfilter)
201 configuration = fei.config.FeiConfiguration(prefix=
'FEI_VALIDATION', cache=0, monitor=
True)
202 feistate = fei.get_path(particles, configuration)
203 path.add_path(feistate.path)
205 assert feistate.stage == 7
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)