File indexing completed on 2026-08-06 09:38:26
0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef THEPEG_Rank3TensorSpinInfo_H
0010 #define THEPEG_Rank3TensorSpinInfo_H
0011
0012
0013 #include "ThePEG/EventRecord/SpinInfo.h"
0014 #include "ThePEG/Helicity/LorentzRank3Tensor.h"
0015 #include "Rank3TensorSpinInfo.fh"
0016
0017 #include <array>
0018
0019 namespace ThePEG {
0020 namespace Helicity {
0021
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 class Rank3TensorSpinInfo: public SpinInfo {
0047
0048 public:
0049
0050
0051
0052
0053
0054
0055 Rank3TensorSpinInfo() : SpinInfo(PDT::Spin3), _decaycalc(false) {}
0056
0057
0058
0059
0060
0061
0062 Rank3TensorSpinInfo(const Lorentz5Momentum & p, bool time)
0063 : SpinInfo(PDT::Spin3, p, time), _decaycalc(false) {}
0064
0065
0066 public:
0067
0068
0069
0070
0071
0072
0073
0074
0075 void setBasisState(unsigned int hel, LorentzRank3Tensor<double> in) const {
0076 assert(hel<7);
0077 _productionstates[hel]=in;
0078 _currentstates [hel]=in;
0079 }
0080
0081
0082
0083
0084
0085
0086 void setDecayState(unsigned int hel, LorentzRank3Tensor<double> in) const {
0087 assert(hel<7);
0088 _decaycalc = true;
0089 _decaystates[hel] = in;
0090 }
0091
0092
0093
0094
0095
0096 const LorentzRank3Tensor<double> & getProductionBasisState(unsigned int hel) const {
0097 assert(hel<7);
0098 return _productionstates[hel];
0099 }
0100
0101
0102
0103
0104
0105 const LorentzRank3Tensor<double> & getCurrentBasisState(unsigned int hel) const {
0106 assert(hel<7);
0107 return _currentstates[hel];
0108 }
0109
0110
0111
0112
0113
0114 const LorentzRank3Tensor<double> & getDecayBasisState(unsigned int hel) const {
0115 assert(hel<7);
0116 if(!_decaycalc) {
0117 for(unsigned int ix=0;ix<7;++ix)
0118 _decaystates[ix]=_currentstates[ix].conjugate();
0119 _decaycalc=true;
0120 }
0121 return _decaystates[hel];
0122 }
0123
0124
0125
0126
0127
0128 virtual void transform(const LorentzMomentum &,const LorentzRotation &);
0129
0130
0131
0132
0133 virtual void undecay() const {
0134 _decaycalc=false;
0135 SpinInfo::undecay();
0136 }
0137
0138
0139
0140
0141 virtual void reset() {
0142 undecay();
0143 _currentstates = _productionstates;
0144 SpinInfo::reset();
0145 }
0146
0147 public:
0148
0149
0150
0151
0152 static void Init();
0153
0154
0155
0156
0157 virtual EIPtr clone() const;
0158
0159 private:
0160
0161
0162
0163
0164 Rank3TensorSpinInfo & operator=(const Rank3TensorSpinInfo &) = delete;
0165
0166 private:
0167
0168
0169
0170
0171 mutable std::array<LorentzRank3Tensor<double>,7> _productionstates;
0172
0173
0174
0175
0176 mutable std::array<LorentzRank3Tensor<double>,7> _decaystates;
0177
0178
0179
0180
0181 mutable std::array<LorentzRank3Tensor<double>,7> _currentstates;
0182
0183
0184
0185
0186 mutable bool _decaycalc;
0187
0188 };
0189
0190 }
0191 }
0192
0193
0194 namespace ThePEG {
0195
0196 }
0197 #endif