Garfieldとは、CERNで開発されたガス検出器のシミュレーションプログラムです。 日本でもGarfieldはよく使われていますが、少なくとも私が知る限りでは 日本語で書かれた解説サイトは存在しません(誰か知っていたら教えてください)。 それならば自分で作ってしまおうということでこのページを作成しました。 尚、ここが正しいとは限りませんので参照する場合は自分の責任においてお願いします。 また、間違いを発見しましたらご連絡くださると幸いです。
nagayosi@gp11% 7-garfield < inputfileとする。ここで、Garfield実行ファイルは7-garfieldという名前になっている。計算結果は garfield.metafile という名前のPSファイルとして出力される。 (この辺は動作環境によって異なると思う。)
| CELLセクションtd> | 検出器の幾何学的形状を決める。ワイヤーなどの電圧もここで与える。 |
| GASセクション | ガスを決める。 |
| FIELDセクション | 検出器内の電場を計算する |
| DRIFTセクション | 検出器内での電子やイオンの動き(ドリフト、ガス増幅など)を計算する。 |
Garfieldでは、大文字と小文字を区別しない(と思う)。また、コマンドを完全に綴らないで省略して書いてもよい。例えば、"INTEGRATION-PARAMETERS"というコマンドを使いたいときは、これを"INT-PAR"や"Int-par"などと省略してもよい。
Plane 位置[cm] 電圧[V]<例>
Plane y 10.0 v 1000.0この例では、y=10.0のところに平面を置き、1000.0Vの電圧を与えることを意味する。
<注意>
二つの平面が交わるとエラーとなり、両方の平面が消える。
Tube r=半径 V=印加電圧<例>
TUBE r={c_rad} V={c_volt}
この例では、後述の方法で円筒の半径と印加電圧を与えている。
Row ラベル 本数 直径[cm] X座標[cm] Y座標[cm] ラベル 本数 直径[cm] X座標[cm] Y座標[cm] ... (空行)ROWSでワイヤーを定義するとき、ラベルや本数を表す文のあとに必ず空行を入れる。さらに、電圧やワイヤーの長さ、張力、密度を指定することができる。その場合は以下のように書く。
Row ラベル 本数 直径[cm] X座標[cm] Y座標[cm] 電圧[V] 長さ[cm] 張力[g] 密度[g/cm^3] ... (空行)<例>
Rows s 1 0.0050 0.0 0.0 3000.0 15.0 30.0 8.93この例では、sというラベルをつけて長さ30cm、直径50μmの銅ワイヤー (密度8.93g/cm^3)を(0.0, 0.0)に張り、15g重の張力をかけて3000Vの電圧を印加している。一度に複数のワイヤーを定義する場合は、次の例のように変数"i"を使用する。 (iは整数を表すが、0から始まるか1から始まるかは忘れた。)
a 5 0.0049 (0.0100*i) -0.0020 1000.0複数のワイヤーが重なる場合は、どちらかが消える(無視される)。また、ワイヤーと平面が重なる場合はワイヤーが無視される。
ここでは、使用するガスを決定する。また、ドリフト速度などのガスの性質を表示することもできる。 よくガス検出器に使われる以下の代表的なガスについては、そのままガスの種類を指定できる(built-in)。
<例>
Argon-80-Ethane-20
<例>
MAGBOLTZ ARGON 80 ETHANE 20 ...
electric-field-range 50.0 400000.0 N-E 50 ...
mobility 1.7*10^(-6)
Magboltzの計算にはかなり時間がかかるが、計算結果をファイルに残しておけば次回以降に同じガスを使って計算するときに短時間でガスのデータを取り込める。
<例>
Global gasfile `AR8ETHANE2_HF.DAT`
Call inquire_file(gasfile,exist)
If exist Then
Get {gasfile}
Else
MAGBOLTZ ARGON 80 ETHANE 20 ...
electric-field-range 50.0 400000.0 N-E 50 ...
mobility 1.7*10^(-6)
Write {gasfile}
Endif
この例では、まずGlobalコマンドを使ってMagboltzの結果を書くファイル名を定義する。その後、そのファイルが存在するかチェックし、ファイルがあれば(前回までに計算した)ファイルを読み込み、ファイルがなければ新しくMagboltzでガスのデータを計算してGlobalコマンドで定義したファイルに書き込む。
<例>
Option gas-print gas-plotこの例では、標準出力(?)にガス中での電子ドリフトなどのデータを出力し、さらにそのデータをグラフにプロットする。
また、オプションではないが、
TEMPERATURE 300 K PRESSURE 1.0 atmとするとガスの温度(ここでは300K)や圧力(ここでは1気圧)を決めることもできる。
<例1>
Global a_volt = 5000.0
Global c_volt = 0.0
...
&CELL
Plane y 10.0 v {a_volt}
Plane y -10.0 v {c_volt}
<例2>
Global pitch=0.04 Global xcen=0.0 Global xmin=xcen-(pitch/2.0) Global xmax=xcen+(pitch/2.0)<例3>
&GAS
Global fname `AR8ETHANE2.DAT`
Call inquire_file(fname,exist)
If exist then
Get {fname}
Else
MAGBOLTZ ARGON 80 ETHANE 20 ...
electric-field-range 50.0 220000.0 ...
mobility 1.7*10^(-6)
Write {fname}
Endif
例1のように、ワイヤーや平面(ドリフト電極)に電圧をあたえるときなどに使うと便利。例2のように、他のGlobal文で先に定義した変数を使うこともできるがそのときは中括弧{ }をつけない。このほかに、繰り返し処理や入出力ファイル名を指定するときにも使う(例3)。
$ shell commandと入力する。
<例>
$ ls -a
Global gas_file `AR8ETHANE2.DAT`
$ ls -l {gas_file}
このように、shellコマンドの引数としてGlobalコマンドで定義した変数を使うこともできる。
> filename (Garfield commands) >はじめの行でファイルを開き、Garfieldコマンドを実行した後、最後の行の「>」でファイルを閉じる。
Global fname `townsend.dat`
Call drift_electron(-0.01,0.04,status,time,diffusion,townsend)
> {fname}
Say "{townsend}"
>
この例では、ガス増幅率をファイルに出力している。PAWやROOTなどで結果を解析したいときに使うと良い。出力フォーマットは以下のようになっている。
*----.----1----.----2----.----3----.----4----.----5----.----6----.----7----.----8----.----9----.---10----.---11----.---12----.---13-- % Created 06/01/03 At 21.34.39 < none > OUTPUT "Printed output " (Garfield$B$+$i$N=PNO(B)数字だけのファイルにしたいときは、適当なシェルスクリプトなどを使って不要な部分を削除する必要がある。
このコマンド(?)は、開きたいファイルが存在しないとき(新規のファイルに書き込むとき)はそのファイルを生成し、存在する場合は既にあるファイルの末尾に書き足している。従って、条件を変えて計算をやり直す場合などは、既に存在するファイルを消す必要がある。これはGarfieldを実行する前に手で消しても良いが、Garfield内で次のようにしてもよい。
Global fieldfile `field_kiban_2um.dat`
Call inquire file(fieldfile,exist)
If exist Then
Say "Old {fieldfile} is being removed."
$ rm {fieldfile}
Endif
Global zlim=thick+0.0021
> {fieldfile}
Plot graph E on '{a_radi}*cos(2*pi*t)+{xcen},{a_radi}*sin(2*pi*t)+{ycen},{zlim}' N 75 print
Say "test"
>
この例では、Call文を使って「field_kiban_2um.dat」というファイルが存在するか否かを調べ、存在する場合はそのファイルを消している。こうすることによって、Garfieldを実行する度にファイルを上書きできる。(これを忘れて何度も同じ計算をしていると巨大ファイルができることになるので注意。)