GEANT4 初学

关键词Geant4、入门、能谱

系个人原创,未经同意请勿转载。  cnscott的博客

Geant4 是一个针对物理问题封装好的C++工具包,一个C++类的集合。我们在使用的过程中主要是对于工具包中的接口类进行重载和实现。

使用 Geant4 工具包的主要步骤:

1. 继承关键接口类,重载其中所有的关键函数  cnscott的博客

    这些个类和函数是运行Geant4程序所必需的,必需被继承和重载并在main()函数中调用。具体的类和函数如下:

G4VUserDetectorConstructionl类

  • Construct()                   //建立整个空间结构和材料,注册探测器(Sensitive Detector

G4VUserPhysicsList

  • ConstructParticle()       //注册输运过程要考虑的粒子
  • ConstructProcess()      //注册不同粒子对应的物理过程
  • SetCuts()                      //设置不同粒子的截断值

G4UserPrimaryGeneratorAction

  • GeneratePrimaries()     //产生粒子

2. 编写自己的mian()函数,添加核心代码  cnscott的博客

 //运行管理器

G4RunManager* runManager = new G4RunManager;

 //探测器

G4VUserDetectorConstruction* detector = new MyDetectorConstruction;

runManager->SetUserInitialization(detector);

 //物理过程

G4VUserPhysicsList* physics = new MyPhysicsList;

runManager->SetUserInitialization(physics);

 //粒子产生

G4VUserPrimaryGeneratorAction* gen_action = new MyPrimaryGeneratorAction;

runManager->SetUserAction(gen_action);

 //初始化Gent4内核

runManager->Initialize();

 //进行输运计算

G4int numberOfEvent=1000000;

runManager->BeamOn(numberOfEvent);        //一个程序中可以有多个BeamOn

3. 获得计算结果  cnscott的博客

首先要明确RunEventStep所代表的不同概念。Run是指程序的一个运行周期,比如BeamOn 函数从开始执行到执行结束就是一个RunEvent 是一个事件,比如一个源粒子的整个输运过程。而Step是指粒子两个碰撞点之间这一部分。因此,他们之间的关系为Run>Event>Step。也就是说,一个Run包含多个Event,一个Event包含多个Step。在输运过程中,一个Event的所有Step都完成之后才会开始下一个Event,一个Run的所有Event都完成后才会开始下一个Run(如果存在的话)。

重载相关类和函数来获取关心的物理信息。这些类和函数并不是必需的,可以根据需要来重载相应的类和函数。几个常用的类和函数如下:

G4UserRunAction类

  • BeginOfRunAction()               //每个Run开始时被调用
  • EndOfRunAction()                  //每个Run结束时被调用

G4UserEventAction类

  • BeginOfEventAction()             //每个Event开始时被调用
  • EndOfEventAction()                //每个Event结束时被调用

G4UserSteppingAction类

  • UserSteppingAction()             //每个Step完成时被调用

举个一个简单的例子,如果我们想要得到能谱数据,可以在G4UserRunAction类中设置一个用于存储能谱数据的成员变量数组,在BeginOfEventAction()函数中对沉积能量清零,在UserSteppingAction()函数中对每一步的沉积能量进行累加,在EndOfEventAction()中根据沉积能量对数组进行寻址加1操作,最后在EndOfRunAction()中将该数组的值保存到文件中或进行其他处理。不同类之间的数据传递可以使用指针、专用类或者全局变量来实现。当然上述过程并不是得到能谱数据的唯一途径,使用Geant4内置的MultiFunctionalDetector PrimitiveScorer或者编写自己的Sensitive Detector子类同样可以实现。cnscott的博客

由于是初学者,只是对自己学习的一些知识进行简单的总结,错误之处在所难免。可视化、减小方差技巧和并行计算等内容将是下一步学习的重点。


  • 1
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值