c++ vs release没有exe_未来安全 | 第一次Geant4培训总结 | 有没有你关注的问题呢?...

Geant4简介

Geant4是蒙卡工具包,模拟很多粒子,记录一些统计量,用这些统计量去估计真实的物理实验的结果。蒙卡模拟程序,从最老的MCNP,到PENELOPE,FLUKA等。

MCNP是用输入卡片(输入文件)实现的,在一张输入卡上填好几何、源等设置信息,直接运行一个已编译好的程序,就能读输入文件,实现模拟。

Geant4的不同之处在于提供的不是一个编译好的程序而是工具包,工具包可理解为第三方库如OPENCV,通过自己编程调用这个工具包来实现自己需要的模拟。为了便于大家使用,Geant4用C++编写,因为C++有继承等特性,可以让使用过程相对简单。虽说Geant4是一个相当复杂的系统,源代码有上百万、上千万行,但是对于大多数应用来说,只需了解可能不到1%的部分,那些复杂的东西大家日后用到的时候自学就行。

Geant4培训

  1. 预期受众:未来安全兴趣团队同学,大二大三本科生,之前未接触过G4工具包

  2. 培训出发点:系内无Geant4的课程,科研、毕设中却很可能用到

  3. 培训目标:简单的入门,让大家上手会用,不怕遇到问题。

完成一个例子的编译运行

下面给大家演示一下,运行、编译一个例子的过程。使用的例子是B2a不是B1,B1大家基本上都用过。此例程为Geant4安装自带。

B2a的文件夹位置定义为\path-to-B2a\

  1.  使用cmake生成编译所需要的文件和配置,第1行:源代码所在目录\path-to-B2a\,第2行:编译的位置,\path-to-B2a\build(新建)。点击Configure,done后点Generate,done后就完成了。

602db4ea63fca0a2745d77ec17c1159e.png

  2.  打开\path-to-B2a\build,其中sln文件是visual studio用的工程,使用visual studio打开。

e4b6a677c5a0113012466798a71b3062.png

  3.  在windows上无法使用visual studio自带的【Debug】功能进行调试,所以我们直接选【Release】,【生成解决方案】,来编译出我们需要的程序。

c8e7cd7580d33578abeef24a4ea68517.png

 4.  编译结果在\path-to-B2a\build\Release,只有一个.exe文件。由于例子的运行需要一些.mac文件支持,我们回到\path-to-B2a\build,把.mac文件拷贝进去,结果如图。注意,运行程序有输入文件是常识,如果大家发现报错,一个常见原因就是没有把输入文件放进去。

dd901012277dec4ba305d3386d273490.png

  5.  在\path-to-B2a\build\Release打开Power Shell,输入命令:

4d067c1ec0df36195124aa96ae2bea8d.png

回车,就有了运行结果:

ce6fb6208898ad3f8f191baf930393a9.png

Geant4的最简例子

我们来看一个最简单的可运行的Geant4例程需要哪些代码。由于Geant4改版后,其例程还是稍显复杂,我们做了修改,在B1(Geant4自带)前又加了B0例子,源码在【资料库】里。编译好后,打开sln文件,在“exampleB0”处阅读代码。

8f05fa3a504af9c325fdbf5721b1a60f.png

首先我们看有主函数的代码文件:Source Files\exampleB0.cc 程序的入口点是main()函数,运行顺序是从上到下。

  • 随机数生成器和种子:蒙特卡洛模拟本质上是随机实验,因此需要选择一个随机数发生器来决定粒子的径迹、行为等。Geant4提供了多种随机数生成器,一般选个默认的,如此处。如果对随机数和性能有特别高的要求,也可以选择其他随机数生成器。选择随机数生成器后,我们在调试时,需要2次模拟结果一模一样,控制方法就是把随机数发生器的种子人为确定下来,2次模拟的种子也一模一样。

84bbb1c3c0120a85ce81742dab0a11e5.png
  • RunManager:管理程序各种运行的基本的“管家”,把它new出来就行

c689097861cff8978c36dcc2e3733603.png
  • 设置模拟场景、几何:蒙卡模拟是对真实世界建模,放出一些粒子进行输运、反应等的过程,所以我们需要对想模拟的场景建一个几何模型。我们通过继承Geant4的一个类G4VUserDetectorConstruction建立自己的类B0DetectorConstruction, 在这个类中完成虚拟函数等,建立几何模型。

ceb4e3eaed46bd436e4d6e0ed78400e0.png
  • 然后让runManager知道这个几何模型。

