thepeg is hosted by Hepforge, IPPP Durham
ThePEG  2.2.1
VectorWaveFunction.h
1 // -*- C++ -*-
2 //
3 // VectorWaveFunction.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_VectorWaveFunction_H
10 #define ThePEG_VectorWaveFunction_H
11 //
12 // This is the declaration of the VectorWaveFunction class.
13 //
14 #include "WaveFunctionBase.h"
15 #include <ThePEG/Helicity/LorentzPolarizationVector.h>
16 #include <ThePEG/Helicity/VectorSpinInfo.h>
17 #include <ThePEG/EventRecord/RhoDMatrix.h>
18 #include <ThePEG/EventRecord/Particle.h>
19 
20 namespace ThePEG {
21 namespace Helicity {
22 
51 
52 public:
53 
67  : WaveFunctionBase(p,part,dir), _wf(wave)
68  {
69  assert(iSpin()==3);
70  }
71 
82  const Complex & y,const Complex & z, const Complex & t)
83  : WaveFunctionBase(p,part), _wf(x,y,z,t)
84  {
85  assert(iSpin()==3);
86  }
87 
98  unsigned int ihel,Direction dir,
100  : WaveFunctionBase(p,part,dir)
101  {
102  assert(iSpin()==3);
103  calculateWaveFunction(ihel,phase);
104  }
105 
113  tcPDPtr part,Direction dir)
114  : WaveFunctionBase(p,part,dir), _wf()
115  {
116  assert(iSpin()==3);
117  }
118 
123 
127  VectorWaveFunction(vector<VectorWaveFunction> & wave,
128  tPPtr part,Direction dir,bool time,bool massless,
129  bool=true,
131  calculateWaveFunctions(wave,part,dir,massless,phase);
132  constructSpinInfo(wave,part,dir,time,massless);
133  }
135 
143  const LorentzPolarizationVector & wave() const { return _wf;}
144 
148  Complex x() const {return _wf.x();}
149 
153  Complex y() const {return _wf.y();}
154 
158  Complex z() const {return _wf.z();}
159 
163  Complex t() const {return _wf.t();}
164 
174  void reset(unsigned int ihel,VectorPhase phase=default_vector_phase) {
175  calculateWaveFunction(ihel,phase);
176  }
178 
179 public:
180 
184  void transform(const LorentzRotation & r) {
185  _wf.transform(r);
187  }
188 
189 public:
190 
194  static void calculateWaveFunctions(vector<LorentzPolarizationVector> & waves,
195  tPPtr particle,Direction,bool massless,
197 
201  static void calculateWaveFunctions(vector<VectorWaveFunction> & waves,
202  tPPtr particle,Direction,bool massless,
204 
208  static void calculateWaveFunctions(vector<VectorWaveFunction> & waves,
209  const Lorentz5Momentum & momentum,
210  tcPDPtr parton, Direction,bool massless,
212 
216  static void calculateWaveFunctions(vector<LorentzPolarizationVector> & waves,
217  RhoDMatrix & rho,
218  tPPtr particle,Direction,bool massless,
220 
224  static void calculateWaveFunctions(vector<VectorWaveFunction> & waves,
225  RhoDMatrix & rho,
226  tPPtr particle,Direction,bool massless,
228 
232  static void constructSpinInfo(const vector<LorentzPolarizationVector> & waves,
233  tPPtr part,Direction dir, bool time,bool massless);
234 
238  static void constructSpinInfo(const vector<VectorWaveFunction> & waves,
239  tPPtr part,Direction dir, bool time,bool massless);
240 
241 private:
242 
248  void calculateWaveFunction(unsigned int ihel,
250 
251 private:
252 
257 
258 };
259 
260 }
261 }
262 
263 #endif
Complex t() const
Get t component.
Complex z() const
Get z component.
std::complex< double > Complex
ThePEG code should use Complex for all complex scalars.
Definition: Complex.h:23
void reset(unsigned int ihel, VectorPhase phase=default_vector_phase)
Reset functions.
const LorentzPolarizationVector & wave() const
Access to the wavefunction and its components.
void transform(const LorentzRotation &r)
Perform the Lorentz transformation of the wave function.
static void constructSpinInfo(const vector< LorentzPolarizationVector > &waves, tPPtr part, Direction dir, bool time, bool massless)
Construct the SpinInfo object.
static void calculateWaveFunctions(vector< LorentzPolarizationVector > &waves, tPPtr particle, Direction, bool massless, VectorPhase phase=default_vector_phase)
Calculate the wavefunctions.
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
VectorWaveFunction(const Lorentz5Momentum &p, tcPDPtr part, const Complex &x, const Complex &y, const Complex &z, const Complex &t)
Constructor, set the momentum and components of the wavefunction.
This is the main namespace within which all identifiers in ThePEG are declared.
Definition: FactoryBase.h:28
An intermediate particle.
VectorWaveFunction(const Lorentz5Momentum &p, tcPDPtr part, unsigned int ihel, Direction dir, VectorPhase phase=default_vector_phase)
Constructor, set the momentum, helicity and direction, optionally the choice of the phase...
void calculateWaveFunction(unsigned int ihel, VectorPhase phase=default_vector_phase)
Calculate the wavefunction.
VectorPhase
Definition of the enumerated values of the phase to include in the calculation of the polarization ve...
PDT::Spin iSpin() const
Get 2s+1 for the particle.
Complex x() const
Get x component.
VectorWaveFunction(const Lorentz5Momentum &p, tcPDPtr part, Direction dir)
Constructor, set the 5-momentum and direction, zero the wavefunction.
LorentzPolarizationVector _wf
Storage of the wavefunction as a Lorentz Vector.
VectorWaveFunction(vector< VectorWaveFunction > &wave, tPPtr part, Direction dir, bool time, bool massless, bool=true, VectorPhase phase=default_vector_phase)
Special for spin correlations.
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 y() const
Get y component.
tcPDPtr particle() const
Get the particle pointer.
The RhoDMatrix class is designed to implement the storage of the rho and D matrices which are require...
Definition: RhoDMatrix.h:28
VectorWaveFunction(const Lorentz5Momentum &p, tcPDPtr part, const LorentzPolarizationVector &wave, Direction dir=intermediate)
Constructor, set the momentum and Wavefunction, the direction can also be specified.
LorentzVector< Value > & transform(const SpinOneLorentzRotation &m)
Rotate the vector. Resets .
void transformMomentum(const LorentzRotation &r)
Perform the Lorentz transformation of the wave function.