SciFiMatG4_1layer1mm/SciFiSim/scifiSim.cc
Blake Leverington c6150aab97 moved to pi git
2021-12-01 16:25:41 +01:00

125 lines
3.3 KiB
C++

// Written by Peter Stromberger
// based on work of Mirco Deckenhoff
// modified by Bastian Rössler
#include "G4RunManager.hh"
//#include "G4MTRunManager.hh"
#include "G4UImanager.hh"
#include "G4Version.hh"
#include "G4VisExecutive.hh"
#if G4VERSION_NUMBER>=930
#include "G4UIExecutive.hh"
#else
#include "G4UIterminal.hh"
#include "G4UItcsh.hh"
#endif
#include "DetectorConstruction.hh"
#include "PrimaryGeneratorAction.hh"
#include "StackingAction.hh"
#include "SteppingAction.hh"
#include "EventAction.hh"
#include "RunAction.hh"
#include "Analysis.hh"
#include "Parameters.hh"
#include "PhysicsList.hh"
#include "ActionInitialization.hh"
#include "Randomize.hh"
// for file output
#include <iostream>
#include <fstream>
int main(int argc,char** argv)
{
// Set the seed for the random engine and save to file
G4int seed = Parameters::GetInstance()->RandomSeed();
G4Random::setTheEngine(new CLHEP::RanecuEngine);
G4Random::setTheSeed(seed);
std::ofstream myfile;
myfile.open("randomEngineSeed.txt");
myfile << seed;
myfile.close();
G4RunManager * runManager = new G4RunManager();
// mandatory Initialization classes
G4VUserDetectorConstruction* detector = new DetectorConstruction();
runManager->SetUserInitialization(detector);
G4VUserPhysicsList* physics = new PhysicsList();
runManager->SetUserInitialization(physics);
// mandatory User Action classes
runManager->SetUserInitialization(new ActionInitialization());
// Initialize G4 kernel
runManager->Initialize();
//Initilize the visualization manager
G4VisManager* visManager = new G4VisExecutive();
visManager->Initialize();
// Get the pointer to the User Interface manager
//
G4UImanager * UImanager = G4UImanager::GetUIpointer();
if (argc!=1)
{ // batch mode
//command line contains name of the macro to execute
G4String command = "/control/execute ";
G4String fileName = argv[1];
UImanager->ApplyCommand(command+fileName);
}
else
{ // interactive mode : define UI session
#if G4VERSION_NUMBER>=930
//New since G4 9.3: UI executive setups up
//correct UI depending on env variables
G4UIExecutive * ui = new G4UIExecutive(argc,argv);
//If UI has graphics execute special macro: opens OpenGL Qt driver
if (ui->IsGUI())
UImanager->ApplyCommand("/control/execute visQt.mac");
else
UImanager->ApplyCommand("/control/execute vis.mac");
#else
//Older versions of G4: UI selected by user
#ifdef G4UI_USE_TCSH
G4UIsession * ui = new G4UIterminal(new G4UItcsh);
#else
G4UIsession * ui = new G4UIterminal();
#endif
UImanager->ApplyCommand("/control/execute vis.mac");
#endif
ui->SessionStart();
delete ui;
}
// Free the store: user actions, physics_list and detector_description are
// owned and deleted by the run manager, so they should not
// be deleted in the main() program !
Analysis::GetInstance()->Close();
delete runManager;
if(Analysis::GetInstance()!=NULL)
delete Analysis::GetInstance();
if(Parameters::GetInstance()!=NULL)
delete Parameters::GetInstance();
return 0;
}