前面简单的分析学习了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
上面简单总结了探测器几何体的构建以及材料的简单定义,下一节将深入讨论探测器的构建以及响应!