Geant4 不完全学习指南5 (探测器的材料几几何定义)基础篇

前面简单的分析学习了G4UImanager 和G4RunManager 中的一些方法和作用,在模拟的过程中,有三个类是用户必须自己派生定义的,探测器的建立,物理列表的使用以及初始粒子的产生。下面的内容将会结合这三个必须的类来学习总结相关的内容,本次先简单介绍探测器材料和几何的定义,下次内容在深入学习探测器响应问题。

基本概念

  G4中的探测器是由大量的几何体组成的。其中最大的一个几何体叫世界(world),其他所有的几何体都是被创建放置在世界(World)中。每个几何体都是通过描述它的形状和物理特性来创建,然后放置在另一个几何体中。当一个几何体被放置在另一个中时,称前者为子几何体,后者为母几何体,用相对于母体的坐标系的坐标指定子体的放置位置。世界(world)只能作为母体来容纳其他几何体,也就是说世界没有母体。

   在建立探测器几何时,首先需要建立一个实体(solid),用来描述几何体的形状,一个实体是指具有固定形状和尺寸的几何体。一个边长 10cm 的立方体和一个半径 30cm、高 75cm 的圆柱体都是具体的实体。

   为了描述几何体的全部属性,使用逻辑题(logical volume)的概念,逻辑题包括实体的所有几何特性,和另外的物理特性:几何体的材料,是否包含电磁场,是否包含探测器敏感单元等等。

   在建立好逻辑题之后,必须描述如何放置几何体,为此,需要建立一个物理几何体(physical volume),用于放置逻辑体的拷贝。

创建一个简单的几何体

1 创建一个实体

  G4Box* experimentalHall_box
            = new G4Box("expHall_box",expHall_x,expHall_y,expHall_z);

这段代码创建了一个叫"expHall_box"的盒子,这个盒子在沿X轴方向从(-expHall_x,expHall_x)

2  创建一个逻辑体几何体

 为创建一个逻辑体,必须首先创建实体和材料,所以,可以使用用上节已经建立的盒子,
 创建一个用氩气(参看有关材料的章节)填充的简单逻辑体:

 G4LogicalVolume* experimentalHall_log
= new G4LogicalVolume(experimentalHall_box,Ar,"expHall_log");

创建一个叫"expHall_log"的逻辑体。

3 放置一个几何体

  如何放置一个几何体?如果已经创建了一个逻辑体,然后你可以决定将这个逻辑体放置到另
一个已经存在的几何体中。然后决定将这个几何体的中心放置到另一个几何体的什么位置,
并且如何旋转。一旦这些都确定了,那么就可以创建一个物理体了。物理体是一个已经放置
的几何体实例,它包含几何体的所有属性。

4 创建一个物理几何体

  通过逻辑体来创建一个物理体。一个物理体是一个已经放置了的逻辑体实例。这个实例必须
被放置在另外一个逻辑母几何体之中

G4VPhysicalVolume* experimentalHall_phys
= new G4PVPlacement(0,  //不旋转    通过该函数来声明定义一个物理几何体的指针
G4ThreeVector(0.,0.,0.),   //子体在母体中的坐标
experimentalHall_log,   //子逻辑体指针
"expHall",        //物理体名
0,           //母逻辑体指针  
false,          //无布尔操作
0);           //物理体的拷贝序号

制定探测器的材料

自然界中的材料(化合物,混合物)都是由元素组成的,元素又是由同位素组成的。因此,在G4中有三个主要的类,每一个类都有一个表作为一个静态数据成员,用于跟踪这些类各自的实例。

G4Element 描述原子属性:
原子序数,
核子数 ,
原子质量,
壳层能量,
和其他量,如原子截面,等等

G4Material 描述物质的宏观属性:
密度,
状态,
温度,
压强,
和其他宏观量,如辐射长度,平均自由程,单位长度能损,等等。

(1) 定义一个简单的材料

通过指定材料名字,密度,摩尔质量和原子数创建了液 Ar。

G4double density = 1.390*g/cm3;
G4double a = 39.95*g/mole;
G4Material* lAr = new G4Material(name="liquidArgon", z=18., a, density);

lAr 为指向该材料的指针,将用于指定一个给定逻辑体的材料:

G4LogicalVolume* myLbox = new G4LogicalVolume(aBox,lAr,"Lbox",0,0,0);

(2) 定义一种分子

通过指定组成成分的分子中各种原子的数目,创建了水这种材料

a = 1.01*g/mole;
G4Element* elH = new G4Element(name="Hydrogen",symbol="H" , z= 1., a);
a = 16.00*g/mole;
G4Element* elO = 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(elH, natoms=2);
H2O->AddElement(elO, natoms=1);

