static void drawgraph(void) { int n=101; double f[202]; calccoef(); if(err_code) { messanykey(10,10,"Error in kinematics"); return; } do { if (correctInt(56,8,"Number of points=",&n,1)) { if (n < 3) messanykey(56,8,"Too few points"); if (n > 201) messanykey(56,8,"Too many points"); } else return; } while (n < 3 || n > 201 ); if( !fillseq(n,f)) { messanykey(10,10,"Error in calculation"); return; } plot_1(cos1,cos2,n,f,NULL,procname,"cos(p1,p3)", "Diff. cross section [pb]"); }
static void f5_key_prog(int x) { int kmenu=1; void * pscr=NULL; while(kmenu) { char strmen[]="\040" " Virtual W/Z decays OF5" " Parallelization nCORES" " Allow weighted events OF_ "; if(VWdecay) improveStr(strmen,"OF5","ON "); else improveStr(strmen,"OF5","OFF"); improveStr(strmen,"nCORES","%d",nPROCSS); if(regenEvents) improveStr(strmen,"OF_","OFF"); else improveStr(strmen,"OF_","ON"); menu1(20,18,"Switches",strmen,"n_switch_*",&pscr,&kmenu); if(kmenu==1) { VWdecay=!VWdecay; if(checkParam()>0){VWdecay=!VWdecay;checkParam();}; } else if(kmenu==2) { char mess[40]; sprintf(mess,"There are %d processors. To use ", (int) sysconf(_SC_NPROCESSORS_ONLN)); correctInt(20,22,mess,&nPROCSS,1); } else if(kmenu==3) regenEvents=!regenEvents; } VZdecay=VWdecay; }
static void f7_prog(int mode) { int pos=1; void *pscr=NULL; f3_key[4]=NULL; for(;;) { static double xMin=1E-5, xMax=1.0, q0 = 91.187,qMin=1.5,qMax=1.E4,x0=0.1; static int nPoints=100; static int both=1,LOG=1; int on[2]={0,0}; char strmen[]="\030" " x-Min = XXX " " x-Max = YYY " " q-Min = QXX " " q-Max = QYY " " Npoints = NNN " " q0 = QQQ " " x0 = xXX " " log scale argument LOG " " Display plot x*F(x) " " Display plot F(x) " " Display plot F(Q) " " both PDF1&PDF2 BOTH "; improveStr(strmen,"XXX","%.3E",xMin); improveStr(strmen,"YYY","%.3E",xMax); improveStr(strmen,"QXX","%.3E",qMin); improveStr(strmen,"QYY","%.3E",qMax); improveStr(strmen,"NNN","%d",nPoints); improveStr(strmen,"QQQ","%.2fGeV",q0); improveStr(strmen,"xXX","%.2E",x0); if(LOG) improveStr(strmen,"LOG","ON"); else improveStr(strmen,"LOG","OFF"); if(mode>2) both=1; if(both){ on[0]=1,on[1]=1;} else on[mode-1]=1; if(!sf_num[0]) on[0]=0; if(!sf_num[1]) on[1]=0; if(sf_num[0]==0 && sf_num[1]==0) return; if(both) improveStr(strmen,"BOTH","ON"); else improveStr(strmen,"BOTH","OFF"); menu1(54,10,"PDF plots",strmen,"n_pdf_plots_*",&pscr,&pos); switch(pos) { case 0: f3_key[4]=f7_prog; return; case 1: correctDouble(55,18,"xMin = ",&xMin,1); break; case 2: correctDouble(55,18,"xMax = ",&xMax,1); break; case 3: correctDouble(55,18,"qMin = ",&qMin,1); break; case 4: correctDouble(55,18,"qMax = ",&qMax,1); break; case 5: correctInt(50,18,"nPoints = ",&nPoints,1); break; case 6: correctDouble(50,18,"q0 = ",&q0,1); break; case 7: correctDouble(50,18,"x0 = ",&x0,1); break; case 8: LOG=!LOG; break; case 9: case 10: case 11: { double z1,z2; if(pos==11) {z1=qMin;z2=qMax;} else {z1=xMin;z2=xMax;} if(z1>=0 && (!LOG||(z2/z1>10) ) && z2>z1 && nPoints>=3 && nPoints<=150 ) { int l,i; double * df[2]={NULL,NULL}; double f[2][250]; char p_name[2][100], title[100]; char*xName; void * screen; get_text(1,1,maxCol(),maxRow(),&screen); // if(LOG) {z1=log10(z1); z2=log10(z2);} for(l=0;l<2; l++) if(on[l]) { double be=sf_be[l]; strFunName(l+1,p_name[l]); sprintf(p_name[l]+strlen(p_name[l]),"(%s)", pinf_int(Nsub,l+1,NULL,NULL)); // sprintf(p_name[l],"pdf%d(%s)", l+1,pinf_int(Nsub,l+1,NULL,NULL) ); for(i=0;i<nPoints;i++) { double x=x0,q=q0,z,al; al=(i+0.5)/(double)nPoints; if(LOG) z=pow(z1,1-al)*pow(z2,al); else z=z1+al*(z2-z1); if(pos==11) q=z; else x=z; f[l][i]=strfun_(l+1,x,q); if(pos==9) f[l][i]*=x; // if(pos==11) f[l][i]/=q*q; if(be!=1.) f[l][i]*=be*pow(1.-x,be-1.); } } // strcpy(title,"Incoming particle distribution"); title[0]=0; switch(pos) { case 9: sprintf(title+strlen(title)," x*F(x,Q=%.2E)",q0); break; case 10: sprintf(title+strlen(title)," F(x,Q= %.2E)",q0); break; case 11: sprintf(title+strlen(title)," F(x=%.2E,Q)",x0); break; } if(pos==11) xName="Q"; else xName="x"; if(on[0]&&on[1]) plot_N(title,z1,z2, xName, LOG, 2, nPoints, f[0],NULL,p_name[0],nPoints,f[1],NULL,p_name[1]); else { if(on[0]) l=0; else l=1; plot_N(title,z1,z2, xName, LOG,1, nPoints, f[l],NULL,p_name[l]); } put_text(&screen); } else messanykey(16,5," Correct input is \n" " 0<=xMin<xMax<=1,\n" " 3<=nPoints<=150"); } break; case 12: both=!both; break; } } }
int runVegas(void) { int i; double sd; double avgi; char mess[25]; FILE * iprt = NULL; int mode=1; void * pscr=NULL; static int n_Line=7; i=imkmom(inP1,inP2); if(veg_Ptr&&veg_Ptr->ndim!=i)clearGrid(); if(!veg_Ptr) veg_Ptr=vegas_init(i,50); if(nin_int == 2) strcpy(mess, "Cross section[pb]"); else strcpy(mess, " Width[Gev] "); /* ** save current session parameters */ w_sess__(NULL); /* ** open protocol and resulting files */ { char fname[50]; sprintf(fname,"%sprt_%d",outputDir,nSess); iprt=fopen(fname,"a"); if(ftell(iprt)==0) { fprintf(iprt," CalcHEP kinematics module \n The session parameters:\n"); w_sess__(iprt); fprintf(iprt,"===================================\n"); } } /* ** initkinematics */ while(correctHistList()) editHist(); /* *** Main cycle */ if(!integral.old || n_Line==7) { n_Line=7; scrcolor(Blue, BGmain); // printLn(iprt,&n_Line," #IT %20s Error %% nCall chi**2",mess); printLn(iprt,&n_Line," #IT %s Error[%%] nCalls Eff. chi^2",mess); } for(;;) { static int worn=1; char strmen[]="\030" " nSess = N2_1 " " nCalls = N1_1 " " Set Distributions " "*Start integration " " Display Distributions " " Clear statistic " " Freeze grid OFF " " Clear grid " " Event Cubes NCUBE " " Generate Events "; improveStr(strmen,"N1_1","%d",integral.ncall[0]); improveStr(strmen,"N2_1","%d",integral.itmx[0]); improveStr(strmen,"NCUBE","%d",EventGrid); if(integral.freeze) improveStr(strmen,"OFF","ON"); menu1(54,7,"",strmen,"n_veg_*",&pscr,&mode); switch(mode) { case 0: if(iprt) fclose(iprt); return 0; case 1: correctInt(50,12,"Enter new value ",&integral.itmx[0],1); break; case 2: correctLong(50,12,"Enter new value ",&integral.ncall[0],1); break; case 3: editHist(); break; case 4: if(veg_Ptr->fMax && !integral.freeze) { if(!mess_y_n(15,15,"You have event generator prepared.\n" " The answer 'Y' will start Vegas session \nwhich destroys it." " To save the event generator answer 'N' \nand set " " ' Freeze grid' ON")) break; else { free(veg_Ptr->fMax); veg_Ptr->fMax=NULL; veg_Ptr->nCubes=0;} } for (i = 1; i <= integral.itmx[0]; ++i) { double sum; char errtxt[100]=""; int k; if(integral.ncall[0]==0) break; nCall=0; negPoints=0; badPoints=0; hFill=1; if(vegas_int(veg_Ptr, integral.ncall[0],1.5*(!integral.freeze), func_, &avgi, &sd) ) break; integral.old=1; negPoints/=nCall; badPoints/=nCall; integral.nCallTot+=nCall; scrcolor(FGmain,BGmain); printLn(iprt,&n_Line,"%4d %12.4E %10.2E %8d %s", ++integral.n_it, avgi,avgi? 100*sd/(double)fabs(avgi):0.,nCall,effInfo()); if(negPoints<0) sprintf(errtxt+strlen(errtxt)," Negative points %.1G%%;", -100*negPoints/(avgi-2*negPoints)); if(badPoints) sprintf(errtxt+strlen(errtxt), "Bad Precision %.1G%%;",100*badPoints/(avgi-2*negPoints)); if(errtxt[0]) { scrcolor(Red,BGmain); printLn(iprt,&n_Line,"%s",errtxt); } integral.s0+=sd*sd; integral.s1+=avgi; integral.s2+=avgi*avgi; } integral.In=integral.s1/integral.n_it; integral.dI=sqrt(integral.s0)/integral.n_it; if(integral.n_it<=1 || integral.s0==0 ) integral.khi2=0; else integral.khi2=(integral.s2-integral.s1*integral.s1/integral.n_it)*integral.n_it/(integral.n_it-1)/fabs(integral.s0); scrcolor(FGmain,BGmain); printLn(iprt,&n_Line," < > %12.4E %10.2E %8d %7.7s %-7.1G" , integral.In, fabs(integral.In)? 100*integral.dI/(double)fabs(integral.In):0., integral.nCallTot, effInfo(), integral.khi2); if(histTab.strings) { char fname[20]; FILE * d; sprintf(fname,"distr_%d",nSess); d=fopen(fname,"w"); wrt_hist2(d,Process); fclose(d); } messanykey(54,11,"Integration is over"); /* integral.freeze=0; */ break; case 5: showHist(54,10,Process); break; case 6: clearStatistics(-1); messanykey(54,13,"Old results for integral\n" "and distributions\nare deleted."); break; case 7: integral.freeze=!integral.freeze; break; case 8: if(!integral.freeze || mess_y_n(15,15,"The information for Event Generator will be lost\n OK?")) { int ndim=veg_Ptr->ndim; vegas_finish(veg_Ptr); veg_Ptr=vegas_init(ndim,50); messanykey(57,11,"OK"); } break; case 9: if(correctLong(50,12,"Enter new value ",&EventGrid,1)) { if(veg_Ptr->fMax) {free(veg_Ptr->fMax); veg_Ptr->fMax=NULL;veg_Ptr->nCubes=0;}} break; case 10: if( !veg_Ptr || !veg_Ptr->fMax) { char * mess="Before event generation one has to launch Vegas session with freezed grid\n" "to prepare generator"; if(blind) { printf("%s\n",mess); sortie(200);} else messanykey(4,13,mess); } else runEvents(); } } }
void paramdependence(r_func ff, char* procname, char* resultname) { double minprm, maxprm; int npoints; double memprm, stepprm; unsigned count; double f[201]; int Esc=0,mPos=1; double prmval; char txt[100]; char name[20]; double *vPos; if(!selectParam(54,11,"Choose parameter",NULL,nin_int==2,1,0,&vPos,name,&mPos)) return; memprm=*vPos; minprm = memprm; maxprm = minprm; label1: sprintf(txt,"'%s' min=",name); if (!correctDouble(55,14,txt,&minprm,0)) return; label2: sprintf(txt,"'%s' max=",name); if (!correctDouble(55,15,txt,&maxprm,0)) { goto_xy(55,14); clr_eol(); goto label1; } if (maxprm <= minprm) { messanykey(55,17,"Range check error"); goto_xy(55,15); clr_eol(); goto label2; } label4: npoints = 101; if (correctInt(55,16,"Number of points= ",&npoints,0)) { if (npoints < 3) { messanykey(55,17,"Too few points!"); goto label4; } if (npoints > 201) { messanykey(55,17,"Too many points!"); goto label4; } } else { goto_xy(55,15); clr_eol(); goto label2; } goto_xy(55,14); clr_eol(); goto_xy(55,15); clr_eol(); goto_xy(55,16); clr_eol(); stepprm = (maxprm - minprm)/(npoints - 1); informline(0,npoints); stepprm = (maxprm - minprm) / (npoints - 1); prmval=minprm; err_code = 0; for(count = 1; count <= npoints; count++) { *vPos=prmval; err_code=checkParam(); if(err_code>1) break; f[count-1] = ff(); if(err_code>1) break; Esc=informline(count,npoints); if(Esc) break; prmval += stepprm; } if(err_code) errormessage(); strcpy(txt,name); if (err_code <=1 && Esc==0) plot_1(minprm,maxprm ,npoints,f,NULL,procname,txt,resultname); *vPos=memprm; calcFunc_int(); }
int runVegas(void) { int i; double sd; double avgi; char mess[25]; FILE * iprt = NULL; int mode=1; void * pscr=NULL; static int n_Line=0; if(blind) vegas_control=NULL; else vegas_control=infoLine; i=imkmom(inP1,inP2); if(veg_Ptr&&veg_Ptr->dim!=i)clearGrid(); if(!veg_Ptr) veg_Ptr=vegas_init(i,func_,50); if(nin_int == 2) strcpy(mess, "Cross section[pb]"); else strcpy(mess, " Width[Gev] "); /* ** save current session parameters */ w_sess__(NULL); /* ** open protocol and resulting files */ { char fname[50]; sprintf(fname,"%sprt_%d",outputDir,nSess); iprt=fopen(fname,"a"); } /* ** initkinematics */ while(correctHistList()) editHist(); if(integral.old) { if(!n_Line) n_Line=9;} else { w_sess__(iprt); n_Line=8; } /* *** Main cycle */ for(;;) { int fz; char strmen[]="\030" " nSess = N2_1 " " nCalls = N1_1 " " Set Distributions " "*Start integration " " Display Distributions " " Clear statistic " " Freeze grid OFF " " Clear grid " " Event Cubes NCUBE " " Num. of events=NE " " Generate Events "; if(integral.freeze) { fz=1; improveStr(strmen,"OFF","ON"); improveStr(strmen,"NCUBE","%d",EventGrid); } else { fz=0; strmen[ 030*8+2]=0; } improveStr(strmen,"N1_1","%d",integral.ncall[fz]); improveStr(strmen,"N2_1","%d",integral.itmx[fz]); improveStr(strmen,"NE","%d",nEvents); menu1(54,7,"",strmen,"n_veg_*",&pscr,&mode); switch(mode) { case 0: w_sess__(NULL); if(iprt) fclose(iprt); return 0; case 1: correctInt(50,12,"Enter new value ", integral.itmx+fz,1); break; case 2: correctLong(50,12,"Enter new value ",integral.ncall+fz,1);break; case 3: editHist(); break; case 4: if(veg_Ptr->fMax && !integral.freeze) { free(veg_Ptr->fMax); veg_Ptr->fMax=NULL; veg_Ptr->evnCubes=0; } if(!veg_Ptr->fMax && integral.freeze) { setEventCubes(veg_Ptr, EventGrid); EventGrid=veg_Ptr->evnCubes; } for (i = 1; i <= integral.itmx[fz]; ++i) { char errtxt[100]=""; long nCall; if(integral.ncall[0]==0) break; negPoints=0; badPoints=0; hFill=1; nCall=vegas_int(veg_Ptr, integral.ncall[fz],1.5*(!fz),nPROCSS,&avgi, &sd); if(nCall<0) { messanykey(10,10,"NaN in integrand"); break;} if(nCall==0) break; integral.old=1; negPoints/=nCall; badPoints/=nCall; integral.nCallTot+=nCall; scrcolor(FGmain,BGmain); printLn(iprt,&n_Line,"%4d %12.4E %10.2E %8d %s", ++integral.n_it, avgi,avgi? 100*sd/(double)fabs(avgi):0.,nCall,effInfo()); if(negPoints<0) sprintf(errtxt+strlen(errtxt)," Negative points %.1G%%;", -100*negPoints/(avgi-2*negPoints)); if(badPoints) sprintf(errtxt+strlen(errtxt), "Bad Precision %.1G%%;",100*badPoints/(avgi-2*negPoints)); if(errtxt[0]) { scrcolor(Red,BGmain); printLn(iprt,&n_Line,"%s",errtxt); } integral.s0+=sd*sd; integral.s1+=avgi; integral.s2+=avgi*avgi; } integral.In=integral.s1/integral.n_it; integral.dI=sqrt(integral.s0)/integral.n_it; if(integral.n_it<=1 || integral.s0==0 ) integral.khi2=0; else integral.khi2=(integral.s2-integral.s1*integral.s1/integral.n_it)*integral.n_it/(integral.n_it-1)/fabs(integral.s0); scrcolor(FGmain,BGmain); printLn(iprt,&n_Line," < > %12.4E %10.2E %8d %7.7s %-7.1G" , integral.In, fabs(integral.In)? 100*integral.dI/(double)fabs(integral.In):0., integral.nCallTot, effInfo(), integral.khi2); if(histTab.strings) { char fname[20]; FILE * d; sprintf(fname,"distr_%d",nSess); d=fopen(fname,"w"); wrt_hist2(d,Process); fclose(d); } messanykey(54,11,"Integration is over"); /* integral.freeze=0; */ break; case 5: showHist(54,10,Process); break; case 6: clearStatistics(-1); messanykey(54,13,"Old results for integral\n" "and distributions\nare deleted."); break; case 7: if(veg_Ptr->fMax && integral.freeze) { if(mess_y_n(15,15,"You have event generator prepared.\n" " Setting the flag \"OFF\" will destroy it." " Press 'Y' to confirm.")) integral.freeze=0; } else integral.freeze=!integral.freeze; break; case 8: if(!integral.freeze || mess_y_n(15,15,"The information for Event Generator will be lost\n OK?")) { int ndim=veg_Ptr->dim; vegas_finish(veg_Ptr); veg_Ptr=vegas_init(ndim,func_,50); messanykey(57,11,"OK"); } break; case 9: if(correctLong(50,12,"Enter new value ",&EventGrid,1)) { if(veg_Ptr->fMax) {free(veg_Ptr->fMax); veg_Ptr->fMax=NULL;} printf("EventGrid=%d\n",EventGrid); setEventCubes(veg_Ptr, EventGrid); EventGrid=veg_Ptr->evnCubes; } break; case 10: correctInt(50,15,"",&nEvents,1); break; case 11: if( !veg_Ptr || !veg_Ptr->fMax) { char * mess="Before event generation one has to launch Vegas session with freezed grid\n" "to prepare generator"; if(blind) { printf("%s\n",mess); sortie(200);} else messanykey(4,13,mess); } else runEvents(); } } }
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; }
int m_lha(int i,int*pString) { int size=2+8*500; int size_=1; void *pscr=NULL; void *pscr0=NULL; static int n1=0; char * strmen=lhaMenu(); int i1=i-1; if(!strmen) return 0; int n0=1,k,l; if(n1==0 && strlen(fname[i1])) { char *ch=strstr(strmen,fname[i1]); if(ch) n1= 1+(ch-strmen)/strmen[0]; } menu1(5,7,"LHAlib menu",strmen,"",&pscr,&n1); if(n1) { char buff[50]; sscanf(strmen+1+strmen[0]*(n1-1),"%s",buff); if(strcmp(buff,fname[i1])) { strcpy(fname[i1],buff); setNum[i1]=0; initpdfsetbynamem(&i,buff,strlen(buff)); lastLHA=i; initpdfm(&i,setNum+i1,xMin+i1,xMax+i1,qMin+i1,qMax+i1); } } else { fname[i1][0]=0; setNum[i1]=0; sgn[i1]=0; return 0; } for(;n0!=0 && n0!=3;) { char buff[50]; int nMax; char strmen0[]="\030" " Set = 0 " " Proton " " OK "; numberpdfm(&i,&nMax); if(nMax>1) improveStr(strmen0,"Set = 0","Set = %d [0,%d]",setNum[i1],nMax); else improveStr(strmen0,"Set = 0","Set = 0 (only)"); if(sgn[i1]<0) improveStr(strmen0,"Proton","%s","antiProton"); menu1(5,10,"",strmen0,"",&pscr0,&n0); switch(n0) { case 1: if(nMax>1) { correctInt(50,12,"Enter new value ",setNum+i1,1); if(setNum[i1]<0) setNum[i1]=0; if(setNum[i1]>nMax) setNum[i1]=nMax; initpdfm(&i,setNum+i1,xMin+i1,xMax+i1,qMin+i1,qMax+i1); } break; case 2: sgn[i1]=-sgn[i1]; break; case 3: put_text(&pscr0); break; } } put_text(&pscr); free(strmen); return 1; }
static void show_dependence(int X, int Y) { void *pscr1=NULL; int i,mPos=1; REAL mem; int nc,ni,pos1,pos2; char txt[50]; for(pos1=1;;) { nc=findParam(X-1,Y,0,nModelVars,nModelFunc,"Constraint",&pos1); if(!pos1) return; for(pos2=1;;) { double xMin,xMax; int nPoints=100; sprintf(txt,"check \"%s\" depends on",varNames[nc]); ni=findParam(X-1,Y,0,0,nModelVars,txt,&pos2); mem=varValues[ni]; if(ni<0) break; xMin=varValues[ni] - fabs(varValues[ni] )/10; xMax=varValues[ni] + fabs(varValues[ni] )/10; for(;;) { int k3=0; char strmen[]="\026 " " x-Min = XXX " " x-Max = YYY " " Npoints = NNN " " Display "; improveStr(strmen,"XXX","%G",xMin); improveStr(strmen,"YYY","%G",xMax); improveStr(strmen,"NNN","%d",nPoints); sprintf(txt,"check %s(%s)",varNames[nc],varNames[ni]); menu1(X,Y+2,txt,strmen,"",NULL,&k3); if(!k3) break; switch(k3) { case 1: correctDouble(X,Y+12,"xMin = ",&xMin,1); break; case 2: correctDouble(X,Y+12,"xMax = ",&xMax,1); break; case 3: correctInt(X,Y+12,"nPoints = ",&nPoints,1); break; case 4: if( xMax>xMin && nPoints>=3 && nPoints<=150) { double dx=(xMax-xMin)/(nPoints-1); double f[150]; int i, NaN=0,Esc=0; informline(0,nPoints); for(i=0;i<nPoints;i++) { double x=xMin+i*dx; varValues[ni]=x; NaN=calcMainFunc(); if(NaN) { char mess[100]; sprintf(mess,"Can not evaluate constraints for %s=%G",varNames[ni], x); messanykey(16,5,mess); break; } f[i]=varValues[nc]; Esc=informline(i,nPoints); if(Esc) break; } varValues[ni]=mem; calcMainFunc(); if(!(NaN||Esc)) plot_1(xMin,xMax,nPoints,f,NULL,"Plot", varNames[ni], varNames[nc]); } else messanykey(16,5," Correct input is \n" " xMin<xMax,\n" " 3<=nPoints<=150"); break; } } } } }
static void f7_prog(int mode) { int pos=1; void *pscr=NULL; if(mode>2) { messanykey(10,15," Highlight the corresponding\n" "structure function"); return; } if(!sf_num[mode-1]) return; f3_key[4]=NULL; for(;;) { static double xMin=0.0, xMax=1.0, scale = 91.187; static int nPoints=100; double f[150]; char strmen[]="\030 " " x-Min = XXX " " x-Max = YYY " " Npoints = NNN " " QCD-scale= QQQ " " Display plot x*F(x) " " Display plot F(x) "; improveStr(strmen,"XXX","%.3f",xMin); improveStr(strmen,"YYY","%.3f",xMax); improveStr(strmen,"NNN","%d",nPoints); improveStr(strmen,"QQQ","%.1fGeV",scale); menu1(54,14,"",strmen,"n_alpha_view",&pscr,&pos); switch(pos) { case 0: f3_key[4]=f7_prog; return; case 1: correctDouble(55,18,"xMin = ",&xMin,1); break; case 2: correctDouble(55,18,"xMax = ",&xMax,1); break; case 3: correctInt(50,18,"nPoints = ",&nPoints,1); break; case 4: correctDouble(50,18,"QCD-scale = ",&scale,1); break; case 5: case 6: if(xMin>=0 && xMax>xMin && xMax<=1 && nPoints>=3 && nPoints<=150 && scale>0.5) { void * screen; double dx=(xMax-xMin)/(2*nPoints); double be=sf_be[mode-1]; int i; get_text(1,1,maxCol(),maxRow(),&screen); for(i=0;i<nPoints;i++) { double x=xMin+(i+0.5)*(xMax-xMin)/nPoints; f[i]=strfun_(mode,x,scale); if(pos==5) f[i]*=x; if(be!=1.) f[i]*=be*pow(1.-x,be-1.); } { char p_name[20], mess[STRSIZ]; strcpy(p_name,pinf_int(Nsub,mode,NULL,NULL)); if(pos==5) strcat(p_name,"(x)*x"); else strcat(p_name,"(x)"); strFunName(mode,mess); trim(mess); sprintf(mess+strlen(mess)," [QCD-scale = %.1f GeV]",scale); plot_1(xMin+dx,xMax-dx,nPoints,f,NULL,mess,"x",p_name); } put_text(&screen); } else messanykey(16,5," Correct input is \n" " 0<=xMin<xMax<=1,\n" " QCD-scale > 0.5 GeV\n" " 3<=nPoints<=150"); break; } } }