.. _madx_tutorial__p2: MAD-X チュートリアル (2): 要素・シーケンス・ビームの定義 ========================================================== * chatGPTによるCERNスライドの自動翻訳・自動要約です. 加速器要素の定義 ---------------- MAD-X では、すべてのビームライン要素を名前付きで定義します。 定義の構文は以下のようになります:: 名前: 種類, パラメータ1=値1, パラメータ2=値2, ... ; 例:: MBL: SBEND, L=10.0, ANGLE=0.0145; // 曲げ磁石 MQ: QUADRUPOLE, L=3.3, K1=1.23E-2; // 四重極磁石 QUAD01: MQ; // MQのインスタンス | 定義できる主な要素 ^^^^^^^^^^^^^^^^^^ - **SBEND**: :blue:`偏向磁石` - **QUADRUPOLE**: :blue:`四重極` - **SEXTUPOLE**:六重極 - **OCTUPOLE**:八重極 - **MULTIPOLE**:任意次数の多極場(薄レンズ) - **MARKER**:位置の目印(光学に影響なし) - **MONITOR**, **HKICKER**, **VKICKER**:BPM・補正器など 強さの定義式(参考):: k0 = angle / L // SBEND k1 = 1/(l·f) // QUAD k2 = d²By/dx²/p // SEXTUPOLE | シーケンスの定義 ---------------- 要素を並べて、加速器全体を「シーケンス(SEQUENCE)」として構築します。 基本構文:: myseq: SEQUENCE, L=全体長, REFER=CENTRE; 要素1, AT=位置1; 要素2, AT=位置2; ... ENDSEQUENCE; 例:: linac: SEQUENCE, L=2.0, REFER=CENTRE; QF1: QUADRUPOLE, L=0.1, K1=0.5, AT=0.2; RF1: RFCA, L=1.0, VOLT=20e6, FREQ=2856e6, LAG=0.5, AT=0.3; MARK: MARKER, AT=2.0; ENDSEQUENCE; **AT=位置** により要素の配置を指定します。 相対位置(`FROM=要素名`)や式を使った位置計算も可能です。 | 繰り返し構造の構築(whileループ) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 例:108セルの周期構造をループで定義:: lcell = 64; ncell = 108; cassps: SEQUENCE, REFER=CENTRE, L=lcell*ncell; n = 1; while (n < ncell+1) { qf, AT=(n-1)*lcell; bend1, AT=(n-1)*lcell + 0.25*lcell; qd, AT=(n-1)*lcell + 0.5*lcell; bend2, AT=(n-1)*lcell + 0.75*lcell; n = n + 1; } ENDSEQUENCE; | ビーム条件の定義 ------------------- :blue:`ビーム粒子種・エネルギー・エミッタンス` などを設定します。 基本構文:: BEAM, PARTICLE=粒子名, ENERGY=エネルギー, ... ; 例:: BEAM, PARTICLE=PROTON, ENERGY=450.0; | 主なパラメータ ^^^^^^^^^^^^^^^ - `PARTICLE`:`ELECTRON`, `PROTON`, `POSITRON`, `MUON`, `ION` など - `ENERGY`:粒子エネルギー :red:`[GeV 単位]` - `NPART`:粒子数(例:1.1E11) - `CHARGE`:電荷数(陽子なら1、電子なら-1) - `MASS`:粒子質量(必要なら指定) | マシンの使用指定と出力設定 -------------------------- 定義した SEQUENCE を「使用中のマシン」として指定します:: USE, SEQUENCE=名前; Twiss関数の計算と出力:: SELECT, FLAG=TWISS, COLUMN=NAME,S,BETX,BETY; TWISS, FILE="twiss.out"; 描画出力(オプション):: PLOT, HAXIS=S, VAXIS=BETX,BETY; 範囲指定:: PLOT, HAXIS=S, VAXIS=BETX,BETY, RANGE=QF[10]/QF[20]; ジオメトリ出力:: SURVEY, FILE="survey.out";