thepeg is hosted by Hepforge, IPPP Durham
ThePEG 2.3.0
ThePEG::Helicity::LorentzSpinor< Value > Class Template Reference

The LorentzSpinor class is designed to store a spinor. More...

#include <LorentzSpinor.h>

Inheritance diagram for ThePEG::Helicity::LorentzSpinor< Value >:

Public Member Functions

Standard constructors.
 LorentzSpinor (SpinorType t=SpinorType::unknown)
 Default zero constructor, optionally specifying t, the type.
 
 LorentzSpinor (complex< Value > a, complex< Value > b, complex< Value > c, complex< Value > d, SpinorType s=SpinorType::unknown)
 Constructor with complex numbers specifying the components, optionally specifying s, the type.
 
template<typename U >
 LorentzSpinor (const LorentzSpinor< U > &other)
 
Access the components.
complex< Value > operator[] (int i) const
 Subscript operator to return spinor components.
 
complex< Value > operator() (int i) const
 Subscript operator to return spinor components.
 
complex< Value > & operator() (int i)
 Set components by index.
 
complex< Value > & operator[] (int i)
 Set components by index.
 
complex< Value > s1 () const
 Get first component.
 
complex< Value > s2 () const
 Get second component.
 
complex< Value > s3 () const
 Get third component.
 
complex< Value > s4 () const
 Get fourth component.
 
void setS1 (complex< Value > in)
 Set first component.
 
void setS2 (complex< Value > in)
 Set second component.
 
void setS3 (complex< Value > in)
 Set third component.
 
void setS4 (complex< Value > in)
 Set fourth component.
 
Mathematical assignment operators.
template<typename ValueB >
LorentzSpinor< Value > & operator+= (const LorentzSpinor< ValueB > &a)
 
template<typename ValueB >
LorentzSpinor< Value > & operator-= (const LorentzSpinor< ValueB > &a)
 
LorentzSpinor< Value > & operator*= (double a)
 
LorentzSpinor< Value > & operator/= (double a)
 
Transformations.
LorentzSpinorBar< Value > bar () const
 Return the barred spinor.
 
LorentzSpinor conjugate () const
 Return the conjugated spinor \(u_c=C\bar{u}^T\).
 
LorentzSpinorboost (double, double, double)
 Standard Lorentz boost specifying the components of the beta vector.
 
LorentzSpinorboost (const Boost &)
 Standard Lorentz boost specifying the beta vector.
 
LorentzSpinortransform (const SpinHalfLorentzRotation &)
 General Lorentz transformation.
 
LorentzSpinortransform (const LorentzRotation &r)
 General Lorentz transformation.
 
Functions related to type.
SpinorType Type () const
 Return the type of the spinor.
 
Functions to apply the projection operator
template<typename ValueB >
auto projectionOperator (const LorentzVector< ValueB > &p, const ValueB &m) const -> LorentzSpinor< decltype(m *Value())>
 Apply \(p\!\!\!\!\!\not\,\,\,+m\).
 
LorentzSpinor helicityProjectionOperator (const Complex &gL, const Complex &gR) const
 Apply \(g^LP_L+g^RP_R\).
 
Functions to calculate certain currents.
template<typename ValueB >
auto slash (const LorentzVector< ValueB > &p) const -> LorentzSpinor< decltype(p.t() *Value())>
 Apply \(p\!\!\!\!\!\not\).
 
template<typename ValueB >
auto slash (const LorentzVector< complex< ValueB > > &p) const -> LorentzSpinor< decltype(ValueB() *Value())>
 Apply \(p\!\!\!\!\!\not\).
 
template<typename ValueB >
auto leftCurrent (const LorentzSpinorBar< ValueB > &fb) const -> LorentzVector< decltype(fb.s3() *this->s2())>
 Calculate the left-handed current \(\bar{f}\gamma^\mu P_Lf\).
 
template<typename ValueB >
auto rightCurrent (const LorentzSpinorBar< ValueB > &fb) const -> LorentzVector< decltype(fb.s1() *this->s4())>
 Calculate the right-handed current \(\bar{f}\gamma^\mu P_Rf\).
 
