15 class TestFeiConfiguration(unittest.TestCase):
17 def test_Defaults(self):
18 config = fei.config.FeiConfiguration()
19 self.assertEqual(config.prefix,
'FEI_TEST')
20 self.assertEqual(config.cache,
None)
21 self.assertEqual(config.monitor,
True)
22 self.assertEqual(config.legacy,
None)
23 self.assertEqual(config.externTeacher,
'basf2_mva_teacher')
24 self.assertEqual(config.training,
False)
27 class TestMVAConfiguration(unittest.TestCase):
29 def test_Defaults(self):
30 config = fei.config.MVAConfiguration()
31 self.assertEqual(config.method,
'FastBDT')
32 self.assertEqual(config.config,
'--nTrees 400 --nCutLevels 10 --nLevels 3 --shrinkage 0.1 --randRatio 0.5')
34 self.assertEqual(config.variables,
None)
35 self.assertEqual(config.target,
'isSignal')
36 self.assertEqual(config.sPlotVariable,
None)
39 class TestPreCutConfiguration(unittest.TestCase):
41 def test_Defaults(self):
42 config = fei.config.PreCutConfiguration()
43 self.assertEqual(config.userCut,
'')
44 self.assertEqual(config.vertexCut, -2)
45 self.assertEqual(config.bestCandidateVariable,
None)
46 self.assertEqual(config.bestCandidateCut, 0)
47 self.assertEqual(config.bestCandidateMode,
'lowest')
50 class TestPostCutConfiguration(unittest.TestCase):
52 def test_Defaults(self):
53 config = fei.config.PostCutConfiguration()
54 self.assertEqual(config.value, 0.0)
55 self.assertEqual(config.bestCandidateCut, 0)
58 class TestDecayChannel(unittest.TestCase):
60 def test_Defaults(self):
61 channel = fei.config.DecayChannel(name=
'D0:23', label=
'D0 ==> K- pi+',
62 decayString=
'D0:23 -> K- pi+', daughters=[
'K-',
'pi+'],
63 mvaConfig=fei.config.MVAConfiguration(variables=[
'E']),
64 preCutConfig=fei.config.PreCutConfiguration(userCut=
'test'),
66 self.assertEqual(channel.name,
'D0:23')
67 self.assertEqual(channel.label,
'D0 ==> K- pi+')
68 self.assertEqual(channel.decayString,
'D0:23 -> K- pi+')
69 self.assertEqual(channel.daughters, [
'K-',
'pi+'])
70 self.assertEqual(channel.mvaConfig, fei.config.MVAConfiguration(variables=[
'E']))
71 self.assertEqual(channel.preCutConfig, fei.config.PreCutConfiguration(userCut=
'test'))
72 self.assertEqual(channel.decayModeID, 23)
75 class TestParticle(unittest.TestCase):
77 def test_Defaults(self):
78 mvaConfig = fei.config.MVAConfiguration(variables=[
'E'])
79 preCutConfig = fei.config.PreCutConfiguration()
80 postCutConfig = fei.config.PostCutConfiguration()
81 particle = fei.config.Particle(
'D0', mvaConfig)
83 self.assertEqual(particle.identifier,
'D0:generic')
84 self.assertEqual(particle.name,
'D0')
85 self.assertEqual(particle.label,
'generic')
86 self.assertEqual(particle.mvaConfig, mvaConfig)
87 self.assertEqual(particle.preCutConfig, preCutConfig)
88 self.assertEqual(particle.postCutConfig, postCutConfig)
89 self.assertListEqual(particle.channels, [])
90 self.assertListEqual(particle.daughters, [])
92 def test_NonDefaults(self):
93 mvaConfig = fei.config.MVAConfiguration(variables=[
'E'])
94 preCutConfig = fei.config.PreCutConfiguration(userCut=
'test')
95 postCutConfig = fei.config.PostCutConfiguration(value=0.1)
96 particle = fei.config.Particle(
'D0', mvaConfig, preCutConfig, postCutConfig)
98 self.assertEqual(particle.identifier,
'D0:generic')
99 self.assertEqual(particle.name,
'D0')
100 self.assertEqual(particle.label,
'generic')
101 self.assertEqual(particle.mvaConfig, mvaConfig)
102 self.assertEqual(particle.preCutConfig, preCutConfig)
103 self.assertEqual(particle.postCutConfig, postCutConfig)
104 self.assertListEqual(particle.channels, [])
105 self.assertListEqual(particle.daughters, [])
107 def test_Label(self):
108 mvaConfig = fei.config.MVAConfiguration(variables=[
'E'])
109 particle = fei.config.Particle(
'D0:specific', mvaConfig)
110 self.assertEqual(particle.identifier,
'D0:specific')
111 self.assertEqual(particle.name,
'D0')
112 self.assertEqual(particle.label,
'specific')
114 def test_Equality(self):
115 a = fei.config.Particle(
'D0', fei.config.MVAConfiguration(variables=[
'E',
'daughter({}, p)',
'daughterAngle({}, {})']),
116 fei.config.PreCutConfiguration(userCut=
'test'), fei.config.PostCutConfiguration())
117 a.addChannel([
'pi-',
'pi+'], mvaConfig=fei.config.MVAConfiguration(variables=[
'E',
'daughter({}, p)']))
118 a.addChannel([
'K-',
'pi+'], preCutConfig=fei.config.PreCutConfiguration(userCut=
'alternative'))
120 b = fei.config.Particle(
'D0', fei.config.MVAConfiguration(variables=[
'E',
'daughter({}, p)',
'daughterAngle({}, {})']),
121 fei.config.PreCutConfiguration(userCut=
'test'), fei.config.PostCutConfiguration())
122 b.addChannel([
'pi-',
'pi+'], mvaConfig=fei.config.MVAConfiguration(variables=[
'E',
'daughter({}, p)']))
123 b.addChannel([
'K-',
'pi+'], preCutConfig=fei.config.PreCutConfiguration(userCut=
'alternative'))
124 self.assertEqual(a, b)
126 b = fei.config.Particle(
'D+', fei.config.MVAConfiguration(variables=[
'E',
'daughter({}, p)',
'daughterAngle({}, {})']),
127 fei.config.PreCutConfiguration(userCut=
'test'), fei.config.PostCutConfiguration())
128 b.addChannel([
'pi-',
'pi+'], mvaConfig=fei.config.MVAConfiguration(variables=[
'E',
'daughter({}, p)']))
129 b.addChannel([
'K-',
'pi+'], preCutConfig=fei.config.PreCutConfiguration(userCut=
'alternative'))
130 self.assertNotEqual(a, b)
132 b = fei.config.Particle(
'D0', fei.config.MVAConfiguration(variables=[
'E',
'daughter({}, p)',
'daughterAngle({}, {})']),
133 fei.config.PreCutConfiguration(userCut=
'test'), fei.config.PostCutConfiguration())
134 b.addChannel([
'K-',
'pi+'], preCutConfig=fei.config.PreCutConfiguration(userCut=
'alternative'))
135 self.assertNotEqual(a, b)
137 b = fei.config.Particle(
'D0', fei.config.MVAConfiguration(variables=[
'daughter({}, p)',
'daughterAngle({}, {})']),
138 fei.config.PreCutConfiguration(userCut=
'test'), fei.config.PostCutConfiguration())
139 b.addChannel([
'pi-',
'pi+'], mvaConfig=fei.config.MVAConfiguration(variables=[
'E',
'daughter({}, p)']))
140 b.addChannel([
'K-',
'pi+'], preCutConfig=fei.config.PreCutConfiguration(userCut=
'alternative'))
141 self.assertNotEqual(a, b)
143 b = fei.config.Particle(
'D0', fei.config.MVAConfiguration(variables=[
'E',
'daughter({}, p)',
'daughterAngle({}, {})']),
144 fei.config.PreCutConfiguration(userCut=
'test'), fei.config.PostCutConfiguration())
145 b.addChannel([
'pi-',
'pi+'], mvaConfig=fei.config.MVAConfiguration(variables=[
'daughter({}, p)']))
146 b.addChannel([
'K-',
'pi+'], preCutConfig=fei.config.PreCutConfiguration(userCut=
'alternative'))
147 self.assertNotEqual(a, b)
149 b = fei.config.Particle(
'D0', fei.config.MVAConfiguration(variables=[
'E',
'daughter({}, p)',
'daughterAngle({}, {})']),
150 fei.config.PreCutConfiguration(userCut=
'test'), fei.config.PostCutConfiguration())
151 b.addChannel([
'pi-',
'pi+'], mvaConfig=fei.config.MVAConfiguration(variables=[
'E',
'daughter({}, p)']))
152 b.addChannel([
'K-',
'pi+'], preCutConfig=fei.config.PreCutConfiguration(userCut=
'test'))
153 self.assertNotEqual(a, b)
155 b = fei.config.Particle(
'D0', fei.config.MVAConfiguration(variables=[
'E',
'daughter({}, p)',
'daughterAngle({}, {})']),
156 fei.config.PreCutConfiguration(userCut=
'test'), fei.config.PostCutConfiguration(value=0.1))
157 b.addChannel([
'pi-',
'pi+'], mvaConfig=fei.config.MVAConfiguration(variables=[
'E',
'daughter({}, p)']))
158 b.addChannel([
'K-',
'pi+'], preCutConfig=fei.config.PreCutConfiguration(userCut=
'alternative'))
159 self.assertNotEqual(a, b)
161 b = fei.config.Particle(
'D0', fei.config.MVAConfiguration(variables=[
'E',
'daughter({}, p)',
'daughterAngle({}, {})']),
162 fei.config.PreCutConfiguration(userCut=
'dummy'), fei.config.PostCutConfiguration())
163 b.addChannel([
'pi-',
'pi+'], mvaConfig=fei.config.MVAConfiguration(variables=[
'E',
'daughter({}, p)']))
164 b.addChannel([
'K-',
'pi+'], preCutConfig=fei.config.PreCutConfiguration(userCut=
'alternative'))
165 self.assertNotEqual(a, b)
167 def test_AddChannel(self):
168 mvaConfig = fei.config.MVAConfiguration(variables=[
'E',
'daughter({}, p)',
'daughterAngle({}, {})'])
169 preCutConfig = fei.config.PreCutConfiguration(userCut=
'test')
170 postCutConfig = fei.config.PostCutConfiguration()
171 particle = fei.config.Particle(
'D0', mvaConfig, preCutConfig, postCutConfig)
173 particle.addChannel([
'pi-',
'pi+'], mvaConfig=fei.config.MVAConfiguration(variables=[
'E',
'daughter({}, p)']))
174 particle.addChannel([
'K-',
'pi+'], preCutConfig=fei.config.PreCutConfiguration(userCut=
'alternative'))
175 particle.addChannel([
'K-:specific',
'pi+',
'pi0'])
176 particle.addChannel([
'K-',
'K+'])
179 channels.append(fei.config.DecayChannel(name=
'D0:generic_0',
180 label=
'D0:generic ==> pi-:generic pi+:generic',
181 decayString=
'D0:generic_0 -> pi-:generic pi+:generic',
182 daughters=[
'pi-:generic',
'pi+:generic'],
183 mvaConfig=fei.config.MVAConfiguration(variables=[
'E',
186 preCutConfig=fei.config.PreCutConfiguration(userCut=
'test'),
188 channels.append(fei.config.DecayChannel(name=
'D0:generic_1',
189 label=
'D0:generic ==> K-:generic pi+:generic',
190 decayString=
'D0:generic_1 -> K-:generic pi+:generic',
191 daughters=[
'K-:generic',
'pi+:generic'],
192 mvaConfig=fei.config.MVAConfiguration(variables=[
'E',
195 'daughterAngle(0, 1)']),
196 preCutConfig=fei.config.PreCutConfiguration(userCut=
'alternative'),
198 channels.append(fei.config.DecayChannel(name=
'D0:generic_2',
199 label=
'D0:generic ==> K-:specific pi+:generic pi0:generic',
200 decayString=
'D0:generic_2 -> K-:specific pi+:generic pi0:generic',
201 daughters=[
'K-:specific',
'pi+:generic',
'pi0:generic'],
202 mvaConfig=fei.config.MVAConfiguration(variables=[
'E',
206 'daughterAngle(0, 1)',
207 'daughterAngle(0, 2)',
208 'daughterAngle(1, 2)']),
209 preCutConfig=fei.config.PreCutConfiguration(userCut=
'test'),
211 channels.append(fei.config.DecayChannel(name=
'D0:generic_3',
212 label=
'D0:generic ==> K-:generic K+:generic',
213 decayString=
'D0:generic_3 -> K-:generic K+:generic',
214 daughters=[
'K-:generic',
'K+:generic'],
215 mvaConfig=fei.config.MVAConfiguration(variables=[
'E',
218 'daughterAngle(0, 1)']),
219 preCutConfig=fei.config.PreCutConfiguration(userCut=
'test'),
221 self.assertEqual(particle.channels, channels)
222 self.assertEqual(sorted(particle.daughters), sorted([
'K+:generic',
'K-:generic',
'pi+:generic',
223 'pi-:generic',
'pi0:generic',
'K-:specific']))
226 class TestVariables2MonitoringBinning(unittest.TestCase):
228 def test_Variables2MonitoringBinning1D(self):
229 self.assertEqual(fei.config.variables2binnings([
'mcErrors']), [(
'mcErrors', 513, -0.5, 512.5)])
230 self.assertEqual(fei.config.variables2binnings([
'default']), [(
'default', 100, -10.0, 10.0)])
232 def test_Variables2MonitoringBinning2D(self):
233 self.assertEqual(fei.config.variables2binnings_2d([(
'mcErrors',
'default')]),
234 [(
'mcErrors', 513, -0.5, 512.5,
'default', 100, -10.0, 10.0)])
235 self.assertEqual(fei.config.variables2binnings_2d([(
'default',
'default'), (
'mcErrors',
'mcErrors')]),
236 [(
'default', 100, -10.0, 10.0,
'default', 100, -10.0, 10.0),
237 (
'mcErrors', 513, -0.5, 512.5,
'mcErrors', 513, -0.5, 512.5)])
240 if __name__ ==
'__main__':
241 tempdir = tempfile.mkdtemp()
244 atexit.register(shutil.rmtree, tempdir)