サーバ設置居室の空調機更新工事に伴い、こちらのSAD webページ(掲示板含む)の閲覧・使用を停止致します。
閲覧停止(予定)期間: 6月11日(月) 17:00 - 6月15日(金) 9:00
※工事の進捗によって日程が前後する場合があります。
ご不便をお掛け致しますが、宜しくお願い致します。
Changes:
1. Now "operator form" is implemented in the following functions:
Map, Apply, Append, Prepend, Extract, Insert, Delete, Position, Cases, Select, SwitchCases, SelectCases, ReplacePart.
It works as Mathematica's.
Examples:
a=-Range[10];
Map[Abs][a]
Out[1]:= {1,2,3,4,5,6,7,8,9,10}
Apply[Max][a]
Out[2]:= -1
Append[1][a]
Out[3]:= {-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,1}
Prepend[1][a]
Out[4]:= {1,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10}
Extract[{1}][a]
Out[5]:= -1
Insert[3,4][a]
Out[6]:= {-1,-2,-3,3,-4,-5,-6,-7,-8,-9,-10}
Delete[5][a]
Out[7]:= {-1,-2,-3,-4,-6,-7,-8,-9,-10}
Cases[-3][a]
Out[8]:= {-3}
Position[-3][a]
Out[9]:= {{3}}
Position[-3|-2|-5][a,1,1]
Out[10]:= {{2}}
Select[#<-5&][a]
Out[11]:= {-6,-7,-8,-9,-10}
SelectCases[{#<-5&}][a]
Out[12]:= {{-6,-7,-8,-9,-10}}
SwitchCases[{-1,-2}][a]
Out[13]:= {{-1},{-2}}
ReplacePart[1->{2}][a]
Out[14]:= {{2},-2,-3,-4,-5,-6,-7,-8,-9,-10}
2. ReplacePart can be called by 2 arguments, with the rule or list of rules as the second argument. This is same as Mathematica's and more convenient and efficient than before. Calling with 3 arguments as before is still OK.
Examples:
ReplacePart[a,{{5},{7}}->{1}]
Out[17]:= {-1,-2,-3,-4,{1},-6,{1},-8,-9,-10}
ReplacePart[a,{5->{1},7->{2}}]
Out[18]:= {-1,-2,-3,-4,{1},-6,{2},-8,-9,-10}
ReplacePart[a,{{5}->{1},{7}->{2}}]
Out[19]:= {-1,-2,-3,-4,{1},-6,{2},-8,-9,-10}
ReplacePart[a,{5,7}->{1}]
???General::toomany: Too many indices in ReplacePart[{-1,-2,-3,-4,-5,-6,-7,-8,-9,-10},{5,7}->{1}]
ReplacePart[a,{}]
Out[20]:= {-1,-2,-3,-4,-5,-6,-7,-8,-9,-10}
ReplacePart[a,{1},5]
Out[21]:= {-1,-2,-3,-4,{1},-6,-7,-8,-9,-10}
ReplacePart[a,{1},{{5},{7}}]
Out[22]:= {-1,-2,-3,-4,{1},-6,{1},-8,-9,-10}
3. The closed orbit finding in Emittance and CALC6D is modified in the case of RFSW+NORADCOD+NORADTAPER. Now it tries NORFSW first to guess the equilibrium DZ.
Fixes:
1. An issue was found and fixed in pgsolvcond.f for MICAOD correction.
1. A bug in a module procedure ktfsequenceq has been found. It caused
seg faults in various routines including Delete and Insert.
Fixes:
1. ExtractBeamLine for an unexpanded beam line was wrong to cause a
segmentation fault.
Fixes:
1. The SYNCHROBETA command has been restored.
2. Fixed an issue ExternalMap with CALC6D, when it is not defined.
Changes:
1. The default sized of Canvas is now set smaller than the screen size.
RADINTのコード解析まとめ
バグ
* BODYをステップ評価する際に2回目以降、TCAL内部でR0/R0Iの未初期化参照が発生する
** 暗黙のSAVE属性を与える Fortranコンパイラでは動いてしまう
* UINTM4のREAL(8)型の第2引数にREAL(4)型のリテラルを渡している
* SEXTUがTMATRコモンブロックを参照していない
* SEXTU呼び出し前に必要なコモン変数(DL/DKL2)を初期化していない
** SEXTに関しては、1995年のCVSによる管理開始時から動かなかったものと思われる
放射積分評価と対象パラメータ
* BEND(L, ANGLE, E1, E2)
** BODYは、シンプソン積分
** EDGEは、thin lens評価
* QUAD(L, K1)
** BODYは、シンプソン積分
** EDGE無し
* SEXT(L, K2)
** BODYは、中点評価
** EDGE無し
* CAVI(VOLT,HARM,FREQ)
** 電圧の積算
** HARM/FREQは、最終値を控えるのみ
"すぐに分かる"制限事項
* 反転設置の非対称BENDの評価が正しくない
* K0/AE1/AE2を持ったBENDの評価は正しくない
* エレメントのDX/DYオフセットは評価されない
* SEXT内の軌道による転送行列の摂動は評価されない
* "LINEAR CHROMATICITY"に ROTATEが反映されない
** 例えば、90° ROTATEかつ K1反転した QUADを並べると"LINEAR CHROMATICITY"が反転する
表示について
* "LINEAR CHROMATICITY"は、無次元化された(2πで割った) natural linear chromaticity
> 放射積分の値を表示する方法はありませんでしょうか?
> RADINT というコマンドはありますが、まともに動作している
> 感じがしません。
> どうぞよろしくお願い申しあげます。
>
6極の計算まわりがバグバグしてる
* src/SEXTU.fで正しくCOMMONブロックが参照されていない
* src/INTGRL.fでSEXTU呼び出し前にCOMMONブロックの変数を正しく初期化していない
* UNITM4の第二引数がREAL(8)型なのに、単精度のリテラルが積んである
その辺直して、script/design_example.sadを計算すると
tune/emittance/compaction等はEMITと概ね一致する
> 放射積分の値を表示する方法はありませんでしょうか?
> RADINT というコマンドはありますが、まともに動作している
> 感じがしません。
> どうぞよろしくお願い申しあげます。
>
"DETERMINANT=0 MATRIX-INV NOT FOUND"で落ちるのは、src/TCAL.fの R0, R0I配列の未初期化参照バグ
もっとも、BEND/QUAD/SEXT/CAVIしか数えてないので、MULTによる衝突点モデルやSOL+MULTによる変更電磁石モデルなどはまともに計算出来ないと思われる
Fixes:
1. ExternalMap(OPTICS) now works with CALC6D. The usage is same as
CALC4D and fully accepts 6 by 6 transfer matrix.
放射積分計算のスクリプト
(そのまま実行できる条件)
・B は水平ベンドのみ。
・名前は B* で、それ以外なく、B* すべては蹴り角がゼロではない。
・B の角度は ANGLE で入っている。
・逆ベンドはあっても大丈夫にしたつもり。
・最後の resemit の単位は nmrad です。
(そのまま実行できないとき)
・垂直ベンドあり → 大幅な?スクリプト書き換え。
・蹴り角ゼロのベンドがある → ANGLE = 1e-15 とか、超微小の蹴り角を入れればいい。
ON LOG RAD FLUC COD RFSW RADCOD;
FFS;
!NPARA = 4;
$FORM = "15.10";
PageWidth = 1999;
USE RING;
cell calc emit;
bposi = LINE["POSITION","B*"];
GetIntegralCH[num_]:=(
IH = 0;
! Print["Middle Parameters of ",LINE["NAME",num]];
bex = Twiss["BX",num+0.5];
alx = Twiss["AX",num+0.5];
gax = (1+alx*alx)/bex;
etx = Twiss["EX",num+0.5];
epx = Twiss["EPX",num+0.5];
L = LINE["L",num]/2;
tha = LINE["ANGLE",num]/2;
rho = L/tha;
k1 = -1*LINE["K1",num];
k = k1/L/2;
kef2= k - 1/rho/rho;
! Print[LINE["NAME",num]];
! Print["BX = ", bex," AX = ",alx," GX = ", gax];
! Print["EX = ", etx," EPX= ",epx];
! Print["rho= ", rho," L = ",L, " tha = ",tha ];
! Pring["k1 = ", k1, " k = ", k];
! Print["kef= ", kef2];
! FFS["Abort;"];
If[kef2>0,
kef = Sqrt[kef2];
aaa = 2*(-8*kef^2*rho*epx*Sinh[kef*L]+8*kef^3*(kef^2*etx*rho+1)*rho*epx*L)/4/kef^5/rho^2;
bbb = 2*(kef^2*Sinh[2*kef*L]+4*kef^5*rho^2*epx^2*L-2*kef^3*L)/4/kef^5/rho^2;
ccc = 2*(-8*(1+kef^2*rho*etx)*Sinh[kef*L]+6*kef*L+4*kef^5*rho^2*etx^2*L+Sinh[2*kef*L]+8*kef^3*rho*etx*L)/4/kef^5/rho^2;
! Print["abc = ",aaa,bbb,ccc];
IH = IH + aaa * alx + bbb * bex + ccc * gax;
,
kef = Sqrt[-kef2];
aaa = 2*(8*kef^2*rho*epx*Sin[kef*L]+8*kef^3*(kef^2*etx*rho-1)*rho*epx*L)/4/kef^5/rho^2;
bbb = 2*(-kef^2*Sin[2*kef*L]+4*kef^5*rho^2*epx^2*L+2*kef^3*L)/4/kef^5/rho^2;
ccc = 2*(-8*(1-kef^2*rho*etx)*Sin[kef*L]+6*kef*L+4*kef^5*rho^2*etx^2*L+Sin[2*kef*L]-8*kef^3*rho*etx*L)/4/kef^5/rho^2;
! Print["abc = ",aaa,bbb,ccc];
IH = IH + aaa * alx + bbb * bex + ccc * gax;
! Print[IH];
];
IH = IH /rho/rho/Abs[rho];
IH
);
GetIntegralEX[num_]:=(
IE = 0;
! Print["Middle Parameters of ",LINE["NAME",num]];
etx = Twiss["EX",num+0.5];
epx = Twiss["EPX",num+0.5];
L = LINE["L",num]/2;
tha = LINE["ANGLE",num]/2;
rho = L/tha;
k1 = -1*LINE["K1",num];
k = k1/L/2;
kef2= k - 1/rho/rho;
! Print[LINE["NAME",num]];
! Print["BX = ", bex," AX = ",alx," GX = ", gax];
! Print["EX = ", etx," EPX= ",epx];
! Print["rho= ", rho," L = ",L, " tha = ",tha ];
! Pring["k1 = ", k1, " k = ", k];
! Print["kef= ", kef2];
! FFS["Abort;"];
If[kef2>0,
kef = Sqrt[kef2];
IE = ((etx*kef^2*rho+1)*Sinh[kef*L]+epx*kef*rho*Cosh[kef*L]-kef*L-kef*rho*epx)/kef^3/rho;
etx = Twiss["EX",num+0.5];
epx = -1*Twiss["EPX",num+0.5];
IE = IE + ((etx*kef^2*rho+1)*Sinh[kef*L]+epx*kef*rho*Cosh[kef*L]-kef*L-kef*rho*epx)/kef^3/rho;
,
kef = Sqrt[-kef2];
IE = ((etx*kef^2*rho-1)*Sin[kef*L]-epx*kef*rho*Cos[kef*L]+kef*L+kef*rho*epx)/kef^3/rho;
etx = Twiss["EX",num+0.5];
epx = -1*Twiss["EPX",num+0.5];
IE = IE + ((etx*kef^2*rho-1)*Sin[kef*L]-epx*kef*rho*Cos[kef*L]+kef*L+kef*rho*epx)/kef^3/rho;
! Print[IE];
];
IE
);
Jx = 0;
Jy = 0;
Jz = 0;
DFac = 0;
RadIntI1 = 0;
RadIntI2 = 0;
RadIntI3 = 0;
RadIntI4 = 0;
RadIntI5 = 0;
Do[
! Print[i," ",LINE["NAME",bposi[i]]," ",LINE["K1",bposi[i]]==0];
IH = GetIntegralCH[bposi[i]];
RadIntI5 = RadIntI5 + IH;
! Print[bposi[i]," ",LINE["NAME",bposi[i]]," ",IH,aaa,bbb,ccc,alx,bex,gax,L/tha];
,{i,Length[bposi]}];
Do[
IE = GetIntegralEX[bposi[i]];
L = LINE["L",bposi[i]];
tha = LINE["ANGLE",bposi[i]];
rho = L/tha;
k1 = -LINE["K1",bposi[i]]/L;
RadIntI1 = RadIntI1 + IE / rho;
RadIntI2 = RadIntI2 + tha*tha/L;
RadIntI3 = RadIntI3 + L / rho / rho / Abs[rho];
RadIntI4 = RadIntI4 + IE*(1/rho^3-2*k1/rho);
! Print[bposi[i], IE];
,{i,Length[bposi]}];
Print[RadIntI1,RadIntI2,RadIntI3,RadIntI4,RadIntI5];
DFac = RadIntI4 / RadIntI2;
sademit = Emittance[];
Jx = 1 - DFac;
Jy = 1; !!!!!!! only varid for the case without vertical bendings.
Jz = 2 + DFac;
Print[Jx,Jy,Jz];
cq = 3.832/10000;
gamma = MOMENTUM / 1000000/0.51099906;
resemit = cq * gamma * gamma * RadIntI5 / RadIntI2 / Jx;
Print[resemit];
Print[(Emittances/.sademit)[1]];
stop;
stop;
放射積分の値を表示する方法はありませんでしょうか?
RADINT というコマンドはありますが、まともに動作している
感じがしません。
どうぞよろしくお願い申しあげます。
(省略)
> という位相空間プロットですが、古いSADでは動くのですが、新しいSADでは動きません。
> (1周目に全てロス、と言われてしまいます。) 仕様か、スクリプトのミスか、機能の削除か、
> 可能でしたらアドバイスを頂けないでしょうか?
>
MAINレベルコマンドの仕様書を読んだことが無いので、どのような
動作が正しいか分からない(出力結果の読み方が分からないので判断しかねる)ので助言のみ
MAIN trunkは、Subversionで管理されているので、comit単位でrevision番号が割り当てられています
従って、正常と思われる過去のrevision番号と不具合があると思われる現在のrevision番号から2分法で問題となるcommitと特定しbackoutすれば良いのでは?
少なくとも、挙動を変えたコードの変更を特定できるはずです
過去のコードを現行環境でコンパイルして挙動が変わる場合、
コードの記述が言語仕様の未定義領域に抵触しており、動作が
コンパイラ依存になっている可能性があります
この場合は、言語仕様の範囲内で正しい動作を記述するコードに
書き直す必要あり
注)
C/Fortranの言語仕様は、文法的には合法だが、意味論が未定義
(コンパイラ実装者は、どのように実装しても良いという意味)な
記述が存在するので、それに抵触する場合、コンパイラの種類や
バージョンで挙動が変わり得ます
MOMENTUM= 0.58 GEV;
MARK MKS =()
MKE =();
MONI PM =();
CAVI CAVI=(VOLT= 50000 FREQ = 104950000);
BEND PV = ( L = 0 K0 = 0 ROTATE =-90 DEG )
PH = ( L = 0 K0 = 0 );
QUAD QF3 = ( L =0.1800 K1 =5.939500*0.1800 )
QF2 = ( L =0.1800 K1 =6.070000*0.1800 );
SEXT SD =(L =.15 K2 =-11.729486011842393 )
SF =(L =.075 K2 =8.681418961367605 ) ;
BEND BH = (L = 0.8500 ANGLE = 0.523599 K1 = -1.678200*0.8500 E1=0 E2=0);
DRIFT
D14837 = (L = 1.4837 )
D0100 = (L = 0.1000 )
D0180 = (L = 0.1800 )
D0190 = (L = 0.1900 )
D0120 = (L = 0.1200 )
;
LINE
HV = (PH PV)
CELL
=(MKS
D14837 PM D0100 QF3 D0180 HV D0180
BH
D0190 SD D0120 QF2 D0120 SF
PM
SF D0120 QF2 D0120 SD D0190
BH D0180 HV D0180 QF3 D0100 PM D14837
MKE)
RING = (3*CELL CAVI 3*CELL)
;
ON LOG RAD COD RADCOD FLUC RFSW;
EMIT USE = RING;
PHSPLOTS = 10;
TRACK USE = RING NPART = 21 TURNS = 5000
NX=(1,10,20,30,40,50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200)
NY=(1) NZ=(1);
PHSPLOTS = 11;
TRACK USE = RING NPART = 21 TURNS = 5000
NY=(1,10,20,30,40,50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200) )
NX=(1) NZ=(1);
PHSPLOTS=9;
TRACK USE = RING NPART = 17 TURNS = 5000
NZ=(-46.23,-40.45,-34.67,-28.89,-23.12,-17.34,-11.56,-5.78,0,5.78,11.56,17.34,23.12,28.89,34.67,40.45,46.23)
NX=(1) NY=(1);
stop;
stop;
という位相空間プロットですが、古いSADでは動くのですが、新しいSADでは動きません。
(1周目に全てロス、と言われてしまいます。) 仕様か、スクリプトのミスか、機能の削除か、
可能でしたらアドバイスを頂けないでしょうか?
Changes:
1. The synchrotron radiation in tracking with RING, RAD and FLUC, now
take the real spectrum of photons. Historically, The real spectrum has
been included for TRPT, not for RING. It is changed. Now the real
spectrum considering the probability of photon emission are all taken
into account. However, unlike TRPT, for RING, the stochasticity of the
emission point along the orbit is not yet simulated. The result will
converge to the real value when EPS become sufficiently small.
2. Now synchrotron radiation in MULT with higher multipoles as well as
fringe field of all magnets contribute to the synchrotron radiation.
They are calculated via kinematics, not from the fields.
3. The settings of OpticsProlog and OpticsEpilog are reset for USE and
VISIT. For VISIT, they are restored by BYE.
4. A new variable NFAMP is defined to specify the phase angle of
particles for MatchingAmplitude. The defalut is 3, which gives the same
setting as before. Any positive number should work. The particles are distributed
with 2Pi/NPAMP phase separation each. If it is zero, MatchingAmplitude is turned off.
Bug fixes:
1. Matching with CALC6D/TRPT/INS have not been working properly, due to
miscalculation of the phase advances in the middle of matching.
2. A local symbol s1 in NIntegrate was not well defined.
> 結局,gccを4.9.2から5.3.0に変更してmakeしたところ,正常に動作するようになりました.お騒がせいたしました.
>
だとすると、gfrotran側でのISO Fortran2003/2008の未実装領域 or 実装バグを踏んでいたかなぁ・・・
GCCの開発的には、GCC 5系列は 2017/10/10の GCC 5.5のリリースでサポート終了したようなので、
現時点の推奨はGCC 6.4 or GCC 7.2となります
(afsad*系のSADは、gfortran 6.4 + LLVM/clang 5.0.0)
> > > > > お世話になっております.
> > > > > Ver.1.0.10.9a1 において,CaMonitor/CaGetで STRING typeのPVを指定すると,三文字までしかデータが取れません.
> > > > >
> > > > > e.g.)
> > > > > PVnameの内容が,
> > > > > SP_AT_0
> > > > > である場合,
> > > > >
> > > > > data=CaMonitor["PVname"];
> > > > > Print[data@Value[]]
> > > > > をsadで実行すると,最初の三文字である,
> > > > > SP_
> > > > > が取得される.
> > > > >
> > > > コード的には、ca_element_countが 1なPVと転送要素数 1でのアクセスは等価なので、
> > > > DBF_STRINGなwaveformに対する読み出しで再現を試みましたが、afsad*cでは再現できませんでした
> > > >
> > > > ca = CaMonitor["LIiBM:BPM_SYNC:NAMELIST", DefaultCount->1];
> > > > ca@WaitValue[];
> > > > Print[ca@Value[]];
> > > > SP_AT_0
> > > >
> > > > In[1]:= CaRead["LIiBM:BPM_SYNC:NAMELIST"->2]
> > > > Out[1]:= {{"SP_AT_0","SP_AT_1"},17,3,0}
> > > > In[2]:= CaRead["LIiBM:BPM_SYNC:NAMELIST"->1]
> > > > Out[2]:= {"SP_AT_0",17,3,0}
> > >
> > >
> > > ありがとうございます.取り急ぎ,CaReadでは正常に表示されるようです.他も,ためしてみます.
> > >
> > > In[2]:= CaRead["LIiBM:BPM_SYNC:NAMELIST"->5]
> > > Out[2]:= {{"SP_AT_0","SP_AT_1","SP_AT_2","SP_A1_G","SP_A1_0"},17,3,0}
> > >
> > DBF_STRINGなPV読み出しで、CaReadが正常、CaMonitor@Value[]でデータが腐るという症状のバグが、
> > V1.0.10.9aからV1.0.10.9a1の途中に存在しています
> > 当該バグは、Revisionev.6304で修正され patch levelが a1へバンプされています
> >
> > r6304の修正対象は、要素数 2以上のDBF_STRING PVからのValue callback時にて受信データからSAD上のString Listオブジェクトを構築する際に設定するStringオブジェクトの寿命スコープに誤りがあり、GCによりList内のStringオブジェクトの領域が破棄されるといバグです
> >
> > BFA[5148]: Fix CaMonitor crash by DBF_STRING waveform
> > -Fix character pointer handling for Fix DBR_TIME_STRING ValueCB
> > -Fix String object scope for DBR_TIME_STRING waveform(n > 1)
>
> tfEPICSCA.c において
> static int bDebug = 10;
> に変更してためしてみました.
> (gcc 4.9.2, CentOS 4.9, EPICS base R3.14.12 および R3.16.1)
>
> <17-12-26(Tue) 17:30:40><-tcsh-></usr/users/masanori/work/sad/><masanori@pistachio>sadmope test5.sad
> *** Welcome to SAD Ver.1.0.10.9a1 built at 2017-12-26 17:24:12 +0900 ***
> *** Today: 17:30:44 Tuesday 12/26/2017 ***
> cpu time= 5.6003E-02(sec) dt= 56.003(msec) free area:: 1793
> OFF LOG ECHO;READ 77 ; 23
> cpu time= 5.6003E-02(sec) dt= 56.003(msec) free area:: 1793
> cpu time= 5.6003E-02(sec) dt= 56.003(msec) free area:: 1792
> *** SADScript Initialization: /usr/new/pkg/operation/SAD_mt/share/Packages/init.n ***
> *** Runtime Environment: /usr/new/pkg/operation/SAD_mt/share/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
> Design orbit length = 1.0000000000000000
>
> BpmName=CaMonitor["LIiBM:BPM_SYNC:NAMELIST"];
> eca_init
> eca_chid_new: extend table size from 0 to 1024
> eca_chid_new: allocate slot[1] for chid[0x9ed9cc8]
> eca_fd_register: fd[5] open (nil)
> CaOpen[LIiBM:BPM_SYNC:NAMELIST]
> eca_chid_cas: Update slot[1] chid from 0x9ed9cc8 to 0xa1183b8
> TkSense[1];
> eca_fd_callback: >>> enter
> eca_constatcb[LIiBM:BPM_SYNC:NAMELIST]: id=1 up conn=2
> eca_evid_new: extend table size from 0 to 1024
> eca_evid_new: allocate slot[1] for evid[0xb4dab02c]
> eca_evid_cas: Update slot[1] evid from 0xb4dab02c to 0xa273890
> eca_chid_inc: increment slot[1] reference count to 1
> eca_fd_callback: exit <<<<
> eca_fd_callback: >>> enter
> eca_fd_callback: exit <<<<
> eca_fd_callback: >>> enter
> eca_valuecb[LIiBM:BPM_SYNC:NAMELIST]: id=1 conn=2 stat=1 DBR_TIME_STRING[99] {"SP_AT_0", "SP_AT_1", "SP_AT_2", "SP_A1_G", "SP_A1_0", "SP_A1_1", "SP_A1_M", "SP_AS_1", "SP_AS_2", "SP_AS_3", "SP_A2_1", "SP_A2_3", "SP_A2_4", "SP_A3_2", "SP_A3_4", "SP_A4_2", "SP_A4_4", "SP_B1_4", "SP_B2_4", "SP_B3_4", "SP_B4_4", "SP_B5_4", "SP_B6_4", "SP_B7_4", "SP_R0_01", "SP_R0_02", "SP_R0_14", "SP_R0_22", "SP_R0_32", "SP_R0_42", "SP_R0_51", "SP_R0_62", "SP_R0_63", "SP_C1_4", "SP_C2_4", "SP_C3_4", "SP_C4_4", "SP_C5_4", "SP_C6_4", "SP_C7_4", "SP_C8_4", "SP_11_4", "SP_12_4", "SP_13_5", "SP_15_T", "SP_16_5", "SP_17_2", "SP_17_44", "SP_18_2", "SP_18_49", "SP_21_2", "SP_21_4", "SP_22_2", "SP_22_4", "SP_23_2", "SP_23_4", "SP_24_1", "SP_24_2", "SP_24_3", "SP_24_4", "SP_26_1", "SP_26_2", "SP_26_3", "SP_26_4", "SP_27_2", "SP_27_4", "SP_28_2", "SP_28_4", "SP_DC_2", "S8_DN_01U", "SP_DN_12", "SP_DN_21", "SP_DN_31", "S8_DN_42U", "SP_DC_4", "SP_32_4", "SP_34_4", "SP_36_4", "SP_38_4", "SP_42_4", "SP_44_4", "SP_46_4", "SP_48_4", "SP_52_4", "SP_54_4", "SP_56_4", "SP_58_0", "SP_58_4", "SP_61_3", "SP_61_6", "SP_61_8", "SP_61_D1", "SP_61_D2", "SP_61_H1", "SP_61_A1", "SP_61_A3", "SP_61_F1", "SP_61_F4", "SP_61_F5"}
> Segmentation fault
結局,gccを4.9.2から5.3.0に変更してmakeしたところ,正常に動作するようになりました.お騒がせいたしました.
> > > > お世話になっております.
> > > > Ver.1.0.10.9a1 において,CaMonitor/CaGetで STRING typeのPVを指定すると,三文字までしかデータが取れません.
> > > >
> > > > e.g.)
> > > > PVnameの内容が,
> > > > SP_AT_0
> > > > である場合,
> > > >
> > > > data=CaMonitor["PVname"];
> > > > Print[data@Value[]]
> > > > をsadで実行すると,最初の三文字である,
> > > > SP_
> > > > が取得される.
> > > >
> > > コード的には、ca_element_countが 1なPVと転送要素数 1でのアクセスは等価なので、
> > > DBF_STRINGなwaveformに対する読み出しで再現を試みましたが、afsad*cでは再現できませんでした
> > >
> > > ca = CaMonitor["LIiBM:BPM_SYNC:NAMELIST", DefaultCount->1];
> > > ca@WaitValue[];
> > > Print[ca@Value[]];
> > > SP_AT_0
> > >
> > > In[1]:= CaRead["LIiBM:BPM_SYNC:NAMELIST"->2]
> > > Out[1]:= {{"SP_AT_0","SP_AT_1"},17,3,0}
> > > In[2]:= CaRead["LIiBM:BPM_SYNC:NAMELIST"->1]
> > > Out[2]:= {"SP_AT_0",17,3,0}
> >
> >
> > ありがとうございます.取り急ぎ,CaReadでは正常に表示されるようです.他も,ためしてみます.
> >
> > In[2]:= CaRead["LIiBM:BPM_SYNC:NAMELIST"->5]
> > Out[2]:= {{"SP_AT_0","SP_AT_1","SP_AT_2","SP_A1_G","SP_A1_0"},17,3,0}
> >
> DBF_STRINGなPV読み出しで、CaReadが正常、CaMonitor@Value[]でデータが腐るという症状のバグが、
> V1.0.10.9aからV1.0.10.9a1の途中に存在しています
> 当該バグは、Revisionev.6304で修正され patch levelが a1へバンプされています
>
> r6304の修正対象は、要素数 2以上のDBF_STRING PVからのValue callback時にて受信データからSAD上のString Listオブジェクトを構築する際に設定するStringオブジェクトの寿命スコープに誤りがあり、GCによりList内のStringオブジェクトの領域が破棄されるといバグです
>
> BFA[5148]: Fix CaMonitor crash by DBF_STRING waveform
> -Fix character pointer handling for Fix DBR_TIME_STRING ValueCB
> -Fix String object scope for DBR_TIME_STRING waveform(n > 1)
tfEPICSCA.c において
static int bDebug = 10;
に変更してためしてみました.
(gcc 4.9.2, CentOS 4.9, EPICS base R3.14.12 および R3.16.1)
<17-12-26(Tue) 17:30:40><-tcsh-></usr/users/masanori/work/sad/><masanori@pistachio>sadmope test5.sad
*** Welcome to SAD Ver.1.0.10.9a1 built at 2017-12-26 17:24:12 +0900 ***
*** Today: 17:30:44 Tuesday 12/26/2017 ***
cpu time= 5.6003E-02(sec) dt= 56.003(msec) free area:: 1793
OFF LOG ECHO;READ 77 ; 23
cpu time= 5.6003E-02(sec) dt= 56.003(msec) free area:: 1793
cpu time= 5.6003E-02(sec) dt= 56.003(msec) free area:: 1792
*** SADScript Initialization: /usr/new/pkg/operation/SAD_mt/share/Packages/init.n ***
*** Runtime Environment: /usr/new/pkg/operation/SAD_mt/share/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
Design orbit length = 1.0000000000000000
BpmName=CaMonitor["LIiBM:BPM_SYNC:NAMELIST"];
eca_init
eca_chid_new: extend table size from 0 to 1024
eca_chid_new: allocate slot[1] for chid[0x9ed9cc8]
eca_fd_register: fd[5] open (nil)
CaOpen[LIiBM:BPM_SYNC:NAMELIST]
eca_chid_cas: Update slot[1] chid from 0x9ed9cc8 to 0xa1183b8
TkSense[1];
eca_fd_callback: >>> enter
eca_constatcb[LIiBM:BPM_SYNC:NAMELIST]: id=1 up conn=2
eca_evid_new: extend table size from 0 to 1024
eca_evid_new: allocate slot[1] for evid[0xb4dab02c]
eca_evid_cas: Update slot[1] evid from 0xb4dab02c to 0xa273890
eca_chid_inc: increment slot[1] reference count to 1
eca_fd_callback: exit <<<<
eca_fd_callback: >>> enter
eca_fd_callback: exit <<<<
eca_fd_callback: >>> enter
eca_valuecb[LIiBM:BPM_SYNC:NAMELIST]: id=1 conn=2 stat=1 DBR_TIME_STRING[99] {"SP_AT_0", "SP_AT_1", "SP_AT_2", "SP_A1_G", "SP_A1_0", "SP_A1_1", "SP_A1_M", "SP_AS_1", "SP_AS_2", "SP_AS_3", "SP_A2_1", "SP_A2_3", "SP_A2_4", "SP_A3_2", "SP_A3_4", "SP_A4_2", "SP_A4_4", "SP_B1_4", "SP_B2_4", "SP_B3_4", "SP_B4_4", "SP_B5_4", "SP_B6_4", "SP_B7_4", "SP_R0_01", "SP_R0_02", "SP_R0_14", "SP_R0_22", "SP_R0_32", "SP_R0_42", "SP_R0_51", "SP_R0_62", "SP_R0_63", "SP_C1_4", "SP_C2_4", "SP_C3_4", "SP_C4_4", "SP_C5_4", "SP_C6_4", "SP_C7_4", "SP_C8_4", "SP_11_4", "SP_12_4", "SP_13_5", "SP_15_T", "SP_16_5", "SP_17_2", "SP_17_44", "SP_18_2", "SP_18_49", "SP_21_2", "SP_21_4", "SP_22_2", "SP_22_4", "SP_23_2", "SP_23_4", "SP_24_1", "SP_24_2", "SP_24_3", "SP_24_4", "SP_26_1", "SP_26_2", "SP_26_3", "SP_26_4", "SP_27_2", "SP_27_4", "SP_28_2", "SP_28_4", "SP_DC_2", "S8_DN_01U", "SP_DN_12", "SP_DN_21", "SP_DN_31", "S8_DN_42U", "SP_DC_4", "SP_32_4", "SP_34_4", "SP_36_4", "SP_38_4", "SP_42_4", "SP_44_4", "SP_46_4", "SP_48_4", "SP_52_4", "SP_54_4", "SP_56_4", "SP_58_0", "SP_58_4", "SP_61_3", "SP_61_6", "SP_61_8", "SP_61_D1", "SP_61_D2", "SP_61_H1", "SP_61_A1", "SP_61_A3", "SP_61_F1", "SP_61_F4", "SP_61_F5"}
Segmentation fault
> > > お世話になっております.
> > > Ver.1.0.10.9a1 において,CaMonitor/CaGetで STRING typeのPVを指定すると,三文字までしかデータが取れません.
> > >
> > > e.g.)
> > > PVnameの内容が,
> > > SP_AT_0
> > > である場合,
> > >
> > > data=CaMonitor["PVname"];
> > > Print[data@Value[]]
> > > をsadで実行すると,最初の三文字である,
> > > SP_
> > > が取得される.
> > >
> > コード的には、ca_element_countが 1なPVと転送要素数 1でのアクセスは等価なので、
> > DBF_STRINGなwaveformに対する読み出しで再現を試みましたが、afsad*cでは再現できませんでした
> >
> > ca = CaMonitor["LIiBM:BPM_SYNC:NAMELIST", DefaultCount->1];
> > ca@WaitValue[];
> > Print[ca@Value[]];
> > SP_AT_0
> >
> > In[1]:= CaRead["LIiBM:BPM_SYNC:NAMELIST"->2]
> > Out[1]:= {{"SP_AT_0","SP_AT_1"},17,3,0}
> > In[2]:= CaRead["LIiBM:BPM_SYNC:NAMELIST"->1]
> > Out[2]:= {"SP_AT_0",17,3,0}
>
>
> ありがとうございます.取り急ぎ,CaReadでは正常に表示されるようです.他も,ためしてみます.
>
> In[2]:= CaRead["LIiBM:BPM_SYNC:NAMELIST"->5]
> Out[2]:= {{"SP_AT_0","SP_AT_1","SP_AT_2","SP_A1_G","SP_A1_0"},17,3,0}
>
DBF_STRINGなPV読み出しで、CaReadが正常、CaMonitor@Value[]でデータが腐るという症状のバグが、
V1.0.10.9aからV1.0.10.9a1の途中に存在しています
当該バグは、Revisionev.6304で修正され patch levelが a1へバンプされています
r6304の修正対象は、要素数 2以上のDBF_STRING PVからのValue callback時にて受信データからSAD上のString Listオブジェクトを構築する際に設定するStringオブジェクトの寿命スコープに誤りがあり、GCによりList内のStringオブジェクトの領域が破棄されるといバグです
BFA[5148]: Fix CaMonitor crash by DBF_STRING waveform
-Fix character pointer handling for Fix DBR_TIME_STRING ValueCB
-Fix String object scope for DBR_TIME_STRING waveform(n > 1)
> > お世話になっております.
> > Ver.1.0.10.9a1 において,CaMonitor/CaGetで STRING typeのPVを指定すると,三文字までしかデータが取れません.
> >
> > e.g.)
> > PVnameの内容が,
> > SP_AT_0
> > である場合,
> >
> > data=CaMonitor["PVname"];
> > Print[data@Value[]]
> > をsadで実行すると,最初の三文字である,
> > SP_
> > が取得される.
> >
> コード的には、ca_element_countが 1なPVと転送要素数 1でのアクセスは等価なので、
> DBF_STRINGなwaveformに対する読み出しで再現を試みましたが、afsad*cでは再現できませんでした
>
> ca = CaMonitor["LIiBM:BPM_SYNC:NAMELIST", DefaultCount->1];
> ca@WaitValue[];
> Print[ca@Value[]];
> SP_AT_0
>
> In[1]:= CaRead["LIiBM:BPM_SYNC:NAMELIST"->2]
> Out[1]:= {{"SP_AT_0","SP_AT_1"},17,3,0}
> In[2]:= CaRead["LIiBM:BPM_SYNC:NAMELIST"->1]
> Out[2]:= {"SP_AT_0",17,3,0}
ありがとうございます.取り急ぎ,CaReadでは正常に表示されるようです.他も,ためしてみます.
In[2]:= CaRead["LIiBM:BPM_SYNC:NAMELIST"->5]
Out[2]:= {{"SP_AT_0","SP_AT_1","SP_AT_2","SP_A1_G","SP_A1_0"},17,3,0}
> お世話になっております.
> Ver.1.0.10.9a1 において,CaMonitor/CaGetで STRING typeのPVを指定すると,三文字までしかデータが取れません.
>
> e.g.)
> PVnameの内容が,
> SP_AT_0
> である場合,
>
> data=CaMonitor["PVname"];
> Print[data@Value[]]
> をsadで実行すると,最初の三文字である,
> SP_
> が取得される.
>
コード的には、ca_element_countが 1なPVと転送要素数 1でのアクセスは等価なので、
DBF_STRINGなwaveformに対する読み出しで再現を試みましたが、afsad*cでは再現できませんでした
ca = CaMonitor["LIiBM:BPM_SYNC:NAMELIST", DefaultCount->1];
ca@WaitValue[];
Print[ca@Value[]];
SP_AT_0
In[1]:= CaRead["LIiBM:BPM_SYNC:NAMELIST"->2]
Out[1]:= {{"SP_AT_0","SP_AT_1"},17,3,0}
In[2]:= CaRead["LIiBM:BPM_SYNC:NAMELIST"->1]
Out[2]:= {"SP_AT_0",17,3,0}
お世話になっております.
Ver.1.0.10.9a1 において,CaMonitor/CaGetで STRING typeのPVを指定すると,三文字までしかデータが取れません.
e.g.)
PVnameの内容が,
SP_AT_0
である場合,
data=CaMonitor["PVname"];
Print[data@Value[]]
をsadで実行すると,最初の三文字である,
SP_
が取得される.
取り急ぎ,ご報告いたします.
Bug fixes:
1. The transfer matrix of BEND and MULT with nonzero ANGLE and nonzero K1 has been wrong since 1.0.10.9.1k64, on around Mar. 14, 2016. The amount of error was usually not large unless the horizontal focusing (1/rhob + K1) is too weak.
2. DynamicApertureSurvey with artificial damping has not been working for a while, probably within a half year.
Changes:
1. New functions FitGaussian and FitEmit are implemented:
FitGaussian performs Gaussian fit of 1D list data:
FitGaussian[data, [opt, ...]]
returns a list
{sigma, mean, {sigma_conf, mean_conf}, chisq} ,
where sigma_conf and mean_conf are the confidence interval of the results sigma and mean, respectively.
opt is options to Fit. If Plot->True is specified, a plot of the fitting will be made.
FitEmit obtains the emittance, beta, alpha, etc. from data of particles x and px using FitGaussian.
FitEmit[x, px] ,
where x and px are the lists of data of the particles in the phase space, returns a list
{{xmean, pxmean, alpha, beta, emittance},
{xmean, pxmean, alpha, beta, emittance}_conf},
where the second component is the confidence interval of the first.
2. The character "\m" (RETURN) is added to WordSeparators to read a file generated by Windows more easily. Now the default WordSeparators are " ,\t\m".
Fixes:
1. Judgment whether to do a parallel processing in TrackParticles was
wrong when the number of particles or the length of the lattice was
very wrong.
2. Expansion of values of elements changed by Element or LINE functions
have been wrong, since 1.1.1k64_pre11.
Changes:
1. A new flag K64 has been created. If it is OFF, TYPE tries to omit
keywords which are not accepted by the legacy version. The default is
ON.
2. The initialization of internal databases LINE$P and Element$P was
changed for speed in the most of cases.
3. The restriction of transverse phase advance in CALC6D has been
relaxed from -1e-9 to -0.1 (radian). It has caused occasional jump of
tunes by 1 in some cases.