00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef ThePEG_FermionSpinInfo_H
00010 #define ThePEG_FermionSpinInfo_H
00011
00012
00013 #include "SpinInfo.h"
00014 #include "ThePEG/Helicity/LorentzSpinor.h"
00015 #include "FermionSpinInfo.fh"
00016
00017
00018 namespace ThePEG {
00019 namespace Helicity {
00020
00040 class FermionSpinInfo: public SpinInfo {
00041
00042 public:
00043
00049 FermionSpinInfo() : SpinInfo(PDT::Spin1Half), _productionstates(2),
00050 _currentstates(2), _decaystates(2),
00051 _decaycalc(false) {}
00052
00058 FermionSpinInfo(const Lorentz5Momentum & p, bool time)
00059 : SpinInfo(PDT::Spin1Half, p, time),
00060 _productionstates(2), _currentstates(2), _decaystates(2),
00061 _decaycalc(false) {}
00063
00064 public:
00065
00073 void setBasisState(unsigned int hel,
00074 const LorentzSpinor<SqrtEnergy> & in) const {
00075 assert(hel<2);
00076 _productionstates[hel] = in;
00077 _currentstates [hel] = in;
00078 }
00079
00085 void setDecayState(unsigned int hel,
00086 const LorentzSpinor<SqrtEnergy> & in) const {
00087 assert(hel<2);
00088 _decaycalc = true;
00089 _decaystates[hel] = in;
00090 }
00091
00096 const LorentzSpinor<SqrtEnergy> & getProductionBasisState(unsigned int hel) const {
00097 assert(hel<2);
00098 return _productionstates[hel];
00099 }
00100
00105 const LorentzSpinor<SqrtEnergy> & getCurrentBasisState(unsigned int hel) const {
00106 assert(hel<2);
00107 return _currentstates[hel];
00108 }
00109
00114 const LorentzSpinor<SqrtEnergy> & getDecayBasisState(unsigned int hel) const {
00115 assert(hel<2);
00116 if(!_decaycalc) {
00117 for(unsigned int ix=0;ix<2;++ix) _decaystates[ix]=_currentstates[ix];
00118 _decaycalc=true;
00119 }
00120 return _decaystates[hel];
00121 }
00123
00127 virtual void transform(const LorentzMomentum &,const LorentzRotation &);
00128
00129 public:
00130
00134 static void Init();
00135
00139 virtual EIPtr clone() const;
00140
00141 private:
00142
00146 static NoPIOClassDescription<FermionSpinInfo> initFermionSpinInfo;
00147
00151 FermionSpinInfo & operator=(const FermionSpinInfo &);
00152
00153 private:
00154
00158 mutable vector<LorentzSpinor<SqrtEnergy> > _productionstates;
00159
00163 mutable vector<LorentzSpinor<SqrtEnergy> > _currentstates;
00164
00168 mutable vector<LorentzSpinor<SqrtEnergy> > _decaystates;
00169
00173 mutable bool _decaycalc;
00174
00175 };
00176
00177 }
00178 }
00179
00180 namespace ThePEG {
00181
00188 template <>
00189 struct BaseClassTrait<ThePEG::Helicity::FermionSpinInfo,1>
00190 : public ClassTraitsType {
00192 typedef ThePEG::Helicity::SpinInfo NthBase;
00193 };
00194
00199 template <>
00200 struct ClassTraits<ThePEG::Helicity::FermionSpinInfo>
00201 : public ClassTraitsBase<ThePEG::Helicity::FermionSpinInfo> {
00205 static string className() { return "ThePEG::Helicity::FermionSpinInfo"; }
00206 };
00207
00210 }
00211
00212 #endif