thepeg is hosted by Hepforge, IPPP Durham
ThePEG 2.3.0
RSSpinorWaveFunction.h
1// -*- C++ -*-
2//
3// RSSpinorWaveFunction.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_RSSpinorWaveFunction_H
10#define ThePEG_RSSpinorWaveFunction_H
11// This is the declaration of the RSSpinorWaveFunction class.
12
13#include "WaveFunctionBase.h"
14#include <ThePEG/Helicity/LorentzRSSpinor.h>
15#include <ThePEG/Helicity/RSFermionSpinInfo.h>
16#include <ThePEG/EventRecord/Particle.h>
17#include <ThePEG/EventRecord/RhoDMatrix.h>
18
19namespace ThePEG {
20
21namespace Helicity {
22
59
60public:
61
86 complex<double> xs1, complex<double> xs2,
87 complex<double> xs3, complex<double> xs4,
88 complex<double> ys1, complex<double> ys2,
89 complex<double> ys3, complex<double> ys4,
90 complex<double> zs1, complex<double> zs2,
91 complex<double> zs3, complex<double> zs4,
92 complex<double> ts1, complex<double> ts2,
93 complex<double> ts3, complex<double> ts4)
94 : WaveFunctionBase(p,part), _wf(xs1,xs2,xs3,xs4,
95 ys1,ys2,ys3,ys4,
96 zs1,zs2,zs3,zs4,
97 ts1,ts2,ts3,ts4)
98 {
99 assert(iSpin()==4);
100 }
101
112 : WaveFunctionBase(p,part,dir), _wf(wave)
113 {
114 assert(iSpin()==4);
115 }
116
126 : WaveFunctionBase(p->momentum(),p->dataPtr(),dir), _wf(wave.Type())
127 {
128 assert(iSpin()==4);
129 for (unsigned int i=0; i<4; ++i)
130 for(unsigned int j=0; j<4; ++j)
131 _wf(i,j)=Complex(wave(i,j)*UnitRemoval::InvSqrtE);
132 }
133
142 unsigned int ihel, Direction dir)
143 : WaveFunctionBase(p,part,dir)
144 {
145 assert(iSpin()==4);
147 }
148
157 : WaveFunctionBase(p,part,dir), _wf()
158 {
159 assert(iSpin()==4);
160 }
161
166 : WaveFunctionBase(), _wf()
167 {}
168
172 RSSpinorWaveFunction(vector<RSSpinorWaveFunction> & wave,
173 tPPtr part,Direction dir,bool time,bool=true) {
175 constructSpinInfo(wave,part,dir,time);
176 }
178
187 complex<double> operator ()(int i, int j) const {
188 assert( i>=0 && i<=3 && j>=0 && j<=3);
189 return _wf(i,j);
190 }
191
195 const LorentzRSSpinor<double> & wave() const {return _wf;}
196
200 for (unsigned int i=0; i<4; ++i)
201 for (unsigned int j=0; j<4; ++j)
202 temp(i,j) = _wf(i,j)*UnitRemoval::SqrtE;
203 return temp;
204 }
205
209 complex<double> xs1() const {return _wf.xs1();}
210
214 complex<double> xs2() const {return _wf.xs2();}
215
219 complex<double> xs3() const {return _wf.xs3();}
220
224 complex<double> xs4() const {return _wf.xs4();}
225
229 complex<double> ys1() const {return _wf.ys1();}
230
234 complex<double> ys2() const {return _wf.ys2();}
235
239 complex<double> ys3() const {return _wf.ys3();}
240
244 complex<double> ys4() const {return _wf.ys4();}
245
249 complex<double> zs1() const {return _wf.zs1();}
250
254 complex<double> zs2() const {return _wf.zs2();}
255
259 complex<double> zs3() const {return _wf.zs3();}
260
264 complex<double> zs4() const {return _wf.zs4();}
265
269 complex<double> ts1() const {return _wf.ts1();}
270
274 complex<double> ts2() const {return _wf.ts2();}
275
279 complex<double> ts3() const {return _wf.ts3();}
280
284 complex<double> ts4() const {return _wf.ts4();}
286
295 void reset(unsigned int ihel) {
297 }
299
300public:
301
305 void transform(const LorentzRotation & r) {
306 _wf.transform(r);
308 }
309
310public:
311
317
321 static void calculateWaveFunctions(vector<RSSpinorWaveFunction> & waves,
323
327 static void calculateWaveFunctions(vector<RSSpinorWaveFunction> & waves,
329 tcPDPtr parton,Direction);
330
335 RhoDMatrix & rho,
337
341 static void calculateWaveFunctions(vector<RSSpinorWaveFunction> & waves,
342 RhoDMatrix & rho,
344
348 static void constructSpinInfo(const vector<LorentzRSSpinor<SqrtEnergy> > & waves,
349 tPPtr part,Direction dir, bool time);
350
354 static void constructSpinInfo(const vector<RSSpinorWaveFunction> & waves,
355 tPPtr part,Direction dir, bool time);
356
357private:
358
363 void calculateWaveFunction(unsigned int ihel);
364
365private:
366
371};
372
373}
374}
375
376#endif /* ThePEG_RSSpinorWaveFunction_H */
A Direction object can be used to specify that some following operations should be assumed to be perf...
Definition: Direction.h:41
The LorentzRSSpinor class is designed to store a Rarita-Schwinger spinor for a spin-3/2 particle.
complex< Value > xs4() const
Get fourth spinor component for the x vector.
complex< Value > ys4() const
Get fourth spinor component for the y vector.
complex< Value > zs2() const
Get second spinor component for the z vector.
complex< Value > zs1() const
Get first spinor component for the z vector.
complex< Value > ys2() const
Get second spinor component for the y vector.
complex< Value > ts4() const
Get fourth spinor component for the t vector.
complex< Value > ts3() const
Get third spinor component for the t vector.
complex< Value > xs2() const
Get second spinor component for the x vector.
complex< Value > ys3() const
Get third spinor component for the y vector.
LorentzRSSpinor & transform(const LorentzRotation &)
General transform.
complex< Value > xs1() const
Get first spinor component for the x vector.
complex< Value > zs4() const
Get fourth spinor component for the z vector.
complex< Value > ts2() const
Get second spinor component for the t vector.
complex< Value > xs3() const
Get third spinor component for the x vector.
complex< Value > zs3() const
Get third spinor component for the z vector.
complex< Value > ts1() const
Get first spinor component for the t vector.
SpinorType Type() const
Return the type of the spinor.
complex< Value > ys1() const
Get first spinor component for the y vector.
The RSSpinorWaveFunction class is designed to store the wavefunction of a spin-3/2 particle in a form...
RSSpinorWaveFunction(const Lorentz5Momentum &p, tcPDPtr part, complex< double > xs1, complex< double > xs2, complex< double > xs3, complex< double > xs4, complex< double > ys1, complex< double > ys2, complex< double > ys3, complex< double > ys4, complex< double > zs1, complex< double > zs2, complex< double > zs3, complex< double > zs4, complex< double > ts1, complex< double > ts2, complex< double > ts3, complex< double > ts4)
Constructor, set the momentum and the components of the spinor.
complex< double > xs1() const
Get first spinor component for the x vector.
RSSpinorWaveFunction(vector< RSSpinorWaveFunction > &wave, tPPtr part, Direction dir, bool time, bool=true)
Special for spin correlations.
complex< double > ys3() const
Get third spinor component for the y vector.
complex< double > ts3() const
Get third spinor component for the t vector.
complex< double > ts1() const
Get first spinor component for the t vector.
RSSpinorWaveFunction(const Lorentz5Momentum &p, tcPDPtr part, const LorentzRSSpinor< double > &wave, Direction dir=intermediate)
Constructor, set the momentum and the wavefunction.
void calculateWaveFunction(unsigned int ihel)
Calcuate the wavefunction.
void transform(const LorentzRotation &r)
Perform the Lorentz transformation of the wave function.
complex< double > zs2() const
Get second spinor component for the z vector.
RSSpinorWaveFunction(const Lorentz5Momentum &p, tcPDPtr part, unsigned int ihel, Direction dir)
Constructor, set the momentum, helicity, direction.
complex< double > zs3() const
Get third spinor component for the z vector.
static void constructSpinInfo(const vector< LorentzRSSpinor< SqrtEnergy > > &waves, tPPtr part, Direction dir, bool time)
Construct the SpinInfo object.
RSSpinorWaveFunction(const tPPtr &p, const LorentzRSSpinor< SqrtEnergy > &wave, Direction dir=intermediate)
Constructor, set the momentum and the wavefunction.
static void calculateWaveFunctions(vector< RSSpinorWaveFunction > &waves, const Lorentz5Momentum &momentum, tcPDPtr parton, Direction)
Calculate the wavefunctions.
complex< double > zs4() const
Get fourth spinor component for the z vector.
complex< double > ts4() const
Get fourth spinor component for the t vector.
static void calculateWaveFunctions(vector< RSSpinorWaveFunction > &waves, RhoDMatrix &rho, tPPtr particle, Direction)
Calculate the wavefunctions.
complex< double > ts2() const
Get second spinor component for the t vector.
LorentzRSSpinor< SqrtEnergy > dimensionedWf() const
Return wavefunction as LorentzRSSpinor<SqrtEnergy>
static void calculateWaveFunctions(vector< LorentzRSSpinor< SqrtEnergy > > &waves, tPPtr particle, Direction)
Calculate the wavefunctions.
complex< double > xs4() const
Get fourth spinor component for the x vector.
complex< double > ys2() const
Get second spinor component for the y vector.
complex< double > ys1() const
Get first spinor component for the y vector.
static void calculateWaveFunctions(vector< RSSpinorWaveFunction > &waves, tPPtr particle, Direction)
Calculate the wavefunctions.
const LorentzRSSpinor< double > & wave() const
return wavefunction as LorentzRSSpinor
static void constructSpinInfo(const vector< RSSpinorWaveFunction > &waves, tPPtr part, Direction dir, bool time)
Construct the SpinInfo object.
RSSpinorWaveFunction(const Lorentz5Momentum &p, tcPDPtr part, Direction dir)
Constructor, set the momentum, direction, zero the wavefunction.
complex< double > ys4() const
Get fourth spinor component for the y vector.
void reset(unsigned int ihel)
reset functions
complex< double > xs2() const
Get second spinor component for the x vector.
LorentzRSSpinor< double > _wf
storage of the Lorentz RSSpinor
complex< double > zs1() const
Get first spinor component for the z vector.
static void calculateWaveFunctions(vector< LorentzRSSpinor< SqrtEnergy > > &waves, RhoDMatrix &rho, tPPtr particle, Direction)
Calculate the wavefunctions.
complex< double > operator()(int i, int j) const
Access to the wavefunction and its components.
complex< double > xs3() const
Get third spinor component for the x vector.
PDT::Spin iSpin() const
Get 2s+1 for the particle.
tcPDPtr particle() const
Get the particle pointer.
void transformMomentum(const LorentzRotation &r)
Perform the Lorentz transformation of the wave function.
const Lorentz5Momentum & momentum() const
Access to the 5-momentum.
The LorentzRotation class combine a SpinOneLorentzRotation and a spin SpinHalfLorentzRotation to prov...
TransientConstRCPtr is a simple wrapper around a bare const pointer which can be assigned to and from...
Definition: RCPtr.h:696
TransientRCPtr is a simple wrapper around a bare pointer which can be assigned to and from an RCPtr a...
Definition: RCPtr.h:519
The RhoDMatrix class is designed to implement the storage of the rho and D matrices which are require...
Definition: RhoDMatrix.h:28
@ intermediate
An intermediate particle.
This is the main namespace within which all identifiers in ThePEG are declared.
Definition: FactoryBase.h:28
std::complex< double > Complex
ThePEG code should use Complex for all complex scalars.
Definition: Complex.h:23