thepeg
is hosted by
Hepforge
,
IPPP Durham
ThePEG
2.3.0
Helicity
WaveFunction
SpinorWaveFunction.h
1
// -*- C++ -*-
2
//
3
// SpinorWaveFunction.h is a part of ThePEG - Toolkit for HEP Event Generation
4
// Copyright (C) 2003-2019 Peter Richardson, Leif Lonnblad
5
//
6
// ThePEG is licenced under version 3 of the GPL, see COPYING for details.
7
// Please respect the MCnet academic guidelines, see GUIDELINES for details.
8
//
9
#ifndef ThePEG_SpinorWaveFunction_H
10
#define ThePEG_SpinorWaveFunction_H
11
//
12
// This is the declaration of the SpinorWaveFunction class.
13
//
14
#include "WaveFunctionBase.h"
15
#include <ThePEG/Helicity/LorentzSpinor.h>
16
#include <ThePEG/Helicity/FermionSpinInfo.h>
17
#include <ThePEG/EventRecord/Particle.h>
18
#include <ThePEG/EventRecord/RhoDMatrix.h>
19
20
namespace
ThePEG
{
21
22
namespace
Helicity {
23
27
class
SpinorBarWaveFunction;
28
56
class
SpinorWaveFunction
:
public
WaveFunctionBase
{
57
58
public
:
59
71
SpinorWaveFunction
(
const
Lorentz5Momentum
& p,
tcPDPtr
part,complex<double>
s1
,
72
complex<double>
s2
,complex<double>
s3
,complex<double>
s4
)
73
:
WaveFunctionBase
(p,part),
_wf
(
s1
,
s2
,
s3
,
s4
)
74
{
75
assert(
iSpin
()==2);
76
}
77
85
SpinorWaveFunction
(
const
Lorentz5Momentum
& p,
tcPDPtr
part,
86
const
LorentzSpinor<double>
&
wave
,
87
Direction
dir=
intermediate
)
88
:
WaveFunctionBase
(p,part,dir),
_wf
(
wave
)
89
{
90
assert(
iSpin
()==2);
91
}
92
99
SpinorWaveFunction
(
const
tPPtr
& p,
const
LorentzSpinor<SqrtEnergy>
&
wave
,
100
Direction
dir=
intermediate
)
101
:
WaveFunctionBase
(p->
momentum
(), p->dataPtr(), dir),
_wf
(
wave
.Type())
102
{
103
assert(
iSpin
()==2);
104
for
(
unsigned
int
i=0; i<4; ++i)
105
_wf
[i]=
Complex
(
wave
[i]*UnitRemoval::InvSqrtE);
106
}
107
115
SpinorWaveFunction
(
const
Lorentz5Momentum
& p,
tcPDPtr
part,
116
unsigned
int
ihel,
117
Direction
dir)
118
:
WaveFunctionBase
(p,part,dir)
119
{
120
assert(
iSpin
()==2);
121
calculateWaveFunction
(ihel);
122
}
123
131
SpinorWaveFunction
(
const
Lorentz5Momentum
& p,
132
tcPDPtr
part,
Direction
dir)
133
:
WaveFunctionBase
(p,part,dir),
_wf
()
134
{
135
assert(
iSpin
()==2);
136
}
137
141
SpinorWaveFunction
()
142
:
WaveFunctionBase
(),
_wf
()
143
{}
144
148
SpinorWaveFunction
(vector<SpinorWaveFunction> &
wave
,
149
tPPtr
part,
Direction
dir,
bool
time,
bool
=
true
) {
150
calculateWaveFunctions
(
wave
,part,dir);
151
constructSpinInfo
(
wave
,part,dir,time);
152
}
154
162
complex<double>
operator ()
(
int
i)
const
{
163
assert(i>=0 &&i<=3);
164
return
_wf
(i);
165
}
166
170
const
LorentzSpinor<double>
&
wave
()
const
{
return
_wf
;}
171
175
LorentzSpinor<SqrtEnergy>
dimensionedWave
()
const
{
return
dimensionedWf
();}
176
180
complex<double>
s1
()
const
{
return
_wf
.
s1
();}
181
185
complex<double>
s2
()
const
{
return
_wf
.
s2
();}
186
190
complex<double>
s3
()
const
{
return
_wf
.
s3
();}
191
195
complex<double>
s4
()
const
{
return
_wf
.
s4
();}
197
203
void
conjugate
() {
204
_wf
=
_wf
.
conjugate
();
205
}
206
210
SpinorBarWaveFunction
bar
();
211
220
void
reset
(
unsigned
int
ihel) {
221
calculateWaveFunction
(ihel);
222
}
224
225
public
:
226
230
void
transform
(
const
LorentzRotation
& r) {
231
_wf
.
transform
(r);
232
transformMomentum
(r);
233
}
234
235
public
:
236
240
static
void
calculateWaveFunctions
(vector<
LorentzSpinor<SqrtEnergy>
> & waves,
241
tPPtr
particle
,
Direction
);
242
246
static
void
calculateWaveFunctions
(vector<SpinorWaveFunction> & waves,
247
tPPtr
particle
,
Direction
);
248
252
static
void
calculateWaveFunctions
(vector<SpinorWaveFunction> & waves,
253
const
Lorentz5Momentum
&
momentum
,
254
tcPDPtr
parton,
Direction
);
255
259
static
void
calculateWaveFunctions
(vector<
LorentzSpinor<SqrtEnergy>
> & waves,
260
RhoDMatrix
& rho,
261
tPPtr
particle
,
Direction
);
262
266
static
void
calculateWaveFunctions
(vector<SpinorWaveFunction> & waves,
267
RhoDMatrix
& rho,
268
tPPtr
particle
,
Direction
);
269
273
static
void
constructSpinInfo
(
const
vector<
LorentzSpinor<SqrtEnergy>
> & waves,
274
tPPtr
part,
Direction
dir,
bool
time);
275
279
static
void
constructSpinInfo
(
const
vector<SpinorWaveFunction> & waves,
280
tPPtr
part,
Direction
dir,
bool
time);
281
282
283
private
:
284
289
void
calculateWaveFunction
(
unsigned
int
ihel);
290
291
private
:
292
296
LorentzSpinor<double>
_wf
;
297
299
LorentzSpinor<SqrtEnergy>
dimensionedWf
()
const
{
300
LorentzSpinor<SqrtEnergy>
temp(
_wf
.
Type
());
301
for
(
unsigned
int
i=0; i<4; ++i)
302
temp(i) =
_wf
(i)*UnitRemoval::SqrtE;
303
return
temp;
304
}
305
306
};
307
308
}
309
310
}
311
#endif
312
313
314
315
ThePEG::Direction
A Direction object can be used to specify that some following operations should be assumed to be perf...
Definition:
Direction.h:41
ThePEG::Helicity::LorentzSpinor
The LorentzSpinor class is designed to store a spinor.
Definition:
LorentzSpinor.h:71
ThePEG::Helicity::LorentzSpinor::conjugate
LorentzSpinor conjugate() const
Return the conjugated spinor .
ThePEG::Helicity::LorentzSpinor::s2
complex< Value > s2() const
Get second component.
Definition:
LorentzSpinor.h:136
ThePEG::Helicity::LorentzSpinor::Type
SpinorType Type() const
Return the type of the spinor.
Definition:
LorentzSpinor.h:237
ThePEG::Helicity::LorentzSpinor::s3
complex< Value > s3() const
Get third component.
Definition:
LorentzSpinor.h:141
ThePEG::Helicity::LorentzSpinor::s1
complex< Value > s1() const
Get first component.
Definition:
LorentzSpinor.h:131
ThePEG::Helicity::LorentzSpinor::transform
LorentzSpinor & transform(const SpinHalfLorentzRotation &)
General Lorentz transformation.
ThePEG::Helicity::LorentzSpinor::s4
complex< Value > s4() const
Get fourth component.
Definition:
LorentzSpinor.h:146
ThePEG::Helicity::SpinorBarWaveFunction
Definition:
SpinorBarWaveFunction.h:57
ThePEG::Helicity::SpinorWaveFunction
Definition:
SpinorWaveFunction.h:56
ThePEG::Helicity::SpinorWaveFunction::operator()
complex< double > operator()(int i) const
Access to the wavefunction and its components.
Definition:
SpinorWaveFunction.h:162
ThePEG::Helicity::SpinorWaveFunction::SpinorWaveFunction
SpinorWaveFunction(const Lorentz5Momentum &p, tcPDPtr part, Direction dir)
Constructor, set the momentum, direction, zero the wavefunction.
Definition:
SpinorWaveFunction.h:131
ThePEG::Helicity::SpinorWaveFunction::SpinorWaveFunction
SpinorWaveFunction(const Lorentz5Momentum &p, tcPDPtr part, complex< double > s1, complex< double > s2, complex< double > s3, complex< double > s4)
Constructor, set the momentum and the components of the spinor.
Definition:
SpinorWaveFunction.h:71
ThePEG::Helicity::SpinorWaveFunction::wave
const LorentzSpinor< double > & wave() const
Return wavefunction as LorentzSpinor<double>.
Definition:
SpinorWaveFunction.h:170
ThePEG::Helicity::SpinorWaveFunction::SpinorWaveFunction
SpinorWaveFunction(const Lorentz5Momentum &p, tcPDPtr part, const LorentzSpinor< double > &wave, Direction dir=intermediate)
Constructor, set the momentum and the wavefunction.
Definition:
SpinorWaveFunction.h:85
ThePEG::Helicity::SpinorWaveFunction::bar
SpinorBarWaveFunction bar()
Return the barred spinor.
ThePEG::Helicity::SpinorWaveFunction::s3
complex< double > s3() const
Get the third spin component component.
Definition:
SpinorWaveFunction.h:190
ThePEG::Helicity::SpinorWaveFunction::dimensionedWf
LorentzSpinor< SqrtEnergy > dimensionedWf() const
Return wavefunction as LorentzSpinor<SqrtEnergy>
Definition:
SpinorWaveFunction.h:299
ThePEG::Helicity::SpinorWaveFunction::calculateWaveFunctions
static void calculateWaveFunctions(vector< SpinorWaveFunction > &waves, tPPtr particle, Direction)
Calculate the wavefunctions.
ThePEG::Helicity::SpinorWaveFunction::s2
complex< double > s2() const
Get the second spin component component.
Definition:
SpinorWaveFunction.h:185
ThePEG::Helicity::SpinorWaveFunction::calculateWaveFunction
void calculateWaveFunction(unsigned int ihel)
Calcuate the wavefunction.
ThePEG::Helicity::SpinorWaveFunction::transform
void transform(const LorentzRotation &r)
Perform the Lorentz transformation of the wave function.
Definition:
SpinorWaveFunction.h:230
ThePEG::Helicity::SpinorWaveFunction::_wf
LorentzSpinor< double > _wf
Storage of the Lorentz Spinor.
Definition:
SpinorWaveFunction.h:296
ThePEG::Helicity::SpinorWaveFunction::SpinorWaveFunction
SpinorWaveFunction()
Default constructor.
Definition:
SpinorWaveFunction.h:141
ThePEG::Helicity::SpinorWaveFunction::SpinorWaveFunction
SpinorWaveFunction(const tPPtr &p, const LorentzSpinor< SqrtEnergy > &wave, Direction dir=intermediate)
Constructor, set the momentum and the wavefunction.
Definition:
SpinorWaveFunction.h:99
ThePEG::Helicity::SpinorWaveFunction::dimensionedWave
LorentzSpinor< SqrtEnergy > dimensionedWave() const
Return wavefunction as LorentzSpinor<SqrtEnergy>.
Definition:
SpinorWaveFunction.h:175
ThePEG::Helicity::SpinorWaveFunction::conjugate
void conjugate()
Take the conjugate of the spinor .
Definition:
SpinorWaveFunction.h:203
ThePEG::Helicity::SpinorWaveFunction::SpinorWaveFunction
SpinorWaveFunction(vector< SpinorWaveFunction > &wave, tPPtr part, Direction dir, bool time, bool=true)
Special for spin correlations.
Definition:
SpinorWaveFunction.h:148
ThePEG::Helicity::SpinorWaveFunction::calculateWaveFunctions
static void calculateWaveFunctions(vector< LorentzSpinor< SqrtEnergy > > &waves, RhoDMatrix &rho, tPPtr particle, Direction)
Calculate the wavefunctions.
ThePEG::Helicity::SpinorWaveFunction::reset
void reset(unsigned int ihel)
Reset functions.
Definition:
SpinorWaveFunction.h:220
ThePEG::Helicity::SpinorWaveFunction::s4
complex< double > s4() const
Get the fourth spin component component.
Definition:
SpinorWaveFunction.h:195
ThePEG::Helicity::SpinorWaveFunction::constructSpinInfo
static void constructSpinInfo(const vector< SpinorWaveFunction > &waves, tPPtr part, Direction dir, bool time)
Construct the SpinInfo object.
ThePEG::Helicity::SpinorWaveFunction::calculateWaveFunctions
static void calculateWaveFunctions(vector< LorentzSpinor< SqrtEnergy > > &waves, tPPtr particle, Direction)
Calculate the wavefunctions.
ThePEG::Helicity::SpinorWaveFunction::s1
complex< double > s1() const
Get the first spin component component.
Definition:
SpinorWaveFunction.h:180
ThePEG::Helicity::SpinorWaveFunction::constructSpinInfo
static void constructSpinInfo(const vector< LorentzSpinor< SqrtEnergy > > &waves, tPPtr part, Direction dir, bool time)
Construct the SpinInfo object.
ThePEG::Helicity::SpinorWaveFunction::SpinorWaveFunction
SpinorWaveFunction(const Lorentz5Momentum &p, tcPDPtr part, unsigned int ihel, Direction dir)
Constructor, set the momentum, helicity, direction.
Definition:
SpinorWaveFunction.h:115
ThePEG::Helicity::SpinorWaveFunction::calculateWaveFunctions
static void calculateWaveFunctions(vector< SpinorWaveFunction > &waves, RhoDMatrix &rho, tPPtr particle, Direction)
Calculate the wavefunctions.
ThePEG::Helicity::SpinorWaveFunction::calculateWaveFunctions
static void calculateWaveFunctions(vector< SpinorWaveFunction > &waves, const Lorentz5Momentum &momentum, tcPDPtr parton, Direction)
Calculate the wavefunctions.
ThePEG::Helicity::WaveFunctionBase
Definition:
WaveFunctionBase.h:58
ThePEG::Helicity::WaveFunctionBase::iSpin
PDT::Spin iSpin() const
Get 2s+1 for the particle.
Definition:
WaveFunctionBase.h:139
ThePEG::Helicity::WaveFunctionBase::particle
tcPDPtr particle() const
Get the particle pointer.
Definition:
WaveFunctionBase.h:144
ThePEG::Helicity::WaveFunctionBase::transformMomentum
void transformMomentum(const LorentzRotation &r)
Perform the Lorentz transformation of the wave function.
Definition:
WaveFunctionBase.h:162
ThePEG::Helicity::WaveFunctionBase::momentum
const Lorentz5Momentum & momentum() const
Access to the 5-momentum.
Definition:
WaveFunctionBase.h:124
ThePEG::Lorentz5Vector< Energy >
ThePEG::LorentzRotation
The LorentzRotation class combine a SpinOneLorentzRotation and a spin SpinHalfLorentzRotation to prov...
Definition:
LorentzRotation.h:27
ThePEG::Pointer::TransientConstRCPtr
TransientConstRCPtr is a simple wrapper around a bare const pointer which can be assigned to and from...
Definition:
RCPtr.h:696
ThePEG::Pointer::TransientRCPtr
TransientRCPtr is a simple wrapper around a bare pointer which can be assigned to and from an RCPtr a...
Definition:
RCPtr.h:519
ThePEG::RhoDMatrix
The RhoDMatrix class is designed to implement the storage of the rho and D matrices which are require...
Definition:
RhoDMatrix.h:28
ThePEG::Helicity::intermediate
@ intermediate
An intermediate particle.
Definition:
WaveFunctionBase.h:33
ThePEG
This is the main namespace within which all identifiers in ThePEG are declared.
Definition:
FactoryBase.h:28
ThePEG::Complex
std::complex< double > Complex
ThePEG code should use Complex for all complex scalars.
Definition:
Complex.h:23
Generated on Thu Jun 20 2024 14:47:00 for ThePEG by
1.9.6