00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef ThePEG_RSSpinorBarWaveFunction_H
00010 #define ThePEG_RSSpinorBarWaveFunction_H
00011
00012
00013
00014 #include "WaveFunctionBase.h"
00015 #include <ThePEG/Helicity/LorentzRSSpinorBar.h>
00016 #include <ThePEG/Helicity/RSFermionSpinInfo.h>
00017 #include <ThePEG/EventRecord/Particle.h>
00018 #include <ThePEG/Helicity/RhoDMatrix.h>
00019
00020 namespace ThePEG {
00021
00022 namespace Helicity {
00023
00060 class RSSpinorBarWaveFunction: public WaveFunctionBase {
00061
00062 public:
00063
00087 RSSpinorBarWaveFunction(const Lorentz5Momentum & p,tcPDPtr part,
00088 complex<double> xs1, complex<double> xs2,
00089 complex<double> xs3, complex<double> xs4,
00090 complex<double> ys1, complex<double> ys2,
00091 complex<double> ys3, complex<double> ys4,
00092 complex<double> zs1, complex<double> zs2,
00093 complex<double> zs3, complex<double> zs4,
00094 complex<double> ts1, complex<double> ts2,
00095 complex<double> ts3, complex<double> ts4)
00096 : WaveFunctionBase(p,part), _wf(xs1,xs2,xs3,xs4,
00097 ys1,ys2,ys3,ys4,
00098 zs1,zs2,zs3,zs4,
00099 ts1,ts2,ts3,ts4)
00100 {
00101 assert(iSpin()==4);
00102 }
00103
00110 RSSpinorBarWaveFunction(const Lorentz5Momentum & p,tcPDPtr part,
00111 LorentzRSSpinorBar<double> & wave)
00112 : WaveFunctionBase(p,part), _wf(wave)
00113 {
00114 assert(iSpin()==4);
00115 }
00116
00123 RSSpinorBarWaveFunction(const tPPtr & p,
00124 const LorentzRSSpinorBar<SqrtEnergy> & wave,
00125 Direction dir=intermediate)
00126 : WaveFunctionBase(p->momentum(),p->dataPtr(),dir), _wf(wave.Type())
00127 {
00128 assert(iSpin()==4);
00129 for (unsigned int i=0; i<4; ++i)
00130 for(unsigned int j=0; j<4; ++j)
00131 _wf(i,j)=wave(i,j)*UnitRemoval::InvSqrtE;
00132 }
00133
00141 RSSpinorBarWaveFunction(const Lorentz5Momentum & p,tcPDPtr part,
00142 unsigned int ihel,Direction dir)
00143 : WaveFunctionBase(p,part,dir)
00144 {
00145 assert(iSpin()==4);
00146 calculateWaveFunction(ihel);
00147 }
00148
00156 RSSpinorBarWaveFunction(Lorentz5Momentum p,tcPDPtr part,Direction dir)
00157 : WaveFunctionBase(p,part,dir), _wf()
00158 {
00159 assert(iSpin()==4);
00160 }
00161
00165 RSSpinorBarWaveFunction()
00166 : WaveFunctionBase(), _wf()
00167 {}
00169
00178 complex<double> operator ()(int i, int j) const {
00179 assert( i>=0 && i<=3 && j>=0 && j<=3 );
00180 return _wf(i,j);
00181 }
00182
00186 const LorentzRSSpinorBar<double> & wave() const {return _wf;}
00187
00191 complex<double> xs1() const {return _wf.xs1();}
00192
00196 complex<double> xs2() const {return _wf.xs2();}
00197
00201 complex<double> xs3() const {return _wf.xs3();}
00202
00206 complex<double> xs4() const {return _wf.xs4();}
00207
00211 complex<double> ys1() const {return _wf.ys1();}
00212
00216 complex<double> ys2() const {return _wf.ys2();}
00217
00221 complex<double> ys3() const {return _wf.ys3();}
00222
00226 complex<double> ys4() const {return _wf.ys4();}
00227
00231 complex<double> zs1() const {return _wf.zs1();}
00232
00236 complex<double> zs2() const {return _wf.zs2();}
00237
00241 complex<double> zs3() const {return _wf.zs3();}
00242
00246 complex<double> zs4() const {return _wf.zs4();}
00247
00251 complex<double> ts1() const {return _wf.ts1();}
00252
00256 complex<double> ts2() const {return _wf.ts2();}
00257
00261 complex<double> ts3() const {return _wf.ts3();}
00262
00266 complex<double> ts4() const {return _wf.ts4();}
00268
00277 void reset(unsigned int ihel) {
00278 calculateWaveFunction(ihel);
00279 }
00281
00282 public:
00283
00287 void transform(const LorentzRotation & r) {
00288 _wf.transform(r);
00289 transformMomentum(r);
00290 }
00291
00292 public:
00293
00297 static void calculateWaveFunctions(vector<LorentzRSSpinorBar<SqrtEnergy> > & waves,
00298 tPPtr particle,Direction);
00299
00303 static void calculateWaveFunctions(vector<RSSpinorBarWaveFunction> & waves,
00304 tPPtr particle,Direction);
00305
00309 static void calculateWaveFunctions(vector<LorentzRSSpinorBar<SqrtEnergy> > & waves,
00310 RhoDMatrix & rho,
00311 tPPtr particle,Direction);
00312
00316 static void calculateWaveFunctions(vector<RSSpinorBarWaveFunction> & waves,
00317 RhoDMatrix & rho,
00318 tPPtr particle,Direction);
00319
00323 static void constructSpinInfo(const vector<LorentzRSSpinorBar<SqrtEnergy> > & waves,
00324 tPPtr part,Direction dir, bool time);
00325
00326 private:
00327
00332 void calculateWaveFunction(unsigned int ihel);
00333
00334 private:
00335
00339 LorentzRSSpinorBar<double> _wf;
00340
00342 LorentzRSSpinorBar<SqrtEnergy> dimensionedWf() {
00343 LorentzRSSpinorBar<SqrtEnergy> temp(_wf.Type());
00344 for (unsigned int i=0; i<4; ++i)
00345 for (unsigned int j=0; j<4; ++j)
00346 temp(i,j) = _wf(i,j)*UnitRemoval::SqrtE;
00347 return temp;
00348 }
00349 };
00350
00351 }
00352 }
00353
00354 #endif
00355