cac4d9d666d6854ce7de1e58624c582f.png
  • 设置物理过程

    Geant4涵盖的能量范围很广,从几eV,如DNA模拟、可见光光子模拟,到GeV,TeV这样的高能物理模拟,都有对应的物理模型,还可添加用户自定义的物理模型。因此,对于特定用途,我们只需要关注范围的一段,就可以选择合适的物理模型进行模拟。这里我们选择了内置的QBBC。下一行是设置它的可视化。

8cc4be3e6a2f553946a6a6c4b651c232.png
  • 像模拟X射线、光子的作用时,当其能量特别低时,物理过程与几百keV时的过程截然不同。这样的低能物理模拟需要耗费特别长的时间而且可能带来各种各样问题,因此我们需要设置一个截断。在别的蒙卡程序里,一般是通过截断能量实现的,如低于1keV的光子/电子认为其能量就地沉积掉。Geant4使用截断长度(与截断能量有一个换算关系),这样能保证在不同材料中,模拟的几何精度是一致的。对于不同粒子,截断长度可设置成不同数值。

333b000169e6ab68c0c6788ede1c762e.png
  • 物理过程这样就设置好了,同样需要让run Manager知道。

  • 设置用户自定义行为,如统计:接下来这三块RunAction, EventAction, StepAction涉及到的主要是粒子模拟过程中的统计,比如在某块区域沉积了多少能量/注量,等物理量的统计,以及高级技巧,如让粒子偏向于往某些方向走。三块都是通过继承一些类进行的用户自定义行为,每次定义完以后也要让runManager知道。

c6e27ac262686c5b389b3c6df86ba796.png
  • 设置源:辐射模拟需要知道是什么样的源,发射什么样的粒子,通过这样一个Primary设置。设置完后也要让runManager知道。

f506ed3057dcc16f745b6abc9117f554.png
  • 初始化:我们把所有用户自定义行为设置完成后,需要告诉runManager所有初始化已经完成,可以开始模拟了。

2c08c73a8d11bcb9c165433076ec117a.png
  • (非必须)UI交互:G4不只提供编程功能,还可以通过一些文本输入命令的方式,控制它的一些粒子行为。下面这段通过UI交互方式进行,在编程里非必须,我们先跳过。

  • 模拟的开始到结束:2代表我们在1次run里模拟2个初始粒子,以后大家肯定不止模拟2个,会多至1e7,1e8个之类,就在这里改。

  • 完成了所有模拟后,我们就把runManager销毁掉。main函数也结束了。

7839041132257dd5b6c55646871d668f.png

C/C++编译过程简介

本部分是易错基础。

像C/C++这种编译型的语言,需要完成从源代码(.c)到可执行文件(.exe),这个流程分成两大步骤:【编译】,从.c这一人能读懂的高级语言翻译到.obj这一机器能读的语言。由于我们会把代码放在不同的.cpp里,也由于需要一些外部的库来帮助我们进行编程,因此会有一个【链接】的过程,把中间产物.obj整合调整,变成可执行的.exe。

3个常见错误

使用第三方库时的常见问题,在三个阶段都可能出现:

  • 编译错误:如使用第三方库时,找不到"xxx.h"。原因是这些文件未放在你当前目录下,程序不知道去哪找。需要做一些设置来找到它。

  • 链接错误,无法解析的外部符号,"xxx"未定义。原因是你引用了一些外部第三方库的函数,但是这些库的实现你没有告诉程序在哪。

e913dd39c3b898922b2fffa74e040508.png
  • 运行错误:如双击exe程序运行时,弹出报错 缺少"xxx.dll"。原因是一些第三方库可能已经把程序编成了一个二进制形式放到某处,形成了一个动态链接库,但是你并没有告诉程序这些动态链接库在哪。

  • 接下来在visual studio里讲这三个问题分别在哪里解决。在VS左侧找到exampleB0,右键,【属性】,打开exampleB0的属性页,【VC++目录】

55f2237f7a07fbba5207e15d11d52d05.png

对应的解决方法

问题解决(与上节序号对应):

  • 设置【包含目录】(include),成功后能在上部框中找到。

c138b4c10fca77b8059025d19768c653.png8370375872e6de5df13169e785c5af7e.png
  • "xxx"未定义——把.lib等静态链接库放进【库目录】;

9d1bd3cceb6c17c13b972cb1be748341.png
  • 另一方面,设置【附加依赖项】,静态链接库.lib也需要放全,这样【链接】时才知道去哪找。

5fde6d9599a8317fabf2c497310fc4db.png
  • 设置【环境变量】,这对于windows和linux都差不多。把动态链接库.dll的位置都放进【环境变量】

报错怎么办?

  1. 报错是一个非常非常常见的情况!

  2. 自己先看提示,报的是什么错,自己尝试解决问题,可借助搜索引擎

  3. 自己解决不出去问别人,注意尽量提供全面的信息,如截图截完整(而不是只两行红字),以提高沟通效率和解决几率。尽量描述清自己在什么过程、什么步骤、遇到了什么样的错误

