void run(Int_t nEvents = 100, Float_t ekin = 0.01){ //---------------------Files----------------------------------------------- TString outFile; outFile.Form("run%.4f.root", ekin); TString parFile; parFile.Form("par%.4f.root", ekin); // ------------------------------------------------------------------------ // ----- Timer -------------------------------------------------------- TStopwatch timer; timer.Start(); // ------------------------------------------------------------------------ // ----- Create simulation run ---------------------------------------- FairRunSim* run = new FairRunSim(); /** Select transport engine * TGeant3 * TGeant4 **/ run->SetName("TGeant4"); // Transport engine run->SetOutputFile(outFile.Data()); // Output file // ------------------------------------------------------------------------ // ----- Runtime database --------------------------------------------- FairRuntimeDb* rtdb = run->GetRuntimeDb(); // ------------------------------------------------------------------------ // ----- Create media ------------------------------------------------- run->SetMaterials("media.geo"); // Materials // ------------------------------------------------------------------------ // ----- Create detectors ---------------------------------------------- FairModule* cave= new ERCave("CAVE"); cave->SetGeometryFileName("cave.geo"); run->AddModule(cave); // ER NeuRad definition /* Select verbosity level * 1 - only standard logs * 2 - Print points after each event * 3 - - GEANT Step information */ Int_t verbose = 1; ERND* nd= new ERND("ERND", kTRUE,verbose); nd->SetGeometryFileName("ND1ch.geo.root"); run->AddModule(nd); // ------------------------------------------------------------------------ // ----- Create PrimaryGenerator -------------------------------------- FairPrimaryGenerator* primGen = new FairPrimaryGenerator(); // Int_t pdgId = 2112; // neutron beam Int_t pdgId = 11; // proton beam Double32_t theta1 = 0.; // polar angle distribution Double32_t theta2 = 0.; Double32_t kin_energy = ekin; //GeV Double_t mass = TDatabasePDG::Instance()->GetParticle(pdgId)->Mass(); Double32_t momentum = TMath::Sqrt(kin_energy*kin_energy + 2.*kin_energy*mass); //GeV FairBoxGenerator* boxGen = new FairBoxGenerator(pdgId, 1); boxGen->SetThetaRange(theta1, theta2); boxGen->SetPRange(momentum, momentum); boxGen->SetPhiRange(0., 180.); boxGen->SetBoxXYZ(0.,0,0.0,0.0,-10.); boxGen->SetCosTheta(); primGen->AddGenerator(boxGen); run->SetGenerator(primGen); // ------------------------------------------------------------------------ // ------------------------ND digitizer ----------------------------------- ERNDDigitizer* digitizer = new ERNDDigitizer(1); digitizer->SetEdepError(0.0,0.0,0.0); digitizer->SetLYError(0.0,0.0,0.0); digitizer->SetTimeError(0.0); digitizer->SetQuenchThreshold(0.005); digitizer->SetLYThreshold(0.004); digitizer->SetProbabilityB(0.1); digitizer->SetProbabilityC(0.3); run->AddTask(digitizer); // ------------------------------------------------------------------------ //-------Set visualisation flag to true------------------------------------ run->SetStoreTraj(kTRUE); //-------Set LOG verbosity ----------------------------------------------- FairLogger::GetLogger()->SetLogScreenLevel("DEBUG"); // ----- Initialize simulation run ------------------------------------ run->Init(); Int_t nSteps = -15000; //gMC->SetMaxNStep(nSteps); // ----- Runtime database --------------------------------------------- Bool_t kParameterMerged = kTRUE; FairParRootFileIo* parOut = new FairParRootFileIo(kParameterMerged); parOut->open(parFile.Data()); rtdb->setOutput(parOut); rtdb->saveOutput(); rtdb->print(); // --------------------------------------------------------- // ----- Run simulation ------------------------------------------------ run->Run(nEvents); // ----- Finish ------------------------------------------------------- //neuRad->WriteHistos(); timer.Stop(); Double_t rtime = timer.RealTime(); Double_t ctime = timer.CpuTime(); cout << endl << endl; cout << "Macro finished succesfully." << endl; cout << "Output file is sim.root" << endl; cout << "Parameter file is par.root" << endl; cout << "Real time " << rtime << " s, CPU time " << ctime << "s" << endl << endl; }