Skip to content

Commit

Permalink
updated the manual
Browse files Browse the repository at this point in the history
  • Loading branch information
vermaseren committed Oct 3, 2018
1 parent 571c127 commit a53fd8f
Show file tree
Hide file tree
Showing 2 changed files with 184 additions and 0 deletions.
152 changes: 152 additions & 0 deletions doc/manual/diagrams.tex
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@

\chapter{Diagram generation}
\label{diagrams}

For an accurate calculation of particle reactions a good, fast and flexible
diagram generator is a necessity. It was noticed that the fastest available
generator is the one by Toshiaki Kaneko, which was constructed for the
Grace system. Hence he was asked whether he would be willing to provide a
version that could be implemented into Form, thereby making intermediate
files with diagrams superfluous. He gracefully accepted.

In the current version the diagram generator is not complete yet.
Effectively it only accepts one type of scalar particles, but one can have
any number of particles at the vertices. Hence it can be used as a fast
topology generator. Because all source code is present and has been
commented it will be possible to extend the user interface on demand.

The completion of the full diagram generator is planned for late-2018/
early-2019, depending on the availability of time. The source code of the
generator is in C++, which makes it rather accesible from Form and possibly
from other programs as well. For more information about that one should
contact Prof. Toshiaki Kaneko directly.

