1
#include "Spacetime/SpecialOperators.h"
2
#include "Spacetime/LorentzTransformation.h"
8
inline BasicSpinor<T>::BasicSpinor():Eigen::Vector4cd(0,0,0,0) {}
11
inline BasicSpinor<T>::BasicSpinor(const Spinor<2> & s, double mass) {
12
double sqrtM=std::sqrt(mass);
13
static std::complex<double> I(0,1);
19
// Apply charge conjugation:
20
using namespace SpecialOperators;
21
Spinor<2>sp=sqrtM*I*sigma2*s.conjugate();
26
throw std::runtime_error("DiracSpinor: illegal spinor type");
31
inline BasicSpinor<T>::BasicSpinor(const Spinor<2> & s, const FourVector & p) {
33
using namespace SpecialOperators;
34
Eigen::Matrix2cd SDotP=Sigma::dot(p), SBarDotP=SigmaBar::dot(p);
35
Eigen::ComplexEigenSolver<Eigen::Matrix2cd> sol(SDotP),solBar(SBarDotP);
36
Eigen::Matrix2cd A=sol.eigenvectors(), ABar=solBar.eigenvectors();
37
Eigen::Vector2cd D=sol.eigenvalues(), DBar=solBar.eigenvalues();
38
Eigen::Matrix2cd sqrtD=Eigen::Matrix2cd::Zero(), sqrtDBar=Eigen::Matrix2cd::Zero();
39
for (int e=0;e<2;e++) {
40
sqrtD(e,e)=std::sqrt(D(e));
41
sqrtDBar(e,e)=std::sqrt(DBar(e));
43
Eigen::Matrix2cd R=A*sqrtD*A.inverse(), RBar=ABar*sqrtDBar*ABar.inverse();
49
// Apply charge conjugation:
50
using namespace SpecialOperators;
55
throw std::runtime_error("DiracSpinor: illegal spinor type");
60
inline BasicSpinor<T>::BasicSpinor(const WeylSpinor::Left & s){
61
using namespace SpecialOperators;
63
head(2)=std::sqrt(2.0)*s;
64
tail(2)=Eigen::Vector2cd::Zero();
67
Spinor<2>sp=I*sigma2*s.conjugate();
68
tail(2)=std::sqrt(2.0)*sp;
69
head(2)=Eigen::Vector2cd::Zero();
72
throw std::runtime_error("DiracSpinor: illegal spinor type");
78
inline BasicSpinor<T>::BasicSpinor(const WeylSpinor::Right & s) {
79
using namespace SpecialOperators;
81
head(2)=Eigen::Vector2cd::Zero();
82
tail(2)=std::sqrt(2.0)*s;
85
Spinor<2>sp=I*sigma2*s.conjugate();
86
tail(2)=Eigen::Vector2cd::Zero();
87
head(2)=-std::sqrt(2.0)*sp;
90
throw std::runtime_error("DiracSpinor: illegal spinor type");
95
template<typename Derived>
96
inline BasicSpinor<T>::BasicSpinor(const Eigen::MatrixBase<Derived>& other) : Eigen::Vector4cd(other)
100
template<typename Derived>
101
inline BasicSpinor<T> & BasicSpinor<T>::operator= (const Eigen::MatrixBase <Derived>& other)
103
this->Eigen::Vector4cd::operator=(other);
108
Bar::Bar():Eigen::RowVector4cd(0,0,0,0) {}
111
Bar::Bar(const std::complex<double> & s0,
112
const std::complex<double> & s1,
113
const std::complex<double> & s2,
114
const std::complex<double> & s3
116
Eigen::RowVector4cd(s0,s1,s2,s3)
119
template<typename Derived>
120
inline Bar::Bar(const Eigen::MatrixBase<Derived>& other) : Eigen::RowVector4cd(other)
123
template<typename Derived>
124
inline Bar & Bar::operator= (const Eigen::MatrixBase <Derived>& other)
126
this->Eigen::RowVector4cd::operator=(other);
130
template<typename Derived>
131
inline Any::Any(const Eigen::MatrixBase<Derived>& other) : Eigen::Vector4cd(other)
134
template<typename Derived>
135
inline Any & Any::operator= (const Eigen::MatrixBase <Derived>& other)
137
this->Eigen::Vector4cd::operator=(other);