track number corrected
[u/mrichter/AliRoot.git] / macros / g4menu.C
CommitLineData
1fccbbe0 1// $Id$
2//
3// Root macro that opens a mini GUI for running aliroot with Geant4.
4//
5// To run aliroot with Geant4 using the g4menu.C:
6// aliroot
7// root [0] .x g4menu.C
e14b4d5a 8// --> First select "Geometry" to build geometry.root file
9// --> Then re-run aliroot and select "Run" button
1fccbbe0 10//
e14b4d5a 11// The Init button is kept for debugging purposes,
12// it itializes MonteCarlo but it does not itialize
13// completely ALICE framework. That's why to run simulation,
14// you have to re-run aliroot and select Run button.
15//
16// The menu enables to start Geant4 interactive session:
1fccbbe0 17// --> Select "Geant4UI" button and use Geant4 interactive commands;
1fccbbe0 18// To go back to Root UI, type exit.
e14b4d5a 19//
20// By I. Hrivnacova, IPN Orsay
1fccbbe0 21
22
23#include <iostream>
24
25void g4menu()
26{
27
28 // Load Geant4 libraries
29 if (!gInterpreter->IsLoaded("$ALICE/geant4_vmc/examples/macro/g4libs.C"))
30 gROOT->LoadMacro("$ALICE/geant4_vmc/examples/macro/g4libs.C");
31 gInterpreter->ProcessLine("g4libs()");
32
33 // Menu
34 TControlBar* menu = new TControlBar("vertical","Alice Geant4 menu");
35
e14b4d5a 36 menu->AddButton("Geometry", "MakeGeometry()", "Generate Root geometry file");
37 menu->AddButton("Run", "RunSimulation()", "Process Alice run");
38 menu->AddButton("Init", "Init()", "Initialize Alice for simulation");
1fccbbe0 39 menu->AddButton("Geant4UI", "StartGeant4UI()","Go to Geant4 Interactive session");
e14b4d5a 40 menu->AddButton("AGDD", "GenerateAGDD()","Generate XML (AGDD) file with geometry description");
41 //menu->AddButton("GDML", "GenerateGDML()","Generate XML (GDML) file with geometry description");
67d736ee 42 menu->AddButton("Quit", "Quit()", "Quit aliroot");
1fccbbe0 43 gROOT->SaveContext();
e14b4d5a 44
45 cout << endl
46 << "**************************************************************" << endl
47 << " To run simulation:" << endl
48 << " First select <Geometry> to build geometry.root file." << endl
49 << " Then re-run aliroot and select <Run> button" << endl
50 << endl
51 << " The <Init> button is kept for debugging purposes," << endl
52 << " it itializes MonteCarlo but it does not itialize" << endl
53 << " completely ALICE framework. That's why to run simulation," << endl
54 << " you have to re-run aliroot and select Run button." << endl
55 << endl
56 << " The menu enables to start Geant4 interactive session:" << endl
57 << " Select <Geant4UI> button and use Geant4 interactive commands" << endl
58 << " To go back to Root UI, type exit." << endl
59 << "**************************************************************" << endl
60 << endl;
61
1fccbbe0 62 menu->Show();
63}
64
e14b4d5a 65void MakeGeometry()
1fccbbe0 66{
e14b4d5a 67 AliCDBManager* man = AliCDBManager::Instance();
68 man->SetDefaultStorage("local://$ALICE_ROOT");
69 man->SetRun(1);
70 gAlice->Init("$ALICE_ROOT/macros/g4ConfigGeometry.C");
1fccbbe0 71
e14b4d5a 72 // Generate geometry file
73 //
74 gGeoManager->Export("geometry.root");
1fccbbe0 75
e14b4d5a 76 cout << endl
77 << "Geometry file geometry.root has been generated." << endl
78 << "You have to re-run aliroot and choose Run in g4menu." << endl;
79
80 exit(0);
81}
82
83
84void Init()
85{
86 AliCDBManager* man = AliCDBManager::Instance();
87 man->SetDefaultStorage("local://$ALICE_ROOT");
88 man->SetRun(0);
89 gAlice->Init("$ALICE_ROOT/macros/g4Config.C");
90
91 cout << endl
92 << "Only MonteCarlo initialization has been performed. " << endl
93 << "To run simulation you have to re-run aliroot and choose Run in g4menu." << endl;
94}
95
96
97void RunSimulation()
98{
99 AliSimulation sim("$ALICE_ROOT/macros/g4Config.C");
100 sim.SetMakeDigits("");
101 sim.SetMakeSDigits("");
102 sim.SetRunHLT("");
103 sim.SetNumberOfEvents(1);
104 TStopwatch timer;
105 timer.Start();
106 sim.Run(1);
107 timer.Stop();
108 timer.Print();
1fccbbe0 109}
110
111void StartGeant4UI()
112{
113 if (gMC) {
114 // release Root terminal control
115
116 // go into non-raw term mode
117 Getlinem(kCleanUp, 0);
118
119 // add test if gMC is TGeant4
120 TGeant4* g4 = (TGeant4*)gMC;
121
122 g4->StartGeantUI();
123
124 // new Root prompt
125 Getlinem(kInit, ((TRint*)gROOT->GetApplication())->GetPrompt());
126 }
127 else {
128 cout << "Monte Carlo has not been yet created." << endl;
129 }
67d736ee 130}
131
e14b4d5a 132void GenerateAGDD()
67d736ee 133{
134 if (gMC) {
135 // release Root terminal control
136
137 // go into non-raw term mode
138 //Getlinem(kCleanUp, 0);
139
140 // add test if gMC is TGeant4
141 TGeant4* g4 = (TGeant4*)gMC;
142
e14b4d5a 143 g4->ProcessGeantCommand("/vgm/generateAGDD");
67d736ee 144
145 // new Root prompt
146 //Getlinem(kInit, ((TRint*)gROOT->GetApplication())->GetPrompt());
147 }
148 else {
149 cout << "Monte Carlo has not been yet created." << endl;
150 }
151}
e14b4d5a 152/*
153void GenerateGDML()
154{
155 if (gMC) {
156 // release Root terminal control
157
158 // go into non-raw term mode
159 //Getlinem(kCleanUp, 0);
160
161 // add test if gMC is TGeant4
162 TGeant4* g4 = (TGeant4*)gMC;
163
164 g4->ProcessGeantCommand("/vgm/generateGDML");
67d736ee 165
e14b4d5a 166 // new Root prompt
167 //Getlinem(kInit, ((TRint*)gROOT->GetApplication())->GetPrompt());
168 }
169 else {
170 cout << "Monte Carlo has not been yet created." << endl;
171 }
172}
173*/
67d736ee 174void Quit()
175{
880d6abe 176 delete AliRunLoader::GetRunLoader();
67d736ee 177 delete gAlice;
178
179 exit(0);
1fccbbe0 180}