Documentation of MARTY
A Modern ARtificial Theoretical phYsicist
Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | Protected Member Functions | Protected Attributes
mty::ConjugationInfo Class Reference

Class encapsulating necesarry data to place conjugation matrices in amplitudes when treating Majorana fermions. More...

#include <fermionFlow.h>

Public Types

enum  Type {
  Undefined,
  External,
  Internal
}
 Type of ConjugationInfo. More...
 
using FieldList = std::vector< mty::QuantumField const * >
 Quick definition of the data structure for a field list in this file.
 

Public Member Functions

 ConjugationInfo ()
 Constructs an empty ConjugationInfo. Will do nothing. More...
 
 ConjugationInfo (csl::Index const &t_A, bool t_conjugated)
 Constructs a ConjugationInfo for an external leg. More...
 
 ConjugationInfo (csl::Index const &t_A, csl::Index const &t_B, csl::Index const &t_preA, csl::Index const &t_postB)
 Constructs a ConjugationInfo for a part of a fermion chain. More...
 
 ~ConjugationInfo ()=default
 Default constructor.
 
 ConjugationInfo (ConjugationInfo const &)=default
 Default copy constructor. More...
 
 ConjugationInfo (ConjugationInfo &&)=default
 Default move constructor. More...
 
ConjugationInfooperator= (ConjugationInfo const &)=default
 Default copy assignement operator. More...
 
ConjugationInfooperator= (ConjugationInfo &&)=default
 Default move assignement operator. More...
 
Type getType () const
 Returns the type.
 
csl::Index getA () const
 Returns the first index of the ConjugationInfo.
 
csl::Index getB () const
 Returns the second index of the ConjugationInfo, has a meaning only for Internal ConjugationInfo.
 
csl::Index getPreA () const
 Returns the index before A in the chain, has a meaning only for Internal ConjugationInfo.
 
csl::Index getPostB () const
 Returns the index after B in the chain, has a meaning only for Internal ConjugationInfo.
 
bool getConjugated () const
 Returns the conjugation of the ConjugationInfo, has a meaning only for External ConjugationInfo.
 
void setInfo (csl::Index const &t_A, bool t_conjugated)
 Sets info for an external ConjugationInfo. See the corresponding constructor for more info. More...
 
void setInfo (csl::Index const &t_A, csl::Index const &t_B, csl::Index const &t_preA, csl::Index const &t_postB)
 Sets info for an internal ConjugationInfo. See the corresponding constructor for more info. More...
 
void apply (csl::Expr &expr, bool ruleMode, std::vector< FermionLine > const &lines) const
 Applies the conjugation on the underlying expression. More...
 

Static Public Member Functions

static ConjugationList resolveFermionLines (FieldList init, FieldList const &ruleOrder, bool ruleMode)
 Resolves all fermion lines in a set of fields. More...
 
static ConjugationList resolveFermionLines (FieldList const &init, std::vector< QuantumField > const &ruleOrder, bool ruleMode)
 Resolves all fermion lines in a set of fields. More...
 
static void simplify (ConjugationList &infoList, bool ruleMode)
 Simplifies a set of ConjugationInfo, merging the consecutive ones. More...
 
static void applyConjugation (ConjugationList infoList, csl::Expr &expr, bool ruleMode)
 

Static Public Attributes

static constexpr size_t maxFermionLines = 3
 Maximum number of fermion lines in a diagram. More...
 

Protected Member Functions

void insertInChain (csl::Expr &expr) const
 
void insertInChainForRule (csl::Expr &expr, std::vector< FermionLine > const &lines) const
 
void insertExternal (csl::Expr &expr) const
 

Protected Attributes

Type type
 Type of ConjugationInfo. Can be external (external leg) or internal (part of gamma-matrices chain).
 
csl::Index A
 First (or only for External type) index of the chain.
 
csl::Index B
 Second index of the chain, not valued for External ConjugationInfo.
 
csl::Index preA
 Index before A in the chain, not valued for External ConjugationInfo.
 
csl::Index postB
 Index after B in the chain, not valued for External ConjugationInfo.
 
bool conjugated
 Boolean for External ConjugationInfo, tells if the external leg is complex conjugated.
 

Detailed Description

Class encapsulating necesarry data to place conjugation matrices in amplitudes when treating Majorana fermions.

Member Enumeration Documentation

◆ Type

Type of ConjugationInfo.

Enumerator
Undefined 

Undefined ConjugationInfo.

External 

Conjugation of an external leg.

Internal 

Conjugation of a part of a gamma-matrices chain.

Constructor & Destructor Documentation

◆ ConjugationInfo() [1/5]

mty::ConjugationInfo::ConjugationInfo ( )

Constructs an empty ConjugationInfo. Will do nothing.

See also
setInfo()

◆ ConjugationInfo() [2/5]

mty::ConjugationInfo::ConjugationInfo ( csl::Index const &  t_A,
bool  t_conjugated 
)
explicit

Constructs a ConjugationInfo for an external leg.

Parameters
t_AIndex of the external leg to conjugate.
t_conjugatedBoolean that must be true if the external leg is initially complex conjugated.

◆ ConjugationInfo() [3/5]

