00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef EVTDIRACSPINOR_HH
00022 #define EVTDIRACSPINOR_HH
00023
00024 #include "EvtGenBase/EvtComplex.hh"
00025
00026
00027 #include "EvtGenBase/EvtVector4R.hh"
00028 #include "EvtGenBase/EvtVector3R.hh"
00029
00030 class EvtTensor4C;
00031 class EvtVector4C;
00032 class EvtDiracSpinor ;
00033 EvtDiracSpinor rotateEuler(const EvtDiracSpinor& sp,
00034 double alpha,double beta,double gamma);
00035 EvtDiracSpinor boostTo(const EvtDiracSpinor& sp,
00036 const EvtVector4R p4);
00037 EvtDiracSpinor boostTo(const EvtDiracSpinor& sp,
00038 const EvtVector3R boost);
00039 EvtVector4C EvtLeptonVACurrent(const EvtDiracSpinor& d,const EvtDiracSpinor& dp);
00040 EvtVector4C EvtLeptonVCurrent(const EvtDiracSpinor& d,const EvtDiracSpinor& dp);
00041 EvtVector4C EvtLeptonACurrent(const EvtDiracSpinor& d,const EvtDiracSpinor& dp);
00042 EvtComplex EvtLeptonSCurrent(const EvtDiracSpinor& d,const EvtDiracSpinor& dp);
00043 EvtComplex EvtLeptonPCurrent(const EvtDiracSpinor& d,const EvtDiracSpinor& dp);
00044 EvtTensor4C EvtLeptonTCurrent(const EvtDiracSpinor& d,const EvtDiracSpinor& dp);
00045 EvtTensor4C EvtLeptonTg5Current(const EvtDiracSpinor& d,const EvtDiracSpinor& dp);
00046 inline EvtDiracSpinor operator+(const EvtDiracSpinor& u1, const EvtDiracSpinor& u2);
00047 inline EvtDiracSpinor operator-(const EvtDiracSpinor& u1, const EvtDiracSpinor& u2);
00048 std::ostream& operator<<(std::ostream& s, const EvtDiracSpinor& c);
00049 EvtDiracSpinor operator*(const EvtComplex& c, const EvtDiracSpinor& d);
00050
00051
00052 class EvtDiracSpinor {
00053
00054 friend EvtDiracSpinor rotateEuler(const EvtDiracSpinor& sp,
00055 double alpha,double beta,double gamma);
00056 friend EvtDiracSpinor boostTo(const EvtDiracSpinor& sp,
00057 const EvtVector4R p4);
00058 friend EvtDiracSpinor boostTo(const EvtDiracSpinor& sp,
00059 const EvtVector3R boost);
00060 friend EvtVector4C EvtLeptonVACurrent
00061 (const EvtDiracSpinor& d,const EvtDiracSpinor& dp);
00062 friend EvtVector4C EvtLeptonVCurrent
00063 (const EvtDiracSpinor& d,const EvtDiracSpinor& dp);
00064 friend EvtVector4C EvtLeptonACurrent
00065 (const EvtDiracSpinor& d,const EvtDiracSpinor& dp);
00066 friend EvtComplex EvtLeptonSCurrent
00067 (const EvtDiracSpinor& d,const EvtDiracSpinor& dp);
00068 friend EvtComplex EvtLeptonPCurrent
00069 (const EvtDiracSpinor& d,const EvtDiracSpinor& dp);
00070 friend EvtTensor4C EvtLeptonTCurrent
00071 (const EvtDiracSpinor& d,const EvtDiracSpinor& dp);
00072 friend EvtTensor4C EvtLeptonTg5Current
00073 (const EvtDiracSpinor& d,const EvtDiracSpinor& dp);
00074 friend EvtDiracSpinor operator+(const EvtDiracSpinor& u1,
00075 const EvtDiracSpinor& u2);
00076 friend EvtDiracSpinor operator-(const EvtDiracSpinor& u1,
00077 const EvtDiracSpinor& u2);
00078 friend EvtDiracSpinor operator*(const EvtComplex& c,
00079 const EvtDiracSpinor& d);
00080
00081 friend std::ostream& operator<<(std::ostream& s, const EvtDiracSpinor& c);
00082
00083 public:
00084
00085 inline EvtDiracSpinor();
00086 EvtDiracSpinor(const EvtComplex& sp0,const EvtComplex& sp1,
00087 const EvtComplex& sp2,const EvtComplex& sp3);
00088 virtual ~EvtDiracSpinor();
00089 inline EvtDiracSpinor(const EvtDiracSpinor& dspinor);
00090 inline EvtDiracSpinor& operator=(const EvtDiracSpinor& dspinor);
00091
00092 inline EvtDiracSpinor& operator+=(const EvtDiracSpinor& u2);
00093 inline EvtDiracSpinor& operator-=(const EvtDiracSpinor& u2);
00094
00095 void set(const EvtComplex& sp0,const EvtComplex& sp1,
00096 const EvtComplex& sp2,const EvtComplex& sp3);
00097 void set_spinor(int i,const EvtComplex& sp);
00098 const EvtComplex& get_spinor(int i) const;
00099 EvtDiracSpinor conj() const;
00100 void applyRotateEuler(double alpha,double beta,double gamma);
00101 void applyBoostTo(const EvtVector4R& p4);
00102 void applyBoostTo(const EvtVector3R& boost);
00103 EvtDiracSpinor adjoint() const;
00104
00105 private:
00106
00107 EvtComplex spinor[4];
00108
00109 };
00110
00111 EvtDiracSpinor::EvtDiracSpinor(){
00112
00113 spinor[0]=EvtComplex(); spinor[1]=EvtComplex();
00114 spinor[2]=EvtComplex(); spinor[3]=EvtComplex();
00115
00116 }
00117
00118 EvtDiracSpinor::EvtDiracSpinor(const EvtDiracSpinor& dspinor){
00119
00120 spinor[0]=dspinor.spinor[0];
00121 spinor[1]=dspinor.spinor[1];
00122 spinor[2]=dspinor.spinor[2];
00123 spinor[3]=dspinor.spinor[3];
00124
00125 }
00126
00127 EvtDiracSpinor& EvtDiracSpinor::operator=(const EvtDiracSpinor& dspinor){
00128
00129 spinor[0]=dspinor.spinor[0];
00130 spinor[1]=dspinor.spinor[1];
00131 spinor[2]=dspinor.spinor[2];
00132 spinor[3]=dspinor.spinor[3];
00133
00134 return *this;
00135
00136 }
00137
00138 inline EvtDiracSpinor& EvtDiracSpinor::operator+=(const EvtDiracSpinor& u2){
00139
00140 spinor[0]+=u2.spinor[0];
00141 spinor[1]+=u2.spinor[1];
00142 spinor[2]+=u2.spinor[2];
00143 spinor[3]+=u2.spinor[3];
00144
00145 return *this;
00146 }
00147
00148 inline EvtDiracSpinor operator+(const EvtDiracSpinor& u1,
00149 const EvtDiracSpinor& u2){
00150
00151 return EvtDiracSpinor(u1)+=u2;
00152
00153 }
00154
00155 inline EvtDiracSpinor& EvtDiracSpinor::operator-=(const EvtDiracSpinor& u2){
00156
00157 spinor[0]-=u2.spinor[0];
00158 spinor[1]-=u2.spinor[1];
00159 spinor[2]-=u2.spinor[2];
00160 spinor[3]-=u2.spinor[3];
00161
00162 return *this;
00163 }
00164
00165 inline EvtDiracSpinor operator-(const EvtDiracSpinor& u1,
00166 const EvtDiracSpinor& u2){
00167
00168 return EvtDiracSpinor(u1)-=u2;
00169
00170 }
00171
00172 #endif
00173
00174