template<typename ValueB >
auto vectorCurrent (const LorentzSpinorBar< ValueB > &fb) const -> LorentzVector< decltype(fb.s1() *this->s4())>
 Calculate the vector current \(\bar{f}\gamma^\mu f\).
 
template<typename ValueB >
auto generalCurrent (const LorentzSpinorBar< ValueB > &fb, Complex left, Complex right) const -> LorentzVector< decltype(fb.s3() *this->s2())>
 Calculate a general current with arbitary left and right couplings, i.e.
 

Functions to calculate certain scalars.

SpinorType _type
 Type of spinor.
 
std::array< complex< Value >, 4 > _spin
 Storage of the components.
 
template<typename ValueB >
auto leftScalar (const LorentzSpinorBar< ValueB > &fb) const -> decltype(fb.s1() *this->s1())
 Calculate the left-handed scalar \(\bar{f}P_Lf\).
 
template<typename ValueB >
auto rightScalar (const LorentzSpinorBar< ValueB > &fb) const -> decltype(fb.s3() *this->s3())
 Calculate the right-handed scalar \(\bar{f}P_Rf\).
 
template<typename ValueB >
auto scalar (const LorentzSpinorBar< ValueB > &fb) const -> decltype(fb.s1() *this->s1())
 Calculate the scalar \(\bar{f}f\).
 
template<typename ValueB >
auto pseudoScalar (const LorentzSpinorBar< ValueB > &fb) const -> decltype(fb.s1() *this->s1())
 Calculate the pseudoscalar \(\bar{f}\gamma_5f\).
 
template<typename ValueB >
auto generalScalar (const LorentzSpinorBar< ValueB > &fb, Complex left, Complex right) const -> decltype(left *fb.s1() *this->s1())
 Calculate a general scalar product with arbitary left and right couplings, i.e.
 
template<typename ValueB >
auto sigma (const LorentzSpinorBar< ValueB > &fb) const -> LorentzTensor< decltype(ValueB() *Value())>
 Calculate the product with \(\sigma^{\mu\nu}\), i.e.
 

Detailed Description

template<typename Value>
class ThePEG::Helicity::LorentzSpinor< Value >

The LorentzSpinor class is designed to store a spinor.

In addition to storing the components of the spinor, information is stored on the representation of the type of spinor, for example u or v type.

At the moment only one choice of the Dirac matrix representation is supported. For high-energy calculations the choice made by the HELAS collaboration is more efficient for numerical calculations. In this representation

\[ \gamma_{i=1,2,3}=\left(\begin{array}{cc} 0 & \sigma_i \\ -\sigma_i & 0 \end{array}\right) \quad \gamma_0=\left(\begin{array}{cc} 0 & 1 \\ 1 & 0 \end{array}\right) \quad \gamma_5=\left(\begin{array}{cc} -1 & 0 \\ 0 & 1 \end{array}\right) \]

The type of the spinor is also stored using the SpinorType enumeration. There are three types supported SpinorType::u, SpinorType::v, SpinorType::unknown. This information is intended mainly for use in the case of Majorana particles where matrix elements can be calculated with either u or v type spinors and knowledge of which was used will be needed in order to give the correct correlations. The SpinorType::unknowne is intended for cases where either the spinor for an off-shell line in a matrix element calculation or the information is genuinely unknown.

The LorentzSpinorBar class is also provided to store the barred spinor.

See also
LorentzSpinorBar
Author
Peter Richardson

Definition at line 71 of file LorentzSpinor.h.

Constructor & Destructor Documentation

◆ LorentzSpinor() [1/3]

template<typename Value >
ThePEG::Helicity::LorentzSpinor< Value >::LorentzSpinor ( SpinorType  t = SpinorType::unknown)
inline

Default zero constructor, optionally specifying t, the type.

Definition at line 79 of file LorentzSpinor.h.

◆ LorentzSpinor() [2/3]

template<typename Value >
ThePEG::Helicity::LorentzSpinor< Value >::LorentzSpinor ( complex< Value >  a,
complex< Value >  b,
complex< Value >  c,
complex< Value >  d,
SpinorType  s = SpinorType::unknown 
)
inline

Constructor with complex numbers specifying the components, optionally specifying s, the type.

Definition at line 85 of file LorentzSpinor.h.

◆ LorentzSpinor() [3/3]

