00001 #include <math.h>
00002 #include <stdio.h>
00003 #include <time.h>
00004
00005 extern void upup_(int *L1,int *L2, int *L3,int *L4,double *s,double *t,double *u,int *iz,double *har,double *hai);
00006 extern void downdown_(int *L1,int *L2, int *L3,int *L4,double *s,double *t,double *u,int *iz,double *har,double *hai);
00007 extern void flagset_(int *iqedx,int *iewx,int *ibornx,int *gfschemex,int *ifggx,double *ncx,double *fcx,double *tlmu2x);
00008 extern void paraget_(double *mtax, double *conhcx, double *pix);
00009 extern void printconsts_(int *pmg);
00010
00011
00012 int iqed=0,iew=1,iborn=0,gfscheme=0,ifgg=1;
00013 double nc=1.0,fc=3.0,tlmu2=1e-5;
00014 int buf=0;
00015 double R[4][4];
00016 double divv;
00017 double borndivv=123.456;
00018
00019 struct compl {double im,re;};
00020
00021 struct compl mul(struct compl x, struct compl y)
00022 {
00023 struct compl c ;
00024 c.re=x.re*y.re-x.im*y.im;
00025 c.im=x.re*y.im+x.im*y.re;
00026 return c;
00027 }
00028
00029 struct compl conju(struct compl x)
00030 {
00031 struct compl c ;
00032 c.re=x.re;
00033 c.im=-x.im;
00034 return c;
00035 }
00036
00037 double abso(struct compl x)
00038 {
00039 return sqrt(x.re*x.re+x.im*x.im);
00040 }
00041
00042
00043 void Rcalc(int flav, double sloop,double costhetloop)
00044 {
00045 int L1,L2,L3,L4,iz,i,j,M3,M4;
00046 double s,t,u;
00047 double cosf,betaf,har,hai,MM,sinf,xnorm,xx;
00048
00049 double mta,conhc,pi;
00050
00051 double sum,sig[4][4][2], Bench[4][4]={0};
00052 double ha[2];
00053 struct compl amp[2][2][2][2][2]={0}, sigma[4][2][2]={0}, c;
00054 sigma[0][0][0].re=1;
00055 sigma[0][1][1].re=1;
00056
00057 sigma[1][0][1].re=1;
00058 sigma[1][1][0].re=1;
00059
00060 sigma[2][0][1].im=-1;
00061 sigma[2][1][0].im= 1;
00062
00063 sigma[3][0][0].re=1;
00064 sigma[3][1][1].re=-1;
00065
00066 s=sloop;
00067 cosf=costhetloop;
00068
00069 paraget_(&mta,&conhc,&pi);
00070 betaf = sqrt(1e0-4e0*mta*mta/s);
00071 t = mta*mta - s/2*(1e0-betaf*cosf);
00072 u = mta*mta - s/2*(1e0+betaf*cosf);
00073 for(iz = 0;iz<2;iz++)
00074 {
00075 for(L1=1;L1<=2;L1++)
00076 {
00077 for(L2=1;L2<=2;L2++)
00078 {
00079 for(L3=1;L3<=2;L3++)
00080 {
00081 for(L4=1;L4<=2;L4++)
00082 {
00083 if(flav==1) downdown_(&L1,&L2,&L3,&L4,&s,&t,&u,&iz,&har,&hai);
00084 else upup_(&L1,&L2,&L3,&L4,&s,&t,&u,&iz,&har,&hai);
00085 amp[L1-1][L2-1][L3-1][L4-1][iz].im=hai;
00086 amp[L1-1][L2-1][L3-1][L4-1][iz].re=har;
00087 }
00088 }
00089 }
00090 }
00091 }
00092 for(i=0;i<4;i++){
00093 for(j=0;j<4;j++){
00094 for(iz = 0;iz<2;iz++)
00095 {
00096 sum = 0e0;
00097 for(L1=1;L1<=2;L1++)
00098 {
00099 for(L2=1;L2<=2;L2++)
00100 {
00101 for(L3=1;L3<=2;L3++)
00102 {
00103 for(L4=1;L4<=2;L4++)
00104 for(M3=1;M3<=2;M3++)
00105 for(M4=1;M4<=2;M4++)
00106 {
00107 c=mul(mul(mul(amp[L1-1][L2-1][L3-1][L4-1][iz],conju(amp[L1-1][L2-1][M3-1][M4-1][iz])),
00108 sigma[i][L3-1][M3-1]),(sigma[j][M4-1][L4-1]));
00109 sum=sum+ c.re;
00110 }
00111 }
00112 }
00113 }
00114 sig[i][j][iz]=sum;
00115 }
00116 R[i][j] = conhc *
00117 nc/fc*1e0/2.0/s *
00118 1e0/4 *
00119 (sig[i][j][1] - sig[i][j][0]) *
00120 betaf/16/pi;
00121 if(i==0 && j==0)
00122 divv=R[0][0];
00123
00124 R[i][j]=R[i][j]/divv;
00125 if(i!=0) R[i][j] =- R[i][j];
00126
00127 }
00128 }
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142 for(i=0;i<4;i++)
00143 {
00144 xx= R[i][1];
00145 R[i][1] =- R[i][2];
00146 R[i][2] = xx;
00147 }
00148
00149
00150 for(j=0;j<4;j++)
00151 {
00152 xx= R[1][j];
00153 R[1][j] = R[2][j];
00154 R[2][j] =- xx;
00155 }
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197 }
00198
00199 int main(int argc, char **argv){
00200 double sloop=100;
00201 double costhetloop=0.0;
00202 int i,j,k,l;
00203 int NS1=100, NS2=100, NS3=100, NCOS=21;
00204 double smin1=log(6*6);
00205 double smax1=log(17000*17000);
00206
00207 double smin2=85*85;
00208 double smax2=110*110;
00209
00210 double smin3=160*160;
00211 double smax3=220*220;
00212 int flav;
00213 double step;
00214 FILE *f=NULL,*d=NULL,*dd=NULL;
00215 unsigned char c;
00216 char ftime[255],path[255];
00217 time_t utime;
00218 if (argc > 1) flav=atoi(argv[1]);
00219 else flav=1;
00220 if (flav==1) f=fopen("table1-1.txt","w");
00221 else f=fopen("table2-2.txt","w");
00222
00223 flagset_(&iqed,&iew,&iborn,&gfscheme,&ifgg,&nc,&fc,&tlmu2);
00224 printconsts_(&buf);
00225 dd=fopen("SancLib_v1_02/lib.txt","r");
00226 if(!dd) { printf("No info file on electrowek library SANC (file SancLib_v1_02/lib.txt missing), we better stop \n"); return -1; }
00227 d=fopen("var.dump","r");
00228 if(!d) { printf("No initialization variables of SANC (file var.dump missing), we better stop \n"); return -1; }
00229
00230 fprintf(f,"Dimensions: %i %i %i %i\n",NS1,NS2,NS3,NCOS);
00231 fprintf(f,"Ranges: %.5f %.5f %.5f %.5f %.5f %.5f \n",smin1,smax1,smin2,smax2,smin3,smax3);
00232 getcwd(path,255);
00233 time(&utime);
00234 strftime(ftime,255,"%d %b %Y, %H:%M:%S, GMT%z",localtime(&utime));
00235 fprintf(f,"Timestamp: %s\n",ftime);
00236 fprintf(f,"Path: %s\n\n",path);
00237
00238 while(1)
00239 {
00240 c=0;
00241 fscanf(dd,"%c",&c);
00242 if(c==0) break;
00243 fprintf(f,"%c",c);
00244 }
00245
00246 while(1)
00247 {
00248 c=0;
00249 fscanf(d,"%c",&c);
00250 if(c==0) break;
00251 fprintf(f,"%c",c);
00252 }
00253 fprintf(f,"\nBeginRange1\n");
00254 printf("\nBeginRange1\n");
00255
00256 step=(smax1-smin1)/(NS1-1);
00257 for(i=0;i<NS1;i++)
00258 {
00259 sloop=exp(smin1+i*step);
00260 printf("%.5f \n",sloop);
00261 for(j=0;j<NCOS;j++)
00262 {
00263 costhetloop=-1.+1.0/NCOS+j*2./(NCOS);
00264
00265 iew=0;
00266 flagset_(&iqed,&iew,&iborn,&gfscheme,&ifgg,&nc,&fc,&tlmu2);
00267 Rcalc(flav,sloop,costhetloop);
00268 borndivv=divv;
00269
00270 iew=1;
00271 flagset_(&iqed,&iew,&iborn,&gfscheme,&ifgg,&nc,&fc,&tlmu2);
00272 Rcalc(flav,sloop,costhetloop);
00273
00274 for(k=0;k<4;k++)
00275 for(l=0;l<4;l++)
00276 fprintf(f,"%.5f ",R[k][l]);
00277 fprintf(f,"%.8f ",divv);
00278 fprintf(f,"%.8f\n",borndivv);
00279
00280 }
00281 }
00282
00283
00284 fprintf(f,"\nBeginRange2\n");
00285 printf("\nBeginRange2\n");
00286
00287 step=(smax2-smin2)/(NS2-1);
00288 for(i=0;i<NS2;i++)
00289 {
00290 sloop=(smin2+i*step);
00291 printf("%.5f \n",sloop);
00292 for(j=0;j<NCOS;j++)
00293 {
00294 costhetloop=-1.+1.0/NCOS+j*2./(NCOS);
00295
00296 iew=0;
00297 flagset_(&iqed,&iew,&iborn,&gfscheme,&ifgg,&nc,&fc,&tlmu2);
00298 Rcalc(flav,sloop,costhetloop);
00299 borndivv=divv;
00300
00301 iew=1;
00302 flagset_(&iqed,&iew,&iborn,&gfscheme,&ifgg,&nc,&fc,&tlmu2);
00303 Rcalc(flav,sloop,costhetloop);
00304
00305 for(k=0;k<4;k++)
00306 for(l=0;l<4;l++)
00307 fprintf(f,"%.5f ",R[k][l]);
00308 fprintf(f,"%.5f ",divv);
00309 fprintf(f,"%.5f \n",borndivv);
00310 }
00311 }
00312
00313
00314 fprintf(f,"\nBeginRange3\n");
00315 printf("\nBeginRange3\n");
00316
00317 step=(smax3-smin3)/(NS3-1);
00318 for(i=0;i<NS3;i++)
00319 {
00320 sloop=(smin3+i*step);
00321 printf("%.5f \n",sloop);
00322 for(j=0;j<NCOS;j++)
00323 {
00324 costhetloop=-1.+1.0/NCOS+j*2./(NCOS);
00325
00326 iew=0;
00327 flagset_(&iqed,&iew,&iborn,&gfscheme,&ifgg,&nc,&fc,&tlmu2);
00328 Rcalc(flav,sloop,costhetloop);
00329 borndivv=divv;
00330
00331 iew=1;
00332 flagset_(&iqed,&iew,&iborn,&gfscheme,&ifgg,&nc,&fc,&tlmu2);
00333 Rcalc(flav,sloop,costhetloop);
00334
00335 for(k=0;k<4;k++)
00336 for(l=0;l<4;l++)
00337 fprintf(f,"%.5f ",R[k][l]);
00338 fprintf(f,"%.5f ",divv);
00339 fprintf(f,"%.5f \n",borndivv);
00340 }
00341 }
00342 fprintf(f,"End\n");
00343 fclose(f);
00344 return 0;
00345 }