mty::ConjugationInfo::ConjugationInfo ( csl::Index const &  t_A,
csl::Index const &  t_B,
csl::Index const &  t_preA,
csl::Index const &  t_postB 
)

Constructs a ConjugationInfo for a part of a fermion chain.

Parameters
t_AFirst index (to the left) of the fermion chain.
t_BSecond index (to the right) of the fermion chain.

◆ ConjugationInfo() [4/5]

mty::ConjugationInfo::ConjugationInfo ( ConjugationInfo const &  )
default

Default copy constructor.

Parameters
ConjugationInfoto copy.

◆ ConjugationInfo() [5/5]

mty::ConjugationInfo::ConjugationInfo ( ConjugationInfo &&  )
default

Default move constructor.

Parameters
ConjugationInfoto move.

Member Function Documentation

◆ apply()

void mty::ConjugationInfo::apply ( csl::Expr expr,
bool  ruleMode,
std::vector< FermionLine > const &  lines 
) const

Applies the conjugation on the underlying expression.

Inserts in the fermion chain (replacing indices carefully) the conjugation matrix (or matrices) in the right place. After those insertions, the C-matrix simplification should leave a clean and ordered fermion chain.

Parameters
exprExpression to modify.
ruleModeBoolean, true if Feynman rule calculation.
linesFermion lines in the diagram.

◆ operator=() [1/2]

ConjugationInfo& mty::ConjugationInfo::operator= ( ConjugationInfo const &  )
default

Default copy assignement operator.

Parameters
ConjugationInfoto copy.
Returns
A reference to the target of the copy.

◆ operator=() [2/2]

ConjugationInfo& mty::ConjugationInfo::operator= ( ConjugationInfo &&  )
default

Default move assignement operator.

Parameters
ConjugationInfoto move.
Returns
A reference to the target of the copy.

◆ resolveFermionLines() [1/2]

ConjugationList mty::ConjugationInfo::resolveFermionLines ( FieldList  init,
FieldList const &  ruleOrder,
bool  ruleMode 
)
static

Resolves all fermion lines in a set of fields.

This function is usefull when Majorana fermions come in amplitudes. Fermion flows must be defined for each fermion line (arbitrarily, see https://cds.cern.ch/record/240381/files/CM-P00063014.pdf) to write down the amplitude. Each propagator and vertex must be matched from the beginning to the end, and rules must then be applied to ensure that the fermion chain is continuous (no transposed gamma- matrix in the middle).

Parameters
initInitial set of fields in the Wick contraction.
ruleOrderOrder of fields in the Feynman rules.
Returns
A list of ConjugationInfo, telling where to apply the conjugation matrix to recover a clean fermion flow, and a sign coming from fermion ordering.

◆ resolveFermionLines() [2/2]

ConjugationList mty::ConjugationInfo::resolveFermionLines ( FieldList const &  init,
std::vector< QuantumField > const &  ruleOrder,
bool  ruleMode 
)
static

Resolves all fermion lines in a set of fields.

This function is just an overload to convert a vector of QuantumField (given by the class Graph) to a FieldList.

Parameters
initInitial set of fields in the Wick contraction.
ruleOrderOrder of fields in the Feynman rules.
Returns
A list of ConjugationInfo, telling where to apply the conjugation matrix to recover a clean fermion flow.

◆ setInfo() [1/2]

void mty::ConjugationInfo::setInfo ( csl::Index const &  t_A,
bool  t_conjugated 
)

Sets info for an external ConjugationInfo. See the corresponding constructor for more info.

Parameters
t_AIndex of the external leg
t_conjugatedConjugation of the external leg

◆ setInfo() [2/2]

void mty::ConjugationInfo::setInfo ( csl::Index const &  t_A,
csl::Index const &  t_B,
csl::Index const &  t_preA,
csl::Index const &  t_postB 
)

Sets info for an internal ConjugationInfo. See the corresponding constructor for more info.

Parameters
t_AFirst index of the chain
t_BSecond index of the chain

◆ simplify()

void mty::ConjugationInfo::simplify ( ConjugationList infoList,
bool  ruleMode 
)
static

Simplifies a set of ConjugationInfo, merging the consecutive ones.

This functions uses the fact that \( C^TC = 1. \) For a list of conjugation, consecutive ones are merged. For example,

\[ \left(C\Gamma _1 C^T\right)\cdot \left(C\Gamma _2C^T\right) = C\Gamma _1\Gamma _2C^T. \]

Parameters
infoVector of ConjugationInfo to simplify.
ruleModeBoolean, must be true if Feynman rule calculation.

Field Documentation

◆ maxFermionLines

constexpr size_t mty::ConjugationInfo::maxFermionLines = 3
static

Maximum number of fermion lines in a diagram.

This number is 3 because for now a diagram (that can be fully simplified in MARTY) cannot have 6 external legs (5 at most) and is at the 1-loop level. There can be two external fermionic lines, and one internal in the loop. If in the future MARTY is extended to more, this number may be incremented or left as it is, the consequence will only be an increase in execution time for the function followFermionLines (if not incremented). This number is the memory allocated the the return value. If there is more fermion lines, memory will have to be reallocated elsewhere with more space (implies deallocation, reallocation, copies etc).


The documentation for this class was generated from the following files: