前面简单介绍了探测器的几何定义和材料的简单定义,本次接着学习手册中的探测器的定义和响应
深入的学习一下探测器这一块的内容。后续会接着讨论探测器定义所涉及的类以及它们的源代码。
write by jack in hubei 2019.7.26 14:55
探测器的定义要求探测器本身几何形状的描述,它们的组成材料及电学特性,还有它们的可视化属性以及用户自定义属性。探测器单元的几何描述关注的是它们的实体模型定义以及它们的空间位置,还有就是它们的逻辑关系。
G4使用“逻辑体”的概念来管理这些探测器的单元属性的描述,使用“物理体”的概念来管理探测器单元空间位置及它们的逻辑关系的描述,使用"实体“的概念来管理探测器单元实体模型的描述。
一 实体(solid)
实体(solid)的构建遵循STEP标准,有Constructive Solid Geometry (CSG) representations和Boundary Represented Solid (BREP)。不同的描述适合于不同的目的,不同的应用,不同的复杂性要求和详细程度。CSG 描述通常有较好的性能和容易使用的特点,但是它不能像 CAD 系统那样生成一些复杂的实体。BREP 描述可以处理更广的拓扑结构、生成最复杂的实体,因此允许用来和 CAD 系统交换模型数据。所有建立的实体通过使用适当的方法和流操作符可以方便的提供流输出。
(1) CSG实体
CSG 实体是直间作为 3D 元素定义的,它们通过尽量少的参数来定义它们的形状、大小。这
些 CSG 实体有 Boxes(盒子), Tubes and their sections(圆柱及其截面), Cones and their sections(圆锥及其截面), Spheres(球), Wedges(梯形), and Toruses(圆环面)。
相关函数的构造函数等到需要用的时候在查
(2)使用布尔运算定义实体
简单的实体可以通过布尔运算被组合起来,可以使用union运算将一根柱体和一个半球组合起来。
建立一个”布尔“实体要求:
1 两个实体
2 一个布尔运算符:合union,交intersection,差subtraction
3 可选的,用于第二个实体的变换
注意:在“布尔”实体中,粒子跟踪过程用于 navigating 的开销是正比于组成该实体的子实
体的数目(对于目前的实现方法)。所以,用户必须小心,在一些敏感区域的几何描述,不
要大量使用不必要的“布尔”实体。下面简单列举相应函数
G4Box box1("Box #1",20,30,40);
G4Tubs Cylinder1("Cylinder #1",0,50,50,0,2*M_PI);
G4UnionSolid b1UnionC1("Box+Cylinder", &box1, &Cylinder1);
G4IntersectionSolid b1IntersC1("Box Intersect Cylinder", &box1, &Cylinder1);
G4SubtractionSolid b1minusC1("Box-Cylinder", &box1, &Cylinder1);
这个等到需要用到的时候可以查相应的函数,在这里不详细讨论。
(3) Boundary Represented (BREPS) Solids
BREP 实体是通过它们的边界描述定义的。这些边界可以是平面也可以是二次曲面,这些曲
面还可以被裁剪,表面还可以有蚀洞。例如 polygonal, polyconical, 和 hyperboloidal 实体是
一些基本的 BREPS 实体
二 逻辑体
(1) 逻辑体定义
逻辑体管理那些与给定实体和材料的探测器单元有关的信息,与它们在探测器中的物理位置无关。
当一个逻辑体作为母体时,它知道在其内部包含的物理体是什么。一个逻辑体描述了一个没有被指定位置
的实体的层次结构,而这些实体(物理体)直接有明确定义的位置关系。创建物理体实际就是放置一个逻辑体的实例。
这个层次结构可以被重复使用(除了世界以外,母体和子体的意义都是相对的)
一个逻辑体同时也管理与可视化属性相关的信息和用户定义的,与粒子跟踪,电磁场或截断相关的参数
G4LogicalVolume( G4VSolid* pSolid,
G4Material* pMaterial,
const G4String& Name,
G4FieldManager* pFieldMgr=0,
G4VSensitiveDetector* pSDetector=0,
G4UserLimits* pULimits=0,
G4bool Optimise=true )
(2) 子探测器区域 Sub-detector Regions
在复杂的几何设置中,例如在粒子物理实验中的大型探测器,将整个探测器设置中具有特定
功能的部分(子探测器)作为一个特定的逻辑体来处理是非常有用的。在这样的设置中,通
过对不同子探测器设置特定的截断值,可以提高模拟的处理速度。这使得可以只在那些需要
的区域进行更详细的模拟。
处于这种需要,探测器区域Region 的概念被引入。一旦探测器的最终几何设置被定义,一个区域可以通过
以下的方法来建立:
G4Region( const G4String& rName )
G4Region* emCalorimeter = new G4Region("EM-Calorimeter");
emCalorimeter->AddRootLogicalVolume(emCalorimeter);
一个根逻辑体是第一个逻辑体,位于给定区域的层次结构的最顶层。一旦一个区域被指定给
一个根逻辑体,这个信息将自动的传递到整个逻辑体的树状结构中,以便使每个子体可以共
享同一个区域。如果传递过程中发现某个子树已经存在根逻辑体,那么在这个子树上的传递
过程将被中止。
通过定义一个 G4ProductionCut 对象,并赋值,一个特定的 截断值 可以被指定给特定区域。
emCalorimeter->SetProductionCuts(emCalCuts); 这一块内容也不太懂,后续补充。
三 物理体Physical volumes
物理体指明了那些描述探测器单元的 volumes 的空间位置。在这里,我们可以简单的放置单
个拷贝,也可以按照简单线性方程或者用户指定的函数重复放置这些副本。
一个简单的放置涉及一个变换矩阵的定义,这个矩阵将用于指定要放置的逻辑体的位置。重
复放置使用一个顺序号,按照一个给定的距离,沿给定的方向,复制一个逻辑体。也可以定
义一个参数方程,用于指定一个逻辑体多个副本的位置。这些方法的详细信息将在后面例子分析中讨论。