5.1
G4TrackingManager并不直接参与计算过程,它是Event, Track, Tracking这些类数据交换的窗口。
而G4SteppingManager在追踪粒子中发挥了关键的作用。在其中的Stepping中,进行每一步Step的计算,顺序为
- 根据当前粒子的能量状态、空间位置等信息,使用对应的Process产生相应的最小步长(空间步长和时间步长):
发生不同Process的概率,考虑概率的前提下,选择步长最短的反应 - Volume的范围非常重要,例如不同Volume可能有不同的材料构成,而不同的材料会涉及不同的物理反应。因此需要比较粒子的physical-step-length与粒子到边界的距离“Safety”,选择其中最短的
- 更新Track信息,更新SecondaryList
- 启动对应的Process
- 如果粒子停止,调用AtRest Process,该Process也会产生一个步长,决定和其他Process进行的时间顺序
- 或者调用PhysicsList与当前Volume材料的信息,给出与当前与材料
- 查看粒子是否终止
- 更新粒子当前Volu当前ppingAction
- 将数据保存在 Trajectory中
- 其他后处理,直至当前Step完成
其中值得关注的对象是G4Track, 和SecondaryList。大部分我们想要获得的输出都可以通过这两个对象获得,而主要情况下来自于前者。
Process中最重要的包括DoIt和GetPhysicalInteraction两个方法,这两个方法都有三个阶段,分别对应六个函数。这是三个阶段分别是 ,AlongStep, PostSte分, AtRest。Process调用这些方法对G4Track和SecondaryList进行修改,从而保证程勋运行,和记录我们感兴趣的数据项
G4Track保存当前粒子的信息,因此它只保留Step中的瞬态数据,每次Step后其中间值都会被更新。
Step存储每个Step中的瞬态信息,例如Step的两点,和两点之间数据的变化
Trajectory
当EventManager将一个Event交给TrackingManager后,Tracking会创建一个Trajectory对象。
Trajectory对象主要包含的数据成员是粒子定义和TrajectoryPoint指针。TrajectoryPoint对象具体是被TrackingManger的方法创建,对应着track上的每一个step point。
Trajectory可以保存在整个Event产生的信息,因为G4Track和G4Step在每一个Step都会更新数据。而Trajectory提供了一个相对简便的方式,直接在Event层次整合信息
为了实现自定义的Trajectory,用户需要再G4UserTrackingAction::PreUserTrackingAction()中创建一个MyTracjectory对象,并且使用SetTrajectory()让TrackingManger使用我们创建的MyTrajectory对象。
如果还需要实现自定义的TrajectoryPoint对象,那么还需要再自定义的Trajectory中创建对应的AppendStep()方法,在其中调用我们自定义的TrajectoryPoint对象。
6.4
有两种方式可以获得Geant4其中运行获得的信息
- 通过基类,例如Run, Hits, Digitization, Tracking
- 通过对应层次的Information类