编辑: hgtbkwd | 2017-09-16 |
//用探测器以及物理过程初始化运行管理器(强制) G4VUserDetectorConstruction* detector = new ExN01DetectorConstruction;
runManager->
SetUserInitialization(detector);
G4VUserPhysicsList* physics = new ExN01PhysicsList;
runManager->
SetUserInitialization(physics);
// 设置用户行为(强制) G4VUserPrimaryGeneratorAction* gen_action = new ExN01PrimaryGeneratorAction;
runManager->
SetUserAction(gen_action)接下页 探测器、物理过程以及用户行为的定义随模拟的问题而变,在相应类中指定. * * //接上页... // 初始化G4 内核 runManager->
Initialize();
// 获取UI管理器的指针,并设置verbosities. G4UImanager* UI = G4UImanager::GetUIpointer();
UI->
ApplyCommand( /run/verbose
1 );
UI->
ApplyCommand( /event/verbose
1 );
UI->
ApplyCommand( /tracking/verbose
1 );
// 开始一次运行 G4int numberOfEvent = 3;
runManager->
BeamOn(numberOfEvent);
// 结束作业 // 释放内存:用户行为、物理过程以及探测器描述属于运行管理器, // 将被运行管理器自动删除,所以不应该在主函数中删除之. // 只需要删除运行管理器和其它动态指针即可. delete runManager;
return 0;
} 最基本的主函数(exN01) 如果想图形显示探测器以及物理过程的信息,需要在main函数中用到G4VisManager * * 添加如下代码进行图形显示 G4VisManager* visManager = new G4VisExecutive;
visManager->
Initialize();
UI->
ApplyCommand( /control/execute vis.mac );
//vis.mac文件中定义了跟图形显示有关的一些命令,比如观看角度、缩放比例等. 为了让事例显示在程序运行后仍然驻留,需要开启一个G4界面(G4UIsession)G4UIsession * session = 0;
session = new G4UIterminal();
session->
SessionStart();
注1:确保已经include了需要的头文件注2:确保已定义了G4VIS_USE环境变量注3:程序结束前,不要忘记删除session和visManager两个动态指针. * * 如何定义探测器几何和材料 Geant4模拟首先要考虑的是模拟的物理问题主要包括哪些物理过程以及想采用的探测器构造.例N01的探测器是在ExN01DetectorConstruction类中定义的,该类继承于G4VUserDetectorConstruction.探测器构造主要包括:几何、材料、灵敏区域、灵敏区域的读出机制,本讲只涉及几何与材料.详见该类的定义以及实现,即ExN01DetectorConstruction.hh(cc) 关键: 在Construct()函数中构造必要的物质、必要的几何形状,以及如何将基本单元放置(架构)成探测器.还可能包括磁场、灵敏区域定义等. * * 如何定义探测器材料(1) 物质定义:isotopes G4Isotopeelements G4Elementmolecules, compounds, mixtures G4MaterialG4Material属性包括温度、压强、状态、密度等,定义时有时需要明显指出属性. double density = 1.390*g/cm3;
//密度double a = 39.95*g/mole;
原子量double z=18.原子序数G4Material* lAr = new G4Material( liquidArgon ,z,a,dentsity);
G4Element* H = new G4Element(name= Hydrogen ,symbol= H , z= 1., a);
G4Element* O = new G4Element(name= Oxygen ,symbol= O , z= 8., a);
density = 1.000*g/cm3;
G4Material* H2O = new G4Material(name= Water , density, ncomponents=2);
H2O->
AddElement(H, natoms=2);
H2O->
AddElement(O, natoms=1);
//定义水,给定密度、元素种类数目、添加元素 注:Geant4中的数据如果有单位都要明显给出单位. 比如double length = 1.0*cm = 10.0*mm 二者效果是一样的.方便程序中使用合适的单位,而且看代码的时候比较直观. * * //空气的定义 G4Element* N = new G4Element( Nitrogen , N , z=7., a= 14.01*g/mole);