http://geant4.web.cern.ch/geant4/
WindowsでGeant4を入れたお話。
皆さん誤解しているかもしれませんが、WindowsでGeant4は動きます。GUIや、他のLinuxにしか対応していないツールや、マルチスレッド関連を除けば、ちゃんと動きます。 深いことをやろうとすると動かなくなることがありますが、とりあえず構造を作って粒子を打ち込むのであればできる。
と思っていたわけだ。こんなに苦労するとは思わなかった(8時間ほど)。詰まったのは G4LIB_BUILD_DLL
をプリプロセッサに追加するところだった。一通り導入方法を書きます。質問があればコメントでどうぞ。
Geant4のWindows + Visual Studioでの導入方法
Geant4の入手
まず、ダウンロードページからデータファイルとコンパイル済みのライブラリを入手しましょう。
http://geant4.web.cern.ch/support/download
いまはないので、過去のバージョンをさかのぼってください
https://geant4.web.cern.ch/support/download_archive?page=1 など。
「compiled using Visual Studio 2017 (version 15.9.3) on Windows 7, 32 bits, executable installer」と書いてありますが、Windows10でも動きます。
コンパイル済みのライブラリは C:\Program Files (x86)\Geant4 10.5
にインストールしたとします。初期設定でそうなっていると思います。
変更する点は次の絵のPATHを通すところ。とりあえず下記のようにしておこう。
ソースファイルの入手
インストールした先のexamplesにサンプルコードはありますが、分かりにくいです。全然ベーシックじゃねぇです。KEKのGean4初心者講習の実習用ソースコードの方が分かりやすいです。KEK万歳です。
Geant4Tutorial20171129\TutorialMaterials\P01_FirstStep\source
にあります。
直下にある *.cc
と、srcにある *.cc
includeにある *.hh
を使います。
KEK wiki https://wiki.kek.jp/display/geant4/Geant4+Japanese+Tutorial+for+Detector+Simulation+2017
ソリューション、プロジェクトを作る
Visual Studio 2017で、適当な名前を付けて作ってください。
先ほどの *.cc
*.hh
を全部コピーして、ソースファイルとヘッダーファイルに突っ込みます。正しい流儀ではありませんが、気にしたら負けです。
プロジェクトの設定
Visual Studio内で、インクルードパスを設定し、ライブラリファイルを設定します。
- インクルードパス: プロパティ→構成プロパティ→VC++ディレクトリ→インクルードディレクトリ
C:\Program Files (x86)\Geant4 10.5\include\Geant4
- ライブラリファイル: プロパティ→構成プロパティ→リンカー→入力→追加の依存ファイル
C:\Program Files (x86)\Geant4 10.5\lib\*.lib
適宜インストール先に置きかえてください。
いくつかのプリプロセッサを設定する必要があります。プリプロセッサは プロパティ→構成プロパティ→C/C++→プリプロセッサ→プリプロセッサの定義に、
G4LIB_BUILD_DLL WIN32 _CRT_SECURE_NO_WARNINGS
を設定してください。
上から、DLLを呼び出す(dllimport
を使う)設定、Windowsのヘッダにするための設定、古いCの関数でエラーを出さないための設定です。
環境変数
環境変数のpathに C:\Program Files (x86)\Geant4 10.5\bin
を追加しましょう。
データファイルの環境変数は適宜下記のものを設定してください。使う物理リストによっては他の変数を要求されることもあります。
G4ENSDFSTATEDATA=C:\G4ENSDFSTATE2.2 G4LEDATA=C:\G4EMLOW7.7 G4LEVELGAMMADATA=C:\PhotonEvaporation5.3 G4SAIDXSDATA=C:\G4SAIDDATA2.0 G4PARTICLEXSDATA=C:\G4PARTICLEXS1.1
以前は G4NEUTRONXSDATA=C:\G4NEUTRONXS1.4
が必要だったが、G4PARTICLEXSDATAに統合された?
コードの修正
下記のようなエラーが出ると思います。
Geant4\Geometry.cc(43): error C2039: 'Invisible': 'G4VisAttributes' のメンバーではありません。 Geant4\G4VisAttributes.hh(68): note: 'G4VisAttributes' の宣言を確認してください Geant4\Geometry.cc(43): error C2065: 'Invisible': 定義されていない識別子です。
Geometry.cc
の43行目を下記のように修正してください。
logVol_World->SetVisAttributes (G4VisAttributes::GetInvisible());
動かしてみる
P1というサンプルコードを動かすと、次のようにコンソールに表示されて止まります。ここにコマンドを入れていくと、粒子を買えたりビームを打ったりすることができます。warningが出ていますが、とりあえず気にしません。なぜ出るのかエラい人教えてください。
************************************************************** Geant4 version Name: geant4-10-05 (7-December-2018) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 : NIM A 835 (2016), 186-225 WWW : http://geant4.org/ ************************************************************** <<< Geant4 Physics List simulation engine: FTFP_BERT 2.0 FTFP_BERT : new threshold between BERT and FTFP is over the interval for pions : 3 to 12 GeV for kaons : 3 to 12 GeV for proton : 3 to 12 GeV for neutron : 3 to 12 GeV ### Adding tracking cuts for neutron TimeCut(ns)= 10000 KinEnergyCut(MeV)= 0 Available UI session types: [ Win32, GAG, csh ] -------- WWWW ------- G4Exception-START -------- WWWW ------- *** G4Exception : UI0002 issued by : G4UIExecutive::G4UIExecutive() Specified session type is not build in your system, or no session type is specified. A fallback session type is used. *** This is just a warning message. *** -------- WWWW -------- G4Exception-END --------- WWWW ------- Idle>
講義資料の「ユーザ・アプリケーション作成の基礎」に使い方が載っています。コマンドを実際に打ちながら、色々動かしてみましょう。
https://wiki.kek.jp/display/geant4/Geant4+Japanese+Tutorial+for+Detector+Simulation+2017
ソースコードを書く
好きにソースコードを書きましょう。例えば、Geant4でHello World!を書くには次のようにするそうです。
#include <G4coutDestination.hh> int main() { G4cout << "Hello world!" << G4endl; }
IO部分はとりあえずの実装で良いなら、 std::cout
や std::ofstream
を使っても動きます。
では、良いシュミレーションライフを。