From 6a80bc5b54dc18450f31186e42a01444a5a1109c Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Tue, 27 Jun 2017 13:00:38 +0200 Subject: [PATCH] new feature, set threshold without uploading trimbits --- .../commonFiles/communication_funcs.c | 10 +++ ....0.16.2 => eigerDetectorServerv2.3.4.16.0} | Bin 280601 -> 284169 bytes .../slsDetectorFunctionList.c | 64 +++++++++++------- .../multiSlsDetector/multiSlsDetector.cpp | 6 +- .../multiSlsDetector/multiSlsDetector.h | 3 +- .../slsDetector/slsDetector.cpp | 49 ++++++++------ slsDetectorSoftware/slsDetector/slsDetector.h | 9 ++- .../slsDetector/slsDetectorActions.h | 2 +- .../slsDetector/slsDetectorBase.h | 2 +- .../slsDetector/slsDetectorCommand.cpp | 28 +++++++- .../slsDetector/slsDetectorUtils.h | 2 +- .../slsDetectorAnalysis/energyConversion.cpp | 24 ++++--- .../slsDetectorAnalysis/energyConversion.h | 6 +- slsDetectorSoftware/threadFiles/Task.h | 6 +- 14 files changed, 140 insertions(+), 71 deletions(-) rename slsDetectorSoftware/eigerDetectorServer/bin/{eigerDetectorServerv2.3.0.16.2 => eigerDetectorServerv2.3.4.16.0} (56%) diff --git a/slsDetectorSoftware/commonFiles/communication_funcs.c b/slsDetectorSoftware/commonFiles/communication_funcs.c index 54ee6bb14..4dc18ae5c 100755 --- a/slsDetectorSoftware/commonFiles/communication_funcs.c +++ b/slsDetectorSoftware/commonFiles/communication_funcs.c @@ -561,6 +561,15 @@ int receiveModuleGeneral(int file_des, sls_detector_module* myMod, int receiveA myMod->chipregs=chipptr; myMod->chanregs=chanptr; +#ifdef EIGERD + //feature to exclude sending of trimbtis, nchips=0,nchans=0 in that case + if(myMod->nchip == 0 && myMod->nchan == 0) { + receiveAll=0; + nchipold=0; + nchanold=0; + } +#endif + nChips=myMod->nchip; nchipdiff=nChips-nchipold; if (nchipold!=nChips) { @@ -571,6 +580,7 @@ int receiveModuleGeneral(int file_des, sls_detector_module* myMod, int receiveA printf("received %d chips\n",nChips); #endif + nChans=myMod->nchan; nchandiff=nChans-nchanold; if (nchanold!=nChans) { diff --git a/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv2.3.0.16.2 b/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv2.3.4.16.0 similarity index 56% rename from slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv2.3.0.16.2 rename to slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv2.3.4.16.0 index 59f65ff9a078a59b3b027332a07f97c3759577fe..43cf5bbacd0e4f1b08126feb57b1a7311083febf 100755 GIT binary patch delta 52994 zcmeFae_T~n)<1ss0TFJ9S3^WZxRN0%>cwAyf}*J%f1{yk{<<0}7%D237RDv9u(Z&F z9xQ)Qqh*a1aV>Pl3LBfzQp2JdoX3hLn@1;`!5MlUn?djAz4qSc{z7}^`+YsH@Ar@I z*VpTK_FjAMwbx#I?X}ikd!Nhh@=jY0cPdX%f2!EtYw^fm*cBCzqO?;O{#Wq7TCG@v z#G@!`ouc;70ld8|S5cmfa{g>TIn1*EfK?TbE110*q-u5gk>DrP+E9H+yJFU;A8GfT zS{v>f8}fcoagC-ZVUg60HK;aJQSQ1^ro$Cwh)f@u2O_!%_!0E1n(2H+2{O}#iV|$5 zi$J`YE>)BeGrbi=o9PNg3GJd3^Nx?~0TE`w0Y$mPOdnR1a5H^GQ979EBl}!!XkgiqgqUUsRONX8Mw%+-at-qW?%U)1oL{%yg@wM9K6!!HUw=OouB`hcPgFw=(> zWuTcpq9}GVeOyse%=Ae`8DyrRBD) z601W;d{rGjs>vE${AF`i$*9`M;;*6#MttRV7jJ3K%-o|Sk8syU>J=UOs%TNyVQNUV zHT9uts~#Egm|Bygmq)~@ue_vJM?{5aC(&CM{Y*q+-&cN2#fqwqSE5rLilPO*@?(*s z`}*>DCAKPFNy=7&M-~MIt;ZO?(_=fv#Jn<{ifI_=Fg9JWs&)rqdu6+x)iJ8?!PTDP zeaw#H;G#Q%);sU0spC!dDOm)wE62k1@{Y4qybgEnqj%^MM#)%f%&?le6q~|$Lrc*5 z?R{(NC|xp22_;0^`_-I8UQKam7tJ~)sH5jwWBMNWiBlXFJdziQ>N(Iak<`SlXw70I z2hQu&)|V~Ewo)}t%Dhf7>MyS7>pR8GsyRvhr^YM2Hr_R9eTK~%oVw-M*3>EpNu8n; zwI^2m;>&WZ8)v*?m4gx;I3|F72f{QZXpg6CkCLSYy}VJs+9{^*gh(Xk6Mu@rz>_eb zekWd^&kt6jr~j8bX+c$73QRifio3O+Q&}=v-*RV% z;)#((VQM5zM@c`d1sx#QeVU7u4)yqA=|0bE=ihKv;>t((IG~7U*rWj&0 z;Q;bKAYU!>hmrph`6`(|g8W$xDzjVyjsx%>DmY~xa`@64$QQ``8RYjO?~wUMi;qJ1fHkd*L2H783(DdELVjaE?TMw^hb^01ndXc-E_%dq%D(Sf;i zPU<;b7DVm;l8W0P=CTp4Tcc(~?a%nR8r4w=ooR8o-6m=*raIjg)!pTe8qrRz+^IXe zXX-_4YAO!3c7R1ces3$ z`at_)t_X;}WFSul5VE6XA#X>XXihHP!nrC%Zc@D#^vnjpeaA8cb%y|Em2Fdzrw)b$ zv~5OP5)zYeYq`F)MmffwNOdiNq>n&(h#BK6FH zQ87P!L2?4>LP>?7La4J?iPnOi9<3khKZ2F$m--Lr`}7K`ghD>0s2nbN?wLa99h#4D zy?Q{@_#e0$^TP@5Wh>U(D$jGvVSf@ zKx~!$hoVo;cJxp4Z$I8U@t<$9Zu-@M zi3yXlfhwA;jaXlsdq6}?9iXPzCa>3r*b^c)Z-G&Y6&9nkhn{0koI2SFQ1r%!=C0q^ z3#~CqEojqu>RbvRtwbo+$)#FQ=@r6?m3Wm>KrB_?LM#tAc|v2WO&ZS*OoSNl?H2Qg^1r zM48Y_b7V_slTFw3>Xe5&T^EDh)Pt8OQ>yjkL5b>tU=_CUep^0$A<}xs2shzV+ge9Dcx3ammWW&hn_nmO8qld&X6(cdoB9O zA%in0` z@F_X6e!V|@nu&+oJTLy~CZXY;`o)|X_aBvrxS)C)%-kyBk)8&;{_JWAr{&-?fCsNi zc&tBsezJs<+4rfxsG(RE*!>G~>m_`MKRn+wCaM1Ll@+o+Ume~76f{V<=3jqJnS>Wl z_Ae+j5oPYUf~a~Y$SLwSXAj>@M5lPu*V-><&f|yfA|4&Y7Y3r51I83`NMzND)Af!yx5dR zOhL6N6jC9XQ**>*=_!9iwTC6527makOgxSL@Z%D$`Uq*U6&=5yBoL{Y{tZ6ZBRjb0 z4?l5H!khfzC(UJc$shi^v9f-%Km2q>Q8DHKQ_$jH@JW+waNQq%E=$5&{o(a;WK8jg zH}n$qS+GC+iz5QA7FqoZ8tr=P@bQ+cNCAdPsGBxKcaBK3{3=}7oekUd>JeSLrIDAz zD>;7^o>~=j8Lm?hEMZT*X~e9AuTG-~`_rss(P;foluxl`NzMcB#YO4Sx5n|+OyEe+ z&!tac6Lec%lqE~*2(+p{w?=<6BYaHFDPPaLCE%C27?Ik(4qm2nK8>-tg z{f3*Bxvbq8EvWE2{di_vv1ia@c`Lu|N}hlR>$eS3DCzVP|3 z>V?sI-RKy*ub^D$MiT@4Hm?xWoI+3{Soq+LKb05jZ$3YvLpVpvH$^pPbjO(9-8Ohz z9KDDZRv~(gi}b27%X-cyrjskeg<+3E+LLBzGAETdot3#XVmjQSH66^M>CRt9CH&#- zf2ZYu>DW%JUSzi9#PRKsM{M}yNQpe9XDx_YoK={?`5MTw)e|uOLeLsJ&>7?&y;m6` zXq`TrU>Od~#lyb}_d3F>yCI%s(SlYT^XVReqv-{D)7Yra1rw;58Qz-YKHWnP9habj zYsuph22C%$HPV6&vQu7eia9ztp*zP#4Vq4YpIgvUkRqG$a-U`!^kzp~-!Eu-X&PwL zNQp;(KdrYrsF8w4w%eUk{G)$5M& ziz9rezad4hA3t3E{71aH>UZ7OiycEMGFVgI&(IzB#bYPtye~$r$=9t~cPN(n@llE7 zqtBP!s7O0=X zx1Z#vi>fBAiSh_}HlHJ*c2DU|rHOrSC**k>AmkL;5E@xI`;oqW@+fqg^~;zDUyX1M zrektEV>_nI4Lc(U#$vTkPuHuaj9^>-m&jSx!=Ic_wu79J>L)+6q34s2Ku?_d$-x~{ zdg}wn#OnK}MTcGW5LP#BLFbxW$PKrkB$iGKmYO|lAcJnt8q8Mc&DmYM+`>kF3~iXT z)G{N~gUdes(f-_6fK8^}qQ#=xl^IDHe9naKaDG7hxttDq!}I}B9^>UZ8E5q98F4YU zn~aAL(w=cwr+13-x^vY{>Uw)`tclVYgGf;voiT!S&|79Cs=xbAcdYB$i%I;3sw`Pw(Xu-NDQT=TvFelD$ z`ak+kFZkpE{e#@lPGr8IvS;Mu4foI^1-v1(-2A zQx8keU>?@D74efuO{qJk2S1Rwc*a)nyqB-8B_2D!hPd*;_=25~7opOHcVIdmnZ7#M zuH25}3ufwD9~eNRcfK${{Y@AB>H~@Dhd;C#{)Z>@%-Il%lU}aQj#1~$)b000sUNoC zYW=yj`lEA(Ou0%D<4e5=nam?84|O0;hjKG+C&FnIpI6@RL0SmH8%ZoS-6sfdSH0td zUDdh^y0sutt$Vu-nRT0Kmbyh_@Du_J7c+G~&6t>}`pQvyzqyfm@uaT4ew$ap&ktqq1qz3s))Mn*YAu-N+b)y`AY}_;qV7M*&jm2^CB4maf%{MD)eG)o z+XH*DzMZSjTNq)vzrZtvj@2=7Gq>YVY_`9!_*YS9&e2aT9L)0mO^n&(c-kfBtH4v6 zm#5h)^ajUp^%%@5mf5k>ZCH40FIYI(_}ho9i+*@f?=ZQ8!5X``=zelQ7yBvwti=ZG zRvTb$v8L2qAT2^u%0seyl_WVxE);g&Z(J zZz~E}>-793A9Ok^*wZ(inB>IK6dg?{4*=C%x@zoO)1CUlwDT z8Jl5hOvkbqb;?1#h@kWQp-c4R%i?HJTwDgV@uMD|izRY)M{UGpK4%ga#vbr zPh+^Rz|W7ZAr@4*RSdv zK+>Rbt3ib68fX>G?lL0YyOh+Y7Y#G^a*DvjDIX0BVf?H-X!;HOK8wwX)?ju68y@SoZwM~ne3YG zER0e!ujrM9@jcp6Gk=Nq*WD4Bv=1_m1J3BJg~Qc@r}flzy~zt)7nkVk;T~KkeSa&h zHF6z6O}G{`YMj3H(Yt8w+QBiYD$$$QMX94U=%J7FhDP>Z%eUauNIC%LF*saG;4u)| zc_-!ttgc_2#b7*JG9MmE!FZJqR`Tc;lllvDuMc9X6tFTNqushYCK+#zNn-Dk(+ zUDG;ov4~d+Fn?wKl3103GLpW+TaQ@miC>$yv^a- zmlKOMrUj+lt;ZI{c@3HHX~gz}hZ}Bd$kO1`6eXys8}$Q41AFcz1%sXBsZ=NJRG(nz z0!nC(JdaDAqPG+cPoN&}`H^@*CtfDYHug~?Wp#(1wJ|2<9(iOHNbEiD>7^Uj3~B>T zGsmbY8~J2oF(eUo3QLj{bImj9iD;Z(<~-4xt<$$Y;cpW5Owb*hqGE=11Dl~Qhjqdm zwr5xv-Y_=9n11<*g-dq(3(K%Ra#kULMoK_g2U!LIGy(*7=rvge0W|nB@CxowY&-s! z1aN1D>;{6i(5$X4g-T8_;23a>{DKVPc-=MJH==7cFfzT<-&4_EamZ79+2=9CP+?@o2cPu!tcSk_hD@k3iG z9_~P^@@j@nZnmvkVq*G_9eMuYT5l!k+J=S3SQlEZ5U2bL-T^2c23_pAH0)K|->56k`;sP=t!P zD!eV7NjC(Yt8Uze&PuaKqxmg1D?++rW)!+$+dzaN0*T$0#)&;*Hr4IV%?Mp*gsY zd5QFH8GBuj^F$Y&gj#pZ#VxSAdx8w%g399+y}W!NL-4BHf0CZ*23hLfDcauTvbA6nib zL_{ox28;#DdwDlKbjQSE4?)!&nW$nC#5WoLK0$Yl76b>b#e^-sgu=e@dqHpvLW}gX z+dHf*>v?Ok%fftUBC_i#Z+FxXWB3p?CBKsoZsGBXsUt=PiK9JH--l5#E1%wd>n@)z z@$FL13(Y*{VJ=s1p00y>Qanshme1qXf^~7zH!g5IwYFsb%gEUWdG~`pSFt zUsqTW>G8K2JJ#muGk11TH~$n+fD^w0y>+L>bN(2QsL`${@4Cw2eVQ?y^j*Vl>;J?f z6t`>ffVo1O^AN3p~A!aU} zl-wfd7B^b2GNQ&~E6ly!9>i5#D4JWX1@-uX(kZsNCvV-f$B*bwtThpmID_q8SN+b) zuIiIGZ>WqJPBU9P!g8*jml?%RCBk6zU>4;RI|r+9{I zsut%9r2hjAwzH4k_(ET`_{NSYBlVRlJLuD1>}r|E8O6<1!HW;$WWaxir2B>Zvi!uO zbWg%<#iLtKy>3r@$|W8L@r(G)6ENSKz{Q3@{Z^78k*YvEHXQ}g#=!afTe6aIsKT&qfzf>}cPntC&6G5%z zID5^(MZ~+IB_O6+Q0H%MgSC%GoV}}efcofbZO)V)EzzC7h==b`^@}x@1ztI(OBPuN zhN+L>;LiW}1a7EqJva)nmaKz))pb|!>ZOA6@6afXkRWj;$c4rVG^Hwwz+=4K>2KeP zCMEcm{~Rv=l2{5WoS;vvPPaH{YQ*NMyqY%6&DDMz;04E%8&GGvth37pkHfFdv>yVsNNrqu}HX$Rp!oMK{s{dmnJ zglI!ugJK++)L0x#u%Cd?BUyU3YamXoN?pBiVZ&R82k^P4haAxOB8+dqC|r@!4)c>dozX`MW$ULDKTUyU`3Z zyxSXB9cuk)dk7k`_6ZMdMKmZ*Th*jR`nIE8)Ws+Mjqd(+LU$aK-3?F|;q2rX;)S;$ ze$m~51UP;I0r%pzgE&QSRC*|I{_5d2ha0yV>rWfZvDW>1AnVj-m%88zwuQ5G>-!zU zj(CuhzOOr;C@#2pm4duef%zvG*T%Qq7^>Ib^I4--x`v}EBYAwwM*;m0R!qH~re{5$ zsLo&AhVJUQ~qDT@V?xo_?t@gzdqu9%)Qa3kGTjXW=+#S z_@tAbc`n4_;OdgkKiz_9{9pt;WPihVs~KpSZq9)7*?9e5<2$NzuC#Hi=is`*iGFOS zJWmhR`~5CDEZj3N`}9>57E72D1|4R`ambF4NJ7E**pY$@tMuI1k0^_vBjMSKeQpy-;>tZxEFvS5)EfdH+D^>nqFlb)QU5kwQ)aHyTRs{yXi;^^ z&v}OG-?n%RgRcjeo!7<#%trj=xAEli{PrQASdGc>`(OGu8QxJ}d@55geSkWne;cmP zfI$M+r+*2qKcGK;I^ME4*fYH%GIWRDbh<09Dfx>O-wQtb@g3eB_E>7?3C{kEg;u|B zr(gVdxQJ14(d#?y7{=o{n8PZj1GrmkJf>|&5cCnt;%EkA|0k?=riln zEQ=>+_(=B%^%9wDI_6B0u{Rk2m`K|_;yP{jXxUbPa{pzUmAPbK;Jyx zwY4jY3lIv4O8Ax>P>-dRs=1AX48KimQ~mZQT;6bqJ@Vk!q;r@6=e;ctk!qLG@JxrkwIMO)p=785Yso@!mytGx8^_T>Gxv>Jybv= z1~@t+^A=lT^(%gi$b0lEzOMRP*X>%|!#VYh#n}A@#CQrW_^dU*5$nN!yzM4W#kKp)Kdy{L0gZ09YJ>qIThnHuj+CKL(OF`X4b-z8k$! z{jpN%^J|-4K0hjCR0ql$wri}vabXs_Q%}9vxj3g%Q!h*hA=YfgK1hi8g`Tu_%rjX! z2icxfLpvbUu?-V-8gKa3L6jSxN7Jb@>QqI^Iv4!v2s}-GeJxZQ`T3)#GlA$545y;0 zjr@q!Qzj5xh8m&kfpFPXZgnUmUDA&eh|d5q2=N(Ua7kXxB|Yg&eA+;?`xo`8xh%%z zy$5p}6cWyFGnoy(ODqgm) zcy6qC<%-wVub`_N^{roZ@07Y-lV5|%;pvyY8dK~_!bhX+G}d*qrcBD?O9LcrDszeW zE;f#vUUS8AIGSzx#MMhv+AX4KDBkq#`r-rMuP^=xznef2CuMRMv%NFaW#cZ4yvcS#v;xabGXR_V#4(J>2{< zlXzE>%P%^bVf;qDJRUGhVpX#d{e^R z+XZNAC)otWmPMK}hfaI&s}VWPni4$4s8U%}VgntM0Ja2Ow_CwEZ2lqyz7s%ui>7`) zls?MuqUU{+(YFht{u*(S4}Q~@Tg({E-f34az5bi-UG@@oJ7@RjuL*3QZQ1ds@x?A1 z$v)w+E3R0iIkS`QHww?P#EXMGxQaq;Qk6w2T5>7W_;y+&Pce79@=_U{8eM=~&bY_lqK^pH3iLC?f|x+!NYS>tV>ho3Y^2E@?LOoT(_=M=|U6 zg-o(x={zq9=Ss*ELd1l};Ux*-ntJX$NWi{or3wrfj37D&) z!0Lmfhl$)fv~x@^`_F`gv)eE)8Wn^07twUA|1i%Sbe;Ln|7KxL!iIdZPCs*HAZyiI zuOzCU^w4|#B~g7lT%Y`xxWtdog35G(X_+0fnCd0qW4cj`6@seee~D5*-mV||OMJKQ z&|M@b4K*v0Cc(jNC%x$}z1bB#^m}-4je64ekHpnnB?M9tnoA)atccc>d8hT`-wz+} z(V0VdUyhoqnlk@9aY^b;(!;Rd%O;DVobHAX|LJZ3_x%LwnyY$sdYt~?)lADNu4GXC zlz!mqBz946zIq>P)>D5NujU5pPI^V_r|6ZeTmSlCac(9*OybsoYgKe5Ve&9Z!!JY; zIk8I6Wl|LAx=K^tDj}H6mupIO51+hKl3WBXm6=>}e!$8!^>^*Sy)qgKuhX7O*+&!f z=D$Wg_z@lcV$uEfG$yx<%5S~sJ{k=g@RJ^NDNM!Ucw(GX$ zn24HY^kZ6_X2X6r^v~7ij{2tN?g=g&+l$W>Xtj&8Z5OR{bLJ!Uy5=z%~I#>T4EtM~QCz`#t*e*ZQdyQz&Wd|AKYHwH~7fa%r`(!BQOE3U?mxO^Zx8@LWMU8g+17U>ww2|Bg9dPyC0XvpK)U zS8r}5x&+s>H1))JjH7_~2^lzfn>wV6Cu5#c!8(v*tN{8Xbf3gc|6Vf&mM5Ha^#p7s zt&T&RH+?PY73p96qf^8oayy_H^0G8#*BjgzhMX9R^mg6aG7WdL94*7tnu1;3S(0AY z5)VLA%hZG#PF;#EkEF-k;uV+@rl}v`@a)GK33=ttIGId5>PXiJ+3ETD5PyRS) zV%`xhhhQC__ASv#z%Ufb5H?<&?9)RdADf?BQ`1OoNr7of%p5)QzjD&ihk1(73u&>j z-N)~JfT4N3fu_E{4%^F8!Q|z^gaoift^@xym`#{(iXhfVl4n$k<2!=;tApjqqUrIU z1iilMz?G!iu0Pa+Zhm=w*@)7>&=EgnaR#~ymzJ*oGpfcMSTEnf>eWBZ=)4?;{MYk2 zSezrY=mpnOh51sJ=Tqlm?fmMX?)WD@T5Qpa{`sJat{eZEFu;{W15B|kCsQKl$>kl9 zdhCi9vn$DPtix(5ZwWzjqdAI28|9y~Xgi@8T(^9WraXOt7~uJ>EcMuYO(`KS1J-JJ zgQgyXP#(*`4}WwqwjE=gjcLnRbTO>Y!xX9tm-XN{9Gi(Xv)iX@MKU#7)Oi?|?N|x~ z{6|_pl4W!%G&a?7XBl}!nzDk^;y)P=+r?xY_4)K5f>zPPe5GmX(T%$@*j@TtEf(XA z#mw4Od3cX(0g>MvR`f)7h|w9QUu=!DJX|M>m|@L_+t=+zidq}3Pri{DCzT3ZVEEe6 zB(!`iJYVC~%WrhWC!~jN^tHI6Gi>l;^U&_%jkqWmjZa=h6GbI`YKnC0&8S-xrS(Cp z^qUXk)6PRT<3b+3tf}wr*3aC$H*dF(7)nWaxLFYU&IQgvC12dlRo^+ydlWkW&SkiC z!s&73!|!@GY?AxNS&5H=5Sg-le#t1@3#p#nZJPQHZ74&bQsqxtarcgJc+@KITY2RN z-qw*{p{eiem2Fg^hE0=}e^_sF$EioYt6&dCt=P(K9%A<;ea#9hw(cxoaU=8V(Z5&? zBDBBW->*0_(^C$UiEF^H80`0gj`&ZZ4k^}8Vf#Q*i{y%_Wpru(+C&c zJ2uNU^0JuTuN6IW*Lu2sLE42*e>G(-4#L*HMCI|*ziCs<)NhLRp~*&)P_-P~6>iKP zVJHUItq2E4Y$XfDPxlc@a))sAWC2N|IVr{s9L zl#6L9^v-?(za&n20g_(fsVAn6uhUzI1UXY4k#GjZE8&Kfv93mOFpHld1wv3FJit={SAF0Pz^4Ol6Ev@Mdg*)Pf^hQ~Eh>y>WwlS) zdtTb}%s{O&+UOR-5GiRj3fi+lD_5S;)HmLfozkF8Vp;${c$-dfmd<_4Q=-#VHlI#u z!yb(3jh23%LV4+iw;I+^HePip#_UiwJYv;Y*$yt|;U)B2Q%}XLnkQi}HNQNM0SF&e zSz2ObhOw9kSFjhKE13LDJ2{KNhIKsts|sUt5qE11V{x5V6#>IIqHu8Cs_IGZKi)7L z&$6fp7FrU|fc^DjfL$=MEG(*T0e z9BM*YBb(>jaTLyiGsdAi*bA1|7J2fM!`TbPhu-6PrQoV$o>fy1g>f9Vf>t<7SsrIe zeU-iD^KgB2xK~9IMkc z_0?|1B(h!YC zD@#mRjrDzC3K#{qI=B#hnDw}~%Atln2VMHH{m7yT;WDRH=1;-v9%j}Ic^QtdYbyeMll}#^Qxv|X*4Fsz_iyi z8u>8{`=UnUKn$CRcWrYFd!0qplzG1PQ7fky$9uwX`oVe{mwU1`YE79jFM%zm_o)Qd zTVEL4V^=KeTH7&>-QkaA=h?PccD{65EP7q{cC{OAEX5y-p4JwN-XRc6Eof1LRo4*X zOd@-Mh|BHGo}>5m-h$}-B$01TVoO76s?*>R?CQ&U?Xt3v2-o@^Hu=G%a^kvC)rZYe zT}8BUG;DoYM6s*Dhv}a5_I@tzr-@1OrUB>6LBc(0z_Wbtc+!AV1R^-YrUWnQ6JqZE zC-b^wng@ruCVMC6nKW9bBta%JAkZkC=3S$9qp2^OI>^PHLmxPAQ{pu}L#Q3{Hff4d z4M#sV0E0Km`>~k5YxwpSiVE7YjCM=ZhxDagqJQo?pngL?m@AjvdoWXW!H7*}2`U(x znGA`;dwnwOKi)@^(Ffj_CEV6uz#aWj&t*3%`?G|or(VLgAF=DF(#&zfsjW8Z`?HBr zYwBplplrKYhC`DhhJ65wDz4!)qf8o-HO;9`rfTZunVvhtLiHTsZH4c1gd4Curq8pc zmGGk+G2S)U^*x1%8Q(ipn*D(m-VZc>sEC+uUXeBmabV-40q`9*k24wvumOW)B_|rI zn<-vldf%ck;2Z&uUv9pJPMBW)XuQ#}FY6)~zZ{mu9M z7Pok9p;wKR9)ohG^H9=Bv^k39^_8_-ed_E)ooER^-~-=Cu)%d}k5hZUm62saR{H_?FzgyG5a zhP?-iA|V-@!WNSd9ZG>3L%t=2JwtitAU25JM+ULs^lp~=2ePe(hy!3!?EOx!=%Y^U~oQ3Yz(KQy3lYAP=r9j1_hNHX)#Hm~nUrTOL!G zC2^(rmltoYwGU+$HnPy1lw3`HVg)*&ucpbm&PF<%epoughLx9h;(Ey_CA>!;M9Fak zNS8g+9>##y4+Fs)e=_S*TTGy7W9;a#RSWBk z%6r(bsG{$D@njGUebApXl_iWU+Ge&Bc;rvN3maued@2=##*febHUet~ zQ8y^?b>!Rs!$eJQ&uuc355t{j^1;#iKfx+cmzS14H>`{ZZ!4BFMhj6 zush>ic0Sj8DY(uxW~A@j81{5Fl?ZXB%SD<_46)ZXr?V&)@yKkcg<>`Jk(Z3fk!(=J zBjpkn4cH5nRMw8&?UhGl#-(u-;>d8XWjM|>l@4RcFJ3;c&i3;f|@1pdr1 z0v{*sQFBv=VXo)W=rWbiN4a$qJNkl75aeD&v#cWx!g{`=7j;(ARu7@r^+SyMvG8G69rMm9EOO{LR%2P8 zBl=r;&8W^}LyfZ~EW#L3#X8kSk7qZTWj&`+Q}ZE=8u_fLM!LrKsq2p#7m-hV7#Cal zPQotw+CW0;*<)e5n53x>?>1s5u&I^}ocG9&HVP*|sS8|*##a+qmAWC>a887BSPsdZ z$Z%01RSqm)B2K5bUD=T9-Kgc!9@IBjD;c#RUkoa5n-FHkaiHxHC^v5Q1z~vyDX*z{ zI0Ry2Idh=6$R$bbj!}{3^_t)f$0gD}WVCPF_Xm>shmkumsUxkHWm zNi1s6W8nfD`2>tNCxA^R#-rY0dfS!98qG0j>ay2vJpqqh6m%}b z%uithMlS0{J{(DkKTjX;CF@NPG^zCMJSJr6B1n;xmZe`9Wm6y+OW!jN;T>nTS;{Ys z&>bG1y5AU=rm$hdmX4Nq5OZSHe!Oi%gE_BDml#=7v1%W880+zlf)F5NWR6wL-;(M6 z^S9(1K{pejAX9kSwj0gcSqYZf&S^#54}WCk7X9a(=XfT1 z@br=G==fY}fX6FLnuSc}3^gseSC${I6nxLQVpKD=pRwu#cDE6m#X765^@cqQ8+)kW z^;v9r=f^#&7uYZ}51kM#;-|A$hd+Lu&_LNFYwBXj3N@b;KtE?k{B*kTv{GzEG*Q91X1QMvAZ;R*6a zU9(wNs%+0@uTbU2Y|$uqCVO+DuNgFBjYWLdO(tJc7f9m8Wk_5+Isk%0V->|hrX8}x ze@+(l-ZpH7Fq!eQ*x+c`Y!pfkK>aVcAQ)}DpTc?=PtO89*vD4QV#_T>a^Eu_#_<96 zqzdg@`2dV$(N)5E+0}c0XUU2x5b&hs4dQ|i`a}1!g+s+aS7#pT^irVkFt^7 z2o}G9DYoPOf&CfdjI71v%xFe)7o0`bwYIy{@dV;$Gp2iqf?U-vMlh9_aiYHuGm@!} z-NE7G=q%678`g(dRA++M&GCb$J_Jt+Q&RR2dj#)YIhesGq-xG8F^1$&jHcSC%3(__ zPsn9D?Vw>@0!ISyf+ZBDCy$ofJzp=@s9GY{$EhW3P{I?^Tupsj@|dDv{=2-`rKndN zETm=Xe5p#>?Cy*LUT?Cj7bfdD+u%EidY0mHQE$pSyOy!Xh~%PWw4vOV)TUlN>Ul_<^qLW#hgq0--YCsui6O-e znmTC-`9U;8yOx8riT#bF0uTkeR>4WZjN9Zpa}}G~*_D+Y7DV4Pn&Znds#dY6S+1;{Fu(9H zF&W*J-~eqL-Elf1CqTtG?YzC<3AGFL#V6Y#o-{7Z2rpnUi#hJ_ThuwKsbkLr_gIOW zjw?xlVMtGM2^Pk1>=c3XNd)i5z9ffE+d415f>sYnegOQO}!WAw*1eCnc`1%9lrS54q_Acj>RDE?JxS?^I3md)70kLiLwX!=YJgX$C%Bs7wc1GS>)+NDJm=ospTCola zdGE?*X>vwm8@853EvI^_F9o8WWAhPUB|)9+LqQ=Z_}GU6vo0Ku(L^nuYafo7<(ThG zaJG<59RE}(=}Ezn%nUhisf4p+lsH!btxlpf#r9OD*%xA2PSfiJu6A-wI=M>RwT>3% zY{RyW#aNzlWY{PkhJ4neurZ_N80C+^NkYDS9irKI*RO+z=E{`yi)8&wQGev!vVNv< z@)5RFbvb0c1G1h&)XSJ6>p2K79k*DFvyZZw>WJ5jUh82PpQt;VA~bclX`&;kiQVyZE?}?GRiV3#=O1IE z5})P@OjFaol#DCj6_uyC`w1inr>C7TS{`Eq5}%e^w6ra6DKJXM< z8TXllO>yOWXEF6X*|vO=`??4#clRQGNsO%QaE9-6c233HNj1@o7v;L(Wo-+?^;{liYt29|?)26v9VWbu^W~ z>yDNg;ZB-ODEJ}Y(e#gr*>VZ#z2+=Jb@4&rpuE!9in?m;Wx5p8FRcSERUYPOl-f$4 zSrn+1+RGWXEOQn)jL!d@VepErCD^LfRtge;E|v1n$h9?irr{{Txu9`=GX-Ly+TWmYXbPiC zIV6=nJi;>QRZ8kF*O*<(p0qq8)&IcrwU@P2T| zw?OA_-6N3on{MQ6VPhuNR8gB0+t#DReG({m$yHv>)0Ymu%-E~cwOg?_=tq5%bW(qp zk-yt$-a;Gfa?$d>psXVbAFwOu(cdk^yI19^zCeAu&k9} zoZHE=WL4Z@;7t>Z$98#uy#0g541+l(lD@`GgN4SNJOxhipS=;G2C)$B3V3d-gs_9% zS(VsoA)n9Rl}1@5TN?LVxTePT6c^Cd(}J^VA#pZEc}_FJce5F4cdWAAh+&(-knU1_ zv#Wdt9M2VLYInZlqaD6cg}Mo*Qjt+b{#j{2$m8N}me`l*UiO7gq#&2rE>?d){p1(0 z(FEtRUtoPlK35@RHKxCyS-H&HiO*L}g;sxCT*rZn_r3JTHhtfU*6bQw1y;rLsc0RB8B6w| zkhX!`LJ3{&shh2-(O*^|@Hl@D>rV{WxpY?okwPh0deFIq0V68;tVbv&dpi?c7sB zF3YY%eQML~IjY?%%Y6K&PFF-(xz(qqdT-lKr)7CB*><>3*&DKKXsRsS=Tk_RH_&PM zWFN#0KIN;8OeY&y?7R0lj3&qjOMk&tL3z0vD(Ix#drzhlKaQs|UPs8+0iXH@z*err zq&yuGxJ_@#bwuQgJ)KqiG_LmV%=#q>MnGrfKK083Ix9n2NQ$lD6y8C0rM%GRXBzwZ zMHZ*2)}ETuiC-Qd-Gz;OIP?+IR4bjsVYQTFgKgc2bNju*Gz!pPQMqH^qbC9iMmhxuNpu=io?5hy$?U9E45bG19hGYF5Vhduno2{^X z?;t~&EgIZWVl*6Lf2IbgeF>;S!$BKSV9>Gp(r{FSkoxlW(`T})6inHqJ7-Wb*O9ZCrYs# znVClkNI=AA@c%OhF5U07Yx;pKlXBEP-^cdg9us z9@3LgV@4|Keqm((ij7}TbKIlqpw_VGNa76SA2I~CmrKiGOh)^e(%rdkG8{iWaG=e2 zF8vB$zPPrUb+Dm4U_}0!4Vd9NkYTG+#Gl_2+ht)|U5B~8kK=#FhZ~%dJlS5*B+B{U zewGGDzz@_`{F?n4`=8@R(R)}OMh=&D_FvEw@8cA@;nZyvKl`uIM)v#g%)!_*?~6%n zmhZ?9*mJ`h&S{G3Zx{FmjmOzwRE#ny&6tFi?+{s`{Z5G8+3+Xh;s-2lhH*fa$D;fV zl-p$aU*O$O@evGpmxqaoQj9v;4mUYk)}dW5+3u7vxsLE&l;!xOs3imCG~J+f|~^aE<-lq*0ZZ{Gd%M zGocxM+n6!5!VsS|!xl>Hr>-w)aHglpRa2+Q#& z?Ai$<{WtI+uZ=Ti|AtMS+RUAC{9&mec_vPs=K2%Xd_}GRU&8Pee;{FhyJk2)#44!F z@zT|Nf#~X9JL)9+Zx-V^jCDgl)yVN4TX@)D?|S*J`Yps1`RL!VCk4?Da2xERs5U(`0$GnK{sNnDW>@s6V; zx%AqT#5ei!a*yQp3z){Q zt{K^1uyg7QPQIN924sWb_&vL;cH!^YJwY)?&CifY#rbR)jy4+A7a)gtpSpk$3*N04 za4F|#Be}g;MVgo4C`@Tmyio_ozc<0AY`;1ce}wEGZLB?xHyhBnnwFolI5V0o zHvPd2_}KJwM_eb^l^0BF4&FB6Jo+LVme9CDSnfZ(fdwYwLwns@(FyVW2jmRHj`{3Uy6U|a*I9E zMW6Z?;gkiZE5$;H;FTQ@=&UiIvpS!~b^e|G{x`!?D9m-rDEo>{ zT<$tah6+Z2B++!=q+bhvue@(}Nv@10GyJ)n2O`l|3G?JU>ps2x!{-?K&@G=^Vx+WGi{&OB=O0(gYhs1Ul z66_J0YL1h~=Olj7wod+WLi27*gAw};OPt~2%$76BSC_OoX1zwbSZ>mZ$!dgPrXwE& zp}!;r7pwa7KB-es3S>n>q(n!!r06bA(j2~WI6Xu6DxcE&>cPU3> zdok9h%SLaP=YRC!mD#1;r^_?4%QMvFp!3^q(`92|mv+aCV>NdEJ+3&*|C_bz&VL5l zb)2>h@(*sBJUwF^{uXyuU)0c`C#P3=k?5AcbSK-~Cp}ZK)i_StwPdM;iQwEB4ohqc zbA}*D6m&2DZrkryyIH-srbO*WwRbgfv%gpVmbK`Jgn&T^NH7rneDR16bNEV?u5y!c z_!0@IKdce3;V!Yt1OpoFxI@Vo3}@*ejen8GJ88tW(v_HcqxmxHo3OXQfD&(gdC$GQ>aMhOx^?;8W+%{p8Pv6+}7xupDI%?GYg$)R#uk|mq z-#u<5eUGp|-bLTjHlxwF_&pmLvKRAm3fB*=Qk^rkldrNECJ{v$PyE1Q1F>Cna}{Q^ zy6NQX_)fdJn2g%H(_-JZ^ zQTKQ1yxzF_cgetium#4fX2FnxW_T`pn~dZCfS2}HeKU18TCOb z(Pn6WXG=Tp3-|Bz1U$dC9bzZYXjJ?IeeFvUebvF={s%7m?{gT=7JP^C0YA>SJNChk zuEXuq7WQV;KKj^c2o1<|q%`)y1S9`PHuaWe?|*01|H#%9A2F}jZ~;xTdBV5XNkV+` zE&ll<+?@D?lAF0i2}x}BcP8HFo8bUk-pcD2iw3R!-o%km|IS=oS9v=-BJ>7td&KJB z*?atxvw+U7`Ve>3w=XL!?`5CDQ%2T*ljqVRb%w9!(jxq@;|HleMBnsWuG6e~J(u@- z+`@Hg@v)9$d4EFbwUFnMXRNr+`X{t?c)ztC_T1 zSL5CrtZQIHuIkW`t2(@)>JkjgO_pwPUE&@Ujv=J3yIfmzli~YopsR92l?0H$)f_Nz zHFqSGt2t!3nmfX8AGcL=D2JNcP`j6@J(&9TZsWMBK9}ff2BU65T6^)`+a4a3fWNtq zM-iYm5O8`MVdo$&xZ|}>s~XWx?N(h|-bKA|XOP;i zu{OVtx-v{{&9A*UNd53m_3~k(YP@Sn4IbpMDt4Hnvmh${DeHzN+C^P_l9;;F}T5zl2j zEg%GOijLuUqVe>?W5<(@2P5d1ji(9^5nN?d&Q#YF-`V8885#Wl+H>FkrOxj>;J$fh zHJ;;mPT^_5a~03^+WJ}Q#CFA*n3~La0Z$+-F#kW*4=lfZzP;$YqPA+D`g=>b|)XB4M2IKD$nO)4p&sz0*;9C|~`` zUR>DVcCWqcb{9^@yF$FzrF!#JMi0Sw`AL+SPm$Zb;jr7izEV6Jl93-GpRstGc}f$U z^4EQyQg^ZYxg589>mj#$8w$4-$oD00p2~PR!BGC3-RDVnyNx8bd)F!PR93m&l^~Qq z=+u*^G{I563%1>SDx-^8_n;Br_fb4i?i(u#@UC~emmR?y9p(okxDf7kuReq~8WuL; zJrCSCgExqI1npQUMuht8C_Ycj#rq82r|@oayGugxZgIPx1Rgci?S7^LZwz2N%GLF5 z_l~qnNNjbxE2sjf+YQ8OtK0oD2np(i_eH!x`7ie1J=yI(FdJ`&+kG(0NZ+p}MCDh4 z&|Y}xAH9>^?xm-U!u@Ju)beIUX;%dp{Y%A@>vk77jq3gCh(1NgUL`pGS@D4OLTpEs z%LKqbJ06Towj(n?x zfkc)CSc_3vrS@j?jJhiIKKufh!eV_|HMrg7Sw1ifnq3Ch<{9>v)CbjFxa;#0F0PG5 zlYDP8)#-Nc2cMKWA6SLkT?O>YaUa+rz?zZ2?gKmScE8ksZkmjjz7HB;RDT~7|NsB@ z|9KwhR<*NXeOZl)+IPUJ?z?1F_xHk+V-2cCyrx<)(qC2+Rju5}d08E%9*H#eysSPs zGAG@t=49d-i$}vV8BZ3T*?1gya`C`R%qhfEgr^kGRy^f+Dr)EbLJeX6r>$#&uCln+ zGxMKw$P3s>PTubqbnqH%Z znk(rNlE?weBidL{5KvQ1HP&dc291IcHDWCN=KuFkj$Jovv1Y#6d-m+vd(WQ7IV5UZ zp{{LLTaSm@=k8 zhyM;`Y?UrBWkQu+X3De(eXCv8>kXz%@6=mOnbDySnlgW`{=}5C>UH?jC}%h80#nXu z*ULmpaaB9>-4e?^=nn$tKaER z8DZWPgn3~VP7f>!sDnzswpEq+oK~ICscs7M?k3C_Iq?g_@to3&o>j|zPOE$x4yPlow#;#Gcup|kFt=|WIw8& z!*ojPW!&zWk(dc!bkSBp*cW4r1x)f1*VrQYyvv0Inu7hX`ie31wrxU%U* zj2l^D*BAUzoyv+t=tQnFY0>oVllX0ZkhD_k7Xqq@w%usXkQ_=0`xrGzby>gg*MVTBL8;ukO&tUsB;d zhY~pR5|VdVOamdVgoyE;W4qhuGzLE1Z#ZIM;{tc-P@NoN0j6t+8x1iIHi|Pba^A!g zVT%lVigC3duG2FQs>^)wSYPp*^?4ttIQ`f`Rp?8AdRPdr9)xwd-h2pNO)7#U$EyjW zW<=Yo2}7pU_G(J6soGvm++-MRuO^n8s_oT8I~Z)QCYKmq+pCEy^lPuGWM2Z3Kti29 z{i=E_EG+^$U>8fO(ld{$Jv1G^{13C6V>B}qeZvuTuP<#b>LvQKBkFu#T0NQNT5wby zbnD|s)$Pa#^{=TUUm9+;Y0dgquc^z!(mM$&T8NYv{~!C`p?~u_TJN`pRd~;P?gyX=6(HIk*z9Kf1|tO3^fnXfFY3;BA=7CL?0HvREW_p?L@#I% zA}{7&$3OfYc;~Okdru`x?=XaoJ@UTV7d8)r&%;4VeQm-rNgsP(E%ME4MPs|p z`#_!WT>w>)V^jYIjhuSmi@&J^d2LB@Burpup7|B1I`*8OZCY)6E*dpe+nx(*41;aY z`2(hE+jIUVQ?+As;ZehD+jIUgUH74SF09Otft!Sw`AZX*OZDM5)FhoZtnQ}pa}nzB zXzxer<*+h@-QrS&%A?=qzu)Ij^p0V5JZy0(xWTUBGVC1*fsWTv~_Mnrxhp&uB2D zTA@q?1}?NxJP4`4n`K5|SySNnVyjxhcY#YUh6-{#@aQGh4N{KoD7Thb*t#p0S^vPR zmaeF<%FJ=3rNWwRjw5{))_lzQk>%F;$UViT=+_O)(Fo?w<<>m&40dd}_3Ou{Ex=ZF z?#IKmdr=yf`e4)+e50gAZ~oNEoKe0F^=(32jR-jRs-5zF}m>o0quG(>b-icsrNt(>TRYTz)+|kIAP&W`S$9QcKMNxKMB0! zQhZKjg7mZYofvOqVP@@&8E zFlAo5KKi-!b|Z|39}9oj!jv#3EMViw4u+u|JjKB9-7{^$~#5ja8asuR8uo-?J zA34{?e#X%@zTVna$PG4uEEo_!=n!KwSg@jlV;R>lj$_=*INrgqD1OjC!NGwLz45el zIMY!S?l%f$KrvfUV58_vqo`gtYNbX63|*o<5#>s<0)E{&YJIbLq%lLq3(dEQlE1Y6DzE6O1cQld7|2pk#6a_diCEG9f~Ntyio;OWOcJxfC!3)) z6t$L;*xjrv#;nw{ndBavf4;WTB8Op% zL)`odi8UU43S_0pa=rU&YewcT>p#X@rHqM8rPJAuh?n# z6_B_Nay%W3i%HgFvlJDKuS5){1A7=>PcmyKusImP3cjC`*w+fTlrsJm$!wE(UHa1` zhtq*an7)_hSl!3az%k-`i{#btlW1Xv&+uz$Z-=tK; z(#8onlX4IbL2@U}CV99C{A~D13&7tJ#J`-xZJQ<(pY%g4qCwCJ{>Gx3R7Y|tV)$JD zd#O<-wt*p+6?lY1Js8wF##>0<7y%r?ct3ufH0Yw5@jE2r;1Q9{_zNgxB7qGNGMU8R z44vhNB$7DO3Ct4+Id2I%7}vQSt{`FlBa*0e1cqP+-8+Nm4I~~yz{*~x|BU1<%&5@V!Rp+2blg1iGxF!H}i)QNnEx| zzO`no>h^$-)eS{f>~ht^f(^Z$y;$$i zcX5$lp$~m);mcV?dIV*rIXsG9X90)JAlYoPI@>So5}0R17ybi*)D6eGdWCI7`^g}@ z71`4Gt;q?5uw5j><|5LIocV_RiR4k^H;(AABP4r^G5*{4y-T7GNU)0TzB0$tQCG%enteBz_GA z39cC})Spm%c2*<+9Az+?Y_-Xj3Pj5U6`}7|`d%iROh#2%U z!*Ra|sQc#{3>V@I7jYgxsB}1Xk2s%10CB4ZnZ6WqcXNOEJ)(+4Nh$Clrq_}@G73D( z_%0;cyVjwBGeE>+B<^T_xWtooQ7>9~IuTI+PNQZMcf%e2n-O3Rr^(VJR;bB)$>dNH ze?Rtcs|SA@vmR__Hqd4=_OZLrZIatUU$ur_uAyY%0XT+^fnl_ypGc(oo!+4#a309Adn}=+$&3G_GiZ5IuZXOGr-~iR5<=+Pc1(nm2w{1=0ma?8qYp`5 z1O8B6W%MnHF@%t0Pex868QP#LJTO$(dR_1F%*ZsaXx<)2eq<%dSK2V%kTbDJoCBug ztF_=?)fJ>~*%a@}0?k7s$Sk)}&Q=ZK7cQ0SldJW(0_XxrpCCmM&r zH%5S69ePPDsMei6=;~aI$WC6-?~yF%gA+M*N1r4yydF56$NGw7>qf|Faj-vyWI`|S zPR274teb#2y8TFw-J5~=Jnz2>xD8lgHNZLkRdl5o0fSY~0&XUmGz11#)V~%AR0Fdy z{l6e-pNZHD{@;?QJBt40+#gGEwIaj41QtOmY);_3!UB$v z)gyF8D3<@{eqE2UvHK7PWP`=w5YW}b7zU4H|c$U{ljp9LsrhCeYdx&IzHt<|#c!I>TbWDIf z7T1Z>GYla8On)8&91R+vkL0O{i3o}7Ct>7C4)wSXNe&u?*`jeL8*%)uK|_TjFy10* zhXT7aK8@r9gP<2P{bI6qVF35o7?1nKCA~19VEQ#A8elQm!}tc0f7*=+u)^_3Ks%P8 zKksz$F)cWUA_i<1V5^FM5-tkS$>E-~j7{k0>Seaz)yxLZ#N(`ReZ8&@_oPPsy$R#B zIpZZ{!XOcPBf4MShGw=~0?spYo6&uU*;bK4BusQ$N1_FeayQ6?4J0#QH?@iRA0^T5 z(c|Hs8TfsWtOgvK@HU3)55glP76#cr;cF5PRO#vn1X>u_T)!sflelsx#_Mor^J;1CV6)SI&dVWbit8FfjRf5?86?i z5fflTrM!#lcoU}0DKX_E5;F(%p{a1>**5fB?I@a>MDqDMJwDYlqwMhrw0Cm*?Ic&n z1CKJseRz&>kBW4slNyGR@x17;=Dkd9-GG1;4G@55W^z#KGb!x&^J2!Bc9zD-c#m?JM8lX!0} z=p&4?@H$glgof4JP==F*!G(;Gj`!w5fJ?^?y5$%!=auv|Bwwp=r=7tw=`5Xa5HDm1Z_yuT# zQ3#oP(y?ScPJ3no4$F1mt7V*xN6MYRJaA?yjw?e!xEiMmqiBt@)-rD-`A#qJHtyeq zaRz|do0%=xysLl@G5s0r?q`hvRxA_G=gqLT9Abt;=HoUS+YiB+e<3O0ey^YDcw@PG zIB39cNUq%o@0C0BES#re3qj}2IcpwCqmO$n%=+F6k_$)B(8C>Y;Oh?3I1AaKy90Ed zLDtNpDo2@qF*XN8 zteb;!kYsxzfZ0qrxQ^eF4!oZEA0YV~M7(0h=lmY`{T!n>=YgCTNd624aeJz@o$%V4AsIbpo>j)6z-wl4&3;d2LHa^1k8q-hUMSAO&`KIjh(G95T}`Gr;#R% zf$JPO(<4Yeoo)w!{rERM6>;YWeSqonNo*d#{8|{7lN>7reT4B%B)=$v{9eWlBwvPJ zvV!q?y3*PX54qd@^vzHV5$GCZ`ZFXN;Ze^f?(iJwJwfz792Y8p`F(5pTO@lr_3k)N zTI5M&2wtGMStS0gPLIT4zU!gC;y}y2io~@ez@?7(+-f`yW_9gg9&SktGr)o33CZtRpf^&~hqt!hZ4eapT4=^7HJcmyK zub#kpktDW3p!<5AmqzmU2Qa{}GeBM;iBcHYJzwVGrqx41{qdl4whsL4;JlSc!hbD6 z1J5uISK2!^0dvUb;lXdU!3{hBGR5md5Xh03hb!asPs z({^sn|0!8}Ms-9Y?iIaYW4-gA#Brw-Y}wrH5B4{JDiU!+jBUnWcJ!oXUT^4Zm;yhZ z{f*(aIs66Zk+{4_cN(z>a2dhPH8>cw!5^G>3vlWhsMI467gdDr?kjl#_S@qTIynge z*S#KM+1~}`MRF(zzlvwybl^6Y{}<5L2GQ}V-MwxC7f#0g!4J&VDVzs-QxJVA_T(yH SCm?UW?dH{iT}hsr!hZs83M{+; delta 51680 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 diff --git a/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c b/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c index 1302037fe..5d3a13cd4 100644 --- a/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c @@ -627,25 +627,30 @@ int setModule(sls_detector_module myMod, int delay){ for(i=0;iserialnumber=srcMod->serialnumber; } - if ((srcMod->nchip)>(destMod->nchip)) { + //no trimbit feature + if (destMod->nchip && ((srcMod->nchip)>(destMod->nchip))) { printf("Number of chip of source is larger than number of chips of destination\n"); return FAIL; } - if ((srcMod->nchan)>(destMod->nchan)) { + //no trimbit feature + if (destMod->nchan && ((srcMod->nchan)>(destMod->nchan))) { printf("Number of channels of source is larger than number of channels of destination\n"); return FAIL; } @@ -1164,14 +1171,21 @@ int copyModule(sls_detector_module *destMod, sls_detector_module *srcMod){ if (srcMod->offset>=0) destMod->offset=srcMod->offset; - for (ichip=0; ichip<(srcMod->nchip); ichip++) { - if (*((srcMod->chipregs)+ichip)>=0) - *((destMod->chipregs)+ichip)=*((srcMod->chipregs)+ichip); - } - for (ichan=0; ichan<(srcMod->nchan); ichan++) { - if (*((srcMod->chanregs)+ichan)>=0) - *((destMod->chanregs)+ichan)=*((srcMod->chanregs)+ichan); + if((destMod->nchip!=0) || (destMod->nchan!=0)) { + for (ichip=0; ichip<(srcMod->nchip); ichip++) { + if (*((srcMod->chipregs)+ichip)>=0) + *((destMod->chipregs)+ichip)=*((srcMod->chipregs)+ichip); + } + for (ichan=0; ichan<(srcMod->nchan); ichan++) { + if (*((srcMod->chanregs)+ichan)>=0) + *((destMod->chanregs)+ichan)=*((srcMod->chanregs)+ichan); + } } +#ifdef VERBOSE + printf("Not Copying trimbits\n"); +#endif + + for (idac=0; idac<(srcMod->ndac); idac++) { if (*((srcMod->dacs)+idac)>=0) *((destMod->dacs)+idac)=*((srcMod->dacs)+idac); diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp index 3ac129ddd..b018e8833 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp @@ -1139,7 +1139,7 @@ int multiSlsDetector::getThresholdEnergy(int pos) { } -int multiSlsDetector::setThresholdEnergy(int e_eV, int pos, detectorSettings isettings) { +int multiSlsDetector::setThresholdEnergy(int e_eV, int pos, detectorSettings isettings, int tb) { int posmin, posmax; int ret=-100; @@ -1160,8 +1160,8 @@ int multiSlsDetector::setThresholdEnergy(int e_eV, int pos, detectorSettings ise for(int idet=posmin; idet(&slsDetector::setThresholdEnergy, - detectors[idet],e_eV,-1,isettings,iret[idet])); + Task* task = new Task(new func4_t(&slsDetector::setThresholdEnergy, + detectors[idet],e_eV,-1,isettings,tb, iret[idet])); threadpool->add_task(task); } } diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h index 0fe1a164b..3eca95a8c 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h @@ -453,9 +453,10 @@ class multiSlsDetector : public slsDetectorUtils { \param e_eV threshold in eV \param imod module number (-1 all) \param isettings ev. change settings + \param tb 1 to include trimbits, 0 to exclude \returns current threshold value for imod in ev (-1 failed) */ - int setThresholdEnergy(int e_eV, int imod=-1, detectorSettings isettings=GET_SETTINGS); + int setThresholdEnergy(int e_eV, int imod=-1, detectorSettings isettings=GET_SETTINGS, int tb=1); /** get detector settings diff --git a/slsDetectorSoftware/slsDetector/slsDetector.cpp b/slsDetectorSoftware/slsDetector/slsDetector.cpp index 20e6976d5..6aa864fae 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetector.cpp @@ -2886,7 +2886,7 @@ int slsDetector::setModule(int reg, int imod){ }; -int slsDetector::setModule(sls_detector_module module, int iodelay, int tau, int e_eV, int* gainval, int* offsetval){ +int slsDetector::setModule(sls_detector_module module, int iodelay, int tau, int e_eV, int* gainval, int* offsetval, int tb){ int fnum=F_SET_MODULE; int retval; @@ -2903,6 +2903,11 @@ int slsDetector::setModule(sls_detector_module module, int iodelay, int tau, int if (thisDetector->onlineFlag==ONLINE_FLAG) { if (connectControl() == OK){ controlSocket->SendDataOnly(&fnum,sizeof(fnum)); + //to exclude trimbits + if(!tb) { + module.nchan=0; + module.nchip=0; + } sendModule(&module); //not included in module @@ -2936,23 +2941,29 @@ int slsDetector::setModule(sls_detector_module module, int iodelay, int tau, int if (ret!=FAIL) { if (detectorModules) { if (imod>=0 && imodnMod[X]*thisDetector->nMod[Y]) { - (detectorModules+imod)->nchan=module.nchan; - (detectorModules+imod)->nchip=module.nchip; + if(tb) { + (detectorModules+imod)->nchan=module.nchan; + (detectorModules+imod)->nchip=module.nchip; + } (detectorModules+imod)->ndac=module.ndac; (detectorModules+imod)->nadc=module.nadc; - thisDetector->nChips=module.nchip; - thisDetector->nChans=module.nchan/module.nchip; + if(tb) { + thisDetector->nChips=module.nchip; + thisDetector->nChans=module.nchan/module.nchip; + } thisDetector->nDacs=module.ndac; thisDetector->nAdcs=module.nadc; if(thisDetector->myDetectorType != JUNGFRAU){ - for (int ichip=0; ichipnChips; ichip++) { - if (chipregs) - chipregs[ichip+thisDetector->nChips*imod]=module.chipregs[ichip]; + if(tb) { + for (int ichip=0; ichipnChips; ichip++) { + if (chipregs) + chipregs[ichip+thisDetector->nChips*imod]=module.chipregs[ichip]; - if (chanregs) { - for (int i=0; inChans; i++) { - chanregs[i+ichip*thisDetector->nChans+thisDetector->nChips*thisDetector->nChans*imod]=module.chanregs[ichip*thisDetector->nChans+i]; + if (chanregs) { + for (int i=0; inChans; i++) { + chanregs[i+ichip*thisDetector->nChans+thisDetector->nChips*thisDetector->nChans*imod]=module.chanregs[ichip*thisDetector->nChans+i]; + } } } } @@ -3182,11 +3193,11 @@ int slsDetector::getThresholdEnergy(int imod){ return thisDetector->currentThresholdEV; }; -int slsDetector::setThresholdEnergy(int e_eV, int imod, detectorSettings isettings){ +int slsDetector::setThresholdEnergy(int e_eV, int imod, detectorSettings isettings, int tb){ //currently only for eiger if (thisDetector->myDetectorType == EIGER) { - setThresholdEnergyAndSettings(e_eV,isettings); + setThresholdEnergyAndSettings(e_eV,isettings,tb); return thisDetector->currentThresholdEV; } @@ -3226,7 +3237,7 @@ int slsDetector::setThresholdEnergy(int e_eV, int imod, detectorSettings isetti -int slsDetector::setThresholdEnergyAndSettings(int e_eV, detectorSettings isettings) { +int slsDetector::setThresholdEnergyAndSettings(int e_eV, detectorSettings isettings, int tb) { //if settings provided, use that, else use the shared memory variable detectorSettings is = ((isettings != GET_SETTINGS) ? isettings: thisDetector->currentSettings); @@ -3292,7 +3303,7 @@ int slsDetector::setThresholdEnergyAndSettings(int e_eV, detectorSettings isetti #endif //read the files myMod=createModule(); - if (NULL == readSettingsFile(settingsfname,thisDetector->myDetectorType, iodelay, tau, myMod)) { + if (NULL == readSettingsFile(settingsfname,thisDetector->myDetectorType, iodelay, tau, myMod, tb)) { if(myMod)deleteModule(myMod); return FAIL; } @@ -3327,13 +3338,13 @@ int slsDetector::setThresholdEnergyAndSettings(int e_eV, detectorSettings isetti int tau1 = -1; //not included in the module int iodelay2 = -1; //not included in the module int tau2 = -1; //not included in the module - if (NULL == readSettingsFile(settingsfname1,thisDetector->myDetectorType, iodelay1, tau1, myMod1)) { + if (NULL == readSettingsFile(settingsfname1,thisDetector->myDetectorType, iodelay1, tau1, myMod1, tb)) { setErrorMask((getErrorMask())|(SETTINGS_FILE_NOT_OPEN)); deleteModule(myMod1); deleteModule(myMod2); return FAIL; } - if (NULL == readSettingsFile(settingsfname2,thisDetector->myDetectorType, iodelay2, tau2, myMod2)) { + if (NULL == readSettingsFile(settingsfname2,thisDetector->myDetectorType, iodelay2, tau2, myMod2, tb)) { setErrorMask((getErrorMask())|(SETTINGS_FILE_NOT_OPEN)); deleteModule(myMod1); deleteModule(myMod2); @@ -3349,7 +3360,7 @@ int slsDetector::setThresholdEnergyAndSettings(int e_eV, detectorSettings isetti iodelay = iodelay1; //interpolate module - myMod = interpolateTrim(thisDetector->myDetectorType, myMod1, myMod2, e_eV, trim1, trim2); + myMod = interpolateTrim(thisDetector->myDetectorType, myMod1, myMod2, e_eV, trim1, trim2, tb); if (myMod == NULL) { printf("Could not interpolate, different dac values in files\n"); setErrorMask((getErrorMask())|(SETTINGS_NOT_SET)); @@ -3365,7 +3376,7 @@ int slsDetector::setThresholdEnergyAndSettings(int e_eV, detectorSettings isetti myMod->module=0; myMod->reg=thisDetector->currentSettings; - setModule(*myMod, iodelay, tau, e_eV, 0, 0); + setModule(*myMod, iodelay, tau, e_eV, 0, 0, tb); deleteModule(myMod); if (getSettings(-1) != is){ printf( "Could not set settings in detector \n" ); diff --git a/slsDetectorSoftware/slsDetector/slsDetector.h b/slsDetectorSoftware/slsDetector/slsDetector.h index fa3cc8e25..90daa4493 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.h +++ b/slsDetectorSoftware/slsDetector/slsDetector.h @@ -953,10 +953,11 @@ class slsDetector : public slsDetectorUtils, public energyConversion { \param e_eV threashold in eV (detector specific) \param gainval pointer to extra gain values \param offsetval pointer to extra offset values + \param tb 1 to include trimbits, 0 to exclude (used for eiger) \returns current register value \sa ::sls_detector_module */ - int setModule(sls_detector_module module, int iodelay, int tau, int e_eV, int* gainval=0, int* offsetval=0); + int setModule(sls_detector_module module, int iodelay, int tau, int e_eV, int* gainval=0, int* offsetval=0, int tb=1); //virtual int setModule(sls_detector_module module); /** @@ -987,17 +988,19 @@ class slsDetector : public slsDetectorUtils, public energyConversion { \param e_eV threshold in eV \param imod module number (-1 all) \param isettings ev. change settings + \param tb 1 to include trimbits, 0 to exclude \returns current threshold value for imod in ev (-1 failed) */ - int setThresholdEnergy(int e_eV, int imod=-1, detectorSettings isettings=GET_SETTINGS); + int setThresholdEnergy(int e_eV, int imod=-1, detectorSettings isettings=GET_SETTINGS, int tb=1); /** set threshold energy \param e_eV threshold in eV \param isettings ev. change settings + \param tb 1 to include trimbits, 0 to exclude \returns OK if successful, else FAIL */ - int setThresholdEnergyAndSettings(int e_eV, detectorSettings isettings); + int setThresholdEnergyAndSettings(int e_eV, detectorSettings isettings, int tb=1); /** get detector settings diff --git a/slsDetectorSoftware/slsDetector/slsDetectorActions.h b/slsDetectorSoftware/slsDetector/slsDetectorActions.h index a920854b8..a0db61878 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorActions.h +++ b/slsDetectorSoftware/slsDetector/slsDetectorActions.h @@ -210,7 +210,7 @@ class slsDetectorActions : public virtual slsDetectorBase /* *\/ */ /* virtual detectorType getDetectorsType(int pos=-1)=0; */ - virtual int setThresholdEnergy(int, int im=-1, detectorSettings isettings=GET_SETTINGS)=0; + virtual int setThresholdEnergy(int, int im=-1, detectorSettings isettings=GET_SETTINGS, int tb=1)=0; virtual int setChannel(int64_t, int ich=-1, int ichip=-1, int imod=-1)=0; diff --git a/slsDetectorSoftware/slsDetector/slsDetectorBase.h b/slsDetectorSoftware/slsDetector/slsDetectorBase.h index 119c0554d..0cbc4c14d 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorBase.h +++ b/slsDetectorSoftware/slsDetector/slsDetectorBase.h @@ -429,7 +429,7 @@ class slsDetectorBase : public virtual slsDetectorDefs, public virtual errorDef virtual externalCommunicationMode setExternalCommunicationMode(externalCommunicationMode pol=GET_EXTERNAL_COMMUNICATION_MODE)=0; int setTimingMode(int i=-1){return slsDetectorUsers::getTimingMode( externalCommunicationType( setExternalCommunicationMode(externalCommunicationType( slsDetectorUsers::getTimingMode(i) ) ) ) );}; - virtual int setThresholdEnergy(int e_eV, int imod, detectorSettings isettings=GET_SETTINGS)=0; + virtual int setThresholdEnergy(int e_eV, int imod, detectorSettings isettings=GET_SETTINGS, int tb=1)=0; int setThresholdEnergy(int e_eV){return setThresholdEnergy(e_eV,-1);}; diff --git a/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp b/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp index c51039534..bc67deeca 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp @@ -552,6 +552,10 @@ slsDetectorCommand::slsDetectorCommand(slsDetectorUtils *det) { descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdSettings; i++; + descrToFuncMap[i].m_pFuncName="thresholdnotb"; // + descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdSettings; + i++; + descrToFuncMap[i].m_pFuncName="trimbits"; // descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdSettings; i++; @@ -3289,10 +3293,10 @@ string slsDetectorCommand::cmdSettings(int narg, char *args[], int action) { return myDet->getDetectorSettings(myDet->getSettings()); } else if (cmd=="threshold") { if (action==PUT_ACTION) { - detectorType type = myDet->getDetectorsType(); if (!sscanf(args[1],"%d",&val)) { return string("invalid threshold value"); } + detectorType type = myDet->getDetectorsType(); if (type != EIGER || (type == EIGER && narg<=2)) { myDet->setThresholdEnergy(val); } else { @@ -3304,6 +3308,25 @@ string slsDetectorCommand::cmdSettings(int narg, char *args[], int action) { } sprintf(ans,"%d",myDet->getThresholdEnergy()); return string(ans); + } else if (cmd=="thresholdnotb") { + if (action==PUT_ACTION) { + if (!sscanf(args[1],"%d",&val)) { + return string("invalid threshold value"); + } + detectorType type = myDet->getDetectorsType(); + if (type != EIGER) + return string("not implemented for this detector"); + if (narg<=2) { + myDet->setThresholdEnergy(val, -1, GET_SETTINGS, 0); + } else { + detectorSettings sett= myDet->getDetectorSettings(string(args[2])); + if(sett == -1) + return string("invalid settings value"); + myDet->setThresholdEnergy(val, -1, sett, 0); + } + } + sprintf(ans,"%d",myDet->getThresholdEnergy()); + return string(ans); } else if (cmd=="trimbits") { if (narg>=2) { string sval=string(args[1]); @@ -3386,7 +3409,8 @@ string slsDetectorCommand::helpSettings(int narg, char *args[], int action) { if (action==PUT_ACTION || action==HELP_ACTION) { os << "settings s \n sets the settings of the detector - can be standard, fast, highgain, dynamicgain, lowgain, mediumgain, veryhighgain" "lownoise, dynamichg0,fixgain1,fixgain2,forceswitchg1, forceswitchg2"<< std::endl; - os << "threshold eV\n sets the detector threshold in eV"<< std::endl; + os << "threshold eV [sett]\n sets the detector threshold in eV. If sett is provided for eiger, uses settings sett"<< std::endl; + os << "thresholdnotb eV [sett]\n sets the detector threshold in eV without loading trimbits. If sett is provided for eiger, uses settings sett"<< std::endl; os << "trimbits fname\n loads the trimfile fname to the detector. If no extension is specified, the serial number of each module will be attached."<< std::endl; os << "trim:mode fname\n trims the detector according to mode (can be noise, beam, improve, fix) and saves the resulting trimbits to file fname."<< std::endl; os << "trimval i \n sets all the trimbits to i" << std::endl; diff --git a/slsDetectorSoftware/slsDetector/slsDetectorUtils.h b/slsDetectorSoftware/slsDetector/slsDetectorUtils.h index cc354b737..81da358ee 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorUtils.h +++ b/slsDetectorSoftware/slsDetector/slsDetectorUtils.h @@ -421,7 +421,7 @@ class slsDetectorUtils : public slsDetectorActions, public postProcessing { // double* convertAngles(){return convertAngles(currentPosition);}; // virtual double* convertAngles(double pos)=0; - virtual int setThresholdEnergy(int, int im=-1, detectorSettings isettings=GET_SETTINGS)=0; + virtual int setThresholdEnergy(int, int im=-1, detectorSettings isettings=GET_SETTINGS, int tb=1)=0; virtual int setChannel(int64_t, int ich=-1, int ichip=-1, int imod=-1)=0; virtual double getRateCorrectionTau()=0; diff --git a/slsDetectorSoftware/slsDetectorAnalysis/energyConversion.cpp b/slsDetectorSoftware/slsDetectorAnalysis/energyConversion.cpp index 2b1a38402..40a673f88 100644 --- a/slsDetectorSoftware/slsDetectorAnalysis/energyConversion.cpp +++ b/slsDetectorSoftware/slsDetectorAnalysis/energyConversion.cpp @@ -138,7 +138,7 @@ int energyConversion::writeCalibrationFile(string fname, int *gain, int *offset) -slsDetectorDefs::sls_detector_module* energyConversion::interpolateTrim(detectorType myDetectorType, sls_detector_module* a, sls_detector_module* b, const int energy, const int e1, const int e2){ +slsDetectorDefs::sls_detector_module* energyConversion::interpolateTrim(detectorType myDetectorType, sls_detector_module* a, sls_detector_module* b, const int energy, const int e1, const int e2, int tb){ // only implemented for eiger currently (in terms of which dacs) if(myDetectorType != EIGER) { printf("Interpolation of Trim values not implemented for this detector!\n"); @@ -168,8 +168,10 @@ slsDetectorDefs::sls_detector_module* energyConversion::interpolateTrim(detector } //Interpolate all trimbits - for (int i = 0; inchan; i++) - myMod->chanregs[i] = linearInterpolation(energy, e1, e2, a->chanregs[i], b->chanregs[i]); + if(tb) { + for (int i = 0; inchan; i++) + myMod->chanregs[i] = linearInterpolation(energy, e1, e2, a->chanregs[i], b->chanregs[i]); + } return myMod; } @@ -180,7 +182,7 @@ slsDetectorDefs::sls_detector_module* energyConversion::interpolateTrim(detector /* I/O */ -slsDetectorDefs::sls_detector_module* energyConversion::readSettingsFile(string fname, detectorType myDetectorType, int& iodelay, int& tau, sls_detector_module* myMod){ +slsDetectorDefs::sls_detector_module* energyConversion::readSettingsFile(string fname, detectorType myDetectorType, int& iodelay, int& tau, sls_detector_module* myMod, int tb){ @@ -372,19 +374,21 @@ slsDetectorDefs::sls_detector_module* energyConversion::readSettingsFile(string infile.read((char*) myMod->dacs,sizeof(dacs_t)*(myMod->ndac)); infile.read((char*)&iodelay,sizeof(iodelay)); infile.read((char*)&tau,sizeof(tau)); - infile.read((char*) myMod->chanregs,sizeof(int)*(myMod->nchan)); #ifdef VERBOSE for(int i=0;indac;i++) printf( "dac %d:%d \n", i, myMod->dacs[i] ); printf( "iodelay:%d \n", iodelay ); printf( "tau:%d \n", tau ); #endif - if(infile.eof()){ - printf( "Error, could not load trimbits end of file reached: %s \n\n", myfname.c_str() ); - if (nflag) - deleteModule(myMod); + if(tb) { + infile.read((char*) myMod->chanregs,sizeof(int)*(myMod->nchan)); + if(infile.eof()){ + printf( "Error, could not load trimbits end of file reached: %s \n\n", myfname.c_str() ); + if (nflag) + deleteModule(myMod); - return NULL; + return NULL; + } } infile.close(); strcpy(settingsFile,fname.c_str()); diff --git a/slsDetectorSoftware/slsDetectorAnalysis/energyConversion.h b/slsDetectorSoftware/slsDetectorAnalysis/energyConversion.h index 8aec3cb47..608246e6e 100644 --- a/slsDetectorSoftware/slsDetectorAnalysis/energyConversion.h +++ b/slsDetectorSoftware/slsDetectorAnalysis/energyConversion.h @@ -88,9 +88,10 @@ class energyConversion \param energy energy to trim at \param e1 reference trim value \param e2 reference trim value + \param tb 1 to include trimbits, 0 to exclude (used for eiger) \returns the pointer to the module structure with interpolated values or NULL if error */ - sls_detector_module* interpolateTrim(detectorType myDetectorType, sls_detector_module* a, sls_detector_module* b, const int energy, const int e1, const int e2); + sls_detector_module* interpolateTrim(detectorType myDetectorType, sls_detector_module* a, sls_detector_module* b, const int energy, const int e1, const int e2, int tb=1); @@ -103,10 +104,11 @@ class energyConversion \param iodelay io delay (detector specific) \param tau tau (detector specific) \param myMod pointer to the module structure which has to be set.
If it is NULL a new module structure will be created + \param tb 1 to include trimbits, 0 to exclude (used for eiger) \returns the pointer to myMod or NULL if reading the file failed */ - sls_detector_module* readSettingsFile(string fname, detectorType myDetectorType, int& iodelay, int& tau, sls_detector_module* myMod=NULL); + sls_detector_module* readSettingsFile(string fname, detectorType myDetectorType, int& iodelay, int& tau, sls_detector_module* myMod=NULL, int tb=1); /** writes a trim/settings file diff --git a/slsDetectorSoftware/threadFiles/Task.h b/slsDetectorSoftware/threadFiles/Task.h index e90deb9c2..5ce30d9a5 100644 --- a/slsDetectorSoftware/threadFiles/Task.h +++ b/slsDetectorSoftware/threadFiles/Task.h @@ -129,8 +129,8 @@ public: Task(func2_t * t): m1(0),m2(0),m3(0),m4(0),m5(0),m6(0),m7(0),m8(0),m9(0),m10(0),m11(t),m12(0),m13(0){}; /* Return: void, Param: none */ Task(func00_t * t): m1(0),m2(0),m3(0),m4(0),m5(0),m6(0),m7(0),m8(0),m9(0),m10(0),m11(0),m12(t),m13(0){}; - /* Return: int, Param: int,int,detectorSettings */ - Task(func3_t * t): m1(0),m2(0),m3(0),m4(0),m5(0),m6(0),m7(0),m8(0),m9(0),m10(0),m11(0),m12(0),m13(t){}; + /* Return: int, Param: int,int,detectorSettings,int */ + Task(func4_t * t): m1(0),m2(0),m3(0),m4(0),m5(0),m6(0),m7(0),m8(0),m9(0),m10(0),m11(0),m12(0),m13(t){}; @@ -178,7 +178,7 @@ private: /* Return: void, Param: none */ func00_t * m12; /* Return: int, Param: int,int,detectorSettings */ - func3_t * m13; + func4_t * m13; };