Geant4学习记录(二)A

放射性衰变—rdecay01

  • PhysicsList.cc

ConstructParticle():构造粒子。所有在模拟中需要的粒子的静态成员函数在此方法中调用。
ConstructProcess():指定物理过程。Addtransportation()是注册输运过程。它描述了粒子在时空中的运动。是在所有物理过程粒子跟踪都需要的类。
SetCuts():设置截断。为避免红外发散,一些电磁过程需要设置一个低阈。阈值一下不会产生任何次级粒子。gamma和正负电子都需要设置阈值。阈值应理解为截断范围。它将自动转化为对应于不同介质的截断能量。
这里选用默认截断值:SetCutsWithDefault()

  • DetectorConstruction.cc

由于重点研究放射性核束的衰变,所以只创建一个world,把核素放置在world中心位置进行衰变。

  • ActionInitialization.cc

对PrimaryGenerator,RunAction,EventAction,TrackingAction的初始化“列表”。

  • PrimaryGeneratorAction.cc

定义出射粒子:定义粒子的能量,出射位置和动量方向。
默认的运动学出射粒子是Ne24,粒子type可以用fParticleGun命令来改变,这里我们采用对应核素的.mac文件来入射我们想要的粒子,以及生成对应的root文件。
Geantino : 不发生相互作用,无损。
产生一个初级事件:fParticle->GeneratePrimaryVertex(anEvent)

  • RunAction.cc && EventAction.cc && TrackingAction.cc &&
    SteppingVerbose.cc

用analysisManager设置本次Run的名字,并**它。用for循环创建直方图H1,这里想要运行后直接得到图表。所以在创建后将每个直方图**。

GenerateRun():产生一个新的run。
BeginOfRunAction():保留run的状态信息。打开一个新文件。
BeginOfEventAction():赋给衰变链和可见能量初始值。
PreUserTrackingAction():
给粒子计数并判断粒子类型,填充对应图表(hist1-5)。
创建衰变链,如果是完整衰变链,将粒子强制静止衰变。如果是单个衰变链,kill次级衰变。得到track初始时间。
PostUserEventAction():获取结束时间,如果trackID=1,也就是单个衰变的话,计算初级离子的寿命。
Case 1:次级粒子个数!=0:
获取单次衰变次级粒子的总动能与衰变链中的可见能量。
获取动量平衡(不考虑γ退激)。
填充EkinTot和Pbal直方图(hist6,hist7)
fEvent对可见能量进行迭加。
Case 2:次级粒子个数=0(完整衰变链):
计算总寿命。
填充衰变总寿命图(hist8)。
计算时间窗口中的活动性。
EndOfEventAction():打印衰变链,填充可见能量图(hist9)
EndOfRunAction():
打印计数的粒子数据,能动量平衡,单个衰变链的总时间,总可见能,窗口中的活跃度。
标准化hi=1-5的图表。
写入并保存文件。

source code

在workdir中创建目录并在目录下生成”rdecay01”可执行程序(参考学习记录(一))
./rdecay01
Geant4学习记录(二)A

Co60.mac:设置verboseLevel并发射Co60的脚本。
Session:/control/execute Co60.mac
稍许等待。。所在文件夹出现了root文件:”Co60.root”
接下来要画出生成的10个图表。在所在文件夹中打开窗口,并敲入:
root -l plotHisto.C
Geant4学习记录(二)A
同理,得到Cs137的图表:
Geant4学习记录(二)A
Geant4学习记录(二)A