Geant4基础知识精编版Word文件下载.docx
《Geant4基础知识精编版Word文件下载.docx》由会员分享,可在线阅读,更多相关《Geant4基础知识精编版Word文件下载.docx(21页珍藏版)》请在冰豆网上搜索。
调用粒子发射器发射粒子
->
ATrackStart
AStepStart
AStepEnd
NextStepStart
……
AllStepEnd
ATrackEnd
NextTrackStart
AllTrackEnd
->
AnEventEnd->
NextEventStart
AllEventEnd(AllPrimariesShot)->
ARunEnd->
NextRunStart
……
1)main()中应该包括的内容
Geant4是一个探测器模拟工具,但它对于某个特定的模拟程序没有固定的main()函数,用户在建立模拟程序的过程中需要提供自己的main()函数.一个最基本的main()函数需要包括以下几个方面:
G4RunManager(模拟整个过程)
G4VUserDetectorConstruction(定义探测器材料,几何形状,灵敏区和读出方案)
G4VUserPhysicsList(定义粒子种类和物理过程,还有截断参数)
G4VUserPrimaryGeneratorAction(定义了源粒子的种类,能量,出射方向等)
一个最简单的main()函数如下:
#include"
G4RunManager.hh"
G4UImanager.hh"
ExN01DetectorConstruction.hh"
ExN01PhysicsList.hh"
ExN01PrimaryGeneratorAction.hh"
intmain()
{
//Constructthedefaultrunmanager
G4RunManager*runManager=newG4RunManager;
//setmandatoryinitializationclasses
runManager->
SetUserInitialization(newExN01DetectorConstruction);
SetUserInitialization(newExN01PhysicsList);
//setmandatoryuseractionclass
SetUserAction(newExN01PrimaryGeneratorAction);
//InitializeG4kernel
Initialize();
//getthepointertotheUImanagerandsetverbosities
G4UImanager*UI=G4UImanager:
:
GetUIpointer();
UI->
ApplyCommand("
/run/verbose1"
);
/event/verbose1"
/tracking/verbose1"
//startarun
intnumberOfEvent=3;
BeamOn(numberOfEvent);
//jobtermination
deleterunManager;
return0;
}
main()首先生成一个G4RunManager类,这个类是在主程序中用以初始化模拟信息,用来连接子程序,连接方式是通过Set函数来完成。
例如:
BDetectorConstruction*detector=newBDetectorConstruction;
SetUserInitialization(detector);
先构造一个探测器几何,再用SET函数初始化。
用new申请的空间,在程序完成后需要释放空间,否则出错。
注意:
GEANT4中,在runManager上面说明的其他类会自动释放。
所以不需要一一释放。
其他类按照重要性分为强制类和可选类。
其中几何结构类(DetectorConstruction)、物理设定类(PhysicsList)、源描述类(PrimaryGenerator)都属于强制类,缺少任一个程序都无法运行。
而事件处理类(EventAction)、步数据处理类(SteppingAction)、径迹处理类(TrackingAction)、运行处理类(RunAction)都属于可选类,用户可以通过设定这些类来获取感兴趣的数据,可以按照自己的需要添加。
包含强制类之后程序就可以运行了,但只能检验几何结构的完备性,所以为了获得数据必须设定可选类。
1.Geant4的类结构
Geant4程序代码是根据这个类结构建立起来的,类结构如下图所示.下面就是Geant4中每个类的简单说明.
1)Run和Event
这些类与模拟事件相关,产生次级粒子,为粒子径迹模拟器提供粒子.
2)Tracking和Track
根据粒子在探测器材料中的物理过程模拟粒子运行的轨迹,给出粒子特定时间段在空间的位置,或者粒子空间时间的分布.
3)Geometry,MagneticField和CAD-Interface
这三个类就是用来描述探测器几何结构和探测器中电磁场的分布.为了使探测器几何结构可以在CAD系统中进行修改,Geant4的几何体模型完全与ISOSTEP标准一致.将来Geant4中几何结构的设计将从程序设计中独立出来.面向对象设计的方法可以让用户在不影响程序其他部分的同时改变几何参数和场.
4)ParticleDefinition和Matter
这两个类用于定义粒子和探测器材料.
5)Physics
它提供了粒子与探测器材料相互作用时所发生物理过程的模型,允许用户为每次反应或每个反应道添加物理模型.用户根据粒子的种类,探测器材料和能量范围选择不同的物理模型.Geant4有电磁物理过程和强子物理过程模型,同时也提供了散射截面数据库.
6)Hits和Digitization
这个两个类用于对用户定义的灵敏区内的响应进行采样和分析.
7)Visualization
它显示了探测器几何形状,粒子轨迹和碰撞过程.由于采用了面向对象设计技术来设计可视化部分,这允许用户独立开发可视化工具,如:
OpenGL和OpenInventor(为X11和Windows设计),DAWN,Postscript(viaDAWN)和VRML.
8)Interfaces
支持可视化用户界面以及和外加程序的交流(OODBMS,reconstruction等).
①UserVerboseoutputclass,定义了一个verbosity变量;
②Runmanager,定义了一个运行管理器runManager;
③UserInitializationclasses(mandatory),设置两个强制类ExN02DetectorConstruction和ExN02PhysicsList;
④UserActionclasses,设置用户干涉类ExN02PrimaryGeneratorAction、ExN02RunAction、ExN02EventAction和ExN02SteppingAction;
⑤InitializeG4kernel,“runManager->
Initialize()”,初始化GEANT4内核。
构造探测器,生成物理过程,计算截面以及其他;
⑥GetthepointertotheUserInterfacemanager,获取UI管理器的指针;
⑦batchmode,定义了批处理模式;
⑧interactivemode:
definevisualizationandUIterminal;
定义了交互模式的可视化和UI终端;
2.构建模型:
在Geant4中首先要建立一个最大的盒子,称为WorldVolume,然后往这个大盒子里面放各种各样的小盒子(部件),然后每个小盒子(部件)里面还可以放更小的盒子(零件),放入的小盒子将自动代替大盒子原有部分。
在Geant4中,将大盒子称为MotherVolume(母体),小盒子称为DaughterVolume(子体)。
除了WorldVolume之外,每个Volume(体)都必须且只能有一个母体,但可以没有子体,也可以有多个子体。
Geant4的这种盒子模型的要求是:
“不交不超”。
Geant4中每个这样的盒子的安放又分为两步。
第一步是构建盒子,称为LogicalVolume(逻辑体);
第二步是将盒子摆放到正确位置,变为PhysicalVolume(物理体)。
构建盒子又分为两步,第一步是确定盒子形状,第二步是确定盒子的材料等属性。
形状在Geant4中被称为Solid。
在Geant4中提供了多种固有的形状,如球形、长方体、锥体等,可以在$G4INSTALL/source/geometry/solids里面查找。
用户也可以通过G4VSolid类构建自己的形状,参见:
$G4INSTALL/source/geometry/management/include/G4VSolid.hh。
此外,对于一些复杂的形状,用户也可以利用基本形状通过交并补等布尔运算方式完成,布尔运算的方式请参考$G4INSTALL/source/geometry/solids/Boolean。
确定了盒子形状后,就是设置盒子的材料、磁场等属性。
这些属性的设置通过G4LogicalVolume类来完成,设置方法如下:
G4LogicalVolume(G4VSolid*pSolid,//形状
G4Material*pMaterial,//材料
constG4String&
name,//逻辑体名字
G4FieldManager*pFieldMgr=0,//场管理
G4VSensitiveDetector*pSDetector=0,//是否SD探测器
G4UserLimits*pULimits=0,//用户限制
G4booloptimise=true);
//是否优化
盒子造完了就该摆放盒子了。
摆放盒子也有两种方法,一种是直接构建物理体,另一种是指定摆放方法。