void ProcessPanel::doConnections() { ActionPanel::doConnections(); for (int i = 0; i != m_panels.size(); ++i) if (m_panels[i] != 0) connect(m_panels[i], SIGNAL(newProcess(SharedProcess)), this, SIGNAL(newProcess(SharedProcess))); }
static void initBaseCPUParams( DerivO3CPUParams& cpu, const Params& sstParams, System* system, SST::Component *comp ) { cpu.dtb = newTLB<ISA::TLB>( cpu.name + ".dtb", sstParams.find_prefix_params("dtb.") ); cpu.itb = newTLB<ISA::TLB>( cpu.name + ".itb", sstParams.find_prefix_params("itb.") ); cpu.checker = NULL; INIT_INT( cpu, sstParams, max_insts_all_threads ); INIT_INT( cpu, sstParams, max_insts_any_thread ); INIT_INT( cpu, sstParams, max_loads_all_threads ); INIT_INT( cpu, sstParams, max_loads_any_thread ); cpu.system = system; INIT_CLOCK( cpu, sstParams, clock ); INIT_INT( cpu, sstParams, function_trace_start ); INIT_INT( cpu, sstParams, phase ); INIT_INT( cpu, sstParams, progress_interval ); cpu.tracer = newTracer( cpu.name + ".tracer" ); INIT_INT( cpu, sstParams, defer_registration ); INIT_INT( cpu, sstParams, do_checkpoint_insts ); INIT_INT( cpu, sstParams, do_statistics_insts ); INIT_INT( cpu, sstParams, function_trace ); INIT_INT( cpu, sstParams, cpu_id ); cpu.workload.resize(1); cpu.numThreads = 1; std::string processName = sstParams.find_string( "process" ); if ( ! processName.empty() ) { SST::M5::M5* m5comp = static_cast<SST::M5::M5*>(comp); printf("process `%s`\n", processName.c_str()); objectMap_t::iterator it = m5comp->objectMap().find( processName ); if ( it == m5comp->objectMap().end() ) { // this is a hack m5comp->objectMap()[processName] = new Gem5Object; m5comp->objectMap()[processName]->memObject = newProcess( cpu.name + ".workload", sstParams.find_prefix_params( "process." ), system, comp ); } cpu.workload[0] = static_cast<Process*>( m5comp->objectMap()[processName]->memObject ); } else { printf("default process\n"); cpu.workload[0] = newProcess( cpu.name + ".workload", sstParams.find_prefix_params( "process." ), system, comp ); } }
// Inicializa los writers, recibe cantidad de writers, tiempo de escritura, // tiempo de descanso, la llave del segmento al que va a escribir y el tipo // de proceso void initProcesos(int cantidadProcesos,int tiempoEscritura,int tiempoDescanso,int llave,int tipo){ int i,segmentoDatosID; char *segmentoDatos; // Monitor switch(tipo){ case TIPO_WRITER: segmentoDatosID = getMemID(LLAVE_SEGMENTO_WRITERS,cantidadProcesos*TAMANIO_LINEAS); break; case TIPO_READER: segmentoDatosID = getMemID(LLAVE_SEGMENTO_READERS,cantidadProcesos*TAMANIO_LINEAS); break; case TIPO_READER_EGOISTA: segmentoDatosID = getMemID(LLAVE_SEGMENTO_READERS_EGOISTAS,cantidadProcesos*TAMANIO_LINEAS); break; default: break; } segmentoDatos = getMem(segmentoDatosID); crearMemoria(llave,cantidadProcesos); pthread_t processThread[cantidadProcesos]; for(i=1;i<=cantidadProcesos;i++){ proceso *nProcess = newProcess(i,tiempoEscritura,tiempoDescanso,tipo,segmentoDatos); pthread_create(&processThread[i-1], NULL, ejecutarProceso, nProcess); } for(i=0;i<cantidadProcesos;i++){ pthread_join(processThread[i], NULL); } }
void test_1_creates_new_process(){ Process *process = newProcess("Process1",8,3); ASSERT(process->priority == 3); ASSERT(process->time == 8); ASSERT(strcmp(process->name,"Process1") == 0); ASSERT(process->nextProcess == NULL); free(process); };
void test_2_creates_another_process_with_highest_priority_more_time_span(){ Process *process = newProcess("Process2",10,1); ASSERT(process->priority == 1); ASSERT(process->time == 10); ASSERT(strcmp(process->name,"Process2") == 0); ASSERT(process->nextProcess == NULL); free(process); };
void main( ){ int opt= 0; int p; process *proc; list *l; l= (list * ) malloc (sizeof(list)); make_list(l); printf("\n\n\n"); printf("\tTrabalho ED1 - Marcos Oleiro - Listas Simplesmente Encadeadas\n"); printf("\n\n\n"); while (opt != 3) { printf("1 - Adcionar Processos.\n"); printf("2 - Listar Processos.\n"); printf("3 - Sair.\n\n\n"); printf("Digite sua opcao: "); scanf ("%d", &opt); printf("\n"); switch (opt) { case 1: // process *proc= NULL ; printf("\n"); proc = newProcess(); printf("\n\n"); add_process(l,proc); printf("ID: %d, Prioridade: %d, Horario: %d:%d:%d\n",proc->id, proc->priority, proc->h->hour,proc->h->minute,proc->h->second); proc = NULL; printf("\n\n"); break; case 2: // printf("Opção 2.\n"); // sort_priority(l); sort_list(l); print_list(l); break; case 3: // printf("Opção 3.\n"); break; } } }
bool TransmissionClient::addTorrent(QString filePath) { if (command.isNull()) { return false; } if (!process || process->state() == QProcess::Running) { newProcess(); } process->start(command, QStringList() << filePath); process->waitForStarted(); //process.waitForFinished(); return true; }
process * readFile( FILE * fp ) { char * inStr = malloc(sizeof(char)*100); char * tempName; int tempSize; process * newPr = NULL; process * newList = NULL; while( !feof(fp) ) { fgets(inStr, 100, fp ); tempName = strtok( inStr, " " ); tempSize = atoi(strtok( NULL, " ")); newPr = newProcess( tempName, tempSize ); newList = addToQueue( newList, newPr ); } return newList; }
void loadMemory( string name, ::PhysicalMemory* memory, const SST::Params& params ) { int num = 0; DBGC(1,"%s\n",name.c_str()); while ( 1 ) { Addr start,end; std::stringstream numSS; std::string tmp; numSS << num; tmp = numSS.str() + ".process.executable"; std::string exe = params.find_string( tmp ); if ( exe.size() == 0 ) { break; } DBGC(1,"%s%s %s\n",name.c_str(), tmp.c_str(), exe.c_str() ); tmp = numSS.str() + ".physicalMemory.start"; start = params.find_integer( tmp ); DBGC(1,"%s%s %#lx\n", name.c_str(), tmp.c_str(), start); tmp = numSS.str() + ".physicalMemory.end"; end = params.find_integer( tmp, 0 ); DBGC(1,"%s%s %#lx\n", name.c_str(), tmp.c_str(), end); tmp = name + numSS.str() + ".dummySystem"; DummySystem* system = create_DummySystem( tmp, memory, Enums::timing, start, end); SST::Params mergedParams = mergeParams( params.find_prefix_params( numSS.str() + ".process."), params.find_prefix_params( "process." ) ); tmp = name + numSS.str(); Process* process = newProcess( tmp, mergedParams, system ); process->assignThreadContext(num); // NOTE: system and process are not needed after // startup, how do we free them? ++num; } }
int _tmain(int argc, _TCHAR* argv[]) { Manager newProcess(5); ProcessesHistory *history; for (int i = 0; i < 5; i++) { int stepsNumber = rand() % 15, processTime= rand() % 5; newProcess.addProcess(stepsNumber, processTime); } int counter=0; while (newProcess.getEnd() == false) { newProcess.makeHistory(); newProcess.processExecution(); counter++; } history = newProcess.getHistory(); for (int i = 0; i < 5; i++) cout << history->showHistory(i, newProcess.getExecutions()) << endl; cout << endl << endl; delete history; Manager newProcess2(10); for (int i = 0; i < 10; i++) { int stepsNumber = rand() % 10, processTime = rand() % 5; newProcess2.addProcess(stepsNumber, processTime); } counter = 0; while (newProcess2.getEnd() == false) { newProcess2.makeHistory(); newProcess2.processExecution(); counter++; } history = newProcess.getHistory(); for (int i = 0; i < 10; i++) cout << history->showHistory(i, newProcess2.getExecutions()) << endl; system("pause"); return 0; }
/** * system_launchApplication * Launches target application using system commands. * * @param c - Application to launch. * @returns -1 on error. */ int system_launchApplication(char* c, struct processes *processList) { printf("Launching VLC\n"); //strcpy(command, "open -a VLC \"/Users/oskarmendel/Music/Red Hot Chilli Peppers - Greatest Hits [Bubanee]\" --args --intf macosx"); char *const parmList[] = {"/Applications/VLC.app/Contents/MacOS/VLC", "/Users/oskarmendel/Music/Red Hot Chilli Peppers - Greatest Hits [Bubanee]", NULL}; pid_t a = newProcess(); if (a == -1) { //Error printf("Error occurr\n"); } if (a == 0) { //Child process execv("/Applications/VLC.app/Contents/MacOS/VLC", parmList); int errcode = errno; exit(errcode); // Should not get here. } else { // Parent pushProcess(&processList, "VLC", a); showActiveProcesses(processList); //Trying to set window to fullscreen: printf("Setting fullscreen: %i\n", setFullscreen(a)); // printf("After systemcall\n"); // int r; // waitpid(a, &r, 0); //if (r == 0) { //printf("Child application terminated successfully\n"); //} else { //printf("Child application terminated with error\n"); //} } 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 */ #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 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,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; }
//------------------------------------------------------------------------- void BackgroundProcesses::addProcess (QString const& name, int max) { emit newProcess (name, max); }
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; }
Job* Parser::parseLine (void) { job = new Job(); currState = PARSCMD; int i, length, curr; int rflag; // Limpa o buffer de entrada para evitar loop infinito strcpy(line, "\0"); std::cin.clear(); std::cin.getline (line, MAX_LENGTH); i = 0; while (i < length && line[i] == ' ') i++; length = strlen(line+i); // Checa se a linha nao estava em branco if (length == 0) { job->addFlag (shooSH_NOP); return job; } else { while (line[--length] == ' '); // pega os espacos do fim length++; if (strcmp (line+i, "exit") == 0) { //builtin job->addFlag (shooSH_EXIT); return job; } } if ((line+i)[length-1] == '&') job->setCommand (std::string (line+i, length-1)); else job->setCommand (std::string (line+i, length)); while (currState != PARSSUCCESS && currState != PARSFAIL) { if (currState == PARSCMD) { newProcess(); newWord(); rflag = 0; // pega espacos while (i < length && line[i] == ' ') i++; // esperava um comando, mas nao veio nada (usado para pipe) if (i == length) { currState = PARSFAIL; } else { // le ate encontrar um espaco while (i < length && line[i] != ' ') cmdList[cmdListSize][currChar++] = line[i++]; currState = PARSNEXT; } endWord(); } else if (currState == PARSNEXT) { // le espaco while (i < length && line[i] == ' ') i++; if (i == length) { //chegou ao fim da linha currState = PARSSUCCESS; endProcess(); } else { // procura token switch (line[i]) { case '<': i++; currState = PARSRIN; break; case '>': i++; currState = PARSROUT; break; case '2': //pode ser argumento ou redirecionamento de erro i++; currState = PARSTWO; break; case '|': i++; job->addFlag (shooSH_PIPE); endProcess(); currState = PARSCMD; break; case '&': i++; job->addFlag (shooSH_BG); endProcess(); currState = PARSSUCCESS; break; default: currState = PARSPARAM; } } } else if (currState == PARSPARAM) { newWord(); while (i < length && line[i] != ' ' && line[i] != '\"' && line[i] != '\'') cmdList[cmdListSize][currChar++] = line[i++]; if (line[i] == '\"') { i++; while (i < length && line[i] != '\"') cmdList[cmdListSize][currChar++] = line[i++]; if (i == length) { endWord(); currState = PARSFAIL; } else { i++; endWord(); currState = PARSNEXT; } } else if (line[i] == '\'') { i++; while (i < length && line[i] != '\'') cmdList[cmdListSize][currChar++] = line[i++]; if (i == length) { endWord(); currState = PARSFAIL; } else { i++; endWord(); currState = PARSNEXT; } } else { endWord(); currState = PARSNEXT; } } else if (currState == PARSTWO) { if (line[i] == '>') { i++; endWord(); currState = PARSRERR; } else { i--; currState = PARSPARAM; } endWord(); } else if (currState == PARSRERR) { if (line[i] == '>') { // append i++; rflag = REDERRA; } else { // trunc rflag = REDERRT; } currState = PARSFILENAME; } else if (currState == PARSRIN) { rflag = REDIN; currState = PARSFILENAME; } else if (currState == PARSROUT) { if (line[i] == '>') { // append i++; rflag = REDOUTA; } else { // trunc rflag = REDOUTT; } currState = PARSFILENAME; } else if (currState == PARSFILENAME) { while (i < length && line[i] == ' ') i++; if (i == length) currState = PARSFAIL; else { curr = 0; if (line[i] == '"') { // le nomes como "file name" i++; while (i < length && line[i] != '"') filename[curr++] = line[i++]; if (i == length) currState = PARSFAIL; else i++; } else if (line[i] == '\'') { // le nomes do tipo 'file name' i++; while (i < length && line[i] != '\'') filename[curr++] = line[i++]; if (i == length) currState = PARSFAIL; else i++; } else { // le nomes do tipo filename while (i < length && line[i] != ' ') filename[curr++] = line[i++]; } filename[curr] = '\0'; job->setProcessFile (filename, rflag); currState = PARSNEXT; } } } if (currState == PARSFAIL) job->addFlag (shooSH_FAIL); return job; }
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; 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 inputPipe; char buffer[BUFFER_LEN]; char mktemp_filename[PATH_MAX]; char mktemp_dir[PATH_MAX]; int ret; int terminalPid; TerminalList * termlist = lst_new(); pthread_t threadMonitor; char *args[N_ARGS]; if (signal(SIGINT, handleSIGINT)) { fprintf(stderr, "Could not set sigint handler!\n"); exit(EXIT_FAILURE); } if (pthread_mutex_init(&mutexRunningProcesses, NULL)) { fprintf(stderr, "Could not create runningProcesses mutex\n"); exit(EXIT_FAILURE); } if (pthread_cond_init(&condRunningProcesses, NULL)) { fprintf(stderr, "Could not create runningProcesses cond\n"); exit(EXIT_FAILURE); } if (pthread_cond_init(&condFreeSlots, NULL)) { fprintf(stderr, "Could not create FreeSlots cond\n"); exit(EXIT_FAILURE); } strcpy(mktemp_dir, MKTEMP_TEMPLATE); TESTTRUE(mkdtemp(mktemp_dir)!=NULL, "Erro na criação do diretorio temporário (" _AT_ ")\n"); strncpy(mktemp_filename, mktemp_dir, PATH_MAX); strncpy(mktemp_filename+strlen(mktemp_filename), "/" INPUT_FILE, PATH_MAX-strlen(mktemp_filename)); fprintf(stdin, "Ficheiro de input: '%s'\n", mktemp_filename); if (mkfifo(mktemp_filename, 0660) <0) { fprintf(stderr, "Could not create fifo %s\n", mktemp_filename); exit(EXIT_FAILURE); } printf("A abrir o pipe %s para leitura...\n", mktemp_filename); if ((inputPipe = open(mktemp_filename, O_RDONLY)) < 0) { fprintf(stderr, "Could not create fifo " INPUT_FILE "\n"); exit(EXIT_FAILURE); } printf("A abrir o pipe %s para escrita...\n", mktemp_filename); if ((outPipe = open(mktemp_filename, O_WRONLY|O_NONBLOCK)) < 0) { fprintf(stderr, "Erro ao abrir o ficheiro de output" INPUT_FILE "\n"); exit(EXIT_FAILURE); } initProcessList(); if(pthread_create(&threadMonitor, 0,processMonitor, NULL)!= 0) { printf("Erro na criação da tarefa\n"); exit(EXIT_FAILURE); } while(1) { if (exitCalled) break; if (readFromPipe(inputPipe, buffer, &terminalPid, termlist)!=0) continue; printf("Comando: %s\n", buffer); ret = readLineArguments(args, N_ARGS, buffer, BUFFER_LEN); if (!ret) continue; processesWaitingToRun++; newProcess(args, terminalPid); } //Mata todos os processos de terminal lst_destroy(termlist); C_SIGNAL(&condRunningProcesses); pthread_join(threadMonitor, NULL); //The following function is called after all threads have joined, therefore there aren't used any mutexes exitParShell(); endProcessList(); pthread_mutex_destroy(&mutexRunningProcesses); pthread_cond_destroy(&condRunningProcesses); pthread_cond_destroy(&condFreeSlots); close(inputPipe); //aqui nao faz sentido testar o return destas funcoes close(outPipe); //aqui nao faz sentido testar o return destas funcoes unlink(INPUT_FILE); //aqui nao faz sentido testar o return destas funcoes return EXIT_SUCCESS; }