template<typename Value >
template<typename U >
ThePEG::Helicity::LorentzSpinor< Value >::LorentzSpinor ( const LorentzSpinor< U > &  other)
inline

Definition at line 91 of file LorentzSpinor.h.

Member Function Documentation

◆ conjugate()

template<typename Value >
LorentzSpinor ThePEG::Helicity::LorentzSpinor< Value >::conjugate ( ) const

Return the conjugated spinor \(u_c=C\bar{u}^T\).

This operation transforms u-spinors to v-spinors and vice-versa and is required when dealing with majorana particles.

Referenced by ThePEG::Helicity::SpinorWaveFunction::conjugate().

◆ generalCurrent()

template<typename Value >
template<typename ValueB >
auto ThePEG::Helicity::LorentzSpinor< Value >::generalCurrent ( const LorentzSpinorBar< ValueB > &  fb,
Complex  left,
Complex  right 
) const -> LorentzVector<decltype(fb.s3()*this->s2())>
inline

Calculate a general current with arbitary left and right couplings, i.e.

\(\bar{f}\gamma^\mu(c_lP_L+c_RP_R)f\)

Parameters
fbThe barred spinor.
leftThe left coupling, \(c_L\).
rightThe right coupling, \(c_R\).

Definition at line 392 of file LorentzSpinor.h.

References ThePEG::left(), and ThePEG::right().

◆ generalScalar()

template<typename Value >
template<typename ValueB >
auto ThePEG::Helicity::LorentzSpinor< Value >::generalScalar ( const LorentzSpinorBar< ValueB > &  fb,
Complex  left,
Complex  right 
) const -> decltype(left*fb.s1()*this->s1())
inline

Calculate a general scalar product with arbitary left and right couplings, i.e.

\(\bar{f}c_lP_L+c_RP_Rf\)

Parameters
fbThe barred spinor.
leftThe left coupling, \(c_L\).
rightThe right coupling, \(c_R\).

Definition at line 471 of file LorentzSpinor.h.

References ThePEG::left(), and ThePEG::right().

◆ helicityProjectionOperator()

template<typename Value >
LorentzSpinor ThePEG::Helicity::LorentzSpinor< Value >::helicityProjectionOperator ( const Complex gL,
const Complex gR 
) const
inline

◆ leftCurrent()

template<typename Value >
template<typename ValueB >
auto ThePEG::Helicity::LorentzSpinor< Value >::leftCurrent ( const LorentzSpinorBar< ValueB > &  fb) const -> LorentzVector<decltype(fb.s3()*this->s2())>
inline

Calculate the left-handed current \(\bar{f}\gamma^\mu P_Lf\).

Parameters
fbThe barred spinor.

Definition at line 327 of file LorentzSpinor.h.

◆ leftScalar()

template<typename Value >
template<typename ValueB >
auto ThePEG::Helicity::LorentzSpinor< Value >::leftScalar ( const LorentzSpinorBar< ValueB > &  fb) const -> decltype(fb.s1()*this->s1())
inline

Calculate the left-handed scalar \(\bar{f}P_Lf\).

Parameters
fbThe barred spinor.

Definition at line 422 of file LorentzSpinor.h.

◆ operator()() [1/2]

template<typename Value >
complex< Value > & ThePEG::Helicity::LorentzSpinor< Value >::operator() ( int  i)
inline

Set components by index.

Definition at line 115 of file LorentzSpinor.h.

◆ operator()() [2/2]

template<typename Value >
complex< Value > ThePEG::Helicity::LorentzSpinor< Value >::operator() ( int  i) const
inline

Subscript operator to return spinor components.

Definition at line 107 of file LorentzSpinor.h.

◆ operator*=()

template<typename Value >
LorentzSpinor< Value > & ThePEG::Helicity::LorentzSpinor< Value >::operator*= ( double  a)
inline

Definition at line 183 of file LorentzSpinor.h.

◆ operator+=()

template<typename Value >
template<typename ValueB >
LorentzSpinor< Value > & ThePEG::Helicity::LorentzSpinor< Value >::operator+= ( const LorentzSpinor< ValueB > &  a)
inline

Definition at line 172 of file LorentzSpinor.h.

◆ operator-=()

