Subject | : その2 |
Date | : 2006/01/30(Mon) 20:00:29 |
Contributor | : Kentaro Harada < > |
マニュアル1:加速器特有の計算コマンド関連(WEBのみ)
http://acc-physics.kek.jp/SAD/SADHelp.HTML
マニュアル2:GUIの作り方、スクリプト言語(FFS)の文法基礎
SAD/Tkinter Manual (in Japanese, .pdf 706K 10/29/1997)
http://acc-physics.kek.jp/SAD/SADTkinter.pdf
その2:基本的なコマンドいくつか
まずは最も基本的なコマンドについていくつか述べておきます。
1、オプティクスや各種パラメータの計算
*************************
ON LOG;
ON RAD FLUC COD RFSW RADCOD;
(これらはおまじないです。LOG はいちいちコマンドを復唱しないという
フラグ、あとはトラッキングにおいて放射あり、縦方向を入れて6次元
計算あり、などの条件を決めます。(FLAGはマニュアル1に載ってます。)
FFS;
(ここからいよいよFFSです。)
$FORM = "15.10";
(小数を全15桁にする。すなわち、整数部4桁+"."+小数部10桁)
PageWidth = 1999;
(ファイルに書き出す場合、勝手に改行を入れない。ファイル読み書きの
仕方についてはその3で書きます。その際、これを指定しないと200文字
くらいで勝手に改行されて、エクセルなどで読み込む時に泣けます。)
USE RING;
(ラティスファイルの LINE 定義の中で RING を使う。)
cell;
("cell" は単なるフラグ(条件判断変数)です。CELL でなければ INS に
なります。
INS は MARK の中の トゥイスパラメータを初期値にして、それを順に転送
していくモード、CELL は周期解を求めるモードです。リングの途中だけ
使いたい場合など、CELL で全体を計算、MARK にパラメータをセーブして、
その後で直線部を USE で呼び出し、INS で計算、等とします。)
calc;
("calc" は閉軌道(COD)を求めた後、周期解(トゥイスパラメータの
計算)を求めるコマンドです。閉軌道はあってもオプティクスは発散する
場合もありますし、誤差などを入れた場合にはそもそも何をどうやっても
軌道が閉じない場合もあります^_^;)
emit;
("emit"はエミッタンス、バンチ長など各種平衡パラメータを計算します。
calc まではXYの4次元ですが、emit は RF が入って6次元になります。
頭の呪文(ON RAD FLUC COD RFSW RADCOD;)を変えるとRF関連を弾くことも
できます。)
SAVE ALL;
(パラメータを保存しておきます、一応。)
stop;
stop;
(最初の stop で FFS が終わり、次の stop でトップレベルが終わります。)
*************************
ちなみにFFS上では後ろに [] がつくかどうかで「コマンド」か「関数」か、
区別があります。cell calc emitは全て「コマンド」で、「関数」ではありません。
関数は大文字小文字を区別しますが、コマンドは区別しません。CELL でも cellでも
同じです。
「コマンド」を関数の中で使う場合には、
FFS["cell calc"];
などと、FFS 関数を使って呼び出す必要があります。例えば、
Do[
USE RING;
cell calc emit;
,{i,1,10}];
とやっても何も起きません。(SADは何もせずにひっそり受け流してくれる。)
Do[
FFS["USE RING;"];
FFS["cell calc emit;",6];
,{i,1,10}];
としないといけなません。FFS["中身",結果表示先]
(装置番号6番がディスプレイです。)
2、よく使うコマンド&関数リファレンス
・disp
その場所のトゥイスパラメータを表示します。場所を指定しないと LINE 全部を
書き出します。
例:
disp Q4;
結果:
disp Q4;
AX BX NX EX EPX Element Length Value s(m) AY BY NY EY EPY DetR #
-3.0889 10.4015 .56819 1.37415 .41081 Q4.1 .22500 .2923739 10.404850 .76890 2.33132 .37149 .00000 .00000 .0000 15
5.1E-14 1.59711 9.14379 -3.1E-6 -1.E-15 $$$ .00000 0 170.077600 1.6E-14 .43479 6.20232 .00000 .00000 .0000 258
(必ず LINE の最後(リング終点)の値もくっついて出力されます。
左から、水平アルファ、ベータ、チューン、分散、分散ダッシュ、ラティスの
要素名、その要素の長さ、その要素の第1変数(Bなら曲げ角 rad、QならK1、
SならK2、ドリフトならL)、その要素までの軌道長、垂直アルファ、ベータ、
チューン、分散、分散ダッシュ、カップリングを考えた時の変換行列行列式、
です。)
・type
B、Q、SXなど要素の中身を表示。
例: type Q4;
;
結果:
QUAD Q4 =(L =.225 K1 =.2923738695 )
;
・Twiss[欲しいパラメータ、場所]
その場所のトゥイスパラメータを表示します。
欲しいパラメータ: AX, BX, EX, EPX, AY, BY, EY, EPY、DX、DY (などWEB上のHELP参照。)
場所:要素名(=ライン上に最初に出てくるその要素)、ライン上の要素名、
ライン上の要素番号(小数で中を指定するのも可)などで指定。
例えばラティスではBは1回しか定義せず、それを16回使います。SADでは
それを後ろに数字を付けて区別します。B.1、B.2……B.15、B.16など。ただ単に
Twiss["BX","B"] とやるとTwiss["BX","B.1"]と同じです。
また、Twiss の DX、DY はCOD(中心軌道)です。
例1:
Print[Twiss["BX","Q10A"]];
結果:
10.4014995745
例2:
Print[Twiss["BY","Q10A*"]];
結果:
{ 2.3313239517, 2.1620176780, 2.3313239517, 2.1620176780,......}
(リングにQ4は16個。(2分割しているので……Q4Hとかすべきでした。))
例3:
Print[Twiss[{"BX","BY"},{129,129.5,130}]];
(Q4.1 は 15 番。Q4 の入り口、中央、出口の BX, BY を表示。)
結果:
{{ 10.4014995745, 10.9315382133, 11.1121567045},{ 2.3313239517, 2.2036557040, 2.1620176780}}
(最初の3つが BX、後ろの3つが BY)
・LINE[欲しい値、要素]
その要素のパラメータを表示、もしくは代入します。
欲しい値:POSITION、NAME、ELEMENT、S、L、ANGLE、K0、K1、K2、GEO、DX、DY
ここでの DX, DY は据え付け誤差または設置のオフセットです。
例1:
Print[LINE[{"POSITION","NAME","ELEMENT","S","L","K1"},"Q4"]];
結果;
{ 15.0000000000,"Q4.1","Q4", 10.4048500000, .2250000000, .2923738695}
ライン上の番号(15番目)、名前、ファミリー名、軌道長(入り口で10.40m)、
Qの長さ(.225cm)、B'L/(B rho) = 0.2923
例2:
Print[LINE["GEO",16]];
結果:
(GEOは幾何学上の場所を表示します。座標原点はLINEの始点です。要するに、最初の
Q4終端(セル中央)は、x(東西方向)=10.38m、y(南北方向)=1.394mの場所にあり
ます。)
{{ 10.3878134062, 1.3939705855, .0000000000},
{ .3926990800, .0000000000, .0000000000}}
{{X,Y,Z},{θ、φ、ψ?^_^;}} (ラティスが水平面内にしかないなら、
θだけありません。角度3つは、ビームの進行方向を向いた単位ベクトルの
3次元の角度?……HELPを参照。)
例3:
Print[LINE["LENGTH"]];
結果:
258.0000000000
リング(ビームライン)の要素数。