00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #define GAMMA_MATRICES
00025
00026
00027
00028
00029
00030 mdp_complex Gamma_val[4][4], Sigma_val[4][4][4];
00031 int Gamma_idx[4][4], Sigma_idx[4][4][4];
00032 mdp_complex Gamma5_val[4], GammaxGamma5_val[4][4];
00033 int Gamma5_idx[4], GammaxGamma5_idx[4][4];
00034 mdp_complex Gamma_valr[4][4], Sigma_valr[4][4][4];
00035 int Gamma_idxr[4][4], Sigma_idxr[4][4][4];
00036 mdp_complex Gamma5_valr[4], GammaxGamma5_valr[4][4];
00037 int Gamma5_idxr[4], GammaxGamma5_idxr[4][4];
00038 int G16_idx[16][4];
00039 mdp_complex G16_val[16][4];
00040
00041 mdp_matrix Gamma[4], Gamma1, Gamma5, Pleft, Pright, Lambda[9];
00042 mdp_matrix Sigma[4][4], sigma[4];
00043
00057 void define_base_matrices(string convention="FERMILAB") {
00058 begin_function("define_base_matrices");
00059 int i,j,a,b,mu,nu;
00060 for(i=0; i<4; i++) Gamma[i].dimension(4,4);
00061 Gamma5.dimension(4,4);
00062
00063 if(convention=="UKQCD") {
00064 Gamma[0](0,0)=+1;
00065 Gamma[0](1,1)=+1;
00066 Gamma[0](2,2)=-1;
00067 Gamma[0](3,3)=-1;
00068
00069 Gamma[1](0,3)=+I;
00070 Gamma[1](1,2)=+I;
00071 Gamma[1](2,1)=-I;
00072 Gamma[1](3,0)=-I;
00073
00074 Gamma[2](0,3)=+1;
00075 Gamma[2](1,2)=-1;
00076 Gamma[2](2,1)=-1;
00077 Gamma[2](3,0)=+1;
00078
00079 Gamma[3](0,2)=+I;
00080 Gamma[3](1,3)=-I;
00081 Gamma[3](2,0)=-I;
00082 Gamma[3](3,1)=+I;
00083 Gamma5=Gamma[1]*Gamma[2]*Gamma[3]*Gamma[0];
00084 }
00085
00086 if(convention=="FERMILAB") {
00087 Gamma[0](0,0)=+1;
00088 Gamma[0](1,1)=+1;
00089 Gamma[0](2,2)=-1;
00090 Gamma[0](3,3)=-1;
00091
00092 Gamma[1](0,3)=+1;
00093 Gamma[1](1,2)=+1;
00094 Gamma[1](2,1)=+1;
00095 Gamma[1](3,0)=+1;
00096
00097 Gamma[2](0,3)=-I;
00098 Gamma[2](1,2)=+I;
00099 Gamma[2](2,1)=-I;
00100 Gamma[2](3,0)=+I;
00101
00102 Gamma[3](0,2)=+1;
00103 Gamma[3](1,3)=-1;
00104 Gamma[3](2,0)=+1;
00105 Gamma[3](3,1)=-1;
00106
00107 Gamma5=Gamma[0]*Gamma[1]*Gamma[2]*Gamma[3];
00108 }
00109
00110 if(convention=="MILC") {
00111 Gamma[0](0,2)=+1;
00112 Gamma[0](1,3)=+1;
00113 Gamma[0](2,0)=+1;
00114 Gamma[0](3,1)=+1;
00115
00116 Gamma[1](0,3)=+I;
00117 Gamma[1](1,2)=+I;
00118 Gamma[1](2,1)=-I;
00119 Gamma[1](3,0)=-I;
00120
00121 Gamma[2](0,3)=-1;
00122 Gamma[2](1,2)=+1;
00123 Gamma[2](2,1)=+1;
00124 Gamma[2](3,0)=-1;
00125
00126 Gamma[3](0,2)=+I;
00127 Gamma[3](1,3)=-I;
00128 Gamma[3](2,0)=-I;
00129 Gamma[3](3,1)=+I;
00130
00131 Gamma5=Gamma[1]*Gamma[2]*Gamma[3]*Gamma[0];
00132
00133 }
00134
00135 if(convention=="Minkowsky-Dirac") {
00136 Gamma[0](0,0)=+1;
00137 Gamma[0](1,1)=+1;
00138 Gamma[0](2,2)=-1;
00139 Gamma[0](3,3)=-1;
00140
00141 Gamma[1](0,3)=+1;
00142 Gamma[1](1,2)=+1;
00143 Gamma[1](2,1)=-1;
00144 Gamma[1](3,0)=-1;
00145
00146 Gamma[2](0,3)=-I;
00147 Gamma[2](1,2)=+I;
00148 Gamma[2](2,1)=+I;
00149 Gamma[2](3,0)=-I;
00150
00151 Gamma[3](0,2)=+1;
00152 Gamma[3](1,3)=-1;
00153 Gamma[3](2,0)=-1;
00154 Gamma[3](3,1)=+1;
00155 Gamma5=I*Gamma[0]*Gamma[1]*Gamma[2]*Gamma[3];
00156 }
00157
00158 if(convention=="Minkowsky-Chiral") {
00159 Gamma[0](0,3)=-1;
00160 Gamma[0](1,2)=-1;
00161 Gamma[0](2,1)=-1;
00162 Gamma[0](3,0)=-1;
00163
00164 Gamma[1](0,3)=+1;
00165 Gamma[1](1,2)=+1;
00166 Gamma[1](2,1)=-1;
00167 Gamma[1](3,0)=-1;
00168
00169 Gamma[2](0,3)=-I;
00170 Gamma[2](1,2)=+I;
00171 Gamma[2](2,1)=+I;
00172 Gamma[2](3,0)=-I;
00173
00174 Gamma[3](0,2)=+1;
00175 Gamma[3](1,3)=-1;
00176 Gamma[3](2,0)=-1;
00177 Gamma[3](3,1)=+1;
00178 Gamma5=I*Gamma[0]*Gamma[1]*Gamma[2]*Gamma[3];
00179 }
00180
00181 if(convention=="CHIRAL") {
00182 Gamma[0](0,3)=-1;
00183 Gamma[0](1,2)=-1;
00184 Gamma[0](2,1)=-1;
00185 Gamma[0](3,0)=-1;
00186
00187 Gamma[1](0,3)=+I;
00188 Gamma[1](1,2)=+I;
00189 Gamma[1](2,1)=-I;
00190 Gamma[1](3,0)=-I;
00191
00192 Gamma[2](0,3)=+1;
00193 Gamma[2](1,2)=-1;
00194 Gamma[2](2,1)=-1;
00195 Gamma[2](3,0)=+1;
00196
00197 Gamma[3](0,2)=+I;
00198 Gamma[3](1,3)=-I;
00199 Gamma[3](2,0)=-I;
00200 Gamma[3](3,1)=+I;
00201 Gamma5=Gamma[0]*Gamma[1]*Gamma[2]*Gamma[3];
00202 }
00203 Gamma1=mdp_identity(4);
00204 Pleft = mdp_complex(.5,0)*(Gamma[0]*Gamma[0]-Gamma5);
00205 Pright = mdp_complex(.5,0)*(Gamma[0]*Gamma[0]+Gamma5);
00206
00207
00208
00209 for(i=0; i<4; i++)
00210 sigma[i].dimension(2,2);
00211 sigma[0](0,0)=+1;
00212 sigma[0](1,1)=+1;
00213 sigma[1](0,1)=+1;
00214 sigma[1](1,0)=+1;
00215 sigma[2](0,1)=-I;
00216 sigma[2](1,0)=+I;
00217 sigma[3](0,0)=+1;
00218 sigma[3](1,1)=-1;
00219
00220
00221
00222 for(i=0; i<9; i++) Lambda[i].dimension(3,3);
00223
00224 Lambda[0](0,0)=+1;
00225 Lambda[0](1,1)=+1;
00226 Lambda[0](2,2)=+1;
00227
00228 Lambda[1](0,1)=+1;
00229 Lambda[1](1,0)=+1;
00230
00231 Lambda[2](0,1)=-I;
00232 Lambda[2](1,0)=+I;
00233
00234 Lambda[3](0,0)=+1;
00235 Lambda[3](1,1)=-1;
00236
00237 Lambda[4](0,2)=+1;
00238 Lambda[4](2,0)=+1;
00239
00240 Lambda[5](0,2)=-I;
00241 Lambda[5](2,0)=+I;
00242
00243 Lambda[6](1,2)=+1;
00244 Lambda[6](2,1)=+1;
00245
00246 Lambda[7](1,2)=-I;
00247 Lambda[7](2,1)=+I;
00248
00249 Lambda[8](0,0)=pow(3.0,-0.5);
00250 Lambda[8](1,1)=pow(3.0,-0.5);
00251 Lambda[8](2,2)=-2.0*pow(3.0,-0.5);
00252
00253
00254
00255 mdp_matrix tmp;
00256
00257 for(i=0; i<4; i++)
00258 for(j=0; j<4; j++) {
00259 Sigma[i][j].dimension(4,4);
00260 if(i!=j)
00261 Sigma[i][j]=I*Gamma[i]*Gamma[j];
00262 else
00263 Sigma[i][j]=0;
00264 }
00265
00266
00267
00268 for(a=0; a<4; a++)
00269 for(b=0; b<4; b++) {
00270 if(Gamma5(a,b)!=mdp_complex(0,0)) {
00271 Gamma5_val[b]=Gamma5(a,b);
00272 Gamma5_idx[b]=a;
00273 Gamma5_valr[a]=Gamma5(a,b);
00274 Gamma5_idxr[a]=b;
00275 }
00276 }
00277
00278 for(mu=0; mu<4; mu++) {
00279 tmp=Gamma[mu]*Gamma5;
00280 for(a=0; a<4; a++)
00281 for(b=0; b<4; b++) {
00282 if(Gamma[mu](a,b)!=mdp_complex(0,0)) {
00283 Gamma_val[mu][b]=Gamma[mu](a,b);
00284 Gamma_idx[mu][b]=a;
00285 Gamma_valr[mu][a]=Gamma[mu](a,b);
00286 Gamma_idxr[mu][a]=b;
00287 }
00288 if(tmp(a,b)!=mdp_complex(0,0)) {
00289 GammaxGamma5_val[mu][b]=tmp(a,b);
00290 GammaxGamma5_idx[mu][b]=a;
00291 GammaxGamma5_valr[mu][a]=tmp(a,b);
00292 GammaxGamma5_idxr[mu][a]=b;
00293 }
00294 }
00295 }
00296
00297
00298
00299 for(mu=0; mu<4; mu++)
00300 for(nu=0; nu<4; nu++)
00301 for(a=0; a<4; a++)
00302 for(b=0; b<4; b++) {
00303 if(Sigma[mu][nu](a,b)!=mdp_complex(0,0)) {
00304 Sigma_val[mu][nu][b]=Sigma[mu][nu](a,b);
00305 Sigma_idx[mu][nu][b]=a;
00306 Sigma_valr[mu][nu][a]=Sigma[mu][nu](a,b);
00307 Sigma_idxr[mu][nu][a]=b;
00308 }
00309 }
00310
00311
00312
00313 for(a=0; a<4; a++) {
00314 G16_idx[0][a]=a;
00315 G16_val[0][a]=1;
00316 G16_idx[1][a]=Gamma5_idx[a];
00317 G16_val[1][a]=Gamma5_val[a];
00318 for(mu=0; mu<4; mu++) {
00319 G16_idx[2+mu][a]=Gamma_idx[mu][a];
00320 G16_val[2+mu][a]=Gamma_val[mu][a];
00321 G16_idx[6+mu][a]=Gamma_idx[mu][Gamma5_idx[a]];
00322 G16_val[6+mu][a]=Gamma_val[mu][Gamma5_idx[a]]*Gamma5_val[a];
00323 }
00324 for(mu=1; mu<4; mu++) {
00325 G16_idx[9+mu][a]=Gamma_idx[0][Gamma_idx[mu][a]];
00326 G16_val[9+mu][a]=Gamma_val[0][Gamma_idx[mu][a]]*Gamma_val[mu][a];
00327 G16_idx[12+mu][a]=Gamma_idx[0][Gamma_idx[mu][Gamma5_idx[a]]];
00328 G16_val[12+mu][a]=Gamma_val[0][Gamma_idx[mu][Gamma5_idx[a]]]*
00329 Gamma_val[mu][Gamma5_idx[a]]*Gamma5_val[a];
00330 }
00331 }
00332 end_function("define_base_matrices");
00333 }