00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef THEPEG_TensorSpinInfo_H
00010 #define THEPEG_TensorSpinInfo_H
00011
00012
00013 #include "SpinInfo.h"
00014 #include "ThePEG/Helicity/LorentzTensor.h"
00015 #include "TensorSpinInfo.fh"
00016
00017
00018 namespace ThePEG {
00019 namespace Helicity {
00020
00042 class TensorSpinInfo: public SpinInfo {
00043
00044 public:
00045
00051 TensorSpinInfo() : SpinInfo(PDT::Spin2),_productionstates(5),
00052 _decaystates(5), _currentstates(5),
00053 _decaycalc(false) {}
00054
00060 TensorSpinInfo(const Lorentz5Momentum & p,bool time)
00061 : SpinInfo(PDT::Spin2, p, time),
00062 _productionstates(5), _decaystates(5), _currentstates(5),
00063 _decaycalc(false) {}
00065
00066 public:
00067
00075 void setBasisState(unsigned int hel, LorentzTensor<double> in) const {
00076 assert(hel<5);
00077 _productionstates[hel]=in;
00078 _currentstates [hel]=in;
00079 }
00080
00086 void setDecayState(unsigned int hel, LorentzTensor<double> in) const {
00087 assert(hel<5);
00088 _decaycalc = true;
00089 _decaystates[hel] = in;
00090 }
00091
00096 const LorentzTensor<double> & getProductionBasisState(unsigned int hel) const {
00097 assert(hel<5);
00098 return _productionstates[hel];
00099 }
00100
00105 const LorentzTensor<double> & getDecayBasisState(unsigned int hel) const {
00106 assert(hel<5);
00107 if(!_decaycalc) {
00108 for(unsigned int ix=0;ix<5;++ix)
00109 _decaystates[ix]=_currentstates[ix].conjugate();
00110 _decaycalc=true;
00111 }
00112 return _decaystates[hel];
00113 }
00115
00119 virtual void transform(const LorentzMomentum &,const LorentzRotation &);
00120
00121 public:
00122
00126 static void Init();
00127
00131 virtual EIPtr clone() const;
00132
00133 private:
00134
00138 static NoPIOClassDescription<TensorSpinInfo> initTensorSpinInfo;
00139
00143 TensorSpinInfo & operator=(const TensorSpinInfo &);
00144
00145 private:
00146
00150 mutable vector<LorentzTensor<double> > _productionstates;
00151
00155 mutable vector<LorentzTensor<double> > _decaystates;
00156
00160 mutable vector<LorentzTensor<double> > _currentstates;
00161
00165 mutable bool _decaycalc;
00166
00167 };
00168
00169 }
00170 }
00171
00172
00173 namespace ThePEG {
00174
00181 template <>
00182 struct BaseClassTrait<ThePEG::Helicity::TensorSpinInfo,1>
00183 : public ClassTraitsType {
00185 typedef ThePEG::Helicity::SpinInfo NthBase;
00186 };
00187
00192 template <>
00193 struct ClassTraits<ThePEG::Helicity::TensorSpinInfo>
00194 : public ClassTraitsBase<ThePEG::Helicity::TensorSpinInfo> {
00198 static string className() { return "ThePEG::Helicity::TensorSpinInfo"; }
00199 };
00200
00203 }
00204
00205 #endif