Yamamoto's Laboratory
 
 
入力
 
電磁場取り込み
 
User elemetns
 
 
Python
  EasyGDF
 
 
 
 
 
 
 
 
研究内容 加速器 GPT Python: EasyGDF

GPTPython: EasyGDFGPT の gdf ファイルの操作

GPT 出力ファイルである gdf を操作する Python のライブラリーです.gdf はバイナリーファイルなので,操作がとても面倒です.EasyGDF を使うと gdf ファイルをバイナリーファイルのまま操作可能です.

目次


インストールと設定

インストール

Anaconda 環境の場合のインストールは,以下のコマンドを使います.

> conda install -c conda-forge easygdf

pip を使う場合は,以下のとおりです.

> pip install easygdf

使用方法

EasyGDF を使用するためには,プログラムの先頭付近に「import easygdf」を記述します.すると,gdf ファイルを操作するいくつかの関数を使うことができます.以下に,プログラム例を示します.

メソッド

load(f, ...)

このメソッドを使うと,gdf ファイルを読み込みこむことができます.

load(f, max_recurse=16, max_block=1e6)
引数
f ファイル名あるいはファイルストリームのようなオブジェクト
max_recurse gdfファイルでのブロック読み込み時の最大再帰深度
max_block 各gdfグループでの最大許容ブロック数
戻り値
辞書型のデータ

load() を使うと,gdfファイルのすべてのデータを python の辞書に読み込むことができます.gdf ファイルは,ヘッダーとデータブロックから構成されます.これらの情報は,以下のキーを持つ辞書として読み込まれます.具体的な辞書のキーと値を以下の表に示します.

キー
creation_time ファイル作成時刻情報
creator ファイル作成プログラム
destination string
gdf_version gdf のバージョン.tupl (int, int)
creator_version 作成プログラムバージョン.tuple (int, int)
destination_version tuple (int, int)
dummy tuple (int, int)
blocks list of block dictionaries (see following description)

読み込んだファイルのメインデータは、各階層の名前-値のペアのリストである「ブロック」で表示されます。ブロックは pythonの辞書型のデータとして返され,それには三つのキー (name, value, children) があリます.children の中身はそれ自体,同じフォーマットのブロックのリストです.gdfファイル内の配列の値は,numpy 配列(array) になります.実際にのプログラム例と読み込んだ辞書がたのデータを「EasyGDF の load() の使い方」に示します.

save(f, blocks=None, ...)

このメソッドはデータを gdf ファイルとして保存します.

save(f, blocks=None, creation_time=None, creator="easygdf",
     destination="", gdf_version=(1, 1), creator_version=(2, 0),
     destination_version=(0, 0), dummy=(0, 0), max_recurse=16)
引数
f ファイル名、またはファイルやストリームのようなオープンオブジェクト
blocks 保存されるgdfブロックのリスト
creation_time ヘッダーに書き込まれるint/datetimeオブジェクト作成時間(デフォルトはファイル書き込み時)
creator ヘッダーに書き込まれる文字列
destination ヘッダーに書き込まれる文字列
gdf_version ヘッダーに書き込まれるタプル(int, int).
gdf_version ヘッダに書き込むタプル(int, int) (低レベルのものをいじくりまわすのが好きでなければ変更しないでください)
creator_version ヘッダに書き込むタプル(int, int)
destination_version ヘッダに書き込むタプル(int,int)
dummy ヘッダに書き込むタプル(int, int)
max_recurse gdfファイルにブロックを保存する際の再帰的深さの最大値
戻り値
無し

load_screens_touts(f, ...)

screen とtout の出力である gdf ファイルを読み込み,その内容を辞書型のデータで返します.スクリーンはリスト "screens" に,tout は対応するリスト "touts"に格納されます.ルートレベルのパラメータとヘッダーオブジェクトは,辞書のルートで返されます.

save_screens_touts(f, screens=None, touts=None, ...)

ユーザーデータを GPT 出力のフォーマット (*.gdf) でファイルに保存します.署名は,対応する load 関数の出力と完全に互換性があります.screen と tout は,以下のnumpy配列を持つdictsのリストとして渡されます.

tout の particle keys: x, y, z, Bx, By, Bz, m, q, nmacro, rmacro, ID, fEx, fEy, fEz, fBx, fBy, fBz, G, rxy.

toutのスキャッターキー:scat_x, scat_y, scat_z, scat_Qin, scat_Qout, scat_Qnet, scat_Ein, scat_Enet, scat_inp

sceen の particle ID, x, y, z, Bx, By, Bz, t, m, q, nmacro, rmacro, rxy, G

配列は未使用であれば dict に設定する必要はありません.不足するキーは,自動的に正しい長さのゼロで埋められます.冗長なキー (rxy, G, ID など) の場合,提供されたデータから値が計算されます.tout の散布図キーと粒子キーは配列の長さを埋める際に別々に扱われます (例:x が長さ 10 の配列に設定された場合,出力では y はその長さにパッドされますが scat_x は空のままとなります).dictに含まれる補助キーは,screen/toutに保存されます.

配列要素に加えて,screen はスカラー "position"を,tout はスカラー "time" を持つことができ,これらはグループのパラメータとして使用されます.デフォルトはそれぞれ0です.

load_initial_distribution(f, ...)

save_initial_distribution(f, x=None, y=None, z=None, GBx=None, GBy=None, GBz=None, ...)

ページ作成情報

参考資料

更新履歴

2022年08月02日 ページの新規作成


no counter