Languages: EN · IT · 日本語 · FR · 中文
| 品質 | デプロイ | ドキュメント |
|---|---|---|
|
|
|
|
GEMC は、検出器および放射線輸送シミュレーションのためのデータベース駆動型の Geant4 アプリケーションです。Python API により、Geant4 のコードを書くことなく 複雑な検出器構成を定義できます。
検出器の記述は実行ファイルから分離されています。Python で検出器を記述し、ASCII または SQLite データベースに 保存すると、GEMC が実行時にそれらを読み込んで Geant4 シミュレーションを実行します。
C++ プラグインにより、独自の検出器応答、磁場、イベントジェネレータ、出力形式をサポートできます。
- Python を中心とした検出器定義
pyvistaによるジオメトリのプレビューと VTK エクスポート- ASCII、SQLite データベース
- GDML および CAD ファイルからのジオメトリインポート
- インタラクティブな Geant4/Qt 可視化とオフスクリーン画像生成
- 組み込みの感応検出器タイプ:
flux、gPhotonDetector、dosimeter、particle_counter - ASCII、CSV、JSON、ROOT 形式のシミュレーション出力
- GUI、コマンドライン、YAML および LUND ファイルによるイベント生成
- 多重極磁場や ASCII マップを含む磁場サポート
- シミュレーション出力(CSV、ROOT)の読み込みとプロットを行う Python
analyzerモジュール - ジオメトリのバリエーションおよびラン番号に応じた構成
- Linux
amd64およびarm64向けの CI テスト済み Docker イメージを備えた meson ベースの C++ ビルド
GEMC を試す最も手早い方法は、サンプルを利用することです:
counter 検出器を作成し、1000 イベントをシミュレートする最小限のローカルワークフローは次のとおりです:
gemc-system-template -s counter
cd counter
./counter.py
gemc counter.yaml -n=1000
gemc-analyzer counter_t0_digitized.csv totEdep --kind csv --bins 50テンプレートコマンドは counter システムを作成し、
Python スクリプトはジオメトリを構築して SQLite ファイル gemc.db に保存します。
gemc はシミュレーションを実行し、gemc-analyzer は CSV 出力から変数をプロットします。
インストール手順についてはインストールガイドを参照してください。
検出器システムは pygemc を使って構築し、データベースに書き込みます。
フラックス測定用の感応ボックスを定義する例:
from pygemc import GVolume, autogeometry
cfg = autogeometry("examples", "counter")
flux = GVolume("flux_box")
flux.description = "air flux box"
flux.make_box(40.0, 40.0, 2.0)
flux.set_position(0, 0, 100)
flux.material = "G4_AIR"
flux.color = "3399FF"
flux.digitization = "flux"
flux.set_identifier("box", 2)
flux.publish(cfg)ジオメトリスクリプトでは、SQLite または ASCII データベースへの書き込み、PyVista によるジオメトリ表示、VTK.js ファイルのエクスポートを行えます:
./counter.py --factory sqlite
./counter.py -pv
./counter.py -pvvtk counter -pvz 0.25PyVista は通常の GEMC ジオメトリワークフローの一部です。Geant4 を実行する前に検出器ジオメトリを確認したり、 ドキュメント用にポータブルな VTK.js シーンをエクスポートしたり、Python ジオメトリスクリプトの編集中に 配置や回転のミスを発見したりできます。いくつかの例を示します:
![]() Geant4 basic/b2 |
![]() 材料 |
![]() シンチレータバレル |
![]() CLAS12 DC |
![]() ブール演算によるソリッド |
![]() CAD インポート |
GEMC のサンプルから生成された、リンク先のインタラクティブな PyVista シーンを開いてみてください。
GEMC は YAML ファイルと、それと等価なコマンドラインオプションで設定します。コンパクトなステアリングファイルで、 ラン番号、イベント数、ジェネレータ、ジオメトリシステム、出力ストリーマ、ワールドボリュームを定義できます:
runno: 1
n: 100
nthreads: 1
gparticle:
- name: proton
p: 1500
vz: -5.0
gsystem:
- name: counter
factory: sqlite
gstreamer:
- filename: counter
format: csv
- filename: counter
format: root
root: G4Box, 15*cm, 15*cm, 15*cm, G4_AIRバッチモードで実行:
gemc counter.yamlGeant4 GUI で実行:
gemc counter.yaml -guiGeant4 マクロのテキストファイルを実行(次のリリースで導入予定):
gemc counter.yaml -geant4_macro=run.mac
gemc counter.yaml -gui -geant4_macro=vis.mac等価な YAML 設定は geant4_macro: run.mac です。GEMC は初期化と可視化のセットアップの後、GUI または
インタラクティブ端末に入る前にマクロを実行します。相対パスは作業ディレクトリを基準とします。Geant4 は
コメント、エイリアス、ネストされた /control/execute コマンドを処理します。ファイルが見つからない場合や
コマンドが失敗した場合は、非ゼロの終了ステータスを返します。
バッチモードでは、マクロが /run/beamOn 100 などのコマンドでイベント生成を制御します。GEMC はその後に、
-n で指定されたイベント数や -run_weights に基づく割り当てで自動的に実行することはありません。検出器の条件は
-run を使って準備されます。可視化専用のマクロは、ビームオンコマンドを含まない限りイベントを生成しません。
geant4_macro が指定されていない場合、通常のイベント処理は変わりません。
オフスクリーンの Geant4 画像を生成:
gemc counter.yaml -n=10 \
-g4view="[{driver: TOOLSSG_OFFSCREEN, segsPerCircle: 200}]" \
-g4camera="[{phi: -10*deg, theta: 250*deg}]" \
-g4light="[{phi: 160*deg, theta: 120*deg}]"出力レイヤーはプラグインベースです。組み込みのストリーマ形式は次のとおりです:
| 形式 | 備考 |
|---|---|
ascii |
人間が読めるテキスト出力 |
csv |
デジタイズされたヒット、真値情報、生成粒子、追跡された生成粒子を格納するスレッドごとの CSV テーブル |
json |
構造化されたイベント出力 |
root |
ROOT TTree。GEMC が ROOT を有効にしてビルドされている場合に利用可能 |
次のリリースでは、イベント出力にトラックの来歴情報を含める機能が導入される予定です:
gemc counter.yaml -save_original_track
gemc counter.yaml -save_all_ancestors-save_original_track は、各真値情報ヒットの otid に値を設定します。-save_all_ancestors は元のトラック ID も有効にし、
ヒットを生成した各トラックと、その親トラックをすべてたどった連鎖を含む、重複を除いた ancestors バンクを書き込みます。
CSV 出力では別の _ancestors.csv ファイルを使用します。ASCII、JSON、ROOT では、このバンクを
それぞれのイベント出力に含めます。
pygemc は CSV または ROOT 出力を解析するためのユーティリティをいくつか提供します。例えば:
gemc-analyzer counter_t0_digitized.csv totEdep --kind csv --bins 50
gemc-analyzer out.root E --kind root --detector flux --save energy.png例えば、b2 サンプルを
gemc b2.yaml -n=1000 で実行した後、アナライザは次のような結果を生成します:
gemc-analyzer b2_t0_digitized.csv totEdep --kind csv
|
gemc-analyzer b2_t0_true_info.csv E --kind csv --data true_info
|
- GEMC ホームページ
- C++ ロギング — 番号付きメッセージテンプレート、 フィルタリング、エラー処理。テンプレートメソッドは次のリリースで導入予定
- スレッドスケーリング — マルチスレッドのベンチマークと スレッド数を変えて行うスケーリング測定
- プロファイリング — Valgrind callgrind の指標と その読み方
- Python API リポジトリ
- CLAS12 GEMC システムリポジトリ
通常のプルリクエストを通じた貢献を歓迎します。プルリクエストを作成する前に、関連する meson テストを実行し、 変更の範囲を絞ってください。以下を参照してください:
次のリリースでは、C++ ロギングメソッドが番号付きパラメータを含む完全なメッセージを受け付けるようになる予定です:
log->info(0, "Using %1 threads out of %2 available cores.", useThreads, ncores);外部プラグインで文字列連結を使っている呼び出しを移行し、対応する GEMC ヘッダを使って再ビルドしてください。移行用の
*Template() メソッドは転送エイリアスとして残ります。プレースホルダの規則と
動的な診断テキストの扱いについては、ロギングガイドを
参照してください。
英語のログメッセージカタログは、各管理元リポジトリの C++ テンプレートから生成されます。抽出、検証、インストールの
コマンドについてはメッセージカタログを参照してください。ログ出力の言語は
自動検出されます。-language=it はイタリア語を選択し、-language=en は英語を強制します。
翻訳がない場合は英語にフォールバックします。共有の Claude/Codex ワークフローは、ウェブサイトと README の翻訳に
使われるものと同じ平日実行の cron ジョブを通じて、プロジェクトの各言語のカタログを生成します。
次のリリースでは、GUI コントロール、ツールチップ、ジオメトリの説明、アナライザのメッセージ、SVG ボタンの ラベルにも同じ言語選択が適用される予定です。GUI 翻訳を参照してください。Qt Linguist ツールが ビルド時に GUI カタログをコンパイルします。標準ダイアログの翻訳には、Qt にインストールされている言語データを使用します。
科学研究で GEMC を使用する場合は、次を引用してください:
M. Ungaro and the CLAS Collaboration, "The CLAS12 Geant4 simulation," Nuclear Instruments and Methods in Physics Research Section A 959, 163422 (2020). https://doi.org/10.1016/j.nima.2020.163422
BibTeX およびその他の引用形式は CITATION.md にあります。
GEMC は Apache ライセンス、バージョン 2.0 に基づいてライセンスされています。帰属表示と
サードパーティへの謝辞については NOTICE を参照してください。本ソフトウェアは、Geant4、CLHEP、Qt、ROOT、
SQLite、Assimp など、個別のライセンスが適用されるサードパーティコンポーネントにも依存しています。
現在の開発計画についてはプロジェクトロードマップを参照してください。







