thepeg is hosted by Hepforge, IPPP Durham
ThePEG  2.2.1
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 
19 namespace ThePEG {
20 
21 namespace Helicity {
22 
59 
60 public:
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 
111  Direction dir=intermediate)
112  : WaveFunctionBase(p,part,dir), _wf(wave)
113  {
114  assert(iSpin()==4);
115  }
116 
125  Direction dir=intermediate)
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);
146  calculateWaveFunction(ihel);
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) {
174  calculateWaveFunctions(wave,part,dir);
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) {
296  calculateWaveFunction(ihel);
297  }
299 
300 public:
301 
305  void transform(const LorentzRotation & r) {
306  _wf.transform(r);
308  }
309 
310 public:
311 
315  static void calculateWaveFunctions(vector<LorentzRSSpinor<SqrtEnergy> > & waves,
317 
321  static void calculateWaveFunctions(vector<RSSpinorWaveFunction> & waves,
322  tPPtr particle,Direction);
323 
327  static void calculateWaveFunctions(vector<RSSpinorWaveFunction> & waves,
328  const Lorentz5Momentum & momentum,
329  tcPDPtr parton,Direction);
330 
334  static void calculateWaveFunctions(vector<LorentzRSSpinor<SqrtEnergy> > & waves,
335  RhoDMatrix & rho,
336  tPPtr particle,Direction);
337 
341  static void calculateWaveFunctions(vector<RSSpinorWaveFunction> & waves,
342  RhoDMatrix & rho,
343  tPPtr particle,Direction);
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 
357 private:
358 
363  void calculateWaveFunction(unsigned int ihel);
364 
365 private:
366 
371 };
372 
373 }
374 }
375 
376 #endif /* ThePEG_RSSpinorWaveFunction_H */
const LorentzRSSpinor< double > & wave() const
return wavefunction as LorentzRSSpinor
complex< double > xs4() const
Get fourth spinor component for the x vector.
void calculateWaveFunction(unsigned int ihel)
Calcuate the wavefunction.
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.
std::complex< double > Complex
ThePEG code should use Complex for all complex scalars.
Definition: Complex.h:23
complex< double > ys2() const
Get second spinor component for the y vector.
complex< Value > zs1() const
Get first spinor component for the z vector.
complex< Value > xs4() const
Get fourth spinor component for the x vector.
void transform(const LorentzRotation &r)
Perform the Lorentz transformation of the wave function.
TransientConstRCPtr is a simple wrapper around a bare const pointer which can be assigned to and from...
Definition: RCPtr.h:696
The LorentzRotation class combine a SpinOneLorentzRotation and a spin SpinHalfLorentzRotation to prov...
TransientRCPtr is a simple wrapper around a bare pointer which can be assigned to and from an RCPtr a...
Definition: RCPtr.h:519
complex< Value > xs1() const
Get first spinor component for the x vector.
complex< double > ts1() const
Get first spinor component for the t vector.
static void constructSpinInfo(const vector< LorentzRSSpinor< SqrtEnergy > > &waves, tPPtr part, Direction dir, bool time)
Construct the SpinInfo object.
This is the main namespace within which all identifiers in ThePEG are declared.
Definition: FactoryBase.h:28
SpinorType Type() const
Return the type of the spinor.
complex< Value > xs2() const
Get second spinor component for the x vector.
An intermediate particle.
RSSpinorWaveFunction(const Lorentz5Momentum &p, tcPDPtr part, Direction dir)
Constructor, set the momentum, direction, zero the wavefunction.
complex< Value > ts1() const
Get first spinor component for the t vector.
complex< Value > ys2() const
Get second spinor component for the y vector.
complex< double > ts2() const
Get second spinor component for the t vector.
complex< double > zs4() const
Get fourth spinor component for the z vector.
The RSSpinorWaveFunction class is designed to store the wavefunction of a spin-3/2 particle in a form...
complex< double > xs3() const
Get third spinor component for the x vector.
complex< double > operator()(int i, int j) const
Access to the wavefunction and its components.
complex< double > zs1() const
Get first spinor component for the z vector.
RSSpinorWaveFunction(const tPPtr &p, const LorentzRSSpinor< SqrtEnergy > &wave, Direction dir=intermediate)
Constructor, set the momentum and the wavefunction.
complex< double > ys1() const
Get first spinor component for the y vector.
RSSpinorWaveFunction(vector< RSSpinorWaveFunction > &wave, tPPtr part, Direction dir, bool time, bool=true)
Special for spin correlations.
PDT::Spin iSpin() const
Get 2s+1 for the particle.
complex< double > ts3() const
Get third spinor component for the t vector.
complex< Value > zs4() const
Get fourth spinor component for the z vector.
complex< double > ys4() const
Get fourth spinor component for the y vector.
LorentzRSSpinor< SqrtEnergy > dimensionedWf() const
Return wavefunction as LorentzRSSpinor<SqrtEnergy>
LorentzRSSpinor & transform(const LorentzRotation &)
General transform.
complex< Value > xs3() const
Get third spinor component for the x vector.
complex< double > ts4() const
Get fourth spinor component for the t vector.
void reset(unsigned int ihel)
reset functions
complex< Value > ts2() const
Get second spinor component for the t 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.
LorentzRSSpinor< double > _wf
storage of the Lorentz RSSpinor
complex< double > zs3() const
Get third spinor component for the z vector.
const Lorentz5Momentum & momentum() const
Access to the 5-momentum.
A Direction object can be used to specify that some following operations should be assumed to be perf...
Definition: Direction.h:41
complex< Value > ys1() const
Get first spinor component for the y vector.
complex< Value > ys3() const
Get third spinor component for the y vector.
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.
tcPDPtr particle() const
Get the particle pointer.
complex< double > xs2() const
Get second spinor component for the x vector.
The RhoDMatrix class is designed to implement the storage of the rho and D matrices which are require...
Definition: RhoDMatrix.h:28
complex< double > ys3() const
Get third spinor component for the y vector.
complex< Value > zs2() const
Get second spinor component for the z vector.
complex< Value > ys4() const
Get fourth spinor component for the y vector.
complex< Value > zs3() const
Get third spinor component for the z vector.
complex< double > xs1() const
Get first spinor component for the x vector.
void transformMomentum(const LorentzRotation &r)
Perform the Lorentz transformation of the wave function.
static void calculateWaveFunctions(vector< LorentzRSSpinor< SqrtEnergy > > &waves, tPPtr particle, Direction)
Calculate the wavefunctions.
RSSpinorWaveFunction(const Lorentz5Momentum &p, tcPDPtr part, const LorentzRSSpinor< double > &wave, Direction dir=intermediate)
Constructor, set the momentum and the wavefunction.