Newer
Older
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#include "G4RunManager.hh"
// UI
#include "G4UImanager.hh"
#include "G4UIterminal.hh"
#include "G4UItcsh.hh"
#ifdef G4VIS_USE
#include "G4VisExecutive.hh"
#endif
#ifdef G4UI_USE
#include "G4UIExecutive.hh"
#endif
// G4 local source
#include "DetectorConstruction.hh"
#include "PhysicsList.hh"
#include "PrimaryGeneratorAction.hh"
int main(int argc, char** argv){
// Initialize NPOptionManager object
NPOptionManager* OptionManager = NPOptionManager::getInstance(argc, argv);
// Test if input files are found. If not, exit
if (OptionManager->IsDefault("EventGenerator"))
OptionManager->SendErrorAndExit("EventGenerator");
if (OptionManager->IsDefault("DetectorConfiguration"))
OptionManager->SendErrorAndExit("DetectorConfiguration");
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
// case when input files are here
G4String EventGeneratorFileName = OptionManager->GetReactionFile();
G4String DetectorFileName = OptionManager->GetDetectorFile();
// my Verbose output class
G4VSteppingVerbose::SetInstance(new SteppingVerbose);
// Construct the default run manager
G4RunManager* runManager = new G4RunManager;
// set mandatory initialization classes
DetectorConstruction* detector = new DetectorConstruction();
runManager->SetUserInitialization(detector);
PhysicsList* physicsList = new PhysicsList();
runManager->SetUserInitialization(physicsList);
// Test for Built in physics list
// G4PhysListFactory *physListFactory = new G4PhysListFactory();
//G4VUserPhysicsList *physicsList =
//physListFactory->GetReferencePhysList("QGSP_BERT");
runManager->SetUserInitialization(physicsList);
PrimaryGeneratorAction* primary = new PrimaryGeneratorAction(detector);
// Initialize Geant4 kernel
runManager->Initialize();
physicsList->MyOwnConstruction();
///////////////////////////////////////////////////////////////
///////////////// Initializing the Root Output ////////////////
///////////////////////////////////////////////////////////////
RootOutput::getInstance("Simulation/" + OptionManager->GetOutputFile());
///////////////////////////////////////////////////////////////
////////////// Reading Detector Configuration /////////////////
///////////////////////////////////////////////////////////////
detector->ReadConfigurationFile(DetectorFileName);
///////////////////////////////////////////////////////////////
////////////////////// Reading Reaction ///////////////////////
///////////////////////////////////////////////////////////////
primary->ReadEventGeneratorFile(EventGeneratorFileName);
runManager->SetUserAction(primary);
///////////////////////////////////////////////////////////////
////////////////// Starting the Event Action //////////////////
///////////////////////////////////////////////////////////////
EventAction* event_action = new EventAction() ;
event_action->SetDetector(detector) ;
runManager->SetUserAction(event_action) ;
///////////////////////////////////////////////////////////////
/////// Get the pointer to the User Interface manager ////////
///////////////////////////////////////////////////////////////
// G4UImanager* UI = G4UImanager::GetUIpointer();
///////////////////////////////////////////////////////////////
/////////// Define UI terminal for interactive mode ///////////
///////////////////////////////////////////////////////////////
G4VisManager* visManager = new G4VisExecutive("Quiet");
visManager->Initialize();
/* G4UIsession* session = 0;
#ifdef G4UI_USE_TCSH
UI->ApplyCommand("/control/execute vis.mac");
session->SessionStart();
delete session;
// interactive mode : define UI session
// Get the pointer to the User Interface manager
G4UImanager* UImanager = G4UImanager::GetUIpointer();
#ifdef G4UI_USE
G4UIExecutive* ui = new G4UIExecutive(argc, argv);
#ifdef G4VIS_USE
UImanager->ApplyCommand("/control/execute vis.mac");
#endif
if (ui->IsGUI())
UImanager->ApplyCommand("/control/execute gui.mac");
ui->SessionStart();
delete ui;
#endif
///////////////////////////////////////////////////////////////
////////////////////// Job termination ////////////////////////
///////////////////////////////////////////////////////////////
// delete primary; delete detector;
delete runManager;
NPOptionManager::getInstance()->Destroy();
RootOutput::getInstance()->Destroy();
return 0;