thepeg is hosted by Hepforge, IPPP Durham
ThePEG 2.3.0
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
21namespace ThePEG {
22namespace Helicity {
23
32};
33
68
69public:
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
289public:
290
294 void transform(const LorentzRotation & r) {
295 _wf.transform(r);
297 }
298
299public:
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
343private:
344
350 void calculateWaveFunction(unsigned int ihel,
352
353private:
354
359
360};
361}
362}
363
364#endif
A Direction object can be used to specify that some following operations should be assumed to be perf...
Definition: Direction.h:41
The LorentzTensor class is designed to implement the storage of a complex tensor to be used to repres...
Definition: LorentzTensor.h:37
complex< Value > tt() const
Get t,t component.
complex< Value > zx() const
Get z,x component.
Definition: LorentzTensor.h:93
complex< Value > xx() const
Get x,x component.
Definition: LorentzTensor.h:84
complex< Value > yz() const
Get y,z component.
complex< Value > zt() const
Get z,t component.
complex< Value > xz() const
Get x,z component.
complex< Value > yt() const
Get y,t component.
complex< Value > ty() const
Get t,y component.
complex< Value > zz() const
Get z,z component.
complex< Value > zy() const
Get z,y component.
complex< Value > xy() const
Get x,y component.
complex< Value > tz() const
Get t,z component.
complex< Value > tx() const
Get t,x component.
Definition: LorentzTensor.h:98
complex< Value > xt() const
Get x,t component.
LorentzTensor & transform(const SpinOneLorentzRotation &r)
General Lorentz transformation.
complex< Value > yx() const
Get y,x component.
Definition: LorentzTensor.h:89
complex< Value > yy() const
Get y,y component.
TensorWaveFunction(vector< TensorWaveFunction > &wave, tPPtr part, Direction dir, bool time, bool massless, bool=true, TensorPhase phase=default_tensor_phase)
Special for spin correlations.
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.
Complex yx() 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 xz() const
Get the component.
Complex yz() const
Get the component.
Complex xx() const
Get the component.
static void constructSpinInfo(const vector< LorentzTensor< double > > &waves, tPPtr part, Direction dir, bool time, bool massless)
Construct the SpinInfo object.
Complex xy() const
Get the component.
Complex zx() const
Get the component.
Complex yt() const
Get the component.
void calculateWaveFunction(unsigned int ihel, TensorPhase phase=default_tensor_phase)
Calculate the wavefunction.
Complex operator()(int i, int j) const
Access to the wavefunction and its components.
static void constructSpinInfo(const vector< TensorWaveFunction > &waves, tPPtr part, Direction dir, bool time, bool massless)
Construct the SpinInfo object.
Complex ty() 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 tt() const
Get the component.
Complex tz() const
Get the component.
TensorWaveFunction(const Lorentz5Momentum &p, tcPDPtr part, Direction dir)
Constructor, set the 5-momentum and direction, zero the wavefunction.
static void calculateWaveFunctions(vector< TensorWaveFunction > &waves, tPPtr particle, Direction, bool massless, TensorPhase phase=default_tensor_phase)
Calculate the wavefunctions.
void transform(const LorentzRotation &r)
Perform the Lorentz transformation of the wave function.
Complex zt() const
Get the component.
Complex xt() const
Get the component.
Complex tx() const
Get the component.
static void calculateWaveFunctions(vector< TensorWaveFunction > &waves, RhoDMatrix &rho, tPPtr particle, Direction, bool massless, TensorPhase phase=default_tensor_phase)
Calculate the wavefunctions.
void reset(unsigned int ihel, TensorPhase phase=default_tensor_phase)
Reset functions.
static void calculateWaveFunctions(vector< LorentzTensor< double > > &waves, tPPtr particle, Direction, bool massless, TensorPhase phase=default_tensor_phase)
Calculate the wavefunctions.
static void calculateWaveFunctions(vector< LorentzTensor< double > > &waves, RhoDMatrix &rho, tPPtr particle, Direction, bool massless, TensorPhase phase=default_tensor_phase)
Calculate the wavefunctions.
Complex zz() const
Get the component.
Complex zy() const
Get the component.
const LorentzTensor< double > & wave() const
Return wavefunction as polarization vector.
Complex yy() const
Get the component.
LorentzTensor< double > _wf
Storage of the wavefunction as a Lorentz Tensor.
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.
The LorentzRotation class combine a SpinOneLorentzRotation and a spin SpinHalfLorentzRotation to prov...
@ Spin2
Spin 2.
Definition: PDT.h:40
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.
TensorPhase
Definition of the enumerated values of the phase to include in the calculation of the polarization te...
@ tensor_nophase
No phase-factor.
@ tensor_phase
Include the phase factor.
@ default_tensor_phase
Default option.
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