def test_flipping(self): """ check if the flipping of loop-line work""" ### Box cut at the T-channel #diagram = copy.deepcopy(self.store_diagram['g g > g g'][60]) structure = self.store_diagram['g g > g g']['structure'] #diagram = draw_lib.LoopFeynmanDiagram(diagram, structure, self.model) #self.assertTrue(diagram.need_to_flip()) #diagram.load_diagram() #diagram.loop_flip() #nb_t = len([1 for l in diagram.lineList if l.state and l.loop_line]) #self.assertEqual(nb_t,3) #self.assertFalse(diagram.need_to_flip()) ### Triangle diagram = copy.deepcopy(self.store_diagram['g g > g g'][8]) diagram = draw_lib.LoopFeynmanDiagram(diagram, structure, self.model) # diagram.load_diagram() self.assertTrue(diagram.need_to_flip()) ### Triangle diagram = copy.deepcopy(self.store_diagram['FULL g g > g g'][202]) diagram = draw_lib.LoopFeynmanDiagram(diagram, structure, self.model) # diagram.load_diagram() self.assertFalse(diagram.need_to_flip()) # Same test but for d d~ > e+ e- mu+ mu-: diagram = copy.deepcopy( self.store_diagram['FULL d d~ > e+ e- mu+ mu-'][42]) diagram = draw_lib.LoopFeynmanDiagram(diagram, structure, self.model) diagram.load_diagram() diagram.define_level() self.assertTrue(diagram.need_to_flip())
def test_level_with_flipping_triangle(self): diagram = copy.deepcopy(self.store_diagram['g g > g g'][8]) structure = self.store_diagram['g g > g g']['structure'] diagram = draw_lib.LoopFeynmanDiagram(diagram, structure, self.model) diagram.load_diagram() self.assertTrue(diagram.need_to_flip()) # check the position for this diagram diagram.define_level() level_solution = [1, 1, 2, 1, 0, 2, 0, 3] level = [v.level for v in diagram.vertexList] self.assertEqual(level, level_solution) diagram.find_initial_vertex_position() level_solution = [1, 1, 2, 1, 0, 3, 0, 3] level = [v.level for v in diagram.vertexList] self.assertEqual(level, level_solution) x_solution = [1 / 3, 1 / 3, 2 / 3, 1 / 3, 0, 1, 0, 1] y_solution = [1 / 6, 5 / 6, 3 / 4, 1 / 2, 0, 0, 1, 1] self.assertEquals(len(diagram.vertexList), 8) for i in range(0, 8): self.assertEquals(diagram.vertexList[i].level, \ level_solution[i]) self.assertAlmostEquals(diagram.vertexList[i].pos_x, \ x_solution[i]) self.assertAlmostEquals(diagram.vertexList[i].pos_y, \ y_solution[i]) for line in diagram.lineList: self.assertNotEquals(line.begin, None) self.assertNotEquals(line.end, None)
def test_NLO_draw_uux_uuxddx(self): for i in range(139,140): diagram = copy.deepcopy(self.store_diagram['u u~ > u u~ d d~'][i]) structure = self.store_diagram['u u~ > u u~ d d~']['structure'] diagram = draw_lib.LoopFeynmanDiagram(diagram, structure, self.model) diagram.load_diagram() diagram.define_level() diagram.find_initial_vertex_position() self.assertnozerolength(diagram)
def test_NLO_draw_all_gg_gg(self): for i in range(5, 85): diagram = copy.deepcopy(self.store_diagram['g g > g g'][i]) structure = self.store_diagram['g g > g g']['structure'] diagram = draw_lib.LoopFeynmanDiagram(diagram, structure, self.model) diagram.load_diagram() diagram.define_level() diagram.find_initial_vertex_position() self.assertnozerolength(diagram)
def test_NLO_draw_gg_ggg(self): for i in range(1500,1600): diagram = copy.deepcopy(self.store_diagram['g g > g g g'][i]) structure = self.store_diagram['g g > g g g']['structure'] diagram = draw_lib.LoopFeynmanDiagram(diagram, structure, self.model) diagram.load_diagram() diagram.define_level() diagram.find_initial_vertex_position() self.assertnozerolength(diagram) self.assertFalse(diagram._debug_has_intersection())
def test_NLO_draw(self): """ check if we can make the drawing """ # test that NLO DRAW is fine first check for diagram # + + # + + # + # I # I + # + + # I + + # I + + # I +------ # I + + # I + + # + + # + + # + + diagram = self.store_diagram['g g > g g'][12] structure = self.store_diagram['g g > g g']['structure'] diagram = draw_lib.LoopFeynmanDiagram(diagram, structure, self.model) diagram.load_diagram() diagram.define_level() level_solution = [1, 1, 1, 2, 0, 2, 0, 3] level = [v.level for v in diagram.vertexList] level_solution.sort() level.sort() self.assertEqual(level, level_solution) diagram.find_initial_vertex_position() level_solution = [1, 1, 2, 1, 0, 3, 0, 3] level = [v.level for v in diagram.vertexList] self.assertEqual(level, level_solution) x_solution = [1/3, 1/3, 2/3, 1/3, 0, 1, 0, 1] y_solution = [1/6, 5/6, 3/4, 1/2, 0, 0, 1, 1] self.assertEquals(len(diagram.vertexList), 8) for i in range(0, 8): self.assertEquals(diagram.vertexList[i].level, \ level_solution[i]) self.assertAlmostEquals(diagram.vertexList[i].pos_x, \ x_solution[i]) self.assertAlmostEquals(diagram.vertexList[i].pos_y, \ y_solution[i]) for line in diagram.lineList: self.assertNotEquals(line.begin, None) self.assertNotEquals(line.end, None)
def test_NLO_draw_uux_uuxddx(self): TestLoopDrawer.store_diagram = pickle.load(open(os.path.join(_file_path, \ '../../input_files/test_draw_nlo.obj'), 'rb')) for i in range(139, 140): diagram = copy.deepcopy(self.store_diagram['u u~ > u u~ d d~'][i]) structure = self.store_diagram['u u~ > u u~ d d~']['structure'] diagram = draw_lib.LoopFeynmanDiagram(diagram, structure, self.model) diagram.load_diagram() diagram.define_level() diagram.find_initial_vertex_position() self.assertnozerolength(diagram)
def no_test_special_gg_gg(self): diagram = self.store_diagram['g g > g g'][75] structure = self.store_diagram['g g > g g']['structure'] diagram = draw_lib.LoopFeynmanDiagram(diagram, structure, self.model) diagram.load_diagram() self.assertFalse(diagram.need_to_flip()) # check the position for this diagram diagram.define_level() level_solution = [2, 1, 1, 3, 3, 0, 0] level = [v.level for v in diagram.vertexList] self.assertEqual(level, level_solution) diagram.find_initial_vertex_position() level = [v.level for v in diagram.vertexList] self.assertEqual(level, level_solution) x_solution = [2 / 3, 1 / 3, 1 / 3, 1, 1, 0, 0] y_solution = [1 / 2, 3 / 4, 1 / 4, 0, 1, 1, 0] self.assertEquals(len(diagram.vertexList), 7) for i in range(0, 7): self.assertEquals(diagram.vertexList[i].level, \ level_solution[i]) self.assertAlmostEquals(diagram.vertexList[i].pos_x, \ x_solution[i]) self.assertAlmostEquals(diagram.vertexList[i].pos_y, \ y_solution[i]) for line in diagram.lineList: self.assertNotEquals(line.begin, None) self.assertNotEquals(line.end, None) # check the associate position diagram.find_initial_vertex_position()
def setUp(self): """ Setup a toy-model with gluon and down-quark only """ # A gluon self.mypartlist.append( base_objects.Particle({ 'name': 'g', 'antiname': 'g', 'spin': 3, 'color': 8, 'mass': 'zero', 'width': 'zero', 'texname': 'g', 'antitexname': 'g', 'line': 'curly', 'charge': 0., 'pdg_code': 21, 'propagating': True, 'is_part': True, 'self_antipart': True })) # A quark D and its antiparticle self.mypartlist.append( base_objects.Particle({ 'name': 'd', 'antiname': 'd~', 'spin': 2, 'color': 3, 'mass': 'dmass', 'width': 'zero', 'texname': 'd', 'antitexname': '\bar d', 'line': 'straight', 'charge': -1. / 3., 'pdg_code': 1, 'propagating': True, 'is_part': True, 'self_antipart': False })) antid = copy.copy(self.mypartlist[1]) antid.set('is_part', False) # 3 gluon vertex self.myinterlist.append(base_objects.Interaction({ 'id': 1, 'particles': base_objects.ParticleList(\ [self.mypartlist[0]] * 3), 'color': [], 'lorentz':['L1'], 'couplings':{(0, 0):'G'}, 'orders':{'QCD':1}})) # 4 gluon vertex self.myinterlist.append(base_objects.Interaction({ 'id': 2, 'particles': base_objects.ParticleList(\ [self.mypartlist[0]] * 4), 'color': [], 'lorentz':['L1'], 'couplings':{(0, 0):'G^2'}, 'orders':{'QCD':2}})) # Gluon coupling to the down-quark self.myinterlist.append(base_objects.Interaction({ 'id': 3, 'particles': base_objects.ParticleList(\ [self.mypartlist[1], \ antid, \ self.mypartlist[0]]), 'color': [], 'lorentz':['L1'], 'couplings':{(0, 0):'GQQ'}, 'orders':{'QCD':1}})) self.mymodel.set('particles', self.mypartlist) self.mymodel.set('interactions', self.myinterlist) self.myproc.set('model', self.mymodel) self.myloopmodel = save_load_object.load_from_file(os.path.join(_input_file_path,\ 'test_toyLoopModel.pkl')) box_diagram, box_struct = self.def_box() pent_diagram, pent_struct = self.def_pent() self.box_drawing = draw_lib.LoopFeynmanDiagram(box_diagram, box_struct, self.myloopmodel)