static int checkEnergy(void) { int i; REAL ms,m_; for(i=nin_int+1,ms=0; i<=nin_int+nout_int;i++) { pinf_int(Nsub,i,&m_,NULL); ms+=m_; } if(nin_int==1) { pinf_int(Nsub,1,&m_,NULL); if(m_<=ms) return 1; } else { REAL S,m1,m2; 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,&S,NULL,NULL); if(S <= ms) return 1; } return 0; }
static void * selectChan(void) { int nsub, ntot; char * menutxt; void * pscr=NULL; for(nsub=1,ntot=1;nsub<=nprc_int;nsub++) if(strcmp(pinf_int(nsub,1,NULL,NULL),inParticle)==0) ntot++; menutxt=malloc(2 +15*ntot); menutxt[0]=15; menutxt[1]=0; sprintf(menutxt+1," total width "); for(nsub=1,ntot=1;nsub<=nprc_int;nsub++) if(strcmp(pinf_int(nsub,1,NULL,NULL),inParticle)==0) { sprintf(menutxt+1+15*ntot++," BR(%-3.3s , %-3.3s) ", pinf_int(nsub,2,NULL,NULL), pinf_int(nsub,3,NULL,NULL)); } for(ntot=0;ntot==0;) menu1(56,7,"Select",menutxt,"",&pscr,&ntot); if(ntot==0) return NULL; ntot--; if(ntot==0) nsubSel=0; else { for(nsub=1;nsub<=nprc_int&& ntot;nsub++) if(strcmp(pinf_int(nsub,1,NULL,NULL),inParticle)==0) ntot--; nsubSel=nsub-1; } return pscr; }
static double calcwidth12(void) { int i,nsub; double width12 = 0.; double selChan=0; int first=1; long N1; err_code = 0; for(nsub=1;nsub<=nprc_int;nsub++) widths[nsub-1]=0; for(nsub=1;nsub<=nprc_int;nsub++) { double m1, m2, m3; if(strcmp(pinf_int(nsub,1,&m1,&N1),inParticle)==0) { if(first) { if(EffQmass&&Q) *Q=m1; if(calcFunc_int()>0) { messanykey(15,15,"Can not calculate constraints"); return 0; } if(GG) { if(SC) *GG=*SC; else {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++) pvect[i]=0; pvect[0]=m1; pvect[7]=pRestOut; pvect[4]=sqrt(pRestOut*pRestOut+m2*m2); pvect[11]=-pRestOut; pvect[8]=sqrt(pRestOut*pRestOut+m3*m3); widths[nsub-1] = totcoef * sqme_int(nsub,pvect,&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 decay12information(double totwidth,int Branchings) { clrbox(1,1,53,16); clrbox(1,16, maxRow(), maxCol()); goto_xy(5,3);scrcolor(Red,BGmain); print(" Decay "); scrcolor(Blue,BGmain);print("%s -> 2*x ",inParticle); goto_xy(1,4); scrcolor(Red,BGmain); print(" Total width : "); scrcolor(FGmain,BGmain); if(err_code) {print(" incorrect "); return;} print("%.3E GeV ",totwidth); if (totwidth > 0. ) { int i,xcount = 31, ycount = 15; int * sort= (int*) malloc(sizeof(int)*nprc_int); for(i=0;i<nprc_int;i++) sort[i]=i; for(i=0;i<nprc_int-1;) { if(widths[sort[i]] < widths[sort[i+1]]) { int buff=sort[i]; sort[i]=sort[i+1]; sort[i+1]=buff; if (i!=0) i--; } else i++; } goto_xy(1,6); scrcolor(Red,BGmain); if(Branchings) print(" Modes and fractions :"); else print(" Partial widths [Gev] :"); for(i=0,xcount=5,ycount=7;i<nprc_int;i++,ycount++) if(widths[sort[i]]>0) { if(ycount >= maxRow()) { ycount =16; xcount += 25; if(xcount > maxCol()-20) break; if(xcount >30) ycount=16; else ycount=7; } goto_xy(xcount,ycount); scrcolor(Blue,BGmain); print("%3s ",pinf_int(sort[i]+1,2,NULL,NULL)); print("%3s - ", pinf_int(sort[i]+1,3,NULL,NULL)); scrcolor(FGmain,BGmain); if(Branchings) print("%8.2E%%", 100*widths[sort[i]]/totwidth); else print("%9.3E", widths[sort[i]]); } free(sort); } scrcolor(FGmain,BGmain); }
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 init_lha(int i,double * be, double * mass) { int k; int N,N1,N2; pinf_int( Nsub,1,NULL,&N1); pinf_int( Nsub,2,NULL,&N2); if(i==1) N=N1; else N=N2; if(abs(N1)>80 && abs(N2)>80) {if(N>0) N-=80; else N+=80;} *mass=0.9383; *be=1; sf_alpha=&(alpha_lha); for(k=0;k<15;k++) if(parton[k]==N) {pnum[i-1]=N; return 1;} pnum[i-1]=0; 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; }
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; }
static void write_event_cap(void) { int i,j; fprintf(events_,"#%s\n",VERSION_); fprintf(events_,"#Type %d -> %d\n",nin_int,nout_int); fprintf(events_,"#Initial_state\n"); fprintf(events_," P1_3=%E" , inP1); if(nin_int>1) fprintf(events_," P2_3=%E\n",-inP2);else fprintf(events_,"\n"); if(nin_int>1) wrt_sf__(events_); fprintf(events_,"#PROCESS "); for(i=1;i<=nin_int+nout_int; i++) { int pcode; char * pname=pinf_int(Nsub,i,NULL,&pcode); switch(pcode) { case 81: pcode= 1; break; case -81: pcode=-1; break; case 83: pcode= 3; break; case -83: pcode=-3; break; } fprintf(events_," %d(%s)", pcode, pname); if(i==nin_int) fprintf(events_," ->"); } fprintf(events_,"\n"); fprintf(events_,"#MASSES "); for(i=0;i<nin_int+nout_int;i++) { REAL m; pinf_int(Nsub,i+1,&m,NULL); fprintf(events_," %.10E", (double)m); } fprintf(events_,"\n"); if(integral.n_it) fprintf(events_,"#Cross_section(Width) %E\n",integral.s1/integral.n_it); else fprintf(events_,"#Cross_section(Width) Unknown\n"); fprintf(events_,"#Number_of_events %10d\n",0); fprintf(events_,"#Events "); if(nin_int==2) fprintf(events_," P1_3 [Gev] P2_3 [Gev] "); for(i=1;i<=nout_int; i++) for(j=1;j<=3;j++) fprintf(events_," P%d_%d [Gev] ",i+nin_int,j); // fprintf(events_," QCD SCALE Color !chains\n"); fprintf(events_," Q_factor alpha_QCD Color chains\n"); }
int wrtprc_(void) /* write process string */ { int i; char * s=Process; strcpy(s,pinf_int(Nsub,1,NULL,NULL)); if(is_polarized(1,Nsub)) strcat(s,"%"); if(nin_int==2) { strcat(s,", "); strcat(s,pinf_int(Nsub,2,NULL,NULL)); if(is_polarized(2,Nsub)) strcat(s,"%"); } strcat(s," -> "); for (i=nin_int+1;i<=nin_int+nout_int ;i++) { if( i!=nin_int+1) strcat(s,", "); strcat(s, pinf_int(Nsub,i,NULL,NULL)); } return 0; }
static void inmenutxt(char ** menutxt) { char * n1,*n2; int i,pos=11; *menutxt=(char *)malloc(2+10*nprc_int); *menutxt[0]=10; n1=pinf_int(1,1,NULL,NULL); sprintf(*menutxt+1," %-9.9s",n1); for(i=2;i<=nprc_int;i++) { n2=pinf_int(i,1,NULL,NULL); if(strcmp(n1,n2)!=0) { n1=n2; sprintf(*menutxt+pos," %-9.9s",n1); pos+=10; } } }
static int* allInP(int i) { static int * plist=NULL; int k,l; plist=realloc(plist,(nprc_int+1)*sizeof(int)); l=0; for(k=0;k<nprc_int;k++) { long N; int j; pinf_int(k+1,i,NULL,&N); for(j=0;j<l;j++) if(N==plist[j]) break; if(j==l) plist[l++]=N; } plist[l]=0; return plist; }
static void calccoef(void) {int i; double lambda12, lambda34, s_, ms, mdiff; double sqrt_S; pRestIn=va_int[0]; err_code = 0; for(i=0;i<4;i++) pinf_int(proces_1.nsub,i+1,pmass+i,NULL); sqrt_S=sqrt(pmass[0]*pmass[0]+pRestIn*pRestIn) +sqrt(pmass[1]*pmass[1]+pRestIn*pRestIn); s_=sqrt_S*sqrt_S; lambda12=2*sqrt_S*pRestIn; ms = pmass[2] + pmass[3]; if (ms >= sqrt_S) goto errorexit; mdiff=pmass[2] - pmass[3]; lambda34 = sqrt((s_ - ms*ms) * (s_ - mdiff*mdiff)); pRestOut=lambda34/(2*sqrt_S); totcoef = 3.8937966E8 * lambda34 /(32.0 * M_PI * lambda12 * s_); for(i=0;i<16;i++)pvect[i]=0; pvect[3] = pRestIn; pvect[7] =-pRestIn; pvect[0] = sqrt(pRestIn*pRestIn + pmass[0]*pmass[0]); pvect[4] = sqrt(pRestIn*pRestIn + pmass[1]*pmass[1]); pvect[8] = sqrt(pRestOut*pRestOut + pmass[2]*pmass[2]); pvect[12]= sqrt(pRestOut*pRestOut + pmass[3]*pmass[3]); err_code = 0; return; errorexit: if (err_code == 0) err_code = 4; }
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 wrtprc_(void) /* write process string */ { int i; char * s=Process; for(i=0; i<nin_int+nout_int; i++)p_names[i]=pinf_int(Nsub,i+1,NULL,p_codes+i); strcpy(s,p_names[0]); if(is_polarized(1,Nsub)) strcat(s,"%"); if(nin_int==2) { strcat(s,", "); strcat(s,p_names[1]); if(is_polarized(2,Nsub)) strcat(s,"%"); } strcat(s," -> "); for (i=nin_int;i<nin_int+nout_int ;i++) { if( i!=nin_int) strcat(s,", "); strcat(s,p_names[i]); } 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; }
int cs_numcalc(double Pcm) { int k,l; void * pscr0=NULL; void * pscr = NULL; get_text(1,3,60,11,&pscr0); k=proces_1.nsub; sprintf(procname,"%s,%s ->%s,%s",pinf_int(k,1,NULL,NULL), pinf_int(k,2,NULL,NULL),pinf_int(k,3,NULL,NULL),pinf_int(k,4,NULL,NULL)); va_int[0]=Pcm; cos1=-0.999; cos2= 0.999; infotext(); writeinformation(); k = 1; l = 1; recalc = 1; do { char menuTxt[]="\030" " Change parameter " " Set precision " " Cos13(min) = cosmin " " Cos13(max) = cosmax " " Angular dependence " " Parameter dependence " " sigma*v plots "; if (recalc) { total_cs(); recalc = 0; if (err_code) errormessage(); } improveStr(menuTxt,"cosmin","%.6f",cos1); improveStr(menuTxt,"cosmax","%.6f",cos2); menu1(54,4,"",menuTxt,"n_22_*",&pscr,&k); switch (k) { case 0: break; case 1: if(change_parameter(54,5,1)) recalc=1; break; case 2: do { /* Precision */ recalc = correctDouble(1,23," Enter precision : ",&eps,1); if (eps < 1.E-10 || eps > 0.0011) messanykey(10,12,"Range check error"); } while (!(eps >= 1.E-10 && eps <= 0.03)); break; case 3: recalc=correctDouble(15,10,"Min[cos(p1,p3)]=",&cos1,1); break; case 4: recalc=correctDouble(15,10,"Max[cos(p1,p3)]=",&cos2,1); break; case 5: if(err_code>1) errormessage(); else drawgraph(); break; case 6: paramdependence(totcs,procname,"Cross Section [pb]"); break; case 7: paramdependence(vtotcs,procname,"v*sigma[pb]"); break; } /* switch */ if (k > 0) writeinformation(); } while (k != 0); put_text(&pscr0); 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 is_polarized(int k,int nsub) { char name[20]; if(nin_int==1 || k>2 || k<1 ) return 0; sprintf(name,",%s,",pinf_int(nsub,k,NULL,NULL)); if(strstr(polarized_int[k],name)) return 1; else return 0; }
void decay12(void) { int i, k,L; void * pscr=NULL; char * mlist; static int Branch=1; widths=(double*)malloc(sizeof(double)*nprc_int); for(i=1;i<=nvar_int;i++) { if(!strcmp(varName_int[i],"Q")) Q=va_int+i; else if(!strcmp(varName_int[i],"GG")) GG=va_int+i; } if(GG)for(i=1;i<=nvar_int+nfunc_int;i++) if(!strcmp(varName_int[i],"SC")){ SC=va_int+i; break;} inmenutxt(&mlist); L=mlist[0]; sscanf(mlist+1,"%s",inParticle); for(k=1;k;) { char strmen[]="\030" " Incoming particle " " Show Branchings " " QCD Scale Q= Free " " Model parameters " " Constraints " " Parameter dependence " " Les Houches output "; clrbox(1,13, maxCol(), maxRow()); nsubSel=0; decay12information(calcwidth12(),Branch); if(EffQmass) improveStr(strmen,"Free ","M1"); if(!Branch) improveStr(strmen,"Branchings","Partial widths"); menu1(54,4,"",strmen,"n_12_*",&pscr,&k); switch (k) { case 1: { if(strlen(mlist)>L+2) { void * pscr2=NULL; int k=1; menu1(56,5,"",mlist,"",&pscr2,&k); if(k) sscanf(mlist+(k-1)*L+1,"%s",inParticle); put_text(&pscr2); } } break; case 2: Branch=!Branch; break; case 3: EffQmass=!EffQmass; break; case 4: change_parameter(54,8,0); break; case 5: show_depend(54,8); break; case 6: { char proc[20]; char dimInfo[20]="Width [GeV]"; void * pscr=selectChan(); if(!pscr) break; if(nsubSel==0) sprintf(proc,"%s -> 2*x",inParticle); else { sprintf(proc," BR(%s -> %s %s)",inParticle, pinf_int(nsubSel,2,NULL,NULL), pinf_int(nsubSel,3,NULL,NULL)); dimInfo[0]=0; } paramdependence( calcwidth12,proc,dimInfo); put_text(&pscr); } break; case 7: writeLesHdecays(); break; } } free(widths); free(mlist); clrbox(1,1,53,16); clrbox(1,16,maxCol(),maxRow()); }
int mc_isr__(int i) { long N; pinf_int(Nsub,i,NULL,&N); return N; }
static void writeLesHdecays(void) { int i,nsub; int first=1; long N1,N2,N3; double S; double *widths=(double *) malloc(sizeof(double)*nprc_int); double *sum=(double *) malloc(sizeof(double)*nprc_int); double *masses=(double *) malloc(3*sizeof(double)*nprc_int); long *codes=(long *) malloc(3*sizeof(long)*nprc_int); char ** names=malloc(3*sizeof(char*)*nprc_int); int npTot=0; char f_name[50]; FILE *f; char*inP=" "; nextFileName(f_name,"decaySLHA",".txt"); f=fopen(f_name,"w"); fprintf(f,"#Masses, widths and branchings in SLHA format:\n"); fprintf(f,"BLOCK MODELPARAMETERS:\n"); for(i=1;i<=nvar_int;i++) fprintf(f,"# %8s %E\n", varName_int[i], va_int[i]); fprintf(f,"BLOCK MASS # Mass Spectrum\n"); for(nsub=1;nsub<=nprc_int;nsub++) { for(i=1;i<4;i++) { double m; long N; char * nm=pinf_int(nsub,i,&m,&N); int j; for(j=0;j<npTot;j++) if(strcmp(nm,names[j])==0 || N==codes[j] || N==-codes[j]) break; if(j==npTot) { masses[j]=m; codes[j]=N; names[j]=nm; npTot++; } } } for(i=0;i<npTot;i++) fprintf(f,"%10d %E # %s\n",codes[i],masses[i],names[i]); free(masses); free(codes); free(names); err_code = 0; for(nsub=0;nsub<nprc_int;nsub++) sum[nsub]=0; for(nsub=1;nsub<=nprc_int;nsub++) { double m1, m2, m3; char *inP_new=pinf_int(nsub,1,&m1,&N1); int Nsum; first=strcmp(inP_new,inP); if(first) { Nsum=nsub-1; inP=inP_new; if(EffQmass&&Q) *Q=m1; if(calcFunc_int()>0) { messanykey(15,15,"Can not calculate constraints"); return; } if(GG) { if(SC) *GG=*SC; else {if(Q) *GG=sqrt(4*M_PI*alpha_2(*Q)); else *GG=sqrt(4*M_PI*alpha_2(m1));} } } pinf_int(nsub,1,&m1,&N1); 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++) pvect[i]=0; pvect[0]=m1; pvect[7]=pRestOut; pvect[4]=sqrt(pRestOut*pRestOut+m2*m2); pvect[11]=-pRestOut; pvect[8]=sqrt(pRestOut*pRestOut+m3*m3); widths[nsub-1] = totcoef * sqme_int(nsub,pvect,&err_code); if(err_code != 0) { errormessage(); widths[nsub-1]=0; err_code=0;} sum[Nsum] += widths[nsub-1]; } } inP=" "; for(nsub=1;nsub<=nprc_int;nsub++) { char *inP_new=pinf_int(nsub,1,NULL,&N1); first=strcmp(inP_new,inP); if(first) { inP=inP_new; S=sum[nsub-1]; if(S>0) fprintf(f,"DECAY %d %E # %s width\n", N1, S, inP); } if(S>0 && widths[nsub-1]!=0) { char * inP2=pinf_int(nsub,2,NULL,&N2); char * inP3=pinf_int(nsub,3,NULL,&N3); fprintf(f," %12.4E 2 %8d %8d # Br(%-3s -> %-3s %-3s) %11.3E[Gev]\n", widths[nsub-1]/S,N2,N3,inP,inP2,inP3,widths[nsub-1]); } } fclose(f); { char mess[100]; sprintf(mess,"Output is saved in %s",f_name); messanykey( 12, 12,mess); } free(widths); free(sum); }
int imkmom(double P1, double P2) { int i, j, k, l,ns; char lvbuf[PLISTLEN]; int ndim; physValRec * pList; beta[0]=sf_be[0]; beta[1]=sf_be[1]; if(nin_int==2) { if(nout_int==1) ndim=1; else { ndim = nout_int * 3 - 5; if (sf_num[0]) ndim++; if (sf_num[1]) ndim++; tfact0 = 2*M_PI*389379660.0; } }else { tfact0 = 2*M_PI; if(nout_int==2) ndim=1; else ndim = nout_int * 3 - 7;} for (i=0; i < nin_int + nout_int; i++) pinf_int(Nsub,i+1,pm+i,NULL); nout1 = nout_int - 1; if(nout1>DEPTH) return 0; nvposx = nin_int + nout_int + 1; nvposy = nvposx + 1; nvpos0 = nvposy + 1; /* * NVOUT( , ) FILLING */ for (i = 0; i < nout1; ++i) for (k = 0; k < 2; ++k) { if (kinmtc_1[i].lvout[k][1]) nvout[i][k] = nvpos0++; else nvout[i][k] = kinmtc_1[i].lvout[k][0]; } nvin[0] = nvpos0++; for (i = 1; i < nout1; ++i) { nvin[i]=0; for (j = 0; j < i; ++j) for (k = 0; k < 2; ++k) { if (eqvect_(kinmtc_1[i].lvin, kinmtc_1[j].lvout[k])) { nvin[i] = nvout[j][k]; lnkbab[i] = j; lnkleg[i] = k; } } if(!nvin[i]) { fprintf(stderr,"Error in kinematics \n"); sortie(52); } } for (i = 0; i < nout1; ++i) for (k = 0; k < 2; ++k) { REAL ss = 0; int pn; for(j=0; (pn=kinmtc_1[i].lvout[k][j]);j++) ss += pm[pn - 1]; summas[i][k] = ss; } if (nin_int == 2) { REAL m1=sf_num[0]?sf_mass[0]:pm[0]; REAL m2=sf_num[1]?sf_mass[1]:pm[1]; incomkin(m1, m2, P1, P2, &sqrt_S, &pcm, &rapidity); ssmin=pm[0]+pm[1]; if(ssmin<summas[0][0]+summas[0][1]) ssmin=summas[0][0]+summas[0][1]; ssmin*=ssmin; if( sf_num[0] && sf_num[1] ) {sbot=0;stop=4*pcm*pcm;} else if(sf_num[0]){sbot=m2*m2; stop=sbot+2*pcm*(pcm+sqrt(pcm*pcm+sbot));} else if(sf_num[1]){sbot=m1*m1; stop=sbot+2*pcm*(pcm+sqrt(pcm*pcm+sbot));} else stop = sqrt_S*sqrt_S; ssmax=stop; } else { REAL m1=pm[0]; rapidity=log((P1+sqrt(P1*P1+m1*m1))/m1 ) ; } for(i = 0; i < nout1; ++i) { nsph[i] = 0; for(k=0;k<2;k++) { for(ns=0; ns<10;ns++) { sph_inf[i][ns].ncsreg[k] = 0; sph_inf[i][ns].ncscut[k] = 0; sph_inf[i][ns].tcscut[k]=0; } nmsreg[i][k] = 0; nmscut[i][k] = 0; } } nss=0; for(l=0; invreg_1[l].lvinvr[0]; l++) { int orig=1, ll=0; for(;ll<l;ll++) {if( invreg_1[ll].nextrg == l+1) { orig=0; break;}} if(orig) { sngpos_(invreg_1[l].lvinvr, &i, &k, lvbuf); if (i==0) nss = l+1; else { i--; k--; if (lvbuf[0] == 0) nmsreg[i][k] = l+1; else { for (ns = 0; ns <nsph[i]; ++ns) if (eqvect_(lvbuf,sph_inf[i][ns].lvpole)) { sph_inf[i][ns].ncsreg[k] = l+1; break; } if(ns==nsph[i] && ns<10) { nsph[i]++; strcpy(sph_inf[i][ns].lvpole,lvbuf); if (spole_(invreg_1[l].lvinvr))sph_inf[i][ns].itypep = -2; else sph_inf[i][ns].itypep = -1; sph_inf[i][ns].ncsreg[k] = l+1; } } } } } for(l=0;l<nCuts;l++) if( invcut_1[l].key[0] == 'M') for(pList=invcut_1[l].pLists;pList;pList=pList->next) { char buff[20]; strcpy(buff,pList->pstr); coninv_(buff); sngpos_(buff, &i, &k, lvbuf); if (i == 0) rancor_(&ssmin, &ssmax, 0., 1., l+1); else if (lvbuf[0] == 0) nmscut[i-1][k-1] = l+1; else { i--; k--; for (ns = 0; ns < nsph[i ]; ++ns) { if (eqvect_(lvbuf, sph_inf[i][ns].lvpole)) { sph_inf[i][ns].ncscut[k] = l+1; break; } } if(ns==nsph[i] && ns <10 ) { nsph[i]++; strcpy(sph_inf[i][ns].lvpole,lvbuf); sph_inf[i][ns].itypep = 2; sph_inf[i][ns].ncscut[k] = l+1; } } } if(nin_int==2 && ssmin>=ssmax) return 0; if(nin_int==2) for(l=0;l<nCuts;l++) { int m; invcut_ tc=invcut_1[l]; /* if( tc.key[0]=='T' && tc.key[1]!='^' && tc.minon && tc.pLists && tc.pLists->pstr[1]==0 ) for(pList=invcut_1[l].pLists;pList;pList=pList->next)for(m=1;m<=2;m++) { char str[4]; strcpy(str+1,pList->pstr); str[0]=m; sngpos_(str, &i, &k, lvbuf); { i--; k--; for (ns = 0; ns < nsph[i ]; ++ns) { if(eqvect_(lvbuf, sph_inf[i][ns].lvpole) &&strcmp(kinmtc_1[i].lvout[k],str+1)==0) { sph_inf[i][ns].tcscut[k] = l+1; break; } } } } */ } for(i = 0; i < nout1; ++i) { if (nsph[i] == 0) { nsph[i] = 1; sph_inf[i][0].lvpole[0] = (i == 0 && nin_int == 1 )? nvposx:1; sph_inf[i][0].lvpole[1] = 0; sph_inf[i][0].itypep = 1; } else { ns = nsph[i]-1; if(sph_inf[i][ns].ncsreg[0] || sph_inf[i][ns].ncsreg[1]) sph_inf[i][0].itypep *=-1; } } for(i = 0; i<nout1; ++i) { REAL wesum = 0; for (ns = 0; ns<nsph[i]; ++ns) { int nwe = 0; for (k = 0; k < 2; ++k) for (l = sph_inf[i][ns].ncsreg[k];l;l=invreg_1[l-1].nextrg) ++nwe; if (sph_inf[i][ns].itypep >= 0) ++nwe; sph_inf[i][ns].sph_we = nwe; wesum += nwe; } for (ns = 0; ns <nsph[i]; ++ns) sph_inf[i][ns].sph_we /= wesum; } #ifdef DEBUG for (i = 0; i < nout1; ++i) { printf("Decay number %d nmscut= (%d,%d) nmsreg = (%d,%d)\n", i, nmscut[i][0], nmscut[i][1], nmsreg[i][0], nmsreg[i][1]); {int l,c; printf("kinematics= ("); for (l=0;c= kinmtc_1[i].lvin[l];l++) printf("%d",c); printf(")->("); for (l=0;c=kinmtc_1[i].lvout[0][l];l++) printf("%d",c); printf(")+("); for (l=0;c=kinmtc_1[i].lvout[1][l];l++) printf("%d",c); printf(")\n"); } printf(" summas=(%f,%f)\n",summas[i][0],summas[i][1]); for (ns = 0; ns < nsph[i]; ++ns) { int c; printf(" Sphere number = %d weight=%f type=%d \n", ns, sph_inf[i][ns].sph_we, sph_inf[i][ns].itypep); printf(" pole vector("); for(k=0; c=sph_inf[i][ns].lvpole[k]; k++) printf("%d",c); printf(")\n"); printf(" ncsreg=(%d,%d) ncscut=(%d,%d) tcscut=(%d,%d) \n", sph_inf[i][ns].ncsreg[0], sph_inf[i][ns].ncsreg[1], sph_inf[i][ns].ncscut[0], sph_inf[i][ns].ncscut[1], sph_inf[i][ns].tcscut[0], sph_inf[i][ns].tcscut[1]); } } #endif return ndim; } /* mkmom_ */
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; } } }
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 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 * pscr_mem=NULL; void (*quit)(int)=f3_key[7]; char menutxt[]="\030" " Subprocess " " IN state " " Model parameters " " Constraints " " QCD coupling " " 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 intergration"); get_text(1,10,80,24,&pscr_mem); 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: put_text(&pscr_mem); 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: put_text(&pscr_mem); 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) return 1; messanykey(15,15,"Energy is too small!"); break; } if(fillCutArray()) { if(blind) return 2; messanykey(15,15,"Can not evaluate cuts limlts"); 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); 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; } if(r) clearEventMax(); if(r&2) clearGrid(); if(r&1)newSession(); } }