文章目录

  • 一、定义粒子
  • 二、Range Cuts范围削减

G4VUserPhysicsList是main( )中的强制用户基类
在该类中必须定义模拟所用的所有粒子和物理过程,也包括范围截止参数range cut-off

  • 用户必须创建一个从G4VuserPhysicsList派生的类,并实现以下纯虚方法
ConstructParticle(); // construction of particles
ConstructProcess(); // construct processes and register them to particles
  • 用户也可重写SetCuts的默认实现方式
SetCuts(); // setting a range cut value for all particles

以下是ConstructParticle()和SetCuts()方法的一些示例,详见2.5 How to Specify Physics Processes

一、定义粒子

  1. G4提供的粒子types:
  • 普通粒子,如电子、质子、伽马
  • 核,如氘核、α核、重离子
  • 夸克,底夸克,胶子

每个粒子都由它自己的class表示,该类派生自G4ParticleDefinition(例外:G4Ions代表所有重核)

  1. 粒子有六大分类:

    • lepton, 轻子
    • meson, 介子
    • baryon, 重子
    • boson, 玻色子
    • shortlived, 短寿命粒子
    • ion,离子
  • 其中每个都在"geant4/source/particles"下的相应子目录中定义
  • 每个粒子类别particle category还有一个相应的粒度库granular library
  1. G4ParticleDefinition类
  • G4ParticleDefinition表征单个粒子属性(只读,不能直接更改),如名称,质量,电荷,旋转等
  • G4ParticlePropertyTableG4ParticlePropertyData中加载G4ParticleDefinition的粒子属性
  1. 如何访问一个粒子Access a Particle
  • 每个particle class类型代表一个单独的粒子类型,每个class有一个单独的对象
  • 这个对象可以通过使用每个类的static method来访问。例外见5.3 Particles

例:
G4Electron类表示电子,成员G4Electron::theInstance指向它唯一的对象
这个对象的指针可以通过静态方法**G4Electron::ElectronDefinition()**获得

  • 默认提供了超过100种类型的粒子,用于各种物理过程,一般不需要定义自己的粒子
  • 每个particle class的唯一对象是在第一次调用其获取指针的静态方法时创建的。
  • 由于粒子是动态对象,应在物理过程初始化之前实例化,因此必须在初始化步骤中显式调用所需的所有粒子类的静态方法
  1. 粒子字典Dictionary of Particles
  • G4ParticleTable类作为粒子字典,提供各种实用方法,如:
FindParticle(G4String name); // 通过名称找到粒子
FindParticle(G4int PDGencoding) // 通过PDG编码找到粒子

**G4ParticleTable**被定义为一个singleton对象,静态方法**G4ParticleTable::GetParticleTable( )**提供了它的指针

  • 对于重离子heavy ions(包括超核hyper-nuclei),对象通过用户和processes的庆庆动态创建,G4ParticleTable类提供创建离子的方法,如:
G4ParticleDefinition* GetIon( G4int atomicNumber,
G4int atomicMass,
G4double excitationEnergy);
//建模期间粒子会自动注册。用户无法控制粒子注册。
  1. 构建粒子Constructing Particles
  • ConstructParticle()是一个纯虚方法,需要调用所有粒子的静态成员函数,确保创建了这些粒子的对象
    Warning:| 除了重离子外,必须定义所有粒子类型,包括初级粒子,以及物理过程中可能出现的次级粒子类型

Listing 2.14:构造一个质子和gentino(用于模拟的虚拟粒子,不会和材料相互作用)

void MyPhysicsList::ConstructParticle()
{G4Proton::ProtonDefinition();
G4Geantino::GeantinoDefinition();
}
  • 但G4里粒子众多,用上述方法一一列举很麻烦,可以直接使用六个utility类,对应了六种粒子类别,执行以下function:

    • G4BosonConstructor
    • G4LeptonConstructor
    • G4MesonConstructor
    • G4BaryonConstructor
    • G4IonConstructor
    • G4ShortlivedConstructor

Listing 2.15: 构造所有轻子

void ExN05PhysicsList::ConstructLeptons()
{// Construct all leptons
G4LeptonConstructor pConstructor;
pConstructor.ConstructParticle();
}

二、Range Cuts范围削减

  • 为避免红外发散,一些电磁过程需要一个阈值,低于该阈值则不会产生次级辐射
  • gamma,电子electrons,正电子positrons都要求该阈值
  • 该阈值定义为距离或range cut-off,将在内部转换为特定材料的能量
  • range阈值应在初始化阶段使用G4VUserPhysicsListSetCuts()方法定义
  • 详见5.5 Cuts per Region

1. 设置cuts

  • a. 阈值在SetCuts()中定义,是G4VUserPhysicsList的虚方法

  • b. 调用SetCuts()之前,应先构建粒子,材料和过程

    • 这个range cut值是对每种材料和每种粒子类型(如电子、正电子和伽马)转换的阈值能量,以便具有阈值能量的粒子在经过range cut距离后停止(或被吸收)
    • range cut值并不表示移动的距离
    • range cut上限是10GeV,要设置更高能量的话,在设置range cut前用“/cuts /setMaxCutEnergy”命令更改限制
    • unique cut value in range用于以一致的方式处理range cut值。对大部分应用,只需确定一个range内的cut值,并将其应用于质子电子正电子
  • SetCuts()具有默认设置,为多有粒子类型提供唯一range cut值

    • defaultCutValue默认设置为1.0mm
    • 可以通过SetDefaultCutValue()更改此值
    • 可以通过“/run/setCut”命令交互更改此值
      warning:不要在event循环内更改cut值,但cut值可以在runs之间改变
  • 设置不同range cut值

    • 使用SetCutValue()方法或“/run/setCutForAGivenParticle”交互命令,可以为gamma电子正电子设置不同的range cut值
    • 但用户必须小心物理输出,因为GEANT4过程(特别是能量损失)的设计符合“unique cut value in range”方式
    • 也可以为每个几何区域设置阈值,详见5.5 Cuts per Region

