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]"); }
int getDynamicVP(void) { int err; char *SO=malloc(strlen(compDir)+30); sprintf(SO,"%s/so_generated/VandP.so",compDir); if(access(SO,X_OK&R_OK)|| checkMtime(SO) ) // [re]compile VandP.so { char *command=malloc(300+strlen(rootDir)+strlen(compDir) ); sprintf(command,"CALCHEP=%s;" "cd %s;" "$CALCHEP/bin/make_VandP models 1 6\n" " . $CALCHEP/FlagsForSh;" " . ./EXTLIBsh;" "$CC $CFLAGS $SHARED -o so_generated/VandP.so VandP.c $CALCHEP/include/VandPgate.c $CALCHEP/lib/dummy.a $EXTLIB $CALCHEP/lib/libSLHAplus.a -lm" ,rootDir,compDir); err=system(command); free(command); if(WIFSIGNALED(err) ||WEXITSTATUS(err) ) { printf("Can not compile Constraints\n"); { free(SO);return 1;} } if(VandP) dlclose(VandP); VandP=NULL; } if(VandP==NULL) VandP=dlopen(SO,RTLD_NOW); if(!VandP) { printf("dlopen problem with %s\n",SO); messanykey(10,10,dlerror()); free(SO); return 2;} { int * nModelVars_; int * nModelFunc_; int *nModelParticles_; char ***varNames_; REAL **varValues_; ModelPrtclsStr **ModelPrtcls_; nModelVars_ =dlsym(VandP,"nModelVars"); nModelFunc_ =dlsym(VandP,"nModelFunc"); nModelParticles_=dlsym(VandP,"nModelParticles" ); varNames_ =dlsym(VandP,"varNames"); varValues_ =dlsym(VandP,"varValues"); ModelPrtcls_ =dlsym(VandP,"ModelPrtcls"); calcMainFunc_ =dlsym(VandP,"calcMainFunc"); if(!nModelParticles_||!ModelPrtcls_||!nModelVars_||!nModelFunc_ ||!varNames_ ||!varValues_||!calcMainFunc_) { messanykey(10,10,"Can not find symbols"); free(SO); return 3;} nModelVars=*nModelVars_; nModelFunc=*nModelFunc_; nModelParticles=*nModelParticles_; varNames=*varNames_; ModelPrtcls=*ModelPrtcls_; varValues=*varValues_; } free(SO); return 0; }
int m_isr__(int i, int*pString) { void * pscr=NULL; int mode =1; for(;;) { char strmen[]="\40" " ISR scale = XXX " " Beamstralung ON " " Bunch x+y sizes (nm)= YYY " " Bunch lenght (mm) = ZZZ " " Number of particles = NNN " " * N_cl = NCL " " * Upsilon = UPS "; if(scale<=1) improveStr(strmen,"XXX","%.2fS^.5",scale); else improveStr(strmen,"XXX","%.0fGeV",scale); calc_params(); if(bOn) { improveStr(strmen,"YYY","%.1f",xy_nm); improveStr(strmen,"ZZZ","%.3f",z_mm); improveStr(strmen,"NNN","%.1e",qTot); improveStr(strmen,"NCL","%.2f",b_ncl); improveStr(strmen,"UPS","%.2f",b_ips); } else { improveStr(strmen,"ON","%3.3s","OFF"); strmen[2*strmen[0]+1]=0; } menu1(46,10,"",strmen,"n_sf_isr",&pscr,&mode); switch(mode) { case 0: return 1; case 1: messanykey(45,16,"Value >1 is scale in GeV;\n" "Value <=1 is fraction of sqrt(S)"); correctDouble(45,16,"Enter value: ",&scale,1);break; case 2: bOn=!bOn; break; case 3: correctDouble(52,16,"Enter new value ",&xy_nm,1);break; case 4: correctDouble(52,16,"Enter new value ",&z_mm,1);break; case 5: correctDouble(52,16,"Enter new value ",&qTot,1);break; case 6: case 7: messanykey(10,10, "This parameter is a function of\n" "above ones and Sqrt(S)"); } } return 1; }
static double calcwidth12(void) { int i,nsub; double width12 = 0.; double selChan=0; int first=1; int N1; err_code = 0; for(nsub=1;nsub<=nprc_int;nsub++) widths[nsub-1]=0; for(nsub=1;nsub<=nprc_int;nsub++) { REAL m1, m2, m3; double GG; if(strcmp(pinf_int(nsub,1,&m1,&N1),inParticle)==0) { if(first) { if(EffQmass&&Q) setQforParticle(Q,inParticle); if(calcMainFunc()>0) { messanykey(15,15,"Can not calculate constraints"); return 0;} if(calcFunc_int()>0) { messanykey(15,15,"Can not calculate constraints"); return 0;} if(Q) GG=sqrt(4*M_PI*alpha_2(*Q)); else GG=sqrt(4*M_PI*alpha_2(m1)); first=0; } pinf_int(nsub,1,&m1,NULL);pinf_int(nsub,2,&m2,NULL);pinf_int(nsub,3,&m3,NULL); if (m1 <=m2 + m3) widths[nsub-1] = 0.0; else { double md=m2-m3; double ms=m2+m3; double pRestOut=sqrt((m1*m1 - ms*ms)*(m1*m1-md*md))/(2*m1); double totcoef= pRestOut/(8. * M_PI * m1*m1); for(i=1;i<12;i++) pvect3[i]=0; pvect3[0]=m1; pvect3[7]=pRestOut; pvect3[4]=sqrt(pRestOut*pRestOut+m2*m2); pvect3[11]=-pRestOut; pvect3[8]=sqrt(pRestOut*pRestOut+m3*m3); widths[nsub-1] = totcoef * sqme_int(nsub,GG,pvect3,NULL,&err_code); if(err_code != 0) { errormessage(); widths[nsub-1]=0; err_code=0;} width12 += widths[nsub-1]; if(nsubSel==nsub) selChan= widths[nsub-1]; } } } if(nsubSel) { if(width12) return selChan/width12; else return 0;} return width12; }
static void improveEvents(vegasGrid * vegPtr,double (*func)(double *,double,double*)) { int mode; void * pscr_=NULL; double eff0; for(mode=1;mode!=4; ) { char strmen[]="\030" " sub-cubes = N1 " " random search = N2 " " simplex search= N3 " " Start search of maxima "; improveStr(strmen,"N1","%d",n_cube); improveStr(strmen,"N2","%d",nRandom); improveStr(strmen,"N3","%d",nSimplex1); menu1(54,14,"Preparing of generator",strmen,"n_prep_gen_*",&pscr_,&mode); switch(mode) { case 0: return; case 1: if(correctLong(50,15,"Number of sub-cubes:",&n_cube,1)) { free(vegPtr->fMax); vegPtr->fMax=NULL; vegPtr->nCubes=0; } break; case 2: correctLong(50,15,"Random search:",&nRandom,1);break; case 3: correctLong(50,15,"Simplex steps :",&nSimplex1,1); break; /* " milk = N3 " improveStr(strmen,"N3","%.1f",milk); case 4: correctDouble(50,15,"Content of milk:",&milk,1); break; */ case 4: if(n_cube < 1 ) n_cube=1; { int mCheck=vegas_max(vegPtr,n_cube, nRandom,nSimplex1, milk, func,&eff0); if(mCheck==0) { char mess[50]; sprintf(mess,"Expected efficiency %f",eff0/max); messanykey(25,15,mess); put_text(&pscr_); } else { mode=1; if(mCheck==2) messanykey(25,15,"Not enough memory.\n" "Decrease the number of sub-cubes"); } } } } }
int numcheck(void) { if(getDynamicVP()) return 1; cleanDecayTable(); ForceUG=forceUG; { char mmenu[]="\026" " Parameters " " All Constraints " " Masses,Widths,Branch."; int m0=1,err; void (*F10)(int); void (*F6)(int); F10=f3_key[7]; F6=f3_key[3]; f3_key[3]=localF6; chdir("results"); outputDir="./"; err=calcMainFunc(); if(Warnings) messanykey(5,10,Warnings); for(;m0;) { menu1(56,7,"",mmenu,"s_num_*",NULL,&m0); if(err && (m0==2||m0==3)) { char txt[100]; sprintf(txt," Can not calculate %s ",varNames[err]); messanykey(12,15,txt); } switch(m0) { case 1: if(changeParam(56,8)) { cleanDecayTable(); err=calcMainFunc(); if(Warnings) messanykey(5,10,Warnings); } break; case 2: if(nModelFunc) {if(!err ) show_dependence(56,8);} else messanykey(5,10,"There are no public constraints in this model."); break; case 3: if(!err) show_spectrum(56,8); break; } } chdir(".."); outputDir="results/"; f3_key[7]=F10; f3_key[3]=F6; } return 0; }
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; }
static int r_mdl__(FILE * mode) { static double val; int i,k; char name1[20]; char * t=malloc(nvar_int+1); char * mess; for (i = 1; i <=nvar_int; ++i) t[i]=0; for(;;) { if(2!= fscanf(mode,"%s = %lf",name1,&val)) break; for(i=1;i<=nvar_int;i++)if(strcmp(name1,varName_int[i])==0) { t[i]=1; writeVar(i,val); break;} } for(k=0,i=1; i<=nvar_int; ++i) if(!t[i]) k+=2+strlen(varName_int[i]); if(k) { mess=malloc(k+50); k=0; sprintf(mess,"The following parameters keep default values:\n"); for(i=1;i<=nvar_int;i++) if(!t[i]) { strcat(mess,varName_int[i]); k+=1+strlen(varName_int[i]); if(k>=60) {strcat(mess,"\n"); k=0;} else strcat(mess," "); } messanykey(5,5,mess); free(mess); } free(t); return 0; }
static int changeParam(int X,int Y) { int n,ch; char txt[50]; static char fName[100]=""; double x; int pos; for(n=0,ch=0,pos=1;n>=-1;) { n=findParam(X-1,Y,1,0,nModelVars,"Change Parameter",&pos); if(pos==1) { FILE *f; struct stat buf; if(!findCalcHEPfile(fName)) continue; if(stat(fName,&buf) || !(S_ISREG(buf.st_mode)) ) { messanykey(10,17, "Not a regular file"); continue; } f=fopen(fName,"r"); if(f==NULL) { messanykey(10,17, "Can not open file"); continue; } for(;;) { char name[20]; char txt[40]; double val; int i; if(fscanf(f,"%s",name)!=1) break; if(name[0]=='#') { fscanf(f,"%*[^\n]"); continue;} for(i=0;i<nModelVars;i++) if(strcmp(name,varNames[i])==0) break; if(i==nModelVars) { sprintf(txt,"'%s' - unknown variable",name); messanykey(10,10,txt); } if(fscanf(f,"%lf",&val)!=1) { sprintf(txt," wrong defined number for '%s'",name); messanykey(10,10,txt); } else if(i<nModelVars) { varValues[i]=val; ch=1;} fscanf(f,"%*[^\n]"); } fclose(f); }else if(n>=0) { x=varValues[n]; sprintf(txt,"%s = ",varNames[n]); if(correctDouble(20,20,txt,&x,1)) { varValues[n]=x; ch=1; } } } return ch; }
int fillRegArray(void) { char charKey; linelist ln=regTab.strings; int lineNum=0; double mass,width; char invStr[STRSIZ], massStr[STRSIZ], widthStr[STRSIZ]; inireg_(); while (ln != NULL) { int power=0; char lv[PLISTLEN]=""; invStr[1]=0; massStr[0]=0; widthStr[0]=0; lineNum++; sscanf(ln->line,"%[^|]%*c%[^|]%*c%[^|]%*c%d",invStr+1,massStr,widthStr,&power); /*============ Invariant ===========*/ trim(invStr+1); invStr[0]='S'; if( !checkPhysVal(invStr,&charKey, lv) ) { sprintf(errorText," Error in regularization table line %d .\n" " Wrong field 'Momentum' .",lineNum); goto errorExit; } coninv_(lv); /*================ Mass ============*/ if( calcExpression(massStr,rd_numW,&mass) ) { sprintf(errorText," Error in regularization table line %d .\n" " Wrong field 'Mass' .",lineNum); goto errorExit; } /*==================Width ==========*/ if( calcExpression(widthStr,rd_numW,&width) ) { sprintf(errorText," Error in regularization table line %d .\n" " Wrong field 'Width' .",lineNum); goto errorExit; } /*============ Power ===============*/ if( power<1 ||power>2 ) { sprintf(errorText," Error in regularization table line %d .\n" " Power is out of range.",lineNum); goto errorExit; } addreg_(lv,mass,width,power); ln=ln->next; } return 0; errorExit: messanykey(2,10,errorText); return 1; }
void errormessage(void) { switch(err_code) { case 1: messanykey(10,10,"Lost of precision in SQME "); break; case 2: messanykey(10,10,"Zero denominator"); break; case 3: messanykey(10,10,"Too many points for integration."); break; case 4: messanykey(10,10,"Energy too small"); break; case 5: messanykey(10,10,"Can not evaluate constraints"); break; case 10: messanykey(10,10,"User Break"); break; default: messanykey(10,10," Error ?? "); } }
static void wAbort(void) { saveent(menulevel); messanykey(5,20,"Error in writing on the disk. \n" "Check the existence of the \n" "'tmp' and 'results' directories \n" "or the existence of free disk space"); finish(); sortie(65); /* End of work */ }
static void writeSLHA(void) { int i; FILE *f; char fName[100]; for(i=1;;i++) { sprintf(fName,"decaySLHA%d.txt",i); if(access(fName,R_OK)) break; } f=fopen(fName,"w"); fprintf(f,"BLOCK ModelParameters # %s\n",currentModelName()); for(i=0;i<nModelVars;i++) fprintf(f," %3d %16E # %s\n",i+1, (double)varValues[i], varNames[i]); fprintf(f,"#\n"); for(i=0;i<nModelParticles;i++) { fprintf(f,"BLOCK QNUMBERS %d # %s\n", ModelPrtcls[i].NPDG, ModelPrtcls[i].name); fprintf(f," 1 %d # 3*el.charge\n 2 %d # 2*spin+1\n 3 %d # color dim\n 4 %d # 0={ self-conjugated}\n#\n", ModelPrtcls[i].q3, ModelPrtcls[i].spin2+1, ModelPrtcls[i].cdim, strcmp(ModelPrtcls[i].name,ModelPrtcls[i].aname)? 1:0 ); } fprintf(f,"BLOCK MASS\n"); for(i=0;i<nModelParticles;i++) { char *name=ModelPrtcls[i].name; fprintf(f," %d %E # %s\n",ModelPrtcls[i].NPDG,pMass(name),name); } fprintf(f,"#\n"); for(i=0;i<nModelParticles;i++) { txtList all=NULL; double mass,width; char *name; if( strcmp(ModelPrtcls[i].mass,"0")==0) continue; if( strcmp(ModelPrtcls[i].width,"0")==0) continue; name=ModelPrtcls[i].name; mass=pMass(name); if(!mass) continue; slhaDecayPrint(name,0,f); fprintf(f,"#\n"); } fclose(f); { char buff[100]; sprintf(buff,"See results in file '%s'", fName); messanykey(16,5,buff); } }
static void f1_key(int x) { int len; char ss[STRSIZ]; if (f_hlp == NULL) goto exi; len=strlen(f_hlp)-1; strcpy(ss,f_hlp); if (ss[len] =='*') sprintf(ss+len,"%d",x); if( show_help(ss) ) return; exi: messanykey(10,10,"Help is absent");return; }
static void readtext(char* fname) { FILE * txt; trim(fname); txt=fopen(fname,"r"); if (txt == NULL) { messanykey(10,10," File not found"); return; } showtext (1, 1, 80,1,"",txt); fclose(txt); }
void viewsqdiagr(void) { nsub = 1; do { sqdiagrmenu(); if (nsub != 0) { if(nin+nout<7) showgraphs(2); else messanykey(10,15,"The editor does not work if the number of legs exceed 6."); } sq_diagramsinfo(); } while (!(nsub == 0 || subproc_sq == 1)); /* Esc */ sq_diagramsinfo(); }
void newSession(void) { if(integral.old) { char fname[20]; messanykey(15,15, "Some parameters where changed.\nSo integral and statictics for\n" "distribushions is forgotten!\nSession number is increased."); integral.old=0; nSess++; clearStatistics(-1); sprintf(fname,"prt_%d",nSess); unlink(fname); } }
void save_sos(int ercode) { unsigned nproc; csdiagram cd; marktp mark; if (ercode == -2) /* User Break */ { finish(); sortie(20); /* Restart */ } if (ercode == -1) /* Heap is empty */ { mark.blk_=NULL; mark.pos_=0; release_(&mark); } /* Heap is empty, continue */ /* TooLargeNumber */ /* TooManyIdentifiers */ /* RangeCheckError */ if ((ercode < 0) || (ercode == 7) || (ercode == 11) || (ercode == 12)) /* Restart */ { saveent(10); nproc = ftell(diagrq) - sizeof(cd); fseek(diagrq,nproc,SEEK_SET); FREAD1(cd,diagrq); cd.status = -2; fseek(diagrq,nproc,SEEK_SET); FWRITE1(cd,diagrq); finish(); sortie(20); /* Restart */ } /* not disk space */ if ((ercode == 40)) { finish(); sortie(65); /* End of work */ } if(ercode ==14) { messanykey(10,10," Check model !"); finish(); sortie(62); } }
static void errorMessage( char * fieldName, char * format, ...) { char dump[200]; va_list args; va_start(args,format); vsprintf(dump,format,args); va_end(args); if (strcmp(dump,"*") == 0) sprintf(errorText,"Error in table '%s' line %d field '%s'\nposition %u: %s", tabName,nLine,fieldName,rderrpos,errmesstxt(rderrcode) ); else sprintf(errorText,"Error in table '%s' line %d field '%s' \n %s", tabName,nLine,fieldName,dump); if(blind) printf("ERROR:%s\n",errorText); else messanykey(2,10,errorText); }
int sf_menu(int i) { int k; char name[STRSIZ]; int nfun[MAXFUN]; long N; char strmen[2+MAXFUN*(FUNLEN+1)]; void * pscr =NULL; int mode,l; strmen[0]=FUNLEN+1; pinf_int(Nsub,i,NULL,&N); sprintf(strmen+1," %-*.*s",FUNLEN,FUNLEN,"OFF"); k = 0; for(l=0;l<MAXFUN;l++) { if ( strFun[l].myParticle(allInP(i)) ) { nfun[k++] = l; strFun[l].fullName(i, name); sprintf(strmen+1+(FUNLEN+1)*k," %-*.*s",FUNLEN,FUNLEN,name); } } if(!k) { messanykey(15,15,"Structure functions for this particle\n" "are not known\n"); return 0; } menu1(77-FUNLEN,7,"",strmen, "n_strfun", &pscr, &mode); if (mode == 0) return 0; put_text(&pscr); if (mode == 1) sf_num[i-1]=0; else { int ok=strFun[nfun[mode - 2]].menu(i,allInP(i)); if(ok) sf_num[i-1]=nfun[mode -2]+1; else{ sf_num[i-1]=0; return 0;} } return 1; } /* sf_menu__ */
int viewDir(char * dirName) { int i,k; void * pscr2 = NULL; char f_name[STRSIZ]; char menustr[2020]; DIR *dirPtr=opendir(dirName); struct dirent * dp; menustr[0]=16; if(!dirPtr) return 1; k=1; while((dp=readdir(dirPtr)) && k<=2000) if(strcmp(dp->d_name,".")&&strcmp(dp->d_name,"..")) { for(i=0; (i <strlen(dp->d_name))&&(i<16);i++) menustr[k++]=dp->d_name[i]; for(; i <16; i++) menustr[k++]=' '; } closedir(dirPtr); menustr[k]=0; if (menustr[1] == 0 ) { messanykey(10,15,"directory is empty"); return 0; } for(k=1;k;) { menu1(10,10,"",menustr,"",&pscr2,&k); if(k > 0) { sprintf(f_name,"%s/%.16s",dirName,menustr+k*16-15); readtext(f_name); } } return 0; }
int rd_sf__(FILE *mode) { char sf_txt1[500],sf_txt2[500]; int i,err=0; int ch; for(i=0;i<2;i++) sf_num[i]=0; if(1 != fscanf(mode," StrFun1=\"%[^\"]", sf_txt1)) { err=1; strcpy(sf_txt1,"OFF");} else trim(sf_txt1); for(ch=0; ch!='\n';ch=fgetc(mode)); if(1 != fscanf(mode," StrFun2=\"%[^\"]", sf_txt2)) {err+=2; strcpy(sf_txt2,"OFF");} else trim(sf_txt2); for(ch=0; ch!='\n';ch=fgetc(mode)); if(err) { if(blind) { printf("File 'session.dat':Error in stucture function specification\n"); exit(2);} else messanykey(10,12,"File 'session.dat':Error in stucture function specification"); } loadStrFun(sf_txt1,sf_txt2); return 0; }
static int correctVar(char* txt,int x,int y, int type, void * var,int clear) { int npos,key,err; int xx; void * pscr; char * buff; int * I; long * L; double * D; int maxLen; get_text(x,y,maxCol(),y,&pscr); scrcolor(White,Black); goto_xy(x,y); print(txt); xx=where_x(); if(type<0) {buff=var; maxLen=-type;} else { buff=malloc(100); switch (type) { case 'L': L=var; sprintf(buff,"%ld",*L); break; case 'D': D=var; sprintf(buff,"%lg",*D); break; case 'I': I=var; sprintf(buff,"%d" ,*I); break; } maxLen=MAX(15,strlen(buff)); } npos = 1; do { goto_xy(xx,y); key = str_redact(buff,npos,maxLen); if (key == KB_ESC) { put_text(&pscr); if(type>=0) free(buff); return 0; } err=0; if (key == KB_ENTER) { /* trim(buff); */ if(type<0) err=1; else { switch (type) { case 'L': err=sscanf(buff,"%ld",L); break; case 'D': err=sscanf(buff,"%lf",D); break; case 'I': err=sscanf(buff,"%d" ,I); break; } } if (err<=0) messanykey(10,10," incorrect number"); } } while (err<=0); if(clear)put_text(&pscr); else free(pscr); if(type>=0) free(buff); return 1; }
void menu0(int col,int row,char* label, char* menstr , void (**funcKey)(int) ,char** funcKeyMess, void ** hscr, int* kk) { int i, j, k, col1, npage,lastrow; long lastpage; int ink; int ncol; void * pscr; int fkPos[11]; int height; char fmt[20]; int lastLine; /* colors */ int label_fg =Yellow; int label_bg =Blue; int help_fg1 =White; int help_fg2 =Black; int help_bg =DarkGray; int box_fg =White; int box_bg =DarkGray; int star_fg =Red; int page_fg =Black; int actFunc_fg=Black; int actFunc_bg=White; int pasFunc_fg=White; int pasFunc_bg=DarkGray; /* save colors */ int fcolor_tmp=fColor; int bcolor_tmp=bColor; void *hscr_=NULL; if(hscr==NULL) hscr=&hscr_; lastLine=maxRow(); if (funcKey == NULL) for (i=0;i<11;i++) fkPos[i]=0; else { int xx; scrcolor(FGmain,BGmain); goto_xy(1,lastLine); clr_eol(); xx=0; for (j=0;j<10;j++) { if(funcKey[j] && funcKeyMess[j]) xx=xx+4+strlen(funcKeyMess[j]);} xx= (80 - xx )/2 ; goto_xy(xx,lastLine); for (i=0;i<10;i++) { fkPos[i]=where_x(); if (funcKey[i] && funcKeyMess[i]) { scrcolor(help_fg1,help_bg); print(" F%i-",i+1); scrcolor(help_fg2,help_bg); print(funcKeyMess[i]); } } fkPos[10]=where_x(); } clearTypeAhead(); if (*kk < 0) *kk = -(*kk); ncol=menstr[0]; sprintf(fmt,"%%%d.%ds",ncol,ncol); height=strlen(menstr)/ncol; if(height==0) { *kk=0; return; } if (row+height+1 >lastLine-2) height=lastLine-3-row; lastpage = 1+ (strlen(menstr)/ncol -1)/height ; if(label[0] ==0 || row == 1) { if (*hscr == NULL) get_text(col,row,col+ncol+1,row+2,hscr);} else { char label_[STRSIZ]; int shft,sz; if (*hscr == NULL) get_text(col,row-1,col+ncol+1,row+2,hscr); for(i=0;i<ncol+2;i++) label_[i]=' '; label_[ncol+2]=0; sz=strlen(label); if(sz >ncol+2) {shft=0;sz=ncol+2;} else shft=(ncol+2 -sz)/2; memcpy(label_+shft,label,sz); scrcolor(label_fg,label_bg); goto_xy(col,row-1); print(label_); } get_text(col,row + 3,col + ncol + 1,row + height + 1,&pscr); if (*kk <= 0 || *kk > lastpage * height ) { npage = 1; k = 1; } else { k = ((*kk) - 1) % height + 1; npage = ((*kk) - 1) / height + 1; } col1 = col + 1; label_1: scrcolor(box_fg,box_bg); chepbox(col,row,col + ncol + 1,row + height + 1); scrcolor(star_fg,box_bg); goto_xy(col+1,row); print("<"); /* goto_xy(col+1,row + height+1); print("?"); */ scrcolor(page_fg,box_bg); if (npage > 1) { goto_xy(col + ncol - 2,row); print("PgUp"); } if (npage < lastpage) { goto_xy(col + ncol - 2,row + height + 1); print("PgDn"); } if(npage<lastpage) lastrow=height; else lastrow = (strlen(menstr)/ncol)%height; lastrow=0; scrcolor(pasFunc_fg,pasFunc_bg); for (j = 1; j <= height; j++) { int shift; goto_xy(col + 1,row + j); shift=1+(j-1 + (npage-1)*height)*ncol; if(shift<strlen(menstr)) {print(fmt,menstr+shift );lastrow++;} else print(fmt," "); } scrcolor(actFunc_fg,actFunc_bg); if (k > lastrow) k = lastrow; goto_xy(col + 1,row + k); if (lastrow) print(fmt,menstr+1+(k-1+(npage-1)*height)*ncol); while (1) { int jump=1,mousePos; scrcolor(pasFunc_fg,pasFunc_bg); ink = inkey(); /* mouse filter */ if ((ink==KB_MOUSE)&&(mouse_info.but1 == 2)) { if (mouse_info.row == lastLine ) for(i=0; i<10;i++) if ((mouse_info.col > fkPos[i]) && (mouse_info.col < fkPos[i+1])) { if (i==9)ink='0'; else ink='1'+i;} if ( (mouse_info.col >= col ) && (mouse_info.col <=col+ncol+1) ) { mousePos = mouse_info.row - row; if (col+ncol+1-mouse_info.col <4) { if (mousePos==0) ink=KB_PAGEU; if (mousePos==height+1) ink=KB_PAGED; } if ((mousePos == 0 ) && ( mouse_info.col-col <4)) ink=KB_ESC; if ((mousePos < 0)&&(mousePos >= height)) { if (mousePos > k) {ink=KB_DOWN; jump=mousePos - k;} if (mousePos < k) {ink=KB_UP; jump=k - mousePos;} if (mousePos==k ) ink=KB_ENTER; } } } /* end of filter */ if (lastrow == 0) goto label_3; label_4: switch (ink) { case KB_MOUSE: if (mouse_info.but1 != 2) break; if (mouse_info.row == lastLine ) for(i=0; i<10;i++) if ((mouse_info.col > fkPos[i]) && (mouse_info.col < fkPos[i+1])) { if (i==9)ink='0'; else ink='1'+i; goto label_4; } if ( (mouse_info.col < col ) || (mouse_info.col >col+ncol+1) || (mouse_info.row < row ) || (mouse_info.row >row+height+1) ) break; mousePos = mouse_info.row - row; if ((mousePos == 0 ) && ( mouse_info.col-col <4)) ink=KB_ESC; if ((mousePos != 0)&&(mousePos != height+1)) { if (mousePos > k) { ink=KB_DOWN; jump=mousePos - k;} if (mousePos < k ) { ink=KB_UP; jump=k - mousePos;} } if (col+ncol+1-mouse_info.col <4) { if (mousePos==0) ink=KB_PAGEU; if (mousePos==height+1) ink=KB_PAGED; } if (mousePos==k ) ink=KB_ENTER; if (ink!=KB_MOUSE) goto label_4; break; case KB_DOWN: if(k==lastrow) { if(npage < lastpage) { k=1; npage++; goto label_1; } else { be_be(); break; } }else {ink= KB_RIGHT; goto label_4;} case KB_UP: if(k==1) { if (npage > 1) { k=height; npage--; goto label_1; } else{ be_be(); break; } } else {ink= KB_LEFT; goto label_4;} case KB_LEFT: goto_xy(col1,row + k); print(fmt,menstr+1+(k-1+(npage-1)*height)*ncol); k = k - jump; if (k == 0) k = lastrow; scrcolor(actFunc_fg,actFunc_bg); goto_xy(col1,row + k); print(fmt,menstr+1+(k-1+(npage-1)*height)*ncol); break; case KB_RIGHT: goto_xy(col1,row + k); print(fmt,menstr+1+(k-1+(npage-1)*height)*ncol); k = k + jump ; if(k > lastrow) k = 1; scrcolor(actFunc_fg,actFunc_bg); goto_xy(col1,row + k); print(fmt,menstr+1+(k-1+(npage-1)*height)*ncol); break; case KB_ENTER: scrcolor(box_fg,box_bg); chepbox(col,row,col+ncol+1,row+2); put_text(&pscr); goto_xy(col1,row + 1); scrcolor(actFunc_fg,actFunc_bg); print(fmt,menstr+1+(k-1+(npage-1)*height)*ncol); *kk = (npage - 1) * height + k; goto_xy(1,lastLine);scrcolor(FGmain,BGmain); clr_eol(); if(hscr==&hscr_) put_text(hscr); refresh_scr(); escpressed(); return; case KB_BACKSP: case KB_ESC: goto label_3; case KB_PAGEU: if (npage > 1) { npage--; goto label_1; } else be_be(); break; case KB_PAGED: if (npage < lastpage) { npage++; goto label_1; } else be_be(); break; case '1': case'2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '0': case KB_F1: case KB_F2: case KB_F3: case KB_F4: case KB_F5: case KB_F6: case KB_F7: case KB_F8: case KB_F9: case KB_F10: { int fk; if (funcKey==NULL) break; if ( ink>='0' && ink <='9') { fk=ink-'0';if (fk==0) fk=10;} else fk=ink-KB_F1+1; if ((funcKey[fk-1]) != NULL) { void * saveHlp; get_text(1,lastLine,maxCol(),lastLine,&saveHlp); scrcolor(box_fg,box_bg); goto_xy(col+1,row); print("%c",boxFrame[1]); goto_xy(1,lastLine);scrcolor(FGmain,BGmain);clr_eol(); (*funcKey[fk-1])((npage-1)*height+k); put_text(&saveHlp); scrcolor(star_fg,box_bg); goto_xy(col+1,row); print("<"); } break; } case 6: /* ^F */ case 'f': case 'F': { char name[32]=""; int key=correctStr(5,23,"Enter name(Esc for exit):",name,30,1); if(key) { char * x=strstr(menstr+1,name); if(x==NULL) { if(blind) sortie(121); else messanykey(10,10, "Not detected"); break; } k= ((x-menstr)-1)/menstr[0]; npage = k/ height + 1; k = k% height + 1; goto label_1; } } break; } } label_3: put_text(hscr); put_text(&pscr); scrcolor(fcolor_tmp,bcolor_tmp); goto_xy(1,lastLine); clr_eol(); *kk = 0; }
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 monte_carlo_menu(void) { static int r=0; int mode=1; void * pscr=NULL; void (*quit)(int)=f3_key[7]; char menutxt[]="\030" " Subprocess " " IN state " " Model parameters " " Constraints " " QCD alpha & scales " " Breit-Wigner " " Aliases " " Cuts " " Phase space mapping " " Monte Carlo simulation " " Easy "; if(nout_int!=2 ) menutxt[menutxt[0]*10+1]=0; if(nin_int==1) improveStr(menutxt,"Easy", "Total width"); else improveStr(menutxt,"Easy", "1D integration"); wrtprc_(); for(;;) { infor(); f3_key[7]=quit; menu1(54,4,"",menutxt,"n_mc_*",&pscr, &mode); if(mode==1||mode==2||mode==3||mode==5||mode==7)f3_key[7]=NULL; switch (mode) { case 0: return 0; case 1: r=r|3*sub_men__(); break; case 2: r=r|in_setting(); break; case 3: r=r|change_parameter(54,7,0); break; case 4: { int modeC=1; for(;;) { char menuC[]="\030" " All Constraints " " Masses,Widths,Branching"; void * pscrC=NULL; menu1(54,6,"",menuC,"n_constr_*",&pscrC, &modeC); switch(modeC) { case 0: break; case 1: show_depend(54,7); break; case 2: show_spectrum(54,9); break; } if(!modeC) break; } break; } case 5: r=r|qcdmen_(); break; case 6: r=r|w_men__(); break; case 7: do r=r|(3*edittable(1,4,&compTab,1,"n_comp",0)); while (fillCompositeArray()); break; case 8: do r=r|(3*edittable(1,4,&cutTab,1,"n_cut",0)); while (fillCutArray()); break; case 9: r=r|mappingMenu(); break; case 10: if(nout_int==1 && !sf_num[0] && !sf_num[1] ) { if(blind) return 1; messanykey(15,15,"Phase space integration for 2->1 processes\n needs distribution functions."); break; } if(checkEnergy()) { if(blind==1) { char fname[50]; int i,j; sprintf(fname,"events_%d.txt", nSess); FILE * f=fopen(fname,"w"); fprintf(f,"#%s\n", VERSION_); fprintf(f,"#Type %d -> %d\n", nin_int,nout_int); fprintf(f,"#Initial_state "); if(nin_int==1) fprintf(f," P1=0\n"); else { fprintf(f," P1_3=0 P2_3=0\n"); wrt_sf__(f); } fprintf(f,"#PROCESS "); for(i=1;i<=nin_int+nout_int; i++) { int pcode; char * pname=pinf_int(Nsub,i,NULL,&pcode); fprintf(f," %d(%s)", pcode, pname); if(i==nin_int) fprintf(f," ->"); } fprintf(f,"\n"); fprintf(f,"#MASSES "); for(i=0;i<nin_int+nout_int;i++) { REAL m; pinf_int(Nsub,i+1,&m,NULL); fprintf(f," %.10E", (double)m); } fprintf(f,"\n"); fprintf(f,"#Cross_section(Width) %E\n",0.); fprintf(f,"#Number_of_events %10d\n",0); fprintf(f,"#Sum_of_weights %12.4E %12.4E \n",0.,0.); fprintf(f,"#Events "); if(nin_int==2) fprintf(f," P1_3 [Gev] P2_3 [Gev] "); for(i=1;i<=nout_int; i++) for(j=1;j<=3;j++) fprintf(f," P%d_%d [Gev] ",i+nin_int,j); integral.old=1; fclose(f); return 1; } messanykey(15,15,"Energy is too small!"); break; } if(fillCutArray()) { if(blind) return 2; messanykey(15,15,"Can not evaluate cut limits"); break; } case 11: if(mode==11) { void (*f10_tmp)(int); w_sess__(NULL); f10_tmp=f3_key[7]; f3_key[7]=f10_key_prog_for22; if(nin_int==1) decay12(); else { REAL m1,m2, Pcm; pinf_int(Nsub,1,&m1,NULL); pinf_int(Nsub,2,&m2,NULL); if(sf_num[0] && sf_mass[0]>m1) m1= sf_mass[0]; if(sf_num[1] && sf_mass[1]>m2) m2= sf_mass[1]; incomkin(m1,m2,inP1,inP2,NULL,&Pcm,NULL); if(sf_num[0]||sf_num[1]||nCuts) messanykey(10,10,"Structure functions and cuts are ignored\n"); cs_numcalc(Pcm); } f3_key[7]= f10_tmp; r_sess__(NULL); break; } else if(fillRegArray()) { if(blind) return 3; messanykey(15,15, "Can not evaluate regularization paremeters"); break; } if(mode==10) runVegas(); r=0; break; } //printf("r=%d\n",r); if(r) clearEventMax(); if(r&2) clearGrid(); if(r&1)newSession(); } }
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 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(); } } }
static void generateEvents( vegasGrid * vegPtr, double (*func)(double *,double,double*), char *fname, FILE * iprt) { int mode=1; void * pscr=NULL; static int regen=1; // if(!vegPtr->fMax)improveEvents(vegPtr,func); for(mode=1;;) { char strmen[]="\032" " Number of events=N1 " " Launch generator " " Allow weighted events OFF"; if(!regen) improveStr(strmen,"OFF","%s","ON"); improveStr(strmen,"N1","%d",nEvents); menu1(53,10,"",strmen,"n_gen_*",&pscr,&mode); switch(mode) { case 0: return; case 1: correctLong(50,15,"",&nEvents,1); break; case 2: { long nGenerated=0; double eff; int nmax,mult,neg; char mess[200]; long cEvent; long fileEnd; if(!vegPtr->fMax) { messanykey(15,15,"Generator is not ready."); break;} events_= fopen(fname,"a"); if(ftell(events_)==0) write_event_cap(); fileEnd=ftell(events_); build_cb_int(Nsub); cEvent= vegas_events(vegPtr,nEvents,max,func,writeEvent,regen,&eff,&nmax,&mult,&neg); fclose(events_); if(cEvent>0) { int l; sprintf(mess,"Statistic\n Events generated: %ld\n efficiency: %.1E\nMax event multiplicity: %d\n" "Multiple events(total): %d \nNegative weight events: %d \n", cEvent, eff,nmax,mult, neg); l=strlen(mess); strcat(mess,"---------------\n Accept events? "); if(mess_y_n(25,15,mess)) { long nEvPos=0; integral.old=1; mess[l]=0; events_=fopen(fname,"r+"); while(nEvPos==0) { char ch; char word[100]; do fscanf(events_,"%c",&ch); while(ch !='#'); fscanf(events_,"%s",word); if(strcmp(word,"Number_of_events")==0) nEvPos=ftell(events_); } fscanf(events_,"%ld",&nGenerated); nGenerated+=cEvent; fseek(events_,nEvPos,SEEK_SET); fprintf(events_," %10ld",nGenerated); fclose(events_); fprintf(iprt," %ld events are stored in '%s'\n",nGenerated,fname); fprintf(iprt,"%s\n",mess); fflush(iprt); } else truncate(fname,fileEnd); } destroy_cb_int(); } break; // case 3: improveEvents(vegPtr,func); put_text(&pscr); break; case 3: regen=!regen; // goto ret; } } }