diff --git a/manual/manual-client/Boards.png b/manual/manual-client/Boards.png deleted file mode 100755 index 6365ff013..000000000 Binary files a/manual/manual-client/Boards.png and /dev/null differ diff --git a/manual/manual-client/Client2.eps b/manual/manual-client/Client2.eps deleted file mode 100755 index 5756e98af..000000000 --- a/manual/manual-client/Client2.eps +++ /dev/null @@ -1,452 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: GIMP PostScript file plugin V 1.17 by Peter Kirchgessner -%%Title: Client2.eps -%%CreationDate: Fri Aug 5 09:34:34 2016 -%%DocumentData: Clean7Bit -%%LanguageLevel: 2 -%%Pages: 1 -%%BoundingBox: 14 14 460 303 -%%EndComments -%%BeginProlog -% Use own dictionary to avoid conflicts -10 dict begin -%%EndProlog -%%Page: 1 1 -% Translate for offset -14.173228346456694 14.173228346456694 translate -% Translate to begin of first scanline -0 287.95876879026486 translate -445.43622047244094 -287.95876879026486 scale -% Image geometry -594 384 8 -% Transformation matrix -[ 594 0 0 384 0 0 ] -currentfile /ASCII85Decode filter /RunLengthDecode filter -%%BeginData: 31939 ASCII Bytes -image -JcC<$JcC<$YQ'1RJcC<$JcDqRJcC<$JcC<$YQ'1RJcC<$JcDqRJcC<$JcC<$YQ'1RJcC<$JcDqR -JcC<$JcC<$YQ'1RJcC<$JcDqRJcC<$JcC<$YQ'1RJcC<$JcDqRJcC<$JcC<$YQ'1RJcC<$JcDqR -JcC<$JcC<$YQ'1RJcC<$JcDqRJcC<$JcC<$YQ'1RJcC<$JcDqRJcC<$JcC<$YQ'1RJcC<$JcDqR -JcC<$JcC<$YQ'1RJcC<$JcDqRJcC<$JcC<$YQ'1RJcC<$JcDqRJcC<$JcC<$YQ'1RJcC<$JcDqR -JcC<$JcC<$YQ'1RJcC<$JcDqRJcC<$JcC<$YQ'1RJcC<$JcDqRJcC<$JcC<$YQ'1RJcC<$JcDqR -JcC<$JcC<$YQ'1RJcC<$JcDqRJcC<$JcC<$YQ'1RJcC<$JcDqRJcC<$JcC<$YQ'1RJcFg2"oFoZ -'H[e`!!&qHrrg8^"TZ_ss+p]+s+143rsIU:$Bk#\r3@:BT'?7Um#161!^$J+JcCQ+JcC<$k5PPL -*s9=VrrV*lQ0SANrCq4srrPOfbCT\Ls+13$s5s=_A,p6cAs7-1T -rr3%l!,ql:#c[k[qu>gV-r9gA$VUQ:s8PFdbQ%S_BE%o2N.M"js+13$s6'C`OoQ'errU=CJ,TBO -U]>$,VZ<(_rrEQ^rr3%l!,ql:!j;TErr3&B!.XtI%AWu9s8PFdbQ%T1!,q@Xs,R,1s+145rr]A' -!;-$c!hfUGrVm)L!'pR^!13]b!=pj_rrSemDuTbYqEOoL"4UAkDr^0XF/rlb4s/,f!c"C:lrr)j!on6Dnc2Sj&(Bep8rr(>d>4hjpbm[5@s6qD"s8S\kQ2gm]"Y0NO -#fludcCrI\!,DK4#L*ZLqZ$%4PQ(Ri3<7)!s!#Yds5+"2JcCl4JcD_L"SSH`IH1,&#jZJ@i5/As -[eS>O#k*O+$4%\O\c2R-*nF1I@TBc7s2-\o0sg+[!!7uOs8HO4*hT#T!"t@Grr3\`;)_raZiC'P -Gldt9T`6)BBmimiJcCi3JcDeN"PRrrWquDg$MT,nHf#oX>gA^%1$,Bjl)aBJT -s64HQs7H>Bs3L]Qn__X,]=Z,-eD9EboD\s_O\Ul&o)AgUBP6/jrr`4h;VH^%mf*R`^l)K"BqEcN -hu=/3BI=]VKB`F9l`"AWKn99rs+14$s!-p5Jn%nc=D2uLkp:o@9Qi9>$,O'Z,thbp?,!0>?+[(?r^3.=(muEqrn%]V,cfkrrV3]N5kl'qp1aE -aH?iLEt02aMStp\b$ldWg?Co`'LBh#@SNortaHF$Bk#\r3@:BT)\ic!s$gMq5+T-\c)OA0gPd=H2nubs8Vir!7UuDV@W -c_BFJ$\@nrs&4g73!FMZMsk0n?6Oi2EYKJlM1A[dWg?Co`'LBh>[PBJ,]HI"7'iBla-Tmrd9Oar -rHN^rr3$I!5ng9#"8@glQ65Er;QiV':&Rs!Y,4^rr3Fn!$M:@s4.1=s8RrV0)beO%KP,[rr\Pe+ -TCO'#N`7>=B9XIi7e2DrMra:*D<1)s8Vr3I76%R;O,u.rrLPmJcGBBJcFU,!pq?#qu6cK=H*'_r -rW16IHUV1Vu?Vs-NM'`rroP#s'u+AqYpSVN;ihY%fk5\rsdW]!9=+ZI0K$5qYpW+: -9M&*"1_*h[R\o380irr`.`< -6i)T"iaQ!pA\7SrrOPJ_u0N:[K$F*p&>((!8%5M#E8^Js8U1@W;ceuMZ>F/rrN]2fDbdON;u38r -s8A>P@7O&QHK$Trs%(p.N:'hir8r`o[X^s8I[fp\Omlmr`=+^ -AeJb=+9WF/rs0,8fDkH2#oVFir -t=a2-5oNS=^#!9Dh!h?YJ8E@n)OEPjF/g&.WUQO?%hpgrr_.fF6ic("7'Q?n)aQN-NM'^rrS>`&G5u2%fd[t*&rE6s8Vs4>Q+R'MZ>F/r -s'&7+!hmdIdH_,&o$i.>B#:eZ,4W0agnC=Lj3T8r)j>7EIj7GZGP&Lo(W.gm>3kC-"P'prs7>D; -E-R'IDPd>rrLPmJcGBBJcFR+!*]@$!pWa^q#:H2:T"-2rr_J&AE!=`"3sT1rTF1^-NM'^rr]A'! -;,sa!Y5:_qYpW.!4De*!fI%3rVlp0!8$]>/nsfYqrcD@V3-.;=BJ^/??;!s[)q;"s7b^.a1%t5L -Nd?5=]ed/=_)SD*$JFnrVm/gW+%kI5%q.hhZ!W)G_,nes+14+rr?7#rr`7[@IX*m"9"cfa3">`m -s/-fp&>-nV+SbkrrOPJ_u0N:jo>Cop&>((!8%)I!al][IYqYpWE9>UE'" -7pnLiQ_B)p5;klnc&^_HXGq#rrOPJ_u'H88H;rerrN]2fDGRLp'tg7rrS)Y0E(nP%fk5MrsEu/> -5u<O0$TSmkt=BA:N9<),trQU0k2E+Bs5!\T=S_t!pN(QQq -#:HT@XRdprr`.f:Uf`k"5@%5q<\+_-31p[rr^g[!3uG$!R6c+rrNZ1f),IKX8p09rrS&X0)beO% -KP)KrsF#0>5tG+mb5^ZCZtd,dViXms&rkm2FDZ#pXB-CdWg?Co`'LBh>[IXp\t<09>pT)"3490r -RLoNq3F[OrTaC`ZomaU"9'#8Zhj\5_\WH!gA_'#EE`#7s7ZTqa8>l<;BGf7rsiEH8XW;Q\qfmi5c#h!XHs8Q8:U$L&)!Rc4Ds7H>Bs5!\T>5%suolY3Cq#:HqVGFtYrr]l*X -SqGa"8J0V548FTVHEm!-\:OZrt4^T2$sU1;n;o-s0"ll!&BB(rr3&h#Bp(G%D-ou!!$&YY=8Kl1 -5PYorsF#0>5uod>?Y3(R-=PTdVjp@s&a")cMmpnG_,nes+14+rr?7$rrDrlrrUA:Z1n8#p4Q`+g -]%BFAUsUArrr%S:p9k%VuHgCiEG1>#L[OGs8Q8:nBV%7dWg?Co`'LBh>[IYrr3&r;:G@@"8e$[h -Y7$Pk%Jo+hZ!Yq9@E,*"7UtA\GlL.>,VB%Gi;iars-tjL]@BXC%0FJ!Rc4Ds7H>Bs5!\T>5eI&n -5R*rrr_:gJbJj<"3sZ,qr.PV]O1F!rr_S72]DcdW'j#L[g@s8Q8:n -BV%7dWg?Co`'LBh>[IYr;Qo3S;MFcq#:HmN*+X)rr_tJ<7U.2!p*#CmJd:GCgkcerrHj'W;cpDi -EG1>#L[g@s8Q8:nBV%7dWg?Co`'LBh>[IYr;Qqk]Do9:l1b2[lY^V+p\t?XAo-etrrW$mipQgKf -OeaLpAY/8j/DtZGi;Z\rs-trGlReIC%0FJ!Rc4Ds7H>Bs5!\T>5\C)IbFc$hFk`Zrr^SEN;*)H" -3s`%qV$!dN[-i;X&1GBj/f=D@9MrrLPmJcGBBJcFR+!*9$t!FY^%r -r`"6JG]'?"1M!trV-&!KOrrLPmJcGBBJcFR+!*]=#!*K-u!jbYVpAY6nUJ.ufrr`(U:sSS1!rQ-To)Ag-6"X%X3:%qrs-trGlReIC%0FJ!Rc4Ds7H>Bs5!\T>5\C#=Si%"l -!0;JpAY6jOAWsjrr_S'B'/[a!H,78rr]]-L%4U2!Jf+frrSC7>2T>^iH/D:l2M3EdTZ\NqkpfC_ -5Ol;p$;V_dX,p4s&s.+cMmpnG_,nes+14+rr?7#rr?3srrT,oe+N_Cnq'l[p\t?G<.su6"X%qu$*TqYf3]q!A"cdXQ!2s&s.+cMmpnG -_,nes+14+rr?7#rr?3rrr_V"H1pq2"7UkBa7oT9[n*Cqq#:AcFS>_;r2!)Tq!.k[OiQef"I"B9s -'"=["lX_+qd-i!rrRu(>5/$slKeHTdXQ!2s&s.+cMmpnG_,nes+14+rr?7#rr?3prrU&2Z1S%um -seGlRg@?FfG&!f,3-i;X&1I -qer_=D@9MrrLPmJcGBBJcFR+!*]@$!V'gprr`+V=k5PA^a\BMErri%Y: -9+9TrrJG'mJd3NJGoKJ>2T>\iHYA%!rH<7mJd6CdTYT/#L\*9s8Q59nBV%7dWg?Co`'LBh>[IYr -Vlo[F7T>5k%Jo+o`#'fP"hYGq>UZR?&Q^'GjtP/"S.CF[/T.d!M?mirrJ=6r;Qb#hu<`9Gl@XDq -d-i$rrRu(>2]DcdXQ!2s&s.+cMmpnG_,nes+14+rr?7$rrM)'nG`U5?rri4t9oec?rr_4@F -7K)+"7:Y<^>](mV6o^k!L&'2rr?6[rrM)'r;Qiq?FfP)!f,3-i;X&1Iqer_>&!KOrrLPmVuHkf, -V8W:s+14,rrMe$rVloQI.%":\k\Lco`#'n]2s.6rr3,pKN`*KqYpZ^GZ_uCrrJt'nG`NQJGT9G> -2T>\iHY8"!rH<7nG`QFdTYT/#L\91s8Q8:nBV%7dWkNd$EZu%!#7%-+A\U&]`/)o"q0eGs+14,r -rMV'rVloHL[G*Erif+aq=FUmeS/O[MYWq$)iPCWK/!*\:[!TA;"rrW((\ -af\$LXKAars-u->6"V+C%0FJ!Rc5drsJW.!8%8Nk(UhQd([!Ush%rrLQ'li.+eY"b#MoD]'WD+=I's*3N"rrKC$h#@D^V=OWeP -CWH.!*\:[!TA;!rrW((\aob%LXK5]rs-u->6"V+C%0FJ!Rc5crrNf5hu3QWaUA-Vpt_L`,l._bPV;GY!W0h)^c:MESgZo"oFoZ'H[e`!!&qkrrU#Fo_8@l`,l._b -Q$T,$gd$U"e^/?s6sb$rrLQ'kl1ao<.=*(rrLQ'rr3"DiV`]Wi_&@grrKL'oD\iTJG9'D>2T>\i -HY.t!rH<7oD\lIdTYT/#L\B2s8QD;nBV%7dWkHb!YYRkr;Qkh!$:q/rr`4;!,p*]!W)]As7u[%h -Co;"oDe`o)uuSprrMJEm/I,L!6b6=(AIt3e,T6@%10TFs5#F:P4S_OZ5`k9q#:E062:*P#!;n/s -8V*@l2LeNMuN_ZQ[Ji&C&S&4dYHub"3Fkaf_5=GdYIi%!I6"V:A+7eD!Rc5crrNi6hu*Knq\]C7s8VtQ??J8Cp](8a/c["e? -MfRcFZF42qYq'&]3]p-,nA&s``G/6=m,ea"l5QYs89QB'ANQ)+TORPs8RlTK -`:u]``G/6=m,h^]3]p-,nA&cs8)`tlQ65Er;QiV':%k_!rYi3m/I,S!6b3UKOGlI^DLXQ,#! -LCXXrrL$'p&>&VJG&pB>2T>\iHY(r!rH<7p&>)KdTYT/#L\B2s8QeCnBV%7dWkHb!YYRkqu7%0! -,_c9FpIjCirF`2rsPG!Du]i\#PnD[!/(.J/#GQ3;d!9(WOGOps3Lj"qu>"bcN!l!!m^hT9DAJ5" -"jDqT*PGOs8TD*>lOa;ju<;>s0kYqs3Lj"qkcUY;d!9(WUKl`rrQ^2B);N.Nf<<("9!*;Ds[K*6 -NG=*rrN]2fDbdSf`2$4A,p6UIp;"FVf6NG=/rrMunm/I1dD?+VRrr]/5iG&8j!TA:_r -rht]:P.U'rrM)'rr3"Sdes+GQG_JW!Q15srrJ=6o`"nihh_;Wp&>*j?Ffe0!fb6(i;X&1LKXZWB -k-YXrrLPmp&>(,!8m\R$\&.Qs8P4fr;Zd(7fNDqT)`g0s#gYcs8NEqq>U`#!&FHOk4p"5rr3-e! -4MhYJH#QPPQ8>l*5VXS(-hl.s8ObQg].rrMAGrr4@p=^auZSGrQRS3s9d.0NN?s8SWB!$Fp?]3]p-,nA&sdog*Q17\@BrrPOfbPD/>% -fk5\rs%'T!8[n[`qo]9l&bcA!nI@Dr;QrW@9?)]\GcF46NG=-]k.r4rr4"Y=#gpskPsh;6`IUF" -B"gks.(bB+A6&@s7$/8C&S&4jE0;Z"O(Uc[/0e%!TA;&rrIo'r;Qe`_qY1lb)Q/q!L&'*rrCg1b -Q-_rrrW((\bH+*QGZnars-u-=o\M9A+7eD!Rc5crrNi6hu!E]JcJ^Ks5VW/s3([/rr3@u!,qo;j -4+,/bQ^0)rrTA(ErQ(?]`:V&:B`X(QGrpCrVm#js1JD'r_EbW-^Of41B?2/rsOngScA^Ro`+s)! -(d)b"u[ips/uECli6k^"1A13q=ah#`X^#gs/5p6s34RE9Pq.>!.t4M';#8Cs/&$];d!9(WQ#Ffs -8T"tD#OA86NG=*rrN]2fDbdSN;u2O!!E&errRQJdf'1Ncl^R5r\=Q#rr3m(!6`Z[#QWWZs0kYqs -3Lj"qor.A9Pq.>!.t4M!hTI2r;QgJ*bkTQ!UsgZrs/%(9@s4DiHYA%!Jf,$rrJG'g]%<&L\UlMP -CUFJ!rH<7q#:D]_cl!u#L\B2s8QeCnBV%7dWkHb!YYRkqu6_3!-A/>"oG*=ZO&_mrrSemDuTb?q -kSDA#s7t_!j;TFrr3%^!9sC\!gg;2HiO-:!C-S`%A*W=s8T)!1Ah+6r$YA>rrPjo_>aH96NG=*rsK>;f -DkH2#oVE^!#+l%!^?\Urr3&u/qEs$!gE\srr3?n!6bEB0EBl-qAd?NrsM'l[f<-'HiO-:!C-S`! -hTI2r;Qgk!+>d*!UsgYrrIB'rr3#XGlI^DLXQ,#!LCXXrrLQ'q>UJZJA(saqd-i/rrSM(>2]Dcd -YD$+s(Q!4cMmpnGkM(<'*-qersLI[\,ZK\/Xub>$Tn@f$_IE;s8U_'S,WEq48JmXY5iYCrrS)Y` -V]Z:M#b$^rrS)Y`VKN81B?2.rrc[/fQ,%3rrS)Y`VTT9Y5iY0s82ftOoQ'errU=CJ,TBOU]>$,V -Z<(_rrEQ^rr34q!,qo;Y5iVBrrU=CJ,TBKU]>$+rrPOfbPD/G%fd[t*&rE6s,m?nnG`P0!ri3!! -lb5YrVllfrVm6m!6bEB1B?20]`:V&:Bi^)QN*i_Qi@!c%57_\!hTI2r;Qh)!*T:#!W?6XrrIB'r -r3#XGlI^DLXQ,#!LCXXrrLf&qYpS[J@kg_qd-i0rrSM(>2]DcdYD$+s)MH8cMmpnGkM(<'*-qfr -s-UF-iF#?*^]l+!=M!grs#(qDu]VS6N6uc$Tn1a!j;TFrr3%r!-.r:"0/3uAGuN2rlLu:EW#h?W -rN)T!8IJP"NCF_62pl`!i5m:r;Qo"s/uEDli6k^"0DP'o_8@eT`B]Crs$jN5l[_^Qi@!c%kmq^# -G2!7s8T8&F8l1@T`B]CrrURJ5lUcb6NG=*rrN]2fDGRMXT/@nnc&V%#6"Q'P5s,-rsM0obQ%Su! -8IO9!9s@[!iH$brr3!00E1tQT)`g-rrQa3;uHXq>29,YGiAZ%!TA;&rrIo'r;Qe`_qY1liHY8"! -L&&ErrW((\blC.QGZnars-u->6"VI?1?/>!Rc5crrNf5hu3Qal6lhRs8U=D9`P.h"ZlY_$_dW4s -31O;s8Vp!3r/dWY5iYCrr_Bc#0-ZB%\]3S#6M42s8IhljoYh-rr31rQN-t?!8IJP"9'kTMuEYXj -oYh-rr3.qQN+,gF6il'rr_B`!5/(+!ho[-rVm)[!(['e!13]b!=pj_rs,.rDu]j@!-A/>!ho[-r -VlrW!([%g!^ct2q>UL,!8%,J"6KR`]^c"')?Kj:rrS#W\+ot26NG=0s"aZ0s,-lrqYpVp!13]b! -=pj_rrSemDuBV:@/sF-rr?6XrrIB'rr3#XGlI^DLXQ,#!LCXXrrM)'r;Qe]J@GO[qd-i2rrSM(> -2]DcdYD$+s*.i=cMmpnGkV.Er!*5Qs8V\b*>lBertsl""IlN/%i;_)s2Y0\cB//2S#pH:(Uqokr -rT,!CAn/RF8uMNH:Lg1s+^RS7r()*s8R0@#$lOF;#UFo-NMQlrrSDekPY>fF8uMNH:Lg1s/5p4l -i6h]!_EAqp\t<>!&4BO#1*?ss/,j`rr3!00E1tVT)`g0s/uEDrr3&E!&4BO!mgporr3$e!6b3Mrr3%s!+c'.!WL4?rsM0obQ%Su!8IOM!-.r:"KML"!13]b!=pj_rrSemD -uBV:;ZLG-rr?3WrrIH%rr3#XGlI^DLXQ,#!LCXXrrM;&rVln^J@5CYqd-i3rrSM(>2]DcdYCp(s -*.i=cMmpnGk_4FX]#3"(GR3U8XK&Hrtgt5%rUoW"'G9sraZ0RT9^'"DXh]K=SD[m-_;jh&s(`Gs -8@]q"\Ms/,j`rr3!/0E1tVU&\d)s/uEDrr3*"/caN&rrSVlh#@29,YLXQ2%!TA;&rrIo'r;Qe`_qY1ln7hn%!L&&?rrW((\c2U1Q -GZnars-u->6"VI?1?/>!Rc4Ds7H?eruT&o"ErMurR>gjo`+s9$qgBrn0aG"s.9:Vs8Vs".fTGQa -8d7+TnWP^rVm,I$qgBrn0aFurrP1\`qo];pB(E9q>Uf>(Bep8rr(>d>4h[k!mgqH!$0@Ybl@MH>Bp)G!*S+W!Jf,&rrM8#r -r3"]`;KW9QG_JW"n67+s,qo;rs8L.\c;\q_curqrs-u->6"VI?1?/>!Rc4Ds7H?drs8(K2$sU1; -n;o+ruKZf2e#dns8Tto!&:hECB+Elq#C>("Wh/)!"t@Grr3/Q;)_raZi9t.d!5Zm8"fe[#-UJr! -&BB(qYpiiLG]DE*`KWKq#:@h;Z6VOrg+l2,F&3-s3Q#m!(VlN+M"Kt>mh0Akt! -J/hXrrIo'rr3#gC&\,5QG`Y#!LCXWrr?7%rrVU^fX1Y[\R,14rsP.1C%18iHrakS-FL]%/QS%[YX!Jf,&rrMV'rr3"b_u0N8QG_MX!qCYer -Vlre9\?fR!kDY7rVmLt]OOcZ[IO:rfVWgn=(@9&fC8;0#L\B2s8RjTnBV%7dWg?Co`(-T!Q1b_r -s%8Krr<#HL]%/QXK(+V!KtG$rrMV'rr3"b_u0N8QG_SZ"8S*Ua8>lUq.s2rdis6?q<=&j4.bOPN1(&$=tW -0)F7=BJ^/>%Mbk=\8YnLK[MA_uBZ:n7hn%!LCY$rrJG'i -Vs"p:RV+RrrVU^fY%4c\R,1.rrcN&EF?Z_rsnnns6%(TAm&/CJYL'Bs5*bVdYIc#!VU!YrrJG'rr3#gC&\,5QG`Y#!LCX`rr^bO@*\BD!q&b7^Ae8F?MjKs$ -X/,"W1O%fBiASHmem)%psug:HWsQT=BSd?GCPF:R@%M\s8S!VnBV%7dWg?Co`'LBhZ!W)L\q)O= -5ElWQG`_%!Ush&rrJG'r;Qe`_r^n%ib3/nM9kbm!q&b7_#FJH?MjHr&mFd@G52)q7I1!+?2sr:< -*!]&q#:fkj4hf%]T4a"qhu<`9GkM(<\R,1*rr?7#s!(X)^&S+XggYKZs8RMro/hd.^0(F8j^D4h` -rFI^.%FH?C%0FJ!Rc4Ds7H>Bs5*bVdYI]!!n0a"i;WhS[/L")>5nO&V6p1#!LCXhrr`7t9="Hp! -F#KkrrVU^f_5=F>2T>\iHY(r!kDY7oD\eor;S!;o1Ij=;#OLqV>pRlY`!Y5s8S%mpIjEDpefqsJ -`m&:s(UuJrrLPmJcGBBJcFU,!Q1,srrV@Y`8U^sV6p4$!*]C%!N!1$rrJG'm/I1$9:btVrr?0gr -rVU^f_>CG>2T>\iHY+s!kDY7o)A\nr;RP1IHFm.PlFnW9]uG$fNPnPs8U$$ZCh-r$.X@ML]@BXs -(UuJrrLPmJcGBBJcFU,!Q15urr`"-NrJ)=!N!1%rr?7%rrJt'r;Qe`_s[O,crbtpq#:A.i9gOGm -S)7-rr?6[rrM)'q#:E+?Mj9m!*]:"'rtD;UAt8"I,RhB5r=+c -MmpnG_,nes+14,rrL$'pAY2d?h!.V!N!1%rr?7%rrJt'r;Qe`_sm[.iFQuoq#:H^CN&S+rrVU^f -D5FH>2T>\iHY1u!kDY7nG`JlqYpT]h#76_RSd0gm/OYJf1D<'nY35drs?o'iHYD&>5r=+cMmpnG -_,nes+14,rrL$'rVlntl21J^dnIO5\C(qH.-L:ZhHP'S]k@2oYgg8al]N;WQe]s8Q:&C%0FJ!Rc4Ds -7H>Bs5*bV_j:9$!o6Puqu6cmG]**8rrJt'rVlk$rr3"q[/Bq)QG`@p"8IgQbP2#2T>\iHY8"!kDY7mf*8gr;R1U9'lT;=TADt9N>E_rr3&gfD>LH%G"EX<6P=#GlReIs(UuJr -rLPmJcGBBJcFU,!Q16$rrV[eeGB1Hb=o8+rrKC$rVlk$rr3"q[/Bq)QG`Fr"9"ue\+fn)eP_P*j -So;M9\94B!*\:[!TA;$rrT`;qsFC`=T&14<+,G"s((Q95I^[M;#gRZD,u#Uq>U]YGlReIs(UuJr -rLPmJcGBBJcFU,!Pt*!rrJt'q>UQoLL'$,rrKL'rVlk$rr3"q[/Bq)QG`Is"1V-trV6BplYLG(i -VruJ9\97C!*\:[!TA;%rrT`;qs==_>5\CF=dZ>ks**:+I+/,qK$EaDL&]4lrr<#&EgQFuiHYD&> -5r=+cMmpnG_,nes+14,rrT*(rqucsce%pk"5R(UQBBs5!\VV.09"rrSXOrq69mY>2RorrKL'rVlk!rr3#)V>U>oQG`V"" -6![2lhCD\[nGlRfS?Mj$f!*]=#,I;1KBK`-j>ObPDs)Qsu^Q&9n`0/DRM -#[LZR,N;is'#G:nBV%7dWg?Co`'LBh#@Gl:ZMHS!hr`Zp&>-iN)e0lrrKL'rVlk$rr3#+V>U>oQ -G`\$"71/;htR-QgKfL-g&D3D9\9;Jhu5S=D]j4jQs8TcLlW[b)s'tFkkPqB\O -0ig)s7TpeD#aN=s(UuJrrLPmJcGBBJcFL)!od(Urr3&T9XXNm"7(#?iUQpK[&*a$!*]C%!OS^$r -s+k-s8VeM<6k7<"7p_Ik19P7mnD>:hu5S=&\Q;dlrqQL-OB?WcbQ$:0i(L2!_=21=s'#G:nBh1;q -1r52JcGBBJcFC&#jZPB9W7s?9sO5\C.\22t@U43.BmXSfGrVlrliVicU%?Y4o7!AV"C&e3:s(UuMrrT`([XnJLs -+14#rs/Fd9ZhX*?f^hY"4(4nk4elV_j:9$!*]C%!OS^$rrRI>p@nRhk%Ao0cMmn:hu<`PqrRhX> -5\C/<*&qss&Sp]1RditHN*pG]91;8rs[kigAh3BC&e3:s(UuOrr_4<6b.dJnc+1?e,K[AF^O-F= -,HbErr^\YCY\ac!Q16%rr?7%rrKL'r;QdZYk\5#qM\G-MuNc\r;RF2Hdi#pHeWRWe,TG\j8N+n_ -fpb4rs\PFmf3=VC&e3:s(UuQrs&4M?,b9=SUph3s+13trs%%PMu7fj\+9P$h/$HCqu6]7QMpg`> -5nO&[&*a$!W@ZGrrT`+YDN8Z>5\CF;rgpQs'58!S@JV!TXLb.YQ+W>f`/HCM-br:n7hq&>5r=+f -)GfY9tUE)!rabKJcG?AJcF*s#QBouY2XD&eai_Cl$H72rVlft_j:9$!*]C%!OS]qrr_CkJbFp"! -*]=#,CI#;8V_*]V?#s,O@l<52$&> -O52cs1+SjQ%]2;kA:!"s8Q:&C%0jV%/,!Vk5OYmWbtbuJCoGQoDaCAc2S(9@t;)8Vc8?Co)Amm\ -QWdNL].5QUC6q-J>u1!KZbXfu*f@H!-d:&Y+c?iO=0s'#G:n -D!sPY"E5)uS+]s -762@s3:QP^mP0!PuQ%PrgQTWrTsOa>5nO&_j:0!!iHdGqu6Y"M#RHYr;Qr_1SMTc]`.p4gV6"V+s(Uu[rsnXFA`s*fd&WIpS#X$Srdk+=s+143rrMo3li.!_ZMsk1m -r`=(BC(7EZ2X1k!*]C%!Q16$rrh^eAjH=mrrM_&M#RHYr;R16;>:+g9`=rr@[9^%rVllarVm?#L -K9#us8Q:&s'#G:nDOUFurr3#:QM^[_pJ^qg!Q(+Xrr?7#s -!(UWL&_0hk#[G^s8SD!d7'W+p.P#Wk[7LobQ%TGs8Q:&C%13`"7^JIl[f)os+147rsSgaE8.eha -8X@_Q2C+O!OSTrrt)\9On\nPT1u*Xs-;A6G#lQYrr?7%rrL$'qu6\eWqu_rOi*"T!*]=#,@'MVL -#Gr0=jD9ls.6W>OL+ueX/Ge`?2sUqiW!*]s'#G:nE0`Qrh<32JcFU,JcG$8%J*o#s)KDP3U6YEY -"lIsrrM/!p\td'Z;?AIs8/QcRAJ;7s70@jrr?7%rrL$'r;Qim9`=hf!ET&Qrr?7#s!-5kZ@X^Vs -(gM7RJg7V=P.Zos20u*IZ"1*dX2!qs8Q:&C%15S=">5nO&_j:6#!J.u]rrM"lL]7?Xqu7l.T:tWOs5$N%P -;SC#G1LE:s+eRL`*<9AqHa,)s8Q:&C%1Be"7L/Gmt(Mns+14:rs#].mH(eGcMmhMS5#lFs8V4pF -mo#'!A1qTrsIM!?IAfQ_,tj?Oo,.Y>5nO&_j:9$!T.2YrrH]XL]7?Xo`#lhH>:%ks5HlAHU1[2T -WiUJs3H>t>6"V+s(Uugrr`4j:^4`s8UMWB[cnZ!*]C%!Q1*!rrHWeqYpW>6*l@H!*\di'\$DiH1_..9C6_*9&fkSs8Q:&C% -1Kh"3aW9rdk+%s+14=rsS0pZ2^M78'U0ihI-?_$EtLFDu]>,rh`H*q#:Ea3f3A+#ioi9k5YJ>GG ->'9!*9+!!Rcc&rrLVaqYpWe85+d6"V+s(Uujrr_S%EpnSZf)L=$nGa6K9\ -KI@s3pC1cUi,Aqpk`Hn7OAF:B(7qp4Q`+q>UMN9>0fo"4^A2qtg5nO+dYIl&n4N-Grr`("<6 -g6u!*\:[#$V',>5r=+nG`UhQW)Cbs4%("s7-+#TjREkk"F"cq8n-,rJ5hmrVlg)^G8L9IJEjBj^ -36'qu6cp92rCgrrQ^je,0.F>5nO*dYIkq:t>IC"7''6M1ts1?23@X#$V',>5r=+nc&[29;[:?df -4muoD^'3DiEB5cV3B%JR7(1B[0MtUS+=%s8Vt>,?!`%kPtS&;4[[`rrh7QF'#^N+S\ -1cu]R+k]Z"nZHs1871gccN6rr2rtrh`B(r;QrO9A,J%`Ua$2rg6L$r;Qb#rr3)F;bu0Grroc'Wf -(orK`;'enDOlF:?([@jRW>u?"(nUD1?*ra[]+MnRZ*Orr -3E+d/V!fq2PFSo6b$+rVm)`;Rc+E=N0k2%I\aH])Ma0>6"WO8U(15rs&D&:QO@7U4WCGC%1'\#$ -V',>5r=+pAY319W`mGc2W@pp&>scA`f@cMjA)4bK?+M][<,/\aeNQ?cDD7l=0blrsQUk2f\l3s8 -V%eI.R@;#lB*_l0j4%Y5Ink$1a-NS+KnCAoI#7rs/"O:7Cd:c`2TR$R3MIKu``(3_\qU>U1Tl2=BCHdH;G^&O["R*=l*Dnl;;s8V4c4'#ScjP9^);9/Y8%(T2mmf -1OT='C0Zf_>+>%+`LfAQE94lJ[XrW;V;Ir;R#bZ$B>PKY-d?Ym!H"L/[=CmK*ma[q><,od+s7QBtr6^pC6"V+s(V!$rr_4dJb -K*C!p;/1JcF!pJcG?A+3.$Irp+H>j*WFZd!G_lFA1Ak9kUj&\]A+2IB@SiSc8Wtr.6ZVR/b,)s4 -^h4pAP!srQp^6Ili-noroi1roBOc1Nb2?pJ@=rus6]gkn@OUhs.=O2q%hrtJW9s'#G:nGfs[;g3Fu=& -iY$ooH_9s3:Rps7$%1n8r:)s/o,+a%&UEpA_p5Oh\cA;>PS\Us2b3FpVi2!"k'lD;L\Cls31Los6Tan[na++k%JnuGr8@Irr3j0WG/G2=kX.#lt;OrpL\U8>7r+*H6rVm9$I478J53DnF[na*hrsS%pRAt>7s8W##8]-,Zjo -5DOaQ%jO])R?]l2MmlBl3>fAnsQAVK`@a,enkAPrr3,e?5@8mMWeQ@e+nG`N,_tj<9r)`pult_1PJcD8?JcFg2.J -A6piW$\cVV4sD9h4I1=_u=UYjod)fok7mohis5g%>1?s0jR?@ah4RrrTZ&Y4DSni+_ud"lO(os3 -H7Is+13?s+140s"E>?I.R<-;9-.@Y''c;s&?a6s-J@0p">[-c2[g+R8NGQs8/'25*jc@s8VnR=O -m'D!L^Xsrs&9qiW%1rl@Jtds.'+?s5dBa`^] -4?&E$?6nrVlucDJne6rrIH&qYpclJcFX-+T7a&cMuX(K]?r\;5001;-ch=AP -UPNs*Hk"\Ecj^]Dhg0!Sbforr^\GOo+qR!I`Yurrr7"c2W3VJcC<$RK%j\,VF_Bk:[n$I2V1n)s+13:s+14&rt>-d(WBEUqZfSX's8W&tI$7+qs, -2/EkDoB9rrr.+U]9aiJcC<$LAui)e,LiqVG4l+k%Ai"KNLE&53W%HOms6 -*7ts4g;jJcC<$LAui)dJkNaHt)(7c;9ea?:=)Y[Ju4bT]GEdG>mI.s7B#O6-.JIhZ'/ak^ibbs+ -UK(s3L]hi*([)rh`H*r;XQ4Qt$*-BMd"Seo%.@bFM5[Z<-Vs@N7O^s53hV`.@rds+13pruo-NVZ -6@A>2.@sAE[mtJC[]]AH2OB8P/6*FStee2607GJcF^/!o"L.JcD\KJcEso+T%F'cMuj4I.OR;;G -`e>Y@G]S^Lga?BUf%T)d'5Mbl*+miVrstb?KPtW;hGKb5WIMChi;9a%N!"PtdTF8(mp83,n+Z^] -1;KHEPWlJcF[."RB4jDq9L>WW.PLaT!+-Wn2#9A9Da)je;-JcFU,"G"SniF -d`AWW.PL`r?dV::L8pG[KLi@WGJN\Q&"j4Y3\irdk++rrMgmrr3"0k(3Q4s+13hrt>-]=PNl1?% -hplaHLH;h',J4pOWA"rrJ@grr3#EH\)3ss+13frsn1&FRfCF8>^6fs0NVcl%/lhrrW-orr)itan`;4[[_Iq8S+)m0$hs4[JRWLs+g!PFABs/Z0Ns1nX?rgum)b_&G;hgtg[rrGpkqu -6[mq18RIs+13arrr"?7hnksJcFC&!P+9frrK3kJcDhOJcEC_!P6R-s472N;tKkc!rYgkJcDkPJc -C<$OT,@$Jb]6GSuI;@XoEtPJcCi3!F"garrMpgJcDkPJcC<$OoGI8Dta23MnaiCY5a(QJcCl4!G -UB`rrMRhJcDnQJcC<$P5bRF?hF@!Fjbj@YQ'1RYl=dtJGFcrk5PI/c1M#:j(*`@YQ'1RZ2Xt";j -1;YJcFs6!V07]rrH`jJcDtSJcE%U#5(p;s2%k5JcG!7!K+V^rrLbjJcDtSJcE(V!qfL7rr3&:=8 -@FIli."];"4Jc>jHt@Z2]CT[/U4#;p,%0GX!rbmjJcE(VJcE7[!qfL7o`#!0=8@FIo)Aa*L@"s?UOiHOs+13\rrVjlb4>Q6_H -6Pas7?6k=mt_W!rGalJcE+WJcE=]!qfL7nG`R,=8@FIp&>'AFmAu-P.-#B[/Y^W]Dhs*;p+P.!l -A%7JcGHD!Ft9WrrMdlJcE+WJcEC_!qfL7m/I.(=8@FIq#:BRAa'-pI`I$>[JtgX^&J0,;p+D*!l -A%7JcGQG!H?TQrrMFiJcE.XJcEIa!qfL7kl1_$=8@FIqu6]`>iu%eDV9U@[f:pY^]+B.;p+8&!l -A%7JcGZJ!J&5QrrM(kJcE1YJcEOc!qfL7jSo:u=8@FIrr3#j<94&[A)r4@\,V$Z_>aT0;p+,"!l -A%7JcGcM!KsnPrrLPjJcE4ZJcEUe!qfL7i;Wkq=8@FI!rGXij8T-\mt(MKs+13frrVjlb23."_H -6PbrrJsiir9%oM1P]:s+13grrVjlb2!!u_H6PcrrGpkiVrpQq18RVs+14&rr_Ja@b1,M!qfL7gA -_5k=8@RM!P46JrrK*jJcE:\OT,L]T0j;7%K6>-Vpt_L`,l._bOb`8oi'#crrU&=q1enM<:f&J!r -YgkJcE=]OoGdF0FF!7s89/B!1rHT!UPa2rrP:_bOkf9oi'#arrU&=q2#%OaaW+H!Lp0As185nrr -_R/"2Oj7!oO`WlMgqa9lKCu!^ct2p&>*d7!8.%!8$`?!7LM>!c:X,M>mT^le_XBq+cM@])Rrn!b -;:CqYpSVN9gKGrGDURm/I,S!6b'8!8@%E!K;g'rrIA1o;VfHMZ3_/ESUQpN4a`A]Dn)p"7QKp`q -o]9l&boE-du4,9JW.;s6?+AWOXG\;=sngSLsmb93o/9IEgV-r9gA!_`U1rr3-h!6bB_BE%o2N: -$WGdYI>l!I3RSs8;ltHd:@F!TmpDs1JAqrrS>`&GH,*aoHqirs#8!B)eb/Qi@!c%57_\#G2!7s8 -T8&ErQ(?aoHqirrStrB)_f86NG=06i_/pli."6L[bl!I3RSs8N$!q+]H?!F,#Ds1\MrrrPal>5 -/$ublBHrrs$gMHiKuDQi@!c%kmq^#G2!7s8T8&F8l1@blBHrrrUOIHiF$P6NG=0f`1us/c_[7rr -LQ'nG`N6iIV%.rrJglf)GciK7X':s-!BaedDJ_qu6lFOoPD5!8%5M#+>\Ms/,j`rr3!/0E1tVU& -\d)s/uEDrr3*"/caN&rrSVlh#@l!I -3RSs7$$g>4DOmC%-]RZ2]CT\c2]YL[bl!I3RSs7-*in7hCl!*XsRYlB:S\c2]YL[b(Q^Xs,I$dBh@Ogs!Ifas8/Pprr3_i0FF!7s89/B!1s5c!s$gMq5+T-\b -uI@0gPd=H2nubs8Vir!7UuDV@!lV>gSTGjt_5>(Q^Xs,I$YVu?Vs-N -M'`rroP#s'u+AqYpb[N;rng!8%5M"5*YSj8T&`I0K$l!I -3Sqrr`?%rr<&rs8N)ms8N'!s8E#ps8N)ss8;r#rrM)'nG`JlqYpo)9E5&-/0H'2T([a8_Z,Gl![ -ducr;Qlg"ou[>rs%_Ls8NT0fDbdUf)Pg;s8W'C:B(7pMZ>F/rrN]2fDbdPf)Pg;m/I+7L[bF/rrN]2fDbdON;u3/rrLQ'nG`N6iU -QsJ!;uls!;6Bl!<)rt!;uis!<)rt!36&"dYI>l!*K$r!YPLjrVluA$j=69rrW-nDh7r;s+p[V-N -M'^rrSJd'D;A2%fk5]o9ot'g&D!QD@?.:rrS)Y0E(nV%fk5]o9ot'g$AY=dYI>l!I3Sns8N)ss8 -N)ts82lrs8N)ts8N)ts8N)ts8N)!rrLQ'nG`Jlq#:C/!8m_S".T?4q"OdjrGDURJcF4!M#RN(!5 -na7!g3Npp&>7-!$Q+R'MZ>F/rs'&7+!hmdIdHA"!RcbmrrIB'nc/Uhr;ZcsqZ -$Qqrr;uurVultrVultr;Z]qXoAFGMt$`H>58+!'*-qfru:hQ!3?/"qh\X%3GS`<2![ducr;Ql$!!)ZbrrN]2fD5FJ\cB/:rrS)Y0E(nP%fk5CrrLQ'nG`N6iUQsJ!; -uls!;c`q!<3#u!<)rt!<)ot!;ZZo!3Z>&_j9fl!*T*s!YYRkqu745!,_c9FpIjCirF`3s.9:0rr -31G#PnD[!/#k&h>`<2![ducr;Ql]!!'\*rrN]2fD5FJ?k`D8rrS)Y0E(nP%fk5CrrLQ'nG`N6iU -QsJ!;lfr!;lfr!<3#u!<)rt!<3#u!;HNn!3cD'_j9fl!*]0t!YYRkqu74W!)W^q4UCucrsD6qs. -9:0rr30c#lO`&$:]UHh>`<2![ducqu6^h!*]*r!Y5:_qYpWj%Vbk@!fI%3rVlp0!8$?4!Rcbmrr -IB'nc/Uhqu?Zrqu?Zrrr;uurVultrr;uup](6nYQ"X7SacXZ>58+!'*-qert'b^;ZHdWeGoQm#! -;kbT)`g/rs%N5s8U:I4+[Ffs+p[V-31p[rr^g[!3uG$#0i;1rsf%[qYpVu!5na7!f?t1rVlp/!7 -p93!RcbmrrIB'nc/UhqZ$Qqr;Zcsrr;rts8W*!rVlitqu6WrrVultYQ"X1V==Kb>58+!'*-qerr -Qm7F8l1HqkSDA#s81eT)`g.rrr:qG-_K:JcFR+M>m\W'`bT:rt!!`"ErMurR>gjo`+Xf!6=s9!` -C*l!I3Sqs7lZls8)fps8N'!s8E#ss8N)qs8;r"rrKF&nG`Jlq# -:C/!8m\R&2+$ms8U_'S,WEq49,>Q!,ql:#1tMsrr3?fJcFR+MZ3mX=TAFLJa*(3&FYB3$4%\O\c -2W47K=H4^,Wl!I3SOrr<%mrrJt'nG`Jlq#:C/!8 -m_S#KQlmr;ZR66N6um$TnCgT)`g0s7m^&rr3!,4+[Ffs+13\rrLQ'nG`N6iR@i,!29DnT=OIk!* -]0t!YPLjrVml&-j@Ngs31O;s8Vp!3rf5S!+l31blCH;s7um[JcFR+JcE:\!RcbmrrIB'e,TFJU& -P.Y_sm[+=o&()r!*5Qs8V\b*>lBertsl""IlN/%i;_)a8d7+Tst.,S#pH:(UqnFs53j-s1/.1dY -I>l!I3RSs7-*iLXP\l!*]7!$E[5,!#I@9*(cLgr;RS!&J&dLE:raZ0RTDt2h%rUoW"'G8Js5 -3j-s2b3@cUIJ+!D/@ArrI[Foi2&m8(N7k!rm`'nG`JlJcDtSJcEdj!M+DarrW1:Vh+mJrrI0&nG -`JkJcDtSJcEai!M+DcrrW1:Vh+mIrrHd&nG`JlJcDtSJcE^h!M+DerrW1:Vh+mHrr?3jrr?5Rs0 -2NSs2=p5A1#qZd,Kqu6[MU&P'!qZd,Qs8V56#TLGTrsAH&!7UuDV@!Y5:_JcFI(JcE.X!M+E0rrW1:Vh+m>rrUP?kNr3L_j:)t!Z -M-oqu6[lc2IYD'*-qerrOhR\,QC/%fk44s4[L(s0Ve,STao1!rd&7JcGBB"5e-5na$2U_j:)t!^ -6Uuqu6[Nmf!.e'*-qfrr^=B-iEuD!Y5:_JcFI(JcE(V!M+E4rrW1:Vh+mCrs&G^]SBI$e`m)7\" -WTs!f[1lr;Qf@7/[&d&cghfrr_O7"iL<=!Y,4]JcFI(JcE%U#+]r;s8Hl5L&VeEYc=IdQAC?BCg -L7G=B]d5bl$Z(!NWBursA?Q!.jM:nXh,VrVm67qqqDSS\+Xr#P*0g"UcA]hYmH]X]#3"(GR3U8XK&Irs#Yr!!"d1p4<8!s+ -13SrrS`JVh>!MC%0^R!KbBRs02NSs0)G&i.Ct0C%0^R!JJsRs02NSs7$$hbZ'-]fL,a2NU?`HC% -0^R!I3RSs02NSs7$$h*a4,NfSBT]%(G[)!GV&SrrI$'JcDtSJcG6>!!=FpLUs+14>rrE,JJcF@%!Bc\9rrHj'fDbmM=b6UVs+14>rr -E,JJcF@%!Bc\9rrHj'fDbm6EIn.ns+14>rrE,JJcF@%!Bc\9rrHj'fDblpNIh,5s+14>rrE,JJc -F@%!Bc\9rrHj'fDblUVh+lOs+14>rrE,JJcF@%!Bc\9rrHj'fDbl4aFXAps+14>rrE,JJcF@%!B -c\9rrHj'fDbkbn:CVCs+14>rrE,JJcF@%!Bc\9rrHj'fDbhPJcDnQJcG6>!!!rL4I5F8!GV&YrrMXhnGiLgqu?Zrqu?Zrrr;uurVultrr;uup](6npAb-mr;Zcsrr; -uuK)^E%nG`LhdaA'r'*-qfrr`-9!3?,!'ZO37'3XMuSLsmb94%Yu``G/6=m,ea+5UF.8NF<\s.( -bB+A6&@dog*Q17\@Ds80E7IErrE,JdJj7]!8m\R#(HVLs8! -_Orr3?k!4Mp"!,qo;qAd?NrrkXf[f%h/rr3@j!5&:2T)`g0r?tJ?rsML#_>jP8!&FHOk5N[+!Bc -\9rrHj'h>[LXiU[$E!;lfn!<)rt!!*&u!<)rt!;c`o!:p0f!;uls!.t6%s7$$h!7K9p!YYRkqu6 -kP!)ij1!(d)b$T9Aus.9:0s8Tb48H)Bg2CFg1!6"j9!:g'g#+km6s2k=krVm+u!+u92Y5iUcrrG -6Jmf*<%nD=0GUQj+)!!%TMg])j)nG`LhdaA'r'*-qers!0;F8q@&l2(DbT)`g0s,d!rrE,JJcF@%!Bc\9rrHj'k5PMY>IT1`U&T]DnG` -LhdXhGMrrG6Jmf*<%nE9fQlVYTOs.KCCs7$$h!7HGufDbk6QL=bRC%1?d!lRgfZN'q)JcG6>JcG -6>!nG`LhdXhGMrrG6Jmf*<%nEg/WkBL -"PirB#YqZ$Hnp&FmhrVulto`"mkJcG3=JcG6>!OO]5r!(4 -<`iW&oX!ri6#qu?ZrrVlitq>^HppAb-mp&>!lJcG0!?b -?HGDDTj`o6jNrr`?%rr<&ss8N)ss8N)qs8N)ms8N'!s8E#ps8N)ss8;qKs7cPEs7$$h!7HGufDb -k6QF-\l!;uls!;uls!;lfr!;6Bk!<<*!!;lfr!<3#u!<)ot!.k1Fs+14>rrE,JJcF@%!Bc[Ts8N -)ss8N)ss8N)rs8N)ls8N)ts8N)srr<&ts8N(Ms7?8As7$$h!7HGufDbk6QF-\l!;uls!;uls!;l -fr!<)rq!<3#u!<)rt!<)rt!<)rt!.k1As+14>rrE,JJcF@%!Bc[Ts8N)ss8N)ss8N)rs8N)qs8N -)us8N)ts8N)ts8N)ss8;qKs7ZJDs7$$h!7HGufDbk6QF-\l!;uls!;uls!;lfr!;c`q!<3#u!<) -rt!<)ot!;ZZo!.k1Es+14>rrE,JJcF@%!Bc[Ts8N)ss8N)ss8N)qs8N)rs8N)us8N)ts8N)us8N -)ns8N(Ms7lVFs7$$h!7HGufDbk6QF-\l!;lcr!<)rt!;ZZp!;lfr!<3#u!<)rt!<3#u!;HNn!.k -1Fs+14>rrE,JJcF@%!Bc[Ts8N)rs8N)us8N)os8N)ss8N)us8E#us8N)trr<&rrr<&ts8N(Ms7l -VFs7$$h!7HGufDbk6QFHni!<)rq!;6Bh!<)rt!!*&u!<)rt!;c`o!.k1Ds+14>rrE,JJcF@%!Bc -[&rr<%Ms6BW8s7$$h!7HGufDbk6QA>M?!.k18s+14>rrEX]J\0RH!jifCL]@ASJcG$8JcG6>!N@ -;p&_IZs'jpfgs+14 -%%EndData -showpage -%%Trailer -end -%%EOF diff --git a/manual/manual-client/Client2.png b/manual/manual-client/Client2.png deleted file mode 100755 index 4d94f1659..000000000 Binary files a/manual/manual-client/Client2.png and /dev/null differ diff --git a/manual/manual-client/EIGERUDPHeader.png b/manual/manual-client/EIGERUDPHeader.png deleted file mode 100755 index 5bda46cf1..000000000 Binary files a/manual/manual-client/EIGERUDPHeader.png and /dev/null differ diff --git a/manual/manual-client/Eiger-Chips.png b/manual/manual-client/Eiger-Chips.png deleted file mode 100755 index a83fc52c4..000000000 Binary files a/manual/manual-client/Eiger-Chips.png and /dev/null differ diff --git a/manual/manual-client/Eiger_short.tex b/manual/manual-client/Eiger_short.tex deleted file mode 100755 index 25e8dbd82..000000000 --- a/manual/manual-client/Eiger_short.tex +++ /dev/null @@ -1,1816 +0,0 @@ -%\pdfoutput=1 % only if pdf/png/jpg images are used -\documentclass{article} -\usepackage{amssymb} -%\usepackage[dvips]{graphicx} -\usepackage{graphicx} -\usepackage{verbatim} -\usepackage{xspace} -\usepackage{hyperref} -\usepackage{xcolor} -\newcommand{\E}{EIGER\xspace} -\newcommand{\p}{sls\_detector\_put} -\newcommand{\g}{sls\_detector\_get} - -\begin{document} - -\title{\E - short manual} -\date{\today} -\maketitle -\tableofcontents - -\section{Usage} -\subsection{Short description} -Figure ~\ref{boards} show the readout board basic components on an Eiger half module. An half module can read up to 4 readout chips. -\begin{figure}[t] -\begin{center} -\includegraphics[width=1\textwidth]{Boards} -\end{center} -\caption{Picture with most relevant components of the EIGER readout system. The readout system starts with the Front End Boards (FEB) which performs data descrambling (also converts the packets from 12 $\to$ 16 bits) and rate correction. The BackEndBoard (BEB) has 2x2GB DDR2 memories and can perform data buffering (storing images on board) and data summation (16 bit $\to$ 32 bits). The controls to the detector are passed through the 1Gb, while in most installations, the data are sent out through the 10~GB ethernet connection.} -\label{boards} -\end{figure} - -\subsection{Mandatory setup - Hardware} -An EIGER single module (500~kpixels) needs: -\begin{itemize} -\item A chilled (water+alcohol) at 21~$^{\circ}$C for a single module (500k pixels), which needs to dissipate 85~W (every module, i.e. for two half boards). For the 9M, 1.5M, a special cooling liquid is required: 2/3 deionized water and 1/3 ESA Type 48. This is important as the high temperature generated by the boards accelerate the corrosion due to Cu/Al reaction and the blockage of the small channels where the liquid flows, in particular near the face of the detector and if it is a parallel flow and not a single loop. The 9M and 1.5M run at 19~$^{\circ}$C. -\item A power supply (12~V, 8~A). For the 9~M, a special cpu is give to remotely switch on and off the detector: see section~\ref{bchip100}. -\item 2$\times$1~Gb/s Ethernet connectors to control the detector and, optionally, receive data at low rate. A DHCP server that gives IPs to the 1~Gb/s connectors of the detector is needed. Note that flow control has to be enabled on the switch you are using, if you plan to read the data out from there. If not, you need to implement delays in the sending out of the data. -\item 2$\times$10~Gb/s transceivers to optionally, receive data at high rate. The 10Gb/s transceiver need to match the wavelength (long/short range) of the fibers chosen by the beamline infrastructure. -\end{itemize} -The equipment scales linearly with the number of modules. -Figure~\ref{fig:1} shows the relationship between the \textbf{Client} (which sits on a beamline control PC), the \textbf{Receiver} (which can run in multiple instances on one or more PCs which receive data from the detector. The receiver(s) does not necessary have to be running on the same PC as the client.) The username under which the receiver runs is the owner of the data files, if using our implementation. It is important that the receiver is closely connected to the detector (they have to be on the same network). Note that if you implement the 1Gb/s readout only: client, receiver and detector have to be all three in the same network. If you implement the 10Gb/s readout, then client, the 1~GbE of the detector and the receiver have to stay on the 1GbE. But the receiver data receiving device and the 10GbE detector can be on their private network, minimizing the missing packets. - -\begin{figure}[t] -\begin{center} -\includegraphics[width=.8\textwidth]{Client2} -\end{center} -\caption{Communications protocol between the Client PC, the receiver PC and the detector.} -\label{fig:1} -\end{figure} - -The Client talks to control over 1~Gb Ethernet connection using TCP/IP to the detector and to the receiver. The detector sends data in UDP packets to the receiver. This data sending can be done over 1~Gb/s or 10~Gb/s. - -\begin{itemize} -\item \textbf{Switch on the detector only after having started the chiller: the 500k single module and the 1.5M at cSAXS/OMNY have a hardware temperature sensor, which will power off the boards if the temperature is too high. Note that the detector will be power on again as soon as the temperature has been lowered. The 9M will not boot up without the correct waterflow and temperature has it has an integrated flowmeter.} -\item \textbf{Switch on the detector only after having connected all the cables and network. EIGER is unable to get IP address after it has been switched on without a proper network set up. In that case switch off and on the detector again.} -\end{itemize} - -\subsubsection{9M power supply interface: bchip100}\label{bchip100} -So the bchip100, which is a blackfin cpu, is located on the top side of the 9M and needs to be connected over 1Gb, to the same or a different network as the detector 1~GbE. - \begin{verbatim} -telnet bchip100 -cd 9m/ -\end{verbatim} -The directory contains some executables that are needed to make your detector to work: - \begin{verbatim} -./on #to switch modules on -./off #to switch modules off -./state #tells you if is ON or OFF -cat /var/log/pcu.log #displays the log if there are problem -./waterflow #returns the current waterflow returned by the flowmeter -./temp #returns the water temperature returned by the flowmeter - \end{verbatim} -A watchdog is running on bchip100 to check for the flow and temperature. If outside of parameters ( flow$<$ 80 dl/min, temperature $\neq$21$\pm$2), the detector will be switched off. -Here is an explanation of the LED color scheme of the bchip100: -\begin{itemize} -\item NO LED Main Power off or Blackfin not ready, yet. -\item RED Too high temperature or too less water flow - Detector is shut down and locked. - Detector will be unlocked (YELLOW) automatically when conditions are good again. -\item YELLOW Detector is off and unlocked. Ready to be turned on. -\item GREEN Detector is on -\end{itemize} -You can also Check temperatures and water flow in a browser (from the same subnet where the 9M is: http://bchip100/status.cgi - -\subsection{Mandatory setup - Receiver} - -The receiver is a process run on a PC closely connected to the detector. Open one receiver for every half module board (remember, a module has two receivers!!!) . Go to {\tt{slsDetectorsPackage/build/bin/}}, \textbf{slsReceiver} should be started on the machine expected to receive the data from the detector. - -\begin{itemize} -\item {\tt{./slsReceiver --rx\_tcpport xxxx}} -\item {\tt{./slsReceiver --rx\_tcpport yyyy}} -\end{itemize} -where xxxx, yyyy are the tcp port numbers. Use 1955 and 1956 for example. The receiver for the bottom is open without arguments but still in the configuration file one needs to write {\tt{n:flippeddatax 1}}, where {\tt{2n+1}} indicated the half module number, 1 if it is a module. -\\ Open as many receiver as half module boards. A single module has two half module boards. - -From the software version 3.0.1, one can decide weather start a zmq callback from the receiver to the client (for example to visualize data in the slsDetectorGui or another gui). If the zmq steam is not required (cased of the command line for example, one can switch off the streaming with {\tt{./sls\_detector\_put rx\_datastream 0}}, enable it with {\tt{./sls\_detector\_put rx\_datastream 1}}. In the case of initializing the stream to use the slsDetectorGui, nothing needs to be taken care of by the user. If instead you want to stream the streaming on different channels, the zmq port of the client can be set stealing from the slsDetectorGui stream having {\tt{./sls\_detector\_put zmqport 300y}}. Note that if this is done globally (not for every half module n independently, then the client automatically takes into account that for every half module, there are 2 zmq stream. The receiver stream {\tt{./sls\_detector\_put rx\_zmqport 300y}} has to match such that the GUI can work. -If one desires to set the zmqport manually, he offset has to be taken into account: {\tt{./sls\_detector\_put 0:rx\_zmqport 300y}}, {\tt{./sls\_detector\_put 1:rx\_zmqport 300y+2}} and so on.. - - -{\tt{slsMultiReceiver}} uses two or more receivers in one single terminal: {\tt{./slsMultiReceiver startTCPPort numReceivers withCallback}}, where startTCPPort assumes the other ports are consecutively increased. - -The command {\tt{r\_framesperfile}} (\tt{\textcolor{red}{rx\_framesperfile}}) sets the number of frames written in the same file. By default now it is 10000. It can be changes. It needs to be lowered particularly if one wants to parallelize the following conversion of the files. - - -\subsection{Mandatory setup - Client} - -The command line interface consists in these main functions: -\begin{description} -\item[sls\_detector\_acquire] to acquire data from the detector -\item[sls\_detector\_put] to set detector parameters -\item[sls\_detector\_get] to retrieve detector parameters -\end{description} - -First, your detector should always be configured for each PC that you might want to use for controlling the detector. All the examples given here show the command {\tt{0-}}, which could be omitted for the EIGER system $0$. In the case more EIGER systems are controlled at once, the call of {\tt{1-}},.. becomes compulsory. - -To make sure the shared memory is cleaned, before starting, one should do: -\begin{verbatim} -sls_detector_get 0-free -\end{verbatim} -To do that: -\begin{verbatim} -sls_detector_put 0-config mydetector.config -\end{verbatim} - -In the config file, if client, receiver and detector are using \textbf{1GbE} the following lines are mandatory (see slsDetectorsPackage/examples/eiger\_1Gb.config). It has been adapted to the the new 5.0 major release change: -\begin{verbatim} -detsize 1024 512 #detector geometry, long side of the module first -hostname beb059+beb058+ #1Gb detector hostname for controls -#1Gb receiver pc hostname to be inserted immediately and tcp\_ports to be stated immediately -rx_hostname x12sa-vcons:1991+pc1875:1992+ -0:udp_dstport 50011 #udp port first quadrant, first halfmodule -0:udp_dstport2 50012 #udp port second quadrant, first halfmodule -1:udp_dstport 50013 #udp port first quadrant, second halfmodule -1:udp_dstport2 50014 #udp port second quadrant, second halfmodule -0:udp_srcip 129.129.202.237 -0:udp_dstip auto -1:udp_srcip 129.129.202.236 -1:udp_dstip auto -fpath /sls/X12SA/data/x12saop/Data10/Eiger0.5M -\end{verbatim} -In the old 3.x and 4.x release it was: -\begin{verbatim} -detsizechan 1024 512 #detector geometry, long side of the module first -hostname beb059+beb058+ #1Gb detector hostname for controls -0:rx_tcpport 1991 #tcpport for the first halfmodule -0:rx_udpport 50011 #udp port first quadrant, first halfmodule -0:rx_udpport2 50012 #udp port second quadrant, first halfmodule -1:rx_tcpport 1992 #tcpport for the second halfmodule -1:rx_udpport 50013 #udp port first quadrant, second halfmodule -1:rx_udpport2 50014 #udp port second quadrant, second halfmodule -rx_hostname x12sa-vcons #1Gb receiver pc hostname -outdir /sls/X12SA/data/x12saop/Data10/Eiger0.5M -threaded 1 -\end{verbatim} - -In the config file, if client, receiver and detector commands are on 1Gb, but detector data to receiver are sent using \textbf{10GbE} the following lines are mandatory (see slsDetectorsPackage/examples/eiger\_10Gb.config): - It has been adapted to the the new 5.0 major release change: -\begin{verbatim} -detsize 1024 512 -hostname beb059+beb058+ -rx_hostname pc1875:1955+pc1875:1956+ -0:udp_dstport 50011 -0:udp_dstport2 50012 -0:udp_dstip 10.0.30.210 -0:udp_srcip 10.0.30.100 -1:flippeddatax 1 -1:udp_dstport 50013 -1:udp_dstport2 50014 -1:udp_dstip 0.0.40.210 -1:udp_srcip 10.0.40.101 -fpath /sls/X12SA/data/x12saop/Data10/Eiger0.5M -\end{verbatim} -In the old 3.x and 4.x release it was: -\begin{verbatim} -detsizechan 1024 512 #detector geometry, long side of the module first -hostname beb059+beb058+ #1Gb detector hostname for controls -0:rx_tcpport 1955 #tcpport for the first halfmodule -0:rx_udpport 50011 #udp port first quadrant, first halfmodule -0:rx_udpport2 50012 #udp port second quadrant, first halfmodule -0:rx_udpip 10.0.30.210 #udp IP of the receiver over 10Gb -0:detectorip 10.0.30.100 #first half module 10 Gb IP -1:flippeddatax 1 -1:rx_tcpport 1956 #tcpport for the second halfmodule -1:rx_udpport 50013 #udp port first quadrant, second halfmodule -1:rx_udpport2 50014 #udp port second quadrant, second halfmodule -1:rx_udpip 10.0.40.210 #udp IP of the receiver over 10Gb, - can be the same or different from 0:rx_udpip -1:detectorip 10.0.40.101 #second half module 10 Gb IP -rx_hostname pc1875 #1Gb receiver pc hostname -outdir /sls/X12SA/data/x12saop/Data10/Eiger0.5M -threaded 1 -\end{verbatim} - -The geometry on af an EIGER module, showing the quadrants corresponding to the udp ports and the 2 receivers is shown in figure~\ref{fig:eigerports}. -\begin{figure}[t] -\begin{center} -\includegraphics[width=0.9\textwidth]{Eiger-Chips} -\end{center} -\caption{Geometry of UDP ports and receivers in a singel module.} -\label{fig:eigerports} -\end{figure} - -In the case you are developing your own receiver, then you need to remove the 1Gb receiver hostname {\tt{rx\_hostname}} and substitute it with the mac address of the device: -\begin{verbatim} -configuremac 0 -rx_udpmac xx:xx:... -\end{verbatim} - -Now we will give general communication commands. Commands with a diffent name in the \textcolor{red}{5.x} realease will be highlighted in \textcolor{red}{red}. - -One can configure all the detector settings in a parameter file {\tt{setup.det}}, which is loaded by doing: -\begin{verbatim} -sls_detector_put 0-parameters setup.det -\end{verbatim} -Note that the parameter file for any realease before 4.1.1 has not the possibility to understand parameters to be set differently for different half modules, i.e. {\tt{0:txndelay\_left xxxxx},\tt{1:txndelay\_left yyyyy}}. - -In the case of \E, the proper bias voltage of the sensor has to be setup, i.e. the {\tt{setup.det}} file needs to contain the line {\tt{highvoltage 150}}. Other detector functionality, which are rarely changed can be setup here. -Other important settings that are configured in the {\tt{setup.det}} file are: -\begin{itemize} -\item {\tt{tengiga 0/1}}, which sets whether the detector is enabled to send data through the 1~or the 10~Gb Ethernet. -\item {\tt{flags parallel/nonparallel}} or {\tt{\textcolor{red}{parallel 1/0}}}, which sets whether the detector is set in parallel acquisition and readout or in sequential mode. This changes the readout time of the chip and affects the frame rate capability (faster is {\tt{parallel}}). -\item {\tt{dr 32/16/8/4}} sets the detector in autosumming mode (32 bit counter or not autosumming, 12 bit out of the chip). This is strictly connected to what is required for the readout clock of chip. See next point. -\item {\tt{clkdivider 0/1/2}} or {\tt{\textcolor{red}{speed full\_speed/half\_speed/quart\_speed}}}. Changes the readout clock: 200, 100, 50~MHz (also referred to as full, half, quarter speed). Note that autosumming mode ({\tt{dr 32}} only works at \tt{clkdivider 2}=\tt{quart\_speed}). By selecting Refer to readout timing specifications in~section\ref{timing} for how to set the detector. -\item {\tt{flags continuous/storeinram}}. Allows to take frame continuously or storing them on memory. Users should use the {\tt{continuous}} flags. Enabling the {\tt{stroreinram}} flag makes the data to be sent out all at the end of the acquisition. Refer to readout timing specifications in section~\ref{timing} for how to set the detector. Examples will be given in section~\ref{}. -\end{itemize} - -One should notice that, by default, by choosing the option {\tt{dr 32}}, then the software automatically sets the detector to {\tt{clkdivider 2}} ({\tt{\textcolor{red}{quart\_speed}}}). By choosing the option {\tt{dr 16}}, the software automatically sets the detector to {\tt{clkdivider 1}} ({\tt{\textcolor{red}{speed quart\_speed}}}). From release 5.x, - -\section{API versioning} \label{api} -The eigerDetectorServer running on the boards has a versioning API scheme that will make it crash if used with a wrong firmware. -You can also check your versioning by hand with the code: -\begin{verbatim} - sls_detector_get softwareversion -\end{verbatim} -gets the server (slsDetectorSoftware) version (answer is something like: {\tt{softwareversion 111920160722}}. - \begin{verbatim} -sls_detector_get thisversion -\end{verbatim} -returns the client version. The answer can be {\tt{thisversion 111220160718}}. -\begin{verbatim} -/sls_detector_get detectorversion -\end{verbatim} -returns the firmware version . The answer can be {\tt{detectorversion 11}}. -Killing and starting the server on the boards allows you to check the firmware version you have and also if your board is a top/bottom/master/slave. - -\section{Setting up the threshold} -\begin{verbatim} -sls_detector_put 0-settingsdir /path -sls_detector_put 0-trimen N xxxx yyyy zzzz -sls_detector_put 0-settings standard -sls_detector_put 0-threshold energy_in_eV standard -\end{verbatim} -or in \textcolor{red}{5.x}: -\begin{verbatim} -sls_detector_put 0-settingspath /path} -sls_detector_put 0-trimen N xxxx yyyy zzzz} -sls_detector_put 0-threshold energy_in_eV standard -\end{verbatim} - -The first line requires to specify how many ({\tt{N}}) and at which energies in eV {\{tt{xxxx}}, {\tt{yyyy}}, {\tt{zzzz}} and so on) trimmed files were generated (to allow for an interpolation). This line should normally be included into the {\tt{mydetector.config}} file and should be set for you by one of the detector group. -NORMALLY, in this new calibration scheme, only {\tt{settings standard}} will be provided to you, unless specific cases to be discussed. -The threshold at 6000 eV , for example would be set as:{\tt{sls\_detector\_put 0-threshold 6000 standard}}. - -For \E, at the moment normally only {\tt{standard}} settings are possible. - {\tt{lowgain}}, {\tt{verylowgain}}, {\tt{veryhighgain}} and {\tt{highgain}} are theoretically possible, but we never calibrate like this. They could be implemented later if needed. - -Notice that setting the threshold actually loads the trimbit files (and interpolate them between the closest calibration energies) so it is time consuming. -The threshold is expressed in (eV) as the proper threshold setting, i.e. normally is set to 50\% of the beam energy. - -We have added a special command, {\tt{thresholdnotb}}, which allows to scan the threshold energy without reloading the trimbits at every stage. One can either keep the trimbits at a specific value (es.32 if the range of energies to scan is large) or use the trimbits from a specific energy (like a central energy). -\begin{verbatim} -sls_detector_put 0-thresholdnotb energy_in_eV -\end{verbatim} -See section~\ref{sec:fastthresholdscan}. - -\section{Standard acquisition} - -After you setup the setting and the threshold, you need to specify the exposure time, the number of real time frames and eventually how many real time frames should be acquired: -\begin{verbatim} -sls_detector_put 0-exptime 1[time_is_s] -sls_detector_put 0-frames 10 -sls_detector_put 0-period 0[time_is_s] -\end{verbatim} -In this acquisition 10 consecutive 1~s frames will be acquired. Note that {\tt{period}} defines the sum of the acquisition time and the desired dead time before the next frame. If {\tt{period}} is set to 0, then the next frame will start as soon as the detector is ready to take another acquisition. \\ - -%\underline{At cSAXS, the {\tt{settingsdir}} and {\tt{caldir}} are in}\\\underline{/sls/X12SA/data/x12saop/EigerPackage/calibrations/}\\ - -You need to setup where the files will be written to -\begin{verbatim} -sls_detector_put 0-outdir /scratch (\textcolor{red}{0-fpath}) -sls_detector_put 0-fname run -sls_detector_put 0-index 0 (\textcolor{red}{0-findex}) -\end{verbatim} -this way your files will all be named /scratch/run\_dj\_i.raw where $j$ is relative to each specific half module, $i$ in the {\tt{index}} starts from 0 when starting the detector the first time and is automatically incremented. The next acquisition {\tt{index}} will be 1. One can reset the {\tt{index}} (\tt{\textcolor{red}{findex}}) to what wished. - -To acquire simply type: -\begin{verbatim} -sls_detector_acquire 0- -\end{verbatim} -Note that acquiring is blocking. -You can poll the status of the detector with: -\begin{verbatim} -sls_detector_get status -\end{verbatim} -If the detector is still acquiring, the answer will return {\tt{running}}. If the detector has finished and ready for the next acquisition, then it will return {\tt{idle}}. -You can also ask for the status of the receiver, to know when it has returned and finished getting the data with: -\begin{verbatim} -sls_detector_get receiver -\end{verbatim} - -There is a more complex way of performing an acquisition, that is useful for debugging and in case one wants a non blocking behavior: - -You can then reset to zero the number of frames caught (in releases<5.0), then start the receiver and the detector: -\begin{enumerate} -\item {\tt{sls\_detector\_put 0-resetframescaught 0}} -\item {\tt{sls\_detector\_put 0-receiver start}} -\item {\tt{sls\_detector\_put 0-status start}} -\end{enumerate} -In release \textcolor{red}{5.0} it is not needed to reset the frames caughts and the commands are: - \begin{enumerate} -\item \textcolor{red}{{\tt{sls\_detector\_put 0-rx\_start}}} -\item \textcolor{red}{{\tt{sls\_detector\_put 0-start}}} -\end{enumerate} - -You can poll the detector status using: -\begin{verbatim} -sls_detector_get 0-status -\end{verbatim} -When the detector is {\tt{idle}}, then the acquisition is done but the receiver could still be receiving data. If you want, you can check if the receiver is finished receiving as many frames as you were expecting (this is optional but required for many many frames acquisition or when using some delays to send data at very high frame rate. -\begin{enumerate} -\setcounter{enumi}{3} -\item {\tt{sls\_detector\_get framescaught}} (\textcolor{red}{rx\_framescaught}) -\end{enumerate} -Then you can stop the receiver as well now: -\begin{enumerate} -\setcounter{enumi}{4} -\item {\tt{sls\_detector\_put 0-receiver stop} (\textcolor{red}{sls\_detector\_put 0-rx\_stop})} -\end{enumerate} - -The detector will not accept other commands while acquiring. If an acquisition wishes to be properly aborted, then: -\begin{itemize} -\item {\tt{sls\_detector\_put 0-status stop} (\textcolor{red}{sls\_detector\_put 0-stop})} -\end{itemize} -this same command can be used after a non proper abortion of the acquisition to reset to normal status the detector. - -\section{Gap pixels inside a module} -A module is composed of 2$\times$4 chips. Each chip is of dimension 256$\times$256 pixels. There is no dead area in a module, as a single sensor covers the 8 chips. The physical pixels at the border of the chips in the sensor are double in size, to allow not to loose photons in the gaps between the chip alignment. They count double what the other normal pixels would count. In the corner between chips, the pixels are 4-times the normal size. See figure~\ref{fgappix} to check the geometry. - -\begin{figure}[t] -\begin{center} -\includegraphics[width=0.9\textwidth]{GapPixels} -\end{center} -\caption{Geometry of gap pixels between a module.} -\label{fgappix} -\end{figure} - -It is possible to interpolated the value on the larger pixels by splitting the events (or properly interpolating) introducing a virtual pixel for every double pixel, or 3 virtual pixels for every corner. In this way the counts of a single large pixel can be shared among the correct amount of pixels of the normal dimension. - -The gap pixels can be added for the slsDetectorGui, from the datacall back or stealing the zmq port from the GUI (see later). The detector size can be added in the configuration file as first thing. - -Putting the long side of the module first always as a convection for the code, WITHOUT GAP PIXELS an EIGER module is: -\begin{verbatim} -detsizechan 1024 512 -\end{verbatim} -and the client needs to be set {\tt{sls\_detector\_put gappixels 0}}, which is the default behavior.\\ -If you want to have GAP PIXELS included: -\begin{verbatim} -detsizechan 1030 514 -\end{verbatim} -and the client needs to be set {\tt{sls\_detector\_put gappixels 1}}. - -The size of the gap pixels between modules to insert is -\begin{verbatim} - GapPixelsBetweenModules_x = 8 - GapPixelsBetweenModules_y = 36 -\end{verbatim} -where the {\tt{GapPixelsBetweenModules\_x}} are the one on the short side of the module, while {\tt{GapPixelsBetweenModules\_y}} are the ones on the long side of the module (where the wirebonds take physical space). - \section{QUAD special geometry} -Starting from release 4.1.0, we support a special geometry with 2x2 pixels. This is for a Quad, where a single half module reads out 4 chips but in a quad shape. For now this hardware is only available as a PEEM detector at SIM. -The {\tt{detsizechan 1024 512}} needs to remain set like this for a half module. However, thanks to the command: - \begin{verbatim} -./sls_detector_put quad 1 -\end{verbatim} - -a 512x512 geomtry will be read out if {\tt{gappixels 0}} and 514x514 will be readout if {\tt{gappixels 1}}. Note that as above, {\tt{gappixels 1}} is not supported for {\tt{dr 4}}. -If {\tt{gappixels 0}}, in the master.raw file you will read: -\begin{verbatim} -row : 512 pixels -col : 256 pixels -\end{verbatim} -else if {\tt{gappixels 1}}, in the master.raw file you will read: -\begin{verbatim} -row : 514 pixels -col : 257 pixels -\end{verbatim} - -\section{Readout timing- maximum frame rate}\label{timing} -IMPORTANT: to have faster readout and smaller dead time, one can configure {\tt{clkdivider}}, i.e. the {\tt{textcolor}{red}{speed} at which the data are read, i.e. 200/100/50~MHz for {\tt{clkdivider 0/1/2}} ({\tt{ -\textcolor{red}{speed full\_speed/half\_speed/quart\_speed}}) and the dead time between frames through {\tt{flags parallel}} or {\tt{\textcolor{red}{parallel 1}}}, i.e. acquire and read at the same time or acquire and then read out. -The configuration of this timing variables allows to achieve different frame rates. NOTE THAT IN EIGER, WHATEVER YOU DO, THE FRAME RATE LIMITATIONS COME FROM THE NETWORK BOTTLENECK AS THE HARDWARE GOES FASTER THAN THE DATA OUT. WE recconmmend using the detector in \tt{dr 4/8/16}, \tt{\textcolor{red}{speed full\_speed}}, \tt{parallel 1} or \tt{dr 32}, \tt{\textcolor{red}{speed quart\_speed}}, \tt{parallel 1. All those options are now the defaults options starting from version 5.x. - - - -In the case of REAL CONTINUOUS readout, i.e. continuous acquire and readout from the boards (independent on how the chip is set), the continuous frame rates are listed in table~\ref{tcont}. The time to send out the frame out of the board -\begin{table} -\begin{tabular}{|c|c|c|c|c|} -\hline -\tiny{GbE} & \tiny{dynamic range} & \tiny{continuos maximum frame rate(Hz)} & \tiny{minimum period ($\mu$s)}& \tiny{calculated/measered time to send out data ($\mu$s)}\\ -\hline -1 & 16 & \textbf{256} & 3901 & \\ -\hline -1 & 32 & \textbf{128} & 7820 & \\ -\hline -10 & 4 & \textbf{7813} & 98 & 105/128\\ -\hline -10 & 8 & \textbf{4000} & 196 & 210/250\\ -\hline -10 & 16 & \textbf{2000} & 391 & 420/490\\ -\hline -10 & 32 & \textbf{1023} & 782 & 840/977\\ -\hline -\end{tabular} -\caption{Frame rate limits for the CONTINUOS streaming out of images, i.e. the data rate out is just below 1Gb/s or 10Gb/s. 1023~Hz for 32-bit, 10GbE is obtained from the 10GbE limitation. The maximum achievable frame rate is 977~Hz.} -\label{tcont}\end{table} - Note that in the {\tt{continuous}} flag mode, some buffering is still done on the memories, so a higher frame rate than the proper real continuous one can be achieved. Still, this extra buffering is possible till the memories are not saturated. The number of images that can be stored on the DDR2 on board memories are listed in table~\ref{timgs}. -\begin{table} -\begin{tabular}{|c|c|} -\hline -dynamic range & images\\ -\hline -4 & 30000\\ -\hline -8 & 15000\\ -\hline -16 & 7600\\ -\hline -\end{tabular} -\caption{Amount of images that can be stored on board. As while we store them, we start to send them out, the effective number of images could be larger than this, but it will depend on the network setup (how fast you stream out images).} -\label{timgs} -\end{table} - -The maximum frame rate achievable with 10~GbE, {\tt{dr 16}}, {\tt{flags continuous}}, {\tt{flags parallel}} ({\tt{\textcolor{red}{parallel 1}}}),{\tt{clkdivider 0}} ({\tt{\textcolor{red}{speed full\_speed}}}), \textbf{6.1~kHz}. This is currently limited by the connection between the Front End Board and the Backend board. We expect the 32 bit mode limit, internally, to be \textbf{2~kHz} ({\tt{clkdivider 2}}). - In dynamic range {\tt{dr 8}} the frame rate is \textbf{11~kHz} and for{\tt{dr 4}} is \textbf{22~kHz}. For 4 and 8 bit mode the frame rate are directly limited by the speed of the detector chip and not by the readout boards. - -\subsection{Minimum time between frames and Maximum frame rate} - -We need to leave enough time between an exposure and the following. This time is a combination of the time required by the chip, by the readout boards and eventually extra time to reduce some appearance of cross talk noise between the digital and analog parts of the chip. -\textbf{It is essential to set the {\tt{period}} of the detector, defined as the {\tt{exptime}} plus an extra time, that needs to be at least the chip/board readout time. If this is set wrong (it is $<$ {\tt{exptime}} plus chip/board readout time), then the detector takes the minimum time it can, but you are in a not controlled frame rate situation.} - -The expected time difference between frames given by the pure chip readout time is in Table~\ref{tchipro}. -\begin{tiny} -\begin{table} -\begin{flushleft} -\begin{tabular}{|c|c|c|c|} -\hline -\tiny{dr} & \tiny{clkdivider} & \tiny{expected chip readout t($\mu$s)} & \tiny{measured chip readout t($\mu$s)}\\ -\hline -4 & 0 & 41 & 40\\ -4 & 1 & 82 & 84\\ -4 & 2 & 123 & 172\\ -\hline -\hline -8 & 0 & 82 & 82\\ -8 & 1 & 164 & 167\\ -8 & 2 & 328 & 336\\ -\hline -\hline -12 & 0 & 123 &122\\ -12 & 1 & 246 & 251\\ -12 & 2 & 491 & 500\\ -\hline -\end{tabular} -\caption{Readout time required from the chip to readout the pixels. The numbers are obtained using equation~\ref{dtnonparallel}.} -\label{tchipro} -\end{flushleft} -\end{table} -\end{tiny} - -The {\tt{period}} is s is defined as: -\begin{equation} \label{period} -\textrm{period} = \textrm{exptime} + \textrm{minimum time between frames} -\end{equation} -where the 'minimum time between frames' and the minimum period will be discussed in Table~\ref{tframes}. -\begin{tiny} -\begin{table} -\begin{flushleft} -\begin{tabular}{|c|c|c|c|c|c|c|c|} -\hline -\tiny{dr} & \tiny{clkdivider} & \tiny{flags} & \tiny{$\Delta$t frames($\mu$s) } & \tiny{max FR (kHz)} & \tiny{min period ($\mu$s)} & \tiny{meas. period ($\mu$s)} & \tiny{max imgs (nominal/our network)}\\ -\hline -4 & 0 & \tiny {parallel} & 3.4 & 22 & 44 & 44.01 & 30k/50k\\ -\hline -\hline -8 & 0 & \tiny {parallel} & 3.4 & 11.1 & 89 & 89.01 & 15k/24k\\ -\hline -16 & 0 & \tiny {parallel} & 3.4 & 6.1 & (126+38)* =164 & 164.02 & 8k/12k\\ -\hline -16 & 0 & \tiny {nonparallel} & 127 & 5.6 & (126+52)*= 179 & 179.01& 8k/23k\\ -\hline -16 & 1 & \tiny {parallel} & 6.1 & 3.9 & 257 & 257.01 & 8k/28k\\ -\hline -16 & 1 & \tiny {nonparallel} & 255 & 3.3 & 303 & 303.01 & infinite\\ -\hline -\end{tabular} -\caption{Readout settings. The {\tiny{min exptime}} possible is 5$-$10~$\mu$s. This is due to the time to pass the pixel enable signal in the whole chip. The time between frames ($\Delta$t) has been measured with the oscilloscope and the maximum frames rate (max FR) has been tested with an external gating from a pulse generator at known frequency. The minimum period is obtained as 1/$\textrm{max frame rate}$.} -\label{tframes} -\end{flushleft} -\end{table} -\end{tiny} - -\textbf{From software version 4.0.0, there is a very useful function {\tt{sls\_detector\_get measuredperiod}} which return the measured period AFTER the acquisition. This is important to check that the settings to obtain the targeted frame rate was correct.} - -In release \textcolor{red}{5.0} in 4-bit modes one can set a sort of ROI in the detector such to read half of the module (the central part) or a quarter of it with almost double or four times the frame rate. By default the \tt{\textcolor{red}{readnlines}} is set to \tt{256} meaning the whole chip. With \tt{\textcolor{red}{readnlines 128}} or \tt{\textcolor{red}{readnlines 64}} one sets to read half/quarter rows from the chip. In table~\ref{table:hfrpartial} the maximum frame rates, exposure time and period for the partial readout.\\ - - -\begin{tabular}{|c|c|c|c|c|c|c|} -\hline - readnlines & \# pixels & Active area (cm$^2$) & Max frame rate (kHz) & Period ($\mu$s) & Dead time ($\mu$s) & \# buffered images\\ -\hline -256 &1024 $\times$ 512 & 8 $\times$ 3.8 & 22.7 & 44.0 &4.1 & 30k\\ -\hline -128 &1024 $\times$ 256 & 8 $\times$ 1.9 & 42.1 & 23.7 &4.2 & 60k\\ -\hline -64 & 1024 $\times$ 128 & 8 $\times$ 0.95 & 73.5 & 13.6 &4.2 & 120k\\ -\hline -\end{tabular} -\label{table:hfrpartial} - - -\textbf{If you run too fast, the detector could become noisier (see problem shooting), it is important to match the detector settings to your frame rate. This can be done having more parameters files and load the one suitable with your experiment.} We experienced that with low energy settings could not reach 6~kHz and no noise. -In 16 bit mode, it could make sense, in case of noise and low threshold to either reduce the frame rate: -\begin{equation} -\textrm{new period} = \textrm{exptime} + \textrm{minimum time between frames} + (\textrm{10$-$20 }\mu \textrm{s}) -\end{equation} -to let the signal settle or, if the frame rate is important, leave the {\tt{period}} at the same value but reduce the {\tt{exptime}}: -\begin{equation} -\textrm{new exptime} = \textrm{old exptime} - (\textrm{10$-$20 }\mu \textrm{s}) -\end{equation} - -In general, choose the maximum frame rate you want to aim, not exceeding what you aim for not to increase the noise. In 4 and 8 bit modes it makes no sense to run nonparallel as the exposure time is too small compared to the readout time. - -Here below are the final tables for settting the detcetor correctly: - -\begin{itemize} -\item CONTINUOUS redout (imagesnot stored on board memories, frames can be achieved. {\tt{flags parallel}}, {\tt{clkdivider 0}} are always set. In 32-bit no extra {\tt{subdeadtime}} is assumed. The difference between {\tt{exptime}} and {\tt{period}} has to be $\approx$5 $\mu$s: -\begin{center} - \begin{tabular}{ |c| c| } - \hline - max frame rate & settings\\ - \hline - \textcolor{red}{189~Hz (977~Hz max)} & \textcolor{red}{32-bit} \\ - & Nframes=infinite\\ - \hline - \textcolor{red}{2.56 kHz} & \textcolor{red}{16-bit}\\ - & Nframes=infinite\\ - \hline - \textcolor{red}{5.1 kHz} & \textcolor{red}{8-bit}\\ - & Nframes=infinite\\ - \hline - \textcolor{red}{10.2 kHz} & \textcolor{red}{4-bit}\\ - & Nframes=infinite\\ - \hline - \end{tabular} -\end{center} -BE CAREFUL that if you have the transmission delays setup (see sec.~\ref{network}), this will slow down the sending of the data and you risk to fill up the memories of the boards on eiger (30000 images in 4 bit mode) and you will get corrupted data (parts of the memory on the boads will be overwritten). - -\item BUFFERED readout (images stored on board memories, such that the maximum frame rate can be achieved for a limited amount of frames. {\tt{flags parallel}}, {\tt{clkdivider 0}} are always set. In 32-bit no extra {\tt{subdeadtime}} is assumed. The difference between {\tt{exptime}} and {\tt{period}} has to be $\approx$5 $\mu$s: -\begin{center} - \begin{tabular}{ |c| c| } - \hline - max frame rate & settings\\ - \hline - \textcolor{red}{189~Hz (977~Hz)} & \textcolor{red}{32-bit} \\ - & Nframes=infinite\\ - \hline - \textcolor{red}{6.1 kHz} & \textcolor{red}{16-bit}\\ - & Nframes=7600\\ - \hline - \textcolor{red}{11.1 kHz} & \textcolor{red}{8-bit}\\ - & Nframes=15000\\ - \hline - \textcolor{red}{22 kHz} & \textcolor{red}{4-bit}\\ - & Nframes=30000\\ - \hline - \end{tabular} -\end{center} -\end{itemize} - - - -\subsubsection{4 and 8 bit mode} -In {\tt{parallel}} mode, the minimum time between frames is due to the time required to latch the values of the counter with capacitors. These values are determined in firmware and they can be estimated as: - -\begin{equation} \label{dtparallel} -\textrm{time between frames, parallel} = 4 \mu s \cdot (clkdivider+1) -\end{equation} - -This time is independent on the {\tt{dr}}. - -In {\tt{nonparallel}} mode, it is easily possible to calculate the required asic readout time. -Indeed a block of (8*256) pixels are readout, the bits pixel are the {\tt{dr}} and the speed of readout is 5ns/bit *({\tt{clkdivider}}+1) : - -\begin{equation}\label{dtnonparallel} -\textrm{asics readout time} = 5ns/bit \cdot 2^{(clkdivider+1)} \cdot dr \cdot (8*256) + 4 \mu s \cdot (clkdivider+1) -\end{equation} - -While we expose the next frame, we still need to readout the previous frame, so we need to guarantee that the period is large enough at least to readout the frame. So the maximum frame rate has to be $1/(\textrm{asic readout time})$. The minimum period has to be equal to the asic readout time. - -\subsubsection{16 bit mode} - -A similar situation happens in 16 bit mode, where this is more complicated because of three things: -\begin{enumerate} -\item The chip actual {\tt{dr}} is 12 bit -\item The chip is readout as 12-bit/pixel, but the FEB inflates the pixel values to 16-bits when it passes to the BEB. This means that effectively the FEB to BEB connection limits the data throughput in the same way as if the {\tt{dr}} of the chip would really be 16 bits. -\item While in 4 and 8 bit mode it makes no sense to run in {\tt{nonparallel}} mode as the exptime/dead time ratio would be not advantageous, in 16 bit mode, one can choose how to run more freely. -\end{enumerate} - -If we are in parallel mode, the dead time between frames, is also here described by equation~\ref{dtparallel}. If we are in {\tt{nonparallel}} mode, the dead time between frames is defined by \ref{dtnonparallel} ONLY for {\tt{clkdivider}} 1 and 2. So the maximum frame rate has to be $1/(\textrm{chip readout time})$ in this case. Only for {\tt{clkdivider}} 0 we hit some limitation in the bandwidth of The FEB $\to$ BEB connection. In this case, the maximum frame rate is lowered compared to what expected. - -\subsubsection{32 bit mode} -The autosumming mode of Eiger is the intended for long exposure times (frame rate of order of 100Hz, PILATUS like). A single acquisition is broken down into many smaller 12-bit acquisitions, each of a {\tt{subexptime}} of 2.621440~ms by default. Normally, this is a good default value to sustain an intensity of $10^6$ photons/pixel/s with no saturation. To change the value of {\tt{subexptime}} see section~\ref{advanced}. - -The time between 12-bit subframes are listed in table~\ref{t32bitframe}. -\begin{tiny} -\begin{table} -\begin{flushleft} -\begin{tabular}{|c|c|c|c|c|c|c|} -\hline -\tiny{dr} & \tiny{clkdivider} & \tiny{flags} & \tiny{subexptime (s)} & \tiny{t difference between subframes($\mu$s)} & \tiny{max internal subframe rate (kHz)} & \tiny{maximum frame rate (Hz)}\\ -\hline -32 & 2 & parallel & 0.00262144 & 12 & 380 & 189\\ -\hline -32 & 2 & parallel & 0.000490 & 12 & 2 & 997\\ -\hline -\end{tabular} -\caption{Timing for the 32bit case. The maximum frame rate has been computed assuming 2 subframes of default {\tt{subexptime}} of 2.62144 ms, which is the default value. By setting up {\tt{subexptime}} to 490~$\mu$s one can achieve a maximum frame rate. Note that one has to leave 490$\mu$s extra between a frame and the following.} -\label{t32bitframe} -\end{flushleft} -\end{table} -\end{tiny} - -\textbf{The exposure time brokend up rounding up to the full next complete subframe that can be started.} -The number of subframes composing a single 32bit acquisition can be calculated as: -\begin{equation} -\textrm{\# subframes}= (int) (\frac{\textrm{exptime (s)}}{\textrm{subexptime (s) + difference between frames (s)}}+0.5) -%\label{esubframes} -\end{equation} -This also means that {\tt{exptime}}$<${\tt{subexptime}} will be rounded to{\tt{subexptime}}. If you want shorter acquisitions, either reduce the {\tt{subexptime}} or switch two 16-bit mode (you can always sum offline if needed). - -From release 4.0.0, an extra {\tt{flag overflow/nooverflow}} is added (\tt{\textcolor{red}{overflow 0/1}}), with {\tt{nooverflow}} (\tt{\textcolor{red}{overflow 0}}) default: -\begin{itemize} -\item {\tt{nooverflow}} (\tt{\textcolor{red}{overflow 0}}): the internal 12-bit result is summed, even if there was saturation of the 12-bit counter (4095) in any of the subframes. Note that if there is saturation for every subframe, you might get as a result a value of the counter equal to (4095$\times$~number~of~subframes), which you need to correctly identify. On the other hand if the saturation occurred only one time, you will get something "close'' to the real number. -\item {\tt{overflow}} (\tt{\textcolor{red}{overflow 1}})): In this case, even if a pixel saturate only 1 time in a subframe, you will be returned as a value of the counter for that pixel: $2^{32}-1$, i.e. 4294967295. -\end{itemize} - -The UDP header will contain, after you receive the data, the effective number of subframe per image (see section~\ref{UDP}) as "SubFrame Num or Exp Time", i.e. the number of subframes recorded (32 bit eiger). -The effective time the detector has recorded data can be computed as: -\begin{equation} -\textrm{effective exptime}=(\textrm{subexptime})\cdot (\textrm{\# subframes}) -%\label{esubframes} -\end{equation} - - From release 4.0.0, a configurable extra time difference between subframes can be introduced for the parallel mode, so that some noise appearing in detectors at low threshold can be removed. This is obtained through the {\tt{subdeadtime}}. You need to add values specific for your detector (ask the detector group). Typically, values between 15-40~$\mu$s should be used (for the 9M it is currently 200~$\mu$s due to a noisier module). - - - -\section{External triggering options}\label{triggering} -The detector can be setup such to receive external triggers. Connect a LEMO signal to the TRIGGER IN connector in the Power Distribution Board (see Fig.). The logic 0 for the board is passed by low level 0$-$0.7~V, the logic 1 is passed to the board with a signal between 1.2$-$5~V. Eiger is 50~$\Omega$ terminated. By default the positive polarity is used (negative should not be passed to the board). - -\begin{figure}[t] -\begin{center} -\includegraphics[width=.4\textwidth]{tiggerIN} -\end{center} -\caption{\textbf{Trigger INPUT} (looking at a single module from the back, top) is the \textbf{rightmost, down}.} -\label{triggerIN} -\end{figure} - -\begin{verbatim} -sls_detector_put 0-timing [auto/trigger/burst_trigger/gating] -sls_detector_put 0-frames x -sls_detector_put 0-cycles y (\textcolor{red}{triggers}) -sls_detector_acquire 0- -\end{verbatim} -No timeout is expected between the start of the acquisition and the arrival of the first trigger. - -Here are the implemented options so far: -\begin{itemize} -\item {\tt{auto}} is the software controlled acquisition (does not use triggers), where {\tt{exptime}} and {\tt{period}} have to be set. Set number of {\tt{cycles}} (\textcolor{red}{triggers}) to 1. Set number of frames using {\tt{frames}}. -\item {\tt{trigger}} 1 frame taken for 1 trigger. Your {\tt{frames}} needs to be 1 always, {\tt{cycles}} ({\tt{\textcolor{red}{triggers}}}) can be changed and defines how many triggers are considered. {\tt{exptime}} needs to be set. In the GUI this is called trigger exposure series. -\item {\tt{burst\_trigger}} gets only 1 trigger, but allows to take many frames. With {\tt{frames}} one can change the number of frames. {\tt{cycles}} ({\tt{\textcolor{red}{triggers}}}) needs to be 1. {\tt{exptime}} and {\tt{period}} have to be set. In the gui it is called trigger readout. -\item{\tt{gating}} allows to get a frame only when the trigger pulse is gating. Note that in this case the exp time and period only depend on the gating signal. {\tt{cycles}} (\tt{\textcolor{red}{triggers}}) allows to select how many gates to consider. Set number of frames to 1 using {\tt{frames}}. IMPORTANT: Up to firmware 23, the last subframe is oblige to finish being taken, despite the gate signal going down. This will be configurable from later fw and software version. Also, in gating mode, due to timimg of the state machine, you need to leave 500~$\mu$s deadtime between the end on an acquisition and the next. This is as the state machine is unable to check for changes in the status in the first 500~$\mu$s. ATTENTION: if you are in 16 bit mode and you are applying online rate corrections, as now the exptime is generated by the trigger, you might not have correct rate corrections. If you know what the exposure time is in the gating signal, then you can set the {\tt{exptime}} once and the rate corrections will be correct. In 32 bit mode, it does not matter as the rate corrections depends on the {\tt{subexptime}} which is software set independently from the gate exptime. - -ATTENTION: From release 4.1.1 with the {\tt{trigger}} option it is possible to have software triggers as a debugging tool (instead of the hardware trigger signal. One should start the acquisition (with the blocking {\tt{sls\_detector\_acquire}} if wanted and with another client one can send the softare trigger {\tt{sls\_detector\_put status trigger}}. This option allows for example to perform a motor scan (moving a motor in between single images) and still writing all images to the same file. -When using 32-bit mode, by default the acquisition ends the last complete subframe that was started when still the acquisition time was valid. This has been chosen as many people wants to know the exact acquisition time for when the detector was taking data and also, if {\tt{ratecorr}} are active, the last subframe will be correctly corrected, while otherwise it will be corrected with a wrong subdeadtime. -However, from 4.1.0, in gating mode, an option to immediately terminate the subframe when the gate signal goes down it is implemented to stop the acquisition at the same time. This option is {\tt{./sls\_detector\_put interruptsubframe 1}} while the default option is {\tt{./sls\_detector\_put interruptsubframe 0}}. - -\end{itemize} - -Hardware-wise, the ENABLE OUT signal outputs when the chips are really acquiring. This means that the single subframes will be output in 32 bit mode. The TRIGGER OUT outputs the sum-up-signal at the moment (which is useless). This will be changed in the future to output the envelop of the enable signal. - -We are planning to change some functionality, i.e. unify the {\tt{trigger}} and {\tt{burst\_trigger}} trigger modes and make both {\tt{frames}} and {\tt{cycles}} (\tt{\textcolor{red}{triggers}}) configurable at the same time. - -There is the possibility to use {\tt{timing trigger/burst\_trigger}} and send software single commands to fake the trigger. This is done with: -\begin{verbatim} -sls_detector_put 0-timing [trigger/burst_trigger] -sls_detector_put 0-frames x -sls_detector_put 0-cycles y (\textcolor{red}{triggers}) -sls_detector_status trigger -\end{verbatim} - Note that this functionality is very (!) useful if you need to do something between and acquisition and the next. This can be used to do a fast threshold scan for example. See section~\ref{sec:fastthresholdscan}. - - -\section{Autosumming and rate corrections} \label{advanced} - -In the case of autosumming mode, i.e, {\tt{dr 32}}, the acquisition time ({\tt{exptime}} is broken in as many subframes as they fit into the acquisition time minus all the subframes readout times. By default the {\tt{subexptime}} is set to 2.621440~ms. This implies that 12 bit counter of \E will saturate when the rate is above or equal to 1.57~MHz/pixel. The minimum value is of order of 10~ns (although as explained values smaller than 500~$\mu$s do not make sense). The maximum value is 5.2~s. - -The subframe length can be changed by the user by doing: -\begin{verbatim} -sls_detector_put 0-subexptime [time_in_s] -\end{verbatim} - -One needs to realize that the readout time, for each subframe is 10.5~$\mu$s if the detector is in parallel mode. 500~$\mu$s if the detector is in non parallel mode. Note that in {\tt{dr 32}}, as the single frame readout from the chip is 500~$\mu$s, no {\tt{subexptime}}$<$500~$\mu$s can be set in {\tt{parallel}} mode. To have smaller {\tt{subexptime}}, you need the {\tt{nonparallel}} mode, although this will have a larger deadtime than the acquisition time.\\ - -Rate corrections are possible online (and the came procedure can be used offline) by creating a look-up table between the theoretically incident counter value $c_i$ and the detected counter value $c_d$. -In the EIGER on board server, this look-up table is generated assuming that the detected rate $n_d$ can be modeled as a function of the incident rate $n_i$ according to the paralyzable counter model: -\begin{equation} -n_d= n_i \cdot exp(-n_i \cdot \tau), -\label{rate} -\end{equation} -where $\tau$ represents an effective parameter for the dead time and the loss in efficiency. The look-up table is necessary as we are interested to obtain $c_i(c_d)$ and equation~\ref{rate} is not invertible. One needs to notice that the paralyzable counter model to create a look-up tables applies only if photons arrive with a continuous pattern (like at the SLS). If photons are structured in fewer but intenser bunches, deviations may arise. This is the case for some operation modes at the ESRF. For those cases we are studying how to correct, probably from a simulated correction tables if an analytical curve cannot be found. -\textbf{In the new calibration scheme, $\tau$ is given as a function of the energy. It is loaded from the trimbit files and interpolation between two trimbit files are performed.} One needs to make sure the appropriate $\tau$ value is written in the trimbit files, then need to load the appropriate {\tt{settings}} and {\tt{vthreshold}} before. - -Online rate corrections can be activated for {\tt{dr=32}}. They are particularly useful in the autosumming mode as every single subframe is corrected before summing it. To correct for rate, the subframe duration has to be known to the correction algorithm. Rate corrections for {\tt{dr=16}} will be activated as well in the next firmware release. -To activate the rate corrections, one should do:\\ -\begin{verbatim} -sls_detector_put 0-ratecorr [tauval_in_ns] -\end{verbatim} -To deactivate: -\begin{verbatim} -sls_detector_put 0-ratecorr 0 -\end{verbatim} - - Now to activate the rate corrections with the value written in the trimbit file or interpolated from there, once would do: -\begin{verbatim} -sls_detector_put 0-ratecorr -1 -\end{verbatim} - -Every time either the rate corrections are activated, $\tau$ is changed or the subframe length is changed, then a new correction table is evaluated. Note that computing the correction table is time consuming. - -Here in figure~\ref{rateplots} you can find typical values of $\tau$ and typical values of the rates for which we have small non linerities (10\% non linearity) as a function of the beam energy. -\begin{figure}[t] -\begin{center} -\includegraphics[width=.7\textwidth]{tauvsE} -\includegraphics[width=.7\textwidth]{Ratecapabilityflux} -\end{center} -\caption{Typical values of the dead time for the detector and safe fluxes as a function of the beam energy}. -\label{rateplots} -\end{figure} - - - - -\section{Dependent parameters and limits} -Here is a list of dependent parameters: -\begin{enumerate} -\item \textbf{dr} changes \textbf{clkdivider}: \textbf{dr} 16 $\to$ \textbf{clkdivider} 1. You can change it to (0, 1, 2); the frame rate changes accordingly to table~\ref{tframes}. Setting the \textbf{dr} to 32 changes \textbf{clkdivider} to 2. Only way \textbf{dr} 32 can work. -\end{enumerate} - -Here is a list of "ignored'' parameters, meaning that if the parameters are not what the detector expects, it will ignore them, but there is no guarantee that you get what you think you are asking: -\begin{enumerate} -\item \textbf{period}. Assuming that you set the correct \textbf{exptime} according to the table~\ref{tframes}, the \textbf{period} to be used by the detector has to be $>=$ \textbf{exptime}+readout time (table~\ref{tframes}). Otherwise the detector will take data at the minimum possible period, which is \textbf{exptime}+readout times. \textbf{period} is not changed by the detector after the acquisition. -\end{enumerate} - -Here is a list of limits that should be checked: -\begin{enumerate} -\item -If \textbf{dr} is 32 and \textbf{clkdivider} is not 2, whatever the detector gets out is wrong (the boards cannot properly keep up) -\item If the variable \textbf{frames} is greater than what the memory can store (table~\ref{timgs}) and the frame rate exceed the continuos streaming (table~\ref{tcont}), limits on the maximum number of images need to be implemented if the period is lower than the one listed in table~\ref{tcont}. Check table~\ref{tframes} to see the different cases. -\item Running at a speed that does not support the frame rate you are asking: see table~\ref{tframes} to check if the frame rate (\textbf{period}) you are asking is compatible with the \textbf{clkdivider} you are asking. -\item Running at a readout time that does not support the frame rate you are asking. Check table~\ref{tframes} to check if the frame rate (\textbf{period}) you are asking is compatible with the \textbf{flags} you are asking. -\item The minimum allowed value for \textbf{exptime} should be 10~$\mu$s. -\item By default the {\textbf{subexptime}} is set to 2.621440~ms. Values smaller than 500~$\mu$s do not make sense. The maximum value is 5.2~s. This limits should be checked. -\end{enumerate} - -Here is a list of parameters that should be reset: -\begin{enumerate} -\item \textbf{resetframescaught} (only for releases < 5.x) should be reset to zero after every acquisition taken with {\tt{receiver start}},{\tt{status start}},{\tt{receiver stop}}. If the acquisition is taken with {\tt{sls\_detector\_acquire}}, there is no need to reset this. -\item After changing the {\tt{timing}} mode of the detector, one should reset to '1' the unused value, in that specific timing mode, between \textbf{frames} and \textbf{cycles} (\tt{\textcolor{red}{triggers}}). See section~\ref{triggering} for how to use the timing. At the present moment the detector will acquire more frames than planned if the variable not used between \textbf{frames} and \textbf{cycles} (\tt{\textcolor{red}{trigger}}) is not reset. In future releases, the unused variable will be ignored. Still resetting is a good practice. - -\end{enumerate} - -\section{1Gb/s, 10Gb/s links} -\subsection{Checking the 1Gb/s, 10Gb/s physical links}\label{led} -LEDs on the backpanel board at the back of each half module signal: -\begin{itemize} -\item the 1Gb/s physical link is signaled by the most external LED (should be green). For top half modules is at the extreme left. For bottom half modules is at the extreme right. -\item the 10Gb/s physical link is signaled by the second most external LED next to the 1Gb/s one (should be green). -\end{itemize} - -\begin{figure}[t] -\begin{center} -\includegraphics[width=.7\textwidth]{LEDSim} -\end{center} -\caption{1 and 10GB LEDs position.} -\label{fLEDs} -\end{figure} - - - - -\subsection{Delays in sending for 1Gb/s, 10Gb/s, 10Gb flow control, receiver fifo}\label{network} - -Extremely advanced options allow to: -\begin{itemize} -\item Activate the flow control for 10~Gb/s~E (by default the 1~Gb/s~E is always active and cannot be switched off: -\begin{verbatim} -./sls_detector_put flowcontrol_10g 1 (\textcolor{red}{flowcontrol10g}) -\end{verbatim} -\item Delay the transmission of the left port. This delay option is useful in the case of many simultaneous receivers running, such that it reduces the throughput to the receivers all at the same time. To be used board by board (i.e {\tt{X:, Y:,etc..}} with different units: -\begin{verbatim} -./sls_detector_put X:txndelay_left xxxx -\end{verbatim} -\item Transmission delay of the right port, same as above. The value here should be different from the left port to spread the transmission even more -\begin{verbatim} -./sls_detector_put X:txndelay_right yyyy -\end{verbatim} -As example: -\begin{verbatim} -for X in $(seq 0 4); do ./sls_detector_put $X:txndelay_left $((X*100000)); done - \end{verbatim} -\begin{verbatim} -./sls_detector_put $X:txndelay_right $((X*100000)); X=$((X+1)); done -\end{verbatim} - -\item Set transmission delay of the entire frame. This is required as you want to finish sending the first frame to all receivers before starting sending the second frame to the receivers with shorter delay time. This value has to be greater than the maximum of the transmission delays of each port. -\begin{verbatim} -./sls_detector_put txndelay_frame zzzz -\end{verbatim} -In the example before, it would be: {\tt{zzzz}}=4*100000+ 100000 -To decide the size of the transmission delays, look at subsection~\ref{delays}. - -\item Readjust the size of the fifo of the receiver between listening and writing (useful when writing is limited) -\begin{verbatim} -./sls_detector_put rx_fifodepth xxxx -\end{verbatim} - {\tt{xxxx}} is 100 images by default. -\item Deactivate a half module (for ROI or debugging). Note that the MASTER module SHOULD NOT be deactivated: -\begin{verbatim} -./sls_detector_put X:activate 0 -\end{verbatim} -where $X$ is the half module you want to deactivate. -The receiver at this point will return fake data (overflow) for this module. If you wish to eliminate the receiver overall for this module, then you need to run a configuration file where this module has been removed. -To activate back a module, do: -\begin{verbatim} -./sls_detector_put X:activate 1 -\end{verbatim} - -\end{itemize} - -\section{Choose correct transmission delays}\label{delays} - -Transmission delays should be chosen only to accomodate the writing speed of the disk. The 10Gb network should be optimised independently to allow no packet loss situation. This can be done by turning off the writing of the files and check only for missing frames. - -Table~\ref{tcont} gives the times that are needed to transfer 1 images out of the 10~Gb Ethernet connection. This reflects the CONTINUOS frame rate achieavable. The disk speed can be monitored with {\tt{dstat}}. One you have worked out this, you can calculated the {\tt{txndelay\_frame}} delay as: - -\begin{equation} - {\tt{txndelay\_frame}}=-t_sending+dr \cdot \frac{4*256*256*N\_half\_modules}{1024 \cdot 1000 \cdot disk\_speed [MB/s] \cdot 8} -\end{equation} -In 4-bit mode, for a disk seed of 320MB/s, the {\tt{txndelay\_frame}} is 300~$\mu$s (30000 to be set up to the detector). The sending time is 100~$\mu$s, such that an total ackievable writing speed of 1/400~$\mu$s (2.5~kHz) in achieved. - -Note that: -\begin{enumerate} -\item The continuos frame rate goes down when transmission delays are introduced: -\begin{equation} -continuos\_frame\_rate= \frac{1}{\tt{txndelay\_frame}+t\_sending} -\end{equation} -\item If your transmission delays reduce the continuos frame rate, you will saturate the memory on board at some point and you will corrupt images. Conservatively, we say that the number of maximum images in buffered mode is the one listed in table~\ref{timgs}, call N\_images. However, one can approximately say that (and here we need to test more, so do not believe to these numbers yet), -\begin{equation} -N\_tot\_images= N\_images+\frac{ N\_images}{frame\_rate \cdot (t\_delay\_frame + t\_sending) } -\end{equation} - -\end{enumerate} - - -\section{Setting up the PC settings for 10Gb}\label{10g} - -For configuring well the 10Gb card not to loose packets, -\begin{itemize} -\item MTU must be set up to 9000 (jumbo frames) on all the involved sides: detector, switch, server NIC -\item you should set up static MAC address tables with separated VLANs -\end{itemize} -As root, also first check your ethtool settings (-small letter arguments), then change the settings (-capital letter arguments): -\begin{verbatim} -ethtool -g xth1 -ethtool -c xth1 -ethtool -a xth1 -\end{verbatim} - -To change settings: -\begin{verbatim} -ethtool -G xth1 rx 4096 #or wheterver is the max number for your pc -ethtool -C xth1 rx-usecs 100 -ethtool -A xth1 rx on -\end{verbatim} -where {\tt{xth1}} can be replaced with the correct 10Gb device. -NOTE THAT THIS SETTINGS WILL BE LOST IF YOU REBOOT THE COMPUTER. - -Very important is to activate the flow control in 10Gb (in 1Gb it is on by default and not configurable) -\begin{verbatim} -./sls_detector_put flowcontrol_10g 1 (\textcolor{red}{flowcontrol10g 1}) -\end{verbatim} -You ned to check that flow control is setup on the reeceiving interfaces. Check with: -\begin{verbatim} -ethtool -a eth1 -\end{verbatim} -.RX should be ON. Set the transmission delays as explained in the manual if necessary. These transmission delays should help matching teh writing speed performance of your disk. You can check how fast you are writing using the {\tt{dstat}} command. - -Now setup the computer server propery: -Check the size of: -\begin{verbatim} -sysctl -a | grep backlog -sysctl -a | grep rmem -\end{verbatim} -Set it correctly with: -\begin{verbatim} -sysctl net.core.netdev_max_backlog=250000 -sysctl net.core.rmem_default=$((100*1024*1024)) -sysctl net.core.rmem_max=$((100*1024*1024)) -\end{verbatim} - -Other way to setup the same, increase the socket receiving buffer size and the maximum length of the input queue: -\begin{verbatim} -echo $((100*1024*1024)) > /proc/sys/net/core/rmem_max -echo 250000 > /proc/sys/net/core/netdev_max_backlog -\end{verbatim} -to make the settings permanent, edit /etc/sysctl.conf: - \begin{verbatim} -# 100MiB -net.core.rmem_max = 104857600 -net.core.rmem_default= 104857600 -net.core.netdev_max_backlog = 250000 -\end{verbatim} -and run \textbf{sysctl -p}. - -To minimise loosing packets, priorities are set better as root user, so have the receiver as root. -To try to bypass being root, we trued something like this: -\begin{verbatim} -/etc/security/limits.conf username – rtprio 99 -\end{verbatim} -but somehow it did not fully worked so we kept the trick of being root. - -Last, you can disable power saving in the CPU frequency (chose the appropriate command for your system): -\begin{verbatim} -cpupower frequency-info -cpupower frequency-set -g performance -\end{verbatim} -or -\begin{verbatim} -cpufreq-info -for i in `seq 0 7`; do cpufreq-set -c $i -g performance; done -\end{verbatim} - -It can help to increase the fifo size of the receiver to {\tt{rx\_fifodepth}} to 1000 images -\begin{verbatim} -./sls_detector_put rx_fifodepth 1000 -\end{verbatim} -One needs to keep into account that in 16 bit mode for 1 image we expect each slsReceiver to allocate 0.5MB. So for 1000 images, we expect 500MB memory for each receiver. This can be monitored in Linux with "top" or "free -m". To receive the max number of images possible on the detector, a minimum of 8~GB of memories are required. -For very high frame rate, very long measurements, we had to increase the {\tt{rx\_fifodepth}} to 10000 images but this only in 4, 8, 16 bit mode. In 32 bit mode it will assign 40~GB of memory, which is more than what normal PC would have. So make sure you do not require too much memory. - -Last, it is very important that not too many files are created. There is high possibility to loose packets in the time to close and open files for the writer. IN 3.1.x, the default number of images written per file, in Eiger is 2000. This is defined by the line: -\begin{verbatim} -#define EIGER_MAX_FRAMES_PER_FILE 2000 -\end{verbatim} -in {\tt{slsDetectorsPackage/slsReceiverSoftware/include/sls\_receiver\_defs.h}}. In 4.0.x, this is interactively defined using the command: {\tt{r\_framesperfile}}. By default it is 10000. - -If you do not have a large disk, you can write to memory if your pc is not fast enough: -\begin{verbatim} -mount -t tmpfs none /ramdisk_folder -\end{verbatim} -or -\begin{verbatim} -mount -t tmpfs none /mnt/ramdisk -o size=10G -\end{verbatim} -check how many GB memory you can allocate, to avoid swapping otherwise - - -\section{Offline processing and monitoring} - -\subsection{Data out of the detector: UDP packets}\label{UDP} - -The current UDP header format is described in figure~\ref{UDPheader}. -\begin{figure}[t] -\begin{center} -\includegraphics[width=1.2\textwidth]{EIGERUDPHeader} -\end{center} -\caption{UDP header out of EIGER} -\label{UDPheader} -\end{figure} - -\subsection{Data out of the slsReceiver} - - -For a module, the geometry of the ports are as in table~\ref{tports}: -\begin{table} -\begin{tabular}{|c|c|} -\hline -{\tt{0:rx\_udpport 50011}} & {\tt{0:rx\_udpport2 50012}}\\ -\hline -{\tt{1:rx\_udpport 50013}} & {\tt{1:rx\_udpport2 50014}}\\ -\hline -\end{tabular} -\caption{UDP port geometry for a single module, 4 UDP ports.} -\label{tports} -\end{table} -white the option {\tt{n:flippeddatax 1}}, which flips in vertical the content of the module. By convection, we usually use {\tt{1:flippeddatax 1}}, but one could flip the top instead. - - -\subsection{``raw'' files} -If you use the option of writing raw files, you will have a raw file for each UDP port (meaning most likely 2 chips), 4 files per module. In addition to the raw files, you will get also a ``master'' file, containing in ascii some detector general parameters and the explanation of how to interpret the data from the raw files. - -The master file is named: {\tt{filename\_master\_0.raw}} and for version ``5.0'' of the slsDetectorSoftware looks like: -\begin{verbatim} -Version : 6.2 -TimeStamp : Thu Oct 8 11:10:07 2020 - -Detector Type : Eiger -Timing Mode : auto -Image Size : 524288 bytes -Pixels : [512, 256] -Max Frames Per File : 10000 -Frame Discard Policy : nodiscard -Frame Padding : 1 -Scan Parameters : [disabled] -Total Frames : 10 -Dynamic Range : 32 -Ten Giga : 1 -Exptime : 1s -Period : 50us -SubExptime : 2.62144ms -SubPeriod : 2.62144ms -Quad : 0 -Number of Lines read out : 256 -Rate Corrections : [0, 0] - -\#Frame Header -Frame Number : 8 bytes -SubFrame Number/ExpLength : 4 bytes -Packet Number : 4 bytes -Bunch ID : 8 bytes -Timestamp : 8 bytes -Module Id : 2 bytes -Row : 2 bytes -Column : 2 bytes -Reserved : 2 bytes -Debug : 4 bytes -Round Robin Number : 2 bytes -Detector Type : 1 byte -Header Version : 1 byte -Packets Caught Mask : 64 bytes -\end{verbatim} - -Note that if one wants to reconstruct the real time the detector was acquiring in 32 bit (autosumming mode), one would have to multiply the SubExptime (ns) for the SubFrame Number. - -\subsection{Offline image reconstruction} -The offline image reconstruction{\tt{slsImageReconstruction}} is not part of the package anymore. However, it can be retrieved from \\ -{\tt{git clone https://github.com/slsdetectorgroup/slsImageReconstruction.git slsImageReconstruction}}.\\ -Checkout the {\tt{v3.1}} branch if in a 3.1.X release, the {\tt{v4.0.0}} branch if in 4.0.X release, or the {\tt{v4.1}} branch if in 4.1.X release of the {\tt{slsDetector}} code. There is a {\tt{developer}} branch that is following the 5.X chnages but it is not official yet. - -Four possible conversions are possible: into \textbf{cbf}, \textbf{hdf5}. \textbf{tiff} and \textbf{root} format. The detector writes 2 raw files per receiver. An offline image reconstruction executable has been written to collate the possible files together and produce output files. By default an interpolation between the values of the large pixels is performed. Gap pixels between modules are also inserted. - -\subsection{Releases} -Note for different releases: -\begin{itemize} -\item Note that the number of images per file in the 3.1.X release is hardcoded and needs to match whatever you are using in \\ -{\tt{slsDetectorsPackage/slsReceiverSoftware/include/sls\_receiver\_defs.h}}: -\begin{verbatim} -#define EIGER_MAX_FRAMES_PER_FILE 2000 -\end{verbatim} -The default is 2000 in the 3.1.X release. The default has been changed to 10000 frm realease 4.0.X and now this is picked up automatically without doing anything. - -\item From release 4.1.x, it is not needed to change the options in the \tt{slsImageReconstruction/src/main\_csaxs.cpp} file, but it is enough to change the options in the compiler. Options are: -\begin{enumerate} -\item [cbf] if you want header style supperted at MS beamline (in reality the lines are just hardcoded with no real information in them, just to have all required filesds) analyser (Krysalis?) choose -DMSHeader -\item [hdf5] If you want a master file, which contains a virtual dataset pointing at dataset written in subfiles, use the option -DMASTERVIRTUAL . This option however is not supported neither by Matlab2018, nor by Albula and Nedved installed at the MS beamlines. -\item [hdf5] The master file contains links to the datasets of other files, use -DMASTERLINK option. Although this version is very unconfortable if you need to open writing your code different events, but it is what Albula, Nedved and so on uses (it is compatible to Dectris). So it has more portability. -\item [hdf5]to compress using zlib, use the -DZLIB. Very slow compression, not used -\item [hdf5] -DBITSHUFFLE should have lz4 and bitshuffle implemented. I am not sure it works. NEEDS to be tested. Not to be used if not for debugging. -\end{enumerate} - \end{itemize} - - - - -\subsubsection{cbf} -The cbf executable executable uses the CBFlib-0.9.5 library (downloaded from the web as it downloads architecture dependent packages at installation).Edit the Makefile to correclty point at it.\\ - -To use it for a single module: -\begin{verbatim} -cbfMaker [filename with dir] -\end{verbatim} -eg. -{\tt{cbfMaker /scratch/run\_63\_d1\_f000000000000\_3.raw}}\\ - -To use it any geometry:\\ -{\tt{cbfMaker [filename] [outdir, def=same as filename] [pixels x, def=1024] [pixels y, def=512] [singlemodulelongside\_x, def=1] [fillgaps, def=Interpolate Big Pixels] [hdf5datasetname, def="Eiger"] [start det,def=0]}}\\ -eg. -{\tt cbfMaker /scratch/run\_63\_d0\_f000000000000\_3.raw 3072 512 1 2 ``Eiger'' 0}.\\ - -The {\tt{[singlemodulelongside\_x]}} {\tt{[option to interpolate gap pixels]}} param are optional. Defaults are ``1'', the detector long side is on the x coordinate and to start to reconstruct from module 0. -The interpolation scheme fro the gap pixels between chips is by default ``interpolate large big pixels'', =2; -If you want to change interpolation scheme, use:\\ -\begin{tabular}{|c|c|} -\hline -interpolation scheme & argument\\ -\hline -insert gap pixels and assign value only to the first one & 0\\ -\hline -equally divide the value of the counter bettern the two pixels & 1\\ -\hline -interpolate large pixel value & 2\\ -\hline -mask the value of the two gap pixels & 3\\ -\hline -\end{tabular} -\ \\ -\ \\ -The executables: -\begin{verbatim} -cbfMaker1.5M [file_name_with_dir] -cbfMakerOMNY [file_name_with_dir] -cbfMaker9M [file_name_with_dir] -\end{verbatim} -contain the hardcoded geometry for the 1.5M (3 modules horizontal on the long side), the 1.5M OMNY geometry (3 modules next to each other on the long side) and for the 9M at cSAXS: 6(short side)$\times$3 (long side) modules.\\ -Missing packets in a frame and border pixels ($\times 2$ and $\times 4$ are given with value $-1$ at the present time. - -From the new {{v4.1.1}} all the define that you see below need only to be modified in the Makefile. - -Make sure the following options are uncommented in the {\tt{slsImageReconstruction/src/main\_csaxs.cpp}} file. -\begin{verbatim} -#define MYCBF -##following line only if you need to process with BUBBLE -#define MSHeader -\end{verbatim} -Compile it with: -\begin{verbatim} -make cbfMaker; make cbfMakerOMNY; -\end{verbatim} - -\subsubsection{hdf5} -In case of HDF5 output file, we rely on having the hdf5/1.10.3 (previously was 1.10.1 library installed and {\tt{HDF5-External-Filter-Plugins}} installed). Edit the Makefile to correclty point at Different compression methods (so far only the not efficien gzip is implemented) are being tried so different external filters might be to be installed. This work is not finished yet. - -To choose HDF5, with ZLIB implementation, open {\tt{slsImageReconstruction/src/main\_csaxs.cpp}} and make sure that -\begin{verbatim} -#define HDF5f -#define ZLIB -\end{verbatim} -are not commented out. All other options need to be commented out. Copile the code with -\begin{verbatim} -make hdf5Maker; make hdf5MakerOMNY; -\end{verbatim} - -If you are at cSAXS. all images collected will be written in a single file. If you are not at CSAXS, most likely you want to have all the images written in a single raw file into an HDF5 file. The multiple HDF5 files are then linked in a master file, with many subdatasets (can be read by albula) or by a virtual file with a single dataset. If you want a master o virtual file, uncomment this option: -\begin{verbatim} -#define MASTERVIRTUAL -\end{verbatim} -and recompile. -To use it for a single module: -\begin{verbatim} -hdf5Maker [filename with dir] -\end{verbatim} -eg. -{\tt{hdf5Maker /scratch/run\_63\_d1\_f000000000000\_3.raw}}\\ - -To use it any geometry:\\ -{\tt{hdf5Maker [filename] [pixels x, def=1024] [pixels y, def=512] [singlemodulelongside\_x, def=1] [fillgaps, def=Interpolate Big Pixels] [hdf5datasetname, def="Eiger"] [start det,def=0]}}\\ -eg. -{\tt hdf5Maker /scratch/run\_63\_d0\_f000000000000\_3.raw 3072 512 1 2 ``Eiger'' 0}.\\ - -\subsubsection{root} -The data will be written as TH2D in root format. Edit the {\tt{Makefile}} to point to the correct ROOT library location. Compile the executable as: -\begin{verbatim} -make image -\end{verbatim} -There is no program other executable that already keeps into account the geometry for it. -To use it any geometry:\\ -{\tt{image [filename] [pixels x, def=1024] [pixels y, def=512] [singlemodulelongside\_x, def=1] [fillgaps, def=Interpolate Big Pixels] [hdf5datasetname, def="Eiger"] [start det,def=0]}}\\ -eg. -{\tt image /scratch/run\_63\_d0\_f000000000000\_3.raw 3072 512 1 2 ``Eiger'' 0}.\\ - -With new new software, the new options to run the cbfMaker/hdf5Maker executablesare: - -./hdf5Maker -f [filename] -d [outdirname] -x [npix\_x] -y [npix\_y] -v (v flags that longedge is vertical, no argument) -n [name\_of\_hdf5\_dataset] -m (mask\_hot\_pixels, need to be in file maskpix.txt in the samedir as executable, no argument) -g [0,no filling/1,division/2,interpolation/3,interpolate,alternative] - -\subsection{Read temperatures/HV from boards} - -With an updated kernel on the linux boards (ask to the SLS detector group for specifications), it is possible to monitor the temperature on the boards: -\begin{verbatim} -temp_fpga #gets the temperature of the fpga -temp_fpgaext #gets the temperature close to the fpga -temp_10ge #gets the temperature close to the 10GE -temp_dcdc #gets the temperature close to the dc dc converter -temp_sodl #gets the temperature close to the left so-dimm memory -temp_sodr #gets the temperature close to the right so-dimm memory -temp_fpgafl #gets the temperature of the left front end board fpga -temp_fpgafr #gets the temperature of the right front end board fpga - -\end{verbatim} - -You need to use the command specifying from which board you desire the temperature readings, for example: -\begin{verbatim} -./sls_detector_get 0:temp_fpga -./sls_detector_get 1:temp_fpga -\end{verbatim} -In 500k--2M pixel systems there is a hardware temperature safety switch, which will cut power to the BEBs when reaching a too high temperature. For the 9M system, there is a temperature sensor read by the bchip100 PCU which will shutdown the detector when above a certain temperature. - -The HV can also be set and read through the software: -\begin{verbatim} -./sls_detector_put vhighvoltage 150 (\textcolor{red}{highvoltage}) -./sls_detector_get vhighvoltage (\textcolor{red}{highvoltage}) -\end{verbatim} -Note that the get {\tt{vhighvoltage}}(\tt{\textcolor{red}{highvoltage}}) would return the measured HV from the master module only. If getting the highvoltage for individual halfmodules, only the master will have a value different from -999. - -\section{Run the sum of counts in the receiver} -In the package {\tt{slsImageReconstruction}} there is also a very basic executable that allows to run receivers that sum all the counts in the UDP port and writes them as a text files in the {\tt{outdir}} directory in the same directory as the data files, with the same {\tt{fname}}. This is to use EIGER as a simple normalization detector. -The code is in {\tt{slsImageReconstruction/src/ReceiverSum.cpp}}. -For the compilation you need to be in {\tt{slsImageReconstruction}} -\begin{verbatim} - make -f Makefile.zmq receiverSum -\end{verbatim} -you might need to edit the path to the {\tt{slsDetectorPackage}} that you are using in the {\tt{Makefile.zmq}}. -Usage is: -\begin{verbatim} -export LD_LIBRARY_PATH=pathtoslsDetectorPackage/build/bin -./bin/receiverSum -./bin/receiverSum rx_tcppport 1955 -\end{verbatim} -For now, to work peoperly there are some requirements that need to make more general if the code wants to be used more: -\begin{enumerate} -\item You can use the code only for a module (2 Receivers) -\item The first receiver has to run using tcp\_port 1954 (the second port is not fixed but we use 1955 normally) -\item Set the option {\tt{enablefwrite 0}} (\textcolor{red}{\tt{fwrite 0}}) as we do not write raw data but only the text files. -\item As a bit of time is required to make the sum compared to a normal receiver, use the option {\tt sls\_detector\_put rx\_fifodepth 50000}. -\end{enumerate} -File like fnamed0\_findex.txt, fnamed1\_findex.txt, fnamed2\_findex.txt and fnamed3\_findex.txt will be written, containing 2 columns: the frame number and the sum of counts for the port. -\appendix - -\section{Kill the server, copy a new server, start the server}\label{server} -All the below operations are form a terminal and assume you login to the boards.\\ -Kill current server: -\begin{verbatim} -ssh root@bebxxx #password is root -killall eigerDetectorServer # kill server and stopserver -\end{verbatim} -Copy a new version of the server (if necessary, otherwise skip it): -\begin{verbatim} -cd executables -scp user@pc:/path/eigerDetectorServerNewVersion . -chmod 777 eigerDetectorServerNewVersion -mv eigerDetectorServerNewVersion eigerDetectorServer -sync -\end{verbatim} -Start the server again: -\begin{verbatim} -./eigerDetectorServer & -\end{verbatim} -\textbf{Note that the server appropriate for the software version used is located inside the package: {\tt{slsDetectorsPackage/serverBin/eigerDetectorServerxx.yy.}}}. - -To copy the detector server on many boards, a script can be implemented on the lines of: -\begin{verbatim} -for i in beb111 beb070; -do ssh root@$i killall eigerDetectorServer; -scp eigerDetectorServer root@$i:~/executables/eigerDetectorServer ; -ssh root@$i sync; done -\end{verbatim} - -\section{Loading firmware bitfiles} - -\textbf{As a new procedure, the first thing to do is to kill the server on the boards, copy the new one there without starting it.} Note that failure to do this step before may cause the linux on the boards to crash and not being able to ping it (this if the registers between the old and new firmware change). - -This is the procedure from a terminal; -\begin{verbatim} -for i in beb111 beb070; -do ssh root@$i killall eigerDetectorServer; -scp eigerDetectorServer root@$i:~/executables/eigerDetectorServer ; -ssh root@$i sync; done -\end{verbatim} - -A \textbf{bcp} executable (which needs \textbf{tftp} installed on the PC, is needed. -\begin{enumerate} -\item Manual way: you need to press something on the detector. To program bitfiles (firmware files), do a hard reset with a pin/thin stuff in the holes at the very back of the module. They are between the top 7 LED and the bottom 1 and opposite for the other side. Push hard till all LEDs are alternating green and red. -\item Software way (possible only if you have the correct programs copied on your board. If not, as the sls detector group). -\begin{verbatim} -ssh root@bebxxx -cd executables -./boot_recovery - \end{verbatim} -\end{enumerate} -In both case, after booting, only the central LED should be on green and red alternating. - -From a terminal, do: -\begin{verbatim} -nc -p 3000 -u bebxxx 3000 -\end{verbatim} -where {\tt{xxx}} is the board number. It is enough top monitor with {\tt{nc}} only one board. Pres enter twice (till you see a prompt with the board hostname printed) and keep this terminal to monitor. It takes a bit of time to load the bitfiles, but the terminal tells you.\\ -From another terminal you do: -\begin{verbatim} -./bcp feb_left.bit bebxxx:/febl -sleep 300; #or till the screen over netcat has told you Successful -./bcp feb_right.bit bebxxx:/febr -sleep 300; #or till the screen over netcat has told you Successful -./bcp download.bit bebxxx:/fw0 -sleep 300; #or till the screen over netcat has told you Successful -\end{verbatim} -If you need to program a new kernel (only needed when told to do so): -\begin{verbatim} - ./bcp kernel_local bebxxx:/kernel -sleep 300; #or till the screen over netcat has told you Successful -\end{verbatim} -do the same for the other boards. You can program in parallel many boards, but you cannot load two bitfiles on the same board till loading and copying one process has finished. So load all left febs together, then proceed to the right febs, then the bebs. Power off completely everything. Power it on. - -\section{Pulsing the detector} -There are two ways to pulse the detector: -\begin{itemize} -\item \textbf{Pulse digitally:} when you are interested to the output readout and do not care about the analog response from the pixels: -\begin{verbatim} -sls_detector_put vthreshold 4000 -sls_detector_put vtr 4000 -sls_detector_put pulsechip N #to pulse N -sls_detector_put pulsechip -1 #to get out of testing mode -\end{verbatim} -Note that the answer will be $2 \cdot \textrm{{\tt{N}}} +2$ in this case. -Or in \textcolor{red}{5.x}: -\begin{verbatim} -sls_detector_put vthreshold 4000 -sls_detector_put vtrim 4000 -sls_detector_put pulsechip N #to pulse N -sls_detector_put pulsechip -1 #to get out of testing mode -\end{verbatim} -Note that the answer will be $2 \cdot \textrm{{\tt{N}}} +4$ in this case. - -\item \textbf{Pulse analogically:} You want to really check the analogical part of the detector, not just the readout. - - \begin{verbatim} -sls_detector_put vcall 3600 -sls_detector_put vthreshold 1700 -sls_detector_put vrf 3100 -for i in $(seq 0 7) ; -do px=$((-255+i)); -sls_detector_put pulse 0 $px 0; -for j in $(seq 0 255) ; do -sls_detector_put pulsenmove N 0 1; -done; -done; -sls_detector_put resmat 0 -sls_detector_acquire -\end{verbatim} -You read {\tt{N}} in every pixel if you are setup correctly. -or in realese \textcolor{red}{5.x}: -\begin{verbatim} -sls_detector_put vcal 3600 -sls_detector_put vthreshold 1700 -sls_detector_put vrpreamp 3100 -for i in $(seq 0 7) ; -do px=$((-255+i)); -sls_detector_put pulse 0 $px 0; -for j in $(seq 0 255) ; do -sls_detector_put pulsenmove 100 0 1; -done; -done; -sls_detector_put partialreset 1 -\end{verbatim} -\end{itemize} - - - - -\section{Load a noise pattern with shape} -For debug purposes, we have created a noise pattern with a shape. If you reconstruct correctly your image, you should be able to read ".EIGER'' in the same direction for both the top and bottom in normal human readable orientation. -To load the special noise file look at {\tt{settingsdir/eiger/standard/eigernoise.sn0xx}} in the package. -\begin{verbatim} -sls_detector_put trimbits ../settingsdir/eiger/standard/eigernoise -\end{verbatim} -To exit from this pattern noise, just set the threshold to something known. -\begin{verbatim} -\item sls_detector_put threshold 50000 standard -\end{verbatim} -where 5000 would be a value in eV and {/tt{standard}} is important in this case. - -\section{(Fast) threshold scans during beam operation}\label{sec:fastthresholdscan} -Occasionally you might need to do threshold scans during your data taking (for example for Laue experiments or to get any spectral information). Setting the threshold in this case would be not optimal as you would change trimbits at every energy and this could give you a ``step'' behaviour. What you could do is to use the -\begin{verbatim} -\item sls_detector_put thresholdnotb 50000 -\end{verbatim} - which set the threshold to an energy but does not change trimbits. We suggest that before using this function you load the {\tt{threshold}} at an energy in the middle of your scan range and then change {\tt{thresholdnotb}}. -We have also been requested if we could speed up the threshold scan. At the moment no specific function has been integrated in firmware, but one could use the software trigger option to perform what you need: -\begin{verbatim} -./sls_detector_put exptime 0.01 -./sls_detector_put timing trigger -./sls_detector_put enablefwrite 0 (\textcolor{red}{fwrite} 0) -./sls_detector_put resetframescaught 0 (\textcolor{red}{not needed anymore}) -./sls_detector_put index 0 (\textcolor{red}{findex} 0) -./sls_detector_put cycles 21 (\textcolor{red}{triggers} 21) -./sls_detector_put receiver start -./sls_detector_put status start -for i in $(seq 0 20); - do - #./sls_detector_put thresholdnotb 5000 ##this is still too slow as it loads the module - ./sls_detector_put 0:vrf 3199 #need to know the appropriate vrf at every energy - ./sls_detector_put 1:vrf 3199 #need to know the appropriate vrf at every energy - ./sls_detector_put status trigger - #sleep 0.005 -done -./sls_detector_put receiver stop -./sls_detector_put resetframescaught 0 -./sls_detector_put timing auto -\end{verbatim} - -\section{Troubleshooting} -\subsection{Cannot successfully finish an acquisition} -\subsubsection{Only master module return from acquisition} -When no packets are received AND detector states in 'running status'. Widest list of causes. -Query the status of each half module till the maximum number {\tt{N}}, {\tt{for i in \$(seq\ 0\ N); do sls\_detector\_get \$i:status; done}}, to check if there are half modules that are still running. - -If only the master modules return but ALL the other half modules do not: -\begin{itemize} -\item FEB LED 1 and or 3 become red while trying to acquire an image: reconnect or change the DDR2 memories. Technically it is a FIFO problem to communicate the data to the rest of the chain. -\item It can be that the master cable is not connected, check. -\item It can be that the synchronization cable is not connected or the termination board at the synchronization does not work. Check. -\end{itemize} - -\subsubsection{A few modules do not return from acquisition} -If only a few modules are still running but the others return, it is a real problem with a backend board or a synchronization bug. -If you can, ssh into the board, kill and start the eigerDetectorServer again (see Section~\ref{server} for how to do this). Keep the terminal with the output from the eigerDetectorServer and repeat the acquisition. -\begin{itemize} -\item Check if the acquisition returned from the server or not. In case seek help from the SLSDetectorGroup. -\item In the server you read something along the lines of "cannot read top right address". It is communication between the front and backend board. Or FEB FPGA is not programmed. Try to program again FPGA, and make sure you program FPGA bit files 70x, if you have 70x FPGAs, or 30x, if you have 30x FPGAs. If still fails, tell the SLSDetectorGroup as it could be a hardware permanent failure. -\end{itemize} - -\subsection{No packets (or very little) are received} -In both cases running \textbf{wireshark} set to receive UDP packets on the ethernet interface of the receiver (filter the UDPport$>=$xxxx, where xxxx is written in the configuration file) can help you understanding if NO packets are seen or some packets are seen. You have to set the buffer size of the receiving device in wireshark to 100Mbyte minimum. If no packets are received, check that your receiving interface and detector UDPIPs are correct (if in 10Gb). Most of the time in this case it is a basic configuration problem. -It can help looking at the receiver output, shown in an example here: -\begin{verbatim} -Missing Packets : 224064 -Complete Frames : 3499 -Last Frame Caught : 3499 -\end{verbatim} - -The {\tt{Last Frame Caught}}, meaning the packet from the last frame that was sent out by the detector, can help in understanding the problem: -\begin{enumerate} -\item If some packets are received, but not all, it could be a network optimization problem. In this case, the {\tt{Last Frame Caught}} will be a value close to the expected number of frames with missing frames distributed over the whole frame range. In this case: - \begin{itemize} -\item For receiving data over 1Gb, the switch must have FLOW CONTROL enabled -\item If using 10GbE, check that the 10Gb link is active on the backpanel board. Then refer to Section~\ref{10g} to see how to configure the 10Gb ports on the receiving machine correctly. -\end{itemize} -\item If the {\tt{Last Frame Caught}} value is much lower than the expected frames and you are missing a bunch of frames from a point onwards, and you are using {\tt{receiver start, status start}}: then it can be that you are stopping the receiver too early. In particular when you are using {\tt{delay}} it might be that there is some time between when the detector is already done and in {\tt{idle}} state but the receiver is still receiving data. Check with {\tt{./sls\_detector\_get framescaught}} if the receiver is already done before doing {\tt{./sls\_detector\_put receiver stop}}. -\item If the {\tt{Last Frame Caught}} value is much lower than the expected frames and you are missing a bunch of frames from a point onwards and you are running at a higher frame rate than the continuous framerate (see table~\ref{tcont}) with more images than the size of the memory (see table~\ref{timgs}). It might be that you are running out of memory to store images. There is no protection for this. see point~\ref{outmemory} - \end{enumerate} - -\subsection{'Got Frame Number Zero from Firmware'}\label{outmemory} -In this case, you have run out of memory size (see table~\ref{timgs} for the size) on the boards so you are trying to store on the DDR2 memories more images that they can contain and the network is not fast enough to send everything out from the 10GbE. -So if you see: -\begin{verbatim} -Got Frame Number Zero from Firmware. Discarding Packet -\end{verbatim} -it means that you run out of memory at the previous acquisition. The cure is taking 2 or 3 SINGLE images in a raw to clear out the memories. - - - -\subsection{The module seems dead, no lights on BEBs, no IP addresses} -\begin{itemize} -\item Check the 2 fuses on the power distribution board. If one of the fuses is in shortcuircuit, then exchange it. Nominal values are 7 A and 5 A. Old modules with 5 A and 3 A could trip. -\item The module is not properly cooled and the temperature safety switch has killed the power to the backend boards. -\end{itemize} - -\subsection{The module seems powered but no IP addresses} -If the 1G LED (see Section~\ref{led}) on the backpanel board is not green: -\begin{itemize} -\item Check that the 1Gb cable is plugged in. -\item Check that there is a DCHP server assigning IP addresses to the board. -\item The IP address is assigned only at booting up of the boards. Try to reboot in case the board booted before it could have an IP address. -\item Check that you did not run out of IP addresses -\end{itemize} - Check that the board is not in recovery mode (i.e. the central LED on the back is stable green, see Fig~\ref{fLEDs}). In this case reboot the board with the soft reset or power cycle it. - -If the 1Gb LED on the backpanel board is green (see Section~\ref{led}): -\begin{itemize} -\item Check that the IP address has been refreshed on the PC you are trying to communicate to the detector from. Run on the PC as root the following command to update the DNS cache: \textbf{nscd -i hosts} -\end{itemize} - -\subsection{Receiver cannot open socket} -It is connected to the TCPport which the receiver uses: -\begin{itemize} -\item The port is already in use by the same receiver already opened somewhere or by another process: check with \textbf{ps -uxc} your processes -\item In rare cases, it might be that the TCP port crashes. To find out which process uses the TCPPOrt do: \textbf{netstat -nlp | grep xxxx}, where xxxx is the tcpport number. To display open ports and established TCP connections, enter: \textbf{netstat -vatn}. Kill the process. -%%%#To display only open UDP ports try the following command: netstat -vaun - \end{itemize} - -\subsection{The client ignores the commands} -Make sure that in the configuration file you do not have {\tt{lock 1}} activated, as this will let only one username from one IP address talk to the detector. -To deactivate it, you need to run {\tt{lock 0}} from the client session where you locked it. - -\subsection{Zmq socket is blocked} -It is connected to the TCPport which is used. In rare cases, it might be that the TCP port crashes. To find out which process uses the TCPPOrt do: \textbf{netstat -nlp | grep xxxx}, where xxxx is the tcpport number. To display open ports and established TCP connections, enter: \textbf{netstat -vatn}. Kill the process. - - -\subsection{Client has \textbf{shmget error}} -Note that occasionally if there is a shared memory of a different size (from an older software version), it will return also a line like this: -\begin{verbatim} -*** shmget error (server) ***-1 -\end{verbatim} -This needs to be cleaned with {\tt{ipcs -m}} and then {\tt{ipcrm -M xxx}}, where xxx are the keys with nattch 0. Alternative in the main slsDetectorFolder there is a script that can be used as {\tt{sh cleansharedmemory.sh}}. Note that you need to run the script with the account of the client user, as the shared memory belongs to the client. It is good procedure to implement an automatic cleanup of the shared memory if the client user changes often. - -\subsection{Client has shared memory iusses} -The shared memory from software version 4.0.0 creates shared memory segments in /dev/shm/. You can look at them and cancel them directly. Note that this is still user dependent. -Environment variable SLSDETNAME can be set for using 2 different detectors from the same client pc. One needs a different multi detector id if the SLSDETNAME is different for both consoles. - -\subsection{Measure the HV} -For every system: -\begin{itemize} -\item Software-wise measure it (now the software returns the measured value), with {\tt{sls\_detector\_get highvoltage}}. The returned value is the HV (for proper Eiger setting is approximately 150~V) if it is correctly set. If two master modules are presents (multi systems), the average is returned (still to be tested). If one asks for the individual $n$ half module bias voltage through {\tt{sls\_detector\_get n:highvoltage}}, if the $n$ module is a master, the actual voltage will be returned. If it is a slave, -999 will be returned. -\item Hardware-wise (opening the detector) measure value of HV on C14 on the power distribution board. Check also that the small HV connector cable is really connected. - \end{itemize} - -The 2M system at ESRF has a HV enable signal that needs to be shortcut in order to overwrite vacuum protections (when not in vacuum). -The 1.5M for OMNY has a relay system that enables HV only when the vacuum is good. -For both systems, it makes sense not to set the HV while running the configuration file but set it at a later stage when sure about the vacuum. - -\subsection{The image now has a vertical line} -Check if the vertical line has a length of 256 pixels and a width of 8 columns. In this case it is a dataline being bad. It can be either a wirebond problem or a frontend board problem. try to read the FEB temperature (see Section~\ref{}) and report the problem to the SLSDetector group. Most likely it will be a long term fix by checking the hardware. - -\subsection{The image now has more vertical lines} - -If you see strange lines in vertical occurring at period patterns, it is a memory problem. The pattern is 4 columns periodic in 16 bit mode, 8 columns periodic in 8 bit mode and 2 columns periodic in 32 bit mode. Try to switch on and off (sometimes it is a strange initialization problem). - -\subsection{ssh to the boards takes long} -Depending on your network setup, to speed up the ssh to the boards from a pc with internal dhcp server running: \textbf{iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE; echo "1" > /proc/sys/net/ipv4/ip\_forward}, where eth1 has to be the 1Gb network device on the pc - -\subsection{Generate keys on the boards not to have to type the password} -\begin{verbatim} -export AFSDIRS64=/afs/psi.ch/intranet/Controls/Software/Trolltech/SL6-x86_64 -ssh-copy-id -i /afs/psi.ch/user/t/tinti_g/.ssh/id_rsa.pub root@beb100 -ssh-keygen -\end{verbatim} - -\subsection{Check firmware version installed on BEB} -You can either ask in the client as described in section~\ref{api}, or login to the boards directly. Follow some steps described in Section~\ref{server}. -\begin{verbatim} -ssh root@bebxxx #password is root -killall eigerDetectorServer # kill server and stopserver -cd executables/ -./eigerDetectorServer& -\end{verbatim} -Scroll up in the terminal till you find {\tt{Firmware Version: xx}} - -\subsection{Check if half-module is a master, a slave, a top or a bottom} -Follow some steps described in Section~\ref{server}. -\begin{verbatim} -ssh root@bebxxx #password is root -killall eigerDetectorServer # kill server and stopserver -cd executables/ -./eigerDetectorServer& -\end{verbatim} -Scroll up in the terminal till you find:\\ -*************** TOP/BOTTOM ***************\\ -*************** MASTER/SLAVE ***************\\ -*************** NORMAL/SPECIAL ***************\\ - -There is also an easier way, that is that only the master module will return the real value of the HV. If you have more than 1 detector system, then you will have more than 1 physical master, as the HV needs to be applied to all the systems. - -\begin{verbatim} -for i in $(seq 0 36); do sls_detector_put $i:highvoltage; done -\end{verbatim} - Only the master will return to you a sensible number (150 normally). the others will return -999. - -\subsection{'Cannot connect to socket'} -This error is typically due to the detector server not running. For why, see section~\ref{servernot}. - -\subsection{Running at low frame rate, the communication to receiver stops} -If running in 32-bit mode (or even in 16-bit mode), if more memory than what your machine can handle is asked for, the receiver process could be terminated by the kernel of your machine. It would loook like you had executed a clean control-c on the receiver executable. This has been the case, when setting up by mistake -\tt{rx\_fifodepth} to 10000 images in 32 bit mode. In 32 bit mode it will assign 40~GB of memory, which is more than what normal PC would have. So make sure you do not require too much memory. The same is tru also for smaller values of {\tt{rx\_fifodepth}} if your machine has not much memory. - -\subsection{Detector server is not running}\label{servernot} -The detector server could not be running: either the detector was powered off, or it powered off itself due to too high temperature or, in the case of the 9M, if the waterflow sensor detected no flux and powered it off (the chiller stops occasionally as cSAXS). - -If the powering and the temperature are OK, instead, it can be that the firmware version is incompatible to the server version and/or the client software version. In software packages 3.x.y, the eigerDetectorServer was killed automatically. So check the consistency of firmware/software/server versions if using this version of the software. From 4.x.y onwards, the server, if associated to a wrong firmware, does not kill itself. - -\subsection{'Acquire has already started' error message} -If you see the client returning the following error message:\\ -``Acquire has already started. If previous acquisition terminated unexpectedly, reset busy flag to restart.(sls\_detector\_put busy 0)''\\ - You need to run the command: -\begin{verbatim} -./sls_detector_put busy 0 -\end{verbatim} - -\subsection{There is noise running the detector in 32-bit} -If you are running the detector in 32-bit (autosumming), there might be some noise, particularly at lower threshold energies. This is due to the fact that the analog part of the chips require some latency time to settle which is larger than the readout time. It is possible to run the detector only in {\tt{parallel}} or {\tt{nonparallel}} mode, respectively with readout times between frames of 12~$\mu$s and 504~$\mu$s. If you switch {\tt{flags}} to non {\tt{nonparallel}} mode you will give enough time for the signals to settle. From release 4.0.0, there is a configurable delay that can be set through the {\tt{subdeadtime}} variable, such that you can remain with the {\tt{parallel}} flag, but can obtain a configurable dead time between frames. Ask the SLS detector group for an appropriate dead time for your detector, but typically a dead time of 20-50~$\mu$s should be enough. Note that this {\tt{subdeadtime}} need to include the 12~$\mu$s minimum readout time, so it has to be larger than 12~$\mu$s to do anything. - -\subsection{There is noise running the detector at high frame rate(4,8,16 bit)} -If are running in {\tt{parallel}} mode, in particular at low threshold energies, you might encounter some noise. The reason is that the analog part of the chips require some latency time to settle which is larger than the readout time. -\begin{enumerate} -\item You can lower the frame rate and relax requirements on period: -At low frame rate, you normally leave enough time between the end of the acquisition and the starting of the next, so you should not see this effect. In any case setting a {\tt{period}}={\tt{exptime}}+readout time from Table~\ref{tchipro} +extra 20$\mu$s cures the problem. The 20$\mu$s could also be 10~$\mu$s, they are very hardware dependent. -\item The frame rate requirement are stringent (as for time resolved measurements): the only option here is to reduce the {\tt{exptime}} to let the extra 20~$\mu$s (or 10)~$\mu$s. The {\tt{period}} remains the same. -\end{enumerate} - -\section{Client checks - command line} - -Guide on returned strings: -\begin{enumerate} -\item \begin{verbatim} -sls_detector_get free -\end{verbatim} -Returns a list of shared memories cleaned (variable number depending on detector): -\begin{verbatim} -Shared memory 273612805 deleted -Shared memory 276922374 deleted -Shared memory 270270468 deleted -free freed -\end{verbatim} -Note that occasionally if there is a shared memory of a different size (from an older software version), it will return also a line like this: -\begin{verbatim} -*** shmget error (server) ***-1 -\end{verbatim} -This needs to be cleaned with {\tt{ipcs -m}} and then {\tt{ipcrm -M xxx}}, where xxx are the keys with nattch 0. -\item \begin{verbatim}sls_detector_get settings -settings standard -\end{verbatim} -{\tt{standard}} is only if correct. {\tt{undefined}} or anything else is wrong. - -\item \begin{verbatim} -sls_detector_get threshold -threshold xxxx -\end{verbatim} -Returns a string (xxxx) that can be interpreted as the threshold in eV. If it fails to set it, returns the last threshold it was set (which the detector still has). If settings are not defined or different trimbits are chosen, it will return "undefined". - -\item \begin{verbatim} -sls_detector_get fname -fname string -\end{verbatim} - -\item \begin{verbatim} -sls_detector_get exptime -exptime number -\end{verbatim} -where {\tt{number}} is a string to be interpreted as a float in (s). - -\item \begin{verbatim} -sls_detector_get period -period number -\end{verbatim} -where {\tt{nuymber}} is a string to be interpreted as a float in (s). - -\item \begin{verbatim} -sls_detector_get frames -frames number -\end{verbatim} -where {\tt{number}} is a string to be interpreted as an integer. - -\item \begin{verbatim} -sls_detector_get cycles -cycles number -\end{verbatim} -where {\tt{number}} is a string to be interpreted as an integer. - -\item \begin{verbatim} -sls_detector_get status -status string -\end{verbatim} -where {\tt{string}} can be {\tt{idle}} or {\tt{running}}. - -\item \begin{verbatim} -sls_detector_get index -status number -\end{verbatim} -where {\tt{number}} is a string to be interpreted as an integer. - -\item \begin{verbatim} -sls_detector_get dr -dr number -\end{verbatim} -where {\tt{number}} is a string that should be interpreted as an integer (4/8/16/32). - -\item \begin{verbatim} -sls_detector_get clkdivider -clkdivider number -\end{verbatim} -where {\tt{number}} is a string that should be interpreted as an integer (0/1/2/3). - -\item \begin{verbatim} -sls_detector_get flags -flags string1 string2 -\end{verbatim} -where {\tt{string1}} is a string should be always {\tt{continous}} and {\tt{string2}} can be either {\tt{nonparallel}} or {\tt{parallel}}. - -\item \begin{verbatim} -sls_detector_get timing -timing string -\end{verbatim} -where {\tt{string}} is a string which can be {\tt{auto/trigger/burst\_trigger/gating}}. - -\item \begin{verbatim} -sls_detector_get enablefwrite -enablefwrite number -\end{verbatim} -where {\tt{number}} is a string which should be interpreted as an integer "0" or "1". - -\item \begin{verbatim} -sls_detector_get framescaught -framescaught number -\end{verbatim} -where {\tt{number}} is a string which should be interpreted as an integer of the complete frames got by the receiver. - -\item \begin{verbatim} -sls_detector_get frameindex -frameindex number -\end{verbatim} -where {\tt{number}} is a string which should be interpreted as an integer of the last frame number read from firmware. It comes from the receiver, though and reset after every acquisition series. - -\item \begin{verbatim} -sls_detector_get subexptime -subexptime number -\end{verbatim} -where {\tt{number}} is a string that should be interpreted as a float in s. The default value is 0.002621440. - -\item \begin{verbatim} -sls_detector_get ratecorr -ratecorr number -\end{verbatim} -where {\tt{number}} is a string that should be interpreted as a float in s. 0.000000 means correction off. Values above zero are the value of $\tau$ in ns. - -\item \begin{verbatim} -sls_detector_get highvoltage -highvoltage number -\end{verbatim} -where {\tt{number}} is a string that should be interpreted as an int and for proper Eiger setting is approximately 150~V if it is correctly set. If two master modules are presents (multi systems), the average is returned (still to be tested). If one asks for the individual $n$ half module bias voltage through {\tt{sls\_detector\_get n:highvoltage}}, if the $n$ module is a master, the actual voltage will be returned. If it is a slave, -999 will be returned. - -\item \begin{verbatim} -sls_detector_get busy -busy number -\end{verbatim} -where {\tt{number}} is a string that should be interpreted as an int for 0/1 meaning no/yes. This command tells if the sharedmemory has in memory that an acquisition has been started or not. It should allows to use the non blocking acquire, regardless of any delay to the detector getting into 'running' mode. - - -\end{enumerate} - -\section{Complete data out rate tables} - -In table~\ref{tframescomplete} is a list of all the readout times in the different configurations. -\begin{tiny} -\begin{table} -\begin{flushleft} -\begin{tabular}{|c|c|c|c|c|c|c|} -\hline -\tiny{dr} & \tiny{clkdivider} & \tiny{flags} & \tiny{readout t($\mu$s)} & \tiny{max frame rate (kHz)} & \tiny{min period ($\mu$s)} & \tiny{max imgs (nominal/our network)}\\ -\hline -4 & 0 & parallel & 3.4 & 22 & 44 & 30k/50k\\ -\hline -4 & 0 & nonparallel & 44 & 21 & 49 & 30k/50k\\ -\hline -4 & 1 & parallel & 6 & 10.5 & 92 & 30k/100k\\ -\hline -4 & 1 & nonparallel & 88.7 & 10.5 & 93 & 30k/100k\\ -\hline -4 & 2 & parallel & 11.2 & 5.4 & 197 & infinite\\ -\hline -4 & 2 & nonparallel & 176.5 & 5.4 & 180 & infinite\\ -\hline -\hline -8 & 0 & parallel & 3.4 & 11.1 & 89 & 15k/24k\\ -\hline -8 & 0 & nonparallel & 85.7 & 11.1 & 91 & 15k/24k\\ -\hline -8 & 1 & parallel & 6.1 & 5.7 & 181 & 15k/52k\\ -\hline -8 & 1 & nonparallel & 170.5 & 5.7 & 175 & 15k/52k\\ -\hline -8 & 2 & parallel & 11.2 & 2.9 & 342 & infinite\\ -\hline -8 & 2 & nonparallel & 340.3 & 2.9 & 344 & infinite\\ -\hline -\hline -16 & 0 & parallel & 3.4 & 6.1 & 164 & 8k/12k\\ -\hline -16 & 0 & nonparallel & 126 & 5.6& 179 & 8k/23k\\ -\hline -16 & 1 & parallel & 6.1 & 3.9& 257 & 8k/28k\\ -\hline -16 & 1 & nonparallel & 255 & 3.3& 303 & infinite\\ -\hline -16 & 2 & parallel & 11 & 1.9 & 526 &infinite \\ -\hline -16 & 2 & nonparallel & 504 & 1.8 & 555 & infinite\\ -\hline -\hline -32 & 2 & parallel & 11 & 2 & &\\ -\hline -32 & 2 & nonparallel & 504 & $<2$ & &\\ -\hline -\end{tabular} -\caption{Readout settings. The {\tiny{min exptime}} possible is 5$-$10~$\mu$s. This is due to the time to pass the pixel enable signal in the whole chip.} -\label{tframescomplete} -\end{flushleft} -\end{table} -\end{tiny} - -Table~\ref{tx} shows the bandwidth of data transferring between the FEB and BEB and of the DDR2 memory access. the GTX lanes are only capable of 25.6~Gbit/s. This limits the 12/16 bit frame rate. The 2$\times$DDR2 memories have a bandwidth or 2$\cdot$25.6~Gb/s=51.2~Gb/s. Due to this memory access bandwidth, the 32 bit autosumming mode can only run in {\tt{clkdivider}} 2. -\begin{figure}[t] -\begin{center} -\includegraphics[width=1.\textwidth]{TansmissionRates} -\end{center} -\caption{Transmission bandwidth for the FEB $\to$BEB transfer (second column) and the DDR2 memories (fourth column). } -\label{tx} -\end{figure} - -\end{document} - diff --git a/manual/manual-client/GapPixels.png b/manual/manual-client/GapPixels.png deleted file mode 100755 index 2ebfefde7..000000000 Binary files a/manual/manual-client/GapPixels.png and /dev/null differ diff --git a/manual/manual-client/LEDSim.png b/manual/manual-client/LEDSim.png deleted file mode 100755 index 5e1b91745..000000000 Binary files a/manual/manual-client/LEDSim.png and /dev/null differ diff --git a/manual/manual-client/Makefile b/manual/manual-client/Makefile deleted file mode 100755 index 897a181f1..000000000 --- a/manual/manual-client/Makefile +++ /dev/null @@ -1,78 +0,0 @@ -DESTDIR?=../docs - -#manual-api manual-calwiz manual-client manual-gui manual-main - - -TEX=latex - -MAINTEXS= slsDetectorClientHowTo.tex - -DVIS = $(MAINTEXS:.tex=.dvi) -PSS = $(MAINTEXS:.tex=.ps) -PDFS = $(MAINTEXS:.tex=.pdf) -HTMLS = $(MAINTEXS:%.tex=%) - - -all: docs pdf html - echo $(PWD) - echo $(PDFS) - echo $(HTMLS) - -docs: createdocs docspdf docshtml removedocs - -createdocs: slsDetectorClient.doxy slsDetectorCommand.cpp - doxygen slsDetectorClient.doxy - -docspdf: - cd slsDetectorClientDocs/latex && make - $(shell test -d $(DESTDIR) || mkdir -p $(DESTDIR)) - $(shell test -d $(DESTDIR)/pdf || mkdir -p $(DESTDIR)/pdf) - mv slsDetectorClientDocs/latex/refman.pdf $(DESTDIR)/pdf/slsDetectorClientDocs.pdf - -docshtml: - $(shell test -d $(DESTDIR) || mkdir -p $(DESTDIR)) - $(shell test -d $(DESTDIR)/html || mkdir -p $(DESTDIR)/html) - $(shell test -d $(DESTDIR)/html/slsDetectorClientDocs && rm -r $(DESTDIR)/html/slsDetectorClientDocs) - mv slsDetectorClientDocs/html $(DESTDIR)/html/slsDetectorClientDocs - -removedocs: - rm -rf slsDetectorClientDocs; - -pdf: $(PDFS) - $(shell test -d $(DESTDIR) || mkdir -p $(DESTDIR)) - $(shell test -d $(DESTDIR)/pdf || mkdir -p $(DESTDIR)/pdf) - mv $(PDFS) $(DESTDIR)/pdf - - -html: $(HTMLS) - -$(HTMLS): $(MAINTEXS) - $(shell test -d $(DESTDIR) || mkdir -p $(DESTDIR)) - $(shell test -d $(DESTDIR)/html || mkdir -p $(DESTDIR)/html) - $(shell test -d $(DESTDIR)/html/$@ && rm -r $(DESTDIR)/html/$@) - latex $@.tex - latex2html -split 4 $@.tex - mv $@ $(DESTDIR)/html - - - -%.dvi : %.tex - latex $< - latex $< - -%.ps : %.dvi - dvips -o $@ $< - - -%.pdf : %.ps - ps2pdf $< $@ - - -clean: - echo "cleaning for manual-client" - rm -rf *.aux *.log *.toc *.out $(DVIS) $(PSS) $(PDFS) $(HTMLS) - rm -rf slsDetectorClientDocs - rm -rf $(DESTDIR)/html/slsDetectorClientDocs - rm -rf $(DESTDIR)/html/slsDetectorClientHowTo - rm -rf $(DESTDIR)/pdf/slsDetectorClientDocs.pdf - rm -rf $(DESTDIR)/pdf/slsDetectorClientHowTo.pdf diff --git a/manual/manual-client/Ratecapabilityflux.png b/manual/manual-client/Ratecapabilityflux.png deleted file mode 100644 index e8a4e47ab..000000000 Binary files a/manual/manual-client/Ratecapabilityflux.png and /dev/null differ diff --git a/manual/manual-client/TansmissionRates.png b/manual/manual-client/TansmissionRates.png deleted file mode 100755 index efb189d8b..000000000 Binary files a/manual/manual-client/TansmissionRates.png and /dev/null differ diff --git a/manual/manual-client/commands.txt b/manual/manual-client/commands.txt deleted file mode 100755 index ce54d5906..000000000 --- a/manual/manual-client/commands.txt +++ /dev/null @@ -1,180 +0,0 @@ - /*acquisition commands */ - "acquire"; // starts the detector, acquires, saves, postprocesses the data - "data"; // get all the data (detector should already be started) - "frame"; // get one frame (detector should already be started) - "status"; // can put start or stop, returns idel, error, running, data... - /*configuration commands */ - "free";// frees shared memory - "add";// adds ne detector to multydetector structure - "remove";// removes detector from multidetector structure - "type"; // adds ne detector of type to multidetector structure - type can be Mythen , Gotthard... - "hostname"; // for slsDetector sets the hostname, for multislsdetector adds new detector with hostname - "id"; // returns the id of a detector - "master"; // sets/gets the master for synchronization of multidetector - "sync"; // sets/gets synchronization mode of a multidetector (none, trigger, gating, compementary) - "help";// help for a command - "exitserver";// shuts down detector server - do not use! - /* data processing commands */ - "flatfield"; // sets/gets flatfield file - "ffdir"; // sets gets/ flatfield directory - "ratecorr"; // sets/gets rate correction tau in ns - "badchannels"; // sets/gets badchannel file - "angconv"; // sets/gets angularconversion file - "globaloff"; // sets/gets beamline globaloffset - "fineoff"; // sets/gets experiment fine offset - "binsize" ;// sets/gets angular binsize for angular conversion - "angdir" ;// sets/ get angular direction (1,-1) - "moveflag" ;// sets/gets moveflag for the detector (default is 1) - "threaded"; // sets/gets threaded mode (do not use!) - "darkimage"; // sets/gets the darkimage for the Gotthard detector - "gainimage"; // sets/gets the gainimage for the Gotthard detector - "readctr"; // read counters for the Gotthard detector - "resetctr"; //resets counters for the Gotthard detector - "resmat"; //reset or not the counter before the following acquisition (at the end of the acquisoition the counter is always reset) (very advanced! EIGER only) - /* trim/cal directories */ - "settingsdir"; //sets/gets the directory where the settings files are - "trimdir"; // as settingsdir - "caldir"; //sets/gets the directory where the calibration files are - "trimen"; // sets/gets the energies at which the detector is trimmed (no implemented) - /* file name */ - "outdir"; // sets/gets the output directory - "fname"; // sets/gets the file name - "index"; // sets/gets the start file index (Automatically incremented during the acquisition) - "online"; // checks if the detector is online - "checkonline"; // checks if the detector is online by testing the connection - "enablefwrite"; // enable/disable file writing - /* Acquisition actions */ - "positions"; // sets/gets number of positions and their values - "startscript"; // sets/gets start script - "startscriptpar"; // sets/gets start script parameter - "stopscript"; // sets/gets stop script - "stopscriptpar"; // sets/gets stop script parameter - "scriptbefore"; // sets/gets scrip before - "scriptbeforepar"; //sets/gets scrip before parameter - "scriptafter"; // sets/gets script after - "scriptafterpar"; //sets/gets script after parameter - "headerafter"; // sets/gets header after script - "headerafterpar"; // sets/gets header after parameter - "headerbefore"; // sets/gets header before script - "headerbeforepar"; // sets/gets header before parameter - "scan0script"; // sets/gets scan0 script (or none,threshold, energy,position) - "scan0par"; // sets/gets scan0 parameter - "scan0prec"; // sets/gets scan0 precision (in file name) - "scan0steps"; // sets/gets scan0 number of steps and their values - "scan0range"; // sets/gets scan0 range (min, max, step) - "scan1script"; // sets/gets scan1 script (or none,threshold, energy,position) - "scan1par"; // sets/gets scan1 parameter - "scan1prec"; // sets/gets scan1 precision (in file name) - "scan1steps"; // sets/gets scan1 number of steps and their values - "scan1range"; // sets/gets scan1 range (min, max, step) - "encallog"; // sets/gets encallog mode (0,1) for energy calibration - "angcallog"; // sets/gets angcallog mode (0,1) for energy calibration - /* communication configuration */ - "clientip"; // sets/gest client ip for Gotthard - "clientmac"; // sets/gest client mac for Gotthard - "servermac"; // sets/gest server mac for Gotthard - "configuremac"; // configure the detector mac for Gotthard - "port"; // sets control communication port - "stopport"; // sets status communication port - "dataport"; // sets data port - "lock"; // lock detector (no other PC can connect) - "lastclient"; // gest last conencted client - /* detector and data size */ - "nmod"; // sets/gets number of modules - "maxmod"; // sets/gets maximum number of modules - "dr"; // sets/gets dynamic range - /* flags */ - "flags"; // sets/gets readout flags (none, storeinram, tot) - "extsig"; // sets/gets configuration of the lemo conenctors - "timing"; // sets/gets detector timing mode (auto, gating, trigger) - /* versions/ serial numbers getId */ - "moduleversion"; // gets module version - "detectornumber"; // gets detector mac address - "modulenumber"; // gets module serial number - "detectorversion"; // gets detector firmware version - "softwareversion"; // gets detector software version - "thisversion"; // get client software version - /* digital test and debugging */ - "digitest"; // digital test of a module - "bustest"; // test of CPU-FPGA communication - "digibittest"; // for Gotthard - "acqtest"; // for Gotthard - "reg"; // read/write register - do not use! - /* settings, threshold */ - "settings"; // set/gets settings (standard, fast, highgain) - "threshold"; // set threshold in eV - "trimbits"; // set/get trimbit value (for all channels!) - "trim"; // trim detector (noise, improve etc.) - /* r/w timers */ - "exptime"; // sets/gets exposure time in s - "period"; // sets/gets frame period in s - "delay"; // sets/gets delay after trigger in s - "gates"; // sets/gets number of gates per frame in gated mode - "frames"; // sets/gets number of frames - "triggers"; // sets/gets number of triggers (use in trigger mode) - "probes"; // sets/gets number of probes (advanced!) - "measurements"; // sets/gets number of non-real time measurements - /* read only timers */ - "exptimel"; // gets exposure time left - "periodl"; // gets period left - "delayl"; // gets delay left - "gatesl"; // gets number of gates left - "framesl"; // gets number of frames left - "triggersl"; // gets number of triggers left - "now"; // gets time stamp from the dteector - "timestamp"; // gets time stamp for the frames (fifo-style) - "framescaught";// gets the entire frames caught by receiver - "resetframescaught x"; resets the value of framescaught to x - /* speed */ - "clkdivider"; // sets/gets readout clock divider (advanced!) - "setlength";// sets/gets readout set/clear length (advanced!) - "waitstates"; // sets/gets CPU waitstates (advanced!) - "totdivider"; // sets/gets tot ckdivider (advanced!) - "totdutycycle"; // sets/gets tot duty cycle (advanced!) - /* settings dump/retrieve */ - "config"; // loads/save configuration file - "parameters"; // loads/save parameters file - "setup"; // loads/save complete detector setup - /* pots */ - "vthreshold"; // sets/get vthreshold value (advanced! Mythen and Eiger) - "vcalibration"; // sets/get vcalibration value (advanced! Mythen) - "vtrimbit"; // sets/get vtrimbit value (advanced! Mythen) - "vpreamp"; // sets/get vpreamp value (advanced! Mythen) - "vshaper1"; // sets/get vshaper1 value (advanced! Mythen) - "vshaper2"; // sets/get vshaper2 value (advanced! Mythen) - "highvoltage"; // sets/get highvoltage value (advanced! Chiptest board and Eiger) - "vapower"; // sets/get vapower value (advanced! Chiptest board) - "vddpower"; // sets/get vddpower value (advanced! Chiptest board) - "vshpower"; // sets/get vshpower value (advanced! Chiptest board) - "viopower"; // sets/get viopower value (advanced! Chiptest board) - "vref_ds"; // sets/get vref_ds value (advanced! Gotthard) - "vcascn_pb"; // sets/get vcascn_pb value (advanced! Gotthard) - "vcascp_pb"; // sets/get vcascp_pb value (advanced! Gotthard) - "vout_cm"; // sets/get vout_cm value (advanced! Gotthard) - "vcasc_out"; // sets/get vcasc_out value (advanced! Gotthard) - "vin_cm"; // sets/get vin_cm value (advanced! Gotthard) - "vsvp"; // sets/get vsvp value (advanced! Eiger) - "vsvn"; // sets/get vsvn value (advanced! Eiger) - "vtr"; // sets/get vtr value (advanced! Eiger) - "vrf"; // sets/get vrf value (advanced! Eiger) - "vrs"; // sets/get vrs value (advanced! Eiger) - "vtgstv"; // sets/get vtgstv value (advanced! Eiger) - "vcmp_ll"; // sets/get vcmp_ll value (advanced! Eiger) - "vcmp_lr"; // sets/get vcmp_lr value (advanced! Eiger) - "vcall"; // sets/get vcall value (advanced! Eiger) - "vcmp_rl"; // sets/get vcmp_rl value (advanced! Eiger) - "vcmp_rr"; // sets/get vcmp_rr value (advanced! Eiger) - "rxb_rb"; // sets/get rxb_rb value (advanced! Eiger) - "rxb_lb"; // sets/get rxb_rb value (advanced! Eiger) - "vcp"; // sets/get vcp value (advanced! Eiger) - "vcn"; // sets/get vcn value (advanced! Eiger) - "vis"; // sets/get vis value (advanced! Eiger) - "iodelay"; // sets/get iodelay value (advanced! Eiger) - -"vref_comp"; // sets/get vref_comp value (advanced! Gotthard) - "ib_test_c"; // sets/get ib_test_c value (advanced! Gotthard) - "temp_adc"; // get adc temperature (advanced! Gotthard) - "temp_fpga"; //get fpga temperature (advanced! Gotthard) - "pulsechip n"; //advanc ed! EIGER: pulses the chip $n$ times with the enable. If n$=-1$, the chip will be set into normal mode. - "pulse n x y"; // Pulses pixel at coordinates (x,y) $n$-times. - "pulsenmove n x y"; //Pulses pixel $n$-times and moves relatively by x value (x axis) and y value (y axis) diff --git a/manual/manual-client/libs.txt b/manual/manual-client/libs.txt deleted file mode 100755 index 589498a64..000000000 --- a/manual/manual-client/libs.txt +++ /dev/null @@ -1,59 +0,0 @@ -The slsDetectorGUI is based on Qt4 with Qwt libraries. - --Qt4.6 installation: - -Download the opend source version: -ftp://ftp.qt.nokia.com/qt/source/qt-everywhere-opensource-src-4.6.2.tar.gz - -To install: -gunzip qt-everywhere-opensource-src-4.6.2.tar.gz -tar xvf qt-everywhere-opensource-src-4.6.2.tar -./configure -make -make install - -By default Qt4 will be installed int /usr/local/Trolltech/Qt-4.6.2/ -Edit your .bashrc: -export QTDIR=/usr/local/Trolltech/Qt-4.6.2 -export PATH=$QTDIR/bin:$PATH -export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH - -If your system also have Qt3 installed, make sure that QTDIR, PATH and LD_LIBRARY_PATH point to Qt4 before installing Qwt (and of course compiling and running the GUI). - - - -- Qwt5.2 installation - -Download the sources: -svn co https://qwt.svn.sourceforge.net/svnroot/qwt/branches/qwt-5.2 - -To install: -cd qwt-5.2 -qmake -make -make install - -By default Qwt will be installed in /usr/local/qwt-5.2.3-svn/ -Edit your .bashrc: -export QWTDIR=/usr/local/qwt-5.2.3-svn/ -export LD_LIBRARY_PATH=$QWTDIR/lib:$LD_LIBRARY_PATH - - -- The calibration wizards are based on the cern root software - -Download the sources -svn co https://root.cern.ch/svn/root/trunk root - -To install: -cd root -./configure --enable-qt -make -make install - -edit your .bashrc: -export ROOTSYS=/usr/local/root -export PATH=$ROOTSYS/bin:$PATH -export LD_LIBRARY_PATH=$ROOTSYS/lib:$LD_LIBRARY_PATH - -You can also download the binaries, assuming that your linuc and gcc versions match: -http://root.cern.ch/drupal/content/production-version-534 \ No newline at end of file diff --git a/manual/manual-client/slsDetectorClient.doxy b/manual/manual-client/slsDetectorClient.doxy deleted file mode 100755 index d16f0c967..000000000 --- a/manual/manual-client/slsDetectorClient.doxy +++ /dev/null @@ -1,86 +0,0 @@ -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = YES - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = NO - - - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = YES - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = YES - -# If this flag is set to YES, the members of anonymous namespaces will be -# extracted and appear in the documentation as a namespace called -# 'anonymous_namespace{file}', where file will be replaced with the base -# name of the file that contains the anonymous namespace. By default -# anonymous namespace are hidden. - -EXTRACT_ANON_NSPACES = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -INTERNAL_DOCS = NO - -SHOW_INCLUDE_FILES = NO - -SHOW_FILES = NO - -SHOW_NAMESPACES = NO - -COMPACT_LATEX = YES - -PAPER_TYPE = a4 - -PDF_HYPERLINKS = YES - -USE_PDFLATEX = YES - -LATEX_HIDE_INDICES = YES - - -PREDEFINED = __cplusplus - -INPUT = slsDetectorCommand.cpp - -OUTPUT_DIRECTORY = slsDetectorClientDocs diff --git a/manual/manual-client/slsDetectorClientHowTo.tex b/manual/manual-client/slsDetectorClientHowTo.tex deleted file mode 100755 index d21f2f2dd..000000000 --- a/manual/manual-client/slsDetectorClientHowTo.tex +++ /dev/null @@ -1,760 +0,0 @@ -\documentclass{article} -\usepackage{amssymb} -\usepackage[dvips]{graphicx} -\usepackage{verbatim} -\usepackage{xspace} -\newcommand{\E}{EIGER\xspace} -\begin{document} - -\title{SLS Detector text clients manual} -\date{\today} -\maketitle - - - -\section{Introduction} - -This program is intended to control the SLS detectors via command line interface.\\ -This is the only way to access all possible functionality of the detectors, however it is often recommendable to avoid changing the most advanced settings, rather leaving the task to configuration files, as when using the GUI or the API provided. - -The command line interface consists in four main functions: -\begin{description} -\item[sls\_detector\_acquire] to acquire data from the detector -\item[sls\_detector\_put] to set detector parameters -\item[sls\_detector\_get] to retrieve detector parameters -\item[sls\_detector\_help] to get help concerning the text commands -\end{description} -Additionally the program \textbf{slsReceiver} should be started on the machine expected to receive the data from the detector. - - -If you need control a single detector, the use of the command line interface does not need any additional arguments. - -For commands addressing a single controller of your detector, the command \verb=cmd= should be called with the index \verb=i= of the controller:\\ -\verb=sls_detector_clnt i:cmd=\\ -where \verb=sls_detector_clnt= is the text client (put, get, acquire, help). - -In case more than one detector is configured on the control PC, the command \verb=cmd= should be called with their respective index \verb=j=: -\verb=sls_detector_clnt j-cmd=\\ -where \verb=sls_detector_clnt= is the text client (put, get, acquire, help). - -To address a specific controller \verb=i= of detector \verb=j= use:\\ -\verb=sls_detector_clnt j-i:cmd= - -For additional questions concerning the indexing of the detector, please refer to the \textit{SLS Detectors FAQ} documentation. - - -\section{Acquisition} - - - - - -By calling:\\ -\verb=sls\_detector\_acquire [j-]=\\ -the detector \verb=j= is started and the data are acquired, postprocessed and written to file according to the configuration and setup of the measurements.\\ -A progress index of the acquisition in percentage is shown on the command line. - -For additional questions concerning the acquisition flow, please refer to the \textit{SLS Detectors FAQ} documentation. - -\section{Detector setup} - -\verb=sls\_detector\_put [j-][i:]var arg=\\ - -is used to configure the detector parameters \verb=var= with the value \verb=arg=.\\ -It returns the actual value of the variable, as when calling \verb=sls\_detector\_get= with the same command. - -\subsection{Standard commands} - - -\begin{description} -\item[config fname] -Load the configuration file fname. \\ -Examples of configuration files are available in the directory \verb=examples=. This should be done every time the configuration of the detectors(s) changes or the control PC is rebooted. Must be executed on all the control PCs, before executing other commands. -\item[parameters fname] -Load the parameter file fname. \\ -The syntax of the commands in the parameter file is exactly the same as for the command line interface. Can be used to load a standard mode of acquisition and/or to hide advanced parameters from the final user. Examples of parameter files are available in the directory \verb=examples=. -\item[settings sett] -Configures the settings of the detector. Refer to detailed detector documentation for more details: \\ -for MYTHEN sett can be: standard, fast, highgain;\\ -for GOTTHARD sett can be: veryhighgain, highgain, mediumgain, lowgain, dynamicgain;\\ -for \E sett can be: standard, highgain, lowgain. -\item[threshold ev] -For photon counting detectors, sets the detector threshold in eV. The detector should be properly calibrated, otherwise standard calibration coefficients are used, which can give an uncertainty up to a few keVs. -\item[timing sync] -Sets the timing mode of the detector. Can be auto, gating (works only if at least one of the signals is configured as gate\_in), trigger (works only if at least one of the signals is configured as trigger\_in), ro\_trigger (works only if at least one of the signals is configured as ro\_trigger\_in), triggered\_gating (works only if one of the signals is configured as gate\_in and one as trigger\_in). \\ -Refer to the detailed documentation to understand how the different timing modes work. -\item[outdir path] -Defines the path where the output files will be saved to. -\item[fname prefix] -Defines the prefix of the file name for the data output. \\ -The final file name will be: \\ -\verb=prefix[_d=\textit{d}\verb=][_S=\textit{v0}\verb=][_s=\textit{v1}\verb=][_p=\textit{p}\verb=][_f=\textit{f}\verb=]_=\textit{i}\verb=.=\textit{ext}\\ -where: \\ -\textit{d} is the controller index, in case of data receiver and more than one controller;\\ -\textit{v0} is the scan0 variable with the desired precision, if scan0 is enabled;\\ -\textit{v1} is the scan1 variable with the desired precision, if scan1 is enabled;\\ -\textit{p} is the position index, if different positions are configured;\\ -\textit{f} is the frame index of the first frame stored in the file, if many frames and triggers are configured;\\ -\textit{i} is the file index;\\ -\textit{ext} is the file extension e.g. \textit{.raw} for MYTHEN and \E raw data, \textit{.dat} for MYTHEN processed data. -\item[index i] Sets the starting index of the file i at the beginning of the acquisition (automatically incremented for each measurement). -\item[enablefwrite b] Enables (1) or disables (0) file writing. -\item[exptime ts] -Sets the exposure time of a single acquisition to ts (in s). It is overridden in case the detector is in gating mode. \\ -Refere to detailed documentation to understand how the different timing modes work. -\item[subexptime ts] -Sets the subexposure time of a single subacquisition to ts (in s) in \E autosumming mode (=\textit{dr 32}). Refer to detailed documentation to understand how the different timing modes work. -\item[period ts] -Sets the frames period (in s). It is overridden in case the detector is in gating mode. \\ -Refer to detailed documentation to understand how the different timing modes work. -\item[delay ts] -Sets the delay after trigger in triggered mode (in s).\\ -Refer to the detailed documentation to understand how the different timing modes work. -\item[gates n] -Sets the number of gates per frame in gated (stroboscopic) mode.\\ -Refer to the detailed documentation to understand how the different timing modes work. -\item[frames n] -Sets the number of frames acquired sequentially per cycle (e.g. after each trigger), with the exposure time defined by exptime and the period defined by period (unless in gated mode). The frame index in the output file name will automatically be incremented.\\ -Note that the total number of images will be frames times triggers. Refer to detailed documentation to understand how the different timing modes work. -\item[triggers n] -Sets the number of triggers (e.g. number of triggers). The frame index in the output file name will automatically be incremented. \\ -Note that the total number of images will be by frames times triggers. Refer to the detailed documentation to understand how the different timing modes work. -\item[probes] Sets the number of probes to accumulate for stroboscopic measurements. \\ -Refer to detailed documentation to understand how the different timing modes work. -\item[measurements] Sets the number of repetitions of the acquisitions (non real time!). The file index in the file name will be automatically incremented.\\ -Refer to detailed documentation to understand how the different timing modes work. -\item[dr n] Sets the dynamic range n (in bits) of the data for a photon counting detector. For \E it can be set to 4, 8, 16 (but the real counter depth will still be limited to 12 bits) or 32 when one wants to activate the internal subframe summing mode. - -\item[flags s] Sets some particular flags for your detector. For MYTHEN s can be \textit{none}, \textit{storeinram} (for buffered readout) or \textit{tot} (for time over threshold). For \E, s can be {\it{continous}} (for continous readout- still buffer on memories happens), \textit{storeinram} (for buffered readout. Do not use as has no graet advantages), \textit{parallel} for parallel exposure to the next frame and readout of the previous frame, \textit{nonparallel} to decouple sequentially readout and exposure, \textit{safe} (rowclock interleaved). -%\item[timestamp] -\item[help cmd] Returns the help for command cmd. -\item[lock] Locks (1) or unlocks (0) the detector to this particular control PC. An be unlocked again only from the same PC or by rebooting the detector. -%\item[lastclient] -\item[nmod n] Sets the number of modules for the detector to n for partial readout. Will be replaced by ROI. -%\item[maxmod] -\end{description} - -\subsection{Postprocessing commands} -\begin{description} -\item[flatfield fname] Sets the flat field file name. File ffdir/fname will be used to calculate the flat field coefficients. \textit{none} to unset flat field corrections. -\item[ratecorr ns] Sets the deadtime to be used for rate corrections in ns. 0 to unset, -1 to use default dead time for the actual settings.In the case of \E, as online data rate correctiosn are applied, then a correction table has to be calculated every time the rate correction $\tau$ is changed, activated, or the subexposure time is changed. - -\end{description} - -\subsubsection{Angular conversion} - -\begin{description} -\item[fineoff deg] Sets the fine offset for the experiment. -\item[samplex mm] Sets the sample displacement from the center of the diffractometer in the X-ray direction, to improve angular conversion (unused). -\item[sampley mm] Sets the sample displacement from the center of the diffractometer in the ortogonal direction, to improve angular conversion (unused) -\end{description} - - - - - - -\subsection{Acquisition} -See SLS Detectors Documentation for a detailed description of the acquisition flow. -\begin{description} -\item[positions n p1 p2...pn] Sets the number of positions n and their value. - \item[startscript s] Sets the script to be executed at the beginning of each measurement. \textit{none} unsets. - \item[startscriptpar p] Sets the parameter to be passed to the start script - \item[stopscript s] Sets the script to be executed at the end of each measurement. \textit{none} unsets. - \item[stopscriptpar p] Sets the parameter to be passed to the stop script. - \item[scriptbefore s] Sets the script to be executed before each acquisition. \textit{none} unsets. - \item[scriptbeforepar p] Sets the parameter to be passed to the script before. - \item[scriptafter s] Sets the script to be executed after each acquisition. \textit{none} unsets. - \item[scriptafterpar p] Sets the parameter to be passed to the script after. - \item[headerbefore s] Sets the script to be executed to acquire the header of the acquisition. \textit{none} unsets. - \item[headerbeforepar p] Sets the parameter to be passed to the header before. - \item[headerafter s] Sets the script to be executed to append to the header of the acquisition. \textit{none} unsets. - \item[headerafterpar p] Sets the parameter to be passed to the header after. - \item[scan0scripts s] Sets the script to execute at scan 0 level. \textit{none} unsets, \textit{threshold, energy, trimbits, position} perform the corresponding scans without need of a custom script. - \item[scan0par p] Sets a parameter to be passed to the scan 0 level script. - \item[scan0prec i] Sets the number of decimal digits for the scan0 level parameter in the file name (default is 0). - \item[scan0steps n s1 s2..sn] Sets the number of scan 0 level steps n and their value. - \item[scan0range min max step] Sets the minimum, the maximum and the step for the scan 0 level steps (easier to use than scan0steps if equally spaced steps in a range) - \item[scan1script s] Sets the script to execute at scan 1 level. \textit{none} unsets, \textit{threshold, energy, trimbits, position} perform the corresponding scans without need of a custom script. - \item[scan1par p] Sets a parameter to be passed to the scan 1 level script. - \item[scan1prec i] Sets the number of decimal digits for the scan1 level parameter in the file name (default is 0). - \item[scan1steps n s1 s2...sn] Sets the number of scan 0 level steps n and their value. - \item[scan1range min max step] Sets the minimum, the maximum and the step for the scan 0 level steps (easier to use than scan0steps if equally spaced steps in a range) -\end{description} - -\begin{comment} -\subsection{Debug} - -\begin{description} -\item[moduleversion] -\item[detectornumber] -\item[modulenumber] -\item[detectorversion] -\item[softwareversion] -\item[thisversion] -\item[detectorsvnversion] -\item[digitest] -\item[bustest] -\item[acqtest] -\end{description} -\end{comment} -\subsection{Advanced commands} - - -\subsubsection{Calibration} -This operations should be performed only rarely to configure the detector - -\begin{description} - \item[trim:mode fname] Trims the detector according to mode (can be noise, beam, improve, fix) and saves the resulting trimbits to file fname. Take care to set a proper exptime and vthreshold before trimming. - \item[encallog b] Sets (1) or unsets (0) the logging for energy calibration. - \item[angcallog b] Sets (1) or unsets (0) the logging for angular calibration. -\end{description} - - - - -\subsubsection{Acquisition} - -It is normally recommended to use \verb=sls\_detector\_acquire [j-]=, which takes care of everything -\begin{description} -%\item[acquire] It is normally reccomended to use \verb=sls\_detector\_acquire [j-]=, which takes care of everything -%\item[data] -%\item[frame] -\item[status s] Starts (start) or stops (stop) the detector acquisition. -\item[online b] Sets the detector in online (1) or offline (0) mode. -%\item[checkonline] -%\item[readctr i fname] GOTTHARD related - reads counter in detector to file fname, restarts acquisition if i=1 -\item[resetctr i] GOTTHARD- ADVANCED- resets counter in detector, restarts acquisition if i=1 -\item[resmat i] \E - ADVANCED - resets counter in detector before the following acquisition. Default settings is \textit{resmat 1}. \textit{resmat 0} does not reset the counter bit before the acquisition. Note that in \E the counter is always reset after the acquisition. -%\item[exptimel] -%\item[periodl] -%\item[delayl] -%\item[gatesl] -%\item[framesl] -%\item[triggersl] -%\item[frameindex] -%\item[now] -\end{description} - - - -\subsubsection{Configuration} -Advanced commands to configure the detector system. Should be left to the configuration file -\begin{description} -\item[type s] Sets the types of detector controllers in the system. Can be Mythen, Gotthard, \E and multiple controllers should be catenated with a + (e.g. Mythen+Mythen for 2 Mythen controllers). -\item[d:hostname s] Sets the hostname or IP address for the controller d, where d is the controller index within the detector structure. -\item[d:extsig:i s] Configures the usage of the external IO signals to synchronize the detectors. s can be: off, gate\_in\_active\_high, gate\_in\_active\_low, trigger\_in\_rising\_edge, - trigger\_in\_falling\_edge, - ro\_trigger\_in\_rising\_edge, - ro\_trigger\_in\_falling\_edge, - gate\_out\_active\_high, - gate\_out\_active\_low, - trigger\_out\_rising\_edge, - trigger\_out\_falling\_edge, - ro\_trigger\_out\_rising\_edge, - ro\_trigger\_out\_falling\_edge, sync. \\Usually left to the configuration file. Gating, triggering etc. are enabled only by calling the timing command. \\ -Please refer to SLS Detectors FAQ documentation for more detailed information about the usage. - -\item[master i] Sets the master of a multi-controller detector to the controller with index i. -1 removes master. Setting a master is useful only if the controllers are synchronized via hardware using the external IO signals. Usually left to the configuration file. Please refer to SLS Detectors FAQ documentation for more detailed information about the usage. -\item[sync s] Sets the synchronization mode of the various controller within a detector structure. s acn be none, gating, trigger, complementary. Check that the detectors are correctly connected to avoid freezing of the acquisition. Usually left to the configuration file. Please refer to SLS Detectors FAQ documentation for more detailed information about the usage. -\item[trimdir s] Obsolete. Same ad settingsdir. -\item[settingsdir s] Sets the path of the drectory where the trim/settings files are stored. Usually left to the configuration file. -\item[caldir s] Sets the path of the drectory where the calibration files are stored. Can be the same as settingsdir. Usually left to the configuration file. -\item[trimen n e1 e2 ...en] Unused. Sets the list of energies for which trimfiles exist. -\item[port p] Sets the port used by the sockets to control the detector. Do not change! Usually left to the configuration file. -\item[stopport p] Sets the port used by the sockets to stop/get the status of the detector. Do not change! Usually left to the configuration file. -\item[add s] Avoid using it. Adds the controller s to the detector structure. -\item[remove i] Avoid using it. Removes the controller in position i from the detector structure. -\item[id:i l] Avoid using it. configures the id of the detector structure. i is the detector position in a multi detector system and l is the id of the detector to be added. -\item[free i] Avoid using it. Frees the shared memory. -\item[exitserver] Avoid using it. Turns off the communication server on the detector. -\end{description} - - -\subsubsection{Receiver - GOTTHARD/\E} -\begin{description} -\begin{comment} - - \item[receiverip ip] sets receiver ip to ip. Should be left to the configuration file. -%\item[receivermac] sets receiver mac to mac. Should be left to the configuration file. -\item[servermac mac] sets server mac to mac. Should be left to the configuration file. -%\item[configuremac i] configures the MAC of the detector. i is adc number. -1 for all adcs. Should be left to the configuration file. -\item[dataport i] sets the communication port to the receiver. Should be left to the configuration file. - -\end{comment} -\item[detectormac mac] sets the mac of the detector udp interface to mac (if configurable). Should be left to the configuration file. -\item[rx\_tcpport i] sets the communication port between client and receiver. Should be left to the configuration file. -\item[rx\_udpport i] sets the communication port between detector and receiver. Should be left to the configuration file. -\item[rx\_hostname s] sets the hostname (or IP address) of the receiver for the TCP/IP interface with the client. -\item[rx\_udpip ip] sets the IP address of the receiver for the UDP interface with the detector. -\item[rx\_fifodepth v] sets receiver fifo depth to value v. Default for \E is 100 frames betweeen listening and writing. -\item[r\_online b] sets the receiver in online (1) or offline (0) mode. -%\item[r\_checkonline] -%\item[framescaught] -\item[r\_lock b] Locks (1) or unlocks (0) the receiver to this PC. -%\item[r\_lastclient] -\item[receiver s] starts/stops the receiver to listen to detector packets. - can be start or stop -\end{description} - -\subsubsection{Postprocessing} -Some advanced commands to configure data postprocessing. -\begin{description} -\item[ffdir dir] Sets the directory where the flat field files are stored. Normally left to the configuration file. -\item[darkimage fname] GOTTHARD- ADVANCED- Sets fname as dark image file for the detector. -\item[gainimage fname] GOTTHARD- ADVANCED- Sets fname as gain image file for the detector. -\item[badchannels fname] Sets the bad channel file to fname. Bad channels will be omitted in the .dat file. \textit{none} to unset. Normally left to the configuration file. -\item[threaded b] Avoid changing it. Sets if the data are written to disk in parallel with the acquisition (1) or after the acquisition (0). Normally left to the configuration file. -\end{description} - - -\textbf{Angular conversion} - -\begin{description} -\item[globaloff deg] Sets the offset of the beamline i.e. angular position of channel 0 when angular encoder at 0. Normally left to the configuration file. -\item[angconv fname] Sets the file with the coefficients for angular conversion. \textit{none} disables angular conversion. Normally left to the configuration file. -\item[binsize deg] Sets the size of the angular bins for angular coversion. Normally left to the configuration file. -\item[angdir i] Sets the angular direction of the detector (1 means channel number in the same direction as the angular encoder, -1 different direction). Normally left to the configuration file. -\item[d:moveflag i] Related to a single controller d. 1 if the detector modules move with the angular encoder, 0 if they are static (useful for multidetector systems). Normally left to the configuration file. -\end{description} - -\subsubsection{Testing - \E specific} -Some VERY ADVANCED testing functions implemented for \E: -\begin{description} -\item [pulsechip n] sets the chip into test mode with \textit{resmat} = 0 and \textit{externalenable} =1. Pulses chip by togglying the enable n number of times. The acquire is then done with no pixel matrix reset before the acquisition. If n$=-1$, the chip will be set into normal mode. This is necessary to restore normal chip operations after the test. -\item[pulse n x y] Pulses pixel at coordinates (x,y) n number of times. -\item[pulsenmove n x y] Pulses pixel n number of times and moves relatively by x value (x axis) and y value (y axis) -\end{description} - -\subsection{Detector settings} -Advanced settings changing the analog or digital performance of the acquisition. Use them only if you are sure of what you are doing! - -\begin{description} -\item[vthreshold n] Sets the DAC value of the detector threshold to n. -\item[vcalibration n] Sets the DAC value of the calibration pulse amplitude to n. -\item[vtrimbit n] Sets the DAC value defining the trimbits LSB size to n. -\item[vpreamp n] Sets the DAC value of the preamp feedback to n. -\item[vshaper1 n] Sets the DAC value of the shaper1 feedback to n. -\item[vshaper2 n] Sets the DAC value of the shaper2 feedback to n. -\item[highvoltage n] Sets the DAC value of the high voltage to n (in V). -\item[vapower n] CHIPTEST BOARD ONLY - Sets the DAC value of the analog voltage to n. -\item[vddpower n] CHIPTEST BOARD ONLY - Sets the DAC value of the analog voltage to n. -\item[vshpower n] CHIPTEST BOARD ONLY - Sets the comparator power supply in dac units (0-1024). -\item[viopower n] CHIPTEST BOARD ONLY - Sets the FPGA I/O power supply in dac units (0-1024). -\item[vref\_ds n] Sets vrefds -\item[vcascn\_pb n] Sets vcascn\_pb -\item[vcascp\_pb n] Sets vcascp\_pb -\item[vout\_cm n] Sets vout\_cm -\item[vcasc\_out n] Sets vcasc\_out -\item[vin\_cm n] Sets vin\_cm -\item[vref\_comp n] Sets vref\_comp -\item[ib\_test\_c n] Sets ib\_test\_c -\item[vsvp n] Sets vsvp DAC to n -\item [vsvn n] Sets vsvn DAC to n -\item [vtr n] Sets vtr DAC to n -\item [vrf n] Sets vrf DAC to n -\item [vrs n] Sets vrs DAC to n -\item [vtgstv n] Sets vtgstv DAC to n -\item[vcmp\_ll n] Sets vcmp\_ll DAC to n -\item [vcmp\_lr n] Sets vcmp\_lr DAC to n -\item [vcmp\_rl n] Sets vcmp\_rl DAC to n -\item [vcmp\_rr n] Sets vcmp\_rr DAC to n -\item [vcall n] Sets vcall DAC to n -\item [rxb\_rb n] Sets rxb\_rb DAC to n -\item [rxb\_lb n] Sets rxb\_rb DAC to n -\item [vcp n] Sets vcp DAC to n -\item [vcn n] Sets vcn DAC to n -\item [vis n] Sets vis DAC to n -\item [iodelay n] Sets iodelay to n -%\item[temp\_adc n] Sets -%\item[temp\_fpga n] -\item[reg a d] Write to register of address a the data d -\item[clkdivider n] Sets the clock divider for the readout. Can be increased for longer cables. For \E options are 0 (full speed), 1 (half speed), 2 (quarter speed), and 3 (slow). -\item[setlength n] Changes the length of the set/reset signals in the acquisition. Never reduce it! -\item[waitstates n] Sets the wait states for CPU/FPGA communication. Do not change it! -\item[totdivider n] Sets the tot clock divider. -\item[totdutycycle n] Sets the tot duty cycle. -\item[setup s] Loads the setup files to the detector (config, parameters, trimbits etc.). -\item[trimbits fn] Loads the trimbit files fn.snxxx to the detector -\end{description} - - -\subsection{Debug} -\begin{description} -\item[digibittest i] only for GOTTHARD. If i=1, the acquisition will return a unique channel identifier, instead of data, if i=0 normal acquisition. -\end{description} - - -\section{Retrieving detector parameters} - - -\verb=sls\_detector\_get [j-][i:]var [arg]=\\ - -is used to retrieve the detector parameters \verb=var=.\\ -For some commands, an additional argument \verb=arg= is needed. - - - -\subsection{Standard commands} -All the commends return two strings, where string1 is the command, string2 is teh actual returned string. - -\begin{description} -\item[config fname] -Dumps the current configuration of the detector to the file fname. -\item[parameters fname] - Dumps the current acquisition parameters of the detector to the file fname. -\item[settings] -Returns the current settings of the detector. Returns a string - -\item[threshold] -For photon counting detectors, returns the detector threshold in eV, -1 if undefined. Returns ``threshold value\_in\_eV''. If it fails, the returned threshold is the old set value. - -\item[timing] -Returns the acquisition timing mode of the detector. -Refer to the detailed documentation to understand how the different timing modes work. -\item[outdir] -Returns the path where the output files are saved to. -\item[fname] -Returns the prefix of the file name for the data output. -\item[enablefwrite] Returns if data are written to file (1) or not (0). -\item[exptime] -Returns the exposure time of a single acquisition in seconds. Example: "exptime 1.000000000'' -Refer to detailed documentation to understand how the different timing modes work. -\item[period] -Returns the frames period (in s). Example: ``period 1.000000000'' -Refer to detailed documentation to understand how the different timing modes work. -\item[delay] -Returns the delay after trigger in triggered mode (in s). -Refer to detailed documentation to understand how the different timing modes work. -\item[gates] -Returns the number of gates per frame in gated (stroboscopic) mode. -Refer to detailed documentation to understand how the different timing modes work. -\item[frames] -Returns the number of frames acquired sequentially per cycle (e.g. after each trigger), with the exposure time defined by exptime and the period defined by period (unless in gated mode). Returned as a string to be interpreted as an integer ``frames integer'' -Note that the total number of images is frames times triggers. -Refer to detailed documentation to understand how the different timing modes work. -\item[triggers n] -Returns the number of triggers (e.g. number of triggers). Returned as atring to be interpreted as an integer ``triggers integer'' -Note that the total number of images is frames times triggers. -Refer to detailed documentation to understand how the different timing modes work. -\item[probes] Returns the number of probes to accumulate for stroboscopic measurements. -Refer to detailed documentation to understand how the different timing modes work. -\item[measurements] Returns the number of repetitions of the acquisitions (non real time!). -Refer to detailed documentation to understand how the different timing modes work. -\item[dr] Returns the dynamic range n (in bits) of the data for a photon counting detector. Returns a string that should be interpreted as an integer. - -\item[flags s] Returns the flags set for your detector. -\item[help cmd] Returns the help for command cmd. -\item[lock] Returns if the detector is locked to a single PC. -\item[lastclient] Returns the last client which has connected to the detector. -\item[nmod n] Returns the number of modules which are read out. Will be replaced by ROI. -\item[maxmod] Returns the maximum number of modules (size) of the detector. Will be replaced by size. -\end{description} - - - - - - - - -\subsection{Postprocessing commands} -\begin{description} -\item[flatfield] Returns the flat field file name. -\item[ratecorr] Returns the dead time used for rate corrections. -\end{description} - - -\subsubsection{Angular conversion} - -\begin{description} -\item[fineoff] Returns the fine offset used to convert channel number to angles -\item[samplex] Returns the sample displacement from the center of the diffractometerin the X-ray direction, to improve angular conversion (unused). -\item[sampley] Returns the sample displacement from the center of the diffractometer in the ortogonal direction, to improve angular conversion (unused) -\end{description} - -\subsection{Acquisition} -See SLS Detectors Documentation for a detailed description of the acquisition flow. -\begin{description} -\item[positions] Returns the number of positions n and their value. - \item[startscript] Returns the script to be executed at the beginning of each measurement. - \item[startscriptpar] Returns the parameter to be passed to the start script - \item[stopscript] Returns the script to be executed at the end of each measurement. - \item[stopscriptpar] Returns the parameter to be passed to the stop script. - \item[scriptbefore] Returns the script to be executed before each acquisition. - \item[scriptbeforepar] Returns the parameter to be passed to the script before. - \item[scriptafter] Returns the script to be executed after each acquisition. - \item[scriptafterpar] Returns the parameter to be passed to the script after. - \item[headerbefore] Returns the script to be executed to acquire the header of the acquisition. - \item[headerbeforepar] Returns the parameter to be passed to the header before. - \item[headerafter] Returns the script to be executed to append to the header of the acquisition. - \item[headerafterpar] Returns the parameter to be passed to the header after. - \item[scan0scripts] Returns the script to execute at scan 0 level. - \item[scan0par] Returns a parameter to be passed to the scan 0 level script. - \item[scan0prec] Returns the number of decimal digits for the scan0 level parameter in the file name (default is 0). - \item[scan0steps] Returns the number of scan 0 level steps n and their value. - \item[scan0range] Same as scan0steps. - \item[scan1script] Returns the script to execute at scan 1 level. - \item[scan1par] Returns a parameter to be passed to the scan 1 level script. - \item[scan1prec] Returns the number of decimal digits for the scan1 level parameter in the file name (default is 0). - \item[scan1steps] Returns the number of scan 0 level steps n and their value. - \item[scan1range] Same as scan1steps. -\end{description} - -\subsection{Debug} -Commands to be used to retrieve information about the detector version or perform tests. -\subsubsection{Version} -\begin{description} -\item[moduleversion[:i]] Returns the version of the module firmware. -\item[detectornumber] Returns the serial number of the module (normally the MAC address). -\item[modulenumber[:i]] Returns the serial number of the module i. -\item[detectorversion] Returns the version of the controller firmware. -\item[softwareversion] Returns the version of the software running on the detector. -\item[thisversion] Returns the version of the control software which is being used. -\item[detectorsvnversion] Returns the SVN version of the software on the detector. -\end{description} - -\subsubsection{Tests} - -\begin{description} -\item[digitest[:i]] Makes a digital test of module i. Afterwards the detector must be reconfigured for the acquisition (settings, threshold, exptime, dr, frames etc.). Returns 0 if succeeded, otherwise an error mask. -\item[bustest] Makes a digital test of the communication between CPU and FPGA. Returns 0 if succeeded, otherwise the number of errors. -%\item[digibittest] GOTTHARD?!?!??! -%\item[acqtest] GOTTHARD?!?!??! -%\item[test] GOTTHARD?!?!??! -\end{description} - - - -\subsection{Advanced commands} - - -\subsubsection{Calibration} -This operations should be performed only rarely to configure the detector - -\begin{description} - \item[encallog] returns whether the logging for energy calibration is enabled. - \item[angcallog] returns whether the logging for angular calibration is enabled. -\end{description} - - - - -\subsubsection{Acquisition commands} - -It is normally recommended to use \verb=sls\_detector\_acquire [j-]=, which takes care of everything -\begin{description} -\item[acquire] Same as \verb=sls\_detector\_acquire= -\item[data] Gets, saves and processes all data stored on the detector, if any. -\item[frame] Gets, saves and processes one frame stored on the detector, if any in a Firt-In/First-Out mode. -\item[status] Returns the detector status - can be: running, error, transmitting, finished, waiting or idle -\item[online] Returns whether the detector is in online or offline mode. -\item[checkonline] Returns whether the detector is in online or offline mode. -\item[readctr i fname] GOTTHARD related - reads counter in detector to file fname, restarts acquisition if i=1 -%\item[resetctr i] GOTTHARD- ADVANCED- resets counter in detector, restarts acquisition if i=1 -\item[exptimel] Returns the exposure time left for the current frame. -\item[periodl] Returns the period left for the current frame. -\item[delayl] Returns the delay after trigger left for the current frame. -\item[gatesl] Returns the number of gates left for the current frame. -\item[framesl] Returns the number of frames left for the current cycle. -\item[triggersl] Returns the number of triggers left for the current acquisition. -\item[now] Returns the current timestamp of the detector clock. -\item[timestamp] Returns the timestamp of the acquisitions in a First-In/First-Out mode i.e. every time it is called it returns the timestamp of the first acquisition start of readout. The FIFO is reset everytime the acquisition is started. -\end{description} - - - -\subsubsection{Configuration} -Advanced commands to configure the detector system. Should be left to the configuration file -\begin{description} -\item[type] Returns the types of detector controllers in the system. -\item[hostname] Returns the hostnames or IP addresses for the detector -\item[d:extsig:i] Returns the usage of the external IO signal i of the controller d. -\item[master] Returns the master of the acquisition in a multicontroller detector. -1 is none. -\item[sync] Returns the synchronization mode of the various controller within a detector structure. -\item[trimdir] Same ad settingsdir. -\item[settingsdir] Returns the path of the directory where the trim/settings files are stored. -\item[caldir] Returns the path of the directory where the calibration files are stored. -\item[trimen n e1 e2 ...en] Unused. Returns the list of energies for which trimfiles exist. -\item[port] Returns the port used by the sockets to control the detector. -\item[stopport]Returns the port used by the sockets to stop/get the status of the detector. -%\item[add s] Avoid using it. Adds the controller s to the detector structure. -%\item[remove i] Avoid using it. Removes the controller in position i from the detector structure. -\item[id[:i]] returns the id of the detector structure. i is the detector position in a multi detector system -\item[free] Avoid using it. Frees the shared memory. -\end{description} -Settable communication parameters: -\begin{description} -\item[txndelay\_left] \E advanced: Set transmission delay of sending the left port frame -\item[txndelay\_right] \E advanced: Set transmission delay of sending the right port frame - \item[txndelay\_frame] \E advanced: Set transmission delay of sending the entire frame In addition to left and right. This value has to be greater than the maximum of the transmission delays of each port. -\end{description} - - -\subsubsection{Receiver - GOTTHARD only} -\begin{description} -%\item[receiverip] Returns receiver ip. -%\item[receivermac]Returns the receiver mac. -%\item[servermac] Returns the server mac. -%\item[dataport] Returns the communication port to the receiver. - - - -\item[detectormac] returns the mac of the detector udp interface to mac (if configurable). Should be left to the configuration file. -\item[rx\_tcpport] returns the communication port between client and receiver. Should be left to the configuration file. -\item[rx\_udpport] returns the communication port between detector and receiver. Should be left to the configuration file. -\item[rx\_hostname] returns the hostname (or IP address) of the receiver for the TCP/IP interface with the client. -\item[rx\_udpip] returns the IP address of the receiver for the UDP interface with the detector. - -\item[r\_online b] Returns whether the receiver in online (1) or offline (0) mode. -\item[r\_checkonline] Returns whether the receiver in online (1) or offline (0) mode. -\item[framescaught] Returns the number of frames received. Returns: "framescaught n'' -\item[resetframescaught n] Sets the number of frames received to 1 -\item[frameindex] Returns the index of the last frame received. -\item[r\_lock] Returns whether the receiver is locked (1) or unlocked (0). -\item[r\_lastclient] Returns the IP of the last client which connected to the receiver. -%\item[receiver s ] starts/stops the receiver to listen to detector packets. - can be start or stop -\end{description} - -\subsubsection{Postprocessing} -Some advanced commands to configure data postprocessing. -\begin{description} -\item[ffdir] Returns the directory where the flat field files are stored. -\item[darkimage fname] GOTTHARD- ADVANCED- Returns the dark image file for the detector. -\item[gainimage fname] GOTTHARD- ADVANCED- Returns gain image file for the detector. -\item[badchannels fname] Returns bad channel file to fname. -\item[threaded b] Returns whether the data are written to disk in parallel with the acquisition (1) or after the acquisition (0). -\end{description} - - -\textbf{Angular conversion} - -\begin{description} -\item[globaloff] Returns the offset of the beamline i.e. angular position of channel 0 when angular encoder at 0. -\item[angconv] Returns the file used for the coefficients for angular conversion. -\item[binsize] Returns the size of the angular bins for angular conversion. -\item[angdir] Returns the angular direction of the detector (1 means channel number in the same direction as the angular encoder, -1 different direction). -\item[d:moveflag] Related to a single controller d. Returns 1 if the detector modules move with the angular encoder, 0 if they are static (useful for multidetector systems). -\end{description} - - - -\subsection{Detector settings} -Advanced settings changing the analog or digital performance of the acquisition. Use them only if you are sure of what you are doing! - -\begin{description} -\item[vthreshold] Returns the DAC value of the detector threshold to n. -\item[vcalibration] Returns the DAC value of the calibration pulse amplitude to n. -\item[vtrimbit] Returns the DAC value defining the trimbits LSB size to n. -\item[vpreamp] Returns the DAC value of the preamp feedback to n. -\item[vshaper1] Returns the DAC value of the shaper1 feedback to n. -\item[vshaper2] Returns the DAC value of the shaper2 feedback to n. -\item[highvoltage] Returns the DAC value of the high voltage to n. -\item[vapower] CHIPTEST BOARD ONLY - Returns the DAC value of the analog voltage to n. -\item[vddpower] CHIPTEST BOARD ONLY - Returns the DAC value of the analog voltage to n. -\item[vshpower] CHIPTEST BOARD ONLY - Returns the comparator power supply in dac units (0-1024). -\item[viopower] CHIPTEST BOARD ONLY - Returns the FPGA I/O power supply in dac units (0-1024). -\item[vref\_ds] Returns vrefds -\item[vcascn\_pb] Returns vcascn\_pb -\item[vcascp\_pb] Returns vcascp\_pb -\item[vout\_cm] Returns vout\_cm -\item[vcasc\_out] Returns vcasc\_out -\item[vin\_cm] Returns vin\_cm -\item[vref\_comp] Returns vref\_comp -\item[ib\_test\_c] Returns ib\_test\_c -\item[vsvp] Returns vsvp -\item [vsvn] Returns vsvn -\item [vtr] Returns vtr trim strength (\E) -\item [vrf] Returns vrf preamp gain (\E) -\item [vrs] Returns vrs shaper gain (\E) -\item [vtgstv] Returns vtgstv (\E) -\item[vcmp\_ll] Returns vcmp\_ll (\E) leftmost chip theshold -\item [vcmp\_lr] Returns vcmp\_lr (\E) second to leftmost chip theshold -\item [vcmp\_rl] Returns vcmp\_rl (\E) second to rightmost chip theshold -\item [vcmp\_rr] Returns vcmp\_rr (\E) rightmost chip theshold -\item [vcall] Returns vcall calibration stength (\E) -\item [rxb\_rb] Returns rxb\_rb rightmost chip value to decode 0-1 in the readout -\item [rxb\_lb] Returns rxb\_lb leftmost chip value to decode 0-1 in the readout -\item [vcp] Returns vcp cascode p value (\E) -\item [vcn] Returns vcn cascode n value (\E) -\item [vis] Returns vis shaper current (\E) -\item [iodelay] Returns iodelay -\item[temp\_adc] Returns the temperature of the ADCs -\item[temp\_fpga] Returns the temperature of the FPGA. -\item[temp\_fpgaext] Returns the temperature close to the fpga (\E). -\item[temp\_10ge] Returns the temperature close to the 10GE (\E). -\item[temp\_dcdc] Returns the temperature close to the dc dc converter (\E). -\item[temp\_sodl] Returns the temperature close to the left so-dimm memory (\E). -\item[temp\_sodr] Returns the temperature close to the right so-dimm memory (\E). -\item[temp\_fpgafl] Returns the temperature of the left front end board fpga (\E). -\item[temp\_fpgafr] Returns the temperature of the right front end board fpga (\E). - -\item[reg a] Write to register of address a the data d -\item[clkdivider] Returns the clock divider for the readout. -\item[setlength] Returns the length of the set/reset signals in the acquisition. -\item[waitstates] Returns the wait states for CPU/FPGA communication. -\item[totdivider] Returns the tot clock divider. -\item[totdutycycle] Returns the tot duty cycle. -\item[setup] Dumps all settings to file (config, parameters, trimbits etc.). -\item[trimbits fn] Dumps the trimbits to the file files fn.snxxx -\end{description} - - -\section{Usage} - -\subsection{Mandatory setup} -First, your detector should always be configured for each PC that you might want to use for controlling the detector. -To do that: -\begin{verbatim} -sls_detector_put config mydetector.config -\end{verbatim} -Refer to sample configuration files to produce the appropriate one for your detector. - -One can configure all the detector settings in a parameter file {\tt{setup.det}}, which is loaded by doing: -\begin{verbatim} -sls_detector_put parameters setup.det -\end{verbatim} - -In the case of \E, the parameter file ({\tt{setup.det}} needs to setup the proper bias voltage of the sensor, i.e. needs to contain the line {\tt{highvoltage 150}}. - -\subsection{Standard acquisition} - -You will then need to setup the detector threshold and settings, the exposure time, the number of real time frames and eventually how many real time frames should be acquired: -\begin{verbatim} -sls_detector_put settings standard -sls_detector_put threshold 6000 -sls_detector_put exptime 1. -sls_detector_put frames 10 -\end{verbatim} -In this case 10 consecutive 1s frames will be acquired. - -You need to setup where the files will be written to -\begin{verbatim} -sls_detector_put outdir /scratch -sls_detector_put fname run -sls_detector_put index 0 -\end{verbatim} -this way your files will all be named /scratch/run\_fj\_i.dat where j goes between 0 and 9 and is relative to the frame number, i starts from 0 and is automatically incremented. The next acquisition it will be 1. - - -To acquire simply type -\begin{verbatim} -sls_detector_acquire -\end{verbatim} - - -You can poll the detector status using -\begin{verbatim} -sls_detector_get status -\end{verbatim} - - -\subsection{Data processing} -Flat field and rate corrections can be applied directly by simply selecting: -\begin{verbatim} -sls_detector_put flatield myflatfield.raw -sls_detector_put ratecorr -1 -\end{verbatim} - - -\end{document} - diff --git a/manual/manual-client/tauvsE.png b/manual/manual-client/tauvsE.png deleted file mode 100644 index cfbf69d2f..000000000 Binary files a/manual/manual-client/tauvsE.png and /dev/null differ diff --git a/manual/manual-client/tiggerIN.png b/manual/manual-client/tiggerIN.png deleted file mode 100755 index 0b7a43f7f..000000000 Binary files a/manual/manual-client/tiggerIN.png and /dev/null differ diff --git a/manual/manual-gui/Makefile b/manual/manual-gui/Makefile deleted file mode 100755 index 8ff7e1457..000000000 --- a/manual/manual-gui/Makefile +++ /dev/null @@ -1,53 +0,0 @@ -DESTDIR?=../docs - - -#manual-api manual-calwiz manual-client manual-gui manual-main - - -TEX=latex - -MAINTEXS= slsDetectorGuiHowTo.tex - - -DVIS = $(MAINTEXS:.tex=.dvi) -PSS = $(MAINTEXS:.tex=.ps) -PDFS = $(MAINTEXS:.tex=.pdf) -HTMLS = $(MAINTEXS:%.tex=%) - - -all: pdf html - echo $(PWD) - echo $(PDFS) - echo $(HTMLS) - -pdf: $(PDFS) - $(shell test -d $(DESTDIR) || mkdir -p $(DESTDIR)) - $(shell test -d $(DESTDIR)/pdf || mkdir -p $(DESTDIR)/pdf) - mv $(PDFS) $(DESTDIR)/pdf - -html: $(HTMLS) - -$(HTMLS): $(MAINTEXS) - $(shell test -d $(DESTDIR) || mkdir -p $(DESTDIR)) - $(shell test -d $(DESTDIR)/html || mkdir -p $(DESTDIR)/html) - $(shell test -d $(DESTDIR)/html/$@ && rm -r $(DESTDIR)/html/$@) - latex $@.tex - latex2html -split 4 $@.tex - mv $@ $(DESTDIR)/html - -%.dvi : %.tex $(TEXS) - latex $< - latex $< - -%.ps : %.dvi - dvips -o $@ $< - - -%.pdf : %.ps - ps2pdf $< $@ - - -clean: - rm -rf *.aux *.log *.toc *.out $(DVIS) $(PSS) $(PDFS) $(HTMLS) - rm -rf $(DESTDIR)/html/slsDetectorGuiHowTo - rm -rf $(DESTDIR)/pdf/slsDetectorGuiHowTo.pdf diff --git a/manual/manual-gui/libs.txt b/manual/manual-gui/libs.txt deleted file mode 100755 index 589498a64..000000000 --- a/manual/manual-gui/libs.txt +++ /dev/null @@ -1,59 +0,0 @@ -The slsDetectorGUI is based on Qt4 with Qwt libraries. - --Qt4.6 installation: - -Download the opend source version: -ftp://ftp.qt.nokia.com/qt/source/qt-everywhere-opensource-src-4.6.2.tar.gz - -To install: -gunzip qt-everywhere-opensource-src-4.6.2.tar.gz -tar xvf qt-everywhere-opensource-src-4.6.2.tar -./configure -make -make install - -By default Qt4 will be installed int /usr/local/Trolltech/Qt-4.6.2/ -Edit your .bashrc: -export QTDIR=/usr/local/Trolltech/Qt-4.6.2 -export PATH=$QTDIR/bin:$PATH -export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH - -If your system also have Qt3 installed, make sure that QTDIR, PATH and LD_LIBRARY_PATH point to Qt4 before installing Qwt (and of course compiling and running the GUI). - - - -- Qwt5.2 installation - -Download the sources: -svn co https://qwt.svn.sourceforge.net/svnroot/qwt/branches/qwt-5.2 - -To install: -cd qwt-5.2 -qmake -make -make install - -By default Qwt will be installed in /usr/local/qwt-5.2.3-svn/ -Edit your .bashrc: -export QWTDIR=/usr/local/qwt-5.2.3-svn/ -export LD_LIBRARY_PATH=$QWTDIR/lib:$LD_LIBRARY_PATH - - -- The calibration wizards are based on the cern root software - -Download the sources -svn co https://root.cern.ch/svn/root/trunk root - -To install: -cd root -./configure --enable-qt -make -make install - -edit your .bashrc: -export ROOTSYS=/usr/local/root -export PATH=$ROOTSYS/bin:$PATH -export LD_LIBRARY_PATH=$ROOTSYS/lib:$LD_LIBRARY_PATH - -You can also download the binaries, assuming that your linuc and gcc versions match: -http://root.cern.ch/drupal/content/production-version-534 \ No newline at end of file diff --git a/manual/manual-gui/slsDetectorGuiHowTo.tex b/manual/manual-gui/slsDetectorGuiHowTo.tex deleted file mode 100755 index dffac2af2..000000000 --- a/manual/manual-gui/slsDetectorGuiHowTo.tex +++ /dev/null @@ -1,522 +0,0 @@ -\documentclass{report} -\usepackage{amssymb} -\usepackage[dvips]{graphicx} -\usepackage{verbatim} -\begin{document} - -\title{Mythen v3.0 manual} -\date{\today} -\maketitle - - -\chapter{Installation and upgrades} - -The new MYTHEN software is intended to control the MCS mythen boards either by using a command line interface (text client) or by using with a graphical user interface (GUI). - -Here you can find in brief the main things you need to know in order to start working with your detector. - -\section{The software package} - -The actual software for the Mythen II system (MCS1 to MCS24) runs on 32~bit Scientific Linux machines (SLC5 tested, gcc 4.1.2 but it should not be critical). - -The complete software package is composed of several programs which can be instaleld (or locally compiled) depending on the needs: -\begin{itemize} -\item The \textbf{slsDetector shared and static libraries} which are necessary for all user interfaces and can be simply used for implementig custom detector drivers; -\item The \textbf{command line interface (slsDetectorClient) sls\_detector\_put, sls\_detector\_get, sls\_detector\_acquire} which is provided to communicate with the detectors; -\item A \textbf{virtual server mythenServer} which can be used to simulate the behavior of the detector for what concerns the communication in case the detector is not online or is in use. -\end{itemize} - - - -\section{Requirements} - -For installing the slsDetector shared and static libraries and the slsDetectorClient software, any Linux installation with a working gcc should be fine.\\ - - -\begin{comment} -For installing the TSlsDetector shared and static libraries and the mythenGUI, working installations of Qt and Root should be present on the PC.\\ - -A Qt version equal or higher to 3.3 (but lower than Qt4) should be installed on the PC. It can be downloaded from \\ -\verb|http://www.trolltech.com/developer/downloads/qt/index| and the enviroment variable \verb|QTDIR| should be set to its path. -Qt should be compiled with the options \verb|-thread -no-xft -qt-gif -no-exceptions| (check in \textsf{\$QTDIR/config.status}). this is normally the default on SLC machines. - - -Also a \textsf{root} version higher than 5.15 but lower than 5.22 \textbf{with Qt support enabled} should be installed (the binaries can be downloaded from \verb|http://root.cern.ch| or compile with the option \verb|--enable-qt|) and the system variable \verb|ROOTSYS| should be set to its path. \\ -Remember to check the in file \$ROOTSYS/etc/system.rootrc or in your own custom .rootrc the following options are correctly defined: -\begin{verbatim} -# GUI specific settings -Gui.Backend: qt -Gui.Factory: qt -\end{verbatim} -Further details can be found in the root user's manual at \verb|http://root.cern.ch/root/doc/RootDoc.html| in chapter 1 (Introduction), 26 (ROOT/Qt integration interfaces) and 28 (Install and Build ROOT).\\ - -\verb|ROOTSYS|/bin and \verb|QTDIR|/bin should be added to the \verb|PATH|;\\ -\verb|ROOTSYS|/lib and \verb|QTDIR|/lib should be added to the \verb|LD_LIBRARY_PATH|~\footnote{In some linux installation there might be configuration scripts e.g in the directory \texttt{/etc/profile.d/} and \texttt{/etc/ld.so.conf.d/} overwriting this variables, so check that the installations correspond. If you have already used other Qt or Root versions, it might be that the old libraries are loaded in cache. To delete the chache, remove the file \texttt{/etc/ld.so.cache} and run \texttt{.....} this is always a problem!!!!}.\\ - -As an example, we suggest to add the following lines to your \verb|.bashrc| or \verb|.profile| file (changing \verb|QTDIR| and \verb|ROOTSYS| accordingly): -\begin{verbatim} -export ROOTSYS=/local/root -export QTDIR=/local/qt - -export PATH=$QTDIR/bin:$ROOTSYS/bin::$PATH -export LD_LIBRARY_PATH=$QTDIR/lib:$ROOTSYS/lib:$LD_LIBRARY_PATH -export MANPATH=$QTDIR/doc/man/usr/local/man:$MANPATH -\end{verbatim} -\end{comment} - -\section{Compilation} -If you simply want to install the software in the working directory you can: -\begin{itemize} -\item \verb=make lib= compile slsDetector library -%\item \verb=make tlib= compile Root/Qt TSlsDetector library -\item \verb=make slsDetectorClient= compile slsDetectorClient package -%\item \verb=make mythenGUI= compile mythenGUI -%\item \verb=make all= compile slsDetector and TSlsDetector libraries, the mythenClient package and the mythenGUI -\item \verb=make all= compile slsDetector libraries, the slsDetectorClient package -\item \verb=make clean= remove object files and executables -\item \verb=make help= lists possible targets -\end{itemize} - -To be able to run the slsDetectorClient commands, add their location to your path. - - -\section{Building} -To install the software you should first configure some enviroment variables by executing: -\begin{verbatim} -> source configure -\end{verbatim} -(NOT \verb=>./configure= otherwise the enviroment variables will not be available for the \verb=make= command). -This allows you to configure: -\begin{itemize} -%\item \textbf{QTDIR} i.e. the Qt installation directory. Ignore if you don't want to install the GUI, otherwise it should be defined in your \verb=.bashrc= and added to \verb=PATH= and \verb=LD_LIBRARY_PATH= -%\item \textbf{ROOTSYS} i.e. the Root installation directory. Ignore if you don't want to install the GUI, otherwise it should be defined in your \verb=.bashrc= and added to \verb=PATH= and \verb=LD_LIBRARY_PATH= -\item \textbf{INSTALLROOT} Directory where you want to install the software. Defaults to /usr/local/ -\item \textbf{BINDIR} Directory where you want to install the binaries. Defaults to bin/ -\item \textbf{INCDIR} Directory where you want to pute the header files. Defaults to include/slsdetector/ -\item \textbf{LIBDIR} Directory where you want to install the libraries. Defaults to lib/ -\item \textbf{DOCDIR} Directory where you want to copy the documentation. Defaults to share/doc/ -\end{itemize} - -To build you can: -\begin{itemize} -\item \verb=make install_lib= install detector library and include files" -%\item \verb=make install_tlib= install detector Root/Qt library and include files" -\item \verb=make install_client= install slsDetectorClient -%\item \verb=make install_gui= install mythenGUI -%\item \verb=make install= install library, include files, mythenClient and mythenGUI" -\item \verb=make install= install library, include files and mythenClient'' -\item \verb=make install_libdoc= install library documentation -\item \verb=make install_clientdoc= install mythenClient documentation -%\item \verb=make install_guidoc= install mythenGUI documentation -\item \verb=make install_doc= install all documentation -\item \verb=make help= lists possible targets -\end{itemize} - -\section{Detector upgrade} - -The upgrade of the detector consists in both the upgrade of the communication software and of the firmware.\\ - -To upgrade the firmware you need either a working version of the Altera Quartus software or of the Quartus programmer, which can easly be downloade from \\ -\verb=https://www.altera.com/download/programming/quartus2/pq2-index.jsp= \\ -Normally installation of the software and of the driver for the USB-Blaster (provided together with the MYTHEN detector) are simpler under Windows.\\ -Under Windows, the first time that you connect the USB-Blasterto one of your USB ports, you will be asked to install new hardware. Set the path to search -for the driver to: \verb=C:\altera\80sp1\qprogrammer\drivers\usb-blasterp= (where \verb=C:\altera\80sp1\qprogrammer\= is assumed to be ther path where your Quartus version is installed).\\ -\begin{enumerate} -\item After starting the Quartus programmer, click on Hardware Setup and in the "Currently selected hardware" window select USB-Blaster. -\item In the Mode combo box select "Active Serial Programming". -\item Plug the end of your USB-Blaster WITH THE ADAPTER PROVIDED in the connector ASMI on the MCS board taking care that pin1 corresponds to the one indexed and with the rectangualr pad. -\item Click on add file and from select the programming file provided when the upgrade has been reccomended. -\item Check "Program/Configure" and "Verify". -\item Push the start button and wait until the programming process is finished (progress bar top left). -\item In case the programmer gives you error messages, check the polarity of your cable (pin1 corresponds) and that you have selected the correct programming connector. -\end{enumerate} - -To upgrade the software on the detector board transfer the provided software by ftp to the MCS: -\begin{verbatim} -ftp mymcs.mydomain.com -username: root -password: pass -cd /mnt/flash/root -put mythenDetectorServer -quit -\end{verbatim} -If the /mnt/flash/root directory does not exist, create it before the transfer by telnetting to the MCS.\\ -After pressing reset on the board, the board should reboot.\\ -If the program does not correctly start either check by using the http interface that it is started by the inittab (check that the file \verb=/mnt/etc/inittab= ends with the line \verb=myid2:3:once:/mnt/flash/root/mythenDetectorServer= ). \\ -Otherwise make the program executable by telnetting to the MCS and executing: -\verb=chmod a+xrw /mnt/flash/root/mythenDetectorServer=\\ -After pressing reset on the board, the board should reboot and the acqusition program correctly start. - -\section{The trimbits and calibration files} \label{sec:trimdir} -In order to be able to properly operate your detector you need a directory where the trimbit files (needed to set the detector settings and eventually equalize the individual channel thresholds) which in the following will be named \textit{trimdir} and a directory where the calibration files (needed to convert the threshold energy in DAC units) are stored which in the following will be named \textit{caldir}. -\textit{trimdir} and \textit{caldir} can even be the same directory, and an example of it is given in the software package by the example directory \verb=trimbits=. \\ -Since these directories are customized by producing trimbit files and calibration for each detector, make sure not to overwrite yours every time you upgrade the software. - -\textit{trimdir} should contain three subdirectories \verb=standard=, \verb=fast= and \verb=highgain= containing respectively the trimfiles \verb=standard.trim=, \verb=fast.trim= and \verb=highgain.trim= which contain the correct voltage settings for the detector although all the individual channel thresholds set to 0. The original files contained in the package should be used, infact in case of error the detector would not recognize the correct settings.\\ -The default trimbit files for each file will be stored in the directory according to the settings with the name \verb=noise.snxxx= where \verb=xxx= is the module serial number.\\ - -\textit{caldir} should contain three subdirectories \verb=standard=, \verb=fast= and \verb=highgain= containing respectively the trimfiles \verb=standard.cal=, \verb=fast.cal= and \verb=highgain.cal= which contain an average calibration of the modules for the diffrent settings. However this can different from the correct one for each individual module even of several kev and therefore it is very important to perform an energy calibration on a module basis (see section~\ref{sec:encal}).\\ -The default calibration files for each file will be stored in the directory according to the settings with the name \verb=calibration.snxxx= where \verb=xxx= is the module serial number. - - - -\chapter{slsDetectorClient} - -\section{Introduction} - -This program is intended to control the MYTHEN detectors via command line interface. - -To get all the possibilities of usage simply type: -\begin{description} -\item[sls\_detector\_acquire] to readout the detector at full speed -\item[sls\_detector\_put] to set detector parameters -\item[sls\_detector\_get] to retrieve detector parameters -\end{description} - -There are different ways for communicationg with your detector(s). -\begin{itemize} -\item[multiDetector] is represented by a group of controllers which operate symultaneously with the same parameters. You can define several multiDetector systems and int this case you address them using different indexes. In this case the syntax will be \verb=sls\_detector\_cmd i-= where cmd can be acquire, put, get and i is the index of the multiDetector entity (if omitted defaults to 0 - standard usage). Normally it is handy to use the multiDetector structure also in case of single detectors. However in some cases one cannot avoid using the slsDetector structure for detailed configuration (e.g. meaning of external signals or other flags) -\item[slsDetector] is represented by a single controller. You can define several multiDetector systems and int this case you address them using different indexes. In this case the syntax will be \verb=sls\_detector\_cmd i:= where cmd can be acquire, put, get and i is the index of the slsDetector entity, which cannot be omitted. When creating the multiDetector structure, the indexes are automatically assigned to the detectors contained in it. You can retrieve the indexes relative to the slsDetector using: \verb=sls\_detector\_get hostname:pos, sls\_detector\_get id:pos= whic will return the hostname in position pos of your multiDetector structure (pos=0 in case of single detectors) and its index. -\end{itemize} - - -\section{Acquisition} -mythen\_acquire [id[-/:]] - -the detector is started and the data are acquired, postprocessed and written to file according to the configuration - - -\section{Detector setup} - -mythen\_put [id[:/-]]var arg - -is used to configure the detector parameter var - e.g. mythen\_put 0:exptime 1 sets the exposure time to 1 s - -\begin{description} -\item[help i] get help -\item[config fname] reads the configuration file specified and sets the values -\item[parameters fname] sets the detector parameters specified in the file -\item[setup rootname] reads the files specfied (and that could be created by get setup) and resets the complete detector configuration including flatfield corrections, badchannels, trimbits etc. -\item[hostname name] this is mandatory!!!! sets hostname (or IP adress) -\item[online b] b can be 0 or 1 and sets the detector in offline/online state. Must be used to restore communication if some socket called failed because the detector was not connected. -\item[status s] either start or stop -\item[caldir path] Sets path of the calibration files -\item[trimdir path] Sets path of the trim files -\item[outdir path] directory to which the files will be written by default -\item[fname name] filename to which the files will be written by default (to which file and position indexes will eventually be attached) -\item[index i] start index of the files (automatically incremented by the acquisition functions) -\item[nmod n] Sets number of detector modules -\item[extsig:i mode] Sets usage of the external digital signal i. mode can be: off, gate\_in\_active\_high, gate\_in\_active\_low, trigger\_in\_rising\_edge, trigger\_in\_falling\_edge, ro\_trigger\_in\_rising\_edge, ro\_trigger\_in\_falling\_edge, gate\_out\_active\_high, gate\_out\_active\_low, trigger\_out\_rising\_edge, trigger\_out\_falling\_edge, ro\_trigger\_out\_rising\_edge, ro\_trigger\_out\_falling\_edge -\item[timing] Sets the timing mode of the detector. Can be auto, gating (works only if at least one of the signals is configured as gate\_in), trigger (works only if at least one of the signals is configured as trigger\_in), ro\_trigger (works only if at least one of the signals is configured as ro\_trigger\_in), triggered\_gating (works only if one ofthe signals is configured as gate\_in and one as trigger\_in). -\item[settings sett] Sets detector settings. Can be: standard fast highgain (depending on trheshold energy and maximum count rate: please refere to manual for limit values!); -\item[threshold ev] Sets detector threshold in eV. Should be half of the beam energy. It is precise only if the detector is calibrated -\item[vthreshold dac] Sets detector threshold in DAC units. A very rough calibration is dac=800-10*keV -\item[exptime t] Sets the exposure time per frame (in s) -\item[period t] Sets the frames period (in s) -\item[delay t] Sets the delay after trigger (in s) -\item[gates n] Sets the number of gates per frame -\item[frames n] Sets the number of frames per cycle (e.g. after each trigger) -\item[triggers n] Sets the number of triggers (e.g. number of triggers) -\item[probes n] Sets the number of probes to accumulate (max 3) -\item[dr n] Sets the dynamic range - can be (1,) 4, 8,16 or 24 bits -\item[flags mode] Sets the readout flags - can be none or storeinram -\item[flatfield fname] Sets the flatfield file name - none disable flat field corrections -\item[ratecorr t] Sets the rate corrections with dead time t ns (0 unsets, -1 uses default dead time for chosen settings -\item[badchannels fname] Sets the badchannels file name - none disable bad channels corrections -\item[angconv fname] Sets the angular conversion file name -\item[globaloff o] sets the fixed angular offset of your encoder - should be almost constant! -\item[fineoff o] sets a possible angular offset of your setup - should be small but can be senseful to modify -\item[binsize s] sets the binning size of the angular conversion (otherwise defaults from the angualr conversion constants) -\item[angdir i] sets the angular direction of the detector (i can be 1 or -1 - by default 1, channel 0 is smaller angle) -\item[positions np (pos0 pos1...posnp)] Sets the number of positions at which the detector is moved during the acquisition and their values -\item[startscript script] sets a script to be executed at the beginning of the measurements (e.g. open shutter). \textit{none} unsets. Parameters will be parsed as \verb|script nrun=i par=spar| where i is the run number and spar is the value of startscriptpar. -\item[stopscript script] sets a script to be executed at the end of the measurement (e.g. close shutter). \textit{none} unsets. Parameters will be parsed as \verb|script nrun=i par=spar| where i is the run number and spar is the value of stopscriptpar. -\item[startscriptpar spar] sets a parameter passed to the start script as string with the syntax par=spar. Its meaning must be interpreted inside the script! -\item[stopscriptpar spar] sets a parameter passed to the start script as string with the syntax par=spar. Its meaning must be interpreted inside the script! -\item[scan0script script] Sets a scan script to be executed at higher level. Script can be none (unset), threshold (change threshold DAC values for all modules), energy (change energy threshold DAC values using calibration for each module), trimbits (change trimbits for all channels) or any script (e.g changing temperature or moving sample) which will be called with the syntax \verb| script nrun=i fn=fname var=val par=spar| where i is the file index, fname is the file name val is the current value of the scan variable and spar is the value of the scan parameter -\item[scan1script script] Sets a scan script to be executed at lower level. Script can be none (unset), threshold (change threshold DAC values for all modules), energy (change energy threshold DAC values using calibration for each module), trimbits (change trimbits for all channels) or any script (e.g changing temperature or moving sample) which will be called with the syntax \verb| script nrun=i fn=fname var=val par=spar| where i is the file index, fname is the file name val is the current value of the scan variable and spar is the value of the scan parameter -\item[scan0par spar] sets the scan parameter to be passed to scan0script as a string with syntax par=spar. Its meaning has to be interpreted insode the script! -\item[scan1par spar] sets the scan parameter to be passed to scan1script as a string with syntax par=spar. Its meaning has to be interpreted insode the script! -\item[scan0prec i] sets the precision of the scan variable in order to properly generate the file names for scan0 -\item[scan1prec i] sets the precision of the scan variable in order to properly generate the file names for scan1 -\item[scan0steps n (f0 f1..fn)] sets the steps for the scan0script. n is the number of steps and the following values are the step values. -\item[scan1steps n (f0 f1..fn)] sets the steps for the scan1script. n is the number of steps and the following values are the step values. -\item[scan0range mi ma st] generates the steps for the scan0script in the range mi to ma with step st (is mi smaller than ma specify a negative step) -\item[scan1range mi ma st] generates the steps for the scan1script in the range mi to ma with step st (is mi smaller than ma specify a negative step) -\item[scriptbefore script] sets the script to be executed before each acquisition (before all positions) with the syntax \verb|script nrun=i fn=fname par=spar sv0=svar0 sv1=svar1 p0=spar0 p1=spar1| where i is the file index, fname is the file name, sva0, svar1 are the current values of the scan variables 0 and 1, spar0, spar1 are tthe scan parameter 0 and 1. \textit{none} unsets. -\item[scriptafter script] sets the script to be executed after each acquisition (after all positions) with the syntax \verb|script nrun=i fn=fname par=spar sv0=svar0 sv1=svar1 p0=spar0 p1=spar1| where i is the file index, fname is the file name, sva0, svar1 are the current values of the scan variables 0 and 1, spar0, spar1 are tthe scan parameter 0 and 1. \textit{none} unsets. -\item[scriptbeforepar spar] sets the parameter to be passed to the script before witht he syntax par=spar -\item[scriptafterpar spar] sets the parameter to be passed to the script after witht he syntax par=spar -\item[headerbefore script] sets the script to be executed before each acquisition (after moving the detector) with the syntax \verb|script nrun=i fn=fname par=spar| where i is the run number, fname is the file name, spar is the header before parameter. The script is normally used to save a file header. \textit{none} unsets. -\item[headerafter script] sets the script to be executed after each acquisition (after each position) with the syntax \verb|script nrun=i fn=fname par=spar| where i is the run number, fname is the file name, spar is the header after parameter. The script is normally used to complete the file header. \textit{none} unsets. -\item[headerbeforepar spar] sets the parameter to be passed to the header before script with the syntax par=spar -\item[headerafterpar spar] sets the parameter to be passed to the header after script with the syntax par=spar -\end{description} - - - - -\section{Retrieving detector parameters (plus trimming and test modalities)} -mythen\_get [id[:/-]]var arg - -is used to retrieve the detector parameter var - e.g. mythen\_get 0:exptime returns the exposure time in seconds - - - -\begin{description} -\item[help] This help -\item[config fname] writes the configuration file -\item[parameters fname] writes the main detector parameters for the measuremen tin the file -\item[setup rootname] writes the complete detector setup (including configuration, trimbits, flat field coefficients, badchannels etc.) is a set of files for which the extension is automatically generated -\item[online] return whether the detector is in online (1) or offline (0) state. -\item[status] gets the detector status - can be: running, error, transmitting, finished, waiting or idle -\item[data] gets all data from the detector (if any) processes them and writes them to file according to the preferences already setup -\item[frame] gets a single frame from the detector (if any) processes it and writes it to file according to the preferences already setup -\item[hostname] Gets the detector hostname (or IP address) -\item[caldir] Gets path of the calibration files -\item[trimdir] Gets path of the trim files -\item[outdir] directory to which the files will be written by default -\item[fname] filename to which the files will be written by default (to which file and position indexes will eventually be attached) -\item[index] start index of the files (automatically incremented by the acquisition functions) -\item[nmod] Gets number of detector modules -\item[maxmod] Gets maximum number of detector modules -\item[extsig:i] Gets usage of the external digital signal i. The return value can be: off, gate\_in\_active\_high, gate\_in\_active\_low, trigger\_in\_rising\_edge, trigger\_in\_falling\_edge, ro\_trigger\_in\_rising\_edge, ro\_trigger\_in\_falling\_edge, gate\_out\_active\_high, gate\_out\_active\_low, trigger\_out\_rising\_edge, trigger\_out\_falling\_edge, ro\_trigger\_out\_rising\_edge, ro\_trigger\_out\_falling\_edge\item[timing] Sets the timing mode of the detector. Can be auto, gating (works only if at least one of the signals is configured as gate\_in), trigger (works only if at least one of the signals is configured as trigger\_in), ro\_trigger (works only if at least one of the signals is configured as ro\_trigger\_in), triggered\_gating (works only if one ofthe signals is configured as gate\_in and one as trigger\_in). -\item[modulenumber] Gets the module serial number -\item[moduleversion] Gets the module version -\item[detectornumber] Gets the detector number (MAC address) -\item[detectorversion] Gets the detector firmware version -\item[softwareversion] Gets the detector software version -\item[digitest:i] Makes a digital test of the detector module i. Returns 0 if it succeeds -\item[bustest] Makes a test of the detector bus. Returns 0 if it succeeds -\item[settings] Gets detector settings. Can be: standard fast highgain undefined -\item[threshold] Gets detector threshold in eV. It is precise only if the detector is calibrated -\item[vthreshold] Gets detector threshold in DAC units. A very rough calibration is dac=800-10*keV -\item[exptime] Gets the exposure time per frame (in s) -\item[period] Gets the frames period (in s) -\item[delay] Gets the delay after trigger (in s) -\item[gates] Gets the number of gates per frame -\item[frames] Gets the number of frames per cycle (e.g. after each trigger) -\item[triggers] Gets the number of triggers (e.g. number of triggers) -\item[probes] Gets the number of probes to accumulate (max 3) -\item[timestamp] Gets the internal time stamp of the nex frame acquired (i.e. during an acquisition, all timestamps of the frames are stored in a FIFO which can be read after the acquisition - returns -1 if the FIFO is empty) -\item[dr] Gets the dynamic range -\item[trim:mode fname] Trims the detector and writes the trimfile fname.snxxx. mode can be: noise beam improve fix offline - Check that the start conditions are OK!!! -\item[flatfield] fname returns whether the flat field corrections are enabled and if so writes the coefficients to the specified filename. If fname is none it is not written -\item[ratecorr] returns wether the rate corrections are enabled and what is the dead time used in ns -\item[badchannels fname] returns wether the bad channels corrections are enabled and if so writes the bad channels to the specified filename. If fname is none it is not written -\item[angconv fname] returns wether the angular conversion is enabled and if so writes the angular conversion coefficients to the specified filename. If fname is none, it is not written -\item[globaloff] returns the fixed angular offset of your encoder - should be almost constant! -\item[fineoff] returns a possible angualr offset of your setup - should be small but can be senseful to modify -\item[binsize] returns the binning size of the angular conversion -\item[angdir] gets the angular direction of the detector (can be 1 or -1 - by default 1, channel 0 is smaller angle) -\item[positions] returns the number of positions at which the detector is moved during the acquisition and their values -\item[startscript script] sets a script to be executed at the beginning of the measurements (e.g. open shutter). \textit{none} unsets. Parameters will be parsed as \verb|script nrun=i par=spar| where i is the run number and spar is the value of startscriptpar. -\item[stopscript] returns the script to be executed at the end of the measurement (e.g. close shutter). \textit{none} unsets. Parameters will be parsed as \verb|script nrun=i par=spar| where i is the run number and spar is the value of stopscriptpar. -\item[startscriptpar] returns the parameter passed to the start script as string with the syntax par=spar. Its meaning must be interpreted inside the script! -\item[stopscriptpar]returns the parameter passed to the start script as string with the syntax par=spar. Its meaning must be interpreted inside the script! -\item[scan0script] returns the scan script to be executed at higher level. Script can be none (unset), threshold (change threshold DAC values for all modules), energy (change energy threshold DAC values using calibration for each module), trimbits (change trimbits for all channels) or any script (e.g changing temperature or moving sample) which will be called with the syntax \verb| script nrun=i fn=fname var=val par=spar| where i is the file index, fname is the file name val is the current value of the scan variable and spar is the value of the scan parameter -\item[scan1script] returns the scan script to be executed at lower level. Script can be none (unset), threshold (change threshold DAC values for all modules), energy (change energy threshold DAC values using calibration for each module), trimbits (change trimbits for all channels) or any script (e.g changing temperature or moving sample) which will be called with the syntax \verb| script nrun=i fn=fname var=val par=spar| where i is the file index, fname is the file name val is the current value of the scan variable and spar is the value of the scan parameter -\item[scan0par] returns the scan parameter to be passed to scan0script as a string with syntax par=spar. Its meaning has to be interpreted insode the script! -\item[scan1par] returns the scan parameter to be passed to scan1script as a string with syntax par=spar. Its meaning has to be interpreted insode the script! -\item[scan0prec] returns the precision of the scan variable in order to properly generate the file names for scan0 -\item[scan1prec] returns the precision of the scan variable in order to properly generate the file names for scan1 -\item[scan0steps] returns the steps for the scan0script. n is the number of steps and the following values are the step values. -\item[scan1steps] returns the steps for the scan1script. n is the number of steps and the following values are the step values. -\item[scan0range] returns the steps for the scan0script. n is the number of steps and the following values are the step values. -\item[scan1range] returns the steps for the scan1script. n is the number of steps and the following values are the step values. -\item[scriptbefore] returns the script to be executed before each acquisition (before all positions) with the syntax \verb|script nrun=i fn=fname par=spar sv0=svar0 sv1=svar1 p0=spar0 p1=spar1| where i is the file index, fname is the file name, sva0, svar1 are the current values of the scan variables 0 and 1, spar0, spar1 are tthe scan parameter 0 and 1. -\item[scriptafter] returns the script to be executed after each acquisition (after all positions) with the syntax \verb|script nrun=i fn=fname par=spar sv0=svar0 sv1=svar1 p0=spar0 p1=spar1| where i is the file index, fname is the file name, sva0, svar1 are the current values of the scan variables 0 and 1, spar0, spar1 are tthe scan parameter 0 and 1. -\item[scriptbeforepar] returns the parameter to be passed to the script before witht he syntax par=spar -\item[scriptafterpar] returns the parameter to be passed to the script after witht he syntax par=spar -\item[headerbefore] returns the script to be executed before each acquisition (after moving the detector) with the syntax \verb|script nrun=i fn=fname par=spar| where i is the run number, fname is the file name, spar is the header before parameter. The script is normally used to save a file header. -\item[headerafter] returns the script to be executed after each acquisition (after each position) with the syntax \verb|script nrun=i fn=fname par=spar| where i is the run number, fname is the file name, spar is the header after parameter. The script is normally used to complete the file header. -\item[headerbeforepar] returns the parameter to be passed to the header before script with the syntax par=spar -\item[headerafterpar]returns the parameter to be passed to the header after script with the syntax par=spar -\end{description} - -\section{Tips} - -\subsubsection{Mandatory setup} -First of all you should setup the hostname and the detector size and dynamic range: -\begin{verbatim} -mythen_put hostname mcs1x00 -mythen_get nmod -mythen_get dr -\end{verbatim} -You should also tell the program where to find the default trimbits files and calibration files: -\begin{verbatim} -mythen_put trimdir /scratch/trimbits -mythen_get caldir /scratch/calibration -\end{verbatim} -To chose the detector settings (e.g. standard): -\begin{verbatim} -mythen_put settings standard -\end{verbatim} -In case \verb=mythen_get settings= does not answer correctly, it most probably means that there is a problem in the architecture or setting of \textit{trimdir} and \textit{caldir} (see section~\ref{sec:trimdir}). - -\subsubsection{Acquisition setup} -You need to setup where the files will be written to -\begin{verbatim} -mythen_put outdir /scratch -mythen_put fname run -mythen_put index 0 -\end{verbatim} -this way your files will al be named /scracth/run\_i.dat where is starts from 0 and is automatically incremented. - -You will then need to setup the detector threshold and settings, the exposure time, the number of real time frames and eventually how many real time frames should be acquired: -\begin{verbatim} -mythen_put settings standard -mythen_put threshold 6000 -mythen_put exptime 1. -mythen_put frames 10 -\end{verbatim} -In this case 10 consecutive 1s frames will be acquired. -External gating and triggering or more advanced acquisition modes are not explained here. - -\subsubsection{Acquiring} -There are two ways of acquiring data.\\ -The first is fully automatic and freezes the terminal until the acquisition is finished: -\begin{verbatim} -mythen_acquire 0 -\end{verbatim} -This is particulary indicated for fast real time acquisitions. - -If you want to acquire few long frames you can run: -\begin{verbatim} -mythen_put status start -\end{verbatim} -and the poll the detector status using -\begin{verbatim} -mythen_get status -\end{verbatim} -if the answer is either transmitting or finished, the data are ready to be downloaded from the detector. -This can be done using either: -\begin{verbatim} -mythen_get frame -\end{verbatim} -where a single data frame is downloaded or -\begin{verbatim} -mythen_get data -\end{verbatim} -where all data present on the detector are downloaded. -This is not indicated when many short real time frames should be acquired since the detector memory would be full before finishing the acquisition since the download time is so limited. - -\subsubsection{Data processing} -Flat field and rate corrections can be applied direcly by simply selecting: -\begin{verbatim} -mythen_put flatield myflatfield.raw -mythen_put ratecorr -1 -\end{verbatim} - -Concerning the angular conversion, it is very reccomended that the users edit the file usersFunctions.cpp contained in the folder slsDetectorSoftware/usersFunctions. -In the file it is possible to modify the function used for calculating the angular conversion and the ones used for interfacing with the diffractometer equipment i.e. reading the encoder fo the detector position, the ionization chanmbers etc. - -It is also possible to configure some scans/scripts to be executed during the acquisition. They will be normally called as system calls except for threshold, energy and trimbits scans. - - - -\begin{comment} - -\chapter{mythenGUI} - -\section{Introduction} - -To run the GUI just call: -\begin{verbatim} -bin/mythenGUI -\end{verbatim} -Possible arguments are: -\begin{description} -\item[help] This help -\item[-f myconf.txt] loads the configuration file to myconf.txt -\item[-id i] Sets the detector to id i (the default is i). Useful when more than one detector are operated in parallel. -\item[-offline] works in offline mode i.e. not connecting to the detector. Usefule e.g. to perform the energy calibration of the detector and possibly in the future to reprocess and visualize the data (not yet implemented). -\item[-size n] sets the size of the text to n (the default is n=10); -\item[-scale s] scales the size of the text and the root canvas by the scaling factor s (the default is s=1). It is useful when executing the program on a PC with low screen resolution (e.g. a laptop) and the window would then fall out of the screen."); -\end{description} -The configuration of the detector can either be set when startin the GUI using the configuration file or using the text client or even using the configuration tab of the GUI. - - -\section{Acquisition} -By pressing the start button in the measurement tab the data will be acquired, saved, corrected and plotted as specified. - -The stop button stops the acquisition i.e. if there are data left to be saved processed etc. the program will not really stop until the offline processes are done. - -Please don't be too nervous clicking on start and/or stop since this is one of the main causes of crashes (the program has been teste only for quiet users :-)). - -\section{Other functions} -The text client and the GUI can be operated in parallel (althoug you should not change parameters or acquire data at the same data from the gui and the text client!) and the values displayed by the GUI should normally be the actual ones. -However this kind of parallel operation is at your own risk! - - -The main parameters are group in tabs according to their meaning. To enable some tabs you should enter the modes menu and select Advanced/configuration/Debug -Here is the general subject of the tabs: -\begin{description} -\item[Measurement] Main acquisition parameters that you may want to change often -\item[Data Output] Where to write the data, in which format and what to to with them -\item[Plot] What to plot and how (only partially implemented) -\item[Actions] Allows to configure scans and/or execute scripts at teh beginning or at the end of the measurement. -\item[Time resolved] Parameters for time resolved (real time) measurements -\item[Advanced] Must be activated with the modes menu button. Allows to set some advanced configuration which you don't want general users to change (e.g. data size, external signals, advanced acquisition speed) -\item[Trimming] Must be activated with the modes menu button. Allows to trim the detector and/or load specific trim files. -\item[Configuration] Must be activated with the modes menu button. Allows to configure the detector -\item[Debugging] Must be activated with the modes menu button. Allows to test the detectors functionality, acquire serial numbers etc. -\end{description} -Most of the parameters are explained through a tooltip which appers if you leave the mouse on the widget for a few seconds. - -The configuration and/or the complete setup of the detector can be loaded and saved using the Utilities menu. - - - -\subsection{Mandatory configuration} -Where to find some important parameters (should be set only once, then it should remain in memory): -\begin{description} -\item[Hostname] Configuration tab. Press enter to update. -\item[Trim dir] Configuration tab. Press enter to update. -\item[Cal dir] Configuration tab. Press enter to update. -\item[Number of modules] Configuration tab or Advanced tab -\item[Dynamic range] Advanced tab -\item[Output directory] Data Output tab. -\item[File name] Measurement tab. -\item[File index] Measurement tab (automatically incremented). -\end{description} - - -\subsection{Acquisition setup} -Where to find some important parameters (should be set only once, then it should remain in memory): -\begin{description} -\item[Settings] Measurement tab -\item[Threshold] Measurement tab -\item[Exposure time] Measurement tab -\item[Number of frames] Measurement tab for non time-resolved measurement, Time resolved tab for fast real time measurements. if you need some action between frame see Actions tab. -\end{description} - -\chapter{Energy calibration} \label{sec:encal} -The energy calibration should be performed by illuminating the detector with monochromatic radiation at at least 2 (better 3-4) energies larger than 8~keV. The energy calibration should be performed after trimming and the trim files used should be properly copied in the trimbits directory and used as default. - -The data can be acquired either with the mythenGUI (by using the calibration wizard or the threshold scan utility in the Action tab) or with the slsDetectorClient (by scanning the threshold using mythen\_put 0:vthreshold), but since the analysis needs the use of root, the GUI must be used to finalize the calibration. - -In the mythenGUI menu Utilities/Calibration wizard it is possible to simply and automatically perform the energy calibration of the detector: -\begin{enumerate} -\item -Check the ``Detector online'' box in case you want to acquire the data, otherwise simply unclick it and you will be required to provide already acquired data and the details about the detector.\\ -The first time, chose ``Start new calibration'' and chose the directory where you want to store the data you want to acquire. The calibration file names have a''.root'' extension. \\ -The calibration should be perormed by acquiring always the same settings and with the same number of modules always connected in the same sequence. The clibration files, however, can be used for the modules also on different systems (i.e. different number of modules, readout board, etc.). A new calibration should be performed for different detector settings. -\item If the detector is online, the settings, the number of modules and their serial number will automatically be retrieved. If you selected the offline mode, you must provide the detector settings for the calibration that you want to perform and the serial numbers of the modules in the correct order (to do so, enter the 3 hexadecimal digits in the right sequence and press enter for each module - in case of error the list is editable). -\item Enter the energy of your beam (in keV!); \\ -If you are in online mode, the acquisition time should be chosen such that there are at least 1000 counts per channel at an intemediate threshold; the range of the threshold scan should be between approx 800-15*keV and 800, better with a step of 1 but up to 5 can be fine in order to reduce the acquisition time: it is more important that each step has a sufficient statistics than that the threshold step is low! After pressing ``Next'', the detector starts acquiring and showing the histogram of the calibration. When it is finished simply press ``Finish'' to accept the data, ``Cancel'' to reject them.\\ -In offline mode, you are required to enter the range and step of the calibration and to select the files (in the same sequence as the threshold values!). After pressing ``Next'' (enabled only if the number of steps is the same as the number of files), the histogram showing the threshold scan is drawn. Simply press ``Finish'' to accept the data, ``Cancel'' to reject them. -\item For the following calibration steps, check the ``Detector online'' box in case you want to acquire the data, otherwise simply unclick it and you will be required to provide already acquired data and the details about the detector.\\ Chose ``Add calibration step'' and select the file created prevously. The settings, number of modules and serial numbers of the modules and the energies at which the acquisition has been already performed should be displayed. -\item Add a new calibration step like in point 3. and iterate for all the energies at which you want to perform the calibration. -\item To generate the calibration files, chose ``Generate calibration files'' and select the file created prevously. The settings, number of modules and serial numbers of the modules and the energies at which the acquisition has been already performed should be displayed. -\item Chose the directory and the root of the calibrations files name. An extension corresponding to the serial number of the modules will be generated. -\item The calibration files for each module should be generated. For each energy you can set the start parameters of the fit and the fitting range (press enter after each change) so that the fitted curves nicely fit the data. The linear fit between energies and inflection points can also be checked. -\end{enumerate} - -\end{comment} - - -\end{document} -