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(specific=
True)
44 sig_path = b2.create_path()
45 ma.inputMdst(environmentType=
'default',
46 filename=b2.find_file(
'mdst14.root',
'validation',
False),
48 ma.fillParticleList(
'mu+:sig',
'muonID > 0.5 and dr < 1 and abs(dz) < 2', writeOut=
True, path=sig_path)
49 ma.reconstructDecay(
'tau+:sig -> mu+:sig',
'', 1, writeOut=
True, path=sig_path)
50 ma.matchMCTruth(
'tau+:sig', path=sig_path)
51 ma.reconstructDecay(
'B+:sig -> tau+:sig',
'', writeOut=
True, path=sig_path)
52 ma.matchMCTruth(
'B+:sig', path=sig_path)
53 ma.buildRestOfEvent(
'B+:sig', path=sig_path)
55 configuration = fei.config.FeiConfiguration(prefix=
'FEI_VALIDATION', cache=-1, training=
True, monitor=
False)
56 feistate = fei.get_path(particles, configuration)
59 path = b2.create_path()
60 roe_path = b2.create_path()
61 cond_module = b2.register_module(
'SignalSideParticleFilter')
62 cond_module.param(
'particleLists', [
'B+:sig'])
63 cond_module.if_true(feistate.path, b2.AfterConditionPath.END)
64 roe_path.add_module(cond_module)
65 path.add_path(sig_path)
66 path.for_each(
'RestOfEvent',
'RestOfEvents', roe_path)
68 assert feistate.stage == 0
70 b2.process(path, max_event=10000)
71 assert len(glob.glob(
'mcParticlesCount.root')) == 1
74 path = b2.create_path()
75 configuration = fei.config.FeiConfiguration(prefix=
'FEI_VALIDATION', cache=0, training=
True, monitor=
False)
76 feistate = fei.get_path(particles, configuration)
77 roe_path = b2.create_path()
78 cond_module = b2.register_module(
'SignalSideParticleFilter')
79 cond_module.param(
'particleLists', [
'B+:sig'])
80 cond_module.if_true(feistate.path, b2.AfterConditionPath.END)
81 roe_path.add_module(cond_module)
82 path.add_path(sig_path)
83 path.for_each(
'RestOfEvent',
'RestOfEvents', roe_path)
85 assert feistate.stage == 1
87 b2.process(path, max_event=10000)
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 feistate = fei.get_path(particles, configuration)
113 roe_path = b2.create_path()
114 cond_module = b2.register_module(
'SignalSideParticleFilter')
115 cond_module.param(
'particleLists', [
'B+:sig'])
116 cond_module.if_true(feistate.path, b2.AfterConditionPath.END)
117 roe_path.add_module(cond_module)
118 path.add_path(sig_path)
119 path.for_each(
'RestOfEvent',
'RestOfEvents', roe_path)
121 assert feistate.stage == 2
123 b2.process(path, max_event=10000)
126 assert len(glob.glob(
'training_input.root')) == 1
127 f = ROOT.TFile.Open(
"training_input.root",
"read")
128 assert sum([
'pi0' in key.GetName()[:4]
for key
in f.GetListOfKeys()]) == 1
132 fei.do_trainings(particles, configuration)
135 shutil.move(
"training_input.root", f
"training_input_stage{feistate.stage-1}.root")
138 assert len(glob.glob(
'pi0*.xml')) == 1
141 path = b2.create_path()
142 feistate = fei.get_path(particles, configuration)
143 roe_path = b2.create_path()
144 cond_module = b2.register_module(
'SignalSideParticleFilter')
145 cond_module.param(
'particleLists', [
'B+:sig'])
146 cond_module.if_true(feistate.path, b2.AfterConditionPath.END)
147 roe_path.add_module(cond_module)
148 path.add_path(sig_path)
149 path.for_each(
'RestOfEvent',
'RestOfEvents', roe_path)
151 assert feistate.stage == 4
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
190 b2.process(path, max_event=10000)
193 assert len(glob.glob(
'Monitor_FSPLoader.root')) == 1
195 assert len(glob.glob(
'Monitor_ModuleStatistics.root')) == 1
197 assert len(glob.glob(
'Monitor_Final.root')) == 1
198 f = ROOT.TFile.Open(
"Monitor_Final.root",
"read")
199 assert f.GetListOfKeys().GetEntries() == 7
202 prereconstruction_files = [
203 'Monitor_PreReconstruction_BeforeRanking.root',
204 'Monitor_PreReconstruction_AfterRanking.root',
205 'Monitor_PreReconstruction_AfterVertex.root',
206 'Monitor_PostReconstruction_AfterMVA.root'
209 for fname
in prereconstruction_files:
210 assert len(glob.glob(fname)) == 1
211 f = ROOT.TFile.Open(fname,
"read")
212 assert f.GetListOfKeys().GetEntries() == 11
215 postreconstruction_files = [
216 'Monitor_PostReconstruction_BeforePostCut.root',
217 'Monitor_PostReconstruction_BeforeRanking.root',
218 'Monitor_PostReconstruction_AfterRanking.root'
221 for fname
in postreconstruction_files:
222 assert len(glob.glob(fname)) == 1
223 f = ROOT.TFile.Open(fname,
"read")
224 assert f.GetListOfKeys().GetEntries() == 7
227 shutil.rmtree(tempdir)