#include #include "TFile.h" #include "TNtuple.h" #include "G4ios.hh" #include "G4Threading.hh" #include "G4AnalysisManager.hh" #include "G4RunManager.hh" #include "G4MTRunManager.hh" #include "G4UImanager.hh" #include "G4VisManager.hh" #include "G4VisExecutive.hh" #include "G4UIExecutive.hh" #include "PhysicsList.hh" #include "DetectorConstruction.hh" #include "ActionInitialization.hh" #include "G4PhysListFactory.hh" int main (int argc, char** argv) { G4UIExecutive *ui = nullptr; #ifdef G4MULTITHREADED G4RunManager *runManager = new G4RunManager; // G4MTRunManager *runManager = new G4MTRunManager; // runManager->SetNumberOfThreads(G4Threading::G4GetNumberOfCores()); #else G4RunManager *runManager = new G4RunManager; #endif // Set Physics List before initialization // auto physicsList = new PhysicsList(); // runManager->SetUserInitialization(physicsList); G4PhysListFactory factory; G4VModularPhysicsList* mphysicsList = factory.GetReferencePhysList("FTFP_BERT"); runManager->SetUserInitialization(mphysicsList); // Set Detector Construction runManager->SetUserInitialization(new DetectorConstruction()); // Set Action Initialization runManager->SetUserInitialization(new ActionInitialization()); // Initialize Run Manager after setting physics runManager->Initialize(); G4AnalysisManager *analysisManager = G4AnalysisManager::Instance(); if (!analysisManager->IsActive()) { analysisManager->OpenFile("output.root"); } if (argc == 1) { ui = new G4UIExecutive(argc, argv); } else if (argc < 2) { G4cerr << "Error: No macro file provided for batch mode execution." << G4endl; return 1; } G4VisManager *visManager = new G4VisExecutive; visManager->Initialize(); G4UImanager *UImanager = G4UImanager::GetUIpointer(); if(ui) { UImanager->ApplyCommand("/control/execute vis.mac"); ui->SessionStart(); if (ui) delete ui; } else { G4String command = "/control/execute "; G4String fileName = argv[1]; UImanager->ApplyCommand(command + fileName); } delete runManager; runManager = nullptr; G4AnalysisManager::Instance()->CloseFile(); delete visManager; visManager = nullptr; return 0; }