File indexing completed on 2026-08-06 09:38:24
0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef ThePEG_Rank3TensorWaveFunction_H
0010 #define ThePEG_Rank3TensorWaveFunction_H
0011
0012
0013
0014 #include "WaveFunctionBase.h"
0015 #include "VectorWaveFunction.h"
0016 #include <ThePEG/Helicity/LorentzRank3Tensor.h>
0017 #include <ThePEG/Helicity/Rank3TensorSpinInfo.h>
0018 #include <ThePEG/EventRecord/Particle.h>
0019 #include <ThePEG/EventRecord/RhoDMatrix.h>
0020
0021 namespace ThePEG {
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 class Rank3TensorWaveFunction : public WaveFunctionBase {
0053
0054 public:
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066 Rank3TensorWaveFunction(const Lorentz5Momentum & p,tcPDPtr part,
0067 const LorentzRank3Tensor<double> & wave,
0068 Direction dir=intermediate)
0069 : WaveFunctionBase(p,part,dir), _wf(wave) {
0070 assert(iSpin()==PDT::Spin3);
0071 }
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081 Rank3TensorWaveFunction(const Lorentz5Momentum & p,tcPDPtr part,
0082 unsigned int ihel,Direction dir)
0083 : WaveFunctionBase(p,part,dir) {
0084 assert(iSpin()==PDT::Spin3);
0085 calculateWaveFunction(ihel);
0086 }
0087
0088
0089
0090
0091
0092
0093
0094 Rank3TensorWaveFunction(const Lorentz5Momentum & p,
0095 tcPDPtr part,Direction dir)
0096 : WaveFunctionBase(p,part,dir), _wf() {
0097 assert(iSpin()==PDT::Spin3);
0098 }
0099
0100
0101
0102
0103 Rank3TensorWaveFunction() {}
0104
0105
0106
0107
0108 Rank3TensorWaveFunction(vector<Rank3TensorWaveFunction> & wave,
0109 tPPtr part,Direction dir,bool time,bool massless,
0110 bool=true) {
0111 calculateWaveFunctions(wave,part,dir,massless);
0112 constructSpinInfo(wave,part,dir,time,massless);
0113 }
0114
0115
0116
0117
0118
0119
0120
0121
0122
0123 Complex operator ()(int i, int j, int k) const {
0124 return _wf(i,j,k);
0125 }
0126
0127
0128
0129
0130 Complex & operator () (int i, int j, int k) {
0131 return _wf(i,j,k);
0132 }
0133
0134
0135
0136
0137 const LorentzRank3Tensor<double> & wave() const {return _wf;}
0138
0139
0140
0141
0142
0143
0144
0145
0146
0147
0148
0149 void reset(unsigned int ihel) {
0150 calculateWaveFunction(ihel);
0151 }
0152
0153
0154 public:
0155
0156
0157
0158
0159 void transform(const LorentzRotation & r) {
0160 _wf.transform(r);
0161 transformMomentum(r);
0162 }
0163
0164 public:
0165
0166
0167
0168
0169 static void calculateWaveFunctions(vector<LorentzRank3Tensor<double> > & waves,
0170 tPPtr particle,Direction,bool massless);
0171
0172
0173
0174
0175 static void calculateWaveFunctions(vector<Rank3TensorWaveFunction> & waves,
0176 tPPtr particle,Direction,bool massless);
0177
0178
0179
0180
0181 static void calculateWaveFunctions(vector<LorentzRank3Tensor<double> > & waves,
0182 RhoDMatrix & rho,
0183 tPPtr particle,Direction,bool massless);
0184
0185
0186
0187
0188 static void calculateWaveFunctions(vector<Rank3TensorWaveFunction> & waves,
0189 RhoDMatrix & rho,
0190 tPPtr particle,Direction,bool massless);
0191
0192
0193
0194
0195 static void constructSpinInfo(const vector<LorentzRank3Tensor<double> > & waves,
0196 tPPtr part,Direction dir, bool time,bool massless);
0197
0198
0199
0200
0201 static void constructSpinInfo(const vector<Rank3TensorWaveFunction> & waves,
0202 tPPtr part,Direction dir, bool time,bool massless);
0203
0204 private:
0205
0206
0207
0208
0209
0210 void calculateWaveFunction(unsigned int ihel);
0211
0212 private:
0213
0214
0215
0216
0217 LorentzRank3Tensor<double> _wf;
0218
0219 };
0220 }
0221 }
0222
0223 #endif