int main(int argc,char** argv) { int err,nw; char cdmName[10]; int spin2, charge3,cdim; double laMax; delFiles=0; /* switch to save/delete NMSSMTools input/output */ ForceUG=0; /* to Force Unitary Gauge assign 1 */ #ifdef SUGRA { double m0,mhf,a0,tb; double Lambda, aLambda,aKappa,sgn; if(argc<7) { printf(" This program needs 6 parameters:\n" " m0 common scalar mass at GUT scale\n" " mhf common gaugino mass at GUT scale\n" " a0 trilinear soft breaking parameter at GUT scale\n" " tb tan(beta) \n" " Lambda Lambda parameter at SUSY\n" " aKappa aKappa parameter at GUT\n" ); printf(" Auxiliary parameters are:\n" " sgn +/-1, sign of Higgsino mass term (default 1)\n" " aLambda at GUT (default aLambda=a0)\n" " Mtp top quark pole mass\n" " MbMb Mb(Mb) scale independent b-quark mass\n" " alfSMZ strong coupling at MZ\n"); printf("Example: ./main 320 600 -1300 2 0.5 -1400\n"); exit(1); } else { double Mtp,MbMb,alfSMZ; sscanf(argv[1],"%lf",&m0); sscanf(argv[2],"%lf",&mhf); sscanf(argv[3],"%lf",&a0); sscanf(argv[4],"%lf",&tb); sscanf(argv[5],"%lf",&Lambda); sscanf(argv[6],"%lf",&aKappa); if(argc>7) sscanf(argv[7],"%lf",&sgn); else sgn=1; if(argc>8) sscanf(argv[8],"%lf",&aLambda); else aLambda=a0; if(argc>9){ sscanf(argv[9],"%lf",&Mtp); assignValW("Mtp",Mtp); } if(argc>10){ sscanf(argv[10],"%lf",&MbMb); assignValW("MbMb",MbMb); } if(argc>11){ sscanf(argv[11],"%lf",&alfSMZ); assignValW("alfSMZ",alfSMZ);} } err=nmssmSUGRA( m0,mhf, a0,tb, sgn, Lambda, aLambda, aKappa); } #elif defined(EWSB) { if(argc!=2) { printf(" Correct usage: ./main <file with NMSSM parameters> \n"); printf(" Example : ./main data1.par \n"); exit(1); } err=readVarNMSSM(argv[1]); if(err==-1) {printf("Can not open the file\n"); exit(1);} else if(err>0) { printf("Wrong file contents at line %d\n",err);exit(1);} err=nmssmEWSB(); } #else { printf("\n========= SLHA file input =========\n"); if(argc <2) { printf("The program needs one argument:the name of SLHA input file.\n" "Example: ./main spectr.dat \n"); exit(1); } printf("Initial file \"%s\"\n",argv[1]); err=readSLHA(argv[1]); if(err) exit(2); } #endif slhaWarnings(stdout); if(err) exit(1); //assignValW("Ms2GeV",0.14); err=sortOddParticles(cdmName); if(err) { printf("Can't calculate %s\n",cdmName); return 1;} laMax=findValW("laMax"); printf("Largest coupling of Higgs self interaction %.1E\n",laMax); qNumbers(cdmName,&spin2, &charge3, &cdim); printf("\nDark matter candidate is '%s' with spin=%d/2\n", cdmName, spin2); if(charge3) { printf("Dark Matter has electric charge %d/3\n",charge3); exit(1);} if(cdim!=1) { printf("Dark Matter is a color particle\n"); exit(1);} if(strcmp(cdmName,"~o1")) printf(" ~o1 is not CDM\n"); else o1Contents(stdout); /* printVar(stdout); */ #ifdef MASSES_INFO { printf("\n=== MASSES OF HIGGS AND SUSY PARTICLES: ===\n"); printHiggs(stdout); printMasses(stdout,1); } #endif #ifdef CONSTRAINTS { double constr0,constrM, constrP; printf("\n\n==== Physical Constraints: =====\n"); constr0=bsgnlo(&constrM,&constrP); printf("B->s,gamma = %.2E (%.2E , %.2E ) \n",constr0,constrM, constrP ); constr0= bsmumu(&constrM,&constrP); printf("Bs->mu,mu = %.2E (%.2E , %.2E ) \n",constr0,constrM, constrP ); constr0=btaunu(&constrM,&constrP); printf("B+->tau+,nu= %.2E (%.2E , %.2E ) \n",constr0, constrM, constrP ); constr0=deltaMd(&constrM,&constrP); printf("deltaMd = %.2E (%.2E , %.2E ) \n",constr0,constrM, constrP ); constr0=deltaMs(&constrM,&constrP); printf("deltaMs = %.2E (%.2E , %.2E ) \n",constr0,constrM, constrP ); constr0=gmuon(&constrM,&constrP); printf("(g-2)/BSM = %.2E (%.2E , %.2E ) \n",constr0,constrM, constrP ); } #endif #ifdef OMEGA { int fast=1; double Beps=1.E-5, cut=0.01; double Omega,Xf; printf("\n==== Calculation of relic density =====\n"); Omega=darkOmega(&Xf,fast,Beps); printf("Xf=%.2e Omega=%.2e\n",Xf,Omega); printChannels(Xf,cut,Beps,1,stdout); } #endif #ifdef INDIRECT_DETECTION { int err,i; double Emin=0.1,/* Energy cut in GeV */ sigmaV; double vcs_gz,vcs_gg; char txt[100]; double SpA[NZ],SpE[NZ],SpP[NZ]; double FluxA[NZ],FluxE[NZ],FluxP[NZ]; // double * SpNe=NULL,*SpNm=NULL,*SpNl=NULL; double SpNe[NZ],SpNm[NZ],SpNl[NZ]; double Etest=Mcdm/2; printf("\n==== Indirect detection =======\n"); sigmaV=calcSpectrum(2+4,SpA,SpE,SpP,SpNe,SpNm,SpNl ,&err); /* Returns sigma*v in cm^3/sec. SpX - calculated spectra of annihilation. Use SpectdNdE(E, SpX) to calculate energy distribution in 1/GeV units. First parameter 1-includes W/Z polarization 2-includes gammas for 2->2+gamma 4-print cross sections */ printf("sigmav=%.2E[cm^3/s]\n",sigmaV); if(SpA) { double fi=0.1,dfi=0.05; /* angle of sight and 1/2 of cone angle in [rad] */ gammaFluxTab(fi,dfi, sigmaV, SpA, FluxA); printf("Photon flux for angle of sight f=%.2f[rad]\n" "and spherical region described by cone with angle %.2f[rad]\n",fi,2*dfi); #ifdef SHOWPLOTS sprintf(txt,"Photon flux[cm^2 s GeV]^{1} at f=%.2f[rad], cone angle %.2f[rad]",fi,2*dfi); displaySpectrum(FluxA,txt,Emin,Mcdm,1); #endif printf("Photon flux = %.2E[cm^2 s GeV]^{-1} for E=%.1f[GeV]\n",SpectdNdE(Etest, SpA), Etest); } if(SpE) { posiFluxTab(Emin, sigmaV, SpE, FluxE); #ifdef SHOWPLOTS displaySpectrum(FluxE,"positron flux [cm^2 s sr GeV]^{-1}" ,Emin,Mcdm,1); #endif printf("Positron flux = %.2E[cm^2 sr s GeV]^{-1} for E=%.1f[GeV] \n", SpectdNdE(Etest, FluxE), Etest); } if(SpP) { pbarFluxTab(Emin, sigmaV, SpP, FluxP ); #ifdef SHOWPLOTS displaySpectrum(FluxP,"antiproton flux [cm^2 s sr GeV]^{-1}" ,Emin,Mcdm,1); #endif printf("Antiproton flux = %.2E[cm^2 sr s GeV]^{-1} for E=%.1f[GeV] \n", SpectdNdE(Etest, FluxP), Etest); } } #endif #ifdef RESET_FORMFACTORS { /* The user has approach to form factors which specifies quark contents of proton and nucleon via global parametes like <Type>FF<Nucleon><q> where <Type> can be "Scalar", "pVector", and "Sigma"; <Nucleon> "P" or "N" for proton and neutron <q> "d", "u","s" calcScalarFF( Mu/Md, Ms/Md, sigmaPiN[MeV], sigma0[MeV]) calculates and rewrites Scalar form factors */ printf("protonFF (default) d %E, u %E, s %E\n",ScalarFFPd, ScalarFFPu,ScalarFFPs); printf("neutronFF(default) d %E, u %E, s %E\n",ScalarFFNd, ScalarFFNu,ScalarFFNs); calcScalarFF(0.553,18.9,70.,35.); printf("protonFF (new) d %E, u %E, s %E\n",ScalarFFPd, ScalarFFPu,ScalarFFPs); printf("neutronFF(new) d %E, u %E, s %E\n",ScalarFFNd, ScalarFFNu,ScalarFFNs); /* Option to change parameters of DM velocity distribution */ SetfMaxwell(220.,600.); /* dN ~ exp(-v^2/arg1^2)*Theta(v-arg2) d^3v Earth velocity with respect to Galaxy defined by 'Vearth' parameter. All parameters are in [km/s] units. */ } #endif #ifdef CDM_NUCLEON { double pA0[2],pA5[2],nA0[2],nA5[2]; double Nmass=0.939; /*nucleon mass*/ double SCcoeff; printf("\n==== Calculation of CDM-nucleons amplitudes =====\n"); nucleonAmplitudes(FeScLoop, pA0,pA5,nA0,nA5); printf("CDM-nucleon micrOMEGAs amplitudes:\n"); printf("proton: SI %.3E SD %.3E\n",pA0[0],pA5[0]); printf("neutron: SI %.3E SD %.3E\n",nA0[0],nA5[0]); SCcoeff=4/M_PI*3.8937966E8*pow(Nmass*Mcdm/(Nmass+ Mcdm),2.); printf("CDM-nucleon cross sections[pb]:\n"); printf(" proton SI %.3E SD %.3E\n",SCcoeff*pA0[0]*pA0[0],3*SCcoeff*pA5[0]*pA5[0]); printf(" neutron SI %.3E SD %.3E\n",SCcoeff*nA0[0]*nA0[0],3*SCcoeff*nA5[0]*nA5[0]); } #endif #ifdef CDM_NUCLEUS { double dNdE[300]; double nEvents; printf("\n======== Direct Detection ========\n"); nEvents=nucleusRecoil(Maxwell,73,Z_Ge,J_Ge73,S00Ge73,S01Ge73,S11Ge73,FeScLoop,dNdE); printf("73Ge: Total number of events=%.2E /day/kg\n",nEvents); printf("Number of events in 10 - 50 KeV region=%.2E /day/kg\n", cutRecoilResult(dNdE,10,50)); #ifdef SHOWPLOTS displayRecoilPlot(dNdE,"Distribution of recoil energy of 73Ge",0,199); #endif nEvents=nucleusRecoil(Maxwell,131,Z_Xe,J_Xe131,S00Xe131,S01Xe131,S11Xe131,FeScLoop,dNdE); printf("131Xe: Total number of events=%.2E /day/kg\n",nEvents); printf("Number of events in 10 - 50 KeV region=%.2E /day/kg\n", cutRecoilResult(dNdE,10,50)); #ifdef SHOWPLOTS displayRecoilPlot(dNdE,"Distribution of recoil energy of 131Xe",0,199); #endif nEvents=nucleusRecoil(Maxwell,23,Z_Na,J_Na23,S00Na23,S01Na23,S11Na23,FeScLoop,dNdE); printf("23Na: Total number of events=%.2E /day/kg\n",nEvents); printf("Number of events in 10 - 50 KeV region=%.2E /day/kg\n", cutRecoilResult(dNdE,10,50)); #ifdef SHOWPLOTS displayRecoilPlot(dNdE,"Distribution of recoil energy of 23Na",0,199); #endif nEvents=nucleusRecoil(Maxwell,127,Z_I,J_I127,S00I127,S01I127,S11I127,FeScLoop,dNdE); printf("I127: Total number of events=%.2E /day/kg\n",nEvents); printf("Number of events in 10 - 50 KeV region=%.2E /day/kg\n", cutRecoilResult(dNdE,10,50)); #ifdef SHOWPLOTS displayRecoilPlot(dNdE,"Distribution of recoil energy of 127I",0,199); #endif } #endif #ifdef DECAYS { txtList L; int dim; double width,br; char * pname; printf("\nParticle decays\n"); pname = "h1"; width=pWidth(pname,&L,&dim); printf("%s->%d*x : total width=%E \n and Branchings:\n",pname,dim,width); printTxtList(L,stdout); pname = "l"; width=pWidth(pname,&L,&dim); printf("%s->%d*x : total width=%E \n and Branchings:\n",pname,dim,width); printTxtList(L,stdout); printf("Br(e,Ne,nl)= %E\n",findBr(L,"e,Ne,nl")); pname = "~o2"; width=pWidth(pname,&L,&dim); printf("%s->%d*x : total width=%E \n and Branchings:\n",pname,dim,width); printTxtList(L,stdout); } #endif #ifdef CROSS_SECTIONS { double Pcm=500, cosmin=-0.99, cosmax=0.99, cs; numout* cc; printf("\n====== Calculation of cross section ====\n"); printf(" e^+, e^- annihilation\n"); Pcm=500.; Helicity[0]=0.5; /* helicity : spin projection on direction of motion */ Helicity[1]=-0.5; /* helicities ={ 0.5, -0.5} corresponds to vector state */ printf("Process e,E->2*x at Pcm=%.3E GeV\n",Pcm); cc=newProcess("e%,E%->2*x","eE_2x"); if(cc) { int ntot,l; char * name[4]; procInfo1(cc,&ntot,NULL,NULL); for(l=1;l<=ntot; l++) { int err; double cs; char txt[100]; procInfo2(cc,l,name,NULL); sprintf(txt,"%3s,%3s -> %3s %3s ",name[0],name[1],name[2],name[3]); cs= cs22(cc,l,Pcm,cosmin,cosmax,&err); if(err) printf("%-20.20s Error\n",txt); else if(cs) printf("%-20.20s %.2E [pb]\n",txt,cs); } } } #endif killPlots(); 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; } }