int sortoddparticles_(char * f_name, int len) { char c_name[20]; int err=sortOddParticles(c_name); cName2f(c_name, f_name,len); return err; }
int main(int argc,char** argv) { int err,outP; double M,Emin,Ntot,Etot,sigmaV,v=0.001,fi,tab[250]; char mess[100]; char txt[100]; if(argc==1) { printf(" The program needs 1 argument:\n" "name of file with parameters\n"); exit(1); } err=readVar(argv[1]); if(err==-1) {printf("Can not open the file\n"); exit(2);} else if(err>0) { printf("Wrong file contents at line %d\n",err);exit(3);} outP=0; /* for gamma rays */ Emin=0.1; /* Erergy cut */ fi=0; /* angle of sight */ err=sortOddParticles(mess); if(err) { printf("Can't calculate %s\n",mess); return 1;} sigmaV=calcSpectrum(v,outP,tab,&err); /* sigma*v in cm^3/sec */ M=lopmass_(); spectrInfo(Emin/M,tab, &Ntot,&Etot); sprintf(txt,"%s: N=%.2e,<E/2M>=%.2f,vsc=%.2e sm^3/sec,M(%s)=%.2e", outNames[outP],Ntot,Etot,sigmaV,mess,M); spectrTable(tab,"tab",txt, Emin/M ,300); system("../CalcHEP_src/bin/tab_view < tab&"); printf("gamma flux [ph/cm^2/s/sr] =%.2E\n", HaloFactor(fi,rhoQisotermic)*sigmaV*Ntot/M/M); { double e[6]; int i; printf("Check of energy conservation:\n"); for(i=0;i<6;i++) { sigmaV=calcSpectrum(v,i,tab,&err); spectrInfo(Emin/M,tab, NULL,e+i); } printf("1 = %.2f\n",e[0]+2*(e[1]+e[2]+e[3]+e[4]+e[5]) ); } return 0; }
int main(int argc,char** argv){ int err; char cdmName[10]; int spin2, charge3,cdim; delFiles=0; /* switch to save/delete RGE input/output */ ForceUG=0; /* to Force Unitary Gauge assign 1 */ // Check number of arguments if(argc <2) { printf("The program needs one argument:the name of SLHA input file.\n" "Example: ./main suspect2_lha.out \n"); exit(1); } // Read in slha err=lesHinput(argv[1]); if(err) exit(2); // Check for slha warnings slhaWarnings(stdout); if(err) exit(1); // Sort Particles err=sortOddParticles(cdmName); if(err) { printf("Can't calculate %s\n",cdmName); return 1;} qNumbers(cdmName,&spin2, &charge3, &cdim); // This shouldn't happen 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"); // Calculation of Omega, i.e. dark matter density int fast=1; double Beps=1.E-5; double Omega,Xf; Omega=darkOmega(&Xf,fast,Beps); // print value printf("[\"MastercodeTag\", \"Omega\", %f ]\n",Omega); // Calculation of sigma_p_si double pA0[2],pA5[2],nA0[2],nA5[2]; double Nmass=0.939; /*nucleon mass*/ double SCcoeff; nucleonAmplitudes(FeScLoop, pA0,pA5,nA0,nA5); SCcoeff=4/M_PI*3.8937966E8*pow(Nmass*Mcdm/(Nmass+ Mcdm),2.); double proton_sigma_si=SCcoeff*pA0[0]*pA0[0]; // print value printf("[\"MastercodeTag\", \"sigma_p_si\", %e ] \n",proton_sigma_si); // if all went fine, then return 0 return 0; }
int main(int argc, char *argv[]) { int numPoints = 1; double qMax = 0.; // Sets format of output: 4 decimal places outputCharacteristics(6); void (*boundaryCondition)(MssmSoftsusy &, const DoubleVector &); if (argc !=1 ) { cerr << "GAUGE/GRAVITY" << endl; cerr << "SOFTSUSY" << VERSION << endl; cerr << "B.C. Allanach, Comput. Phys. Commun. 143 (2002) 305-331,"; cerr << " hep-ph/0104145\n"; cerr << "Low energy data in SOFTSUSY: MIXING=" << MIXING << " TOLERANCE=" << TOLERANCE << endl; cerr << "G_F=" << GMU << " GeV^2" << endl; } // RANDOM SEED ///////////////////// time_t seconds; time( &seconds); srand( (unsigned int) seconds ); //////////////////////////////////// double mgutGuess = 2.0e16, mbmb = MBOTTOM, mtau = MTAU; int sgnMu = 1; bool gaugeUnification = false, ewsbBCscale = false, altEwsb = false; bool flag = false; double M_moduli_start, M_moduli_end ; double M_gauge_start, M_gauge_end ; double M_mess_start, M_mess_end ; double M_moduli, M_gauge, M_mess ; double tanb_start, tanb_end ; double tanb = 10; DoubleVector pars(3); // My modification cout << "argc = " << argc << endl; cout << flush ; if(argc != 3 ) { errorCall() ; exit(-1) ; } /* if (!strcmp(argv[1], "g-gmsb")) { cout << "SOFTSUSY Gauge/Gravity calculation" << endl; cout << flush; */ if( argc == 3 ) { ifstream inputfile(argv[1]); ofstream outputfile(argv[2]); string varname; inputfile >> varname >> l1 ; cout << varname << endl; inputfile >> varname >> l2 ; inputfile >> varname >> l3 ; inputfile >> varname >> nQ ; inputfile >> varname >> nU ; inputfile >> varname >> nD ; inputfile >> varname >> nL ; inputfile >> varname >> nE ; inputfile >> varname >> nHu ; inputfile >> varname >> nHd ; inputfile >> varname >> N ; inputfile >> varname >> numscan; inputfile >> varname >> M_moduli_start ; inputfile >> varname >> M_moduli_end ; inputfile >> varname >> M_gauge_start ; inputfile >> varname >> M_gauge_end ; inputfile >> varname >> M_mess_start ; inputfile >> varname >> M_mess_end ; inputfile >> varname >> tanb_start ; inputfile >> varname >> tanb_end ; inputfile >> varname >> sgnMu ; inputfile.close(); cout << "l1 = " << l1 << endl << "l2 = " << l2 << endl << "l3 = " << l3 << endl << "nQ = " << nQ << endl << "nU = " << nU << endl << "nD = " << nD << endl << "nL = " << nL << endl << "nE = " << nE << endl << "nHu = " << nHu << endl << "nHd = " << nHd << endl << "N = " << N << endl << "numscan = " << numscan << endl << "M_moduli_start = " << M_moduli_start << endl << "M_moduli_end = " << M_moduli_end << endl << "M_gauge_start = " << M_gauge_start << endl << "M_gauge_end = " << M_gauge_end << endl << "M_mess_start = " << M_mess_start << endl << "M_mess_end = " << M_mess_end << endl << "tanb_start = " << tanb_start << endl << "tanb_end = " << tanb_end << endl << "sgnMu = " << sgnMu << endl; for( int i = 0 ; i < numscan ; i++ ) { QedQcd oneset0, oneset1, oneset2; M_moduli = randomgenerator( M_moduli_start, M_moduli_end ) ; M_gauge = randomgenerator( M_gauge_start, M_gauge_end ) ; M_mess = lograndomgenerator( M_mess_start, M_mess_end ) ; tanb = randomgenerator( tanb_start, tanb_end ) ; cout << i << "th run : " << endl ; cout << "M_moduli = " << M_moduli << endl << "M_gauge = " << M_gauge << endl << "M_mess = " << M_mess << endl << "tanb = " << tanb << endl ; mgutGuess = 2e16; gaugeUnification = false; pars.setEnd(3); pars(1) = M_moduli; pars(2) = M_gauge; pars(3) = M_mess; // r = &m; // if (flag) oneset0.calcPoleMb(); oneset0.toMz(); oneset1.toMz(); oneset2.toMz(); // ofstream rgefile; // rgefile.open("rge.dat"); // ofstream spectrumfile; // spectrumfile.open("spectrum.dat") ; // cout << "Here comes r1 " << endl; MssmSoftsusy r0 ; cout << "Starting" << endl; r0.N= 0 ; r0.Nflag = true; r0.beta2() ; r0.Nflag = false; double mgut = r0.lowOrg(gaugegravityBcs0, mgutGuess, pars, sgnMu, tanb, oneset0, gaugeUnification, ewsbBCscale); r0.runto( M_mess ); cout << "starting phase 2 " << endl; r0.N = N ; r0.Nflag = true; r0.beta2() ; r0.Nflag = false; r0.runto( mgutGuess ) ; global_g1 = r0.displayGaugeCoupling(1); global_g2 = r0.displayGaugeCoupling(2); global_g3 = r0.displayGaugeCoupling(3); MssmSoftsusy r1 ; //, r2;// MssmSoftsusy2 l; r1.N = N ; r1.Nflag = true; r1.beta2(); r1.Nflag = false ; mgut = r1.lowOrg(gaugegravityBcs1, mgutGuess, pars, sgnMu, tanb, oneset1, gaugeUnification, ewsbBCscale); cout << "Here comes r1" << endl; cout << r1 ; // RGRUN( rgefile, r1 , log(mgutGuess) / log(10) , log( M_mess) / log( 10 ) , 20 ) ; r1.runto( M_mess ); global_g1 = r1.displayGaugeCoupling(1); global_g2 = r1.displayGaugeCoupling(2); global_g3 = r1.displayGaugeCoupling(3); inter_gaugino1 = r1.displayGaugino(1); inter_gaugino2 = r1.displayGaugino(2); inter_gaugino3 = r1.displayGaugino(3); inter_massmQl = r1.displaySoftMassSquared(mQl) ; inter_massmUr = r1.displaySoftMassSquared(mUr) ; inter_massmDr = r1.displaySoftMassSquared(mDr) ; inter_massmLl = r1.displaySoftMassSquared(mLl) ; inter_massmEr = r1.displaySoftMassSquared(mEr) ; inter_massmHu = r1.displayMh2Squared(); inter_massmHd = r1.displayMh1Squared(); inter_A_HuQU(1,1) = r1.displaySoftA( UA, 1, 1); inter_A_HuQU(2,2) = r1.displaySoftA( UA, 2, 2); inter_A_HuQU(3,3) = r1.displaySoftA( UA, 3, 3); inter_A_HdQD(1,1) = r1.displaySoftA( DA, 1, 1); inter_A_HdQD(2,2) = r1.displaySoftA( DA, 2, 2); inter_A_HdQD(3,3) = r1.displaySoftA( DA, 3, 3); inter_A_HdLE(1,1) = r1.displaySoftA( EA, 1, 1); inter_A_HdLE(2,2) = r1.displaySoftA( EA, 2, 2); inter_A_HdLE(3,3) = r1.displaySoftA( EA, 3, 3); mgutGuess = M_mess ; cout << "Here comes r2" << endl; MssmSoftsusy r2 ; r2.N = 0; r2.Nflag = true; r2.beta2(); r2.Nflag = false ; mgut = r2.lowOrg(gaugegravityBcs2, mgutGuess, pars, sgnMu, tanb, oneset2, gaugeUnification, ewsbBCscale); // cout << r2 ; // RGRUN( rgefile, r2 , log(M_mess) / log(10), log(100) / log(10), 20 ) ; //rgefile.close(); //spectrumrecord( spectrumfile, r2 ) ; // spectrumfile.close(); cout << r2 ; // sPhysical p = r2.displayPhys() ; // cout << p ; ofstream tempfile("LesHouches.dat"); streambuf* strm_buffer = cout.rdbuf(); cout.rdbuf( tempfile.rdbuf() ) ; r2.lesHouchesAccordOutput("nonUniversal", pars, sgnMu, tanb, 0, 1, mbmb, mtau, MGUTSCALE , 0 ) ; cout << flush; cout.rdbuf(strm_buffer); tempfile.close(); if (r2.displayProblem().test()) { cout << "# SOFTSUSY problem with point: " << r2.displayProblem(); } if( checktheresult( r2 ) ) { ////////////////////////////////////////////////// // micrOmegas // ////////////////////////////////////////////////// double Xf, Omega, Omega2, bsg_value, bsmumu_value, gmuon_value; string mess; double mtop ; int err ; int fast = 1; double Beps = 1E-6 ; double cut = 0.01; err = readLesH("LesHouches.dat",1); // // printVar(stdout); // char messtemp[20]; err=sortOddParticles(messtemp); mess = messtemp; // HiggsMasses(stdout); // printMasses(stdout,1); Omega=darkOmega(&Xf,fast,Beps); o1Contents(stdout); printChannels(Xf,cut,Beps,1,stdout); bsg_value= bsgnlo_(); bsmumu_value = bsmumu_(); gmuon_value = gmuon_(); recordphysics( outputfile, r2, M_moduli, M_gauge, M_mess, tanb, bsg_value, gmuon_value, bsmumu_value, Omega ) ; } else { recordphysics( outputfile, r2, M_moduli, M_gauge, M_mess, tanb, 0, 0 , 0, 0 ) ; } } }
int main(int argc,char** argv) { int err; char cdmName[10]; int spin2, charge3,cdim; delFiles=0; /* switch to save/delete RGE input/output */ ForceUG=0; /* to Force Unitary Gauge assign 1 */ #ifdef SUGRA { double m0,mhf,a0,tb; double gMG1, gMG2, gMG3, gAl, gAt, gAb, sgn, gMHu, gMHd, gMl2, gMl3, gMr2, gMr3, gMq2, gMq3, gMu2, gMu3, gMd2, gMd3; printf("\n========= mSUGRA scenario =====\n"); PRINTRGE(RGE); if(argc<5) { printf(" This program needs 4 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"); printf(" Auxiliary parameters are:\n" " sgn +/-1, sign of Higgsino mass term (default 1)\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 70 250 -300 10\n"); */ printf("Example: ./main 120 500 -350 10 1 173.1 \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); if(argc>5)sscanf(argv[5],"%lf",&sgn); else sgn=1; if(argc>6){ sscanf(argv[6],"%lf",&Mtp); assignValW("Mtp",Mtp); } if(argc>7){ sscanf(argv[7],"%lf",&MbMb); assignValW("MbMb",MbMb); } if(argc>8){ sscanf(argv[8],"%lf",&alfSMZ); assignValW("alfSMZ",alfSMZ);} } /*==== simulation of mSUGRA =====*/ gMG1=mhf, gMG2=mhf,gMG3=mhf; gAl=a0, gAt=a0, gAb=a0; gMHu=m0, gMHd=m0; gMl2=m0, gMl3=m0, gMr2=m0, gMr3=m0; gMq2=m0, gMq3=m0, gMu2=m0, gMd2=m0, gMu3=m0, gMd3=m0; err= SUGRAMODEL(RGE) (tb, gMG1, gMG2, gMG3, gAl, gAt, gAb, sgn, gMHu, gMHd, gMl2, gMl3, gMr2, gMr3, gMq2, gMq3, gMu2, gMu3, gMd2, gMd3); } #elif defined(AMSB) { double m0,m32,sgn,tb; printf("\n========= AMSB scenario =====\n"); PRINTRGE(RGE); if(argc<4) { printf(" This program needs 3 parameters:\n" " m0 common scalar mass at GUT scale\n" " m3/2 gravitino mass\n" " tb tan(beta) \n"); printf(" Auxiliary parameters are:\n" " sgn +/-1, sign of Higgsino mass term (default 1)\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 450 60000 10\n"); exit(1); } else { double Mtp,MbMb,alfSMZ; sscanf(argv[1],"%lf",&m0); sscanf(argv[2],"%lf",&m32); sscanf(argv[3],"%lf",&tb); if(argc>4)sscanf(argv[4],"%lf",&sgn); else sgn=1; if(argc>5){ sscanf(argv[5],"%lf",&Mtp); assignValW("Mtp",Mtp); } if(argc>6){ sscanf(argv[6],"%lf",&MbMb); assignValW("MbMb",MbMb); } if(argc>7){ sscanf(argv[7],"%lf",&alfSMZ); assignValW("alfSMZ",alfSMZ);} } err= AMSBMODEL(RGE)(m0,m32,tb,sgn); } #elif defined(EWSB) { printf("\n========= EWSB scale input =========\n"); PRINTRGE(RGE); if(argc <2) { printf("The program needs one argument:the name of file with MSSM parameters.\n" "Example: ./main mssm1.par \n"); exit(1); } printf("Initial file \"%s\"\n",argv[1]); err=readVarMSSM(argv[1]); if(err==-1) { printf("Can not open the file\n"); exit(2);} else if(err>0) { printf("Wrong file contents at line %d\n",err);exit(3);} err=EWSBMODEL(RGE)(); } #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 suspect2_lha.out \n"); exit(1); } printf("Initial file \"%s\"\n",argv[1]); err=lesHinput(argv[1]); if(err) exit(2); } #endif { int nw; printf("Warnings from spectrum calculator:\n"); nw=slhaWarnings(stdout); if(nw==0) printf(" .....none\n"); } if(err) exit(1); err=sortOddParticles(cdmName); if(err) { printf("Can't calculate %s\n",cdmName); return 1;} qNumbers(cdmName,&spin2, &charge3, &cdim); printf("\nDark matter candidate is '%s' with spin=%d/2 mass=%.2E\n", cdmName, spin2, Mcdm); 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); #ifdef MASSES_INFO { printf("\n=== MASSES OF HIGGS AND SUSY PARTICLES: ===\n"); printHiggs(stdout); printMasses(stdout,1); } #endif #ifdef CONSTRAINTS { printf("\n\n==== Physical Constraints: =====\n"); printf("deltartho=%.2E\n",deltarho()); printf("gmuon=%.2E\n", gmuon()); printf("bsgnlo=%.2E\n", bsgnlo()); printf("bsmumu=%.2E\n", bsmumu()); printf("btaunu=%.2E\n", btaunu()); if(masslimits()==0) printf("MassLimits OK\n"); } #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=1,SMmev=320;/*Energy cut in GeV and solar potential in MV*/ double 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[NZ],SpNm[NZ],SpNl[NZ]; // double * SpNe=NULL,*SpNm=NULL,*SpNl=NULL; double Etest=Mcdm/2; /* default DarkSUSY parameters */ /* K_dif=0.036; L_dif=4; Delta_dif=0.6; Vc_dif=10; Rdisk=30; SMmev=320; */ printf("\n==== Indirect detection =======\n"); sigmaV=calcSpectrum( 1+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.,dfi=M_PI/180.; /* angle of sight and 1/2 of cone angle in [rad] */ /* dfi corresponds to solid angle 1.E-3sr */ printf("Photon flux for angle of sight f=%.2f[rad]\n" "and spherical region described by cone with angle %.4f[rad]\n",fi,2*dfi); gammaFluxTab(fi,dfi, sigmaV, SpA, FluxA); #ifdef SHOWPLOTS sprintf(txt,"Photon flux for angle of sight %.2f[rad] and 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, FluxA), Etest); if(loopGamma(&vcs_gz,&vcs_gg)==0) { printf("Gamma ray lines:\n"); printf("E=%.2E[GeV] vcs(Z,A)= %.2E[cm^3/s], flux=%.2E[cm^2 s]^{-1}\n",Mcdm-91.19*91.19/4/Mcdm,vcs_gz, gammaFlux(fi,dfi,vcs_gz)); printf("E=%.2E[GeV] vcs(A,A)= %.2E[cm^3/s], flux=%.2E[cm^2 s]^{-1}\n",Mcdm,vcs_gg, 2*gammaFlux(fi,dfi,vcs_gg)); } } if(SpE) { posiFluxTab(Emin, sigmaV, SpE, FluxE); if(SMmev>0) solarModulation(SMmev,0.0005,FluxE,FluxE); #ifdef SHOWPLOTS displaySpectrum(SpE,"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); if(SMmev>0) solarModulation(SMmev,1,FluxP,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"); #ifdef TEST_Direct_Detection printf(" TREE LEVEL\n"); MSSMDDtest(0, pA0,pA5,nA0,nA5); printf("Analitic formulae\n"); printf("proton: SI %.3E SD %.3E\n",pA0[0],pA5[0]); printf("neutron: SI %.3E SD %.3E\n",nA0[0],nA5[0]); nucleonAmplitudes(NULL, 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]); printf(" BOX DIAGRAMS\n"); MSSMDDtest(1, pA0,pA5,nA0,nA5); printf("Analitic formulae\n"); printf("proton: SI %.3E SD %.3E\n",pA0[0],pA5[0]); printf("neutron: SI %.3E SD %.3E\n",nA0[0],nA5[0]); #endif 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; pname = "h"; 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); pname = "~g"; 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 main(int argc,char** argv) { int err; char mess[10]; double dMb,dMd; double (*LF)(double,double,double,double); struct { char *lbl; double m0,mhf,A0,tb,sgn;} testPoints[4]= { {"BP", 70, 250,-300,10, 1}, {"KP", 2500, 550, -80,40,-1}, {"IP", 180, 350, 0,35, 1}, {"NUH", 250, 530, 0,30, 1} }; int I, K; /* to save RGE input/output files uncomment the next line */ /*delFiles(0);*/ for(I=0;I<5;I++) { if(I==4) { printf("================================================ MSSM1 ======\n"); err=readVarMSSM("mssm1.par"); if(err==0)err=EWSBMODEL(RGE)(); }else { double m0,mhf,a0,tb; double gMG1, gMG2, gMG3, gAl, gAt, gAb, sgn, gMHu, gMHd, gMl2, gMl3, gMr2, gMr3, gMq2, gMq3, gMu2, gMu3, gMd2, gMd3; printf("\n========= mSUGRA scenario =====\n"); printf("================================================ %s ======\n",testPoints[I].lbl); PRINTRGE(RGE); m0=testPoints[I].m0; mhf=testPoints[I].mhf; a0=testPoints[I].A0; tb=testPoints[I].tb; sgn=testPoints[I].sgn; /*==== simulation of mSUGRA =====*/ gMG1=mhf, gMG2=mhf,gMG3=mhf; gAl=a0, gAt=a0, gAb=a0; gMHu=m0, gMHd=m0; gMl2=m0, gMl3=m0, gMr2=m0, gMr3=m0; gMq2=m0, gMq3=m0, gMu2=m0, gMd2=m0, gMu3=m0, gMd3=m0; if(I==3){ /*==== Non universal SUGRA====*/ gMHu=2.*m0, gMHd=-0.6*m0; } err= SUGRAMODEL(RGE) (tb, gMG1, gMG2, gMG3, gAl, gAt, gAb, sgn, gMHu, gMHd, gMl2, gMl3, gMr2, gMr3, gMq2, gMq3, gMu2, gMu3, gMd2, gMd3); if(err>0){ printf(" non fatal problems in RGE\n");err=0;} } if(err) { printf("Problem with RGE solution or spectrum calculation\n"); exit(1); } err=sortOddParticles(mess); if(err) { printf("Can't calculate %s\n",mess); return 1;} dMb=findValW("dMb"); dMd=findValW("dMd"); printf("dMb=%.2E dMd=dMs=%.2E \n", dMb, dMd); for(K=1;K<=5;K++) { switch(K) { case 1: printf("================= Tree level \n"); QCDcorrections=0; assignValW("dMb",0.); assignValW("dMd",0.); assignValW("dMs",0.); break; case 2: printf("================= QCD \n"); QCDcorrections=1; assignValW("dMb",0.); assignValW("dMd",0.); assignValW("dMs",0.); break; case 3: printf("================= dMb \n"); QCDcorrections=0; assignValW("dMb",dMb); assignValW("dMd",dMd); assignValW("dMs",dMd); break; case 4: printf("================= QCD+dMb \n"); QCDcorrections=1; assignValW("dMb",dMb); assignValW("dMd",dMd); assignValW("dMs",dMd); break; case 5: printf("================= box+QCD+dMb\n"); QCDcorrections=1; assignValW("dMb",dMb); assignValW("dMd",dMd); assignValW("dMs",dMd); break; } { double pA0[2],pA5[2],nA0[2],nA5[2]; double Nmass=0.939; /*nucleon mass*/ double SCcoeff; //printf("\n==== Calculation of WIMP-nucleons amplitudes =====\n"); if(K==5) LF=FeScLoop; else LF=NULL; nucleonAmplitudes(LF, pA0,pA5,nA0,nA5); // printf("WIMP-nucleon 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*lopmass_()/(Nmass+ lopmass_()),2.); // printf("WIMP-nucleon cross sections:\n"); printf(" proton SI %.3E neutron SI %.3E\n",SCcoeff*pA0[0]*pA0[0],SCcoeff*nA0[0]*nA0[0]); // printf(" neutron SI %.3E SD %.3E\n",SCcoeff*nA0[0]*nA0[0],SCcoeff*nA5[0]*nA5[0]); } } } 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; } }
int main(int argc,char** argv) { int err; char cdmName[10]; int spin2, charge3,cdim; ForceUG=0; /* to Force Unitary Gauge assign 1 */ // sysTimeLim=1000; /* if you would like to work with superIso setenv("superIso","./superiso_v3.1",1); */ #ifdef SUGRA { double m0,mhf,a0,tb; double gMG1, gMG2, gMG3, gAl, gAt, gAb, sgn, gMHu, gMHd, gMl2, gMl3, gMr2, gMr3, gMq2, gMq3, gMu2, gMu3, gMd2, gMd3; printf("\n========= mSUGRA scenario =====\n"); PRINTRGE(RGE); if(argc<5) { printf(" This program needs 4 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"); printf(" Auxiliary parameters are:\n" " sgn +/-1, sign of Higgsino mass term (default 1)\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 70 250 -300 10\n"); */ printf("Example: ./main 120 500 -350 10 1 173.1 \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); if(argc>5)sscanf(argv[5],"%lf",&sgn); else sgn=1; if(argc>6){ sscanf(argv[6],"%lf",&Mtp); assignValW("Mtp",Mtp); } if(argc>7){ sscanf(argv[7],"%lf",&MbMb); assignValW("MbMb",MbMb); } if(argc>8){ sscanf(argv[8],"%lf",&alfSMZ); assignValW("alfSMZ",alfSMZ);} } /*==== simulation of mSUGRA =====*/ gMG1=mhf, gMG2=mhf,gMG3=mhf; gAl=a0, gAt=a0, gAb=a0; gMHu=m0, gMHd=m0; gMl2=m0, gMl3=m0, gMr2=m0, gMr3=m0; gMq2=m0, gMq3=m0, gMu2=m0, gMd2=m0, gMu3=m0, gMd3=m0; err= SUGRAMODEL(RGE) (tb, gMG1, gMG2, gMG3, gAl, gAt, gAb, sgn, gMHu, gMHd, gMl2, gMl3, gMr2, gMr3, gMq2, gMq3, gMu2, gMu3, gMd2, gMd3); } #elif defined(SUGRANUH) { double m0,mhf,a0,tb; double gMG1, gMG2, gMG3, gAl, gAt, gAb, gMl2, gMl3, gMr2, gMr3, gMq2, gMq3, gMu2, gMu3, gMd2, gMd3,mu,MA; printf("\n========= mSUGRA non-universal Higgs scenario =====\n"); PRINTRGE(RGE); 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" " mu mu(EWSB)\n" " MA mass of pseudoscalar Higgs\n"); printf(" Auxiliary parameters are:\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 70 250 -300 10\n"); */ printf("Example: ./main 120 500 -350 10 680 760 \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",&mu); sscanf(argv[6],"%lf",&MA); if(argc>7){ sscanf(argv[7],"%lf",&Mtp); assignValW("Mtp",Mtp); } if(argc>8){ sscanf(argv[8],"%lf",&MbMb); assignValW("MbMb",MbMb); } if(argc>9){ sscanf(argv[9],"%lf",&alfSMZ); assignValW("alfSMZ",alfSMZ);} } /*==== simulation of mSUGRA =====*/ gMG1=mhf, gMG2=mhf,gMG3=mhf; gAl=a0, gAt=a0, gAb=a0; gMl2=m0, gMl3=m0, gMr2=m0, gMr3=m0; gMq2=m0, gMq3=m0, gMu2=m0, gMd2=m0, gMu3=m0, gMd3=m0; err= SUGRANUHMODEL(RGE) (tb,gMG1,gMG2,gMG3,gAl,gAt,gAb,gMl2,gMl3,gMr2,gMr3,gMq2,gMq3,gMu2,gMu3,gMd2,gMd3,mu,MA); } #elif defined(AMSB) { double m0,m32,sgn,tb; printf("\n========= AMSB scenario =====\n"); PRINTRGE(RGE); if(argc<4) { printf(" This program needs 3 parameters:\n" " m0 common scalar mass at GUT scale\n" " m3/2 gravitino mass\n" " tb tan(beta) \n"); printf(" Auxiliary parameters are:\n" " sgn +/-1, sign of Higgsino mass term (default 1)\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 450 60000 10\n"); exit(1); } else { double Mtp,MbMb,alfSMZ; sscanf(argv[1],"%lf",&m0); sscanf(argv[2],"%lf",&m32); sscanf(argv[3],"%lf",&tb); if(argc>4)sscanf(argv[4],"%lf",&sgn); else sgn=1; if(argc>5){ sscanf(argv[5],"%lf",&Mtp); assignValW("Mtp",Mtp); } if(argc>6){ sscanf(argv[6],"%lf",&MbMb); assignValW("MbMb",MbMb); } if(argc>7){ sscanf(argv[7],"%lf",&alfSMZ); assignValW("alfSMZ",alfSMZ);} } err= AMSBMODEL(RGE)(m0,m32,tb,sgn); } #elif defined(EWSB) { printf("\n========= EWSB scale input =========\n"); PRINTRGE(RGE); if(argc <2) { printf("The program needs one argument:the name of file with MSSM parameters.\n" "Example: ./main mssm1.par \n"); exit(1); } printf("Initial file \"%s\"\n",argv[1]); err=readVarMSSM(argv[1]); if(err==-1) { printf("Can not open the file\n"); exit(2);} else if(err>0) { printf("Wrong file contents at line %d\n",err);exit(3);} err=EWSBMODEL(RGE)(); } #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 suspect2_lha.out \n"); exit(1); } printf("Initial file \"%s\"\n",argv[1]); err=lesHinput(argv[1]); if(err) exit(2); } #endif if(err==-1) { printf("Can not open the file\n"); exit(2);} else if(err>0) { printf("Wrong file contents at line %d\n",err);exit(3);} { int nw; printf("Warnings from spectrum calculator:\n"); nw=slhaWarnings(stdout); if(nw==0) printf(" .....none\n"); } if(err) exit(1); err=sortOddParticles(cdmName); if(err) { printf("Can't calculate %s\n",cdmName); return 1;} qNumbers(cdmName,&spin2, &charge3, &cdim); printf("\nDark matter candidate is '%s' with spin=%d/2 mass=%.2E\n", cdmName, spin2, Mcdm); 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); #ifdef MASSES_INFO { printf("\n=== MASSES OF HIGGS AND SUSY PARTICLES: ===\n"); printHiggs(stdout); printMasses(stdout,1); } #endif #ifdef CONSTRAINTS { double SMbsg,dmunu; printf("\n\n==== Physical Constraints: =====\n"); printf("deltartho=%.2E\n",deltarho()); printf("gmuon=%.2E\n", gmuon()); printf("bsgnlo=%.2E ", bsgnlo(&SMbsg)); printf("( SM %.2E )\n",SMbsg); printf("bsmumu=%.2E\n", bsmumu()); printf("btaunu=%.2E\n", btaunu()); printf("dtaunu=%.2E ", dtaunu(&dmunu)); printf("dmunu=%.2E\n", dmunu); printf("Rl23=%.3E\n", Rl23()); if(masslimits()==0) printf("MassLimits OK\n"); } #endif #ifdef SUPERISO slhaWrite("slha.in"); system( SUPERISO "/slha.x slha.in >/dev/null"); slhaRead("output.flha",1); unlink("slha.in"); printf("superIsoBSG=%.3E\n", slhaValFormat("FOBS",0., " 5 1 %lf 0 2 3 22")); #endif #ifdef HIGGSBOUNDS if(access(HIGGSBOUNDS "/HiggsBounds",X_OK )) system( "cd " HIGGSBOUNDS "; ./configure; make "); slhaWrite("slha.in"); system("cp slha.in HB.slha"); HBblocks("HB.slha"); System("%s/HiggsBounds LandH SLHA 3 1 HB.slha",HIGGSBOUNDS); slhaRead("HB.slha",1+4); printf("HB result= %.0E obsratio=%.2E\n",slhaValFormat("HiggsBoundsResults",0.,"1 2 %lf"), slhaValFormat("HiggsBoundsResults",0.,"1 3 %lf" ) ); { char hbInfo[100]; if(0==slhaSTRFormat("HiggsBoundsResults","1 5 ||%[^|]||",hbInfo)) printf("Channel: %s\n",hbInfo); } slhaRead("slha.in",0); unlink("slha.in"); #endif #ifdef OMEGA { int fast=1; double Beps=1.E-5, cut=0.01; double Omega,Xf; // to exclude processes with virtual W/Z in DM annihilation VZdecay=0; VWdecay=0; cleanDecayTable(); // to include processes with virtual W/Z also in co-annihilation // VZdecay=2; VWdecay=2; cleanDecayTable(); printf("\n==== Calculation of relic density =====\n"); sortOddParticles(cdmName); Omega=darkOmega(&Xf,fast,Beps); printf("Xf=%.2e Omega=%.2e\n",Xf,Omega); printChannels(Xf,cut,Beps,1,stdout); // direct access for annihilation channels /* if(omegaCh){ int i; for(i=0; omegaCh[i].weight>0 ;i++) printf(" %.2E %s %s -> %s %s\n", omegaCh[i].weight, omegaCh[i].prtcl[0], omegaCh[i].prtcl[1],omegaCh[i].prtcl[2],omegaCh[i].prtcl[3]); } */ // to restore VZdecay and VWdecay switches VZdecay=1; VWdecay=1; cleanDecayTable(); } #endif #ifdef INDIRECT_DETECTION { int err,i; double Emin=1,SMmev=320;/*Energy cut in GeV and solar potential in MV*/ double 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[NZ],SpNm[NZ],SpNl[NZ]; // double * SpNe=NULL,*SpNm=NULL,*SpNl=NULL; double Etest=Mcdm/2; /* default DarkSUSY parameters */ /* K_dif=0.036; L_dif=4; Delta_dif=0.6; Vc_dif=10; Rdisk=30; SMmev=320; */ 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 */ if(SpA) { double fi=0.,dfi=M_PI/180.; /* angle of sight and 1/2 of cone angle in [rad] */ /* dfi corresponds to solid angle 1.E-3sr */ printf("Photon flux for angle of sight f=%.2f[rad]\n" "and spherical region described by cone with angle %.4f[rad]\n",fi,2*dfi); gammaFluxTab(fi,dfi, sigmaV, SpA, FluxA); #ifdef SHOWPLOTS sprintf(txt,"Photon flux for angle of sight %.2f[rad] and 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, FluxA), Etest); #ifdef LoopGAMMA if(loopGamma(&vcs_gz,&vcs_gg)==0) { printf("Gamma ray lines:\n"); printf("E=%.2E[GeV] vcs(Z,A)= %.2E[cm^3/s], flux=%.2E[cm^2 s]^{-1}\n",Mcdm-91.19*91.19/4/Mcdm,vcs_gz, gammaFlux(fi,dfi,vcs_gz)); printf("E=%.2E[GeV] vcs(A,A)= %.2E[cm^3/s], flux=%.2E[cm^2 s]^{-1}\n",Mcdm,vcs_gg, 2*gammaFlux(fi,dfi,vcs_gg)); } #endif } if(SpE) { posiFluxTab(Emin, sigmaV, SpE, FluxE); if(SMmev>0) solarModulation(SMmev,0.0005,FluxE,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); if(SMmev>0) solarModulation(SMmev,1,FluxP,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" calcScalarQuarkFF( Mu/Md, Ms/Md, sigmaPiN[MeV], sigmaS[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); calcScalarQuarkFF(0.46,27.5,34.,42.); // To restore default form factors of version 2 call // calcScalarQuarkFF(0.553,18.9,55.,243.5); 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); } #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"); #ifdef TEST_Direct_Detection printf(" TREE LEVEL\n"); MSSMDDtest(0, pA0,pA5,nA0,nA5); printf("Analitic formulae\n"); printf("proton: SI %.3E SD %.3E\n",pA0[0],pA5[0]); printf("neutron: SI %.3E SD %.3E\n",nA0[0],nA5[0]); nucleonAmplitudes(NULL, 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]); printf(" BOX DIAGRAMS\n"); MSSMDDtest(1, pA0,pA5,nA0,nA5); printf("Analitic formulae\n"); printf("proton: SI %.3E SD %.3E\n",pA0[0],pA5[0]); printf("neutron: SI %.3E SD %.3E\n",nA0[0],nA5[0]); #endif 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,SxxGe73,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,SxxXe131,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,SxxNa23,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,SxxI127,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 NEUTRINO { double nu[NZ], nu_bar[NZ],mu[NZ]; double Ntot; int forSun=1; double Emin=0.01; printf("\n===============Neutrino Telescope======= for "); if(forSun) printf("Sun\n"); else printf("Earth\n"); err=neutrinoFlux(Maxwell,forSun, nu,nu_bar); #ifdef SHOWPLOTS displaySpectrum(nu,"nu flux from Sun [1/Year/km^2/GeV]",Emin,Mcdm,1); displaySpectrum(nu_bar,"nu-bar from Sun [1/Year/km^2/GeV]",Emin,Mcdm,1); #endif { double Ntot; double Emin=1; //GeV spectrInfo(Emin/Mcdm,nu, &Ntot,NULL); printf(" E>%.1E GeV neutrino flux %.2E [1/Year/km^2] \n",Emin,Ntot); spectrInfo(Emin/Mcdm,nu_bar, &Ntot,NULL); printf(" E>%.1E GeV anti-neutrino flux %.2E [1/Year/km^2]\n",Emin,Ntot); } /* Upward events */ muonUpward(nu,nu_bar, mu); #ifdef SHOWPLOTS displaySpectrum(mu,"Upward muons[1/Year/km^2/GeV]",1,Mcdm/2,1); #endif { double Ntot; double Emin=1; //GeV spectrInfo(Emin/Mcdm,mu, &Ntot,NULL); printf(" E>%.1E GeV Upward muon flux %.2E [1/Year/km^2]\n",Emin,Ntot); } /* Contained events */ muonContained(nu,nu_bar,1., mu); #ifdef SHOWPLOTS displaySpectrum(mu,"Contained muons[1/Year/km^3/GeV]",Emin,Mcdm,1); #endif { double Ntot; double Emin=1; //GeV spectrInfo(Emin/Mcdm,mu, &Ntot,NULL); printf(" E>%.1E GeV Contained muon flux %.2E [1/Year/km^3]\n",Emin,Ntot); } } #endif #ifdef DECAYS { txtList L; double width,br; char * pname; printf("\n================= Decays ==============\n"); pname = "h"; width=pWidth(pname,&L); printf("\n%s : total width=%.2E \n and Branchings:\n",pname,width); printTxtList(L,stdout); pname = "~o2"; width=pWidth(pname,&L); printf("\n%s : total width=%.2E \n and Branchings:\n",pname,width); printTxtList(L,stdout); } #endif #ifdef CROSS_SECTIONS { double Pcm=250, cosmin=-0.99, cosmax=0.99, cs; numout* cc; printf("\n====== Calculation of cross section ====\n"); printf(" e^+, e^- annihilation\n"); Pcm=250.; 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"); 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); } } /* { double stot=0; int i,j; char * sq[25]= {"~dL","~dR","~uL","~uR","~sL","~sR","~cL","~cR","~b1","~b2","~t1","~t2", "~DL","~DR","~UL","~UR","~SL","~SR","~CL","~CR","~B1","~B2","~T1","~T2", "~g"}; Pcm=4000; for(i=0;i<25;i++) for(j=0;j<25;j++) {double dcs=hCollider(Pcm,1,0,sq[i],sq[j]); stot+=dcs; printf("p,p -> %s %s %E\n", sq[i],sq[j],dcs); } printf("total cross section =%E (without K-factor)\n",stot); } */ } #endif #ifdef CLEAN killPlots(); system("rm -f suspect2_lha.in suspect2_lha.out suspect2.out HB.slha Key.dat nngg.in nngg.out output.flha "); #endif return 0; }
int main(int argc,char** argv) { int err; char cdmName[10]; int spin2, charge3,cdim; ForceUG=0; /* to Force Unitary Gauge assign 1 */ /* gauss345_arg(ff,Y,0,1,1E-5,&err); printf("err=%d\n",err); exit(0); */ VZdecay=1; VWdecay=1; if(argc==1) { printf(" Correct usage: ./main <file with parameters> \n"); printf("Example: ./main data1.par\n"); exit(1); } err=readVar(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=sortOddParticles(cdmName); if(err) { printf("Can't calculate %s\n",cdmName); return 1;} if(CDM1) { qNumbers(CDM1, &spin2, &charge3, &cdim); printf("\nDark matter candidate is '%s' with spin=%d/2 mass=%.2E\n",CDM1, spin2,Mcdm1); if(charge3) printf("Dark Matter has electric charge %d/3\n",charge3); if(cdim!=1) printf("Dark Matter is a color particle\n"); } if(CDM2) { qNumbers(CDM2, &spin2, &charge3, &cdim); printf("\nDark matter candidate is '%s' with spin=%d/2 mass=%.2E\n",CDM2,spin2,Mcdm2); if(charge3) printf("Dark Matter has electric charge %d/3\n",charge3); if(cdim!=1) printf("Dark Matter is a color particle\n"); } #ifdef MASSES_INFO { printf("\n=== MASSES OF HIGGS AND ODD PARTICLES: ===\n"); printHiggs(stdout); printMasses(stdout,1); } #endif #ifdef CONSTRAINTS { double csLim; if(Zinvisible()) printf("Excluded by Z->invizible\n"); if(LspNlsp_LEP(&csLim)) printf("LEP excluded by e+,e- -> DM q q-\\bar Cross Section= %.2E pb\n",csLim); } #endif #ifdef MONOJET { double CL=monoJet(); printf(" Monojet signal exclusion CL is %.3e\n", CL); } #endif #if defined(HIGGSBOUNDS) || defined(HIGGSSIGNALS) { int NH0,NHch; // number of neutral and charged Higgs particles. double HB_result,HB_obsratio,HS_observ,HS_chi2, HS_pval; char HB_chan[100]={""}, HB_version[50], HS_version[50]; NH0=hbBlocksMO("HB.in",&NHch); system("echo 'BLOCK DMASS\n 25 2 '>> HB.in"); #include "../include/hBandS.inc" #ifdef HIGGSBOUNDS printf("HB(%s): result=%.0f obsratio=%.2E channel= %s \n", HB_version,HB_result,HB_obsratio,HB_chan); #endif #ifdef HIGGSSIGNALS printf("HS(%s): Nobservables=%.0f chi^2 = %.2E pval= %.2E\n",HS_version,HS_observ,HS_chi2, HS_pval); #endif } #endif #ifdef LILITH { double m2logL, m2logL_reference=0,pvalue; int exp_ndf,n_par=0,ndf; char call_lilith[100], Lilith_version[20]; if(LilithMO("Lilith_in.xml")) { #include "../include/Lilith.inc" if(ndf) { printf("LILITH(DB%s): -2*log(L): %.2f; -2*log(L_reference): %.2f; ndf: %d; p-value: %.2E \n", Lilith_version,m2logL,m2logL_reference,ndf,pvalue); } } else printf("LILITH: there is no Higgs candidate\n"); } #endif #ifdef SMODELS { int result=0; double Rvalue=0; char analysis[30]={},topology[30]={}; int LHCrun=LHC8|LHC13; // LHC8 - 8TeV; LHC13 - 13TeV; #include "../include/SMODELS.inc" } #endif #ifdef OMEGA { int fast=1; double Beps=1.E-4, cut=0.01; double Omega; int i,err; printf("\n==== Calculation of relic density =====\n"); if(CDM1 && CDM2) { Omega= darkOmega2(fast,Beps); printf("Omega_1h^2=%.2E\n", Omega*(1-fracCDM2)); printf("Omega_2h^2=%.2E\n", Omega*fracCDM2); } else { double Xf; Omega=darkOmega(&Xf,fast,Beps,&err); printf("Xf=%.2e Omega=%.2e\n",Xf,Omega); if(Omega>0)printChannels(Xf,cut,Beps,1,stdout); } } #endif #ifdef FREEZEIN { double TR=1E10; double omegaFi; toFeebleList("~s0"); VWdecay=0; VZdecay=0; omegaFi=darkOmegaFi(TR,&err); printf("omega freeze-in=%.3E\n", omegaFi); printChannelsFi(0,0,stdout); } #endif #ifdef INDIRECT_DETECTION { int err,i; double Emin=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 Etest=Mcdm/2; printf("\n==== Indirect detection =======\n"); sigmaV=calcSpectrum(1+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 */ { 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 for angle of sight %.2f[rad] and cone angle %.2f[rad]",fi,2*dfi); displayPlot(txt,"E[GeV]",Emin,Mcdm,0,1,"",0,SpectdNdE,FluxA); #endif printf("Photon flux = %.2E[cm^2 s GeV]^{-1} for E=%.1f[GeV]\n",SpectdNdE(Etest, FluxA), Etest); } { posiFluxTab(Emin, sigmaV, SpE, FluxE); #ifdef SHOWPLOTS displayPlot("positron flux [cm^2 s sr GeV]^{-1}","E[GeV]",Emin,Mcdm,0,1,"",0,SpectdNdE,FluxE); #endif printf("Positron flux = %.2E[cm^2 sr s GeV]^{-1} for E=%.1f[GeV] \n", SpectdNdE(Etest, FluxE), Etest); } { pbarFluxTab(Emin, sigmaV, SpP, FluxP ); #ifdef SHOWPLOTS displayPlot("antiproton flux [cm^2 s sr GeV]^{-1}","E[GeV]",Emin,Mcdm,0,1,"",0,SpectdNdE,FluxP); #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" calcScalarQuarkFF( Mu/Md, Ms/Md, sigmaPiN[MeV], sigma0[MeV]) calculates and rewrites Scalar form factors */ printf("\n======== RESET_FORMFACTORS ======\n"); printf("protonFF (default) d %.2E, u %.2E, s %.2E\n",ScalarFFPd, ScalarFFPu,ScalarFFPs); printf("neutronFF(default) d %.2E, u %.2E, s %.2E\n",ScalarFFNd, ScalarFFNu,ScalarFFNs); // To restore default form factors of version 2 call calcScalarQuarkFF(0.553,18.9,55.,243.5); printf("protonFF (new) d %.2E, u %.2E, s %.2E\n",ScalarFFPd, ScalarFFPu,ScalarFFPs); printf("neutronFF(new) d %.2E, u %.2E, s %.2E\n",ScalarFFNd, ScalarFFNu,ScalarFFNs); // To restore default form factors current version call // calcScalarQuarkFF(0.56,20.2,34,42); } #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"); if(CDM1) { nucleonAmplitudes(CDM1, pA0,pA5,nA0,nA5); printf("CDM[antiCDM]-nucleon micrOMEGAs amplitudes for %s \n",CDM1); printf("proton: SI %.3E [%.3E] SD %.3E [%.3E]\n",pA0[0], pA0[1], pA5[0], pA5[1] ); printf("neutron: SI %.3E [%.3E] SD %.3E [%.3E]\n",nA0[0], nA0[1], nA5[0], nA5[1] ); SCcoeff=4/M_PI*3.8937966E8*pow(Nmass*Mcdm/(Nmass+ Mcdm),2.); printf("CDM[antiCDM]-nucleon cross sections[pb]:\n"); printf(" proton SI %.3E [%.3E] SD %.3E [%.3E]\n", SCcoeff*pA0[0]*pA0[0],SCcoeff*pA0[1]*pA0[1],3*SCcoeff*pA5[0]*pA5[0],3*SCcoeff*pA5[1]*pA5[1]); printf(" neutron SI %.3E [%.3E] SD %.3E [%.3E]\n", SCcoeff*nA0[0]*nA0[0],SCcoeff*nA0[1]*nA0[1],3*SCcoeff*nA5[0]*nA5[0],3*SCcoeff*nA5[1]*nA5[1]); } if(CDM2) { nucleonAmplitudes(CDM2, pA0,pA5,nA0,nA5); printf("CDM[antiCDM]-nucleon micrOMEGAs amplitudes for %s \n",CDM2); printf("proton: SI %.3E [%.3E] SD %.3E [%.3E]\n",pA0[0], pA0[1], pA5[0], pA5[1] ); printf("neutron: SI %.3E [%.3E] SD %.3E [%.3E]\n",nA0[0], nA0[1], nA5[0], nA5[1] ); SCcoeff=4/M_PI*3.8937966E8*pow(Nmass*Mcdm/(Nmass+ Mcdm),2.); printf("CDM[antiCDM]-nucleon cross sections[pb]:\n"); printf(" proton SI %.3E [%.3E] SD %.3E [%.3E]\n", SCcoeff*pA0[0]*pA0[0],SCcoeff*pA0[1]*pA0[1],3*SCcoeff*pA5[0]*pA5[0],3*SCcoeff*pA5[1]*pA5[1]); printf(" neutron SI %.3E [%.3E] SD %.3E [%.3E]\n", SCcoeff*nA0[0]*nA0[0],SCcoeff*nA0[1]*nA0[1],3*SCcoeff*nA5[0]*nA5[0],3*SCcoeff*nA5[1]*nA5[1]); } } #endif #ifdef CDM_NUCLEUS { double dNdE[300]; double nEvents; printf("\n======== Direct Detection ========\n"); nEvents=nucleusRecoil(Maxwell,73,Z_Ge,J_Ge73,SxxGe73,NULL,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 displayPlot("Distribution of recoil energy of 73Ge","E[KeV]",0,200,0,1,"dN/dE",0,dNdERecoil,dNdE); #endif nEvents=nucleusRecoil(Maxwell,131,Z_Xe,J_Xe131,SxxXe131,NULL,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 displayPlot("Distribution of recoil energy of 131Xe","E[KeV]",0,200,0,1,"dN/dE",0,dNdERecoil,dNdE); #endif nEvents=nucleusRecoil(Maxwell,23,Z_Na,J_Na23,SxxNa23,NULL,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 displayPlot("Distribution of recoil energy of 23Na","E[KeV]",0,200,0,1,"dN/dE",0,dNdERecoil,dNdE); #endif nEvents=nucleusRecoil(Maxwell,127,Z_I,J_I127,SxxI127,NULL,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 displayPlot("Distribution of recoil energy of 127I","E[KeV]",0,200,0,1,"dN/dE",0,dNdERecoil,dNdE); #endif } #endif #ifdef NEUTRINO if(!CDM1 || !CDM2) { double nu[NZ], nu_bar[NZ],mu[NZ]; double Ntot; int forSun=1; double Emin=1; printf("\n===============Neutrino Telescope======= for "); if(forSun) printf("Sun\n"); else printf("Earth\n"); err=neutrinoFlux(Maxwell,forSun, nu,nu_bar); #ifdef SHOWPLOTS displayPlot("neutrino fluxes [1/Year/km^2/GeV]","E[GeV]",Emin,Mcdm,0, 2,"dnu/dE",0,SpectdNdE,nu,"dnu_bar/dE",0,SpectdNdE,nu_bar); #endif { printf(" E>%.1E GeV neutrino flux %.2E [1/Year/km^2] \n",Emin,spectrInfo(Emin,nu,NULL)); printf(" E>%.1E GeV anti-neutrino flux %.2E [1/Year/km^2]\n",Emin,spectrInfo(Emin,nu_bar,NULL)); } /* Upward events */ muonUpward(nu,nu_bar, mu); #ifdef SHOWPLOTS displayPlot("Upward muons[1/Year/km^2/GeV]","E",Emin,Mcdm/2, 0,1,"mu",0,SpectdNdE,mu); #endif printf(" E>%.1E GeV Upward muon flux %.2E [1/Year/km^2]\n",Emin,spectrInfo(Emin,mu,NULL)); /* Contained events */ muonContained(nu,nu_bar,1., mu); #ifdef SHOWPLOTS displayPlot("Contained muons[1/Year/km^3/GeV]","E",Emin,Mcdm,0,1,"",0,SpectdNdE,mu); #endif printf(" E>%.1E GeV Contained muon flux %.2E [1/Year/km^3]\n",Emin,spectrInfo(Emin/Mcdm,mu,NULL)); } #endif #ifdef DECAYS { char* pname = pdg2name(25); txtList L; double width; if(pname) { width=pWidth(pname,&L); printf("\n%s : total width=%E \n and Branchings:\n",pname,width); printTxtList(L,stdout); } pname = pdg2name(24); if(pname) { width=pWidth(pname,&L); printf("\n%s : total width=%E \n and Branchings:\n",pname,width); printTxtList(L,stdout); } } #endif #ifdef CROSS_SECTIONS { char* next,next_; double nextM; next=nextOdd(1,&nextM); if(next && nextM<1000) { double cs, Pcm=6500, Qren, Qfact, pTmin=0; int nf=3; char*next_=antiParticle(next); Qren=Qfact=nextM; printf("\npp > nextOdd at sqrt(s)=%.2E GeV\n",2*Pcm); Qren=Qfact; cs=hCollider(Pcm,1,nf,Qren, Qfact, next,next_,pTmin,1); printf("Production of 'next' odd particle: cs(pp-> %s,%s)=%.2E[pb]\n",next,next_, cs); } } #endif #ifdef CLEAN system("rm -f HB.* HB.* hb.* hs.* debug_channels.txt debug_predratio.txt Key.dat"); system("rm -f Lilith_* particles.py*"); system("rm -f smodels.in smodels.log smodels.out summary.*"); #endif killPlots(); return 0; }
int main(int argc,char** argv) { int err; char cdmName[10]; int spin2, charge3,cdim; ForceUG=0; /* to Force Unitary Gauge assign 1 */ if(argc==1) { printf(" Correct usage: ./main <file with parameters> \n"); exit(1); } /* err=readVar(argv[1]);*/ err=readVarRHNM(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=sortOddParticles(cdmName); if(err) { printf("Can't calculate %s\n",cdmName); return 1;} 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,"~n4")) printf(" ~n4 is not CDM\n"); #ifdef MASSES_INFO { printf("\n=== MASSES OF PARTICLES OF ODD SECTOR: ===\n"); printMasses(stdout,1); } #endif #ifdef CONSTRAINTS #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=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 Etest=Mcdm/2; printf("\n==== Indirect detection =======\n"); sigmaV=calcSpectrum(1+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, FluxA), 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[antiCDM]-nucleon micrOMEGAs amplitudes:\n"); printf("proton: SI %.3E [%.3E] SD %.3E [%.3E]\n",pA0[0], pA0[1], pA5[0], pA5[1] ); printf("neutron: SI %.3E [%.3E] SD %.3E [%.3E]\n",nA0[0], nA0[1], nA5[0], nA5[1] ); SCcoeff=4/M_PI*3.8937966E8*pow(Nmass*Mcdm/(Nmass+ Mcdm),2.); printf("CDM[antiCDM]-nucleon cross sections[pb]:\n"); printf(" proton SI %.3E [%.3E] SD %.3E [%.3E]\n", SCcoeff*pA0[0]*pA0[0],SCcoeff*pA0[1]*pA0[1],3*SCcoeff*pA5[0]*pA5[0],3*SCcoeff*pA5[1]*pA5[1]); printf(" neutron SI %.3E [%.3E] SD %.3E [%.3E]\n", SCcoeff*nA0[0]*nA0[0],SCcoeff*nA0[1]*nA0[1],3*SCcoeff*nA5[0]*nA5[0],3*SCcoeff*nA5[1]*nA5[1]); } #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("\n Calculation of particle decays\n"); pname = "H"; 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 = "Zp"; 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 main(int argc,char** argv) { int err,n,i; // data corresponding to MSSM/mssmh.dat // cross sections of DM-nucleon interaction double csSIp=5.489E-09, csSIn=5.758E-09, csSDp=5.807E-05, csSDn=-4.503E-05; //[pb] // cross section of DM annihilation in halo double vcs = 0.310; // [pb] #define nCH 5 /* annihilation channels and their fractions*/ int pdgCH[nCH] ={ 6, 5, 15, 23, 24}; double fracCH[nCH]={0.59,0.12,0.20,0.03, 0.06}; sortOddParticles(NULL); // Mass of Dark Matter Mcdm=189.0; #ifdef INDIRECT_DETECTION { double sigmaV; char txt[100]; double SpA[NZ],SpE[NZ],SpP[NZ]; double FluxA[NZ],FluxE[NZ],FluxP[NZ], buff[NZ]; double SMmev=320; /* solar potential in MV */ double Etest=Mcdm/2; printf("\n==== Indirect detection =======\n"); sigmaV=vcs*2.9979E-26; printf("sigmav=%.2E[cm^3/s]\n",sigmaV); SpA[0]=SpE[0]=SpP[0]=Mcdm; for(i=1;i<NZ;i++) { SpA[i]=SpE[i]=SpP[i]=0;} // Calculation on photon, positron and antiproton spectra: summation over channels for(n=0;n<nCH;n++) if(fracCH[n]>0) { basicSpectra(Mcdm,pdgCH[n],0, buff); for(i=1;i<NZ;i++) SpA[i]+=buff[i]*fracCH[n]; basicSpectra(Mcdm,pdgCH[n],1, buff); for(i=1;i<NZ;i++) SpE[i]+=buff[i]*fracCH[n]; basicSpectra(Mcdm,pdgCH[n],2, buff); for(i=1;i<NZ;i++) SpP[i]+=buff[i]*fracCH[n]; } // Photon flux { double Emin=1; /* Energy cut in GeV */ double fi=0.0,dfi=M_PI/180.; /* 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(txt,Emin,Mcdm,FluxA); #endif printf("Photon flux = %.2E[cm^2 s GeV]^{-1} for E=%.1f[GeV]\n",SpectdNdE(Etest, FluxA), Etest); } // Positron flux { double Emin=1.; posiFluxTab(Emin, sigmaV, SpE, FluxE); if(SMmev>0) solarModulation(SMmev,0.0005,FluxE,FluxE); #ifdef SHOWPLOTS displaySpectrum("positron flux [cm^2 s sr GeV]^{-1}" ,Emin,Mcdm,FluxE); #endif printf("Positron flux = %.2E[cm^2 sr s GeV]^{-1} for E=%.1f[GeV] \n", SpectdNdE(Etest, FluxE), Etest); } // antiproton flux { double Emin=1; pbarFluxTab(Emin, sigmaV, SpP, FluxP ); if(SMmev>0) solarModulation(SMmev,1,FluxP,FluxP); #ifdef SHOWPLOTS displaySpectrum("antiproton flux [cm^2 s sr GeV]^{-1}" ,Emin, Mcdm,FluxP); #endif printf("Antiproton flux = %.2E[cm^2 sr s GeV]^{-1} for E=%.1f[GeV] \n", SpectdNdE(Etest, FluxP), Etest); } } #endif // Interaction with nucleus #ifdef CDM_NUCLEUS { double dNdE[300]; double nEvents; printf("\n======== Direct Detection ========\n"); nEvents=nucleusRecoilAux(Maxwell,73,Z_Ge,J_Ge73,SxxGe73, csSIp,csSIn, csSDp,csSDn,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=nucleusRecoilAux(Maxwell,131,Z_Xe,J_Xe131,SxxXe131,csSIp,csSIn, csSDp,csSDn,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=nucleusRecoilAux(Maxwell,23,Z_Na,J_Na23,SxxNa23,csSIp,csSIn, csSDp,csSDn,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=nucleusRecoilAux(Maxwell,127,Z_I,J_I127,SxxI127,csSIp,csSIn, csSDp,csSDn,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 // Neutrino telescope #ifdef NEUTRINO { double nu[NZ], nu_bar[NZ],mu[NZ],buff[NZ]; double Crate,R,Prop; int forSun=1; double Emin=1; int i,err; double yrs=31556925.2; printf("\n===============Neutrino Telescope======= for "); if(forSun) printf("Sun\n"); else printf("Earth\n"); // Capture rate Crate=captureAux(Maxwell,forSun, Mcdm,csSIp,csSIn,csSDp,csSDn); nu[0]=nu_bar[0]=Mcdm; for(i=1;i<NZ;i++){ nu[i]=nu_bar[i]=0;} // Calculation of neutrino, antineutrino spectra: sumation over chanels for(n=0;n<nCH;n++) if(fracCH[n]>0) { double bn[NZ],bn_[NZ]; basicNuSpectra(forSun,Mcdm, pdgCH[n], 0, bn, bn_); for(i=1;i<NZ;i++) { nu[i] +=bn[i]*fracCH[n]; nu_bar[i] +=bn_[i]*fracCH[n];} } // propagation: neutrino flux at Earth if(forSun) R=150E6; else R=6378.1; // distance in km Prop=yrs/(4*M_PI*R*R); // in Year*km^2 for(i=1;i<NZ;i++) { nu[i]*= 0.5*Crate*Prop; nu_bar[i]*=0.5*Crate*Prop; } // Display neutrino flux #ifdef SHOWPLOTS displaySpectra("neutrino fluxes [1/Year/km^2/GeV]",Emin,Mcdm,2, nu,"nu",nu_bar,"nu_bar"); #endif { printf(" E>%.1E GeV neutrino flux %.3E [1/Year/km^2] \n",Emin,spectrInfo(Emin,nu,NULL)); printf(" E>%.1E GeV anti-neutrino flux %.3E [1/Year/km^2]\n", Emin,spectrInfo(Emin,nu_bar,NULL)); } //Exclusion level if(forSun) printf("IceCube22 exclusion confidence level = %.2E%%\n", exLevIC22(nu,nu_bar,NULL)); } #endif #ifdef CLEAN #endif killPlots(); return 0; }
int main(int argc,char** argv) { int err; char cdmName[10]; int spin2, charge3,cdim; ForceUG=0; // to Force Unitary Gauge assign 1 if(argc==1) { printf(" Correct usage: ./main <file with parameters> \n"); printf("Example: ./main data1.par\n"); exit(1); } err=readVar(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=sortOddParticles(cdmName); if(err) { printf("Can't calculate %s\n",cdmName); return 1; } 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 ia a color particle\n"); exit(1); } #ifdef MASSES_INFO { printf("\n=== MASSES OF HIGG AND ODD PARTICLES: ===\n"); printHiggs(stdout); printMasses(stdout,1); } #endif #ifdef HIGGSBOUNDS if(access(HIGGSBOUNDS "/HiggsBounds",X_OK )) system( "cd " HIGGSBOUNDS "; ./configure; make "); HBblocks("HB.in"); system(HIGGSBOUNDS "/HiggsBounds LandH SLHA 1 0 HB.in HB.out > hb.stdout"); slhaRead("HB.out",1+4); printf("HB result= %.0E obsratio=%.2E\n",slhaValFormat("HiggsBoundsResults",0.,"1 2 %lf"), slhaValFormat("HiggsBoundsResults",0.,"1 3 %lf" ) ); { char hbInfo[100]; if(0==slhaSTRFormat("HiggsBoundsResults","1 5 ||%[^|]||",hbInfo)) printf("Channel: %s\n",hbInfo); } #endif #ifdef HIGGSSIGNALS #define DataSet " latestresults " //#define Method " peak " //#define Method " mass " #define Method " both " #define PDF " 2 " // Gaussian //#define PDF " 1 " // box //#define PDF " 3 " // box+Gaussia #define dMh " 2 " printf("HiggsSignals:\n"); if(access(HIGGSSIGNALS "/HiggsSignals",X_OK )) system( "cd " HIGGSSIGNALS "; ./configure; make "); system("rm -f HS.in HS.out"); HBblocks("HS.in"); system(HIGGSSIGNALS "/HiggsSignals" DataSet Method PDF " SLHA 1 0 HS.in > hs.stdout"); system("grep -A 10000 HiggsSignalsResults HS.in > HS.out"); slhaRead("HS.out",1+4); printf(" Number of observables %.0f\n",slhaVal("HiggsSignalsResults",0.,1,7)); printf(" total chi^2= %.1E\n",slhaVal("HiggsSignalsResults",0.,1,12)); printf(" HS p-value = %.1E\n", slhaVal("HiggsSignalsResults",0.,1,13)); #undef dMh #undef PDF #undef Method #undef DataSet #endif #ifdef OMEGA { int fast=1; double Beps=1.E-5, cut=0.01; double Omega,Xf; int i; // to exclude processes with virtual W/Z in DM annihilation VZdecay=0; VWdecay=0; cleanDecayTable(); // to include processes with virtual W/Z also in co-annihilation // VZdecay=2; VWdecay=2; cleanDecayTable(); 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); // VZdecay=1; VWdecay=1; cleanDecayTable(); // restore default } #endif #ifdef INDIRECT_DETECTION { int err,i; double Emin=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 Etest=Mcdm/2; printf("\n==== Indirect detection =======\n"); sigmaV=calcSpectrum(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); #endif printf("Photon flux = %.2E[cm^2 s GeV]^{-1} for E=%.1f[GeV]\n",SpectdNdE(Etest, FluxA), Etest); } if(SpE) { posiFluxTab(Emin, sigmaV, SpE, FluxE); #ifdef SHOWPLOTS displaySpectrum(FluxE,"positron flux [cm^2 s sr GeV]^{-1}" ,Emin,Mcdm); #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); #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("\n======== RESET_FORMFACTORS ======\n"); printf("protonFF (default) d %.2E, u %.2E, s %.2E\n",ScalarFFPd, ScalarFFPu,ScalarFFPs); printf("neutronFF(default) d %.2E, u %.2E, s %.2E\n",ScalarFFNd, ScalarFFNu,ScalarFFNs); // To restore default form factors of version 2 call // calcScalarQuarkFF(0.553,18.9,55.,243.5); calcScalarFF(0.553,18.9,70.,35.); printf("protonFF (new) d %.2E, u %.2E, s %.2E\n",ScalarFFPd, ScalarFFPu,ScalarFFPs); printf("neutronFF(new) d %.2E, u %.2E, s %.2E\n",ScalarFFNd, ScalarFFNu,ScalarFFNs); } #endif #ifdef CDM_NUCLEON { double pA0[2],pA5[2],nA0[2],nA5[2]; double Nmass=0.939; /*nucleon mass*/ double SCcoeff; int i; printf("\n==== Calculation of CDM-nucleons amplitudes =====\n"); nucleonAmplitudes(CDM1,NULL, pA0,pA5,nA0,nA5); printf("CDM[antiCDM]-nucleon micrOMEGAs amplitudes:\n"); printf("proton: SI %.3E [%.3E] SD %.3E [%.3E]\n",pA0[0], pA0[1], pA5[0], pA5[1] ); printf("neutron: SI %.3E [%.3E] SD %.3E [%.3E]\n",nA0[0], nA0[1], nA5[0], nA5[1] ); SCcoeff=4/M_PI*3.8937966E8*pow(Nmass*Mcdm/(Nmass+ Mcdm),2.); printf("CDM[antiCDM]-nucleon cross sections[pb]:\n"); printf(" proton SI %.3E [%.3E] SD %.3E [%.3E]\n", SCcoeff*pA0[0]*pA0[0],SCcoeff*pA0[1]*pA0[1],3*SCcoeff*pA5[0]*pA5[0],3*SCcoeff*pA5[1]*pA5[1]); printf(" neutron SI %.3E [%.3E] SD %.3E [%.3E]\n", SCcoeff*nA0[0]*nA0[0],SCcoeff*nA0[1]*nA0[1],3*SCcoeff*nA5[0]*nA5[0],3*SCcoeff*nA5[1]*nA5[1]); } #endif #ifdef CDM_NUCLEUS { double dNdE[300]; double nEvents; printf("\n======== Direct Detection ========\n"); nEvents=nucleusRecoil(Maxwell,73,Z_Ge,J_Ge73,SxxGe73,NULL,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,SxxXe131,NULL,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,SxxNa23,NULL,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,SxxI127,NULL,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 NEUTRINO { double nu[NZ], nu_bar[NZ],mu[NZ]; double Ntot; int forSun=1; double Emin=0.01; printf("\n===============Neutrino Telescope======= for "); if(forSun) printf("Sun\n"); else printf("Earth\n"); err=neutrinoFlux(Maxwell,forSun, nu,nu_bar); #ifdef SHOWPLOTS displaySpectrum(nu,"nu flux from Sun [1/Year/km^2/GeV]",Emin,Mcdm); displaySpectrum(nu_bar,"nu-bar from Sun [1/Year/km^2/GeV]",Emin,Mcdm); #endif { double Ntot; double Emin=10; //GeV spectrInfo(Emin/Mcdm,nu, &Ntot,NULL); printf(" E>%.1E GeV neutrino flux %.3E [1/Year/km^2] \n",Emin,Ntot); spectrInfo(Emin/Mcdm,nu_bar, &Ntot,NULL); printf(" E>%.1E GeV anti-neutrino flux %.3E [1/Year/km^2]\n",Emin,Ntot); } /* Upward events */ muonUpward(nu,nu_bar, mu); #ifdef SHOWPLOTS displaySpectrum(mu,"Upward muons[1/Year/km^2/GeV]",1,Mcdm/2); #endif { double Ntot; double Emin=1; //GeV spectrInfo(Emin/Mcdm,mu, &Ntot,NULL); printf(" E>%.1E GeV Upward muon flux %.3E [1/Year/km^2]\n",Emin,Ntot); } /* Contained events */ muonContained(nu,nu_bar,1., mu); #ifdef SHOWPLOTS displaySpectrum(mu,"Contained muons[1/Year/km^3/GeV]",Emin,Mcdm); #endif { double Ntot; double Emin=1; //GeV spectrInfo(Emin/Mcdm,mu, &Ntot,NULL); printf(" E>%.1E GeV Contained muon flux %.3E [1/Year/km^3]\n",Emin,Ntot); } } #endif #ifdef DECAYS { txtList L; double width,br; char * pname; printf("\n================= Decays ==============\n"); pname = "H"; width=pWidth(pname,&L); printf("\n%s : total width=%.2E \n and Branchings:\n",pname,width); printTxtList(L,stdout); pname = "~W+"; width=pWidth(pname,&L); printf("\n%s : total width=%.2E \n and Branchings:\n",pname,width); printTxtList(L,stdout); } #endif #ifdef CLEAN system("rm -f HB.in HB.out HS.in HS.out hb.stdout hs.stdout debug_channels.txt debug_predratio.txt Key.dat"); killPlots(); #endif return 0; }
int neutrinoFlux(double (* fvf)(double), int forSun, double* nu, double * Nu) { int i,n,err; double vcs0,vcs1; char lop[100]; double nu_[NZ],Nu_[NZ]; char *name, *aname; double pA0[2],pA5[2],nA0[2],nA5[2]; double R,Prop,Cr0,Cr1,Dv; double Veff; double rho,T; for(i=0;i<NZ;i++) nu[i]=Nu[i]=0; err=sortOddParticles(lop); // it also calculated by nucleonAmplitudes, but we need to know 'lop' if(err) return err; err=nucleonAmplitudes(FeScLoop,pA0,pA5,nA0,nA5); if(err) return err; Cr0=forSun? captureSun(fvf,pA0[0],nA0[0],pA5[0],nA5[0]):captureEarth(fvf, pA0[0],nA0[0],pA5[0],nA5[0]); if(pA0[0]==pA0[1] && nA0[0]==nA0[1] &&pA5[0]==pA5[1]&&nA5[0]==nA5[1]) Cr1=Cr0; else Cr1=forSun? captureSun(fvf,pA0[1],nA0[1],pA5[1],nA5[1]):captureEarth(fvf,pA0[1],nA0[1],pA5[1],nA5[1]); for(n=0;n<Nodd;n++) if(strcmp(lop,OddPrtcls[n].name)==0 || strcmp(lop,OddPrtcls[n].aname)==0 ) break; name=OddPrtcls[n].name; aname=OddPrtcls[n].aname; if(forSun) R=150E6; else R=6378.1; /* Distance to Sun/Earth in [km] */ Prop=31556925.2/(4*M_PI*R*R); /* for Year*km^2 */ vcs0= calcSpectrum0(name,aname,forSun, nu,Nu); { double r_,v_,r095,S,ph,Veff1; for(i=0,r_=0;i<10;i++) { T=polint2(r_/Rcm,nTab,rTab,tTab)*KelvinEv*1E-9; rho= polint2(r_/Rcm,nTab,rTab,rhoTab); r_= sqrt(6*T/(Gconst*100*rho*Mcdm))/M_PI; if(r_>Rcm) r_=Rcm; } //printf("r_/RS=%E\n", r_/Rcm); rho=polint2(r_/Rcm,nTab,rTab,rhoTab); T=polint2(r_/Rcm,nTab,rTab,tTab); r095=polint2(T*0.95,nTab,tTab,rTab); if(r095>1) r095=1; //printf("r095=%E\n",r095); T*=KelvinEv*1E-9; //printf("T=%E[GeV]\n",T); r095*=Rcm; Veff1=pow(r_*M_PI,3)/8; if(forSun) S=sigmaSun(pA0[0],nA0[0],pA5[0],nA5[0],r095*r095*r095); else S=sigmaEarth(pA0[0],nA0[0],pA5[0],nA5[0],r095*r095*r095); v_=sqrt(8*T/(M_PI*Mcdm)); //printf("v_=%E\n",v_); //printf("S/Veff1=%E\n",S/Veff1); ph=phiTab[0]*Mcdm/T; //printf(" Mcdm=%E T=%E phi[0]=%E\n",Mcdm,T,phiTab[0]); //printf("ph=%E\n",ph); ph=ph*exp(-ph); Ev[0]=v_*S/Veff1*ph*Vlight*100; //printf("S=%E (expected = cs[cm^2]* %E) , phi[0]=%E \n",S, 4./3.*M_PI*r095*r095*r095*150/mp_g, phiTab[0]); if(strcmp(name,aname)) { if(forSun)S=sigmaSun(pA0[1],nA0[1],pA5[1],nA5[1],r095); else S=sigmaEarth(pA0[1],nA0[1],pA5[1],nA5[1],r095); Ev[1]=v_*S/Veff1*ph; } //printf("Temperature New =%E Old=%E \n", T/(KelvinEv*1E-9), tTab[0]); //printf("rho New %E old %E\n", rho,rhoTab[0]); { // compare // double mu=Mcdm*mp_gev/(Mcdm+mp_gev); // double cs=mu*mu/M_PI*(12*pA5[0]*pA5[0]+ 4*pA0[0]*pA0[0])*3.8937966E8; //printf("cs=%E\n",cs); // printf("Evaporation New=%E Old=%E\n",Ev[0], cs/5.e-3*pow(10,-(3.5*Mcdm+4))); } Veff=pow(Gconst*100*rho*Mcdm/T/3,-1.5); // printf("Veff : new=%E old=%E\n",Veff, pow(Gconst*100*(150)*Mcdm/(tTab[0]*KelvinEv*1E-9)/3,-1.5) ); } if(strcmp(name,aname)) { double G01,G00,G11; double N[2]={0,0}; int err; vcs1=calcSpectrum0(name,name,forSun, nu_,Nu_); C[0]=Cr0/(1+exp(-dmAsymm)); C[1]=Cr1/(1+exp(dmAsymm)); An[0]=vcs0/Veff; An[1]=vcs1/Veff; err=odeint(N,2, 0 ,Etime , 1.E-3, Etime/10, deriv2); //printf("err=%d N={%E,%E}\n",err, N[0],N[1]); G00=0.5*An[1]*N[0]*N[0]; G11=0.5*An[1]*N[1]*N[1]; G01= An[0]*N[0]*N[1]; { /* symbolic solution for large Etime */ double alpha,beta,x,G01_,G00_,G11_; alpha=vcs1/vcs0; beta= Cr0/Cr1; x=(beta-1 + sqrt((beta-1)*(beta-1) + 4*beta*alpha*alpha))/(2*alpha); /* x= rho_particle/rho_antiparticle */ G01_=Cr0/(1+alpha*x); G00_=0.5*G01_*alpha*x; G11_=0.5*G01_*alpha/x; // printf("x=%E G00 = %E/%E G01 = %E/%E G11 = %E/%E\n",x, G00,G00_,G01,G01_,G11,G11_); } for(i=0;i<NZ;i++) { nu[i]=Prop*(G01*nu[i]+G00*nu_[i]+G11*Nu_[i]); Nu[i]=Prop*(G01*Nu[i]+G00*Nu_[i]+G11*nu_[i]); } } else { int err; double N=0; double rf; C[0]=Cr0; An[0]=vcs0/Veff; err=odeint(&N,1, 0 ,Etime , 1.E-3, Etime/10, deriv1); rf=0.5*An[0]*N*N*Prop; //printf("Rate Factor = %E(num.sol), =%E(formula)\n",rf, 0.5*Cr0*pow(tanh(Etime*sqrt(Cr0*vcs0/Veff)),2)*Prop); for(i=0;i<NZ;i++) { nu[i]*=rf; Nu[i]*=rf;} } return 0; }
int main(int argc,char** argv) { int err; char cdmName[10]; int spin2, charge3,cdim; // sysTimeLim=1000; ForceUG=0; /* to Force Unitary Gauge assign 1 */ // nPROCSS=0; /* to switch off multiprocessor calculations */ /* if you would like to work with superIso setenv("superIso","./superiso_v3.1",1); */ #ifdef SUGRA { double m0,mhf,a0,tb; double gMG1, gMG2, gMG3, gAl, gAt, gAb, sgn, gMHu, gMHd, gMl2, gMl3, gMr2, gMr3, gMq2, gMq3, gMu2, gMu3, gMd2, gMd3; printf("\n========= mSUGRA scenario =====\n"); PRINTRGE(RGE); if(argc<5) { printf(" This program needs 4 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"); printf(" Auxiliary parameters are:\n" " sgn +/-1, sign of Higgsino mass term (default 1)\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 70 250 -300 10\n"); */ printf("Example: ./main 120 500 -350 10 1 173.1 \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); if(argc>5)sscanf(argv[5],"%lf",&sgn); else sgn=1; if(argc>6){ sscanf(argv[6],"%lf",&Mtp); assignValW("Mtp",Mtp); } if(argc>7){ sscanf(argv[7],"%lf",&MbMb); assignValW("MbMb",MbMb); } if(argc>8){ sscanf(argv[8],"%lf",&alfSMZ); assignValW("alfSMZ",alfSMZ);} } /*==== simulation of mSUGRA =====*/ gMG1=mhf, gMG2=mhf,gMG3=mhf; gAl=a0, gAt=a0, gAb=a0; gMHu=m0, gMHd=m0; gMl2=m0, gMl3=m0, gMr2=m0, gMr3=m0; gMq2=m0, gMq3=m0, gMu2=m0, gMd2=m0, gMu3=m0, gMd3=m0; err= SUGRAMODEL(RGE) (tb, gMG1, gMG2, gMG3, gAl, gAt, gAb, sgn, gMHu, gMHd, gMl2, gMl3, gMr2, gMr3, gMq2, gMq3, gMu2, gMu3, gMd2, gMd3); } #elif defined(SUGRANUH) { double m0,mhf,a0,tb; double gMG1, gMG2, gMG3, gAl, gAt, gAb, gMl2, gMl3, gMr2, gMr3, gMq2, gMq3, gMu2, gMu3, gMd2, gMd3,mu,MA; printf("\n========= mSUGRA non-universal Higgs scenario =====\n"); PRINTRGE(RGE); 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" " mu mu(EWSB)\n" " MA mass of pseudoscalar Higgs\n"); printf(" Auxiliary parameters are:\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 70 250 -300 10\n"); */ printf("Example: ./main 120 500 -350 10 680 760 \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",&mu); sscanf(argv[6],"%lf",&MA); if(argc>7){ sscanf(argv[7],"%lf",&Mtp); assignValW("Mtp",Mtp); } if(argc>8){ sscanf(argv[8],"%lf",&MbMb); assignValW("MbMb",MbMb); } if(argc>9){ sscanf(argv[9],"%lf",&alfSMZ); assignValW("alfSMZ",alfSMZ);} } /*==== simulation of mSUGRA =====*/ gMG1=mhf, gMG2=mhf,gMG3=mhf; gAl=a0, gAt=a0, gAb=a0; gMl2=m0, gMl3=m0, gMr2=m0, gMr3=m0; gMq2=m0, gMq3=m0, gMu2=m0, gMd2=m0, gMu3=m0, gMd3=m0; err= SUGRANUHMODEL(RGE) (tb,gMG1,gMG2,gMG3,gAl,gAt,gAb,gMl2,gMl3,gMr2,gMr3,gMq2,gMq3,gMu2,gMu3,gMd2,gMd3,mu,MA); } #elif defined(AMSB) { double m0,m32,sgn,tb; printf("\n========= AMSB scenario =====\n"); PRINTRGE(RGE); if(argc<4) { printf(" This program needs 3 parameters:\n" " m0 common scalar mass at GUT scale\n" " m3/2 gravitino mass\n" " tb tan(beta) \n"); printf(" Auxiliary parameters are:\n" " sgn +/-1, sign of Higgsino mass term (default 1)\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 450 60000 10\n"); exit(1); } else { double Mtp,MbMb,alfSMZ; sscanf(argv[1],"%lf",&m0); sscanf(argv[2],"%lf",&m32); sscanf(argv[3],"%lf",&tb); if(argc>4)sscanf(argv[4],"%lf",&sgn); else sgn=1; if(argc>5){ sscanf(argv[5],"%lf",&Mtp); assignValW("Mtp",Mtp); } if(argc>6){ sscanf(argv[6],"%lf",&MbMb); assignValW("MbMb",MbMb); } if(argc>7){ sscanf(argv[7],"%lf",&alfSMZ); assignValW("alfSMZ",alfSMZ);} } err= AMSBMODEL(RGE)(m0,m32,tb,sgn); } #elif defined(EWSB) { printf("\n========= EWSB scale input =========\n"); PRINTRGE(RGE); if(argc <2) { printf("The program needs one argument:the name of file with MSSM parameters.\n" "Example: ./main mssm1.par \n"); exit(1); } printf("Initial file \"%s\"\n",argv[1]); err=readVarMSSM(argv[1]); if(err==-1) { printf("Can not open the file\n"); exit(2);} else if(err>0) { printf("Wrong file contents at line %d\n",err);exit(3);} err=EWSBMODEL(RGE)(); } #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 suspect2_lha.out \n"); exit(1); } printf("Initial file \"%s\"\n",argv[1]); err=lesHinput(argv[1]); if(err) exit(2); } #endif if(err==-1) { printf("Can not open the file\n"); exit(2);} else if(err>0) { printf("Wrong file contents at line %d\n",err);exit(3);} { int nw; printf("Warnings from spectrum calculator:\n"); nw=slhaWarnings(stdout); if(nw==0) printf(" .....none\n"); } if(err) exit(1); err=sortOddParticles(cdmName); if(err) { printf("Can't calculate %s\n",cdmName); return 1;} qNumbers(cdmName,&spin2, &charge3, &cdim); printf("\nDark matter candidate is '%s' with spin=%d/2 mass=%.2E\n", cdmName, spin2, Mcdm); 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); #ifdef MASSES_INFO { printf("\n=== MASSES OF HIGGS AND SUSY PARTICLES: ===\n"); printHiggs(stdout); printMasses(stdout,1); } #endif #ifdef CONSTRAINTS { double SMbsg,dmunu; printf("\n\n==== Physical Constraints: =====\n"); printf("deltartho=%.2E\n",deltarho()); printf("gmuon=%.2E\n", gmuon()); printf("bsgnlo=%.2E ", bsgnlo(&SMbsg)); printf("( SM %.2E )\n",SMbsg); printf("bsmumu=%.2E\n", bsmumu()); printf("btaunu=%.2E\n", btaunu()); printf("dtaunu=%.2E ", dtaunu(&dmunu)); printf("dmunu=%.2E\n", dmunu); printf("Rl23=%.3E\n", Rl23()); if(masslimits()==0) printf("MassLimits OK\n"); } #endif #ifdef HIGGSBOUNDS if(access(HIGGSBOUNDS "/HiggsBounds",X_OK )) system( "cd " HIGGSBOUNDS "; ./configure; make "); slhaWrite("HB.in"); HBblocks("HB.in"); system(HIGGSBOUNDS "/HiggsBounds LandH SLHA 3 1 HB.in HB.out > hb.stdout"); slhaRead("HB.out",1+4); printf("HB result= %.0E obsratio=%.2E\n",slhaValFormat("HiggsBoundsResults",0.,"1 2 %lf"), slhaValFormat("HiggsBoundsResults",0.,"1 3 %lf" ) ); { char hbInfo[100]; if(0==slhaSTRFormat("HiggsBoundsResults","1 5 ||%[^|]||",hbInfo)) printf("Channel: %s\n",hbInfo); } #endif #ifdef HIGGSSIGNALS #define DataSet " latestresults " //#define Method " peak " //#define Method " mass " #define Method " both " #define PDF " 2 " // Gaussian //#define PDF " 1 " // box //#define PDF " 3 " // box+Gaussia #define dMh " 2 " printf("HiggsSignals:\n"); if(access(HIGGSSIGNALS "/HiggsSignals",X_OK )) system( "cd " HIGGSSIGNALS "; ./configure; make "); system("rm -f HS.in HS.out"); slhaWrite("HS.in"); HBblocks("HS.in"); system("echo 'BLOCK DMASS\n 25 " dMh " '>> HS.in"); system(HIGGSSIGNALS "/HiggsSignals" DataSet Method PDF " SLHA 3 1 HS.in > hs.stdout"); system("grep -A 10000 HiggsSignalsResults HS.in > HS.out"); slhaRead("HS.out",1+4); printf(" Number of observables %.0f\n",slhaVal("HiggsSignalsResults",0.,1,7)); printf(" total chi^2= %.1E\n",slhaVal("HiggsSignalsResults",0.,1,12)); printf(" HS p-value = %.1E\n", slhaVal("HiggsSignalsResults",0.,1,13)); #undef dMh #undef PDF #undef Method #undef DataSet #endif #ifdef LILITH if(LiLithF("Lilith_in.xml")) { double like; int exp_ndf; system("python " LILITH "/run_lilith.py Lilith_in.xml -s -r Lilith_out.slha"); slhaRead("Lilith_out.slha", 1); like = slhaVal("LilithResults",0.,1,0); exp_ndf = slhaVal("LilithResults",0.,1,1); printf("LILITH: -2*log(L): %f; exp ndf: %d \n", like,exp_ndf ); } else printf("LILITH: there is no Higgs candidate\n"); #endif #ifdef SMODELS { int res; smodels(4000.,5, 0.1, "smodels.in",0); system("make -C " SMODELS); system(SMODELS "/runTools.py xseccomputer -p -N -O -f smodels.in"); system(SMODELS "/runSModelS.py -f smodels.in -s smodels.res -particles ./ > smodels.out "); slhaRead("smodels.res", 1); res=slhaVal("SModelS_Exclusion",0.,2,0,0); switch(res) { case -1: printf("SMODELS: no channels for testing\n");break; case 0: printf("SMODELS: not excluded\n");break; case 1: printf("SMODELS: excluded\n");break; } } #endif #ifdef OMEGA { int fast=1; double Beps=1.E-5, cut=0.01; double Omega,Xf; // to exclude processes with virtual W/Z in DM annihilation VZdecay=0; VWdecay=0; cleanDecayTable(); // to include processes with virtual W/Z also in co-annihilation // VZdecay=2; VWdecay=2; cleanDecayTable(); printf("\n==== Calculation of relic density =====\n"); sortOddParticles(cdmName); Omega=darkOmega(&Xf,fast,Beps); printf("Xf=%.2e Omega=%.2e\n",Xf,Omega); // printChannels(Xf,cut,Beps,1,stdout); // direct access for annihilation channels /* if(omegaCh){ int i; for(i=0; omegaCh[i].weight>0 ;i++) printf(" %.2E %s %s -> %s %s\n", omegaCh[i].weight, omegaCh[i].prtcl[0], omegaCh[i].prtcl[1],omegaCh[i].prtcl[2],omegaCh[i].prtcl[3]); } */ // to restore default switches VZdecay=1; VWdecay=1; cleanDecayTable(); } #endif VZdecay=0; VWdecay=0; cleanDecayTable(); #ifdef INDIRECT_DETECTION { int err,i; double Emin=1,SMmev=320;/*Energy cut in GeV and solar potential in MV*/ double sigmaV; char txt[100]; double SpA[NZ],SpE[NZ],SpP[NZ]; double FluxA[NZ],FluxE[NZ],FluxP[NZ]; double SpNe[NZ],SpNm[NZ],SpNl[NZ]; // double * SpNe=NULL,*SpNm=NULL,*SpNl=NULL; double Etest=Mcdm/2; /* default DarkSUSY parameters */ /* K_dif=0.036; L_dif=4; Delta_dif=0.6; Vc_dif=10; Rdisk=30; SMmev=320; */ printf("\n==== Indirect detection =======\n"); sigmaV=calcSpectrum(1+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 */ if(SpA) { double fi=0.1,dfi=M_PI/180.; /* angle of sight and 1/2 of cone angle in [rad] */ /* dfi corresponds to solid angle 1.E-3sr */ printf("\nPhoton flux for angle of sight f=%.2f[rad]\n" "and spherical region described by cone with angle %.4f[rad]\n",fi,2*dfi); gammaFluxTab(fi,dfi, sigmaV, SpA, FluxA); printf("Photon flux = %.2E[cm^2 s GeV]^{-1} for E=%.1f[GeV]\n",SpectdNdE(Etest, FluxA), Etest); #ifdef SHOWPLOTS sprintf(txt,"Photon flux for angle of sight %.2f[rad] and cone angle %.2f[rad]",fi,2*dfi); displaySpectrum(txt,Emin,Mcdm,FluxA); #endif printf("Photon flux = %.2E[cm^2 s GeV]^{-1} for E=%.1f[GeV]\n",SpectdNdE(Etest, FluxA), Etest); } if(SpE) { posiFluxTab(Emin, sigmaV, SpE, FluxE); if(SMmev>0) solarModulation(SMmev,0.0005,FluxE,FluxE); #ifdef SHOWPLOTS displaySpectrum("positron flux [cm^2 s sr GeV]^{-1}" ,Emin,Mcdm,FluxE); #endif printf("\nPositron flux = %.2E[cm^2 sr s GeV]^{-1} for E=%.1f[GeV] \n", SpectdNdE(Etest, FluxE), Etest); } if(SpP) { pbarFluxTab(Emin, sigmaV, SpP, FluxP); if(SMmev>0) solarModulation(SMmev,1,FluxP,FluxP); #ifdef SHOWPLOTS displaySpectrum("antiproton flux [cm^2 s sr GeV]^{-1}" ,Emin,Mcdm,FluxP); #endif printf("\nAntiproton flux = %.2E[cm^2 sr s GeV]^{-1} for E=%.1f[GeV] \n", SpectdNdE(Etest, FluxP), Etest); } } #endif #ifdef LoopGAMMA { double vcs_gz,vcs_gg; double fi=0.,dfi=M_PI/180.; /* fi angle of sight[rad], dfi 1/2 of cone angle in [rad] */ /* dfi corresponds to solid angle pi*(1-cos(dfi)) [sr] */ if(loopGamma(&vcs_gz,&vcs_gg)==0) { printf("\nGamma ray lines:\n"); printf("E=%.2E[GeV] vcs(Z,A)= %.2E[cm^3/s], flux=%.2E[cm^2 s]^{-1}\n",Mcdm-91.19*91.19/4/Mcdm,vcs_gz, gammaFlux(fi,dfi,vcs_gz)); printf("E=%.2E[GeV] vcs(A,A)= %.2E[cm^3/s], flux=%.2E[cm^2 s]^{-1}\n",Mcdm,vcs_gg, 2*gammaFlux(fi,dfi,vcs_gg)); } } #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" calcScalarQuarkFF( Mu/Md, Ms/Md, sigmaPiN[MeV], sigmaS[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); calcScalarQuarkFF(0.46,27.5,34.,42.); // To restore default form factors of version 2 call // calcScalarQuarkFF(0.553,18.9,55.,243.5); 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); } #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"); #ifdef TEST_Direct_Detection printf(" TREE LEVEL\n"); MSSMDDtest(0, pA0,pA5,nA0,nA5); printf("Analitic formulae\n"); printf(" proton: SI %.3E SD %.3E\n",pA0[0],pA5[0]); printf(" neutron: SI %.3E SD %.3E\n",nA0[0],nA5[0]); nucleonAmplitudes(CDM1,NULL, 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]); printf(" BOX DIAGRAMS\n"); MSSMDDtest(1, pA0,pA5,nA0,nA5); printf("Analitic formulae\n"); printf(" proton: SI %.3E SD %.3E\n",pA0[0],pA5[0]); printf(" neutron: SI %.3E SD %.3E\n",nA0[0],nA5[0]); #endif nucleonAmplitudes(CDM1,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("\n==== 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,SxxGe73,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,SxxXe131,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,SxxNa23,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,SxxI127,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 NEUTRINO { double nu[NZ], nu_bar[NZ],mu[NZ]; int forSun=1; double Emin=1; WIMPSIM=0; printf("\n===============Neutrino Telescope======= for "); if(forSun) printf("Sun\n"); else printf("Earth\n"); err=neutrinoFlux(Maxwell,forSun, nu,nu_bar); #ifdef SHOWPLOTS displaySpectra("neutrino fluxes [1/Year/km^2/GeV]",Emin,Mcdm,2,nu,"nu",nu_bar,"nu_bar"); #endif printf(" E>%.1E GeV neutrino/anti-neutrin fluxes %.2E/%.2E [1/Year/km^2]\n",Emin, spectrInfo(Emin,nu,NULL), spectrInfo(Emin,nu_bar,NULL)); // ICE CUBE if(forSun)printf("IceCube22 exclusion confidence level = %.2E%%\n", 100*exLevIC22(nu,nu_bar,NULL)); /* Upward events */ muonUpward(nu,nu_bar, mu); #ifdef SHOWPLOTS displaySpectrum("Upward muons[1/Year/km^2/GeV]",Emin,Mcdm/2,mu); #endif printf(" E>%.1E GeV Upward muon flux %.2E [1/Year/km^2]\n",Emin,spectrInfo(Emin,mu,NULL)); /* Contained events */ muonContained(nu,nu_bar,1., mu); #ifdef SHOWPLOTS displaySpectrum("Contained muons[1/Year/km^3/GeV]",Emin,Mcdm,mu); #endif printf(" E>%.1E GeV Contained muon flux %.2E [1/Year/km^3]\n",Emin,spectrInfo(Emin,mu,NULL)); } #endif #ifdef DECAYS { txtList L; double width,br; char * pname; printf("\n================= Decays ==============\n"); pname = "h"; width=pWidth(pname,&L); printf("\n%s : total width=%.2E \n and Branchings:\n",pname,width); printTxtList(L,stdout); pname = "~o2"; width=pWidth(pname,&L); printf("\n%s : total width=%.2E \n and Branchings:\n",pname,width); printTxtList(L,stdout); } #endif #ifdef CROSS_SECTIONS { double cs, Pcm=4000, Qren,Qfact=pMass("~o2"),pTmin=0; int nf=3; printf("pp collision at %.2E GeV\n",Pcm); Qren=Qfact; cs=hCollider(Pcm,1,nf,Qren, Qfact, "~o1","~o2",pTmin,1); printf("cs(pp->~o1,~o2)=%.2E[pb]\n",cs); } #endif #ifdef CLEAN killPlots(); system("rm -f suspect2_lha.in suspect2_lha.out suspect2.out Key.dat nngg.out output.flha "); system("rm -f HB.in HB.out HS.in HS.out hb.stdout hs.stdout debug_channels.txt debug_predratio.txt"); system("rm -f Lilith_in.xml Lilith_out.slha smodels.* summary.* particles.py"); #endif return 0; }
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 main(int argc,char** argv) { int err; char wimpName[10]; /* to save RGE input/output files uncomment the next line */ /*delFiles(0);*/ if(argc==1) { printf(" Correct usage: ./omg <file with parameters> \n"); exit(1); } err=readVar(argv[1]); /* err=readVarRHNM(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=sortOddParticles(wimpName); if(err) { printf("Can't calculate %s\n",wimpName); return 1;} /*to print input parameters or model in SLHA format uncomment correspondingly*/ /* printVar(stdout); writeLesH("slha.out"); */ #ifdef MASSES_INFO { printf("\n=== MASSES OF PARTICLES OF ODD SECTOR: ===\n"); printMasses(stdout,1); } #endif #ifdef CONSTRAINTS printf("\n================= CONSTRAINTS =================\n"); #endif #ifdef OMEGA { int fast=1; double Beps=1.E-2, 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 { /* See hep-ph/0607059 pages 10, 11 for complete explanation */ int err,outP; double Mwimp,Emin,Ntot,Etot,sigmaV,v=0.001,fi,tab[250]; char txt[100]; printf("\n==== Indirect detection =======\n"); outP=0; /* 0 for gamma rays 1-positron; 2-antiproton; 3,4,5 neutrinos (electron, muon and tau correspondinly) */ Emin=0.1; /* Energy cut in GeV */ fi=0; /* angle of sight in radians */ sigmaV=calcSpectrum(v,outP,tab,&err); /* Returns sigma*v in cm^3/sec. tab could be substituted in zInterp(z,tab) to get particle distribution in one collision dN/dz, where z=log (E/Mwinp) */ printf("sigma*v=%.2E [cm^3/sec]\n", sigmaV); Mwimp=lopmass_(); spectrInfo(Emin/Mwimp,tab, &Ntot,&Etot); printf("%.2E %s with E > %.2E are generated at one collision\n",Ntot,outNames[outP],Emin); #ifdef SHOWPLOTS /* Spectrum of photons produced in DM annihilation. */ sprintf(txt,"%s: N=%.2e,<E/2M>=%.2f,vsc=%.2e cm^3/sec,M(%s)=%.2e", outNames[outP],Ntot,Etot,sigmaV,wimpName,Mwimp); displaySpectrum(tab, txt ,Emin/Mwimp); #endif if(outP==0) { printf("gamma flux for fi=%.2E[rad] is %.2E[ph/cm^2/s/sr]\n", fi, HaloFactor(fi,rhoQisotermic)*sigmaV*Ntot/Mwimp/Mwimp); } /* Test of energy conservation */ /* { double e[6]; int i; printf("Check of energy conservation:\n"); for(i=0;i<6;i++) { sigmaV=calcSpectrum(v,i,tab,&err); spectrInfo(Emin/Mwimp,tab, NULL,e+i); } printf("1 = %.2f\n",e[0]+2*(e[1]+e[2]+e[3]+e[4]+e[5]) ); } */ } #endif #ifdef RESET_FORMFACTORS { /* The default nucleon form factors can be completely or partially modified by setProtonFF and setNeutronFF. For scalar form factors, one can first call getScalarFF( Mu/Md, Ms/Md, sigmaPiN[MeV], sigma0[MeV], protonFF,neutronFF) or set the new coefficients by directly assigning numerical values. */ { double ffS0P[3]={0.033,0.023,0.26}, ffS0N[3]={0.042,0.018,0.26}, ffV5P[3]={-0.427, 0.842,-0.085}, ffV5N[3]={ 0.842,-0.427,-0.085}; printf("\n=========== Redefinition of form factors =========\n"); getScalarFF(0.553,18.9,55.,35.,ffS0P, ffS0N); printf("protonFF d %E, u %E, s %E\n",ffS0P[0],ffS0P[1],ffS0P[2]); printf("neutronFF d %E, u %E, s %E\n",ffS0N[0],ffS0N[1],ffS0N[2]); /* Use NULL argument if there is no need for reassignment */ setProtonFF(ffS0P,ffV5P, NULL); setNeutronFF(ffS0N,ffV5N,NULL); } /* Option to change parameters of DM velocity distribution */ SetfMaxwell(220.,244.4,600.); /* arg1- defines DM velocity distribution in Galaxy rest frame: ~exp(-v^2/arg1^2)d^3v arg2- Earth velocity with respect to Galaxy arg3- Maximal DM velocity in Sun orbit with respect to Galaxy. All parameters are in [km/s] units. */ /* In case DM has velocity distribution close to delta-function the DM velocity V[km/s] can be defined by */ SetfDelta(350.); /* To reset parameters of Fermi nucleus distribution */ SetFermi(1.23,-0.6,0.52); /* with half-density radius for Fermi distribution: c=arg1*A^(1/3) + arg2 and arg3 is the surface thickness. All parameter in [fm]. */ } #endif #ifdef WIMP_NUCLEON { double pA0[2],pA5[2],nA0[2],nA5[2]; double Nmass=0.939; /*nucleon mass*/ double SCcoeff; double dpA0[2],dnA0[2]; printf("\n==== Calculation of WIMP-nucleons amplitudes =====\n"); nucleonAmplitudes(NULL, dpA0,pA5,dnA0,nA5); printf("====OFF/On======\n"); nucleonAmplitudes(NULL, pA0,pA5,nA0,nA5); dpA0[0]-=pA0[0]; dnA0[0]-=nA0[0]; printf("%s -nucleon amplitudes:\n",wimpName); 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*lopmass_()/(Nmass+ lopmass_()),2.); printf("%s-nucleon cross sections:\n",wimpName); 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]); printf(" twist-2 CS proton %.3E neutron %.3E \n", SCcoeff*dpA0[0]*dpA0[0], SCcoeff*dnA0[0]*dnA0[0]); printf("anti-%s -nucleon amplitudes:\n",wimpName); printf("proton: SI %.3E SD %.3E\n",pA0[1],pA5[1]); printf("neutron: SI %.3E SD %.3E\n",nA0[1],nA5[1]); SCcoeff=4/M_PI*3.8937966E8*pow(Nmass*lopmass_()/(Nmass+ lopmass_()),2.); printf("anti-%s-nucleon cross sections:\n",wimpName); printf(" proton SI %.3E SD %.3E\n",SCcoeff*pA0[1]*pA0[1],3*SCcoeff*pA5[1]*pA5[1]); printf(" neutron SI %.3E SD %.3E\n",SCcoeff*nA0[1]*nA0[1],3*SCcoeff*nA5[1]*nA5[1]); } #endif #ifdef WIMP_NUCLEUS { double dNdE[200]; double nEvents; double rho=0.3; /* DM density GeV/sm^3 */ printf("\n=========== Direct Detection ===============\n"); nEvents=nucleusRecoil(rho,fDvMaxwell,73,Z_Ge,J_Ge73,S00Ge73,S01Ge73,S11Ge73,NULL,dNdE); /* See '../sources/micromegas.h' for description of arguments Instead of Maxwell (DvMaxwell) one can use 'fDvDelta' Delta-function velocity distribution. */ 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(rho,fDvMaxwell,131,Z_Xe,J_Xe131,S00Xe131,S01Xe131,S11Xe131,NULL,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 /* If SD form factors are not known or for spin=0 nucleus one can use */ nEvents=nucleusRecoil0(rho,fDvMaxwell,3,Z_He,J_He3,Sp_He3,Sn_He3,NULL,dNdE); printf("\n 3^He: Total number of events=%.2E /day/kg\n",nEvents); #ifdef SHOWPLOTS displayRecoilPlot(dNdE,"Distribution of recoil energy of 3He",0,50); #endif } #endif #ifdef CROSS_SECTIONS { double Pcm=500; numout* cc; double cosmin=-0.99, cosmax=0.99; double v=0.002; printf("\n====== Calculation of widths and cross sections ====\n"); decay2Info("Z",stdout); decay2Info("H",stdout); /* Helicity[0]=0.45; Helicity[1]=-0.45; 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; procInfo2(cc,l,name,NULL); printf("%3s,%3s -> %3s %3s ",name[0],name[1],name[2],name[3]); cs= cs22(cc,l,Pcm,cosmin,cosmax,&err); if(err) printf("Error\n"); else if(cs==0.) printf("Zero\n"); else printf("%.2E [pb]\n",cs); } } */ printf("\n WIMP annihilation at V_rel=%.2E\n",v); cc=newProcess("",wimpAnnLib()); assignValW("Q",2*lopmass_()); if(cc) { int ntot,l; char * name[4]; double mass[4]; procInfo1(cc,&ntot,NULL,NULL); for(l=1;l<=ntot; l++) { int err; double cs; procInfo2(cc,l,name,mass); if(l==1) { Pcm=mass[0]*v/2; printf("(Pcm=%.2E)\n",Pcm);} printf("%3s,%3s -> %3s %3s ",name[0],name[1],name[2],name[3]); cs= cs22(cc,l,Pcm,-1.,1.,&err); if(err) printf("Error\n"); else if(cs==0.) printf("Zero\n"); else printf("%.2E [pb] ( sigma*v=%.2E [cm^3/sec] ) \n",cs,cs*v*2.9979E-26); } } } #endif return 0; }
int main(int argc,char** argv) { int err; char cdmName[10]; int spin2, charge3,cdim; ForceUG=0; /* to Force Unitary Gauge assign 1 */ if(argc< 2) { printf(" Correct usage: ./main <file with parameters> \n"); printf("Example: ./main data1.par \n"); exit(1); } err=readVar(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=sortOddParticles(cdmName); if(err) { printf("Can't calculate %s\n",cdmName); return 1;} 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 ia a color particle\n"); exit(1);} #ifdef MASSES_INFO { printf("\n=== MASSES OF HIGG AND ODD PARTICLES: ===\n"); printHiggs(stdout); printMasses(stdout,1); } #endif #ifdef OMEGA { int fast=1; double Beps=1.E-5, cut=0.0001; double Omega,Xf; // deltaY=4.4E-13; // to exclude processes with virtual W/Z in DM annihilation VZdecay=0; VWdecay=0; cleanDecayTable(); // to include processes with virtual W/Z also in co-annihilation // VZdecay=2; VWdecay=2; cleanDecayTable(); 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); VZdecay=1; VWdecay=1; cleanDecayTable(); // restore default } #endif #ifdef INDIRECT_DETECTION { int err,i; double Emin=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 Etest=Mcdm/2; printf("\n==== Indirect detection =======\n"); sigmaV=calcSpectrum(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] = %.2E[pb] \n", sigmaV, sigmaV/2.9979E-26); 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); #endif printf("Photon flux = %.2E[cm^2 s GeV]^{-1} for E=%.1f[GeV]\n",SpectdNdE(Etest, FluxA), Etest); } if(SpE) { posiFluxTab(Emin, sigmaV, SpE, FluxE); #ifdef SHOWPLOTS displaySpectrum(FluxE,"positron flux [cm^2 s sr GeV]^{-1}" ,Emin,Mcdm); #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); #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" calcScalarQuarkFF( Mu/Md, Ms/Md, sigmaPiN[MeV], sigmaS[MeV]) calculates and rewrites Scalar form factors */ printf("\n======== RESET_FORMFACTORS ======\n"); printf("protonFF (default) d %.2E, u %.2E, s %.2E\n",ScalarFFPd, ScalarFFPu,ScalarFFPs); printf("neutronFF(default) d %.2E, u %.2E, s %.2E\n",ScalarFFNd, ScalarFFNu,ScalarFFNs); calcScalarQuarkFF(0.46,27.5,34.,42.); // To restore default form factors of version 2 call // calcScalarQuarkFF(0.553,18.9,55.,243.5); printf("protonFF (new) d %.2E, u %.2E, s %.2E\n",ScalarFFPd, ScalarFFPu,ScalarFFPs); printf("neutronFF(new) d %.2E, u %.2E, s %.2E\n",ScalarFFNd, ScalarFFNu,ScalarFFNs); } #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(CDM1,NULL, pA0,pA5,nA0,nA5); printf("CDM[antiCDM]-nucleon micrOMEGAs amplitudes:\n"); printf("proton: SI %.3E [%.3E] SD %.3E [%.3E]\n",pA0[0], pA0[1], pA5[0], pA5[1] ); printf("neutron: SI %.3E [%.3E] SD %.3E [%.3E]\n",nA0[0], nA0[1], nA5[0], nA5[1] ); SCcoeff=4/M_PI*3.8937966E8*pow(Nmass*Mcdm/(Nmass+ Mcdm),2.); printf("CDM[antiCDM]-nucleon cross sections[pb]:\n"); printf(" proton SI %.3E [%.3E] SD %.3E [%.3E]\n", SCcoeff*pA0[0]*pA0[0],SCcoeff*pA0[1]*pA0[1],3*SCcoeff*pA5[0]*pA5[0],3*SCcoeff*pA5[1]*pA5[1]); printf(" neutron SI %.3E [%.3E] SD %.3E [%.3E]\n", SCcoeff*nA0[0]*nA0[0],SCcoeff*nA0[1]*nA0[1],3*SCcoeff*nA5[0]*nA5[0],3*SCcoeff*nA5[1]*nA5[1]); } #endif #ifdef CDM_NUCLEUS { double dNdE[300]; double nEvents; printf("\n======== Direct Detection ========\n"); nEvents=nucleusRecoil(Maxwell,73,Z_Ge,J_Ge73,SxxGe73,NULL,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,SxxXe131,NULL,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,SxxNa23,NULL,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,SxxI127,NULL,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 NEUTRINO { double nu[NZ], nu_bar[NZ],mu[NZ]; double Ntot; int forSun=1; double Emin=0.01; printf("\n===============Neutrino Telescope======= for "); if(forSun) printf("Sun\n"); else printf("Earth\n"); err=neutrinoFlux(Maxwell,forSun, nu,nu_bar); #ifdef SHOWPLOTS displaySpectrum(nu,"nu flux from Sun [1/Year/km^2/GeV]",Emin,Mcdm); displaySpectrum(nu_bar,"nu-bar from Sun [1/Year/km^2/GeV]",Emin,Mcdm); #endif { double Ntot; double Emin=10; //GeV spectrInfo(Emin/Mcdm,nu, &Ntot,NULL); printf(" E>%.1E GeV neutrino flux %.3E [1/Year/km^2] \n",Emin,Ntot); spectrInfo(Emin/Mcdm,nu_bar, &Ntot,NULL); printf(" E>%.1E GeV anti-neutrino flux %.3E [1/Year/km^2]\n",Emin,Ntot); } /* Upward events */ muonUpward(nu,nu_bar, mu); #ifdef SHOWPLOTS displaySpectrum(mu,"Upward muons[1/Year/km^2/GeV]",1,Mcdm/2); #endif { double Ntot; double Emin=1; //GeV spectrInfo(Emin/Mcdm,mu, &Ntot,NULL); printf(" E>%.1E GeV Upward muon flux %.3E [1/Year/km^2]\n",Emin,Ntot); } /* Contained events */ muonContained(nu,nu_bar,1., mu); #ifdef SHOWPLOTS displaySpectrum(mu,"Contained muons[1/Year/km^3/GeV]",Emin,Mcdm); #endif { double Ntot; double Emin=1; //GeV spectrInfo(Emin/Mcdm,mu, &Ntot,NULL); printf(" E>%.1E GeV Contained muon flux %.3E [1/Year/km^3]\n",Emin,Ntot); } } #endif #ifdef DECAYS { txtList L; double width,br; char * pname; printf("\n================= Decays ==============\n"); pname = "h"; width=pWidth(pname,&L); printf("\n%s : total width=%.3E \n and Branchings:\n",pname,width); printTxtList(L,stdout); pname = "~L"; width=pWidth(pname,&L); printf("\n%s : total width=%.3E \n and Branchings:\n",pname,width); printTxtList(L,stdout); } #endif #ifdef CROSS_SECTIONS { double v0=0.001, Pcm=Mcdm*v0/2,cs; int err; numout*cc; cc=newProcess("~n,~N->W+,W-"); passParameters(cc); cs=v0*cs22(cc,1,0.001*Mcdm/2,-1.,1.,&err); printf("cs=%e\n",cs); } #endif killPlots(); return 0; }
int main(int argc,char** argv) { int err; char cdmName[10]; int spin2, charge3,cdim; ForceUG=0; /* to Force Unitary Gauge assign 1 */ // sysTimeLim=1000; /* if you would like to work with superIso setenv("superIso","./superiso_v3.1",1); */ #ifdef SUGRA { double m0,mhf,a0,tb; double gMG1, gMG2, gMG3, gAl, gAt, gAb, sgn, gMHu, gMHd, gMl2, gMl3, gMr2, gMr3, gMq2, gMq3, gMu2, gMu3, gMd2, gMd3; printf("\n========= mSUGRA scenario =====\n"); PRINTRGE(RGE); if(argc<5) { printf(" This program needs 4 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"); printf(" Auxiliary parameters are:\n" " sgn +/-1, sign of Higgsino mass term (default 1)\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 70 250 -300 10\n"); */ printf("Example: ./main 120 500 -350 10 1 173.1 \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); if(argc>5)sscanf(argv[5],"%lf",&sgn); else sgn=1; if(argc>6){ sscanf(argv[6],"%lf",&Mtp); assignValW("Mtp",Mtp); } if(argc>7){ sscanf(argv[7],"%lf",&MbMb); assignValW("MbMb",MbMb); } if(argc>8){ sscanf(argv[8],"%lf",&alfSMZ); assignValW("alfSMZ",alfSMZ);} } /*==== simulation of mSUGRA =====*/ gMG1=mhf, gMG2=mhf,gMG3=mhf; gAl=a0, gAt=a0, gAb=a0; gMHu=m0, gMHd=m0; gMl2=m0, gMl3=m0, gMr2=m0, gMr3=m0; gMq2=m0, gMq3=m0, gMu2=m0, gMd2=m0, gMu3=m0, gMd3=m0; err= SUGRAMODEL(RGE) (tb, gMG1, gMG2, gMG3, gAl, gAt, gAb, sgn, gMHu, gMHd, gMl2, gMl3, gMr2, gMr3, gMq2, gMq3, gMu2, gMu3, gMd2, gMd3); } #elif defined(SUGRANUH) { double m0,mhf,a0,tb; double gMG1, gMG2, gMG3, gAl, gAt, gAb, gMl2, gMl3, gMr2, gMr3, gMq2, gMq3, gMu2, gMu3, gMd2, gMd3,mu,MA; printf("\n========= mSUGRA non-universal Higgs scenario =====\n"); PRINTRGE(RGE); 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" " mu mu(EWSB)\n" " MA mass of pseudoscalar Higgs\n"); printf(" Auxiliary parameters are:\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 70 250 -300 10\n"); */ printf("Example: ./main 120 500 -350 10 680 760 \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",&mu); sscanf(argv[6],"%lf",&MA); if(argc>7){ sscanf(argv[7],"%lf",&Mtp); assignValW("Mtp",Mtp); } if(argc>8){ sscanf(argv[8],"%lf",&MbMb); assignValW("MbMb",MbMb); } if(argc>9){ sscanf(argv[9],"%lf",&alfSMZ); assignValW("alfSMZ",alfSMZ);} } /*==== simulation of mSUGRA =====*/ gMG1=mhf, gMG2=mhf,gMG3=mhf; gAl=a0, gAt=a0, gAb=a0; gMl2=m0, gMl3=m0, gMr2=m0, gMr3=m0; gMq2=m0, gMq3=m0, gMu2=m0, gMd2=m0, gMu3=m0, gMd3=m0; err= SUGRANUHMODEL(RGE) (tb,gMG1,gMG2,gMG3,gAl,gAt,gAb,gMl2,gMl3,gMr2,gMr3,gMq2,gMq3,gMu2,gMu3,gMd2,gMd3,mu,MA); } #elif defined(AMSB) { double m0,m32,sgn,tb; printf("\n========= AMSB scenario =====\n"); PRINTRGE(RGE); if(argc<4) { printf(" This program needs 3 parameters:\n" " m0 common scalar mass at GUT scale\n" " m3/2 gravitino mass\n" " tb tan(beta) \n"); printf(" Auxiliary parameters are:\n" " sgn +/-1, sign of Higgsino mass term (default 1)\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 450 60000 10\n"); exit(1); } else { double Mtp,MbMb,alfSMZ; sscanf(argv[1],"%lf",&m0); sscanf(argv[2],"%lf",&m32); sscanf(argv[3],"%lf",&tb); if(argc>4)sscanf(argv[4],"%lf",&sgn); else sgn=1; if(argc>5){ sscanf(argv[5],"%lf",&Mtp); assignValW("Mtp",Mtp); } if(argc>6){ sscanf(argv[6],"%lf",&MbMb); assignValW("MbMb",MbMb); } if(argc>7){ sscanf(argv[7],"%lf",&alfSMZ); assignValW("alfSMZ",alfSMZ);} } err= AMSBMODEL(RGE)(m0,m32,tb,sgn); } #elif defined(EWSB) { printf("\n========= EWSB scale input =========\n"); PRINTRGE(RGE); if(argc <2) { printf("The program needs one argument:the name of file with MSSM parameters.\n" "Example: ./main mssm1.par \n"); exit(1); } printf("Initial file \"%s\"\n",argv[1]); err=readVarMSSM(argv[1]); if(err==-1) { printf("Can not open the file\n"); exit(2);} else if(err>0) { printf("Wrong file contents at line %d\n",err);exit(3);} err=EWSBMODEL(RGE)(); } #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 suspect2_lha.out \n"); exit(1); } printf("Initial file \"%s\"\n",argv[1]); err=lesHinput(argv[1]); if(err) exit(2); } #endif #ifdef OBTAIN_LSP if(err==-1) { printf("Can not open the file\n"); exit(2);} else if(err>0) { printf("Wrong file contents at line %d\n",err);exit(3);} { int nw; printf("Warnings from spectrum calculator:\n"); nw=slhaWarnings(stdout); if(nw==0) printf(" .....none\n"); } if(err) exit(1); err=sortOddParticles(cdmName); if(err) { printf("Can't calculate %s\n",cdmName); return 1;} qNumbers(cdmName,&spin2, &charge3, &cdim); printf("\nDark matter candidate is '%s' with spin=%d/2 mass=%.2E\n", cdmName, spin2, Mcdm); 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); #endif #ifdef OBTAIN_CROSS_SECTION { int err,i; double Emin=1,SMmev=320;/*Energy cut in GeV and solar potential in MV*/ double 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[NZ],SpNm[NZ],SpNl[NZ]; // double * SpNe=NULL,*SpNm=NULL,*SpNl=NULL; double Etest=Mcdm/2; /* default DarkSUSY parameters */ /* K_dif=0.036; L_dif=4; Delta_dif=0.6; Vc_dif=10; Rdisk=30; SMmev=320; */ 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); //sigma_v = Sigma_v(sigmaV); if(SpA) { double fi=0.,dfi=M_PI/180.; /* angle of sight and 1/2 of cone angle in [rad] */ /* dfi corresponds to solid angle 1.E-3sr */ printf("Photon flux for angle of sight f=%.2f[rad]\n" "and spherical region described by cone with angle %.4f[rad]\n",fi,2*dfi); gammaFluxTab(fi,dfi, sigmaV, SpA, FluxA); #ifdef SHOWPLOTS sprintf(txt,"Photon flux for angle of sight %.2f[rad] and 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, FluxA), Etest); #ifdef LoopGAMMA if(loopGamma(&vcs_gz,&vcs_gg)==0) { printf("Gamma ray lines:\n"); printf("E=%.2E[GeV] vcs(Z,A)= %.2E[cm^3/s], flux=%.2E[cm^2 s]^{-1}\n",Mcdm-91.19*91.19/4/Mcdm,vcs_gz, gammaFlux(fi,dfi,vcs_gz)); printf("E=%.2E[GeV] vcs(A,A)= %.2E[cm^3/s], flux=%.2E[cm^2 s]^{-1}\n",Mcdm,vcs_gg, 2*gammaFlux(fi,dfi,vcs_gg)); } #endif } if(SpE) { posiFluxTab(Emin, sigmaV, SpE, FluxE); if(SMmev>0) solarModulation(SMmev,0.0005,FluxE,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); if(SMmev>0) solarModulation(SMmev,1,FluxP,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 CALCULATION_OF_MU { #ifdef TAKE_VALUES_FROM_LSP_OF_MICROMEGAS { mdm = mdm_calc(Mcdm); } #endif double z = pow(10,5); printf("***************** Values used for energy calculation ********************\n"); printf("H0 - %.2e \n", H0); printf("zeq - %.2e \n", zeq); printf("Omega_m - %.2e \n", Omega_m); printf("Omega_r - %.2e \n", Omega_r); printf("Omega_Lambda - %.2e \n", Omega_Lambda); printf("Rho_cr - %.2e \n", Rho_cr); printf("mdm - %.2e \n", mdm); printf("The H_z - is %.2e \n",H(z)); printf("The ndm_z is %.2e \n",ndm_z(z)); printf("The sigma_v is %.2e \n",sigma_v); printf("The tau is %.2e \n",tau(z)); printf("*************************************************************************\n"); double value = dQdz(z) * ( exp(-tau(z))/ H(z)); printf("For redshift %.2e ", z); printf("the energy injection is %.2e \n",value); double value_paper = dummy_energy_injection(z)* ( exp (-tau(z))/ H(z)); printf("While the calculation as in the paper is %.2e \n", value_paper); double z_min = 5 * pow(10,4); double z_i = 6 * pow(10,6); int subdivisions = 1000; value = mu_0(z_i, z_min, subdivisions); printf("Mu at our time is %.2e \n", value); } #endif return 0; }