67 lines
2.2 KiB
C++
67 lines
2.2 KiB
C++
#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;
|
||
}
|