Geant4基础知识文档格式.docx
- 文档编号:21825226
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:19
- 大小:209.15KB
Geant4基础知识文档格式.docx
《Geant4基础知识文档格式.docx》由会员分享,可在线阅读,更多相关《Geant4基础知识文档格式.docx(19页珍藏版)》请在冰豆网上搜索。
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);
//是否优化
盒子造完了就该摆放盒子了。
摆放盒子也有两种方法,一种是直接构建物理体,另一种是指定摆放方法。
直接构建物理体是通过G4VPhysicalVolume类,其定义方法如下:
G4VPhysicalVolume(G4RotationMatrix*pRot,//旋转方式
constG4ThreeVector&
tlate,//摆放坐标
constG4String&
pName,//物理体名字
G4LogicalVolume*pLogical,//对应的逻辑体
G4VPhysicalVolume*pMother);
//母体
如果pMother=0就表明这个体是一个WorldVolume,WorldVolume必须且只能有一个。
在实际应用中,我们通常采用指定摆放方法的方式来完成物理体的构建。
指定摆放方法是通过G4PVPlacement类完成。
G4PVPlacement类是G4VPhysicalVolume的派生类,该类提供了多种方法描述LogicalVolume的摆放方法。
具体可以参考:
$G4INSTALL/source/geometry/volumes/include/G4PVPlacement.hh。
用这种方法可以建立具有相同LogicalVolume的物理体,同时给可以给每个物理体分配一个编号,以便区分具有相同LogicalVolume的物理体。
这些编号在UserSteppingAction等类中处理数据时有时会非常有用处。
需要注意的是,在Geant4中摆放坐标都是指的相对坐标,是子体中心相对母体中心的坐标。
而WorldVolume建立后就等于建立了几何模型的绝对坐标系。
3.定义材料
1)基本概念
自然界中,材料(化合物,混合物)一般是由元素组成,而元素由同位素组成.Geant4中有三个类用来定义探测器材料的.
类G4Element描述了原子属性:
原子量,原子核中质子数,原子质量,壳层能量,还有每个原子的散射截面等.
类G4Material描述了材料的宏观属性:
密度,状态,温度,压强,还有辐射长度,平均自由程,dE/dx等.
2)定义单质材料
如下例,给出材料名称,密度,摩尔质量和原子量,定义了液态氩.
////////////////////////////////////////////////////////////////////////////////////
G4doubledensity=1.390*g/cm3;
G4doublea=39.95*g/mole;
G4Material*lAr=newG4Material(name="
liquidArgon"
z=18.,a,density);
这就可以用来确定所定义的逻辑块的材料:
G4LogicalVolume*myLbox=newG4LogicalVolume(abox,lAr,"
Lbox"
0,0,0);
3)定义化合物
如例,定义水(H2O):
a=1.01*g/mole;
G4Element*elH=newG4Element(name="
Hydrogen"
symbol="
H"
z=1,a);
a=16.00*g/mole;
G4Element*elO=newG4Element("
Oxygen"
"
O"
z=8,a);
density=1.0*g/cm3;
G4Material*H2O=newG4Material("
water"
density,ncomponents=2);
H2O->
AddElement(elH,natoms=2);
AddElement(elO,natoms=1);
4)定义混合物
如例,定义空气(Air):
a=14.01*g/mole;
G4Element*elN=newG4Element("
Nitrogen"
N"
z=7,a);
a=16.0*g/mole;
z=8.,a);
density=1.290*g/cm3;
G4Material*Air=newG4Material("
Air"
Air->
AddElement(elN,fractionmass=70*perCent);
AddElement(elO,fractionmass=30*perCent);
在/home/username/geant4.7.0/examples/novice/N03/ExN03DetectorConstruction.cc文件中介绍了所有定义材料的方法.
4.指定粒子
1)一般概念
Geant4能够模拟多种粒子.
基本粒子:
电子,质子,和gamma等.
短寿命的共振粒子:
媒质介子和delta重子.
核子:
氘,alpha粒子和重离子等.
夸克,D夸克和胶子.
G4ParticleDefinition类提供了粒子的定义,而且每种粒子都有自己的类.粒子主要分为6个大类:
轻子(lepton)
介子(meson)
强子(baryon)
波色子(boson)
短寿命粒子(shortlived)
离子(ion)
G4ParticleDefinition类包含了单个粒子的属性:
名称,质量,带电电荷,自旋等.其中大部分的属性都不可修改,除非重新建立库.Geant4定义了上百种粒子用于不同的物理过程,在一般应用中,用户不需要自己定义粒子.粒子在连接的过程中注册启用了,用户不须要(也不能)自行执行注册粒子.
2)指定粒子和物理过程
G4VUserPhysicsList类让用户可以指定粒子以及它们的物理过程,用户还可以指定截断参数.
一个用户从G4VUserPhysicsList中创建自己的类要利用以下几个步骤:
ConstructParticle():
调用粒子
ConstructPhysics():
调用粒子的物理过程
SetCuts():
设置粒子的截断值
用户利用ConstructParticle()来调用所需要的粒子的函数,如用户需要质子和geantino,代码如下:
voidExN01PhysicsList:
ConstructParticle()
{
G4Proton:
ProtonDefinition();
G4Geantino:
GeantinoDefinition();
}
Geant4中预先定义的粒子有100多个,用户不可能用这种方法来调用每一个粒子的函数,Geant4中有一些类可以让用户调用一类粒子,相对于6个粒子大类,总共有6个类来调用这批粒子.他们是:
G4BosonConstructor
G4LeptonConstructor
G4MesonConstructor
G4BarionConstructor
G4IonConstructor
G4ShortlivedConstructor
使用方法如下例:
voidExN04PhysicsList:
ConstructLeptons()
//Constructallleptons
G4LeptonConstructorpConstructor;
pConstructor.ConstructorParticle();
3)设定截断值
用户必须为每个粒子设定截断值,所谓截断值,就是程序在粒子输运距离为截断值时记录粒子位置,能量的信息.在一般的模拟程序中,用户可以为所有的粒子设定一个截断值.如下:
SetCuts()
//theG4VUserPhysicsList:
SetCutsWithDefault()methodsets
//thedefaultcutvalueforallparticletypes
SetCutsWithDefault();
系统默认的截断值为1*mm,当然用户可以为自己调用的粒子和物理过程设定不用的默认值.如下:
ExN04PhysicsList:
ExN04PhysicsList():
G4VUserPhysicsList()
//defaultcutvalue(1.0*mm)
defaultCutValue=1*mm;
用户可以为gamma射线,电子,正电子,或者为不用的几何区域设定不同的截断值.这种情况下,由于Geant4的物理过程(特别是计算能量损失的物理过程)是根据特定的截断值编写的,它们输出就会改变,所以用户应该特别小心.
为不同粒子设
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Geant4 基础知识