Package madgraph :: Package core :: Module drawing :: Class LoopFeynmanDiagram
[hide private]
[frames] | no frames]

Class LoopFeynmanDiagram

source code

    object --+    
             |    
FeynmanDiagram --+
                 |
                LoopFeynmanDiagram

Object to compute the position of the different Vertex and Line associate
to a diagram object with a presence of a Loop.

This is the standard way to doing it [main]
1) Creates the new structure needed for the diagram generation [load_diagram]
    This defines self.vertexList and self.lineList which are the list of     
    respectively all the vertex and all the line include in the diagram.
    Each line is associated to two vertex, so we have added new vertex
    compare to the diagram object (base_objects.Diagram). The two vertex are 
    named begin/end and represent the line direction. at this stage all line
    are going timelike. T-channel are going from particle 1 to particle 2
2) Associate to each vertex a level. [define_level]
    This level is define has the number of non T-channel 
    particles needed to connect this particles to a initial state starting
    point. 
    The Loop is dispatched on only two channel. If some T-channel 
    started between the initial particles those are going in negative 
    directions (i.e. to negative level)
    
3) Compute the position of each vertex [find_initial_vertex_position]
    The x-coordinate will proportional to the level. The most negative vertex
    will have x=0 coordinate (vertex associate with initial state particle)
    The vertex with the highest level value should be at x=1.
    
    If an external particles cann't be place at the border at the current 
    level. we will try to place it one level later, potentially up to last
    level. A option can force to place all external particles at x=1.
    
    the y-coordinate are chosen such that 
        - external particles try to have (y=0 or y=1) coordinates
            (if not move those vertex to next level)
        - other particles maximizes distances between themselves.
4) Solve Fermion-flow and (anti)particle type [self.solve_line_direction]
    the way to solve the fermion-flow is basic and fail in general for
    majorana fermion. The basic idea is "particles are going timelike".
    This is sufficient in all cases but T-channel particles and Loop particles
    which are solve separately.

Nested Classes [hide private]

Inherited from FeynmanDiagram: FeynamDiagramError

Instance Methods [hide private]
 
__init__(self, diagram, fdstructures, model, opt=None)
Store the information concerning this diagram.
source code
 
load_diagram(self, contract=True)
Define all the object for the Feynman Diagram Drawing (Vertex and Line) following the data include in 'self.diagram' 'contract' defines if we contract to one point the non propagating line.
source code
 
find_vertex_at_level(self, previous_level, level)
Returns a list of vertex such that all those vertex are one level after the level of vertexlist and sorted in such way that the list start with vertex connected with the first vertex of 'vertexlist' then those connected to the second and so on.
source code
 
find_vertex_position_at_level(self, vertexlist, level, direction=1)
Finds the vertex position for the particle at 'level' given the ordering at previous level given by the vertexlist.
source code
 
find_all_loop_vertex(self, init_loop)
Returns all the vertex associate at a given level.
source code
 
find_next_loop_channel_vertex(self, loop_vertex, forbiden=[])
Returns the next loop_vertex.
source code
 
fuse_line(self, line1, line2)
make two lines to fuse in a single one.
source code
 
define_level(self)
define level in a recursive way
source code
 
need_to_flip(self)
check if the T-channel of a loop diagram need to be flipped.
source code
 
loop_flip(self)
switch t-channel information for the particle in the loop
source code
 
remove_t_channel(self)
Remove T-channel information
source code
 
def_next_level_from(self, vertex, direction=1)
Define level for adjacent vertex.
source code

Inherited from FeynmanDiagram: __eq__, adjust_position, assign_pos, deal_last_line, define_vertex_at_border, find_initial_vertex_position, find_leg_id, find_leg_id2, find_leg_id3, find_next_t_channel_vertex, find_t_channel_vertex, find_vertex_position_tchannel, load_leg, load_vertex, main, solve_line_direction

Inherited from object: __delattr__, __format__, __getattribute__, __hash__, __new__, __reduce__, __reduce_ex__, __repr__, __setattr__, __sizeof__, __str__, __subclasshook__

Class Variables [hide private]

Inherited from FeynmanDiagram: fake_vertex

Properties [hide private]

Inherited from object: __class__

Method Details [hide private]

__init__(self, diagram, fdstructures, model, opt=None)
(Constructor)

source code 

Store the information concerning this diagram. This routines didn't perform any action at all. diagram: The diagram object to draw model: The model associate to the diagram opt: A DrawingOpt instance with all options for drawing the diagram. fdstructures: list of structure that might be connected to the loop.

Overrides: object.__init__

load_diagram(self, contract=True)

source code 

Define all the object for the Feynman Diagram Drawing (Vertex and Line) following the data include in 'self.diagram' 'contract' defines if we contract to one point the non propagating line. Compare to usual load we glue the cutted propagator of the Loop.

Overrides: FeynmanDiagram.load_diagram

find_vertex_at_level(self, previous_level, level)

source code 

Returns a list of vertex such that all those vertex are one level after the level of vertexlist and sorted in such way that the list start with vertex connected with the first vertex of 'vertexlist' then those connected to the second and so on.

Overrides: FeynmanDiagram.find_vertex_at_level

find_vertex_position_at_level(self, vertexlist, level, direction=1)

source code 

Finds the vertex position for the particle at 'level' given the ordering at previous level given by the vertexlist. if direction !=0 pass in auto-recursive mode.

Overrides: FeynmanDiagram.find_vertex_position_at_level

find_all_loop_vertex(self, init_loop)

source code 

Returns all the vertex associate at a given level. returns in a logical ordinate way starting at init_loop

find_next_loop_channel_vertex(self, loop_vertex, forbiden=[])

source code 

Returns the next loop_vertex. i.e. the vertex following loop_vertex.

fuse_line(self, line1, line2)

source code 

make two lines to fuse in a single one. The final line will connect the two begin.

define_level(self)

source code 

define level in a recursive way

Overrides: FeynmanDiagram.define_level

need_to_flip(self)

source code 

check if the T-channel of a loop diagram need to be flipped. This move from left to right the external particles linked to the loop.

remove_t_channel(self)

source code 

Remove T-channel information

Overrides: FeynmanDiagram.remove_t_channel

def_next_level_from(self, vertex, direction=1)

source code 
Define level for adjacent vertex.
If those vertex is already defined do nothing
Otherwise define as level+1 (at level 1 if T-channel)

Special case for loop: 
1) Loop are on two level max. so this saturates the level 
2) If a branch starts from a Loop T-channel pass in negative number
   This is set by direction
3) Treat T-channel first to avoid over-saturation of level 2
This routine defines also self.max_level and self.min_level

This routine is foreseen for an auto-recursive mode. So as soon as a 
vertex have his level defined. We launch this routine for this vertex.

Overrides: FeynmanDiagram.def_next_level_from