Skip to content

Latest commit

 

History

History
424 lines (335 loc) · 19.1 KB

README.ja.md

File metadata and controls

424 lines (335 loc) · 19.1 KB

Languages: EN · IT · 日本語 · FR · 中文

GEMC

品質 デプロイ ドキュメント
Test
Sanitize
CodeQL
Thread Scaling
Valgrind Profile
Deploy
Binary Tarballs
Release Tarballs
macOS Tarball
Nightly Dev Release
pygemc PyPI
Docker Pulls
GEMC documentation
Doxygen

GEMC は、検出器および放射線輸送シミュレーションのためのデータベース駆動型の Geant4 アプリケーションです。Python API により、Geant4 のコードを書くことなく 複雑な検出器構成を定義できます。

検出器の記述は実行ファイルから分離されています。Python で検出器を記述し、ASCII または SQLite データベースに 保存すると、GEMC が実行時にそれらを読み込んで Geant4 シミュレーションを実行します。

C++ プラグインにより、独自の検出器応答、磁場、イベントジェネレータ、出力形式をサポートできます。

GEMC のアーキテクチャ


主な特徴

  • 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

検出器システムは 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.25

PyVista による可視化

PyVista は通常の GEMC ジオメトリワークフローの一部です。Geant4 を実行する前に検出器ジオメトリを確認したり、 ドキュメント用にポータブルな VTK.js シーンをエクスポートしたり、Python ジオメトリスクリプトの編集中に 配置や回転のミスを発見したりできます。いくつかの例を示します:

B2 PyVista
Geant4 basic/b2
Materials PyVista
材料
Scintillator Barrel PyVista
シンチレータバレル
Materials PyVista
CLAS12 DC
Boolean Solids PyVista
ブール演算によるソリッド
CAD Import PyVista
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.yaml

Geant4 GUI で実行:

gemc counter.yaml -gui

Geant4 マクロのテキストファイルを実行(次のリリースで導入予定):

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

ドキュメント


コントリビューション

通常のプルリクエストを通じた貢献を歓迎します。プルリクエストを作成する前に、関連する 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 など、個別のライセンスが適用されるサードパーティコンポーネントにも依存しています。


ロードマップ

現在の開発計画についてはプロジェクトロードマップを参照してください。