Garfield++ - Kobe Universityppupic/garfield/5_Gain.pdfGarfield++の出番。...

16
Garfield++ 2014/9/25 京大理 髙田淳史

Transcript of Garfield++ - Kobe Universityppupic/garfield/5_Gain.pdfGarfield++の出番。...

Page 1: Garfield++ - Kobe Universityppupic/garfield/5_Gain.pdfGarfield++の出番。 Elmerで計算した電場を読み込んで ガス検出器のシミュレーション C++で記述 compile時にROOTと

Garfield++2014/9/25

京大理 髙田淳史

Page 2: Garfield++ - Kobe Universityppupic/garfield/5_Gain.pdfGarfield++の出番。 Elmerで計算した電場を読み込んで ガス検出器のシミュレーション C++で記述 compile時にROOTと

Garfield++の出番。 Elmerで計算した電場を読み込んでガス検出器のシミュレーション

C++で記述

compile時にROOTとGarfield++のライブラリをLink

⇒ makefileを作っておくと便利

計算には時間がそれなりにかかります

Page 3: Garfield++ - Kobe Universityppupic/garfield/5_Gain.pdfGarfield++の出番。 Elmerで計算した電場を読み込んで ガス検出器のシミュレーション C++で記述 compile時にROOTと

Makefile例

Page 4: Garfield++ - Kobe Universityppupic/garfield/5_Gain.pdfGarfield++の出番。 Elmerで計算した電場を読み込んで ガス検出器のシミュレーション C++で記述 compile時にROOTと

Source codeの流れ Magboltz

ガスの定義 (組成・温度・圧力…)

ComponentElmer

geometry, 電場構造, 比誘電率の読み込み

Sensor

simulationするarea・電極の定義

AvalancheMicroscopic

増幅過程のシミュレーション

Page 5: Garfield++ - Kobe Universityppupic/garfield/5_Gain.pdfGarfield++の出番。 Elmerで計算した電場を読み込んで ガス検出器のシミュレーション C++で記述 compile時にROOTと

Magboltz部分MediumMagboltz *gas = new MediumMagboltz();

gas->SetComposition("ar", 90.,

"c2h6", 10);

gas->SetTemperature(293.15);

gas->SetPressure(760.);

gas->EnablePenningTransfer(0.31, 0, "ar");

gas->SetMaxElectronEnergy(200.);

gas->EnableDrift();

gas->Initialise();

gas->LoadIonMobility(“file名”)

組成の定義(6種まで)

温度の定義

圧力の定義

Penning効果の定義

Cross section tableの最大値

電子のdrift領域として定義

イオンのmobility

Page 6: Garfield++ - Kobe Universityppupic/garfield/5_Gain.pdfGarfield++の出番。 Elmerで計算した電場を読み込んで ガス検出器のシミュレーション C++で記述 compile時にROOTと

定義されているGas Garfield++のUser Guide

Appendix Bにも記載

CF4, Ar, He, He-3, Ne, Kr, Xe, CH4, C2H6, C3H8, iC4H10, CO2,neoC5H12, H2O, O2, N2, NO, N2O, C2H4, C2H2, H2, D2, CO,Methylal, DME, Reid-Step, Maxwell-Model, C2F6, SF6, NH3,C3H6, cC3H6, CH3OH, C2H5OH, C3H7OH, Cs, F2, CS2, COS,CD4, BF3, C2HF5, C2H2F4, TMA, CHF3, CF3Br, C3F8, O3, Hg,H2S, nC4H10, nC5H12, N2 (Phelps), GeH4, SiH4

Page 7: Garfield++ - Kobe Universityppupic/garfield/5_Gain.pdfGarfield++の出番。 Elmerで計算した電場を読み込んで ガス検出器のシミュレーション C++で記述 compile時にROOTと

Penning effect 混合気体で起こる

励起状態の分子が、低いイオン化電位をもつ第二の気体分子に衝突して,イオン化を起こし、自分は基底状態に戻る

ガス増幅率の絶対値を計算したい場合は必須

S. Dildick氏Slideより

O. Sahin+, JINST (2010)

Page 8: Garfield++ - Kobe Universityppupic/garfield/5_Gain.pdfGarfield++の出番。 Elmerで計算した電場を読み込んで ガス検出器のシミュレーション C++で記述 compile時にROOTと

■:イオンの数●:電子の数

r : Penning Transfer Rate

□:No.102004/5/13 15:002004/5/13 23:40▲:No.16

2005/10/11 21:00

• Avalanche Sizeの平均値をplot

• Penning Transfer Rateの文献値は0.31±0.01(JINST 2010 P05002)

Ar 90% + Ethane 10%

Page 9: Garfield++ - Kobe Universityppupic/garfield/5_Gain.pdfGarfield++の出番。 Elmerで計算した電場を読み込んで ガス検出器のシミュレーション C++で記述 compile時にROOTと

Ion Mobility 信号波形のシミュレーションには必須

Garfield++のSource Code内に

Ar中のAr+

Ne中のNe+

CO2中のCO2+

のデータは存在

