static void writeEvent(double *x, double w) { int i,icc; double GG,qF1,qF2,qR,qS,x1,x2; REAL pvectR[4*maxNp],cb_coeff_[buffSize],*cb_coeff; double pvect[4*maxNp]; double factor_0; int cb_pow=cb_int[Nsub-1].pow; int nc=cb_int[Nsub-1].nC; mkmom(x, &factor_0,&x1,&x2,pvectR); for(i=0;i<4*(nin_int+nout_int);i++) pvect[i]=pvectR[i]; Scale(Nsub,pvect,&qR,&qF1,&qF2,&qS); if(cb_pow) { double sum=0; int err; if(buffSize<cb_pow) cb_coeff=cb_coeff_; else cb_coeff=malloc(sizeof(REAL)*buffSize); GG=sqrt(4*M_PI*alpha_2(qR)); sqme_int(Nsub,GG,pvectR,cb_coeff,&err); for(i=0;i<cb_pow;i++) sum+=fabs(cb_coeff[i]); if(nPROCSS) pthread_mutex_lock(&drandXX_key); sum*=drandXX(); if(nPROCSS) pthread_mutex_unlock(&drandXX_key); for(i=0;i<cb_pow;i++) { sum-=fabs(cb_coeff[i]); if(sum<=0) break; } if(i==cb_pow) i--; icc=i; if(cb_coeff!=cb_coeff_) free(cb_coeff); } if(nPROCSS)pthread_mutex_lock(&wrt_key); fprintf(events_,"%12.3E",w); if(nin_int==2) fprintf(events_," %17.10E %17.10E",pvect[3],pvect[7]); for(i=0;i<nout_int;i++) fprintf(events_," %17.10E %17.10E %17.10E", pvect[4*(i+nin_int)+1],pvect[4*(i+nin_int)+2],pvect[4*(i+nin_int)+3]); fprintf(events_,"| %.3E %.3E ", qS,alpha_2(qR)); if(cb_pow) { int j; fprintf(events_," "); for(j=0;j<nc;j++) { int *offset=cb_int[Nsub-1].chains +4*nc*icc+4*j; fprintf(events_,"(%d %d %d %d)",offset[0],offset[1],offset[2],offset[3]); } } fprintf(events_,"\n"); // fflush(events_); if(nPROCSS)pthread_mutex_unlock(&wrt_key); }
static void writeEvent(long cCube, int n, char * rand_state,double*pvect) { int i; int icc; double qF,qR; #ifdef PARKED fprintf(events_,"%05X|%s|%d\n",cCube,rand_state,n); #else if(*cb_pow_int) { double sum=0; for(i=0;i<*cb_pow_int;i++) sum+=fabs((*cb_coeff_int)[i]); sum*=drandXX(); for(i=0;i<*cb_pow_int;i++) { sum-=fabs((*cb_coeff_int)[i]); if(sum<=0) break; } if(i==*cb_pow_int) i--; if((*cb_coeff_int)[i]<0) n*=-1; icc=i; } fprintf(events_,"%8d ",n); if(nin_int==2) fprintf(events_," %17.10E %17.10E",pvect[3],pvect[7]); for(i=0;i<nout_int;i++) fprintf(events_," %17.10E %17.10E %17.10E", pvect[4*(i+nin_int)+1],pvect[4*(i+nin_int)+2],pvect[4*(i+nin_int)+3]); Scale(pvect,&qF,&qR); fprintf(events_,"| %.3E %.3E ", qF,alpha_2(qR)); if(*cb_pow_int) { int j; fprintf(events_," "); for(j=0;j<*cb_nc_int;j++) fprintf(events_,"(%d %d)",(*cb_chains_int)[2*(*cb_nc_int)*icc+2*j], (*cb_chains_int)[2*(*cb_nc_int)*icc+2*j+1]); } fprintf(events_,"\n"); #endif }
int mkmom(double*x,double*tfact,double*xp1,double*xp2,REAL*pvect) { int i,k,l; int nx=0; double fct0, fct1, fct2; REAL pIn[2][4]={{0,0,0,0},{0,0,0,0}}; REAL pXY[2][4]={{0,1,0,0},{0,0,1,0}}; REAL xcos, xfi, parfi; double cosmin, cosmax, parcos; REAL ytilda=0; int i__2; REAL d__1; REAL ff, al; REAL xx, bes; double fct; double stilda; REAL rstilda, pcmtilda, xtilda; int ns; REAL psy1, psy2, x1,x2; double smin, smax; REAL amass[DEPTH][2]; int nvpole; int nvpos; REAL hsum[2], hdif; REAL fct_1__; int nsing; iDecay memDecay; sing_struct singar[200]; *tfact = tfact0; /* ** MOMENTS */ if(nout_int==1) { REAL s=pm[0]+pm[1], d=pm[0]-pm[1], p=sqrt((pm[2]-s)*(pm[2]+ s)*(pm[2]-d)*(pm[2]+d))/(2*pm[2]); REAL e1=sqrt(p*p+pm[0]*pm[0]), e2=sqrt(p*p+pm[1]*pm[1]); REAL y1= log( (pcm +sqrt(pm[0]*pm[0]+pcm*pcm))/(e1+p) ); REAL y2=-log( (pcm +sqrt(pm[1]*pm[1]+pcm*pcm))/(e2+p) ); if(pm[0]>0) { REAL y= log( pm[0]/(e1+p)); if(y2<y) y2=y; } if(pm[1]>0) { REAL y= -log( pm[1]/(e2+p)); if(y1>y) y1=y; } for(i=0;i<12;i++)pvect[i]=0; pvect[0]=e1; pvect[3]=p; pvect[4]=e2; pvect[7]=-p; pvect[8]=pm[2]; *tfact=389379660.0*M_PI/(2*p*pm[2]*sqrt_S*sqrt_S); if(sf_num[0] && sf_num[1]) { ytilda=x[0]*y1+ (1-x[0])*y2; *tfact*=(y1-y2);} else if(sf_num[0]) ytilda=y2; else if(sf_num[1]) ytilda=y1; else return 1; LorRot(ytilda,3,pvect); *xp1=sf_num[0]? pvect[3]/pcm:1; *xp2=sf_num[1]?-pvect[7]/pcm:1; LorRot(rapidity,3,pvect); return 0; } if (nin_int == 2) { REAL y1,y2; if (sf_num[0] || sf_num[1]) { nsing = 0; getreg_(&nsing, singar, 0., 1., nss); bes = beta[0]+ beta[1]; if (bes >= 1) al = 1; else if (nsing) al = 0.5; else al = 0; xx = x[nx++]; if (xx < al) { xx /= al; regfun_(2,nsing,singar,ssmin,ssmax,xx,&stilda,&fct1); } else { if(xx==al) xx=1;else xx = (1 - xx) / (1 - al); stilda=stop-pow(xx*pow(stop-ssmin,bes)+(1-xx)*pow(stop-ssmax,bes),1/bes); regfct_(2,nsing,singar,ssmin,ssmax,stilda,&fct1); } fct1 /= stop-sbot; if (bes < 1) { ff = pow(1 - ssmin/stop, bes) - pow(1 - ssmax/stop, bes); fct2 = ff / bes * pow( 1 - stilda/stop, 1 - bes); *tfact *= ff/ (al * fct2 / fct1 + (1 - al)); } else *tfact *= fct1; xtilda=(stilda-sbot)/(stop-sbot); if (sf_num[0] && sf_num[1]) { REAL yy = log(1/xtilda); xx = x[nx++]; if (beta[0] < 1 && beta[1] < 1) { al = beta[1]/(beta[0]+beta[1]); if (xx < al) { xx /= al; psy1 = pow(xx, 1 / beta[0]); psy2 = 1 - psy1; } else { if(xx==al) xx=1; else xx = (1 - xx) / (1 - al); psy2 = pow(xx, 1 / beta[1]); psy1 = 1 - psy2; } y1 = yy * psy1; y2 = yy * psy2; *tfact *=pow(divy_(y1),beta[0]-1)*pow(divy_(y2),beta[1]-1)/ (pow(psy1,1-beta[0])+pow(psy2,1-beta[1])); if (bes < 1) *tfact *= pow( divy_(yy),1-bes); else *tfact *= bes*pow(yy,bes-1); } else if (beta[0] < 1) { psy1 = pow(xx, 1 / beta[0]); y1 = yy * psy1; y2 = yy * (1 - psy1); *tfact *= pow(yy, *beta)*pow(divy_(y1),beta[0]-1); } else if (beta[1] < 1) { psy2 = pow(xx, 1 / beta[1]); y2 = yy * psy2; y1 = yy * (1 - psy2); *tfact *= pow(yy,beta[1])*pow(divy_(y2),beta[1]-1); } else { y1 = yy * xx; y2 = yy - y1; *tfact *= yy; } x1 = exp(-y1); x2 = exp(-y2); ytilda=(y2-y1)/2; } else if (sf_num[0]) { REAL e2=sqrt(pm[1]*pm[1]+pcm*pcm); x1 = xtilda; x2 = 1; ytilda=0.5*log((e2+(2*x1-1)*pcm)/(e2+pcm)); } else { REAL e1=sqrt(pm[0]*pm[0]+pcm*pcm); x1 = 1; x2 = xtilda; ytilda=-0.5*log((e1+(2*x2-1)*pcm)/(e1+pcm)); } } else { x1 = 1; x2 = 1; stilda = sqrt_S*sqrt_S; ytilda=0; } rstilda = sqrt(stilda); pcmtilda=cmfun(rstilda,pm[0],pm[1]); pIn[0][3]=pcmtilda; pIn[1][3]=-pcmtilda; /* *sf_fact= *tfact/tfact0; */ } /* * FILLING ZERO COMPONENTS FOR in-PARTICLES */ for (k = 0; k < nin_int; ++k) pvFill(pm[k],pIn[k],k+1,pvect); if (nin_int == 2) *tfact /= 4*pcmtilda *rstilda; else { rstilda = pm[0]; *tfact /= rstilda * 2; ytilda=0;} /* * X & Y AXISES */ pvFill(0,pXY[0],nvposx,pvect); pvFill(0,pXY[1],nvposy,pvect); nvpos = nvpos0; nvpole =nvpos++; /* * MASS INTEGRATION */ for (i = 0; i < nout1; ++i) { REAL sval= i? amass[lnkbab[i]][lnkleg[i]]: rstilda; for (k = 0; k < 2; ++k) { if (kinmtc_1[i].lvout[k][1]) { double sqmass; REAL xx=x[nx++]; d__1= k? sval - amass[i][0] : sval - summas[i][1]; smax = d__1 * d__1; d__1 = summas[i][k]; smin = d__1 * d__1; if (nmscut[i][k]) rancor_(&smin, &smax,0., 1., nmscut[i][k]); if (smin >= smax) {*tfact = 0; return 0;} if (nmsreg[i][k] ) { nsing = 0; getreg_(&nsing, singar, 0., 1.,nmsreg[i][k]); regfun_(2,nsing,singar,smin,smax,xx,&sqmass,&fct); } else { sqmass = xx * smax + (1 - xx) * smin; fct = smax - smin; } amass[i][k] = sqrt(sqmass); *tfact *= fct; } else amass[i][k]= summas[i][k]; } } lvtonv(kinmtc_1[0].lvin, 0 , nvin[0],pvect); /*very stupid*/ for (i = 0; i < nout1; ++i) /* MAIN CYCLE */ { int ns___=nsph[i]-1; double Emax[2]; if (i == 0 && nin_int == 1) xcos = 0.1 /* was fixed 0.1 */; else xcos = x[nx++]; al = 0; l = 0; if (i == 0 || (i == 1 && nin_int == 1)) { xfi = 0.1; /* was fixed 0.1; */ for(;l<=ns___;l++) { al += sph_inf[i][l].sph_we; if (xcos <= al) ns___ = l; } xcos = (al - xcos) / sph_inf[i][ns___].sph_we; } else { xfi = x[nx++]; for(;l<=ns___;l++) { al += sph_inf[i][l].sph_we; if (xfi <= al) ns___ = l; } xfi = (al - xfi) /sph_inf[i][ns___].sph_we; } lvtonv( sph_inf[i][ns___].lvpole,nin_int, nvpole,pvect); decay_0(nvin[i], amass[i][0], amass[i][1], &fct0, Emax,&memDecay,pvect); if(fct0==0) {*tfact=0; return 0;} if(!isfinite(fct0)) { printf("mkmom infinite factor\n"); *tfact=0; return 0; } decay_1(nvpole, hsum, &hdif,&memDecay,pvect); cosmin = -1; cosmax = 1; nsing = 0; for (k = 0; k < 2; ++k) { int ncM=sph_inf[i][ns___].ncscut[k]; int ncT=sph_inf[i][ns___].tcscut[k]; d__1 = ((k << 1) - 1) / hdif; getreg_(&nsing,singar,hsum[k],d__1,sph_inf[i][ns___].ncsreg[k]); if(ncM) rancor_(&cosmin,&cosmax,hsum[k],d__1,ncM); if(ncT) rancor_t(&cosmax,hsum[k],d__1,Emax[k], pm[sph_inf[i][ns___].lvpole[0]-1],pcmtilda, amass[i][k], invcut_1[ncT-1].cvmin ); if (cosmin >= cosmax) {*tfact = 0; return 0;} } regfun_(sph_inf[i][ns___].itypep,nsing,singar,cosmin,cosmax,xcos,&parcos,&fct); fct_1__ = sph_inf[i][ns___].sph_we / fct; parfi = (xfi * 2 - 1) * M_PI; decay_3(nvposy, parcos, parfi, nvout[i][0], nvout[i][1],&memDecay,pvect); i__2 = nsph[i]; for (ns = 0; ns < i__2; ++ns) if (ns != ns___) { lvtonv(sph_inf[i][ns].lvpole, nin_int, nvpole,pvect); decay_1(nvpole, hsum, &hdif,&memDecay,pvect); decay_2(nvout[i][1], &parcos,&memDecay,pvect); cosmin = -1; cosmax = 1; nsing = 0; for (k = 0; k < 2; ++k) { int ncM=sph_inf[i][ns].ncscut[k]; int ncT=sph_inf[i][ns].tcscut[k]; d__1 = ((k << 1) - 1) / hdif; getreg_(&nsing,singar,hsum[k],d__1,sph_inf[i][ns].ncsreg[k]); if(ncM) rancor_(&cosmin,&cosmax,hsum[k],d__1,ncM); if(ncT) rancor_t(&cosmax,hsum[k],d__1,Emax[k], pm[sph_inf[i][ns___].lvpole[0]-1],pcmtilda, amass[i][k], invcut_1[ncT-1].cvmin ); if (cosmin>=parcos || parcos>=cosmax){*tfact=0; return 0;} } regfct_(sph_inf[i][ns].itypep,nsing,singar,cosmin,cosmax,parcos, &fct); fct_1__ += sph_inf[i][ns].sph_we/ fct; } *tfact = *tfact * fct0 / fct_1__; } if(nin_int==2) { *xp1=sf_num[0]? x1:1; *xp2=sf_num[1]? x2:1; LorRot(rapidity+ytilda,nin_int+nout_int,pvect); AzimuthRot(drandXX()*2*M_PI,nout_int, pvect+8); } else { Rot3D(2*(drandXX()-0.5),drandXX()*2*M_PI,drandXX()*M_PI,nout_int,pvect+4); LorRot(rapidity,nin_int+nout_int,pvect); } if(!isfinite(*tfact)) { fprintf(stderr,"mkmom: infinite factor\n"); *tfact=0; return 0; } for(i=0;i<(nin_int+nout_int)*4;i++) if(!isfinite(pvect[i])) {*tfact=0; return 0;} return 0; }