Geant4をWindowsにインストールし、Qtを利用して表示する

高エネルギー粒子のシミュレーションとして用いられるGeant4をWindowsにインストールして、Qtで表示する方法をまとめる。標準では、OpenGLを使用するのだが、WindowsではOpenGLの表示が正しくないこともあり、汎用性を考慮しQtを使用するこで、ソース編集と確認をMSVCで行い、実際の実行をマルチスレッド処理が可能なUnix環境で行うことができ、開発が便利となる。
(Windows環境で、Geant4 v11.0.0からマルチスレッドでの並列処理が可能になりました。ただし、不安定であるので、長時間のシミュレーションの際には注意が必要。)

**必要な環境**
Windows 10 (11は未確認)
Microsoft Visual Studio 2019 (Communityでも可)。(Intel C++コンパイラーやCMakeでも代用可能であるっぽいが動作検証されてないようである)

##Qtをインストール##
1. Qtの[サイト](https://www.qt.io/download-open-source?hsCtaTracking=9f6a2170-a938-42df-a8e2-a9f0b1d6cdce%7C6cb0de4f-9bb5-4778-ab02-bfb62735f3e5)から、[Open Source Qt Use]にて、Qtのインストーラーをダウンロードする。
2. インストーラーを起動し、 Qt Accountを登録し、[Custom installation]を選択し、[Next]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1278710/997787b8-bbae-cabd-5557-e7a137adb349.png)
3. Qt 5.##の最新版にて、[MSVC 2019 64-bit]を選択する。[Qt 5.##]以下のQt ???を全てチェックする。Qt6はGeant4では非対応なのでインストールしない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1278710/aa464c81-1bad-b858-9999-d13739a975e3.png)
4. Windowsの[システムの環境変数]の[環境変数]の"Path"に%{Qt_install}\5.##\msvc2019_64\binを追加する。(%{Qt_install}は、Qtをインストールしたフォルダ。ディフォルトなら、"c:\Qt")
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1278710/667987df-4d85-258f-e90a-79919dd48051.png)

##Geant4をインストール##
1. Geant4の[サイト](https://geant4.web.cern.ch/support/download)から、最新版のSource files(ZIP形式)をダウンロードする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1278710/959c8fc9-2adb-2ef4-51a1-48aa08a9e3f2.png)
2. Geant4をインストールする任意のフォルダ(%{Geant4_BaseDir})を作成(Cドライブ直下やProgram Files等のシステムフォルダ内は避けるべし)し、ダウンロードしたソースファイルを解凍する。%{Geant4_BaseDir}に、geant4_##_## フォルダ(##はバージョン)ができています。
3. %{Geant4_BaseDir}に、ビルド用のフォルダ(例:geant4-build)とインストールフォルダ(例:geant4-install)を作成する。
4. Windowsメニュー等から[Developer Command Prompt for VS 2019]を起動する。 
5. "cd"コマンドにて、ビルド用フォルダに移動する。
 
```msshell:例
cd %{Geant4_BaseDir}\geant4-build
```
実際には"\"は、円マーク(￥)になります。￥入力後に、フォルダー名の頭文字を入力して、[Tab]キーを押すと、最初のフォルダーが自動入力されます。
6. 以下のコマンドにて、ビルドする。

```msshell:例
cmake -DCMAKE_INSTALL_PREFIX=%{Geant4_BaseDir}\geant4-install -DGEANT4_INSTALL_DATA=ON -DGEANT4_USE_QT=ON -DCMAKE_PREFIX_PATH=%{Qt_install}\バージョン\msvc2019_64 %{Geant4_BaseDir}\ソースファイルフォルダ
```
各引数の説明
-DCMAKE_INSTALL_PREFIX : インストール先を指定
-DGEANT4_INSTALL_DATA : 必要なデータファイルをダウンロードし、インストールする
-DGEANT4_USE_QT=ON : 表示にQtを使用する
-DCMAKE_PREFIX_PATH : ビルド時に追加のライブラリパス(ここでは、Qtのパスを指定)

最後に、ソースフォルダを指定する。
様々なオプションの指定が可能であるので、Geant4の[Installation Guide](https://geant4-userdoc.web.cern.ch/UsersGuides/InstallationGuide/html/installguide.html)を参照すべし。cmakeコマンドで、オプションを追加することは可能であるが、設定を間違えた場合は、geant4-build内のCMakeCache.txtを削除してから、再度、cmakeコマンドを実行するほうが安心である。オプションの意味が分からないなら、何もしないことをお勧めする。
問題がなければ、以下のように
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1278710/c46fc820-8c2c-82ae-7682-89acf78c587b.png)

```msshell:成功の場合
-- Configuring done
-- Generating done
-- Build files have been written to : *****
```
と表示されていれば、成功。
7. 以下のコマンドにてコンパイルを行う。

```msshell:コンパイル
cmake --build . --config Release
```
ツール開発などでデバッグ情報が必要な場合は、ReleaseをRelWithDebInfoに変更する。ただし、Releaseビルドに比べると、最適化が行われないために、パフォーマンスが落ちる。

もし、インターネット接続環境にて、プロキシーが必要な場合は、必要なデータをダウンロードすることができずにビルドエラーとなってしまうので、setコマンドでプロキシーを事前に設定しておく必要がある。

```mshell:プロキシーの設定
set HTTP_PROXY=http://proxy.example.com:PORT_NUM
set HTTPS_PROXY=https://proxy.example.com:PORT_NUM
```
コンパイルするのに、数時間かかるので待機。途中、黄文字で何かが表示されますが、無視して大丈夫です。赤文字の場合は、エラーですので、コンパイル失敗になります。その場合は、設定等を再度見直す必要があります。
もし、コンパイルを中止したい場合は、[Ctrl+C]にて中止要求をする。
成功すると、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1278710/a629259e-ee1b-26ec-e376-66a8c6f5b07d.png)
という感じで終わる。
8. 生成物をインストールする。1時間ぐらいかかります。

