Geant4基础知识doc.docx

上传人:b****6 文档编号:13073497 上传时间:2023-06-10 格式:DOCX 页数:24 大小:80.23KB
下载 相关 举报
Geant4基础知识doc.docx_第1页
第1页 / 共24页
Geant4基础知识doc.docx_第2页
第2页 / 共24页
Geant4基础知识doc.docx_第3页
第3页 / 共24页
Geant4基础知识doc.docx_第4页
第4页 / 共24页
Geant4基础知识doc.docx_第5页
第5页 / 共24页
Geant4基础知识doc.docx_第6页
第6页 / 共24页
Geant4基础知识doc.docx_第7页
第7页 / 共24页
Geant4基础知识doc.docx_第8页
第8页 / 共24页
Geant4基础知识doc.docx_第9页
第9页 / 共24页
Geant4基础知识doc.docx_第10页
第10页 / 共24页
Geant4基础知识doc.docx_第11页
第11页 / 共24页
Geant4基础知识doc.docx_第12页
第12页 / 共24页
Geant4基础知识doc.docx_第13页
第13页 / 共24页
Geant4基础知识doc.docx_第14页
第14页 / 共24页
Geant4基础知识doc.docx_第15页
第15页 / 共24页
Geant4基础知识doc.docx_第16页
第16页 / 共24页
Geant4基础知识doc.docx_第17页
第17页 / 共24页
Geant4基础知识doc.docx_第18页
第18页 / 共24页
Geant4基础知识doc.docx_第19页
第19页 / 共24页
Geant4基础知识doc.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Geant4基础知识doc.docx

《Geant4基础知识doc.docx》由会员分享,可在线阅读,更多相关《Geant4基础知识doc.docx(24页珍藏版)》请在冰点文库上搜索。

Geant4基础知识doc.docx

Geant4基础知识doc

Geant4基础知识

G4模拟粒子过程:

建立一次模拟,在G4中称为一次Run;Run建立后,需要对几何结构、物理过程进行初始化;初始化完成后就开始模拟过程了,首先发射一个粒子。

在G4中,发射一个(或一系列)粒子到所有次级粒子死亡的过程成为一次Event。

而每次发射的初始粒子则有粒子发射器进行控制。

而在每一个event过程中,粒子与材料反应后会可能生成多个次级粒子,每个粒子都会有一条径迹,称之为track;而每一个粒子(初始的或次级的)的径迹又是由很多步组成的,称之为step。

G4模拟的基本算法:

ARunStart->初始化物理模型/几何模型->AnEventStart->调用粒子发射器发射粒子

->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"

#include"G4UImanager.hh"

#include"ExN01DetectorConstruction.hh"

#include"ExN01PhysicsList.hh"

#include"ExN01PrimaryGeneratorAction.hh"

intmain()

{

//Constructthedefaultrunmanager

G4RunManager*runManager=newG4RunManager;

//setmandatoryinitializationclasses

runManager->SetUserInitialization(newExN01DetectorConstruction);

runManager->SetUserInitialization(newExN01PhysicsList);

//setmandatoryuseractionclass

runManager->SetUserAction(newExN01PrimaryGeneratorAction);

//InitializeG4kernel

runManager->Initialize();

//getthepointertotheUImanagerandsetverbosities

G4UImanager*UI=G4UImanager:

:

GetUIpointer();

UI->ApplyCommand("/run/verbose1");

UI->ApplyCommand("/event/verbose1");

UI->ApplyCommand("/tracking/verbose1");

//startarun

intnumberOfEvent=3;

runManager->BeamOn(numberOfEvent);

//jobtermination

deleterunManager;

return0;

}

main()首先生成一个G4RunManager类,这个类是在主程序中用以初始化模拟信息,用来连接子程序,连接方式是通过Set函数来完成。

例如:

BDetectorConstruction*detector=newBDetectorConstruction;

runManager->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);

H2O->AddElement(elO,natoms=1);

////////////////////////////////////////////////////////////////////////////////////

4)定义混合物

如例,定义空气(Air):

////////////////////////////////////////////////////////////////////////////////////

a=14.01*g/mole;

G4Element*elN=newG4Element("Nitrogen","N",z=7,a);

a=16.0*g/mole;

G4Element*elO=newG4Element("Oxygen","O",z=8.,a);

density=1.290*g/cm3;

G4Material*Air=newG4Material("Air",density,ncomponents=2);

Air->AddElement(elN,fractionmass=70*perCent);

Air->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)设定截断值

用户必须为每个粒子设定截断值,所谓截断值,就是程序在粒子输运距离为截断值时记录粒子位置,能量的信息.在一般的模拟程序中,用户可以为所有的粒子设定一个截断值.如下:

////////////////////////////////////////////////////////////////////////////////////

voidExN04PhysicsList:

:

SetCuts()

{

//theG4VUserPhysicsList:

:

SetCutsWithDefault()methodsets

//thedefaultcutvalueforallparticletypes

SetCutsWithDefault();

}

////////////////////////////////////////////////////////////////////////////////////

系统默认的截断值为1*mm,当然用户可以为自己调用的粒子和物理过程设定不用的默认值.如下:

////////////////////////////////////////////////////////////////////////////////////

ExN04PhysicsList:

:

ExN04PhysicsList():

G4VUserPhysicsList()

{

//defaultcutvalue(1.0*mm)

defaultCutValue=1*mm;

}

////////////////////////////////////////////////////////////////////////////////////

用户可以为gamma射线,电子,正电子,或者为不用的几何区域设定不同的截断值.这种情况下,由于Geant4的物理过程(特别是计算能量损失的物理过程)是根据特定的截断值编写的,它们输出就会改变,所以用户应该特别小心.

为不同

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2