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)