```msshell:インストール
cmake --build . --config Release --target install
```
成功すると、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1278710/ae2e25b1-f9e7-72ff-6270-2eab212b6b0c.png)
こんな感じになります。
9. 環境の設定
Windowsの[システムの環境変数]の[環境変数]の"Path"に、"%{Geant4_BaseDir}\geant4-install\bin"を追加。以下の項目をユーザーの環境変数に追加する。%{Geant4_install}は、Geant4をインストールしたフォルダ。注：data以下のフォルダ名に付随するバージョンは、実際に合わせて変更すること。

| 変数 | 値 |
|:-:|:-:|
| G4ABLADATA | %{Geant4_install}\share\Geant4-10.7.1\data\G4ABLA3.1 |
| G4ENSDFSTATEDATA | %{Geant4_install}\share\Geant4-10.7.1\data\G4ENSDFSTATE2.3  |
| G4INCLDATA | %{Geant4_install}\share\Geant4-10.7.1\data\G4INCL1.0  |
| G4LEDATA | %{Geant4_install}\share\Geant4-10.7.1\data\G4EMLOW7.13 |
| G4LEVELGAMMADATA | %{Geant4_install}\share\Geant4-10.7.1\data\PhotonEvaporation5.7 |
| G4NEUTRONHPDATA | %{Geant4_install}\share\Geant4-10.7.1\data\G4NDL4.6 |
| G4PARTICLEXSDATA | %{Geant4_install}\share\Geant4-10.7.1\data\G4PARTICLEXS3.1 |
| G4PIIDATA | %{Geant4_install}\share\Geant4-10.7.1\data\G4PII1.3 |
| G4RADIOACTIVEDATA | %{Geant4_install}\share\Geant4-10.7.1\data\RadioactiveDecay5.6 |
| G4REALSURFACEDATA | %{Geant4_install}\share\Geant4-10.7.1\data\RealSurface2.2 |
| G4SAIDXSDATA | %{Geant4_install}\share\Geant4-10.7.1\data\G4SAIDDATA2.0 |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1278710/3bb87ad1-3f2c-6687-dada-5a65af58c29b.png)
10. インストールの完了
11. 設定を反映させるために、Developer Command Promptを終了させ、PCを再起動させる。
PC起動時に、環境変数を読み込むため、この作業を忘れると、正しく動作しないことが多い。

##サンプルコードでのテスト##

1. 任意の箇所に作業フォルダ%{work_dir}を作成する。
2. "%{Geant4_install}\share\Geant4-10.7.1\examples\basic\B1"を%{work_dir}にコピーする。
3. Developer Command Promptを起動し、cdコマンドを使って、作業フォルダ(カレントフォルダ)を%{work_dir}に移動する。

```msshell:cdコマンドの例
cd %{work_dir}  //%{work_dir}に移動する
cd ..           //一つ上の階層へ移動する
cd folder       //floderフォルダーに移動
```
cd : 作業フォルダを移動するコマンド
4. mkdirを使って、ビルド用のフォルダ(B1-build)を作成する。

```msshell:フォルダの作成
mkdir B1-build
```
mkdir : フォルダを作成するコマンド
5. cdコマンドを使って、作成したフォルダ(B1-build)に移動
6. cmakeコマンドを使って、ビルドする。

```msshell:ビルド
cmake -DGeant4_DIR=${Geant4_install}\lib\Geant4-10.7.1 ..\B1
```
-DGeant4_DIR : Geant4のライブラリパスを指定
..\B1 : ソースフォルダ (一つ上の階層にあるB1フォルダという意味)
成功すると、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1278710/ba5897f3-5b0d-fc12-ef21-0e628abf7016.png)
7. コンパイルする

```msshell:コンパイル
cmake --build . --config Release
```
ツール開発などでデバッグ情報が必要な場合は、ReleaseをRelWithDebInfoに変更する。ただし、Releaseビルドに比べると、最適化が行われないために、パフォーマンスが落ちる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1278710/b7875f87-6968-d545-f35b-638fc92696ef.png)
9. 実行する

```msshell:実行
.\Release\exampleB1
```
.\Release : Releaseビルドによって生成された成果物が格納されているフォルダ
exampleB1 : サンプルの実行exe
成功すると、Qt画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1278710/4e1d981e-ea6a-08e0-f3bb-f343d4624d15.png)