Q&A

Q: 种子里面的数代表什么意思?

A:随机数发生器是通过迭代的方式生成一个随机数序列,把这个数放进去就相当于告诉它从哪个数开始迭代,至于迭代算法大家不需要了解。数字无实际意义,但是保证两个随机数序列一样的充分不必要条件是保证两个随机数发生器的种子一样。

Q: 把vis.mac删掉后,它说找不到vis.mac;把vis.mac复制过去之后,它又说Qt library版本不相容,这个该怎么办呢?

A:首先,运行一个例子得看它readme文件里怎么说,如果它要求放vis.mac,就必须放进去。至于Qt版本不相容是安装出现了问题,再去看一下安装的问题吧~

Q:建一个新例子,应该手动把B0改成自己的工程名,还是有可以批量处理的规范方法呢?

A:工程名在cmakelist.txt中多处出现,cmakeList.txt的功能是告诉cmake如何生成【解决方案】,所以选择性地把这些地方改过来就相当于改工程名了,自己尝试一下,改完后重新cmake一般。

544c58547ae9ce95c796dc7c3351b96b.png06058ad2a02561358c0df4c3bd555b73.pngb1537cc110b72b91f48cb4038e86d7df.png

Q:在windows下编译效率如何?可以并行吗?

A:首先,windows VS的性能是取决于你的版本的,比如是企业版还是专业版、Community版。其次,windows也是可以多线程编译的,不过大家写的程序一般很小,不需要用到多线程。多线程可以通过修改VS的设置实现,类似问题大家可以去VS文件里找答案。

ffea8d6f8149e89d60c9ffe16ff3c72d.png716e59e2346dee05c729e93637339abb.png

未来安全兴趣团队旨在为对“安全”这一主题感兴趣的同学提供一个宽泛的科研与交流平台。包括辐射成像、医学物理、辐射防护、核能安全、公共安全等众多学科方向。

文案 | 贾以涵

排版 | 胡家奇

-------------------------------------------

天工物华

cbf3cef3a40d5ab4447808e37ae46221.png

欢迎关注天工物华

记录校园生活,与你一同走向未来

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/438727.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[你必须知道的.NET]第二十一回:认识全面的null

说在,开篇之前 null、nullable、??运算符、null object模式,这些闪亮的概念在你眼前晃动,我们有理由相信“存在即合理”,事实上,null不光合理,而且重要。本文,从null的基本认知开始&#xff0…

html用表格做个人主页页面,利用HTML的表格进行页面布局

在DIVCSS布局出现前,基本上所用的网站都使用table来进行布局。因为table布局很简单,但是table布局不灵活且代码很多。下面将介绍怎样使用table来进行布局。实例:我们来布局一个常见网站后台程序的架构。布局图如下所示:实例代码&a…

cesium坡度坡向分析_景观设计分析图制作技巧到底是什么?

国外设计中,人们都开始用动态分析图啦厉害的不要不要啊!如果你也想做如此高逼格的分析图记得往下看!景观设计分析为:人文,背景,区位,现状,历史,功能,流线&…

采购模板html5,蓝色的采购信息管理系统手机界面wap模板

手机版大气信息管理系统界面模板,采购信息管理wap手机模板下载。资源下载此资源下载价格为4D币,请先登录资源文件列表codedown123-080801-25/business_log.html , 6657codedown123-080801-25/choose.html , 6869codedown123-080801-25/css/animate.css ,…

adobe audition cs6 能打开mpcm文件吗?_Adobe全家桶出现这些漏洞,赶紧上官网下载补丁吧...

导语:Adobe已发布了计划的2020年7月安全更新,涵盖了五个不同产品领域的缺陷:Creative Cloud Desktop;媒体编码器;下载管理器; 真正的服务;和ColdFusion。其中四个错误的严重性被评为严重,而其他…

详解CSS的相对定位和绝对定位

CSS的相对定位和绝对定位 一、Static 静态定位 通常情况下,我们元素的position属性的值默认为static 就是没有定位,元素出现在正常的文档流中,这个时候你给这个元素设置的left,right,bottom,top这些偏移属性都是没有效果的,不会生…

观看实验中微型计算机虚拟拆装演示,虚拟仿真实验 北斗一号微机原理虚拟仿真实验系统64位 v3.0...

下面我们对虚拟仿真实验 北斗一号微机原理虚拟仿真实验系统64位 v3.0文件阐述相关使用资料和虚拟仿真实验 北斗一号微机原理虚拟仿真实验系统64位 v3.0文件的更新信息。虚拟仿真实验 北斗一号微机原理虚拟仿真实验系统64位 v3.0“微机原理虚拟仿真实验”适用于《微机原理》《微…

