MAD-X Primer (4): マクロによる記法と誤差の導入 ================================================= 目的 ------ * MAD-X Primer Appendix 1.4 (Example 4) * :blue:`マクロ` サブルーチンを定義し、記載を再利用. * :blue:`誤差(磁場・アライン)` を導入. | マクロの効用 --------------- * すべてのエレメントに :blue:`一意の名前` をつけられる. - e.g.) 軌道補正など、すべてのエレメントを 名前ありの個別のオブジェクト として扱う場合 - while文では別名前をつける記述は :blue:`不可` . - マクロであれば、 :blue:`名前もマクロに与える番号からつけ直せる` . | 誤差を与える命令文 ------------------------ * :blue:`遅延定義` " :red:`:=` " で与えるのが :blue:`超重要` . .. csv-table:: :header: "command", "description", "example" :widths: 10, 30, 30 "eoption", "誤差解析のオプション ( add: 誤差重畳か、上書きか, seed: 乱数シード、の設定 )", "eoption, add=false, seed=20240608" "ealign", "ミスアラインメントを設定する ( DX,DY,DS: 位置, DPHI: 回転、の誤差を与える.)", "EALIGN, DX:=GAUSS()*0.001, DY:=GAUSS()*0.0005;" "eprint", "設定した誤差を表示", "EPRINT, RANGE=MQF.1/MQD.10;" "efcomp", "誤差磁場.Error Field Componentsの略.", "EFCOMP, RADIUS:=0.017, ORDER:=0, DKNR:={0,0,GAUSS()*7e-4, GAUSS()*1e-4,0}, DKSR:={0,0,GAUSS()*3e-4, GAUSS()*6e-4,0};" | コード : macro-and-imperfections.seq : マクロによる記載 ------------------------------------------------------------ .. literalinclude:: codes/madx_primer/macro-and-imperfections/macro-and-imperfections.seq :emphasize-lines: 4-22,66-69 | コード : macro-and-imperfections.madx : 誤差の導入 ------------------------------------------------------ .. literalinclude:: codes/madx_primer/macro-and-imperfections/macro-and-imperfections.madx :emphasize-lines: 15-18 | ポイント ----------- $n と n の違い ^^^^^^^^^^^^^^^^^^^^^ * $nはマクロとして即時展開される : ソースコード中の nxの部分が書き換えられる.ラベルの番号付けなど. * nは文字列としてわたる.: 遅延評価 ":=" ^^^^^^^^^^^^^^^ * 遅延評価しないと、すべての誤差が :blue:`最初一回評価された値` で、 :blue:`同じにずれる` .