template<typename Value >
template<typename ValueB >
LorentzSpinor< Value > & ThePEG::Helicity::LorentzSpinor< Value >::operator-= ( const LorentzSpinor< ValueB > &  a)
inline

Definition at line 178 of file LorentzSpinor.h.

◆ operator/=()

template<typename Value >
LorentzSpinor< Value > & ThePEG::Helicity::LorentzSpinor< Value >::operator/= ( double  a)
inline

Definition at line 188 of file LorentzSpinor.h.

◆ operator[]() [1/2]

template<typename Value >
complex< Value > & ThePEG::Helicity::LorentzSpinor< Value >::operator[] ( int  i)
inline

Set components by index.

Definition at line 123 of file LorentzSpinor.h.

◆ operator[]() [2/2]

template<typename Value >
complex< Value > ThePEG::Helicity::LorentzSpinor< Value >::operator[] ( int  i) const
inline

Subscript operator to return spinor components.

Definition at line 99 of file LorentzSpinor.h.

◆ projectionOperator()

template<typename Value >
template<typename ValueB >
auto ThePEG::Helicity::LorentzSpinor< Value >::projectionOperator ( const LorentzVector< ValueB > &  p,
const ValueB &  m 
) const -> LorentzSpinor<decltype(m*Value())>
inline

Apply \(p\!\!\!\!\!\not\,\,\,+m\).

Definition at line 248 of file LorentzSpinor.h.

◆ pseudoScalar()

template<typename Value >
template<typename ValueB >
auto ThePEG::Helicity::LorentzSpinor< Value >::pseudoScalar ( const LorentzSpinorBar< ValueB > &  fb) const -> decltype(fb.s1()*this->s1())
inline

Calculate the pseudoscalar \(\bar{f}\gamma_5f\).

Parameters
fbThe barred spinor.

Definition at line 456 of file LorentzSpinor.h.

◆ rightCurrent()

template<typename Value >
template<typename ValueB >
auto ThePEG::Helicity::LorentzSpinor< Value >::rightCurrent ( const LorentzSpinorBar< ValueB > &  fb) const -> LorentzVector<decltype(fb.s1()*this->s4())>
inline

Calculate the right-handed current \(\bar{f}\gamma^\mu P_Rf\).

Parameters
fbThe barred spinor.

Definition at line 347 of file LorentzSpinor.h.

◆ rightScalar()

template<typename Value >
template<typename ValueB >
auto ThePEG::Helicity::LorentzSpinor< Value >::rightScalar ( const LorentzSpinorBar< ValueB > &  fb) const -> decltype(fb.s3()*this->s3())
inline

Calculate the right-handed scalar \(\bar{f}P_Rf\).

Parameters
fbThe barred spinor.

Definition at line 433 of file LorentzSpinor.h.

◆ s1()

template<typename Value >
complex< Value > ThePEG::Helicity::LorentzSpinor< Value >::s1 ( ) const
inline

Get first component.

Definition at line 131 of file LorentzSpinor.h.

Referenced by ThePEG::Helicity::SpinorWaveFunction::s1().

◆ s2()

template<typename Value >
complex< Value > ThePEG::Helicity::LorentzSpinor< Value >::s2 ( ) const
inline

Get second component.

Definition at line 136 of file LorentzSpinor.h.

Referenced by ThePEG::Helicity::SpinorWaveFunction::s2().

◆ s3()

template<typename Value >
complex< Value > ThePEG::Helicity::LorentzSpinor< Value >::s3 ( ) const
inline

Get third component.

Definition at line 141 of file LorentzSpinor.h.

Referenced by ThePEG::Helicity::SpinorWaveFunction::s3().

◆ s4()

template<typename Value >
complex< Value > ThePEG::Helicity::LorentzSpinor< Value >::s4 ( ) const
inline

Get fourth component.

Definition at line 146 of file LorentzSpinor.h.

Referenced by ThePEG::Helicity::SpinorWaveFunction::s4().

◆ scalar()

template<typename Value >
template<typename ValueB >
auto ThePEG::Helicity::LorentzSpinor< Value >::scalar ( const LorentzSpinorBar< ValueB > &  fb) const -> decltype(fb.s1()*this->s1())
inline

