マッチング時のフリーパラメータの上下限を決めるコマンドで、
キーワードがデフォルトでない場合、例えば BEND で K1 に制限を
つけて K1 を振るようなケース
FREE B1 K1;
BEND K1 MAX 0.1;
VAR;
GO;
がうまくいきません。書式が間違っていますでしょうか?
もちろん、
B1 K1 MAX 0.1;
のまちがいです。
> マッチング時のフリーパラメータの上下限を決めるコマンドで、
> キーワードがデフォルトでない場合、例えば BEND で K1 に制限を
> つけて K1 を振るようなケース
> FREE B1 K1;
> BEND K1 MAX 0.1;
> VAR;
> GO;
>
現行実装では無理
MIN/MAXのパラメータストレージは、各Elementに付きデフォルトパラメータ分しか用意されていない
実装に必要な作業
* ifauxが指すデータ構造の拡張
* src/tfgetv.fのパラメータ設定構文の拡張
> > マッチング時のフリーパラメータの上下限を決めるコマンドで、
> > キーワードがデフォルトでない場合、例えば BEND で K1 に制限を
> > つけて K1 を振るようなケース
> > FREE B1 K1;
> > BEND K1 MAX 0.1;
> > VAR;
> > GO;
> >
VariableRange関数経由の拘束が働くなら、
* VariableRange["B1", "K1", v_] := {-1e99, 0.1};
* VariableRange["B1", "K1", v_] := v =< 0.1;
等が使えるかもしれない
ありがとうございました。
MIN/MAX/MINMAX 等のヘルプは、例えば6極を切る時や4極を
手動で設定する時の
S* 0;
Q1 -0.17;
みたいな、値の設定コマンドに対する書式のリファレンスで、MAX/MINMAX 等については
デフォルトキーワードのみに対して働く
If MIN, MAX, MINMAX, MAXMIN are specified, it sets the limit of the default-keyword.
と明記されている旨、分かりました。(私の誤解でした。)
どうもありがとうございました。
> ありがとうございました。
>
> MIN/MAX/MINMAX 等のヘルプは、例えば6極を切る時や4極を
> 手動で設定する時の
> S* 0;
> Q1 -0.17;
> みたいな、値の設定コマンドに対する書式のリファレンスで、MAX/MINMAX 等については
> デフォルトキーワードのみに対して働く
> If MIN, MAX, MINMAX, MAXMIN are specified, it sets the limit of the default-keyword.
> と明記されている旨、分かりました。(私の誤解でした。)
> どうもありがとうございました。
>
さらにsrc/tfgetv.fでの実装に関してコメントすると、
* MAXMIN及びMINMAXと同義な修飾語として ABSMAX, MAXABSという予約語が存在する
* R_ELATIVE修飾語が存在し、RELATIVE修飾時は、SAVE値からの相対指定 saved-value * (1 + given-parameter) として解釈される
** `B1 K1 REL 0.1' は、 B1のK1値をSAVE値から 10%増しに設定する
VariableRangeを使ってください。その目的のために作ってある関数です。
Example: VariableRange["QF","ROTATE",v_]:= -0.1 < v < 0.1;
VariableRange[x:("BC1L"|"BWL"),"L",_]:={Abs[ltheta[ucl]*Element["ANGLE",x]],lbmax};
> VariableRangeを使ってください。その目的のために作ってある関数です。
>
> Example: VariableRange["QF","ROTATE",v_]:= -0.1 < v < 0.1;
> VariableRange[x:("BC1L"|"BWL"),"L",_]:={Abs[ltheta[ucl]*Element["ANGLE",x]],lbmax};
>
VariableRangeを"純関数"で定義すると意図通りに働かない?
# VARで制約範囲は認識しているが、GOの動作が制約されていない
# OptimizeOptics[]は、制約されるっぽぃ
*** Welcome to SAD Ver.1.1.0.9k64a built at 2017-07-07 13:43:00 +0900 ***
*** Today: 14:42:36 Thursday 07/20/2017 ***
lminit: rlist0=0x0 align=4096 bits=52 offset=3392
OFF LOG ECHO;READ 77 ; 23
*** SADScript Initialization: /ldata/KEKB/KCG/developer/oldsad/Packages/init.n ***
*** Run time Environment: /ldata/KEKB/KCG/developer/oldsad/Packages/init.local.n ***
RFSW RADCOD RAD FLUC INTRA POL COD DAPER EMIOU CMPLO FOURI SMEAR
F F F T F F T F F F F T
VariableRange = VariableRange$[##]&;
VariableRange$["$DUMMYMARK", "BX", _] := {5, 10};
VariableRange$["$DUMMYMARK", "BY", _] := {1, 20};
FitFunction := Twiss[{"BX", "BY"}, "$DUMMYMARK"] - {1, 25};
FFS["FREE $DUMMYMARK BX; FREE $DUMMYMARK BY"];
FFS["VAR; GO; VAR", 6];
!Variable Keyword Now ! Previous Saved Minimum Maximum Couple Coefficient
$DUMMYMARK BY 1.000000000000 ! 1.000000000 .000000000 1.00000000 20.00000000 1.00000000
$DUMMYMARK BX 1.000000000000 ! 1.000000000 .000000000 5.00000000 10.00000000 1.00000000
Matched. ( 5.5760E-12) DP = 0.01000 DP0 = 0.00000 ExponentOfResidual = 2.0 OffMomentumWeight = 1.000
$$$ f AX ####### # -1.000000 $$$ f BX ####### # 2.000000 $$$ f NX ####### # .125000
$$$ f AY ####### # -.040000 $$$ f BY ####### # 25.040002 $$$ f NY ####### # .006363
$$$ f LENG ####### # 1.000000 $$$ f FUN1 0.0 1 .000000 $$$ f FUN2 0.0 1 2.3614E-6
!Variable Keyword Now ! Previous Saved Minimum Maximum Couple Coefficient
$DUMMYMARK BY 25.00000236136 ! 1.000000000 .000000000 1.00000000 20.00000000 1.00000000
$DUMMYMARK BX 1.000000000000 ! 1.000000000 .000000000 5.00000000 10.00000000 1.00000000
OptimizeOptics[]; FFS["CALC; VAR", 6];
{{{1,5},{20,10}},{(VariableRange$[##]&)->{{1,5},{20,10}}}}
{ 42.000000, 42.810000, 43.222500}
{ 42.000000, 42.133611, 42.810000}
{ 42.000000, 42.000000, 42.133611}
{ 42.000000, 42.000000, 42.000000}
Residual = 41.00 DP = 0.01000 DP0 = 0.00000 ExponentOfResidual = 2.0 OffMomentumWeight = 1.000
$$$ f AX ####### # -.200000 $$$ f BX ####### # 5.200000 $$$ f NX ####### # .031416
$$$ f AY ####### # -.050000 $$$ f BY ####### # 20.050000 $$$ f NY ####### # .007951
$$$ f LENG ####### # 1.000000 $$$ f FUN1 0.0 1 4.000000 $$$ f FUN2 0.0 1 -5.000000
!Variable Keyword Now ! Previous Saved Minimum Maximum Couple Coefficient
$DUMMYMARK BY 20.00000000000 ! 1.000000000 .000000000 1.00000000 20.00000000 1.00000000
$DUMMYMARK BX 5.000000000000 ! 1.000000000 .000000000 5.00000000 10.00000000 1.00000000
> > VariableRangeを使ってください。その目的のために作ってある関数です。
> >
> > Example: VariableRange["QF","ROTATE",v_]:= -0.1 < v < 0.1;
> > VariableRange[x:("BC1L"|"BWL"),"L",_]:={Abs[ltheta[ucl]*Element["ANGLE",x]],lbmax};
> >
> VariableRangeを"純関数"で定義すると意図通りに働かない?
> # VARで制約範囲は認識しているが、GOの動作が制約されていない
> # OptimizeOptics[]は、制約されるっぽぃ
>
シンボル評価を VAR側の処理と整合させて、r6200にて修正実施
> > > VariableRangeを使ってください。その目的のために作ってある関数です。
> > >
> > > Example: VariableRange["QF","ROTATE",v_]:= -0.1 < v < 0.1;
> > > VariableRange[x:("BC1L"|"BWL"),"L",_]:={Abs[ltheta[ucl]*Element["ANGLE",x]],lbmax};
> > >
> > VariableRangeを"純関数"で定義すると意図通りに働かない?
> > # VARで制約範囲は認識しているが、GOの動作が制約されていない
> > # OptimizeOptics[]は、制約されるっぽぃ
> >
> シンボル評価を VAR側の処理と整合させて、r6200にて修正実施
k64のこの点については次回チェックインされるバージョンで対応します。ご指摘ありがとうございました。