c++ vs release没有exe_未来安全 | 第一次Geant4培训总结 | 有没有你关注的问题呢?...
Geant4簡介
Geant4是蒙卡工具包,模擬很多粒子,記錄一些統計量,用這些統計量去估計真實的物理實驗的結果。蒙卡模擬程序,從最老的MCNP,到PENELOPE,FLUKA等。
MCNP是用輸入卡片(輸入文件)實現的,在一張輸入卡上填好幾何、源等設置信息,直接運行一個已編譯好的程序,就能讀輸入文件,實現模擬。
Geant4的不同之處在于提供的不是一個編譯好的程序而是工具包,工具包可理解為第三方庫如OPENCV,通過自己編程調用這個工具包來實現自己需要的模擬。為了便于大家使用,Geant4用C++編寫,因為C++有繼承等特性,可以讓使用過程相對簡單。雖說Geant4是一個相當復雜的系統,源代碼有上百萬、上千萬行,但是對于大多數應用來說,只需了解可能不到1%的部分,那些復雜的東西大家日后用到的時候自學就行。
Geant4培訓
預期受眾:未來安全興趣團隊同學,大二大三本科生,之前未接觸過G4工具包
培訓出發點:系內無Geant4的課程,科研、畢設中卻很可能用到
培訓目標:簡單的入門,讓大家上手會用,不怕遇到問題。
完成一個例子的編譯運行
下面給大家演示一下,運行、編譯一個例子的過程。使用的例子是B2a不是B1,B1大家基本上都用過。此例程為Geant4安裝自帶。
B2a的文件夾位置定義為\path-to-B2a\
? 1.? 使用cmake生成編譯所需要的文件和配置,第1行:源代碼所在目錄\path-to-B2a\,第2行:編譯的位置,\path-to-B2a\build(新建)。點擊Configure,done后點Generate,done后就完成了。
? 2. ?打開\path-to-B2a\build,其中sln文件是visual studio用的工程,使用visual studio打開。
? 3. ?在windows上無法使用visual studio自帶的【Debug】功能進行調試,所以我們直接選【Release】,【生成解決方案】,來編譯出我們需要的程序。
?4. ?編譯結果在\path-to-B2a\build\Release,只有一個.exe文件。由于例子的運行需要一些.mac文件支持,我們回到\path-to-B2a\build,把.mac文件拷貝進去,結果如圖。注意,運行程序有輸入文件是常識,如果大家發現報錯,一個常見原因就是沒有把輸入文件放進去。
? 5. ?在\path-to-B2a\build\Release打開Power Shell,輸入命令:
回車,就有了運行結果:
Geant4的最簡例子
我們來看一個最簡單的可運行的Geant4例程需要哪些代碼。由于Geant4改版后,其例程還是稍顯復雜,我們做了修改,在B1(Geant4自帶)前又加了B0例子,源碼在【資料庫】里。編譯好后,打開sln文件,在“exampleB0”處閱讀代碼。
首先我們看有主函數的代碼文件:Source Files\exampleB0.cc 程序的入口點是main()函數,運行順序是從上到下。
隨機數生成器和種子:蒙特卡洛模擬本質上是隨機實驗,因此需要選擇一個隨機數發生器來決定粒子的徑跡、行為等。Geant4提供了多種隨機數生成器,一般選個默認的,如此處。如果對隨機數和性能有特別高的要求,也可以選擇其他隨機數生成器。選擇隨機數生成器后,我們在調試時,需要2次模擬結果一模一樣,控制方法就是把隨機數發生器的種子人為確定下來,2次模擬的種子也一模一樣。
RunManager:管理程序各種運行的基本的“管家”,把它new出來就行
設置模擬場景、幾何:蒙卡模擬是對真實世界建模,放出一些粒子進行輸運、反應等的過程,所以我們需要對想模擬的場景建一個幾何模型。我們通過繼承Geant4的一個類G4VUserDetectorConstruction建立自己的類B0DetectorConstruction, 在這個類中完成虛擬函數等,建立幾何模型。
然后讓runManager知道這個幾何模型。
設置物理過程
Geant4涵蓋的能量范圍很廣,從幾eV,如DNA模擬、可見光光子模擬,到GeV,TeV這樣的高能物理模擬,都有對應的物理模型,還可添加用戶自定義的物理模型。因此,對于特定用途,我們只需要關注范圍的一段,就可以選擇合適的物理模型進行模擬。這里我們選擇了內置的QBBC。下一行是設置它的可視化。
像模擬X射線、光子的作用時,當其能量特別低時,物理過程與幾百keV時的過程截然不同。這樣的低能物理模擬需要耗費特別長的時間而且可能帶來各種各樣問題,因此我們需要設置一個截斷。在別的蒙卡程序里,一般是通過截斷能量實現的,如低于1keV的光子/電子認為其能量就地沉積掉。Geant4使用截斷長度(與截斷能量有一個換算關系),這樣能保證在不同材料中,模擬的幾何精度是一致的。對于不同粒子,截斷長度可設置成不同數值。
物理過程這樣就設置好了,同樣需要讓run Manager知道。
設置用戶自定義行為,如統計:接下來這三塊RunAction, EventAction, StepAction涉及到的主要是粒子模擬過程中的統計,比如在某塊區域沉積了多少能量/注量,等物理量的統計,以及高級技巧,如讓粒子偏向于往某些方向走。三塊都是通過繼承一些類進行的用戶自定義行為,每次定義完以后也要讓runManager知道。
設置源:輻射模擬需要知道是什么樣的源,發射什么樣的粒子,通過這樣一個Primary設置。設置完后也要讓runManager知道。
初始化:我們把所有用戶自定義行為設置完成后,需要告訴runManager所有初始化已經完成,可以開始模擬了。
(非必須)UI交互:G4不只提供編程功能,還可以通過一些文本輸入命令的方式,控制它的一些粒子行為。下面這段通過UI交互方式進行,在編程里非必須,我們先跳過。
模擬的開始到結束:2代表我們在1次run里模擬2個初始粒子,以后大家肯定不止模擬2個,會多至1e7,1e8個之類,就在這里改。
完成了所有模擬后,我們就把runManager銷毀掉。main函數也結束了。
C/C++編譯過程簡介
本部分是易錯基礎。
像C/C++這種編譯型的語言,需要完成從源代碼(.c)到可執行文件(.exe),這個流程分成兩大步驟:【編譯】,從.c這一人能讀懂的高級語言翻譯到.obj這一機器能讀的語言。由于我們會把代碼放在不同的.cpp里,也由于需要一些外部的庫來幫助我們進行編程,因此會有一個【鏈接】的過程,把中間產物.obj整合調整,變成可執行的.exe。
3個常見錯誤
使用第三方庫時的常見問題,在三個階段都可能出現:
編譯錯誤:如使用第三方庫時,找不到"xxx.h"。原因是這些文件未放在你當前目錄下,程序不知道去哪找。需要做一些設置來找到它。
鏈接錯誤,無法解析的外部符號,"xxx"未定義。原因是你引用了一些外部第三方庫的函數,但是這些庫的實現你沒有告訴程序在哪。
運行錯誤:如雙擊exe程序運行時,彈出報錯 缺少"xxx.dll"。原因是一些第三方庫可能已經把程序編成了一個二進制形式放到某處,形成了一個動態鏈接庫,但是你并沒有告訴程序這些動態鏈接庫在哪。
接下來在visual studio里講這三個問題分別在哪里解決。在VS左側找到exampleB0,右鍵,【屬性】,打開exampleB0的屬性頁,【VC++目錄】
對應的解決方法
問題解決(與上節序號對應):
設置【包含目錄】(include),成功后能在上部框中找到。
"xxx"未定義——把.lib等靜態鏈接庫放進【庫目錄】;
另一方面,設置【附加依賴項】,靜態鏈接庫.lib也需要放全,這樣【鏈接】時才知道去哪找。
設置【環境變量】,這對于windows和linux都差不多。把動態鏈接庫.dll的位置都放進【環境變量】
報錯怎么辦?
報錯是一個非常非常常見的情況!
自己先看提示,報的是什么錯,自己嘗試解決問題,可借助搜索引擎
自己解決不出去問別人,注意盡量提供全面的信息,如截圖截完整(而不是只兩行紅字),以提高溝通效率和解決幾率。盡量描述清自己在什么過程、什么步驟、遇到了什么樣的錯誤
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一般。
Q:在windows下編譯效率如何?可以并行嗎?
A:首先,windows VS的性能是取決于你的版本的,比如是企業版還是專業版、Community版。其次,windows也是可以多線程編譯的,不過大家寫的程序一般很小,不需要用到多線程。多線程可以通過修改VS的設置實現,類似問題大家可以去VS文件里找答案。
未來安全興趣團隊旨在為對“安全”這一主題感興趣的同學提供一個寬泛的科研與交流平臺。包括輻射成像、醫學物理、輻射防護、核能安全、公共安全等眾多學科方向。
文案 | 賈以涵
排版 | 胡家奇
-------------------------------------------
天工物華
歡迎關注天工物華
記錄校園生活,與你一同走向未來
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的c++ vs release没有exe_未来安全 | 第一次Geant4培训总结 | 有没有你关注的问题呢?...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全球首发骁龙870 摩托神机edge s
- 下一篇: 9010米!中石油创国内陆上最深气井纪录