run.C
1 |
|
---|---|
2 |
void run(Int_t nEvents = 100, Float_t ekin = 0.01){ |
3 |
//---------------------Files-----------------------------------------------
|
4 |
TString outFile; |
5 |
outFile.Form("run%.4f.root", ekin);
|
6 |
TString parFile; |
7 |
parFile.Form("par%.4f.root", ekin);
|
8 |
// ------------------------------------------------------------------------
|
9 |
|
10 |
// ----- Timer --------------------------------------------------------
|
11 |
TStopwatch timer; |
12 |
timer.Start(); |
13 |
// ------------------------------------------------------------------------
|
14 |
|
15 |
// ----- Create simulation run ----------------------------------------
|
16 |
FairRunSim* run = new FairRunSim();
|
17 |
/** Select transport engine
|
18 |
* TGeant3
|
19 |
* TGeant4
|
20 |
**/
|
21 |
run->SetName("TGeant4"); // Transport engine |
22 |
run->SetOutputFile(outFile.Data()); // Output file
|
23 |
// ------------------------------------------------------------------------
|
24 |
|
25 |
// ----- Runtime database ---------------------------------------------
|
26 |
FairRuntimeDb* rtdb = run->GetRuntimeDb(); |
27 |
// ------------------------------------------------------------------------
|
28 |
|
29 |
// ----- Create media -------------------------------------------------
|
30 |
run->SetMaterials("media.geo"); // Materials |
31 |
// ------------------------------------------------------------------------
|
32 |
|
33 |
// ----- Create detectors ----------------------------------------------
|
34 |
FairModule* cave= new ERCave("CAVE"); |
35 |
cave->SetGeometryFileName("cave.geo");
|
36 |
run->AddModule(cave); |
37 |
|
38 |
// ER NeuRad definition
|
39 |
/* Select verbosity level
|
40 |
* 1 - only standard logs
|
41 |
* 2 - Print points after each event
|
42 |
* 3 - - GEANT Step information
|
43 |
*/
|
44 |
Int_t verbose = 1;
|
45 |
ERND* nd= new ERND("ERND", kTRUE,verbose); |
46 |
nd->SetGeometryFileName("ND1ch.geo.root");
|
47 |
run->AddModule(nd); |
48 |
// ------------------------------------------------------------------------
|
49 |
|
50 |
// ----- Create PrimaryGenerator --------------------------------------
|
51 |
FairPrimaryGenerator* primGen = new FairPrimaryGenerator();
|
52 |
// Int_t pdgId = 2112; // neutron beam
|
53 |
Int_t pdgId = 11; // proton beam |
54 |
Double32_t theta1 = 0.; // polar angle distribution |
55 |
Double32_t theta2 = 0.;
|
56 |
Double32_t kin_energy = ekin; //GeV
|
57 |
Double_t mass = TDatabasePDG::Instance()->GetParticle(pdgId)->Mass(); |
58 |
Double32_t momentum = TMath::Sqrt(kin_energy*kin_energy + 2.*kin_energy*mass); //GeV |
59 |
FairBoxGenerator* boxGen = new FairBoxGenerator(pdgId, 1); |
60 |
boxGen->SetThetaRange(theta1, theta2); |
61 |
boxGen->SetPRange(momentum, momentum); |
62 |
boxGen->SetPhiRange(0., 180.); |
63 |
boxGen->SetBoxXYZ(0.,0,0.0,0.0,-10.); |
64 |
boxGen->SetCosTheta(); |
65 |
|
66 |
primGen->AddGenerator(boxGen); |
67 |
run->SetGenerator(primGen); |
68 |
// ------------------------------------------------------------------------
|
69 |
|
70 |
// ------------------------ND digitizer -----------------------------------
|
71 |
ERNDDigitizer* digitizer = new ERNDDigitizer(1); |
72 |
digitizer->SetEdepError(0.0,0.0,0.0); |
73 |
digitizer->SetLYError(0.0,0.0,0.0); |
74 |
digitizer->SetTimeError(0.0); |
75 |
digitizer->SetQuenchThreshold(0.005); |
76 |
digitizer->SetLYThreshold(0.004); |
77 |
digitizer->SetProbabilityB(0.1); |
78 |
digitizer->SetProbabilityC(0.3); |
79 |
run->AddTask(digitizer); |
80 |
// ------------------------------------------------------------------------
|
81 |
|
82 |
//-------Set visualisation flag to true------------------------------------
|
83 |
run->SetStoreTraj(kTRUE); |
84 |
|
85 |
//-------Set LOG verbosity -----------------------------------------------
|
86 |
FairLogger::GetLogger()->SetLogScreenLevel("DEBUG");
|
87 |
|
88 |
// ----- Initialize simulation run ------------------------------------
|
89 |
run->Init(); |
90 |
Int_t nSteps = -15000;
|
91 |
//gMC->SetMaxNStep(nSteps);
|
92 |
|
93 |
// ----- Runtime database ---------------------------------------------
|
94 |
Bool_t kParameterMerged = kTRUE; |
95 |
FairParRootFileIo* parOut = new FairParRootFileIo(kParameterMerged);
|
96 |
parOut->open(parFile.Data()); |
97 |
rtdb->setOutput(parOut); |
98 |
rtdb->saveOutput(); |
99 |
rtdb->print(); |
100 |
// ---------------------------------------------------------
|
101 |
|
102 |
// ----- Run simulation ------------------------------------------------
|
103 |
run->Run(nEvents); |
104 |
|
105 |
// ----- Finish -------------------------------------------------------
|
106 |
//neuRad->WriteHistos();
|
107 |
timer.Stop(); |
108 |
Double_t rtime = timer.RealTime(); |
109 |
Double_t ctime = timer.CpuTime(); |
110 |
cout << endl << endl; |
111 |
cout << "Macro finished succesfully." << endl;
|
112 |
cout << "Output file is sim.root" << endl;
|
113 |
cout << "Parameter file is par.root" << endl;
|
114 |
cout << "Real time " << rtime << " s, CPU time " << ctime |
115 |
<< "s" << endl << endl;
|
116 |
} |