File indexing completed on 2026-08-06 09:38:24
0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef ThePEG_RSSpinorWaveFunction_H
0010 #define ThePEG_RSSpinorWaveFunction_H
0011
0012
0013 #include "WaveFunctionBase.h"
0014 #include <ThePEG/Helicity/LorentzRSSpinor.h>
0015 #include <ThePEG/Helicity/RSFermionSpinInfo.h>
0016 #include <ThePEG/EventRecord/Particle.h>
0017 #include <ThePEG/EventRecord/RhoDMatrix.h>
0018
0019 namespace ThePEG {
0020
0021 namespace Helicity {
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058 class RSSpinorWaveFunction: public WaveFunctionBase {
0059
0060 public:
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082
0083
0084
0085 RSSpinorWaveFunction(const Lorentz5Momentum & p,tcPDPtr part,
0086 complex<double> xs1, complex<double> xs2,
0087 complex<double> xs3, complex<double> xs4,
0088 complex<double> ys1, complex<double> ys2,
0089 complex<double> ys3, complex<double> ys4,
0090 complex<double> zs1, complex<double> zs2,
0091 complex<double> zs3, complex<double> zs4,
0092 complex<double> ts1, complex<double> ts2,
0093 complex<double> ts3, complex<double> ts4)
0094 : WaveFunctionBase(p,part), _wf(xs1,xs2,xs3,xs4,
0095 ys1,ys2,ys3,ys4,
0096 zs1,zs2,zs3,zs4,
0097 ts1,ts2,ts3,ts4)
0098 {
0099 assert(iSpin()==4);
0100 }
0101
0102
0103
0104
0105
0106
0107
0108
0109 RSSpinorWaveFunction(const Lorentz5Momentum & p, tcPDPtr part,
0110 const LorentzRSSpinor<double> & wave,
0111 Direction dir=intermediate)
0112 : WaveFunctionBase(p,part,dir), _wf(wave)
0113 {
0114 assert(iSpin()==4);
0115 }
0116
0117
0118
0119
0120
0121
0122
0123 RSSpinorWaveFunction(const tPPtr & p,
0124 const LorentzRSSpinor<SqrtEnergy> & wave,
0125 Direction dir=intermediate)
0126 : WaveFunctionBase(p->momentum(),p->dataPtr(),dir), _wf(wave.Type())
0127 {
0128 assert(iSpin()==4);
0129 for (unsigned int i=0; i<4; ++i)
0130 for(unsigned int j=0; j<4; ++j)
0131 _wf(i,j)=Complex(wave(i,j)*UnitRemoval::InvSqrtE);
0132 }
0133
0134
0135
0136
0137
0138
0139
0140
0141 RSSpinorWaveFunction(const Lorentz5Momentum & p,tcPDPtr part,
0142 unsigned int ihel, Direction dir)
0143 : WaveFunctionBase(p,part,dir)
0144 {
0145 assert(iSpin()==4);
0146 calculateWaveFunction(ihel);
0147 }
0148
0149
0150
0151
0152
0153
0154
0155
0156 RSSpinorWaveFunction(const Lorentz5Momentum & p,tcPDPtr part,Direction dir)
0157 : WaveFunctionBase(p,part,dir), _wf()
0158 {
0159 assert(iSpin()==4);
0160 }
0161
0162
0163
0164
0165 RSSpinorWaveFunction()
0166 : WaveFunctionBase(), _wf()
0167 {}
0168
0169
0170
0171
0172 RSSpinorWaveFunction(vector<RSSpinorWaveFunction> & wave,
0173 tPPtr part,Direction dir,bool time,bool=true) {
0174 calculateWaveFunctions(wave,part,dir);
0175 constructSpinInfo(wave,part,dir,time);
0176 }
0177
0178
0179
0180
0181
0182
0183
0184
0185
0186
0187 complex<double> operator ()(int i, int j) const {
0188 assert( i>=0 && i<=3 && j>=0 && j<=3);
0189 return _wf(i,j);
0190 }
0191
0192
0193
0194
0195 const LorentzRSSpinor<double> & wave() const {return _wf;}
0196
0197
0198 LorentzRSSpinor<SqrtEnergy> dimensionedWf() const {
0199 LorentzRSSpinor<SqrtEnergy> temp(_wf.Type());
0200 for (unsigned int i=0; i<4; ++i)
0201 for (unsigned int j=0; j<4; ++j)
0202 temp(i,j) = _wf(i,j)*UnitRemoval::SqrtE;
0203 return temp;
0204 }
0205
0206
0207
0208
0209 complex<double> xs1() const {return _wf.xs1();}
0210
0211
0212
0213
0214 complex<double> xs2() const {return _wf.xs2();}
0215
0216
0217
0218
0219 complex<double> xs3() const {return _wf.xs3();}
0220
0221
0222
0223
0224 complex<double> xs4() const {return _wf.xs4();}
0225
0226
0227
0228
0229 complex<double> ys1() const {return _wf.ys1();}
0230
0231
0232
0233
0234 complex<double> ys2() const {return _wf.ys2();}
0235
0236
0237
0238
0239 complex<double> ys3() const {return _wf.ys3();}
0240
0241
0242
0243
0244 complex<double> ys4() const {return _wf.ys4();}
0245
0246
0247
0248
0249 complex<double> zs1() const {return _wf.zs1();}
0250
0251
0252
0253
0254 complex<double> zs2() const {return _wf.zs2();}
0255
0256
0257
0258
0259 complex<double> zs3() const {return _wf.zs3();}
0260
0261
0262
0263
0264 complex<double> zs4() const {return _wf.zs4();}
0265
0266
0267
0268
0269 complex<double> ts1() const {return _wf.ts1();}
0270
0271
0272
0273
0274 complex<double> ts2() const {return _wf.ts2();}
0275
0276
0277
0278
0279 complex<double> ts3() const {return _wf.ts3();}
0280
0281
0282
0283
0284 complex<double> ts4() const {return _wf.ts4();}
0285
0286
0287
0288
0289
0290
0291
0292
0293
0294
0295 void reset(unsigned int ihel) {
0296 calculateWaveFunction(ihel);
0297 }
0298
0299
0300 public:
0301
0302
0303
0304
0305 void transform(const LorentzRotation & r) {
0306 _wf.transform(r);
0307 transformMomentum(r);
0308 }
0309
0310 public:
0311
0312
0313
0314
0315 static void calculateWaveFunctions(vector<LorentzRSSpinor<SqrtEnergy> > & waves,
0316 tPPtr particle,Direction);
0317
0318
0319
0320
0321 static void calculateWaveFunctions(vector<RSSpinorWaveFunction> & waves,
0322 tPPtr particle,Direction);
0323
0324
0325
0326
0327 static void calculateWaveFunctions(vector<RSSpinorWaveFunction> & waves,
0328 const Lorentz5Momentum & momentum,
0329 tcPDPtr parton,Direction);
0330
0331
0332
0333
0334 static void calculateWaveFunctions(vector<LorentzRSSpinor<SqrtEnergy> > & waves,
0335 RhoDMatrix & rho,
0336 tPPtr particle,Direction);
0337
0338
0339
0340
0341 static void calculateWaveFunctions(vector<RSSpinorWaveFunction> & waves,
0342 RhoDMatrix & rho,
0343 tPPtr particle,Direction);
0344
0345
0346
0347
0348 static void constructSpinInfo(const vector<LorentzRSSpinor<SqrtEnergy> > & waves,
0349 tPPtr part,Direction dir, bool time);
0350
0351
0352
0353
0354 static void constructSpinInfo(const vector<RSSpinorWaveFunction> & waves,
0355 tPPtr part,Direction dir, bool time);
0356
0357 private:
0358
0359
0360
0361
0362
0363 void calculateWaveFunction(unsigned int ihel);
0364
0365 private:
0366
0367
0368
0369
0370 LorentzRSSpinor<double> _wf;
0371 };
0372
0373 }
0374 }
0375
0376 #endif