(3)通过质量百分数定义一种混合物

通过指定各种成分的质量百分数,我们创建了空气这种混合物

a = 14.01*g/mole;
G4Element* elN =  new G4Element(name="Nitrogen",symbol="N" , z= 7., a);
a = 16.00*g/mole;
G4Element* elO =  new G4Element(name="Oxygen",symbol="O" , z= 8., a);
density = 1.290*mg/cm3;
G4Material* Air = new G4Material(name="Air",density,ncomponents=2);
Air->AddElement(elN, fractionmass=70*perCent);
Air->AddElement(elO, fractionmass=30*perCent);

(4) 打印材料的信息 

G4cout << H2O;              \\ print a given material

G4cout << *(G4Material::GetMaterialTable());  \\ print the list of materials

上面简单总结了探测器几何体的构建以及材料的简单定义,下一节将深入讨论探测器的构建以及响应!

 

 

  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
定义 LaBr3 探测器的物理过程,需要使用 Geant4 中的物理过程类。以下是一个示例代码,演示如何定义 LaBr3 探测器的物理过程: ```c++ // 定义 LaBr3 探测器材料 G4Material* lBr3 = ...; // 定义 LaBr3 闪烁体和光电倍增管的物理过程 G4ProcessManager* lBr3_PM = lBr3->GetProcessManager(); G4Scintillation* lBr3_Scintillation = new G4Scintillation(); G4OpAbsorption* lBr3_Absorption = new G4OpAbsorption(); G4OpBoundaryProcess* lBr3_Boundary = new G4OpBoundaryProcess(); G4OpMieHG* lBr3_Mie = new G4OpMieHG(); G4OpRayleigh* lBr3_Rayleigh = new G4OpRayleigh(); G4OpWLS* lBr3_WLS = new G4OpWLS(); lBr3_PM->AddProcess(lBr3_Scintillation); lBr3_PM->AddProcess(lBr3_Absorption); lBr3_PM->AddProcess(lBr3_Boundary); lBr3_PM->AddProcess(lBr3_Mie); lBr3_PM->AddProcess(lBr3_Rayleigh); lBr3_PM->AddProcess(lBr3_WLS); lBr3_PM->SetProcessOrdering(lBr3_Scintillation,idxPostStep); lBr3_PM->SetProcessOrdering(lBr3_Absorption,idxPostStep); lBr3_PM->SetProcessOrdering(lBr3_Boundary,idxPostStep); lBr3_PM->SetProcessOrdering(lBr3_Mie,idxPostStep); lBr3_PM->SetProcessOrdering(lBr3_Rayleigh,idxPostStep); lBr3_PM->SetProcessOrdering(lBr3_WLS,idxPostStep); // 设置 LaBr3 闪烁体和光电倍增管的材料属性 G4MaterialPropertiesTable* lBr3_MPT = new G4MaterialPropertiesTable(); G4MaterialPropertiesTable* PMT_MPT = new G4MaterialPropertiesTable(); lBr3->SetMaterialPropertiesTable(lBr3_MPT); PMT->SetMaterialPropertiesTable(PMT_MPT); // 定义 LaBr3 闪烁体和光电倍增管的光学特性 G4double lBr3_Energy[2] = {2.0*eV, 3.5*eV}; G4double lBr3_RIndex[2] = {1.82, 1.82}; G4double lBr3_AbsLength[2] = {5.0*cm, 5.0*cm}; lBr3_MPT->AddProperty("RINDEX",lBr3_Energy,lBr3_RIndex,2); lBr3_MPT->AddProperty("ABSLENGTH",lBr3_Energy,lBr3_AbsLength,2); G4double PMT_Energy[2] = {2.0*eV, 3.5*eV}; G4double PMT_RIndex[2] = {1.50, 1.50}; G4double PMT_AbsLength[2] = {4.0*cm, 4.0*cm}; PMT_MPT->AddProperty("RINDEX",PMT_Energy,PMT_RIndex,2); PMT_MPT->AddProperty("ABSLENGTH",PMT_Energy,PMT_AbsLength,2); ``` 在上述代码中,首先定义了 LaBr3 探测器材料,并使用物理过程类定义了 LaBr3 闪烁体和光电倍增管的物理过程。这些过程包括闪烁过程、吸收过程、边界过程、Mie 散射过程、Rayleigh 散射过程和波长移位过程。接着,定义了 LaBr3 闪烁体和光电倍增管的材料属性,并将它们分配给相应的材料。需要注意的是,材料的折射率和吸收长度需要根据实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值