int initStrFun(int mode ) { int l,i; int returnCode=0; if(nin_int!=2) return returnCode; if(mode<=0||mode>2) { sf_alpha=NULL; if(initStrFun(1)||initStrFun(2)) returnCode=2; return returnCode; } i=mode-1; l=sf_num[i]; if(l) { long N; pinf_int(Nsub,i+1,NULL,&N); l--; if(!strFun[l].myParticle(allInP(i+1)) ||!strFun[l].init(i+1,sf_be+i,sf_mass+i)) { char txt[60]; sprintf(txt,"%d-th Stucture function is switched OFF",i+1); sf_num[i]=0; messanykey(10,15,txt); returnCode=2; } } else sf_be[i]=0; return returnCode; }
int initStrFun(int i1) { int l,i=i1-1; nnan[i]=0; sf_be[i]=1; if(nin_int!=2) {sf_alpha[0]=NULL; sf_alpha[1]=NULL; return 0;} if(i1<=0|| i1>2) { sf_alpha[0]=NULL; sf_alpha[1]=NULL; return initStrFun(1)||initStrFun(2); } i=i1-1; l=sf_num[i]; if(l) { l--; if(!strFun[l].myParticle(allInP(i+1)) ||!strFun[l].init(i+1,sf_be+i,sf_mass+i)) { char txt[60]; sprintf(txt,"%d-th Stucture function is switched OFF",i+1); sf_num[i]=0; messanykey(10,15,txt); return 2; } } return 0; }
int loadStrFun(char * name1, char*name2) { int l, i,err=0; char *sf_txt[2]; sf_txt[0]=name1; sf_txt[1]=name2; for(i=0;i<2;i++) sf_num[i]=0; for(i=0;i<2;i++) { int N; pinf_int(Nsub,i+1,NULL,&N); for(l=0;l<MAXFUN;l++) if(strFun[l].myParticle(allInP(i+1)) && strFun[l].readName(i+1,sf_txt[i])) { sf_num[i] = l+1; break; } } for(i=0;i<2;i++) if(strcmp(sf_txt[i],"OFF") && sf_num[i]==0) err++; err+=initStrFun(0); if(err) { printf("ERROR in strfun\n"); if(blind) exit(2); } return 0; }
static int sub_men__(void) { int n, npr, mode=0; char * strmen; void * pscr = NULL; int width,width_; int nprc_old=Nsub; if(nprc_int==1 && !blind ) return 0; width=0; for(npr = 1; npr <= nprc_int; ++npr) for(n=1;n<=nin_int+nout_int;n++) width=MAX(width,strlen(pinf_int(npr,n,NULL,NULL))); width++; width_=6+width*(nin_int+nout_int); strmen=malloc(2+nprc_int*width_); for(n=1;n<=width_*nprc_int;n++) strmen[n]=' '; strmen[0]= width_; strmen[1+nprc_int*width_]=0; for(npr = 1; npr <= nprc_int; ++npr) { for(n=1;n<=nin_int;n++) { char *s=pinf_int(npr, n,NULL,NULL); memcpy(strmen+(npr-1)*width_+2+(n-1)*width ,s,strlen(s)); } memcpy(strmen+(npr-1)*width_+2+(nin_int)*width ," -> ",4); for(n=nin_int+1;n<=nin_int+nout_int;n++) { char* s=pinf_int(npr, n,NULL,NULL); memcpy(strmen+(npr-1)*width_+6+(n-1)*width ,s,strlen(s)); } } menu1(76-width_,6,"",strmen,NULL,&pscr,&mode); free(strmen); if(mode)put_text(&pscr); if(mode && mode!=nprc_old) { Nsub = mode; wrtprc_(); if(nin_int==2) initStrFun(0); return 1; } return 0; }
int loadStrFun(char * name1, char*name2) { int l, i; char *sf_txt[2]; sf_txt[0]=name1; sf_txt[1]=name2; for(i=0;i<2;i++) sf_num[i]=0; for(i=0;i<2;i++) { long N; pinf_int(Nsub,i+1,NULL,&N); for(l=0;l<MAXFUN;l++) if(strFun[l].myParticle(allInP(i+1)) && strFun[l].readName(i+1,sf_txt[i])) { sf_num[i] = l+1; break; } } initStrFun(0); return 0; }
static int in_setting(void) { int mode=1; void * pscr=NULL; double Pcm; void (*f7_tmp)(int)=f3_key[4]; char * f7_mess_tmp= f3_mess[4]; char sf_txt[STRSIZ]; REAL mass[2]; int i; int returnCode=0; if(nin_int == 1) return returnCode; for(i=0;i<2;i++) if(sf_num[i])mass[i]=sf_mass[i];else pinf_int(Nsub,i+1,mass+i,NULL); /* ** menu loop */ for(;;) { char strmen[] = "*" " S.F.1: First_structure_function " " S.F.2: Second_structure_function " " First particle momentum[GeV] = PPP1 " " Second particle momentum[GeV] = PPP2 " " FirstPol " " SecondPol "; Pcm=va_int[0]; strmen[0]=strlen(strmen)/6; if(is_polarized(1,Nsub)) improveStr(strmen,"FirstPol", "Helicity of first particle %.3G",(double)Helicity[0]); else improveStr(strmen,"FirstPol", "First particle unpolarized"); if(is_polarized(2,Nsub)) improveStr(strmen,"SecondPol","Helicity of second particle %.3G",(double)Helicity[1]); else improveStr(strmen,"SecondPol", "Second particle unpolarized"); strFunName(1,sf_txt); improveStr(strmen,"First","%-45.45s", sf_txt); strFunName(2,sf_txt); improveStr(strmen,"Second","%-45.45s",sf_txt); improveStr(strmen,"PPP1","%-10.4G",inP1); improveStr(strmen,"PPP2","%-10.4G",inP2); f3_key[4]=f7_prog; f3_mess[4]="Plot"; menu1(25,7,"",strmen,"n_in_*",&pscr,&mode); f3_key[4]= f7_tmp; f3_mess[4]=f7_mess_tmp; switch(mode) { case 0: for(i=0;i<2;i++) if(sf_num[i])mass[i]=sf_mass[i]; else pinf_int(Nsub,i+1,mass+i,NULL); if((mass[0]==0 && inP1<=0)|| (mass[1]==0 && inP2<=0)) messanykey(10,10,"For massless particle\nmomentum should be positive\n"); else { initStrFun(0); return returnCode; } break; case 1: case 2: if(sf_menu(mode)) { initStrFun(mode); returnCode=returnCode|3; } break; case 3: correctDouble(50,12,"Enter new value ",&inP1,1); returnCode=returnCode|1; break; case 4: correctDouble(50,12,"Enter new value ",&inP2,1); returnCode=returnCode|1; break; case 5: if(is_polarized(1,Nsub)) { double buf=Helicity[0]; int spin2; char txt[60]; (*pinfAux_int)(Nsub,1, &spin2,NULL,NULL,NULL); sprintf(txt, "Enter new value [%.1f,%.1f] :", -(spin2/2.),(spin2/2.)); correctDouble(40,12,txt,&buf,1); if(fabs(2*buf)>spin2) { messanykey( 10,10,"Helicity out of limits"); if(blind) exit(111); }else { Helicity[0]=buf; returnCode=returnCode|1; } } break; case 6: if(is_polarized(2,Nsub)) { double buf=Helicity[1]; int spin2; char txt[60]; (*pinfAux_int)(Nsub,2, &spin2,NULL,NULL,NULL); sprintf(txt, "Enter new value [%.1f,%.1f] :", -(spin2/2.),(spin2/2.)); correctDouble(40,12,txt,&buf,1); if(fabs(2*buf)>spin2) { messanykey( 10,10,"Helicity out of limits"); if(blind) exit(111); }else { Helicity[1]=buf; returnCode=returnCode|1; } } break; } } } /* in_setting */
int qcdmen_(void) { void * pscr=NULL; int mode; int returnCode=0; initStrFun(0); L10:{ char strmen[]="\030" " parton dist. alpha OFF " " alpha(MZ)= ZZZZ " " nf = NF " " order= NNLO " " mb(mb)= MbMb " " Mtop(pole)= Mtp " " Alpha(Q) plot " " Qren = RRR " " Qpdf1= FF1 " " Qpdf2= FF2 " " Qshow= FFS "; if(alphaPDF) { int k=0; //printf("alphaPDF=%d sf_alpha[0]=%p sf_alpha[1]=%p\n", alphaPDF,sf_alpha[0],sf_alpha[1]); switch(alphaPDF) { case 1: if(sf_alpha[0]) k=1; else if(sf_alpha[1]) k=2; break; case 2: if(sf_alpha[1]) k=2; else if(sf_alpha[0]) k=1; break; } if(k) improveStr(strmen,"OFF","pdf%d",k); } improveStr(strmen,"ZZZZ","%.4f", alphaMZ); improveStr(strmen,"NF","%d",alphaNF); if(alphaOrder==1) improveStr(strmen,"NNLO","%-.4s","LO"); else if(alphaOrder==2) improveStr(strmen,"NNLO","%-.4s","NLO"); else alphaOrder=3; improveStr(strmen,"MbMb","%.3f", MbMb); improveStr(strmen,"Mtp","%.2f", Mtp); improveStr(strmen,"RRR","%-.16s", Rscale_str); improveStr(strmen,"FF1","%-.16s", F1scale_str); improveStr(strmen,"FF2","%-.16s", F2scale_str); improveStr(strmen,"FFS","%-.16s", Sscale_str); menu1(54,8,"QCD alpha",strmen,"n_alpha",&pscr,&mode); } switch (mode) { case 0: if(returnCode) init_alpha(); return returnCode; case 1: { char alphaMen[100]="\006" " OFF " " pdf1 " " pdf2 "; int k=0; menu1(54,12,"alpha",alphaMen,"",NULL,&k); if(k)alphaPDF=k-1; if(alphaPDF && !sf_alpha[alphaPDF-1]) messanykey(20,20,"WARNING! This pdf does not define alphaQCD "); } break; case 2: { double alphaMZ_old=alphaMZ; if(correctDouble(3,15,"Enter new value ",&alphaMZ,1)) returnCode=1; if(alphaMZ>0 && alphaMZ<0.3) returnCode=1; else { alphaMZ=alphaMZ_old; messanykey(5,15,"Your input is out of alphaMZ range"); } } break; case 3: { int NF_old=alphaNF; if(correctInt(3,15,"Enter new value ",&alphaNF,1)) { if(alphaNF<=6 && alphaNF>=3) returnCode=1; else { messanykey(5,15,"NF out of range"); alphaNF=NF_old;} } } break; case 4: { char lomen[]="\010" " LO " " NLO " " NNLO "; void *pscrlo=NULL; int k=0; menu1(52,12,"",lomen,"",&pscrlo,&k); if(k) { alphaOrder=k; returnCode=1; put_text(&pscrlo);} } break; case 5: correctDouble(3,15,"Enter new value ",&MbMb,1); break; case 6: correctDouble(3,15,"Enter new value ",&Mtp,1); break; case 7: { void * screen; int i; static double qMin=1, qMax=1000; static int nPoints=100; if(returnCode) init_alpha(); get_text(1,1,maxCol(),maxRow(),&screen); if(correctDouble(40 ,15 ,"Q_min=",&qMin,0)&& qMin>=0.5 && correctDouble(40 ,16 ,"Q_max=",&qMax,0)&& qMax>qMin && correctInt(33,17,"number of points=" ,&nPoints,0) && nPoints>3&& nPoints<=150) { double *f[3]={NULL,NULL,NULL}; double *ff[3]={NULL,NULL,NULL}; char buff[3][100]; char* Y[3]={buff[0],buff[1],buff[2]}; switch(alphaOrder) { case 1: sprintf(Y[0],"MSbar LO"); break; case 2: sprintf(Y[0],"MSbar NLO"); break; case 3: sprintf(Y[0],"MSbar NNLO"); break; default:sprintf(Y[0],"MSbar"); } int N,k; f[0]=(double*) malloc(nPoints*sizeof(double)); int xLog= (qMin>0 && qMax/qMin >10)? 1 : 0; for(i=0;i<nPoints;i++) { double z=(i+0.5)/(double)(nPoints),q; if(xLog) q=pow(qMin,1-z)*pow(qMax,z); else q=qMin*(1-z)+qMax*z; f[0][i]=alpha_0(q); // printf("i=%d %E\n",i,f[0][i]); } N=1; for(k=0;k<2;k++) if(sf_alpha[k]) { char buff[300]; strFunName(k+1,Y[N]); char *p=strstr(Y[N],"(proton"); if(p) p[0]=0; else { p=strstr(Y[N],"(anti-proton"); if(p) p[0]=0; } f[N]=(double*) malloc(nPoints*sizeof(double)); for(i=0;i<nPoints;i++) { double z=(i+0.5)/(double)(nPoints),q; if(xLog) q=pow(qMin,1-z)*pow(qMax,z); else q=qMin*(1-z)+qMax*z; f[N][i]=(*sf_alpha[k])(q); } N++; } // printf("N=%d Y[0]=%s\n Y[1]=%s\n Y[2]=%s\n", N,Y[0],Y[1],Y[2]); // plot_Nar(NULL, "Alpha(Q)", log10(qMin), log10(qMax),"log10(Q/GeV)", nPoints, N, f,ff,Y); plot_Nar(NULL, "Alpha(Q)", qMin,qMax,"Q/GeV", nPoints, xLog, N, f,ff,Y); for(k=0;k<N;k++) free(f[k]); } else messanykey(40,18, " Correct input is \n" " 0.5<= Q_min <Q_max\n" " number of points <=150 and >=4"); put_text(&screen); } break; case 8: { int npos=1,rc; do { char mess[200]; goto_xy(2,12); print("Renorm. scale: "); if(str_redact(Rscale_str,npos,60)==KB_ENTER) returnCode=1; goto_xy(2,12); clr_eol(); rc=initScales(Rscale_str,F1scale_str,F2scale_str,Sscale_str, mess); if(rc) messanykey(10,10,mess); } while(rc); } break; case 9: { int npos=1,rc; do { char mess[200]; goto_xy(2,12); print("Fct1.scale: "); if(str_redact(F1scale_str,npos,60)==KB_ENTER) returnCode=1; goto_xy(2,12); clr_eol(); rc=initScales(Rscale_str,F1scale_str,F2scale_str,Sscale_str, mess); if(rc) messanykey(10,10,mess); } while(rc); } break; case 10: { int npos=1,rc; do { char mess[200]; goto_xy(2,12); print("Fct1.scale: "); if(str_redact(F2scale_str,npos,60)==KB_ENTER) returnCode=1; goto_xy(2,12); clr_eol(); rc=initScales(Rscale_str,F1scale_str,F2scale_str,Sscale_str, mess); if(rc) messanykey(10,10,mess); } while(rc); } break; case 11: { int npos=1,rc; do { char mess[200]; goto_xy(2,12); print("Shworing scale: "); if(str_redact(Sscale_str,npos,60)==KB_ENTER) returnCode=1; goto_xy(2,12); clr_eol(); rc=initScales(Rscale_str,F1scale_str,F2scale_str,Sscale_str,mess); if(rc) messanykey(10,10,mess); } while(rc); } break; } goto L10; }