Geant4User'sGuide-ForApplicationDevelopers-1.简介2.运行Geant4–一个简单的例子1.如何编写main()函数2.如何定义一个探测器的几何形状3.如何指定探测器的材料4.如何指定粒子5.如何指定物理过程6.如何产生一个初级事件7.如何生成(Make)一个可执行的程序8.如何建立一个交互式的程序接口(Session)9.如何运行一个程序10.如何可视化探测器和事件3.工具包基本组成1.G4的各个功能模块和它们的功能2.全局类3.单位系统4.Run5.事件6.事件发生器接口7.事件偏倚技巧4.探测器定义和响应1.几何2.材料3.电磁场4.Hits5.数字化6.对象的持续性5.粒子跟踪和物理过程1.粒子跟踪2.物理过程3.粒子4.产物阈值与截断值5.分区域截断Geant4User'sDocumentsVersion:Geant45.2June20036.用户行为(Actions)1.必要的用户行为(Actions)和初始化2.可选的用户行为(Actions)7.应用程序的通讯和控制1.内建命令2.用户接口--定义新的命令8.可视化1.可视化介绍2.什么可以被可视化?3.与可视化有关的属性4.折线,标记和文字5.生成一个可视化的可执行程序6.可视化引擎7.交互式可视化8.非交互式可视化9.内建可视化命令10.其他9.例子1.入门例子2.高级例子10.附录1.Geant4程序编译提示2.数据分析接口3.CLHEP基本类库4.C++标准模板库5.Makefiles和Geant4环境变量6.使用MSVisualC++编译Geant47.开发和调试工具Abouttheauthors1.简介1.1本手册内容《TheUser'sGuideforApplicationDevelopers》是用户在学习和开发基于Geant4的探测器模拟程序时,应该阅读的第一手册。手册主要讲述:•向初学者介绍面向对象的Geant4探测器模拟工具包,Geant4User'sGuideForApplicationDevelopers•介绍了各种可用工具和他们的使用方法,并且•提供了一些对开发、运行模拟程序非常有用的信息手册只是对工具包的一个概述,而不是详尽的描述。除一些特殊的工具外,没有讨论相关的物理过程。Geant4中所涉及的相关物理过程在《PhysicsReferenceManual》中有详细讨论。Geant4类的功能和设计细节可以在《User'sGuideforToolkitDevelopers》中找到,它的全部代码清单在《SoftwareReferenceManual》中给出。Geant4是一个用C++语言编写的、全新的探测器模拟工具包。读者需要有面向对象的C++语言的基本知识。不需要有早期用FORTRAN编写的Geant版本的知识。虽然Geant4是个相当复杂的软件系统,但对于开发探测器模拟程序来说,只需要了解相对很少的一部分。1.2如何使用本手册第2章,”运行Geant4-一个简单的example”。Geant4非常简单的介绍。讲述了编写和运行一个简单的Geant4应用程序的方法。Geant4的新用户应该首先阅读这一章。强烈推荐在阅读本章的时候在你的计算机上安装并运行一个Geant4工具包。当我们在讨论Geant4提供的example时,我们可以运行这些例子,这将是非常有益的。在安装Geant4的时候,请查阅《InstallationGuideforSettingupGeant4inYourComputingEnvironment》。第3章,工具包基本组成讨论Geant4的基本问题,例如类属于哪个功能模块、和物理单位系统。然后讨论了runs和事件,他们都是一个模拟过程的基本组成单位。第4章,探测器定义和响应描述了如何创建一个特定材料和形状的探测器,并且将这个探测器放置与电磁场中。同时,还描述了如何使探测器对粒子敏感,如何保存相关的信息。第5章,粒子跟踪和物理过程讨论了粒子如何在介质中输运。Geant4的粒子跟踪方法与物理过程一起由工具包提供。本章还讨论了粒子在Geant4中的定义和实现,昀后列出了一个粒子属性清单。第6章,用户行为(Actions)是Geant4提供的一些hooks,通过这些hooks,用户可以执行一些特殊的、定制的任务。第7章,应用程序的通讯和控制概述了用户可用的、用于控制程序执行的命令。在第2章以后,第6、7两章对新用户来说是昀重要的。第8章,可视化探测器几何、粒子径迹和事件的显示。第9章,例子提供了一些入门和比较高级的模拟程序代码,可以不作任何修改进行编译。这些例子非常适用与学习使用Geant4工具包,并可以基于这些例子,开发更加复杂的应用程序。Abouttheauthors2.运行Geant4–一个简单的例子1.如何编写main()函数1.一个main()函数的例子2.G4RunManager类3.用户初始化(Initialization)和行为(Action)类4.G4UImanager类和发送UI用户接口命令5.G4cout和G4cerr2.如何定义一个探测器的几何形状1.基本概念2.创建一个简单的几何体3.选择一个实体(Solid)4.创建一个逻辑几何体5.放置一个几何体6.创建一个物理几何体7.坐标系和旋转3.如何指定探测器的材料1.通常情况2.定义一种简单材料3.定义一种分子4.通过质量百分数定义一种混合物5.打印材料信息4.如何指定粒子1.粒子定义2.截断范围5.如何指定物理过程1.物理过程2.物理过程管理3.指定物理过程6.如何产生一个初级事件1.产生初级事件2.G4VPrimaryGenerator类7.如何生成(Make)一个可执行的程序1.在一种UNIX环境下编译例子1(ExampleN01)2.在Windows环境下编译例子1(ExampleN01)8.如何建立一个交互式的程序接口(Session)Geant4User'sDocumentsGeant4User'sGuideForApplicationDevelopers1.简介2.可用的接口类简述3.建立接口库4.如何使用交互式接口9.如何运行一个程序1.简介2.'Hard-coded'批处理模式3.使用宏文件的批处理模式4.命令行驱动的交互模式5.通常情况10.如何可视化探测器和事件1.介绍2.可视化引擎3.如何将可视化引擎链接到一个可执行文件中4.编写一个包含可视化的main()函数5.Scene,SceneHandler,和Viewer6.可视化程序接口例子7.常用的可视化命令8.探测器几何体的树型结构可视化Abouttheauthors2.1如何编写main()函数2.1.1一个main()函数的例子main()函数包含的内容将因特定的模拟应用不同而不同,因此必须由用户提供。Geant4工具包不提供main()函数,但提供了一个简单的例子指导用户编写自己的main()函数。程序清单2.1.1是一个模拟程序所必须的main()函数的昀简单例子。Geant4User'sGuideForApplicationDevelopersGettingStartedwithGeant4#includeG4RunManager.hh#includeG4UImanager.hh#includeExN01DetectorConstruction.hh#includeExN01PhysicsList.hhmain()函数通过Geant4提供的两个类G4RunManager和G4UImanager,和另外三个类,ExN01DetectorConstruction,ExN01PhysicsList和ExN01PrimaryGeneratorAction,它们是从Geant4提供的类派生的。下一节将对这些类进行讨论。2.1.2G4RunManager类main()函数必须做的第一件事是创建一个G4RunManager类的实例。这是Geant4内核中唯一的一个运行管理类,它必须在main()函数中显式的创建。它控制程序的流程并在一个run#includeExN01PrimaryGeneratorAction.hhintmain(){//构造缺省runmanagerG4RunManager*runManager=newG4RunManager;//设置必须的初始化类runManager-SetUserInitialization(newExN01DetectorConstruction);runManager-SetUserInitialization(newExN01PhysicsList);//设置必须的用户行为类runManager-SetUserAction(newExN01PrimaryGeneratorAction);//初始化G4内核runManager-initialize();//获取指向UImanager的指针并设置verbositiesG4UImanager*UI=G4UImanager::GetUIpointer();UI-ApplyCommand(/run/verbose1);UI-ApplyCommand(/event/verbose1);UI-ApplyCommand(/tracking/verbose1);//启动一个runintnumberOfEvent=3;runManager-BeamOn(numberOfEvent);//任务结束deleterunManager;return0;}代码清单2.1.1中管理事件循环。当G4RunManager被创建时,其它的管理类同时被创建。它们在G4RunManager被删除的时候自动删除。运行管理类同时管理初始化进程,包括在用户初始化类中的方法。我们必传递所有必须的消息给运行控制进程,以建立并运行一个模拟过程,这些消息包括:1.探测器将如何构建,2.将被模拟的所有粒子和所有物理过程,3.在一个事件中的初级粒子将如何产生和4.其他模拟必须的消息。在这个例子中,这些代码是runManager-SetUserInitialization(newExN01DetectorConstruction);runManager-SetUserInitialization(newExN01PhysicsList);分别创建指定探测器几何和物理过程的对象,并传递这些指针给运行管理进程。ExN01DetectorConstruction是一个用户初始化类的例子,它是从G4VUserDetectorConstruction类派生的。这个类描述整个探测器的结构,包括:•探测器的几何形状,•在探测器中使用的材料,•探测器的敏感区域定义和•这些敏感区域的读出方式。同样ExN01PhysicsList是由G4VUserPhysicsList派生,要求用户定义•在模拟中将被使用的粒子,•这些粒子的截断范围和•所有将被模拟的物理过程。在main()函数中的下一个指令是runManager-SetUserAction(newExN01PrimaryGeneratorAction);建立一个粒子发生器的实例并传递指向他的指针给运行管理进程。ExN01PrimaryGeneratorAction是一个用户行为(action)类的例子,它从G4VUserPrimaryGeneratorAction派生。在该类中,用户必须描述初级事件的初始状态。这个类有一个公有虚方法generatePrimaries(),它将在每个事件的开始时刻被调用。详细的描述请阅读2.6节。注意,Geant4不提供任何缺省行为用于产生一个初级事件。下一个指令是runManager-initialize();建立探测器结构,创建物理过程,计算截面并且建立run。昀后intnumberOfEvent=3;runManager-beamOn(numberOfEvent);运行管理进程开始3个顺序执行的事