fe7f07a1b4decc3ecba30bbfd2eaebf5cab90a1d
[u/mrichter/AliRoot.git] / macros / g4menu.C
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
8 //  --> Select "Init" and then "Run" button
9 //          
10 // The the bar enables to start Geant4 interactive session:
11 //  --> Select "Geant4UI" button and use Geant4 interactive commands;
12 //      In case TGeant4 has not yet been created you need first
13 //      select "Geant4" button before selecting  "Geant4UI".        
14 // To go back to Root UI, type exit.
15
16
17 #include <iostream>
18
19 void g4menu()
20 {
21
22   // Load Geant4 libraries 
23   if (!gInterpreter->IsLoaded("$ALICE/geant4_vmc/examples/macro/g4libs.C"))
24     gROOT->LoadMacro("$ALICE/geant4_vmc/examples/macro/g4libs.C");
25   gInterpreter->ProcessLine("g4libs()");
26
27   // Menu
28   TControlBar* menu = new TControlBar("vertical","Alice Geant4 menu");
29   
30   menu->AddButton("Init",     "gAlice->Init(\"g4Config.C\")", "Initialize \" AliRun \"");
31   menu->AddButton("Run",      "gAlice->Run()",  "Process Alice run");
32   menu->AddButton("Geant4",   "CreateGeant4()", "Create Geant4 only (without initializing AliRun)");
33   menu->AddButton("Geant4UI", "StartGeant4UI()","Go to Geant4 Interactive session");
34   menu->AddButton("XML",      "GenerateXML()","Generate XML (AGDD) file with geometry description");
35   menu->AddButton("Quit",     "Quit()", "Quit aliroot");
36   gROOT->SaveContext();
37   menu->Show();
38 }
39
40 void CreateGeant4()
41 {  
42   if (!gMC) {
43   
44      // TG4RunConfiguration for Geant4
45      TG4RunConfiguration* runConfiguration 
46       = new TG4RunConfiguration(true);
47   
48     // TGeant4
49     TGeant4* geant4
50       = new TGeant4("TGeant4", "The Geant4 Monte Carlo", runConfiguration);
51
52     cout << "Geant4 has been created." << endl;
53    }      
54   else {
55     cout << "Monte Carlo has been already created." << endl;
56   }       
57 }    
58
59 void StartGeant4UI()
60 {
61   if (gMC) {
62     // release Root terminal control
63
64     // go into non-raw term mode
65     Getlinem(kCleanUp, 0);
66     
67     // add test if gMC is TGeant4
68     TGeant4* g4 = (TGeant4*)gMC;
69   
70     g4->StartGeantUI();
71
72     // new Root prompt
73     Getlinem(kInit, ((TRint*)gROOT->GetApplication())->GetPrompt());  
74   }
75   else {  
76     cout << "Monte Carlo has not been yet created." << endl;
77   }       
78
79
80 void GenerateXML()
81 {
82   if (gMC) {
83     // release Root terminal control
84
85     // go into non-raw term mode
86     //Getlinem(kCleanUp, 0);
87     
88     // add test if gMC is TGeant4
89     TGeant4* g4 = (TGeant4*)gMC;
90     
91     g4->ProcessGeantCommand("/xml/generateAGDD");
92
93     // new Root prompt
94     //Getlinem(kInit, ((TRint*)gROOT->GetApplication())->GetPrompt());  
95   }
96   else {  
97     cout << "Monte Carlo has not been yet created." << endl;
98   } 
99 }        
100
101 void Quit()
102 {
103   delete gAlice->GetRunLoader();
104   delete gAlice;
105   
106   exit(0);
107 }