thepeg is hosted by Hepforge, IPPP Durham
ThePEG  2.2.1
TensorWaveFunction.h
1 // -*- C++ -*-
2 //
3 // TensorWaveFunction.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_TensorWaveFunction_H
10 #define ThePEG_TensorWaveFunction_H
11 //
12 // This is the declaration of the TensorWaveFunction class.
13 //
14 #include "WaveFunctionBase.h"
15 #include "VectorWaveFunction.h"
16 #include <ThePEG/Helicity/LorentzTensor.h>
17 #include <ThePEG/Helicity/TensorSpinInfo.h>
18 #include <ThePEG/EventRecord/Particle.h>
19 #include <ThePEG/EventRecord/RhoDMatrix.h>
20 
21 namespace ThePEG {
22 namespace Helicity {
23 
32 };
33 
68 
69 public:
70 
84  : WaveFunctionBase(p,part,dir), _wf(wave)
85  {
86  assert(iSpin()==PDT::Spin2);
87  }
88 
114  Complex tt)
115  : WaveFunctionBase(p,part), _wf(xx,xy,xz,xt,
116  yx,yy,yz,yt,
117  zx,zy,zz,zt,
118  tx,ty,tz,tt)
119  {
120  assert(iSpin()==PDT::Spin2);
121  }
122 
132  unsigned int ihel,Direction dir,
134  : WaveFunctionBase(p,part,dir)
135  {
136  assert(iSpin()==PDT::Spin2);
137  calculateWaveFunction(ihel,phase);
138  }
139 
147  tcPDPtr part,Direction dir)
148  : WaveFunctionBase(p,part,dir), _wf()
149  {
150  assert(iSpin()==PDT::Spin2);
151  }
152 
157 
161  TensorWaveFunction(vector<TensorWaveFunction> & wave,
162  tPPtr part,Direction dir,bool time,bool massless,
163  bool=true,
165  calculateWaveFunctions(wave,part,dir,massless,phase);
166  constructSpinInfo(wave,part,dir,time,massless);
167  }
169 
177  Complex operator ()(int i, int j) const {
178  return _wf(i,j);
179  }
180 
184  Complex & operator () (int i, int j) {
185  return _wf(i,j);
186  }
187 
191  const LorentzTensor<double> & wave() const {return _wf;}
192 
196  Complex xx() const {return _wf.xx();}
197 
201  Complex yx() const {return _wf.yx();}
202 
206  Complex zx() const {return _wf.zx();}
207 
211  Complex tx() const {return _wf.tx();}
212 
216  Complex xy() const {return _wf.xy();}
217 
221  Complex yy() const {return _wf.yy();}
222 
226  Complex zy() const {return _wf.zy();}
227 
231  Complex ty() const {return _wf.ty();}
232 
236  Complex xz() const {return _wf.xz();}
237 
241  Complex yz() const {return _wf.yz();}
242 
246  Complex zz() const {return _wf.zz();}
247 
251  Complex tz() const {return _wf.tz();}
252 
256  Complex xt() const {return _wf.xt();}
257 
261  Complex yt() const {return _wf.yt();}
262 
266  Complex zt() const {return _wf.zt();}
267 
271  Complex tt() const {return _wf.tt();}
273 
278 
284  void reset(unsigned int ihel,TensorPhase phase=default_tensor_phase) {
285  calculateWaveFunction(ihel,phase);
286  }
288 
289 public:
290 
294  void transform(const LorentzRotation & r) {
295  _wf.transform(r);
297  }
298 
299 public:
300 
304  static void calculateWaveFunctions(vector<LorentzTensor<double> > & waves,
305  tPPtr particle,Direction,bool massless,
307 
311  static void calculateWaveFunctions(vector<TensorWaveFunction> & waves,
312  tPPtr particle,Direction,bool massless,
314 
318  static void calculateWaveFunctions(vector<LorentzTensor<double> > & waves,
319  RhoDMatrix & rho,
320  tPPtr particle,Direction,bool massless,
322 
326  static void calculateWaveFunctions(vector<TensorWaveFunction> & waves,
327  RhoDMatrix & rho,
328  tPPtr particle,Direction,bool massless,
330 
334  static void constructSpinInfo(const vector<LorentzTensor<double> > & waves,
335  tPPtr part,Direction dir, bool time,bool massless);
336 
340  static void constructSpinInfo(const vector<TensorWaveFunction> & waves,
341  tPPtr part,Direction dir, bool time,bool massless);
342 
343 private:
344 
350  void calculateWaveFunction(unsigned int ihel,
352 
353 private:
354 
359 
360 };
361 }
362 }
363 
364 #endif
const LorentzTensor< double > & wave() const
Return wavefunction as polarization vector.
void reset(unsigned int ihel, TensorPhase phase=default_tensor_phase)
Reset functions.
Complex xz() const
Get the component.
std::complex< double > Complex
ThePEG code should use Complex for all complex scalars.
Definition: Complex.h:23
complex< Value > tx() const
Get t,x component.
Definition: LorentzTensor.h:98
Complex xt() const
Get the component.
Complex xy() const
Get the component.
Complex zy() const
Get the component.
Complex tz() const
Get the component.
complex< Value > ty() const
Get t,y component.
Complex yx() const
Get the component.
complex< Value > xz() const
Get x,z component.
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
static void constructSpinInfo(const vector< LorentzTensor< double > > &waves, tPPtr part, Direction dir, bool time, bool massless)
Construct the SpinInfo object.
complex< Value > zz() const
Get z,z component.
This is the main namespace within which all identifiers in ThePEG are declared.
Definition: FactoryBase.h:28
complex< Value > zy() const
Get z,y component.
Complex yz() const
Get the component.
TensorWaveFunction(const Lorentz5Momentum &p, tcPDPtr part, unsigned int ihel, Direction dir, TensorPhase phase=default_tensor_phase)
Constructor, set the momentum, helicity, direction and optionally the phase.
complex< Value > tz() const
Get t,z component.
An intermediate particle.
static void calculateWaveFunctions(vector< LorentzTensor< double > > &waves, tPPtr particle, Direction, bool massless, TensorPhase phase=default_tensor_phase)
Calculate the wavefunctions.
Complex yt() const
Get the component.
complex< Value > yy() const
Get y,y component.
TensorWaveFunction(const Lorentz5Momentum &p, tcPDPtr part, Direction dir)
Constructor, set the 5-momentum and direction, zero the wavefunction.
TensorPhase
Definition of the enumerated values of the phase to include in the calculation of the polarization te...
complex< Value > xy() const
Get x,y component.
TensorWaveFunction(const Lorentz5Momentum &p, tcPDPtr part, const LorentzTensor< double > &wave, Direction dir=intermediate)
Constructor, set the momentum and Wavefunction, the direction can also be specified.
void calculateWaveFunction(unsigned int ihel, TensorPhase phase=default_tensor_phase)
Calculate the wavefunction.
complex< Value > zx() const
Get z,x component.
Definition: LorentzTensor.h:93
void transform(const LorentzRotation &r)
Perform the Lorentz transformation of the wave function.
complex< Value > yt() const
Get y,t component.
Complex operator()(int i, int j) const
Access to the wavefunction and its components.
LorentzTensor< double > _wf
Storage of the wavefunction as a Lorentz Tensor.
complex< Value > zt() const
Get z,t component.
Include the phase factor.
PDT::Spin iSpin() const
Get 2s+1 for the particle.
complex< Value > xt() const
Get x,t component.
Complex xx() const
Get the component.
TensorWaveFunction(const Lorentz5Momentum &p, tcPDPtr part, Complex xx, Complex xy, Complex xz, Complex xt, Complex yx, Complex yy, Complex yz, Complex yt, Complex zx, Complex zy, Complex zz, Complex zt, Complex tx, Complex ty, Complex tz, Complex tt)
Constructor, set the momentum and the components of the tensor.
Complex tx() const
Get the component.
Complex tt() const
Get the component.
TensorWaveFunction(vector< TensorWaveFunction > &wave, tPPtr part, Direction dir, bool time, bool massless, bool=true, TensorPhase phase=default_tensor_phase)
Special for spin correlations.
A Direction object can be used to specify that some following operations should be assumed to be perf...
Definition: Direction.h:41
complex< Value > yz() const
Get y,z component.
complex< Value > tt() const
Get t,t component.
LorentzTensor & transform(const SpinOneLorentzRotation &r)
General Lorentz transformation.
Complex yy() const
Get the component.
tcPDPtr particle() const
Get the particle pointer.
complex< Value > yx() const
Get y,x component.
Definition: LorentzTensor.h:89
complex< Value > xx() const
Get x,x component.
Definition: LorentzTensor.h:84
The RhoDMatrix class is designed to implement the storage of the rho and D matrices which are require...
Definition: RhoDMatrix.h:28
Complex zx() const
Get the component.
Spin 2.
Definition: PDT.h:40
Complex zt() const
Get the component.
void transformMomentum(const LorentzRotation &r)
Perform the Lorentz transformation of the wave function.
Complex zz() const
Get the component.
Complex ty() const
Get the component.