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 calc_params(void) { double sqrt_S,Pcm,Q; /* vinf_(0,NULL,&sqrt_S); */ incomkin(0.,0.,inP1,inP2,NULL,&Pcm,NULL); sqrt_S=2*Pcm; if(scale>1.) Q=scale; else Q=scale*sqrt_S; beta = ALPHA*(2*log(Q/EM)-1)/M_PI; coeff = exp(beta * (.75 - EGAM)- lgamma(1+beta)); if(bOn) { b_ncl= 25*ALPHA*ALPHA*qTot/(12*EM*(xy_nm*1.E-6)*mmToGeV); b_ips=5*ALPHA*qTot*sqrt_S/(12*EM*EM*EM*z_mm*(xy_nm*1.E-6)*mmToGeV*mmToGeV); } }
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(); } }
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_ */
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(); } }