34
34
import tests.unit_tests as unittest
35
35
_file_path = os.path.split(os.path.dirname(os.path.realpath(__file__)))[0]
37
# First define a valid model for Standard Model
38
_model = base_objects.Model()
39
# Import Particles information
40
_input_path = os.path.join(_file_path, '../input_files/v4_sm_particles.dat')
41
_model.set('particles', files.read_from_file(_input_path,
42
import_v4.read_particles_v4))
43
# Import Interaction information
44
_input_path = os.path.join(_file_path , '../input_files/v4_sm_interactions.dat')
45
_model.set('interactions', files.read_from_file(_input_path, \
46
import_v4.read_interactions_v4, \
47
_model.get('particles')))
41
# First define a valid model for Standard Model
42
_model = base_objects.Model()
43
# Import Particles information
44
_input_path = os.path.join(_file_path, '../input_files/v4_sm_particles.dat')
45
_model.set('particles', files.read_from_file(_input_path,
46
import_v4.read_particles_v4))
47
# Import Interaction information
48
_input_path = os.path.join(_file_path , '../input_files/v4_sm_interactions.dat')
49
_model.set('interactions', files.read_from_file(_input_path, \
50
import_v4.read_interactions_v4, \
51
_model.get('particles')))
50
55
#===============================================================================
148
153
#need to load SM?
149
154
for id in [1, 2, 3, 4, 5, 6, 11, 12, 13, 14, 15]:
150
my_line = drawing.FeynmanLine(id)
155
my_line = drawing.FeynmanLine({'id':id})
151
156
my_line.def_model(_model)
152
157
self.assertEquals(my_line.get_info('line'), 'straight')
155
my_line = drawing.FeynmanLine(id)
160
my_line = drawing.FeynmanLine({'id':id})
156
161
my_line.def_model(_model)
157
162
self.assertEquals(my_line.get_info('line'), 'dashed')
159
164
for id in [22, 23, 24, -23, -24]:
160
my_line = drawing.FeynmanLine(id)
165
my_line = drawing.FeynmanLine({'id':id})
161
166
my_line.def_model(_model)
162
167
self.assertEquals(my_line.get_info('line'), 'wavy')
165
my_line = drawing.FeynmanLine(id)
170
my_line = drawing.FeynmanLine({'id':id})
166
171
my_line.def_model(_model)
167
172
self.assertEquals(my_line.get_info('line'), 'curly')
169
174
id = [21, 22, 23, 24, -23, -24]
170
solution = ['g', 'a', 'z', 'w+', 'z', 'w-']
175
solution = ['g', 'a', 'z', 'w-', 'z', 'w+']
171
176
for i in range(0, len(id)):
172
my_line = drawing.FeynmanLine(id[i])
177
my_line = drawing.FeynmanLine({'id':id[i]})
173
178
my_line.def_model(_model)
174
179
self.assertEquals(my_line.get_name('name'), solution[i])
218
223
line3.inverse_pid_for_type('wavy')
219
224
line4.inverse_pid_for_type('wavy')
221
self.assertEquals(line1.pid, -24)
222
self.assertEquals(line2.pid, 24)
223
self.assertEquals(line3.pid, -22)
224
self.assertEquals(line4.pid, 1)
226
self.assertEquals(line1.id, -24)
227
self.assertEquals(line2.id, 24)
228
self.assertEquals(line3.id, -22)
229
self.assertEquals(line4.id, 1)
226
231
line1.inverse_pid_for_type()
227
232
line2.inverse_pid_for_type()
228
233
line3.inverse_pid_for_type()
229
234
line4.inverse_pid_for_type()
231
self.assertEquals(line1.pid, -24)
232
self.assertEquals(line2.pid, 24)
233
self.assertEquals(line3.pid, -22)
234
self.assertEquals(line4.pid, -1)
236
self.assertEquals(line1.id, -24)
237
self.assertEquals(line2.id, 24)
238
self.assertEquals(line3.id, -22)
239
self.assertEquals(line4.id, -1)
236
241
def test_domain_intersection(self):
237
242
""" Test domain intersection between two FeynmanLine """
713
718
"""Test the object which compute the position of the vertex/line
714
719
for a given Diagram object
717
#test diagram gg>gg via a T-channel
718
leg1 = base_objects.Leg({'id':22, 'number':1, 'state':False,
720
leg2 = base_objects.Leg({'id':22, 'number':2, 'state':False,
722
leg3 = base_objects.Leg({'id':22, 'number':3, 'state':True,
724
leg4 = base_objects.Leg({'id':22, 'number':4, 'state':True,
727
#intermediate particle +vertex associate
728
leg_t1 = base_objects.Leg({'id':22, 'number':1, 'state':False,
730
vertex1 = base_objects.Vertex({'id':1, \
731
'legs':base_objects.LegList([leg1, leg3, leg_t1])})
733
leg_t2 = base_objects.Leg({'id':22, 'number':2, 'state':False,
735
vertex2 = base_objects.Vertex({'id':2, \
736
'legs':base_objects.LegList([leg2, leg4, leg_t2])})
738
vertex3 = base_objects.Vertex({'id':0, \
739
'legs':base_objects.LegList([leg_t1, leg_t2])})
741
vertexlist = base_objects.VertexList([vertex1, vertex2, vertex3])
742
t_diagram_dict = {'vertices':vertexlist}
744
#test diagram gg>gg via a S-channel
745
leg1 = base_objects.Leg({'id':22, 'number':1, 'state':False,
747
leg2 = base_objects.Leg({'id':22, 'number':2, 'state':False,
749
leg3 = base_objects.Leg({'id':22, 'number':3, 'state':True,
751
leg4 = base_objects.Leg({'id':22, 'number':4, 'state':True,
754
#intermediate particle +vertex associate
755
leg_s = base_objects.Leg({'id':22, 'number':1, 'state':True,
757
vertex1 = base_objects.Vertex({'id':1, \
758
'legs':base_objects.LegList([leg1, leg2, leg_s])})
760
leg_temp = base_objects.Leg({'id':22, 'number':1, 'state':True,
763
vertex2 = base_objects.Vertex({'id':2, \
764
'legs':base_objects.LegList([leg_s, leg3, leg_temp])})
766
vertex3 = base_objects.Vertex({'id':0, \
767
'legs':base_objects.LegList([leg_temp, leg4])})
769
vertexlist = base_objects.VertexList([vertex1, vertex2, vertex3])
770
s_diagram_dict = {'vertices':vertexlist}
773
# Recover some diagram causing crashes or having some interesting feature
774
#in order to ensure that those problem will not appear again.
775
#Those diagrams were keep in a pickle format"""
776
filehandler = open(os.path.join(_file_path, \
777
'../input_files/test_draw.obj'), 'r')
778
store_diagram = pickle.load(filehandler)
730
#test diagram gg>gg via a T-channel
731
leg1 = base_objects.Leg({'id':22, 'number':1, 'state':False,
733
leg2 = base_objects.Leg({'id':22, 'number':2, 'state':False,
735
leg3 = base_objects.Leg({'id':22, 'number':3, 'state':True,
737
leg4 = base_objects.Leg({'id':22, 'number':4, 'state':True,
740
#intermediate particle +vertex associate
741
leg_t1 = base_objects.Leg({'id':22, 'number':1, 'state':False,
743
vertex1 = base_objects.Vertex({'id':1, \
744
'legs':base_objects.LegList([leg1, leg3, leg_t1])})
746
leg_t2 = base_objects.Leg({'id':22, 'number':2, 'state':False,
748
vertex2 = base_objects.Vertex({'id':2, \
749
'legs':base_objects.LegList([leg2, leg4, leg_t2])})
751
vertex3 = base_objects.Vertex({'id':0, \
752
'legs':base_objects.LegList([leg_t1, leg_t2])})
754
vertexlist = base_objects.VertexList([vertex1, vertex2, vertex3])
755
cls.t_diagram_dict = {'vertices':vertexlist}
757
#test diagram gg>gg via a S-channel
758
leg1 = base_objects.Leg({'id':22, 'number':1, 'state':False,
760
leg2 = base_objects.Leg({'id':22, 'number':2, 'state':False,
762
leg3 = base_objects.Leg({'id':22, 'number':3, 'state':True,
764
leg4 = base_objects.Leg({'id':22, 'number':4, 'state':True,
767
#intermediate particle +vertex associate
768
leg_s = base_objects.Leg({'id':22, 'number':1, 'state':True,
770
vertex1 = base_objects.Vertex({'id':1, \
771
'legs':base_objects.LegList([leg1, leg2, leg_s])})
773
leg_temp = base_objects.Leg({'id':22, 'number':1, 'state':True,
776
vertex2 = base_objects.Vertex({'id':2, \
777
'legs':base_objects.LegList([leg_s, leg3, leg_temp])})
779
vertex3 = base_objects.Vertex({'id':0, \
780
'legs':base_objects.LegList([leg_temp, leg4])})
782
vertexlist = base_objects.VertexList([vertex1, vertex2, vertex3])
783
cls.s_diagram_dict = {'vertices':vertexlist}
784
# Recover some diagram causing crashes or having some interesting feature
785
#in order to ensure that those problem will not appear again.
786
#Those diagrams were keep in a pickle format"""
787
filehandler = open(os.path.join(_file_path, \
788
'../input_files/test_draw.obj'), 'r')
789
cls.store_diagram = pickle.load(filehandler)
783
792
"""Basic building of the object needed to build the test"""
794
if not hasattr(self, 'store_diagram'):
785
799
opt = drawing.DrawOption({'external':1, 'horizontal':1, 'max_size':0})
786
800
# gg>g(g>uux)g (via a T channel)
787
801
mix_diagram = self.store_diagram['g g > g g u u~'][18]
1216
1232
diagram = self.store_diagram['mu+ mu- > w+ w- a'][7]
1217
1233
diagram = drawing.FeynmanDiagramHorizontal(diagram, _model)
1219
t_lines = [line for line in diagram.lineList if line.start.level == 1
1235
t_lines = [line for line in diagram.lineList if line.begin.level == 1
1220
1236
and line.end.level == 1]
1222
1238
for line in t_lines:
1223
1239
if line.is_fermion():
1224
self.assertTrue(line.start.pos_y > line.end.pos_y)
1240
self.assertTrue(line.begin.pos_y > line.end.pos_y)
1226
1242
# Load diagram with two fermion flow
1227
1243
diagram = self.store_diagram['mu+ mu- > w+ w- a'][6]
1228
1244
diagram = drawing.FeynmanDiagramHorizontal(diagram, _model)
1230
t_lines = [line for line in diagram.lineList if line.start.level == 1
1246
t_lines = [line for line in diagram.lineList if line.begin.level == 1
1231
1247
and line.end.level == 1]
1233
1249
for line in t_lines:
1234
1250
if line.is_fermion():
1235
self.assertTrue(line.start.pos_y > line.end.pos_y)
1251
self.assertTrue(line.begin.pos_y > line.end.pos_y)
1237
1253
# One fermion flow but in opposite direction
1238
1254
diagram = self.store_diagram['g g > g g u u~'][100]
1239
1255
diagram = drawing.FeynmanDiagramHorizontal(diagram, _model)
1241
t_lines = [line for line in diagram.lineList if line.start.level == 1
1257
t_lines = [line for line in diagram.lineList if line.begin.level == 1
1242
1258
and line.end.level == 1]
1244
1260
for line in t_lines:
1245
1261
if line.is_fermion():
1246
self.assertTrue(line.start.pos_y > line.end.pos_y)
1262
self.assertTrue(line.begin.pos_y > line.end.pos_y)
1248
1264
# Two fermion in opposite direction
1249
1265
diagram = self.store_diagram['u u > z u u g'][26]
1250
1266
diagram = drawing.FeynmanDiagramHorizontal(diagram, _model)
1252
t_lines = [line for line in diagram.lineList if line.start.level == 1
1268
t_lines = [line for line in diagram.lineList if line.begin.level == 1
1253
1269
and line.end.level == 1]
1255
1271
for line in t_lines:
1256
1272
if line.is_fermion():
1257
self.assertTrue(line.start.pos_y > line.end.pos_y)
1273
self.assertTrue(line.begin.pos_y > line.end.pos_y)
1260
1276
# Two fermion in opposite direction
1261
1277
diagram = self.store_diagram['u~ u~ > z u~ u~ g'][26]
1262
1278
diagram = drawing.FeynmanDiagramHorizontal(diagram, _model)
1264
t_lines = [line for line in diagram.lineList if line.start.level == 1
1280
t_lines = [line for line in diagram.lineList if line.begin.level == 1
1265
1281
and line.end.level == 1]
1267
1283
for line in t_lines:
1268
1284
if line.is_fermion():
1269
self.assertTrue(line.start.pos_y < line.end.pos_y)
1285
self.assertTrue(line.begin.pos_y < line.end.pos_y)
1271
1287
def test_part_antipart_after_output(self):
1272
1288
"""Check that the fermion flow is correct before and after output command
1389
1405
#print diagram._debug_level()
1391
1407
#select the s-channel W
1392
line1 = [line for line in diagram.lineList if line.start.level in [2,3]
1408
line1 = [line for line in diagram.lineList if line.begin.level in [2,3]
1393
1409
and line.end.level in [2,3]][0]
1394
line2 = [line for line in diagram.lineList if line.start.level in [3,4]
1410
line2 = [line for line in diagram.lineList if line.begin.level in [3,4]
1395
1411
and line.end.level in [4,3]][0]
1396
line3 = [line for line in diagram.lineList if line.start.level in [2,5]
1412
line3 = [line for line in diagram.lineList if line.begin.level in [2,5]
1397
1413
and line.end.level in [2,5]][0]
1398
self.assertEqual(line3.pid, -24)
1414
self.assertEqual(line3.id, -24)
1400
self.assertEqual(line1.pid, line2.pid)
1401
self.assertEqual(line1.pid, 24)
1402
self.assertEqual(line1.start.level, 2)
1416
self.assertEqual(line1.id, line2.id)
1417
self.assertEqual(line1.id, 24)
1418
self.assertEqual(line1.begin.level, 2)
1403
1419
self.assertEqual(line1.end.level, 3)
1404
self.assertEqual(line2.start.level, 3)
1420
self.assertEqual(line2.begin.level, 3)
1405
1421
self.assertEqual(line2.end.level, 4)
1406
1422
# Do the same for after the output command:
1407
1423
# Load diagram with one fermion flow