粒子追踪在Geant4中的实现
1.问题描述
在Geant4中可以实现任意粒子的的追踪,如下图绿色的线条为粒子的每一步输运。可以获取粒子每一步的信息,以此实现特制功能,如筛选特定反应产生的伽马、某种反应生成的所有粒子,只发生一种反应的粒子等等,类似特殊需求。因此我们可以通过打印粒子的每一步信息,撰写筛选条件,实现粒子的追踪。
2.解决方案
获取当前track或step的信息,然后根据track或step提供的方法追踪粒子,接下来讲例举常用的几种方法,可以通过提供的几种方式,实现粒子信息的获取,进而根据用户自己的需求,实现具体粒子的追踪。
2.1 获取当前粒子的坐标位置:
点击查看代码
fTrack->GetPosition().x()
fTrack->GetPosition().y()
fTrack->GetPosition().z()
- 打印示例:
2.2 获取当前粒子的动量和能量沉积,其中动量是通过track获取的,而能量沉积是通过step提供的方法获取:
点击查看代码
fTrack->GetKineticEnergy()
fStep->GetTotalEnergyDeposit()
- 打印示例:
2.3 获取TrackLength或StepLength:
点击查看代码
fStep->GetStepLength()
fTrack->GetTrackLength()
- 打印示例:
2.4 获取粒子当前所在的几何体的Volume:
点击查看代码
fTrack->GetVolume()->GetName()
- 打印示例:
2.5 获取当前粒子发生的物理过程反应:
点击查看代码
const G4VProcess* process = fStep->GetPostStepPoint()->GetProcessDefinedStep();
G4String procName = " UserLimit";
if (process) procName = process->GetProcessName();
if (fStepStatus == fWorldBoundary) procName = "OutOfWorld";
- 当粒子输运到了世界,并再下一步输运出世界以后,将无法通过“fStep->GetPostStepPoint()->GetProcessDefinedStep()”方法获取当前过程,所以需要进行判断。打印示例如下,非弹性散射:
2.6 打印当前粒子生成的所有次级粒子:
点击查看代码
const std::vector<const G4Track*>* secondary = fStep->GetSecondaryInCurrentStep();
size_t nbtrk = (*secondary).size();
if (nbtrk) {
for (size_t lp=0; lp<(*secondary).size(); lp++) {do something}
- 用户可根据上述代码,在循环中打印对应次级粒子的信息,如,次级粒子的名字:
(*secondary)[lp]->GetDefinition()->GetParticleName() - 打印示例:
2.7 基于上述需求,用户也可以在Geant4其他例程中参考代码“SteppingVerbose.cc”中的程序,并将该部分添加自己的项目文件中,然后在初始化文件“ActionInitialization.cc”中添加方法,并调用,如下所示:
点击查看代码
G4VSteppingVerbose* ActionInitialization::InitializeSteppingVerbose() const
{
return new SteppingVerbose();
}
- 接着在宏文件(.mac)中,添加打印信息的程度,就可以得到每个粒子的具体的信息,为粒子的追踪奠定基础,值的注意的是当粒子较多时,打印的信息太过详细,会造成输出文件过大,因此,用户可根据需求打印信息的详细程度,数字越高,信息约详细。
/control/verbose 0
/run/verbose 1
/event/verbose 2
/tracking/verbose 2
打印示例:
3.实际应用
根据粒子追踪方法的打印,以一个中子反应过程为例
- 应用一:可以看到当前非弹产生的所有伽马,根据代码可以打印出当前Gamma;
- 应用二:锁定某个Gamma,根据ParentID追踪该Gamma产生的所有次级粒子:
次级粒子,Parent ID = 24,能量为1.502MeV的负电子为例:
本文作者:阿比西尼亚喵
文字编辑:Geant4Cat
本文链接:https://www.cnblogs.com/Geant4/articles/16469205.html
⛔转载请附上Geant4Cat的原文链接,并通过 E-mail 等方式告知,谢谢!否则举报