Calculate the scalar \(\bar{f}f\).

Parameters
fbThe barred spinor.

Definition at line 444 of file LorentzSpinor.h.

◆ setS1()

template<typename Value >
void ThePEG::Helicity::LorentzSpinor< Value >::setS1 ( complex< Value >  in)
inline

Set first component.

Definition at line 151 of file LorentzSpinor.h.

Referenced by ThePEG::Helicity::LorentzSpinor< Value >::helicityProjectionOperator().

◆ setS2()

template<typename Value >
void ThePEG::Helicity::LorentzSpinor< Value >::setS2 ( complex< Value >  in)
inline

Set second component.

Definition at line 156 of file LorentzSpinor.h.

Referenced by ThePEG::Helicity::LorentzSpinor< Value >::helicityProjectionOperator().

◆ setS3()

template<typename Value >
void ThePEG::Helicity::LorentzSpinor< Value >::setS3 ( complex< Value >  in)
inline

Set third component.

Definition at line 161 of file LorentzSpinor.h.

Referenced by ThePEG::Helicity::LorentzSpinor< Value >::helicityProjectionOperator().

◆ setS4()

template<typename Value >
void ThePEG::Helicity::LorentzSpinor< Value >::setS4 ( complex< Value >  in)
inline

Set fourth component.

Definition at line 166 of file LorentzSpinor.h.

Referenced by ThePEG::Helicity::LorentzSpinor< Value >::helicityProjectionOperator().

◆ sigma()

template<typename Value >
template<typename ValueB >
auto ThePEG::Helicity::LorentzSpinor< Value >::sigma ( const LorentzSpinorBar< ValueB > &  fb) const -> LorentzTensor<decltype(ValueB()*Value())>
inline

Calculate the product with \(\sigma^{\mu\nu}\), i.e.

\(\bar{f}\sigma^{\mu\nu}f\)

Definition at line 485 of file LorentzSpinor.h.

References ThePEG::ZERO.

◆ slash() [1/2]

template<typename Value >
template<typename ValueB >
auto ThePEG::Helicity::LorentzSpinor< Value >::slash ( const LorentzVector< complex< ValueB > > &  p) const -> LorentzSpinor<decltype(ValueB()*Value())>
inline

Apply \(p\!\!\!\!\!\not\).

Definition at line 306 of file LorentzSpinor.h.

◆ slash() [2/2]

template<typename Value >
template<typename ValueB >
auto ThePEG::Helicity::LorentzSpinor< Value >::slash ( const LorentzVector< ValueB > &  p) const -> LorentzSpinor<decltype(p.t()*Value())>
inline

Apply \(p\!\!\!\!\!\not\).

Definition at line 286 of file LorentzSpinor.h.

◆ transform()

template<typename Value >
LorentzSpinor & ThePEG::Helicity::LorentzSpinor< Value >::transform ( const LorentzRotation r)
inline

General Lorentz transformation.

Definition at line 226 of file LorentzSpinor.h.

References ThePEG::LorentzRotation::half().

◆ Type()

template<typename Value >
SpinorType ThePEG::Helicity::LorentzSpinor< Value >::Type ( ) const
inline

Return the type of the spinor.

Definition at line 237 of file LorentzSpinor.h.

Referenced by ThePEG::Helicity::SpinorWaveFunction::dimensionedWf().

◆ vectorCurrent()

template<typename Value >
template<typename ValueB >
auto ThePEG::Helicity::LorentzSpinor< Value >::vectorCurrent ( const LorentzSpinorBar< ValueB > &  fb) const -> LorentzVector<decltype(fb.s1()*this->s4())>
inline

Calculate the vector current \(\bar{f}\gamma^\mu f\).

Parameters
fbThe barred spinor.

Definition at line 367 of file LorentzSpinor.h.

Member Data Documentation

◆ _spin

template<typename Value >
std::array<complex<Value>,4> ThePEG::Helicity::LorentzSpinor< Value >::_spin
private

Storage of the components.

Definition at line 524 of file LorentzSpinor.h.

◆ _type

template<typename Value >
SpinorType ThePEG::Helicity::LorentzSpinor< Value >::_type
private

Type of spinor.

Definition at line 519 of file LorentzSpinor.h.


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