猪头Geant4讲座(3)
时间:2025-04-20
时间:2025-04-20
G4是采用的gcc编译器,因此其程序结构是和C++一样的。
首先包括有一个主程序main,然后分别包含有子程序src和头文件include
以及其他调用文件others
G4里面为了与C++相区别,程序后缀都是.cc,头文件后缀都是.hh
其中头文件在.cc里面写也没问题,但是那样看起来不方便,建议还是按照c++的习惯一一对应比较好。 那么,关键问题是要进行一个模拟我们都需要写哪些src和include的?
下面我们首先看G4里面的几个基本类,这些基本类基本上是与src一一对应的。
G4RunManager——对应主程序
这个类在主程序中用以初始化模拟信息的,或者形象地说是用于连接子程序的,
而连接方式是通过Set函数来完成的
大家可以从$G4INSTALL/source/run/G4RunManager.hh里面查看各种Set函数,如
public: // with description
inline void SetUserInitialization(G4VUserDetectorConstruction* userInit)
{ userDetector = userInit; }
inline void SetUserInitialization(G4VUserPhysicsList* userInit)
{
physicsList = userInit;
kernel->SetPhysics(userInit);
}
可以说G4RunManager类是贯穿整个程序模拟过程的总线,因此一般说来只能有一个
而开始一次Run的信号则是通过BeamOn函数发出的,其格式是
virtual void BeamOn(G4int n_event,const char* macroFile=0,G4int n_select=-1);
可以通过多次调用BeamOn来实现循环计算。
其余子类包括几何结构类、物理设定类、粒子发射器类(源描述类)、事件处理类、径迹处理类等。 这些类可以按照两种不同的分类方式分类,每种分类方式都可以分为两类。
子类按照重要性分为强制类和可选类。
其中几何结构类(DetectorConstruction)、物理设定类(PhysicsList)、
源描述类(PrimaryGenerator)都属于强制类,是必须有的,缺少任一个程序都无法运行。
而事件处理类(EventAction)、步数据处理类(SteppingAction)、径迹处理类(TrackingAction)、运行处理类(RunAction)
都属于可选类,用户可以通过设定这些类来获取感兴趣的信息,虽然没有这些类程序一样可以运行,但是如果一个都没有的话,
这样的模拟是没有意义的,除非是用来检验几何结构的完备性。
子类按照调用过程分为初始化类和用户干涉类
其中几何结构类(DetectorConstruction)、物理设定类(PhysicsList)属于初始化类,
这两个类在每次Run开始后就对模拟过程进行初始化,之后在粒子发射开始后(BeamOn开始后)就不再继续调用了。
而其余的类则是在每发射一个粒子后都需要调用的,具体调用过程请复习第二讲中的模拟算法。
下面讲一个特殊的类。
上一篇:日常工作准则