The current interface is rather simple, due to the fact that one can
generate only 'topologies'. First one needs two sets of vectors, one for
the momenta of the external particles and one for the momenta of internal
particles. The call is then with the function topologies\_ as in
\begin{verbatim}
Vectors Q1,Q2,p1,...,p8;
Set QQ:Q1,Q2;
Set PP:p1,...,p8;
#define LOOPS "2"
Local F = topologies_(`LOOPS',2,{3,},QQ,PP);
Print +f +s;
.end
F =
+ node_(0,-Q1)*node_(1,-Q2)*node_(2,Q1,-p1,-p2)*node_(3,Q2,p1,-p3)*
node_(4,p2,-p4,-p5)*node_(5,p3,p4,p5)
+ node_(0,-Q1)*node_(1,-Q2)*node_(2,Q1,-p1,-p2)*node_(3,p1,-p3,-p4)*
node_(4,p2,p3,-p5)*node_(5,Q2,p4,p5)
;
\end{verbatim}
Here the second parameter indicates the number of external legs, the third
parameter is a set that tells, in this case, that 3-point vertices are
allowed, QQ is the set of external momenta and PP is the set of internal
momenta. The function node\_ is a built-in function to indicate the
vertices.

If one would like to allow more types of vertices one may change
the third parameter:
\begin{verbatim}
Vectors Q1,Q2,p1,...,p8;
Set QQ:Q1,Q2;
Set PP:p1,...,p8;
#define LOOPS "2"
Local F = topologies_(`LOOPS',2,{3,4},QQ,PP);
Print +f +s;
.end
F =
+ node_(0,-Q1)*node_(1,-Q2)*node_(2,Q1,Q2,-p1,-p2)*node_(3,p1,p2,-p3,p3
)
+ node_(0,-Q1)*node_(1,-Q2)*node_(2,Q1,-p1,-p2)*node_(3,Q2,p1,-p3)*
node_(4,p2,p3,-p4,p4)
+ node_(0,-Q1)*node_(1,-Q2)*node_(2,Q1,-p1,-p2)*node_(3,Q2,p1,-p3)*
node_(4,p2,-p4,-p5)*node_(5,p3,p4,p5)
+ node_(0,-Q1)*node_(1,-Q2)*node_(2,Q1,-p1,-p2)*node_(3,Q2,-p3,-p4)*
node_(4,p1,p2,p3,p4)
+ node_(0,-Q1)*node_(1,-Q2)*node_(2,Q1,-p1,-p2)*node_(3,p1,-p3,-p4)*
node_(4,Q2,p2,p3,p4)
+ node_(0,-Q1)*node_(1,-Q2)*node_(2,Q1,-p1,-p2)*node_(3,p1,-p3,-p4)*
node_(4,p2,p3,-p5)*node_(5,Q2,p4,p5)
+ node_(0,-Q1)*node_(1,-Q2)*node_(2,Q1,-p1,-p2,-p3)*node_(3,Q2,p1,p2,p3
)
+ node_(0,-Q1)*node_(1,-Q2)*node_(2,-p1,-p2,-p3)*node_(3,Q2,p1,-p4)*
node_(4,Q1,p2,p3,p4)
+ node_(0,-Q1)*node_(1,-Q2)*node_(2,-p1,-p2,-p3)*node_(3,p1,p2,-p4)*
node_(4,Q1,Q2,p3,p4)
;
\end{verbatim}
and suddenly there are 9 topologies.

In the above configuration the program sees the external lines as
different. If there is however a symmetry between the two external lines of
a propagator-like diagram (as is the case with boson propagators) one can
indicate this by putting a minus sign in front of the number 2:
\begin{verbatim}
Vectors Q1,Q2,p1,...,p8;
Set QQ:Q1,Q2;
Set PP:p1,...,p8;
#define LOOPS "2"
Local F = topologies_(`LOOPS',-2,{3,4},QQ,PP);
Print +f +s;
.end
F =
+ node_(0,-Q1)*node_(1,-Q2)*node_(2,Q1,Q2,-p1,-p2)*node_(3,p1,p2,-p3,p3
)
+ node_(0,-Q1)*node_(1,-Q2)*node_(2,Q1,-p1,-p2)*node_(3,Q2,p1,-p3)*
node_(4,p2,p3,-p4,p4)
+ node_(0,-Q1)*node_(1,-Q2)*node_(2,Q1,-p1,-p2)*node_(3,Q2,p1,-p3)*
node_(4,p2,-p4,-p5)*node_(5,p3,p4,p5)
+ node_(0,-Q1)*node_(1,-Q2)*node_(2,Q1,-p1,-p2)*node_(3,Q2,-p3,-p4)*
node_(4,p1,p2,p3,p4)
+ node_(0,-Q1)*node_(1,-Q2)*node_(2,Q1,-p1,-p2)*node_(3,Q2,-p3,-p4)*
node_(4,p1,p3,-p5)*node_(5,p2,p4,p5)
+ node_(0,-Q1)*node_(1,-Q2)*node_(2,Q1,-p1,-p2)*node_(3,p1,-p3,-p4)*
node_(4,Q2,p2,p3,p4)
+ node_(0,-Q1)*node_(1,-Q2)*node_(2,Q1,-p1,-p2,-p3)*node_(3,Q2,p1,p2,p3
)
+ node_(0,-Q1)*node_(1,-Q2)*node_(2,-p1,-p2,-p3)*node_(3,p1,p2,-p4)*
node_(4,Q1,Q2,p3,p4)
;
\end{verbatim}
Now the program assumes this symmetry and one notices only 8 topologies
remaining.

In the case of the topologies\_ function there are no combinatorics
factors. This will of course be different with the future function
diagrams\_.

That this function is very fast can be seen when one generates all
topologies of a 6-loop propagator with only 3-point vertices:
\begin{verbatim}
Vectors Q1,Q2,p1,...,p17;
Set QQ:Q1,Q2;
Set PP:p1,...,p17;
#define LOOPS "6"
Local F = topologies_(`LOOPS',-2,{3,},QQ,PP);
.end
Time = 1.75 sec Generated terms = 2793
F Terms in output = 2793
Bytes used = 347156
\end{verbatim}
or without the symmetry
\begin{verbatim}
Vectors Q1,Q2,p1,...,p17;
Set QQ:Q1,Q2;
Set PP:p1,...,p17;
#define LOOPS "6"
Local F = topologies_(`LOOPS',2,{3,},QQ,PP);
.end
Time = 0.63 sec Generated terms = 4999
F Terms in output = 4999
Bytes used = 616180
\end{verbatim}
This is very much faster than the program that is used most widely.

To be continued.....
32 changes: 32 additions & 0 deletions doc/manual/functions.tex
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,14 @@ \section{denom\_}\index{denom\_}\index{function!denom\_}
argument. \verb:den(a+b): is printed as \verb:1/(a+b):.

%--#] denom_ :
%--#[ diagrams_ :
%
%\section{diagrams\_}\index{diagrams\_}\index{function!diagrams\_}
%\label{fundiagrams}
%\noindent For a description of this function, please see the section on
%diagrams~\ref{diagrams}.
%
%--#] diagrams_ :
%--#[ distrib_ :

\section{distrib\_}\index{distrib\_}\index{function!distrib\_}
Expand Down Expand Up @@ -315,6 +323,14 @@ \section{e\_}\index{e\_}\index{function!e\_}
rules (see \ref{substacontract}).

%--#] e_ :
%--#[ edge_ :
%
%\section{edge\_}\index{edge\_}\index{function!edge\_}
%\label{funedge}
%\noindent For a description of this function, please see the section on
%diagrams~\ref{diagrams}.
%
%--#] edge_ :
%--#[ exp_ :

\section{exp\_}\index{exp\_}\index{function!exp\_}
Expand Down Expand Up @@ -743,6 +759,14 @@ \section{nargs\_}\index{nargs\_}\index{function!nargs\_}
arguments that the function has.

%--#] nargs_ :
%--#[ node_ :

\section{node\_}\index{topologies\_}\index{function!node\_}
\label{funtonode}
\noindent For a description of this function, please see the section on
diagrams~\ref{diagrams}.

%--#] node_ :
%--#[ nterms_ :

\section{nterms\_}\index{nterms\_}\index{function!nterms\_}
Expand Down Expand Up @@ -1216,6 +1240,14 @@ \section{thetap\_}\index{thetap\_}\index{function!thetap\_}
nothing is done.

%--#] thetap_ :
%--#[ topologies_ :

\section{topologies\_}\index{topologies\_}\index{function!topologies\_}
\label{funtopologies}
\noindent For a description of this function, please see the section on
diagrams~\ref{diagrams}.

%--#] topologies_ :

%--#[ Reserved names :

Expand Down

0 comments on commit a53fd8f

Please sign in to comment.