物理の駅 Physics station by 現役研究者

テクノロジーは共有されてこそ栄える

Windows11 + Visual Studio 2022で64bit版 GEANT4を動かす (2025年)

https://geant4.web.cern.ch/

Windowsで64bit版Geant4を入れたお話です。32bit版は過去記事参照

これまで、Windows用Geant4は32bit版しか提供されてきませんでしたが、11.3から64bitに対応したようです。

というわけで、インストールしてみましょう。

Geant4 64bit版入手

ダウンロードページからコンパイル済みのバイナリを入手し、インストールします。

https://cern.ch/geant4-data/releases/lib4.11.3.p02/WIN64-VC17.10.3-11.exe

PATHは手動で通すので、Do not add でよく、インストール先はデフォルトの C:\Program Files\Geant4-11.3 としておきましょう。x86 が外れましたね。

ユーザー環境変数の Path に C:\Program Files\Geant4-11.3\bin を追加しておきましょう。

Datasets の入手

https://geant4.web.cern.ch/download/11.3.2.html

からデータセットをダウンロードして展開し、ユーザー環境変数に変数と値をセットします。ここは以前と変わっていません。

G4ABLADATA=C:\geant4\data\G4SAIDDATA2.0
G4CHANNELINGDATA=C:\geant4\data\G4CHANNELING1.0
G4ENSDFSTATEDATA=C:\geant4\data\G4ENSDFSTATE3.0
G4INCLDATA=C:\geant4\data\G4INCL1.2
G4LEDATA=C:\geant4\data\G4EMLOW8.6.1
G4LEVELGAMMADATA=C:\geant4\data\PhotonEvaporation6.1
G4NEUTRONHPDATA=C:\geant4\data\G4NDL4.7.1
G4PARTICLEXSDATA=C:\geant4\data\G4PARTICLEXS4.1
G4PIIDATA=C:\geant4\data\G4PII1.3
G4RADIOACTIVEDATA=C:\geant4\data\RadioactiveDecay6.1.2
G4REALSURFACEDATA=C:\geant4\data\RealSurface2.2
G4SAIDXSDATA=C:\geant4\data\G4SAIDDATA2.0

Visual Studioでプロジェクトを作成

新しいプロジェクトを作成→ 空のプロジェクト C++ → 適当に名前を付けて作成します。まず、Release x64 にします。

ソースファイルに main.cpp を追加し

#include <G4coutDestination.hh>

int main() {
    G4cout << "Hello world!" << G4endl;
}

と書きます。

プロパティ → 構成プロパティ→VC++ディレクトリ

インクルードディレクトリに C:\Program Files\Geant4-11.3\include\Geant4 を追加

ライブラリディレクトリに C:\Program Files\Geant4-11.3\lib を追加

リンカーの入力の追加の依存ファイルに、C:\Program Files\Geant4-11.3\lib に存在するすべての lib のファイル名を書いておきます。

G4analysis.lib
G4clhep.lib
G4digits_hits.lib
G4error_propagation.lib
G4event.lib
G4expat.lib
G4FR.lib
G4geometry.lib
G4geomtext.lib
G4global.lib
G4GMocren.lib
G4graphics_reps.lib
G4intercoms.lib
G4interfaces.lib
G4materials.lib
G4mctruth.lib
G4modeling.lib
G4OpenGL.lib
G4parmodels.lib
G4particles.lib
G4physicslists.lib
G4processes.lib
G4ptl.lib
G4RayTracer.lib
G4readout.lib
G4run.lib
G4ToolsSG.lib
G4track.lib
G4tracking.lib
G4Tree.lib
G4vis_management.lib
G4visHepRep.lib
G4VRML.lib
G4zlib.lib

本当は必要なものだけでいいんですけどね。

ビルドすると

1>C:\Program Files\Geant4-11.3\include\Geant4\tls.hh(73,1): error C1189: #error:                                                                            "No Thread Local Storage (TLS) technology supported for this platform. Use sequential build !"

というエラーが出るはずです。

tls.hh の

#    elif defined(WIN32)
#      define G4ThreadLocalStatic static thread_local
#      define G4ThreadLocal thread_local

この部分を実行する必要があるので、x64版ですが仕方なく

C/C++→プリプロセッサ→プリプロセッサの定義 に WIN32 を追加します。

1>C:\Program Files\Geant4-11.3\include\Geant4\G4EnvironmentUtils.hh(145,24): error C4996: 'getenv': This function or variable may be unsafe. Consider using _dupenv_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>(ソース ファイル 'main.cpp' をコンパイルしています)
1>C:\Program Files\Geant4-11.3\include\Geant4\G4EnvironmentUtils.hh(204,24): error C4996: 'getenv': This function or variable may be unsafe. Consider using _dupenv_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>(ソース ファイル 'main.cpp' をコンパイルしています)

この古い関数に関するエラーを無視するため、プリプロセッサの定義 に _CRT_SECURE_NO_WARNINGS も追加しておきましょう。

C++ 17 以上にしろと言われるので、

1>C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\string_view(12): warning STL4038: The contents of <string_view> are available only with C++17 or later.

構成プロパティ→全般 で C++言語標準を、C++17標準 にします。

これでデバッグなしで開始などをすると、Hello world! が表示されるはずです。

サンプルB1を実行する

Geant4ぽいことをしてみよう。 Geant4 の examples から https://gitlab.cern.ch/geant4/geant4/-/tree/geant4-11.3-release/examples/basic/B1

メインのソースファイル(exampleB1.cc) 、srcフォルダ内のファイルとincludeフォルダ内のファイルをVisual Studioのプロジェクトに追加する。

run2.mac に 設定が書いてあるので、これを引数にして実行してみよう。

ここで設定されている、6 MeVのガンマ線を1000発打ち込んだ時、

/gun/particle gamma
/gun/energy 6 MeV
/run/beamOn 1000

結果は

--------------------End of Global Run-----------------------
 The run consists of 1000
 Cumulated dose per run, in scoring volume : 43.4009 picoGy  rms = 3.89683 picoGy
------------------------------------------------------------

43±4 pico Gy の doseがあったようだ。

210 MeVの陽子を1000発打ち込んだとき、

/gun/particle proton
/gun/energy 210 MeV
/run/beamOn 1000
--------------------End of Global Run-----------------------
 The run consists of 1000
 Cumulated dose per run, in scoring volume : 5.38591 nanoGy  rms = 144.936 picoGy
------------------------------------------------------------

5.4±0.1 nano Gy のdoseがあったようだ。

プリコンパイル済みバイナリではGUIは使えない。何が実行されているかは Geant4 B1 examples などで画像検索してほしい。