Garfield++ - Kobe Universityppupic/garfield/5_Gain.pdfGarfield++の出番。...
Transcript of Garfield++ - Kobe Universityppupic/garfield/5_Gain.pdfGarfield++の出番。...
Garfield++2014/9/25
京大理 髙田淳史
Garfield++の出番。 Elmerで計算した電場を読み込んでガス検出器のシミュレーション
C++で記述
compile時にROOTとGarfield++のライブラリをLink
⇒ makefileを作っておくと便利
計算には時間がそれなりにかかります
Makefile例
Source codeの流れ Magboltz
ガスの定義 (組成・温度・圧力…)
ComponentElmer
geometry, 電場構造, 比誘電率の読み込み
Sensor
simulationするarea・電極の定義
AvalancheMicroscopic
増幅過程のシミュレーション
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
定義されている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
Penning effect 混合気体で起こる
励起状態の分子が、低いイオン化電位をもつ第二の気体分子に衝突して,イオン化を起こし、自分は基底状態に戻る
ガス増幅率の絶対値を計算したい場合は必須
S. Dildick氏Slideより
O. Sahin+, JINST (2010)
■:イオンの数●:電子の数
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%
Ion Mobility 信号波形のシミュレーションには必須
Garfield++のSource Code内に
Ar中のAr+
Ne中のNe+
CO2中のCO2+
のデータは存在
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の情報とリンク
重み付電場の読み込み
比誘電率data fileの作成
各物質の比誘電率をGarfield++に与える必要がある
金属に対しては”非常に大きな値”を入れることで近似
物質の数
物質のID物質の比誘電率
重み付電場 信号を読み出す電極の電位を1 Vにそれ以外の電極の電位を0 Vに設定しElmerで電場を計算させる ⇒ 重み付電場
電荷qの荷電粒子が速度vで動くとき読み出し電極に生じる電流は
𝑑𝑄
𝑑𝑡= 𝑞𝑣𝐸𝑤 𝐸𝑤: 重み付電場
Gemcellのsampleでは gemcell_Wtlel.sifで計算
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幅
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電子の初速
増幅で生じた電子とイオンの数
電子の初期位置・時刻・エネルギー
電子の終着位置・時刻・エネルギー
増幅時の電子をトレース
イオンの方は…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);
}なだれ電子の発生点にイオンを作って個々に追尾する
信号波形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);