00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef THEPEG_RSFermionSpinInfo_H
00010 #define THEPEG_RSFermionSpinInfo_H
00011
00012
00013 #include "SpinInfo.h"
00014 #include "ThePEG/Helicity/LorentzRSSpinor.h"
00015 #include "RSFermionSpinInfo.fh"
00016
00017 namespace ThePEG {
00018 namespace Helicity {
00019
00042 class RSFermionSpinInfo: public SpinInfo {
00043
00044 public:
00045
00051 RSFermionSpinInfo() : SpinInfo(PDT::Spin3Half), _productionstates(4),
00052 _decaystates(4), _currentstates(4),
00053 _decaycalc(false) {}
00054
00060 RSFermionSpinInfo(const Lorentz5Momentum & p,bool time)
00061 : SpinInfo(PDT::Spin3Half, p, time),
00062 _productionstates(4), _decaystates(4), _currentstates(4),
00063 _decaycalc(false) {}
00065
00066 public:
00067
00075 void setBasisState(unsigned int hel,
00076 const LorentzRSSpinor<SqrtEnergy> & in) const {
00077 assert(hel<4);
00078 _productionstates[hel] = in;
00079 _currentstates [hel] = in;
00080 }
00081
00087 void setDecayState(unsigned int hel,
00088 const LorentzRSSpinor<SqrtEnergy> & in) const {
00089 assert(hel<4);
00090 _decaycalc = true;
00091 _decaystates[hel] = in;
00092 }
00093
00098 const LorentzRSSpinor<SqrtEnergy> & getProductionBasisState(unsigned int hel) const {
00099 assert(hel<4);
00100 return _productionstates[hel];
00101 }
00102
00107 const LorentzRSSpinor<SqrtEnergy> & getDecayBasisState(unsigned int hel) const {
00108 assert(hel<4);
00109 if(!_decaycalc) {
00110 for(unsigned int ix=0;ix<4;++ix) _decaystates[ix]=_currentstates[ix];
00111 _decaycalc=true;
00112 }
00113 return _decaystates[hel];
00114 }
00115
00119 virtual void transform(const LorentzMomentum &,const LorentzRotation &);
00121
00122 public:
00123
00127 static void Init();
00128
00132 virtual EIPtr clone() const;
00133
00134 private:
00135
00139 static NoPIOClassDescription<RSFermionSpinInfo> initRSFermionSpinInfo;
00140
00144 RSFermionSpinInfo & operator=(const RSFermionSpinInfo &);
00145
00146 private:
00147
00151 mutable vector<LorentzRSSpinor<SqrtEnergy> > _productionstates;
00152
00156 mutable vector<LorentzRSSpinor<SqrtEnergy> > _decaystates;
00157
00161 mutable vector<LorentzRSSpinor<SqrtEnergy> > _currentstates;
00162
00166 mutable bool _decaycalc;
00167
00168 };
00169
00170 }
00171 }
00172
00173
00174 #include "ThePEG/Utilities/ClassTraits.h"
00175
00176 namespace ThePEG {
00177
00184 template <>
00185 struct BaseClassTrait<ThePEG::Helicity::RSFermionSpinInfo,1> {
00187 typedef ThePEG::Helicity::SpinInfo NthBase;
00188 };
00189
00194 template <>
00195 struct ClassTraits<ThePEG::Helicity::RSFermionSpinInfo>
00196 : public ClassTraitsBase<ThePEG::Helicity::RSFermionSpinInfo> {
00200 static string className() { return "ThePEG::Helicity::RSFermionSpinInfo"; }
00201 };
00202
00205 }
00206
00207 #endif