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