Page MenuHomeHEPForge

No OneTemporary

diff --git a/doc/developer_manual/tensor.tex b/doc/developer_manual/tensor.tex
index 0806e2c..31404d3 100644
--- a/doc/developer_manual/tensor.tex
+++ b/doc/developer_manual/tensor.tex
@@ -1,99 +1,98 @@
\section{Tensor Class}
\label{sec:tensor}
In the following section we detail the implementation and user
interface to the tensor class used in the W+Jet subleading
currents. The aim is to convert all currents to this class.
\subsection{Template Class}
\label{sec:template}
-The Tensor class is a template class. This means that it is declared
-as $Tensor \langle N, D \rangle$, with all values of $N$, the rank of
-the tensor, and $D$ the dimension of the tensor filled in when
-called. This means that this class breaks the mould and to keep the
-header file clean, an extra header, \texttt{include/HEJ/detail/Tensor\_impl.hh},
-has been created which includes the implementation necessary for a
-template class.
+The Tensor class is a template class. This means that it is declared as
+\lstinline!Tensor <N>!, with $N$, the rank of the tensor, specified when called.
+This means that this class breaks the mould and to keep the header file clean,
+an extra header, \texttt{include/HEJ/detail/Tensor\_impl.hh}, has been created
+which includes the implementation necessary for a template class.
This grants us extra flexibility and ensures we do not have to create
(and then maintain) multiple functions for different rank tensors,
except in a few distinct cases.
\subsection{Creating a Tensor}
-\label{createTensor}
+\label{sec:createTensor}
The tensor class has several constructors and there are a few options
open to prospective users. Firstly, if one has an old HEJ \lstinline!CCurrent! they
simply wish to re-represent as a \lstinline!Tensor<1>!, it is
possible to simply call \lstinline!Construct1Tensor(CCurrent j)!. One
can also construct a Tensor class object with the use of a
\lstinline!CLHEP::HepLorentzVector! with a similar
syntax.
One can also create a Tensor from scratch. One can calculate a
standard \HEJ extremal quark current, $\langle p_1 | \mu | p_a \rangle$,
where $p_a$ is the incoming momenta and $p_1$ the outgoing by the
command: \lstinline!TCurrent(p1, h1, pa, ha)!, where \lstinline!h1! and \lstinline!ha! are the
helicities of the particles \lstinline!p1! and \lstinline!pa!
respectively. The order in which these particles must be supplied to
this function is opposite to fermion flow (as with Feynman rules). So,
if you wish to calculate the same current but for an anti-quark you simply
need to swap the order of arguments.
The light-cone momenta of those supplied in the arguments is checked
to ensure that the correct incoming/outgoing labels are used for the
particles, so there is no need for one to worry over the use of
\lstinline!joi()! vs \lstinline!jio()! as in previous implementations of
currents in \HEJ.
Where this class sets itself apart from previous implementations comes
-from it being a template class, as explained in sec:
-\ref{sec:template}. We can deal with much higher rank tensors with
+from it being a template class, as explained in section~\ref{sec:template}.
+We can deal with much higher rank tensors with
relative ease. One can construct $\langle p_1 | \mu \nu \rho| p_a \rangle$
with no more effort than before, simply calling
\lstinline!T3Current(p1, h1, pa, ha)!. A similar result can be
obtained with \lstinline!T5Current(p1, h1, pa, ha)!, which gives the
rank 5 version of this current.
\subsection{Using the Tensor Class}
\label{sec:UseTensor}
There are several pre-existing Tensor class objects within HEJ, for
example, \lstinline!eps(HLV k, HLV ref, bool pol)! will give you the
polarisation tensor for a gluon with momenta \lstinline!k!, reference
momentum \lstinline!ref! and polarisation \lstinline!pol!. One can
contract Tensors together with the use of the member function
Contract. The simplest \HEJ current can be calculated with the
following snippet:
\begin{lstlisting}[language=c++,caption={}]
Tensor<1> j1a = TCurrent(p1,h1,pa,ha);
Tensor<1> j4b = TCurrent(p4,h4,pb,hb);
COM 2jFKL = j1a.contract(j4b,1).at(0);
\end{lstlisting}
-Where we have used \lstinline!Tensor::contract(Tensor<1> T, int i)!,
-which contracts Tensor T with index i of the Tensor this member
-function was called with. Notice that the contracted indices begin at
-1. Also, that to access the value after contraction to a
-\lstinline!Tensor<0>! one has to use \lstinline!Tensor::at(i)!.
+Where we have used \lstinline!Tensor::contract(Tensor<1> T, int i)!, which
+contracts Tensor \lstinline!T! with index \lstinline!i! of the Tensor this
+member function was called with. Notice that the contracted indices begin at
+1\todo{why? I would prefer starting at 0 - MH}. Also, that to access the value
+after contraction to a \lstinline!Tensor<0>! one has to use
+\lstinline!Tensor::at(i)!.
One can contract a tensor of rank N with any tensor of rank
1. Contractions of tensors of higher ranks have not been implemented
at this stage.
-Notice this gives a lot of flexibility to calculate some very complex
-currents and easily contract them with others in the \HEJ
-formalism. For example, one can compute a Central-qqx matrix element
-with a W boson emission from the Central-qqx vertex with a single
-object that can then be contracted with external currents with ease.
+Notice this gives a lot of flexibility to calculate some very complex currents
+and easily contract them with others in the \HEJ formalism. For example, one can
+compute a Central-q$\bar{\text{q}}$ matrix element with a W boson emission from
+the Central-q$\bar{\text{q}}$ vertex with a single object that can then be
+contracted with external currents with ease.
+
+The Tensor class was implemented during the development of the W+Jets subleading
+processes (due to a need to easily construct more complex currents). This means
+that currently it is only used in the W+Jets subleading processes. It was also
+used to reimplement the pure jet central q$\bar{\text{q}}$ vertex, so once the
+central q$\bar{\text{q}}$ subleading process is implemented in the pure jets
+case fully, it will also be used there. The aim is for all processes to be moved
+over to using this Tensor class.
-The Tensor class was implemented during the development of the W+Jets
-subleading processes (due to a need to easily construct more complex
-currents). This means that currently it is only used in the W+Jets
-subleading processes. It was also used to reimplement the pure jet
-central qqx vertex, so once the central qqx subleading process is
-implemented in the pure jets case fully, it will also be used
-there. The aim is for all processes to be moved over to using this
-Tensor class.
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "developer_manual"
%%% End:

File Metadata

Mime Type
text/x-diff
Expires
Sat, Dec 21, 6:23 PM (3 h, 54 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
4023783
Default Alt Text
(6 KB)

Event Timeline