00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef ThePEG_ScalarWaveFunction_H
00010 #define ThePEG_ScalarWaveFunction_H
00011
00012
00013
00014 #include "WaveFunctionBase.h"
00015 #include <ThePEG/Helicity/ScalarSpinInfo.h>
00016 #include <ThePEG/EventRecord/Particle.h>
00017 #include <ThePEG/Helicity/RhoDMatrix.h>
00018
00019 namespace ThePEG {
00020 namespace Helicity {
00021
00036 class ScalarWaveFunction : public WaveFunctionBase {
00037
00038 public:
00039
00042
00050 ScalarWaveFunction(const Lorentz5Momentum & p,tcPDPtr part,
00051 Complex wave,Direction dir=intermediate)
00052 : WaveFunctionBase(p,part,dir), _wf(wave)
00053 {
00054 assert(iSpin()==1);
00055 }
00056
00063 ScalarWaveFunction(const Lorentz5Momentum & p,tcPDPtr part,Direction dir)
00064 : WaveFunctionBase(p,part,dir), _wf(1.0)
00065 {
00066 assert(iSpin()==1);
00067 }
00068
00069 static void calculateWaveFunctions(RhoDMatrix & rho,
00070 tPPtr, Direction) {
00071 rho=RhoDMatrix(PDT::Spin0);
00072 }
00073
00074 static void constructSpinInfo(tPPtr part,Direction, bool time) {
00075 tScalarSpinPtr inspin;
00076 if(part->spinInfo()) inspin=dynamic_ptr_cast<tScalarSpinPtr>(part->spinInfo());
00077 if(inspin) return;
00078 assert(!part->spinInfo());
00079 ScalarSpinPtr temp = new_ptr(ScalarSpinInfo(part->momentum(),time));
00080 part->spinInfo(temp);
00081 }
00082
00086 ScalarWaveFunction() : WaveFunctionBase(), _wf(1.0) {}
00087
00091 ScalarWaveFunction(tPPtr p,Direction dir,bool time)
00092 : WaveFunctionBase(p->momentum(), p->dataPtr(), dir), _wf(1.0)
00093 {
00094 assert(iSpin()==1);
00095 constructSpinInfo(p,dir,time);
00096 }
00097
00101 const Complex & wave() const {return _wf;}
00102
00103 public:
00104
00105 void transform(const LorentzRotation & r) {
00106 transformMomentum(r);
00107 }
00108
00109 private:
00110
00114 Complex _wf;
00115
00116 };
00117 }
00118 }
00119
00120 #endif