Page 10: Garfield++ - Kobe Universityppupic/garfield/5_Gain.pdfGarfield++の出番。 Elmerで計算した電場を読み込んで ガス検出器のシミュレーション C++で記述 compile時にROOTと

ComponentElmer部分ComponentElmer *elm

= new ComponentElmer(“gemcell/mesh.header”,

“gemcell/mesh.elements”,

“gemcell/mesh.nodes”,

“gemcell/dielectrics.dat”,

“gemcell/gemcel.result”,

“cm");

elm->EnablePeriodicityX();

elm->EnableMirrorPeriodicityY();

elm->SetMedium(0, gas);

elm->SetWeightingField(“gemcell/gemcell_Wtlel.result”, “wtlel”);

MediumMagboltzの情報とリンク

重み付電場の読み込み

Page 11: Garfield++ - Kobe Universityppupic/garfield/5_Gain.pdfGarfield++の出番。 Elmerで計算した電場を読み込んで ガス検出器のシミュレーション C++で記述 compile時にROOTと

比誘電率data fileの作成

各物質の比誘電率をGarfield++に与える必要がある

金属に対しては”非常に大きな値”を入れることで近似

物質の数

物質のID物質の比誘電率

Page 12: Garfield++ - Kobe Universityppupic/garfield/5_Gain.pdfGarfield++の出番。 Elmerで計算した電場を読み込んで ガス検出器のシミュレーション C++で記述 compile時にROOTと

重み付電場 信号を読み出す電極の電位を1 Vにそれ以外の電極の電位を0 Vに設定しElmerで電場を計算させる ⇒ 重み付電場

電荷qの荷電粒子が速度vで動くとき読み出し電極に生じる電流は

𝑑𝑄

𝑑𝑡= 𝑞𝑣𝐸𝑤 𝐸𝑤: 重み付電場

Gemcellのsampleでは gemcell_Wtlel.sifで計算

Page 13: Garfield++ - Kobe Universityppupic/garfield/5_Gain.pdfGarfield++の出番。 Elmerで計算した電場を読み込んで ガス検出器のシミュレーション C++で記述 compile時にROOTと

Sensor部分

Sensor *sensor = new Sensor();

sensor->AddComponent(elm);

sensor->SetArea(-axis_x, -axis_y, -axis_z,

axis_x, axis_y, axis_z);

sensor->AddElectrode(elm, “wtlel”);

sensor->SetTimeWindow(0, tEnd/nsBins, nsBins);

Simulationするareaの範囲の定義

信号読み出し電極

開始時刻 bin数bin幅

Page 14: Garfield++ - Kobe Universityppupic/garfield/5_Gain.pdfGarfield++の出番。 Elmerで計算した電場を読み込んで ガス検出器のシミュレーション C++で記述 compile時にROOTと

AvalancheMicroscopic部分AvalancheMicroscopic *aval = new AvalancheMicroscopic();

aval->SetSensor(sensor)

aval->AvalancheElectron( x, y, z, vx, vy, vz);

int ne, ni;

aval->GetAvalancheSize(ne, ni);

int nd = aval->GetNumberOfElectronEndpoints();

for (int i=0; i<nd; i++) {

double x0, y0, z0, t0, e0, x1, y1, z1, t1, e1;

int status;

aval->GetElectronEndpopint(i, x0, y0, z0, t0, e0,

x1, y1, z1, t1, e1, status);

}

Seed電子の初期位置 Seed電子の初速

増幅で生じた電子とイオンの数

電子の初期位置・時刻・エネルギー

電子の終着位置・時刻・エネルギー

増幅時の電子をトレース

Page 15: Garfield++ - Kobe Universityppupic/garfield/5_Gain.pdfGarfield++の出番。 Elmerで計算した電場を読み込んで ガス検出器のシミュレーション C++で記述 compile時にROOTと

イオンの方は…AvalancheMC *ion = new AvalancheMC();

ion->SetSensor(sensor);

ion->SetDistanceSteps(2e-4);

int nd = aval->GetNumberOfElectronEndpoints();

for (int i=0; i<nd; i++) {

double x0, y0, z0, t0, e0, x1, y1, z1, t1, e1;

int status;

aval->GetElectronEndpopint(i, x0, y0, z0, t0, e0,

x1, y1, z1, t1, e1, status);

ion->DriftIon(x0, y0, z0, t0);

}なだれ電子の発生点にイオンを作って個々に追尾する

Page 16: Garfield++ - Kobe Universityppupic/garfield/5_Gain.pdfGarfield++の出番。 Elmerで計算した電場を読み込んで ガス検出器のシミュレーション C++で記述 compile時にROOTと

信号波形gas->LoadIonMobility(“file名”);

elm->SetWeightingField(“file名”, “名前”);

sensor->AddElectrode(elm, “名前”);

sensor->SetTimeWindow(start, w_bin, n_bin);

aval->EnableSignalCalculation();

ion->EnableSignalCalculation();

for( ; ; ){

sensor->ClearSignal();

for(int j=0; j<n_bin; j++)

double w = sensor->GetSignal(“名前”, j);

} イオン成分: GetIonSignal(“名前”, j)電子成分: GetElectronSiganl(“名前”, j);