static double vsigma23integrandT(double *x, double w) { double pcmIn,sqrtS,M45; double M45_min=pmass[i4]+pmass[i5],M45_max=sqrtSmax-pmass[i3]; int err; double r, x1,x2,y,z, bess,Rm; double GG; REAL pvect[20]; z=1-x[0]*x[0]; sqrtS=M1+M2-3*T_*log(z); if(sqrtS<=sqrtSmin || sqrtS>=sqrtSmax) return 0; pcmIn=decayPcm(sqrtS,pmass[0], pmass[1]); M45=M45_min+x[1]*(M45_max-M45_min); x1=M1/T_; x2=M2/T_; y=sqrtS/T_; if(y-x1-x2>50) return 0; r=kinematic_23(pcmIn,i3, M45, 2*x[2]-1 ,2*x[3]-1,M_PI*x[4],pmass,pvect)*8*M_PI*(M45_max-M45_min); // /pcmIn if(r==0) return 0; GG=sqrt(4*M_PI*parton_alpha(sqrtS)); r*= CI->sqme(1,GG, pvect,&err); bess= sqrt(2*x1*x2/y/M_PI)*exp(-(y-x1-x2))*K1pol(1/y)/(K2pol(1/x1)*K2pol(1/x2)); // bess=bessk1(sqrtS/T_)/bessk2(M1/T_)/bessk2(M2/T_); Rm=sqrtS/M1/M2; r*= pcmIn*bess*Rm*Rm*6*x[0]/z; return r; }
static double vcs22(numout * cc,int nsub,int * err) { int i; double pcm,r; double pmass[4], pvect[16]; double GG=sqrt(4*M_PI*parton_alpha(3*Mcdm)); for(i=1;i<=cc->interface->nvar;i++) if(cc->link[i]) cc->interface->va[i]=*(cc->link[i]); if( cc->interface->calcFunc()>0 ) {*err=4; return 0;} *(cc->interface->gtwidth)=0; *(cc->interface->twidth)=0; *(cc->interface->gswidth)=0; for(i=0;i<4;i++) cc->interface->pinf(nsub,1+i,pmass+i,NULL); *err=0; if(pmass[0]+pmass[1] <= pmass[2]+pmass[3]) return 0; for(i=0;i<16;i++) pvect[i]=0; pcm= decayPcm(pmass[0]+pmass[1],pmass[2],pmass[3]); for(i=0;i<2; i++) pvect[4*i]=pmass[i]; for(i=2;i<4; i++) pvect[4*i]=sqrt(pmass[i]*pmass[i] +pcm*pcm); pvect[8+3]=pcm; pvect[12+3]=-pcm; r=cc->interface->sqme(nsub,GG,pvect,err); return 3.8937966E8*r*pcm/(16*M_PI*pmass[0]*pmass[1]*(pmass[0]+pmass[1])); }
static double vsigma24integrandT(double *x, double w) { double pcmIn,sqrtS,M34,M56; double M34_min=pmass[i3]+pmass[i4],M34_max=sqrtSmax-pmass[i5]-pmass[i6]; double M56_min=pmass[i5]+pmass[i6],M56_max=sqrtSmax-pmass[i3]-pmass[i4]; int err; double r, x1,x2,y,z, bess,Rm; double GG; REAL pvect[24]; z=1-x[0]*x[0]; sqrtS=M1+M2-3*T_*log(z); if(sqrtS<=sqrtSmin || sqrtS>=sqrtSmax) return 0; pcmIn=decayPcm(sqrtS,pmass[0], pmass[1]); M34=M34_min+x[1]*(M34_max-M34_min); M56=M56_min+x[2]*(M56_max-M56_min); x1=M1/T_; x2=M2/T_; y=sqrtS/T_; if(y-x1-x2>50) return 0; r=kinematic_24(pcmIn,i3,i4, M34, M56, 2*x[3]-1 ,2*x[4]-1,2*x[5]-1, 2*M_PI*x[6], 2*M_PI*x[7],pmass,pvect) *(M34_max-M34_min)*(M56_max-M56_min)*2*4*M_PI*4*M_PI; // /pcmIn GG=sqrt(4*M_PI*parton_alpha(sqrtS)); r*= CI->sqme(1,GG, pvect,&err); bess= sqrt(2*x1*x2/y/M_PI)*exp(-(y-x1-x2))*K1pol(1/y)/(K2pol(1/x1)*K2pol(1/x2)); // bess=bessk1(sqrtS/T_)/bessk2(M1/T_)/bessk2(M2/T_); Rm=sqrtS/M1/M2; r*= pcmIn*bess*Rm*Rm*6*x[0]/z; return r; }
static double vsigma23integrand0(double *x, double w) { double r,sqrtS=M1+M2, M45_min=pmass[i4]+pmass[i5],M45_max=M1+M2-pmass[i3]; int err; double GG; REAL pvect[20]; r=kinematic_23(0.,i3,M45_min+x[0]*(M45_max-M45_min),0.5,2*x[1]-1,M_PI*x[2],pmass,pvect)*8*M_PI*(M45_max-M45_min); if(r==0) return 0; GG=sqrt(4*M_PI*parton_alpha(sqrtS)); r*= CI->sqme(1,GG, pvect,&err); r*= (M1+M2)/M1/M2; //printf("r=%e\n",r); return r; }
double dSigma_dCos(double cos_f) { double r; double sin_f=sqrt(fabs((1-cos_f)*(1+cos_f))); int err_code=0; pvect[11]=PcmOut*cos_f; pvect[15]=-pvect[11]; pvect[10]=PcmOut*sin_f; pvect[14]=-pvect[10]; r = (*sqme22)(nsub22,sqrt(4*M_PI*parton_alpha(GGscale)),pvect,&err_code); err_code=0; return r * totcoef; }
double cs22(numout * cc, int nsub, double P, double cos1, double cos2 , int * err) { int i; double pmass[4]; for(i=1;i<=cc->interface->nvar;i++) if(cc->link[i]) cc->interface->va[i]=*(cc->link[i]); GG=sqrt(4*M_PI*parton_alpha(GGscale)); if( cc->interface->calcFunc()>0 ) {*err=4; return 0;} *(cc->interface->gtwidth)=0; *(cc->interface->twidth)=0; *(cc->interface->gswidth)=1; for(i=0;i<4;i++) cc->interface->pinf(nsub,1+i,pmass+i,NULL); *err=0; sqme22=cc->interface->sqme; nsub22=nsub; if(kin22(P,pmass)) return 0; else return 3.8937966E8*simpson(dSigma_dCos,cos1,cos2,0.3*eps); }
static double cos_integrand(double xcos) { int err; double xsin=sqrt(1-xcos*xcos); double GG; pvect[9]=pcmOut*xcos; pvect[10]=pcmOut*xsin; pvect[13]=-pvect[9]; pvect[14]=-pvect[10]; /* s=(pvect[0]+pvect[4]); s=s*s; t=pmass[0]*pmass[0]+pmass[2]*pmass[2]-2*(pvect[0]*pvect[8] -pvect[1]*pvect[9]); u=pmass[0]*pmass[0]+pmass[3]*pmass[3]-2*(pvect[0]*pvect[12]-pvect[1]*pvect[13]); Q=sqrt(2*s*fabs(t*u)/(s*s+t*t+u*u)); */ GG=sqrt(4*M_PI*parton_alpha(fixed_Q)); return sqme22(nsub22,GG,pvect,&err)*convStrFun2(x0,fixed_Q,pc1_,pc2_,ppFlag); }
static double vsigma24integrand0(double *x, double w) { double r,sqrtS=M1+M2,M34,M56; double M34_min=pmass[i3]+pmass[i4],M34_max=M1+M2-pmass[i5]-pmass[i6], M56_min=pmass[i5]+pmass[i6],M56_max=M1+M2-pmass[i3]-pmass[i4]; int err; double GG; REAL pvect[24]; M34=M34_min+x[0]*(M34_max-M34_min); M56=M56_min+x[1]*(M56_max-M56_min); r=kinematic_24(0., i3,i4,M34, M56, 0.5 ,2*x[2]-1,2*x[3]-1, 2*M_PI*x[4], 2*M_PI*x[5],pmass,pvect) *(M34_max-M34_min)*(M56_max-M56_min)*2*4*M_PI*4*M_PI; GG=sqrt(4*M_PI*parton_alpha(sqrtS)); r*= CI->sqme(1,GG, pvect,&err); r*= (M1+M2)/M1/M2; //printf("r=%e\n",r); return r; }
int vPolar( int out1,int out2,int out3, double*left,double*right,double*lng) { double pvect[20],pcm1,pcm2,ms,md,chY,shY; int i,err_code; int iW,ie,in; double m[5]; int code[5]; double massMin=-1; int oId; char n1[10],n2[10],n3[10]; numout * cc; char *Wp=NULL,*el=NULL,*Ne=NULL,*o1=NULL,*O1=NULL; double r[3]; double GG=sqrt(4*M_PI*parton_alpha(2*Mcdm)); for(i=0;i<nModelParticles;i++) { if(ModelPrtcls[i].NPDG== out1) { Wp=ModelPrtcls[i].name; sprintf(n1,"p%d",i+1);} if(ModelPrtcls[i].NPDG==-out1) { Wp=ModelPrtcls[i].aname;sprintf(n1,"m%d",i+1);} if(ModelPrtcls[i].NPDG== out2) { el=ModelPrtcls[i].name; sprintf(n2,"p%d",i+1);} if(ModelPrtcls[i].NPDG==-out2) { el=ModelPrtcls[i].aname;sprintf(n2,"m%d",i+1);} if(ModelPrtcls[i].NPDG== out3) { Ne=ModelPrtcls[i].name;sprintf(n3,"p%d",i+1);} if(ModelPrtcls[i].NPDG==-out3) { Ne=ModelPrtcls[i].aname; sprintf(n3,"m%d",i+1);} if(ModelPrtcls[i].name[0]=='~') { double mass=fabs(findValW(ModelPrtcls[i].mass)); if(mass<massMin || massMin<0) { o1=ModelPrtcls[i].name; O1=ModelPrtcls[i].aname; massMin=mass; oId=i+1; } } } if(!o1 || !O1 || !Wp || !el || !Ne) return 1; { char lib[40], process[30], cond[20]; sprintf(lib,"p%d_Polar_%s%s%s",oId,n1,n2,n3); sprintf(process,"%s,%s->%s,%s,%s",o1,O1,Wp,el,Ne); sprintf(cond,"%s!=2",Wp); cc=getMEcode(0,1,process,cond,NULL,lib); if(!cc) { printf("can not generate\n");return 2;} } for(i=1;i<=cc->interface->nvar;i++) if(cc->link[i]) cc->interface->va[i]=*(cc->link[i]); if( cc->interface->calcFunc()>0 ) { return -1;} for(i=0;i<5;i++) cc->interface->pinf(1,i+1,m+i,code+i); for(i=0;i<20;i++) pvect[i]=0; pvect[0]=m[0]; pvect[4]=m[1]; iW=ie=in=-1; for(i=2;i<5;i++) { if(code[i]==out1) iW=i; if(code[i]==out2) ie=i; if(code[i]==out3) in=i; } if(iW<0 || ie <0 || in<0) return 1; if(m[0]+m[1]<=2*m[iW]) { printf("Mcdm too low\n"); return 3;} pcm1=sqrt((m[0]+m[1])*(m[0]+m[1]) - 4*m[iW]*m[iW])/2; ms=m[ie]+m[in]; md=m[ie]-m[in]; pcm2=sqrt((m[iW]*m[iW] - ms*ms)*(m[iW]*m[iW]-md*md))/(2*m[iW]); for(i=0;i<3;i++) { double csfi=i-1; pvect[4*iW]= sqrt(m[iW]*m[iW]+pcm1*pcm1); pvect[4*iW+3] = -pcm1; pvect[4*ie]=sqrt(m[ie]*m[ie]+pcm2*pcm2); pvect[4*ie+3]=pcm2*csfi; pvect[4*ie+2]=pcm2*sqrt(1-csfi*csfi); pvect[4*in]=sqrt(m[in]*m[in]+pcm2*pcm2); pvect[4*in+3]=-pcm2*csfi; pvect[4*in+2]=-pcm2*sqrt(1-csfi*csfi); chY=sqrt(1+pcm1*pcm1/m[iW]/m[iW]); shY=sqrt(pcm1*pcm1/m[iW]/m[iW]); { double p0=pvect[4*ie], p3=pvect[4*ie+3]; pvect[4*ie]= chY*p0 + shY*p3; pvect[4*ie+3]=shY*p0 + chY*p3; p0=pvect[4*in]; p3=pvect[4*in+3]; pvect[4*in]= chY*p0 + shY*p3; pvect[4*in+3]=shY*p0 + chY*p3; } r[i]=(cc->interface->sqme)(1,GG,pvect,&err_code); } { double s; r[2]/=4; r[0]/=4; r[1]=(r[1]-r[0]-r[2])/2; s=r[0]+r[1]+r[2]; s=r[0]+r[1]+r[2]; if(left) *left=r[2]/s; if(right) *right=r[0]/s; if(lng) *lng=r[1]/s; } return 0; }
int MSSMDDtest(int loop, double*pA0,double*pA5,double*nA0,double*nA5) { double ApB[2][7],AmB[2][7],MI[2][2][7],NL[5],T3Q[2],EQ[2],mq[7],mqSM[7], msq[2][7],Aq[7]; double mh,mH,ca,sa,mu; double o1o1h,o1o1H,SQM[2][2][2][2],capb,sapb,w2s3,w4s3; char buffName[10]; char * ZqNames[6]={"Zdd" ,"Zuu" ,"Zss", "Zcc", "Zb", "Zt"}; char * MS1mass[6]={"MSdL","MSuL","MSsL","MScL","MSb1","MSt1"}; char * MS2mass[6]={"MSdR","MSuR","MSsR","MScR","MSb2","MSt2"}; char * AqNames[6]={"Ad","Au", "Ad","Au","Ab","At"}; char mess[10]; double ALPE,SW,CW,MW,MZ,E,G,mne,beta,sb,cb,s; int i,II,IQ,i1,i2; double Ampl0,Ampl2; double MN=0.939; double MqPole[7]={0,0,0,0,1.67,4.78,173.}; double qcdNLO,qcdNLOs; double wS0P__[6],wS0N__[6]; /*scalar */ double wV5P__[3],wV5N__[3]; /*pseudo-vector*/ for(i=0;i<3;i++) { wS0P__[i]= *(&(ScalarFFPd)+i); wS0N__[i]= *(&(ScalarFFNd)+i); wV5P__[i]= *(&(pVectorFFPd)+i); wV5N__[i]= *(&(pVectorFFNd)+i); } for(s=0,i=0;i<3;i++) s+= wS0P__[i]; for(s=2./27.*(1-s),i=3;i<6;i++)wS0P__[i]=s; for(s=0,i=0;i<3;i++) s+= wS0N__[i]; for(s=2./27.*(1-s),i=3;i<6;i++)wS0N__[i]=s; *pA0=0,*pA5=0,*nA0=0,*nA5=0; if(sortOddParticles(mess)) return 0; if(strcmp(mess,"~o1")!=0) { printf("qbox returns 0 because WINP is not ~o1\n"); return 0;} /*ccccccccccccccccccc CONSTANTS ccccccc*/ ALPE=1/127.994; SW=findValW("SW"); CW=sqrt(1.-SW*SW); MZ=findValW("MZ"); MW=MZ*CW; E=sqrt(4*M_PI*ALPE); G =E/SW; mne=fabs(findValW("MNE1")); /*=======*/ beta=atan(findValW("tB")); sb=sin(beta); cb=cos(beta); mu=findValW("mu"); /*======== Quark,SQUARK masses and mixing ======*/ for(IQ=1;IQ<=6;IQ++) { mqSM[IQ]= pMass(pdg2name(IQ)); mq[IQ]= mqSM[IQ]; msq[0][IQ]=findValW(MS1mass[IQ-1]); msq[1][IQ]=findValW(MS2mass[IQ-1]); for(i1=0;i1<2;i1++) for(i2=0;i2<2;i2++) { sprintf(buffName,"%s%d%d", ZqNames[IQ-1],i1+1,i2+1); MI[i1][i2][IQ]=findValW(buffName); } Aq[IQ]=findValW(AqNames[IQ-1]); } mq[1]/=1+deltaMd(); mq[3]/=1+deltaMd(); mq[5]/=1+deltaMb(); for(i=1;i<=4;i++){sprintf(buffName,"Zn1%d",i); NL[i]=findValW(buffName);} T3Q[0]=0.5; EQ[0]=2/3.; T3Q[1]=-0.5; EQ[1]=-1/3.; for(IQ=1;IQ<=6;IQ++) for( II=0;II<2;II++) { double X,Y,Z,A,B; X=-(T3Q[IQ&1]*NL[2]+SW/CW*NL[1]/6); Y=SW/CW*EQ[IQ&1]*NL[1]; Z= -0.5*( (IQ&1)? mq[IQ]*NL[3]/cb: mq[IQ]*NL[4]/sb )/MW; A= G*(MI[II][0][IQ]*(X+Z)+MI[II][1][IQ]*(Y+Z)); B= G*(MI[II][0][IQ]*(X-Z)+MI[II][1][IQ]*(-Y+Z)); ApB[II][IQ] =(A*A+B*B)/2; AmB[II][IQ] =(A-B)*(A+B)/2; /* Normalized like in D&N */ } /* Higgs sector */ mh=findValW("Mh"); mH=findValW("MH"); sa=findValW("sa"); ca=findValW("ca"); o1o1h= E*(ca*NL[4]+sa*NL[3])*(CW*NL[2]-SW*NL[1])/CW/SW; o1o1H=-E*(ca*NL[3]-sa*NL[4])*(CW*NL[2]-SW*NL[1])/CW/SW; /*====================================================================== */ /*========= STARTING OF SUMMATION OF DIFFERENT CONTRIBUTIONS =========== */ /*================= THE SD AMPLITUDED ================= */ /****** light squarks SD contribution */ for(IQ=1;IQ<=3;IQ++) for(II=0;II<2;II++) { double D=SQ(msq[II][IQ])-SQ(mne)-SQ(mqSM[IQ]); double D2=D*D-SQ(2*mne*mqSM[IQ]); double f=sqrt(3.)*0.25*ApB[II][IQ]*D/D2; *pA5+=f*wV5P__[IQ-1]; *nA5+=f*wV5N__[IQ-1]; } /****** Z SD contribution */ for(IQ=1;IQ<=3;IQ++) { double f=sqrt(3.)*0.5*(SQ(NL[4])-SQ(NL[3]))*SQ(G/2/MW)*T3Q[IQ&1]; *pA5+=f*wV5P__[IQ-1]; *nA5+=f*wV5N__[IQ-1]; } *pA5/=sqrt(3); *nA5/=sqrt(3); /*================= THE SI AMPLITUDED =================*/ /****** light quarks-squarks SI contribution (plus heavy squarks at tree level)*/ for(IQ=1;IQ<=(loop? 3:6);IQ++) for(II=0;II<2;II++) { double g,f,D,D2; qcdNLO=qcdNLOs=1; if(QCDcorrections) { double alphaMq; if(IQ>3) { double alphaMq; switch(IQ) { case 4: alphaMq=0.39;break; case 5: alphaMq=0.22;break; default:alphaMq=parton_alpha(mqSM[IQ]); } qcdNLO=1+(11./4.-16./9.)*alphaMq/M_PI; } qcdNLOs=1+(25./6.-16./9.)*parton_alpha(msq[II][IQ])/M_PI; } /* q,~o1 reaction */ D=SQ(msq[II][IQ])-SQ(mne)-SQ(mqSM[IQ]); D2=D*D-SQ(2*mne*mqSM[IQ]); g=-0.25*ApB[II][IQ]/D2; f=-0.25*AmB[II][IQ]*D/D2; if(!Twist2On) g*=4; *pA0+= (f/mqSM[IQ]-g*mne/2)* MN*wS0P__[IQ-1]*qcdNLO; *nA0+= (f/mqSM[IQ]-g*mne/2)* MN*wS0N__[IQ-1]*qcdNLO; /****** squarks from nucleon (~q,~o1 reaction)*/ D=-SQ(msq[II][IQ])-SQ(mne)+SQ(mqSM[IQ]), D2=D*D-SQ(2*mne*msq[II][IQ]); g=mqSM[IQ]*AmB[II][IQ]*D/D2; f=mne*ApB[II][IQ]*(SQ(msq[II][IQ])-SQ(mne)+SQ(mqSM[IQ]))/D2; *pA0+=(f+g)/SQ(msq[II][IQ])*MN*wS0P__[5]/8*qcdNLOs ; *nA0+=(f+g)/SQ(msq[II][IQ])*MN*wS0N__[5]/8*qcdNLOs ; if(Twist2On && IQ!=6) { double D,g; int IQn; qcdNLO=1; switch(IQ) { case 1: IQn=2;break; case 2: IQn=1;break; default: IQn=IQ; } D=SQ(msq[II][IQ])-SQ(mne)-SQ(mqSM[IQ]); g=-0.25*ApB[II][IQ]/(D*D-4*mne*mne*mqSM[IQ]*mqSM[IQ]); *pA0-=1.5*g*mne*MN*parton_x(IQ, msq[II][IQ]-mne); *nA0-=1.5*g*mne*MN*parton_x(IQn,msq[II][IQ]-mne); } } /****** Heavy squarks in case of loops */ if(loop)for(IQ=4;IQ<=6;IQ++) for(II=0;II<2;II++) { double f,g,bd,b1d,bs,b1s,b2s; if(QCDcorrections ) { double alphaMq; switch(IQ) { case 4: alphaMq=0.39;break; case 5: alphaMq=0.22;break; default:alphaMq=parton_alpha(mqSM[IQ]); } qcdNLO=1+(11./4.-16./9.)*alphaMq/M_PI; } else qcdNLO=1; bd = AmB[II][IQ]*mqSM[IQ]*LintIk(1,msq[II][IQ],mqSM[IQ],mne)*3/8.; b1d = AmB[II][IQ]*mqSM[IQ]*LintIk(3,msq[II][IQ],mqSM[IQ],mne); bs =ApB[II][IQ]*mne *LintIk(2,msq[II][IQ],mqSM[IQ],mne)*3/8.; b1s =ApB[II][IQ]*mne *LintIk(4,msq[II][IQ],mqSM[IQ],mne); b2s =ApB[II][IQ] *LintIk(5,msq[II][IQ],MqPole[IQ],mne)/4.; f=-(bd+bs-mne*b2s/2-mne*mne*(b1d+b1s)/4); *pA0+=f*MN*wS0P__[IQ-1]*qcdNLO; *nA0+=f*MN*wS0N__[IQ-1]*qcdNLO; if(Twist2On) { double Ampl2; Ampl2=parton_alpha(mqSM[IQ])/(12*M_PI)*(b2s+mne*(b1s+b1d)/2)*parton_x(21,MqPole[IQ]); *pA0+=1.5*Ampl2*mne*MN; *nA0+=1.5*Ampl2*mne*MN; } } /****** higgs-quark-anitiquark */ for(IQ=1;IQ<=6;IQ++) { double fh,fH; if(QCDcorrections && IQ>3) { double alphaMq; switch(IQ) { case 4: alphaMq=0.39;break; case 5: alphaMq=0.22;break; default:alphaMq=parton_alpha(mqSM[IQ]); } qcdNLO=1+(11/4.-16./9.)*alphaMq/M_PI; } else qcdNLO=1; if(IQ&1) { double dMq=mqSM[IQ]/mq[IQ]-1; fh=o1o1h*E*sa*mq[IQ]*(1-dMq*ca*cb/sa/sb)/(2*MW*cb*SW); fH=-o1o1H*E*ca*mq[IQ]*(1+dMq*sa*cb/ca/sb)/(2*MW*cb*SW); } else { fh=-o1o1h*E*ca*mq[IQ]/(2*MW*sb*SW); fH=-o1o1H*E*sa*mq[IQ]/(2*MW*sb*SW); } *pA0+=0.5*(fh/(mh*mh)+fH/(mH*mH))/mqSM[IQ]*MN*wS0P__[IQ-1]*qcdNLO; *nA0+=0.5*(fh/(mh*mh)+fH/(mH*mH))/mqSM[IQ]*MN*wS0N__[IQ-1]*qcdNLO; } /****** higgs squark-antisquark */ capb=ca*cb-sa*sb; sapb=sa*cb+ca*sb; w4s3=4*SW*SW-3; w2s3=2*SW*SW-3; #define h 0 #define H 1 #define L 0 #define R 1 #define U 0 #define D 1 SQM[h][L][L][U]= sapb/SW*(-w4s3/2); SQM[h][L][L][D]= sapb/SW*( w2s3/2); SQM[h][R][R][U]= sapb*SW*( 2); SQM[h][R][R][D]= sapb*SW*(-1); SQM[H][L][L][U]= capb/SW*( w4s3/2); SQM[H][L][L][D]= capb/SW*(-w2s3/2); SQM[H][R][R][U]= capb*SW*(-2); SQM[H][R][R][D]= capb*SW*( 1); SQM[h][L][R][U]=SQM[h][R][L][U]=0; SQM[h][L][R][D]=SQM[h][R][L][D]=0; SQM[H][L][R][U]=SQM[H][R][L][U]=0; SQM[H][L][R][D]=SQM[H][R][L][D]=0; for(IQ=1;IQ<=6;IQ++)for(II=0;II<2;II++) { double fh,fH; int i,j; if(QCDcorrections)qcdNLOs=1+(25./6.-16./9.)*parton_alpha(msq[II][IQ])/M_PI; else qcdNLOs=1; for(fh=0,fH=0,i=0;i<2;i++)for(j=0;j<2;j++) { double dSQMh,dSQMH; double b=-T3Q[IQ&1]+0.5, t= T3Q[IQ&1]+0.5; if(i==j) { dSQMh=( ca*t - sa*b )*3*SQ(mq[IQ]*CW/MW)/SW; dSQMH=( sa*t + ca*b )*3*SQ(mq[IQ]*CW/MW)/SW; } else { dSQMh=( (ca*Aq[IQ]+mu*sa)*t - (sa*Aq[IQ]+mu*ca)*b )*1.5*mq[IQ]*SQ(CW/MW)/SW; dSQMH=( (sa*Aq[IQ]-mu*ca)*t + (ca*Aq[IQ]-mu*sa)*b )*1.5*mq[IQ]*SQ(CW/MW)/SW; } if(IQ&1) {dSQMh/=cb;dSQMH/=cb;} else {dSQMh/=sb;dSQMH/=sb;} fh+=(SQM[h][i][j][IQ&1]-dSQMh)*MI[II][i][IQ]*MI[II][j][IQ]; fH+=(SQM[H][i][j][IQ&1]-dSQMH)*MI[II][i][IQ]*MI[II][j][IQ]; } fh*=o1o1h*E*MW/(3*CW*CW); fH*=o1o1H*E*MW/(3*CW*CW); *pA0+=(fh/(mh*mh)+fH/(mH*mH))/(2*msq[II][IQ]*msq[II][IQ])*MN*wS0P__[5]/8*qcdNLOs; *nA0+=(fh/(mh*mh)+fH/(mH*mH))/(2*msq[II][IQ]*msq[II][IQ])*MN*wS0N__[5]/8*qcdNLOs; } }
double alpha_2(double Q) { return parton_alpha(Q);}
static int testSubprocesses(void) { static int first=1; int err,k1,k2,i,j; double *Q; double *GG; if(first) { first=0; if(createTableOddPrtcls()) { printf("The model contains uncoupled odd patricles\n"); exit(10);} for(i=0,NC=0;i<Nodd;i++,NC++) if(strcmp(OddPrtcls[i].name,OddPrtcls[i].aname))NC++; inP=(char**)malloc(NC*sizeof(char*)); inAP=(int*)malloc(NC*sizeof(int)); inG=(int*)malloc(NC*sizeof(int)); inDelta=(double*)malloc(NC*sizeof(double)); inG_=(double*)malloc(NC*sizeof(double)); inMassAddress=(double**)malloc(NC*sizeof(double*)); inMass=(double*)malloc(NC*sizeof(double)); inNum= (int*)malloc(NC*sizeof(int)); sort=(int*)malloc(NC*sizeof(int)); code22=(numout**)malloc(NC*NC*sizeof(numout*)); inC=(int*)malloc(NC*NC*sizeof(int)); for(i=0,j=0;i<Nodd;i++) { inP[j]=OddPrtcls[i].name; inNum[j]=OddPrtcls[i].NPDG; inG[j]=(OddPrtcls[i].spin2+1)*OddPrtcls[i].cdim; if(strcmp(OddPrtcls[i].name,OddPrtcls[i].aname)) { inAP[j]=j+1; j++; inP[j]=OddPrtcls[i].aname; inG[j]=inG[j-1]; inAP[j]=j-1; inNum[j]=-OddPrtcls[i].NPDG; } else inAP[j]=j; j++; } for(i=0;i<NC;i++) sort[i]=i; for(k1=0;k1<NC;k1++) for(k2=0;k2<NC;k2++) inC[k1*NC+k2]=-1; for(k1=0;k1<NC;k1++) for(k2=0;k2<NC;k2++) if(inC[k1*NC+k2]==-1) { int kk1=inAP[k1]; int kk2=inAP[k2]; inC[k1*NC+k2]=1; if(inC[k2*NC+k1]==-1) {inC[k2*NC+k1]=0; inC[k1*NC+k2]++;} if(inC[kk1*NC+kk2]==-1) {inC[kk1*NC+kk2]=0; inC[k1*NC+k2]++;} if(inC[kk2*NC+kk1]==-1) {inC[kk2*NC+kk1]=0; inC[k1*NC+k2]++;} } for(k1=0;k1<NC;k1++) for(k2=0;k2<NC;k2++) code22[k1*NC+k2]=NULL; for(i=0,j=0;i<Nodd;i++) { inMassAddress[j]=varAddress(OddPrtcls[i].mass); if(!inMassAddress[j]) { if(strcmp(OddPrtcls[i].mass ,"0")==0) { printf("Error: odd particle '%s' has zero mass.\n",OddPrtcls[i].name); exit(5); } printf(" Model is not self-consistent:\n " " Mass identifier '%s' for particle '%s' is absent among parameetrs\n",OddPrtcls[i].mass, OddPrtcls[i].name); exit(5); } if(strcmp(OddPrtcls[i].name,OddPrtcls[i].aname)) { j++; inMassAddress[j]=inMassAddress[j-1]; } j++; } } for(Q=NULL,GG=NULL,i=0;i<nModelVars;i++) { if(strcmp(varNames[i],"Q")==0) Q=varValues+i; else if(strcmp(varNames[i],"GG")==0) GG=varValues+i; } if(Q) *Q=100; err=calcMainFunc(); if(err>0) return err; Mcdm=fabs(*(inMassAddress[0])); for(i=0;i<NC;i++) { inMass[i]=fabs(*(inMassAddress[i])); if(Mcdm>inMass[i]) Mcdm=inMass[i]; } if(Q) { *Q=2*Mcdm; assignVal("Q",2*Mcdm); err=calcMainFunc(); if(err>0) return err; } if(GG) *GG=parton_alpha(2*Mcdm/3.); for(i=0; i<NC-1;) { int i1=i+1; if(inMass[sort[i]] > inMass[sort[i1]]) { int c=sort[i]; sort[i]=sort[i1]; sort[i1]=c; if(i) i--; else i++; } else i++; } LSP=sort[0]; Mcdm=inMass[LSP]; for(i=0;i<NC;i++) { inDelta[i]= (inMass[i]-Mcdm)/Mcdm; inG_[i]=inG[i]*pow(1+inDelta[i],1.5); } for(k1=0;k1<NC;k1++) for(k2=0;k2<NC;k2++) if(code22[k1*NC+k2]) code22[k1*NC+k2]->init=0; cleanDecayTable(); return 0; }