【G4基础04】2.4 How to Specify Particles相关推荐

  1. python基础04

    python基础04 python2在编译安装时,可以通过参数 -----enable----unicode=ucs2 或 -----enable--unicode=ucs4 分别用于指定使用2个字节 ...

  2. javaSE基础04

    javaSE基础04 一.三木运算符 <表达式1> ? <表达式2> : <表达式3> "?"运算符的含义是: 先求表达式1的值, 如果为真, ...

  3. 【重难点】【Java基础 04】值传递和引用传递、序列化和反序列化

    [重难点][Java基础 04]值传递和引用传递.序列化和反序列化 文章目录 [重难点][Java基础 04]值传递和引用传递.序列化和反序列化 一.值传递和引用传递 1.对比 二.序列化 1.基本概 ...

  4. 【马士兵】Python基础--04(分支结构)

    Python基础–04 文章目录 Python基础--04 顺序结构 单分支结构 双分支结构 多分支结构 嵌套if的使用 条件表达式 pass语句 顺序结构 什么是顺序结构呢?比如说 '''把大象装冰 ...

  5. 滤波器基础04——全通滤波器

    滤波器基础系列博客,传送门: 滤波器基础01--滤波器的种类与特性 滤波器基础02--滤波器的传递函数与性能参数 滤波器基础03--Sallen-Key滤波器.多反馈滤波器与Bainter陷波器 滤波 ...

  6. Excel基础(04)排序与筛选

    Excel基础(04)排序与筛选 一.排序 要选中所有的才排序!不要选中一列 1.1简单排序,所有排序 1.2多条件排序 1.直接排 2.点多次的单次排序 先点数学排序,再语文排序. 1.3按颜色排序 ...

  7. Linux应用编程基础04:Linux线程编程

    目录 1. 线程概念与模型 2. 线程实现方式 2.1 内核级线程 2.2 用户级线程 2.3 组合式线程 3. 线程标识 3.1 概念与实现 3.2 相关函数 3.2.1 pthread_equal ...

  8. Java编程基础04——流程控制语句

    1.顺序结构语句(了解) A:什么是流程控制语句 流程控制语句:可以控制程序的执行流程. B:流程控制语句的分类 顺序结构 选择结构 循环结构 C:执行流程: 从上往下,依次执行. D:案例演示 输出 ...

  9. winform list集合怎么 in过滤_python3基础04字典(dict)和集合(set)

    "pythonic生物人"的第37篇分享. 原创不易,点个"赞"或"在看"鼓励下呗! 摘要 本节梳理python中另外两种容器字典(dict ...

  10. JavaScript基础04【逻辑、复制、关系、相等运算符、Unicode编码表】

    学习地址: 谷粒学院---尚硅谷 尚硅谷最新版JavaScript基础全套教程完整版(140集实战教学,JS从入门到精通) JavaScript基础.高级学习笔记汇总表[尚硅谷最新版JavaScrip ...

最新文章

  1. 软件测试技术篇:UI自动化到底是难是易?
  2. Libgdx学习笔记:分享自己写的异步加载
  3. 中国最美街景,带你一次看个够
  4. 前端学习(2554):组件基础和组件注册
  5. 8 操作系统第二章 进程管理 信号量 PV操作 用信号量机制实现 进程互斥、同 步、前驱关系
  6. 小程序,修改数组或对象中的值,通过input动态修改数组对象中的值
  7. ​选择云服务器的小窍门
  8. SAP 用户账号管理系统
  9. 排序系统 c语言程序设计,c语言程序设计(排序算法).doc
  10. selenium + python环境搭建步骤
  11. 2021美亚团队赛复盘
  12. c语言fat文件系统,【操作系统】简单FAT文件系统实现
  13. 测试用例方法----正交试验(实验)设计法(黑盒)
  14. python修改系统环境变量_Python实战—修改环境变量
  15. 硬件工程师为什么远不如软件工程师?
  16. 百度云智峰会 百度天像打造多媒体新生态
  17. 优先队列默认是小顶堆吗_堆和堆傻傻分不清?进来!包教会!
  18. Error: Corrupted zip: missing XXX bytes.
  19. Linux按键响应测试
  20. 祝您健康:抢救脑溢血患者的神奇秘方:针刺十宣穴,涌泉穴

热门文章

  1. 使用Advanced Installer制作IIS安装包(一:配置IIS和Web.config)
  2. hive中的TextFile转为SequenceFile
  3. delphi调试需要管理员权限程序报错“Unable to create process:请求的操作需要提升”
  4. 那些优美的英文句子一
  5. Python自动化运维之1、Python入门
  6. RabbitMQ之延迟队列
  7. mysql spatial简介_详细介绍mysql索引类型:FULLTEXT、NORMAL、SPATIAL、UNIQUE
  8. Node的文件操作、文件系统、数据流
  9. dh参数逆运动学_UR机械臂运动学正逆解方法
  10. html 在线测试 鱼缸,新做的草缸教程,看1遍你也会做,鱼缸造景其实很简单