#include "ActionInitialization.hh" // 用户初始化 #include "DetectorConstruction.hh" // 探测器构建文件 #include "G4MTRunManager.hh" // 管理类 #include "G4SteppingVerbose.hh" // step信息管理 verbose越大,输出越丰富 #include "G4UIExecutive.hh" // UI操作 #include "G4UImanager.hh" // UI管理 #include "G4VisExecutive.hh" // 可视化 #include "QBBC.hh" // 物理过程 #include "Randomize.hh" // 随机数 using namespace B1; int main(int argc, char** argv) { // argc 为 1 时,说明参数只有可执行文件本身,运行在GUI模式下 // 如果 argc 不为 1,则运行在 batch mode,例如 example.exe run1.mac G4UIExecutive* ui = nullptr; if (argc == 1) { ui = new G4UIExecutive(argc, argv); } // 调整 step 的输出信息 G4int precision = 4; G4SteppingVerbose::UseBestUnit(precision); // 构建运行管理器 G4MTRunManager* runManager = new G4MTRunManager; // 进行强制类的初始化 // // 探测器构建 runManager->SetUserInitialization(new DetectorConstruction()); // 物理过程列表 G4VModularPhysicsList* physicsList = new QBBC; physicsList->SetVerboseLevel(1); runManager->SetUserInitialization(physicsList); // 用户初始化 runManager->SetUserInitialization(new ActionInitialization()); // 可视化初始化 // G4VisExecutive 可以输入 verbose 参数,用于控制输出的详细程度 // https://www.hep.ph.ic.ac.uk/~yoshiu/COMET/comet_g4HTMLdoc/_vis_.html G4VisManager* visManager = new G4VisExecutive; visManager->Initialize(); // 用户界面管理器的指针 G4UImanager* UImanager = G4UImanager::GetUIpointer(); // 根据模式,选择开始进行模拟,或打开GUI if (!ui) { // batch mode G4String command = "/control/execute "; G4String fileName = argv[1]; UImanager->ApplyCommand(command + fileName); } else { // interactive mode UImanager->ApplyCommand("/control/execute init_vis.mac"); ui->SessionStart(); delete ui; } // 释放指针 delete visManager; delete runManager; }