inlib
1.2.0
|
00001 // Copyright (C) 2010, Guy Barrand. All rights reserved. 00002 // See the file inlib.license for terms. 00003 00004 #ifndef inlib_a4z 00005 #define inlib_a4z 00006 00007 #include "a4" 00008 00009 #include <complex> 00010 00011 namespace inlib { 00012 namespace a4 { 00013 00014 inline sqm< std::complex<double> > to_complex(const sqm<double>& a_from) { 00015 typedef std::complex<double> z; 00016 sqm< std::complex<double> > to; 00017 const std::vector<double>& fvec = a_from.vector(); 00018 std::vector<z>& tvec = to.vector(); 00019 typedef std::vector<double>::const_iterator const_vec_it_t; 00020 const_vec_it_t fit = fvec.begin(); 00021 typedef std::vector<z>::iterator vec_it_t; 00022 vec_it_t tit = tvec.begin(); 00023 for(;fit!=fvec.end();++fit,++tit) *tit = *fit; 00024 return to; 00025 } 00026 00027 }} 00028 00029 namespace inlib { 00030 namespace a4z { 00031 00035 00036 class id : public a4::sqm< std::complex<double> > { 00037 public: 00038 id(){ 00039 typedef std::complex<double> z; 00040 v00(z(1,0)); 00041 v11(z(1,0)); 00042 v22(z(1,0)); 00043 v33(z(1,0)); 00044 } 00045 }; 00046 00047 // Standard Dirac matrices : 00048 // D0 D1 D2 D3 00049 // 1 0 0 0 0 0 0 1 0 0 0 -i 0 0 1 0 00050 // 0 1 0 0 0 0 1 0 0 0 i 0 0 0 0 -1 00051 // 0 0 -1 0 0 -1 0 0 0 i 0 0 -1 0 0 0 00052 // 0 0 0 -1 -1 0 0 0 -i 0 0 0 0 1 0 0 00053 class D0 : public a4::sqm< std::complex<double> > { 00054 public: 00055 D0(){ 00056 v00( 1); 00057 v11( 1); 00058 v22(-1); 00059 v33(-1); 00060 } 00061 }; 00062 class D1 : public a4::sqm< std::complex<double> > { 00063 public: 00064 D1(){ 00065 v03( 1); 00066 v12( 1); 00067 v21(-1); 00068 v30(-1); 00069 } 00070 }; 00071 class D2 : public a4::sqm< std::complex<double> > { 00072 public: 00073 D2(){ 00074 typedef std::complex<double> z; 00075 z i(0,1); 00076 v03(-i); 00077 v12( i); 00078 v21( i); 00079 v30(-i); 00080 } 00081 }; 00082 class D3 : public a4::sqm< std::complex<double> > { 00083 public: 00084 D3(){ 00085 v02( 1); 00086 v13(-1); 00087 v20(-1); 00088 v31( 1); 00089 } 00090 }; 00091 00092 // Lorentz rep (1/2,1/2) 00093 // HH1 HH2 HH3 00094 // 0 1 1 0 0 -i -i 0 2 0 0 0 00095 // 1 0 0 1 i 0 0 -i 0 0 0 0 00096 // 1 0 0 1 i 0 0 -i 0 0 0 0 00097 // 0 1 1 0 0 i i 0 0 0 0 -2 00098 // the uppers must be multiplied by : -i*0.5 00099 00100 // HH4 HH5 HH6 00101 // 0 0 0 0 0 i -i 0 0 -1 1 0 00102 // 0 2 0 0 -i 0 0 -i -1 0 0 1 00103 // 0 0 -2 0 i 0 0 i 1 0 0 -1 00104 // 0 0 0 0 0 i -i 0 0 1 -1 0 00105 // the uppers must be multiplied by : 0.5 00106 00107 class HH1 : public a4::sqm< std::complex<double> > { 00108 public: 00109 HH1(){ 00110 typedef std::complex<double> z; 00111 z i(0,1); 00112 v01( 1); 00113 v02( 1); 00114 v10( 1); 00115 v13( 1); 00116 v20( 1); 00117 v23( 1); 00118 v31( 1); 00119 v32( 1); 00120 multiply(-i*0.5); 00121 } 00122 }; 00123 class HH2 : public a4::sqm< std::complex<double> > { 00124 public: 00125 HH2(){ 00126 typedef std::complex<double> z; 00127 z i(0,1); 00128 v01(-i); 00129 v02(-i); 00130 v10( i); 00131 v13(-i); 00132 v20( i); 00133 v23(-i); 00134 v31( i); 00135 v32( i); 00136 multiply(-i*0.5); 00137 } 00138 }; 00139 class HH3 : public a4::sqm< std::complex<double> > { 00140 public: 00141 HH3(){ 00142 typedef std::complex<double> z; 00143 z i(0,1); 00144 v00( 2); 00145 v11( 0); 00146 v22( 0); 00147 v33(-2); 00148 multiply(-i*0.5); 00149 } 00150 }; 00151 class HH4 : public a4::sqm< std::complex<double> > { 00152 public: 00153 HH4(){ 00154 v00( 0); 00155 v11( 2); 00156 v22(-2); 00157 v33( 0); 00158 multiply(0.5); 00159 } 00160 }; 00161 class HH5 : public a4::sqm< std::complex<double> > { 00162 public: 00163 HH5(){ 00164 typedef std::complex<double> z; 00165 z i(0,1); 00166 v01( i); 00167 v02(-i); 00168 v10(-i); 00169 v13(-i); 00170 v20( i); 00171 v23( i); 00172 v31( i); 00173 v32(-i); 00174 multiply(0.5); 00175 } 00176 }; 00177 class HH6 : public a4::sqm< std::complex<double> > { 00178 public: 00179 HH6(){ 00180 typedef std::complex<double> z; 00181 z i(0,1); 00182 v01(-1); 00183 v02( 1); 00184 v10(-1); 00185 v13( 1); 00186 v20( 1); 00187 v23(-1); 00188 v31( 1); 00189 v32(-1); 00190 multiply(0.5); 00191 } 00192 }; 00193 00194 }} 00195 00196 #endif