[你必须知道的.NET]第二十二回:字符串驻留(上)---带着问题思考

走钢丝的人,在刺激中体验快感。带着问题思考,在问题上迸发火花。 或者给问题以答案,或者给答案以问题,你可能永远无法看清全部,但是总能从一点突破很多。事实的关键就在于面对问题,我该如何思考&#xff1…

springboot超详细教程_超详细便当袋教程 || 特殊时期,自己带饭最安心!

持续受疫情影响,闷在家里的广大网友们早就坐不住了。尤其是最近各地复工陆续开始,小心心是不是开始躁动了?终于可以出门放飞自我,放肆吃吃喝喝了嘛?再忍一忍呀同志们!疫情还没结束,病毒还没被消…

[你必须知道的.NET]第二十三回:品味细节,深入.NET的类型构造器

1 引言今天Artech兄在《关于Type Initializer和 BeforeFieldInit的问题,看看大家能否给出正确的解释》一文中让我们认识了一个关于类型构造器调用执行的有趣示例,其中也相应提出了一些关于beforefieldinit对于类型构造器调用时机的探讨,对于我…

[你必须知道的.NET]第二十四回:认识元数据和IL(上)

说在,开篇之前很早就有说说Metadata(元数据)和IL(中间语言)的想法了,一直在这篇开始才算脚踏实地的对这两个阶级兄弟投去些细关怀,虽然来得没有《第一回:恩怨情仇:is和as…

计算机无法找到组件c0000135,电脑显示没有找到dwmapi.dll组件怎么办?计算机丢失dwmapi.dll的处理方法...

很多用户在操作Windows系统的过程中发现“没有找到dwmapi.dll”,如果丢失dwmapi.dll组件会导致应用程序无法运行。其实,大家可以尝试在相关网站下载所缺少的组件,或者是通过第三方软件来进行安装下载,这里小编带领大家看看具体解决…

[你必须知道的.NET]第二十五回:认识元数据和IL(中)

说在,开篇之前书接上回[第二十四回:认识元数据和IL(上)],我们对PE文件、程序集、托管模块,这些概念与元数据、IL的关系进行了必要的铺垫,同时顺便熟悉了以ILDASM工具进行反编译的基本方法认知&a…

小学计算机制作表格教案,小学信息技术《表格的制作》教案

小学信息技术《表格的制作》教案教学目标:知识目标:了解什么是网页表格能力目标:学会插入表格;掌握在表格中插入文字和图片的方法;学会设置单元格属性;掌握拆分和合并单元格。情感目标:通过研究…

[你必须知道的.NET]第二十六回:认识元数据和IL(下)

说在,开篇之前书接上回: 第二十四回:认识元数据和IL(上), 第二十五回:认识元数据和IL(中) 我们继续。 终于到了,说说元数据和IL在JIT编译时的角色了&#x…

计算机电子电路原理图,学看电路原理图入门知识积累 - 全文

一、电子电路的意义电路图是人们为了研究和工程的需要,用约定的符号绘制的一种表示电路结构的图形。通过电路图可以知道实际电路的情况。这样,我们在分析电路时,就不必把实物翻来覆去地琢磨,而只要拿着一张图纸就可以了。在设计电…

[你必须知道的.NET]第二十八回:说说Name这回事儿

1 缘起 老赵在谈表达式树的缓存(2):由表达式树生成字符串中提到,在描述Type信息时讨论FullName或者AssemblyQualifiedName提供完整的Type信息,虽是小话题,但却是值得有聊的话题。在.NET中反应一个Type名称…

library的英语怎么读音_【英语角】———学习方法分享

点击蓝字 关注我们每天学习一点点单词的记忆是一件很让人头疼的事情,但单词又是学习英语的基石,非常重要。那么有什么方法能让单词记忆变得简单有效呢?不妨试试下面这些方法吧。1、卡片记忆自制单词卡片,随身带着,有空…

计算机作文叙事,电脑争夺战叙事作文

电脑争夺战叙事作文在生活、工作和学习中,大家一定都接触过作文吧,作文是通过文字来表达一个主题意义的记叙方法。那么你有了解过作文吗?下面是小编帮大家整理的电脑争夺战叙事作文,欢迎阅读与收藏。这是一个温暖的下午&#xff0…

[你必须知道的.NET]第二十九回:.NET十年(上)

引言 语言是程序开发者行走江湖的手上利器,各大门派的高手在论坛、博客为了自家门派争吵不已早是技术世界中的亮丽风景,虽多少为刚刚踏入江湖的新手提供了思考的素材,但也同时迷惑了初出茅庐的前行方向。 本文不欲计较门派的高下&#xff0…