From 6823e3065bd9316d9ca37504a8968c7f1d325428 Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Tue, 5 Jul 2016 12:01:41 +0200 Subject: [PATCH] feature: tau is now read from calib file. if not there, it is set to defalt in server value, but switched off. load trimbits will not touch rate correction --- .../bin/eigerDetectorServerv2.0.3.11.2 | Bin 268631 -> 268847 bytes .../slsDetectorFunctionList.c | 35 +++++++++++++-- .../slsDetector/slsDetector.cpp | 28 +++++++----- slsDetectorSoftware/slsDetector/slsDetector.h | 3 +- .../slsDetectorAnalysis/energyConversion.cpp | 16 ++++++- .../slsDetectorAnalysis/energyConversion.h | 7 ++- .../slsDetectorFunctionList.h | 4 +- .../slsDetectorServer_funcs.c | 42 +++++++++--------- 8 files changed, 94 insertions(+), 41 deletions(-) diff --git a/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv2.0.3.11.2 b/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv2.0.3.11.2 index e18a0071d5bbb64c7d598206ae731d7522d6ef49..6e52a63a8021b277dbf5f6866aac0997d8858903 100755 GIT binary patch delta 49907 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 delta 47743 zcmce<4_uW+);RvmfCyK_t0EF2UJ(%#^@6CNpjSkD6jU@cG}No1p<$w;VWC{OYS?Ov zjyYOrSXS6#QE6bW753t$trotkyIS-vzS%BrRMcAOu6DoY%skKihxYF8_xpZ+em>V{ z=FFKhXU?2CbLPxE4{sbZ{`oCqWh6aSvMXxogw5v^3O_~Zq7e9Bf&ZyZG5W}#qR_(% zjcWmTSFM~vc^s6B->#-Hh9@mXDt~YLl9fJmcmpf+ok_PPIJ^kGHmp{Hwsbv=DdQF`j>lZw(yPd6z_Z#{iZ zQG)gKMQFc|o@r5(5IucOQTpoXc0~!*(>D|)Oi$ldlzv)ztFNMj>*+v6>941Q6=i^) z4p$VDo{mzKftW4@v2Tr2lt{fGQBelz=@dnY($ndRGFVS%D#{Q&ovkP_dOBB8V)b;M zq72p31&T6EPZudloSrUGltsh!%oar%p{I8!%1AxEM^Vgrx=K;v_4HvyNzl`^iZV)1 zA5)Y>J$;g8bqkBw@Kxy<`id>WadV_iQ6?Q!{8gWgL{&%^l@8p`D!L{34X*)^KWpq3 zLbvT;m%9xZ>_7g$ZGjV8jlQK{bYzuH+*Voo-ywzL|J&gx-QHobR4H-e9os5dc;HZ| zu=iVHV)=n1yBL!mwi#Jf;1jewkA-%Rhn@@Eu-CS3ps6;+7nCXq zIHIE(M+8FoaZwIj+4==QBVqv8okd{jfBvHw2Tt`VDq{`Ck;I?188hI2Yw%e3zo2LI z%yp}Pn?PtWP;gU4_Gy%(RG+o`os^w~*Bp91(RSZmJ^zjc!!IfLEq8Cg0q zuq1#6BkyIy6a_KOiUtetd1a=}*Cb%p5rxo?DKHwXT7C=UM?=0@%kO~vV8}OW`6|fw zfqb2oKMeUUkgwMAwZOuUD%iV94R8zqUjc$m%fpmddkOM|TD}SLry+0E^39Mx4*4uC z-varUA#c(0*C78aX9r9ZtZ_@HNAiv%S0HX%D4S;1Vu6JZaMKLG?Or*kFDE1O% zL}7_S_N0QcB(DJNFX*jLf`szgvWZGysZGVn?7zt*RjM+eycTNun_`q>O7$qO zW$nEe_vwzMo#uVuK0>K zULzJ>wTX0NJ^J;dN4qHU$pJuhg%4yD7W{z7)b1t!}xN`d76=oVfhdy|R6%Dr&!fp&S%Zq!4@KG|zDgm~6$j*d>ahV@}R=%)H) zj~3*WQC5xS;3O+>>685|3y;sZ?-cL`E66LS5i8y_3S2X^z1u68Eq;t))E=3w$YG7~ z5r$D!S~j1x#YfZfI%Z6Gj_xdEwFwEmMjZyJ8C_#FXBz8Bn1H3`QR7N?7N(kvN^)#+ zwbVOdN}wSfKCVE6E3ye4o?5BFk9oo;p3~qBo^Xp*gP-((m&U3lt)S7PAXc?$@N=H< z=}j8E*%LlPr=zV>I-@gnMgu+ZXNMx4(p|%ZX>#lFoOZ1NF(X})m}k`Bs9J9LIhh(9 zod7rZf*l$hZJ`@{aiRuCn_22skf%4C=vm>B7Og^(Cwyg&1{XT)VzgkN23I}tAJZAl zbiqq;>J*6sI5b__-Rbpvtqt!8i?G?Fm2Btica^!e7zxYdqmc&S?0x zp77Gwv$cXI&w{svy8^T0j3@lK-m{CI@CKdEWl#9K8l1W-DRlThZiseEhf#}Xh4=C` zhFUz~ALtTl^@N|gso`Jqgg13)@D5M-M-~l!1K}y!v;mIJ?$8QudRF+uZ4G|g6aGme zt4f+`7^MjUEVFe+A~PjN8@5+Slb&&%WhF;aC@D%_88)h2gU$vzXwo%$P+YP&B@ouI zP|<)50G4sP4T*uWJ;*kmTgzsS4@@hs!$neC-F!>@VAb*~Kc+35!LYCf%Os#!@)OrGd-TVFKs?W3|urQ$# zA-PNzl`_IFF*|91&uwN(HM5G8XAFr&0vneqQ|j;CyU~%l+%Iv5>T~~SmOBA<33_kR zMFkJf=>DF%O8~u%ax151+o(ON&(!bra$wn9Hc`4yD3M*!<#m#Qiu_a)>^xRfJ(r-&grOt;m3Z~NhBCE*dd6DqMuWbU|N^W?lpth8>{@;tck;LI7=o*;38W!aVaf7 zw%Y=ZY7R@ZJnhxjphWPV(--OuvQ~Qtn=>iY3u{Co_{fvr)UiaXU=(fLoFgK{qYZW) z>v$++X=38tnV!5IdRPR@efUV5k7LpSB@xKMK#dMXSgIAI@#yvneMbn*&Ik9zp!%f6 zyEPBH$tMz@G10fWv-T-d>6@qFF@!xd zbpU;H6DyetkkKsg{vqsZfYf~h$*HvNWdV8eet;}wRrjYwO6>*h3rDVCSL~&2sqwqj zcMPLllc7=F;6C)0X=}mphq;TBE*oh$hq&a0=%M!-;_)Y7h;caOR98Mq=9TrNFB>_1 zvM@B$w;4v`YzK}&e9bdcm?dM*|Alsw7kajPx{KcK5cXE47^~(?Xd6v~Y}-0xQLplR z*qIqc=OBDxGk_{J&nQPmvuCa~jMml`!RRv~quWwVIA7&dw0(e^!!a{h(X0_6PK)I( zsAH^QRz%pn1U32s>zLKI{~ELtz=TOv>Nl3G=qIK)PU~GmKsBPWgnH*>37%TARvO0m zBNNH7z*E-jFgofetF(l$^4adwcK7^8S&upXeRgWJWe2rM%c{4IW6S5L*vYy%YYk)K zoDz|vF@*j0fnn|=g4TUZb_{)Y8nb4H4V4Dn%g75;35t@7TOHdAO0cTDJDeTPj$S$j zw_;K5a~mZG(Vk!#XEEdUUYZbT=yj`Wai8;O@ZF^^cov4x{49%`I|7Y>jrU~}AMs~T z&V3L&cX2LsZi`D=^TOzeqpUd{q&3f7TCjSpV|^bSHFFGZ*NyI+Vq8k~8G)+hZ&e^F z0ULI0HA_TXv6?CMyEHimBUk#W2a42}z472;WW|^RtXva3%Vo#RPUehrlkx8P_TigK zo`yXdXuz(CigDLs6rqeC#hb?5gx11cHfY#(RyQB^QK+qb*?03rBUuZ|4Pylha%vUL zWh?T7*u;khxHZH)rgbOFeNSzTJ;Y48VIgC;h(HkxRM`+cP&9T6%gS}{3^Tov&u-@i z8OEBO(l@UNix_epBaWV<>WR{8$eVy-g3g+xXl<8R@xp(Hb~Nrs%^+b|O~zW0fJ<7@ zr&-Y=F@bI_dcrVP^HgD2N*1ql7fr|F*FCfOrK(ap1BV2~U%DM!n*&OW)`385%&d&9 z!#=thg>cm;Y9ru>4znrolMawTOlJoe$4UI8^vjAxLYQxNMQT@EW(RX5E%|qpwb5q05Jsc9IhC zI$#C#D;TCzSFjs#An8fkG{OZ7hA}xD%H5Pc0(3)*>nUTKQ9p#8@rl^)sZz;8>)b{p zSoQIVxWk&34jl)g?DF{?Gfz1RtSq6z7iU2ayD4G(qm0F zKDybfv4s1U0eLh^xJ(PlnU&-gt$(mU-M0*+X7cEt`N#;?t3WiDTL8_u{QTyEr@iP0 z^~ETYZ;3z1#vgiAy%ilzY1AHDX&7g8vf5mb!9IP=W8tt&%V!0vz3o6ypN;P9pzHeS z>I_t=@WSO`2Z*KxQP8ibY{fWESOTA5i1`&Jcykv#Sdfz8v17Z}h*`d6O(g9-n^mqG z#7bFIf3Ty^>lRv=78lXp%UIyr3GTyr50-nydb2!WonX0OT_o+f0@|8YnxZPtZ9?W< z^m~dttnPtOw$-al1QpT!5HUHQp0l-%1Hb#lv49($(OOw3l!M z(0E6y2=2xH_b}~Nc9m5Z_3M)h`cVkIgBdq23VW%o9;^FU-Ac4gFbq<2(PGwbv#}2z z%INiSo%Jl67qhV&jD7OmO69Hv7e348#|-24cp&#J?O_;K=LDHc7fszeUt>B`Rrc!Y zph9|?2G4@DE?L;yDHd=##P%q|@%nwRvxK(59iBHIXQucU^Up2T&h$iPgKw`vUoRJvI;;b5uC zs_jx71=mpk&@61uNjkuLYNAXmQGO`|B{V}<%_B<@0gf<${~X{KRARia@N)XwJ*=3N zMPLBpnH6stbX%dz2((*)h_a$8kM;-Yn?d@Ckk%PUf`*eyB7BOGk(84DU}u1nQd^q> z_6(2T5=(6z7*eP#o2VpVpd8m>C`;5DE=)CP{;=tZun@z0z`I#1YIYVCJ`py?uu}tj z4VU3romFVfA7qgPczVcPSiDIoAl(#Q$>5mKSE|mz^Qbgf3kMWD>bCD7#Oq8ZDQGkb@%_?|;;`l6sCn%23LU@AW_{@bTD2&exc!I+C zOySnia87={Y&wC!$FvalRj+Z|x}GLbLKyw0-_-nFgw8N^h`g@jRpAZHCMsSnR%SAA_NWo|Ne5KFD6$5=z#4cMz6!Usb8-&(y6E#W|w6I@_59~X+du$mg5!jer2kt~*@mcnGbm;T-OQP7a%-^f}j`;EQ?^D7jgo;JJU zJ%K4(YXs)OzAn9vxT-?CaBDo+;~DP`5@&qSzT(!t)Bn(TY;dEb^L-d$|32UUxFu+4 ze1mE8M^0cBWRLGQmR`Ag7oIu=l~4_8+!$zdjnzMTx)X&iUdFuHDugJ+p(=T2opDW} z1Ld+a9*nTHyZe+*ac@KGxal5z-3M)6u9IBg;%WgiK7M*$~ z)g*mpw~KPg9y<#9?R(6+H-awN#B6&b-M8Jg{bBUmx$F!U_F-*%BTFaXmZ@{xlzw{% zTz^IHEC|ABwxl4wL4^cEJHf2dZ*lBld?uvdgVtQ{xexk*_8~BdZRgRr0&!0pQ1&Cc z%m;M21ZFKz!~zEF8)lfW4`nMXCmsi$%;~}4rq$g>ZXFxHf4o<}SAJavTv(7p=_Ne8 z1hr7#K4?9-dlZ>|{f(D2G|M)jNu^&O^6s5mFuMmW-QUUOC|$#HpBqM|uaXq(bHcJukjdu>4J^UG6{J8j#~KO#8X3_yvo`S3?QdGWH_i)#j#|6XOZPI(@PV{1!jF| z7Xo~r@|DSV8JgB z0q;KL<&k6wD|mSr8O`>={{gHC{)e64%a0i>ZK7ov?g9mR<*o{p&vIYwOWyMq6CAZg zk`yH1#v=MCo-;M3Ci0$I_QevGR}(oRN8iA}##}!bnRE|B{Y6jEroQYCHN(bDN-Qf? zjGFp{rvf8M`Jg`O4-{`&1}YQ{DkS{>mY46MDkI6NPMT6Ug;g9GKnBAk8^S(4GAd+J zkxD-op_q8nB$qj^YPDbSFB5(KI0sKUVe-u5A4fyM7zVx`*2{f!{V0YhjIe@6vIVcF z7}AQc`(mEVHaktir5AgQ<-IwQB(ptl4k10+$u}cBVjhot#oFF{46l!zJift@hCS8&8r-D?Gt=9B z$t~8r*kgFmRc(AbD5M-+}$jGo;;ia!}duC>ZZf3wx&nE9~$emgyaCJ~5J<_ulp{epzmN-;FR##-&7#gJp9z zYk$`uZ;_!1mo`GXW&+xPFf*Wo2HnfQ|9F?%gvE0rqAE#qVLs}y1Pp}#`ika5Kkm<} zSM_DT{SPAKcdv?D_N_bivD= zT;m0sVDmqW%x0}~XR#Mlf7b7GU&G`=wYhu-htpWe ze?}T6*QCM%rQHC!ZxB5-AFO!{m>fJy$Kx9#rsW1@1_YpH?qt{gGc95Axw2n%3Qu8N zRz_FcoxizLIxXpQ!R>1rK<=>Srlp2-#o5{BnNqOXoBmC~29rrHxsIR@1auPY9B{&Z zKZKkBxjx7q{b+z8U2v#v;Nscok0Qx5Z}H-No+r{8w}~L`P6#$aRTqEc*WfR-*fryc9!yo z0bRbo8<#T&0~BNF{|lEhVEF#9+>kD|FG8M{bBpg1xIVY}SL8V2UWTh-5-1byKr}t< z+uxnny7MF9KBQMTHsdtdh*9jjJOlgjT0fTa$rwX=zPqN6r|&F*HQR_%$Gfm_X5$aR z9h%|Dz%v`{v-WbFvIj=R+fiKB+xw7`9>2iyJ{=kw@(pgtO2XwCWJy1tVul{i3+$Co zqe|0v;0Q}^{4NKeKm*(AyhA%4uZ;niXoB_*aMGL0CW3RlSV{%=W1FTv0Q<4yT|^sF zLG>$_=mf$2UO5-*SXT2G^}BfKyh%b^%Gvh*}-g=#)Xu(+@)wA zYrZt96yxScRpK{VRi>ZN)x%z64;E<{1^Zb$L{)r`pu|gG`ntHZ3Er&54TzGl9&jMo zIHf_QZ-8I_!E7zx4EcdL8Za2R6SKnn3`BbIrm{?TPD=dQ&>y;Wl{=;;w&zc9dAo@< z|0#00>3ej|@b%%8#_`WtfB!LDb})SbupkM;D=4P(kf&ZaCjbWg4*nk7ONKW&<)D?f zr2wv~M1KY43S6E5w=Z@X%lUHz9lMw~A6>8~Nt zN9Rh=RM0M8F;|?g7}KN4K-8ep+WovR3l1ReTnJ$UE)SUQ3yr8-kr7m9`w?%U()FE% zI&BiRBZXRfN2A+?TUG8AkBxzRcMwBnuZhzS7fSljQ@z72=>@s}kJnWeo z1?;Vdu`o*VQ&q@gFLiwB>A3I&@fTi)KsqL`l1bXfZkBrvJI#54c zyY(aISnStD~9mi;!`zZjx-*;26TXc7HLj zrn*?G5vx70orC408t*TWa((p@vwjgWv}QDjRQ2r5t5-!z{QpnjXH+Qd);BbebCZDlLr9 zM0itMe?OQW-VfYj+zs16)0E^^CMJbhDGQWdK&QH}DQb3~AZn;E!KnDM2X-;-rLgV(+!{gRSml=?ejEhNPxD42fm@$n z4x{`KvtG;OCKG(;AnRHX-4D+5wK=qkz+)`>3H+N^NH5motI&bLs2QsA+FaC6Xc1&o zg#kbRN?}kA3}l&K4K3X+yQN(y)9#ZQwfkgvX+Ie6lYz)_Ap_l2W5m#W0Mq6#V4ob| zp8<|aUswZ8;Kjli5Lp~FbqSgZh5DgFGzY{>Us%6Lx*IP{66_69j$rf$7Ahqi0AN#( zltJZK{cisz%LB!%{lXAd`q$omN4nq;aBCz-$PkDP>z$7Tbz{R z?oN4{;zqdzC=cp`yG&^im1*)6jaIDy!h=f9*kPLixYIh4;kYH=h(Te10BqetojBq$ zzIF*P-ZafABzGLAPSfYFgU-NMP^p!IR(X@A&*1c2KvKMw(lEo3NG`;Kr)2Q`Zj?1 zehdCli^#t{>)Wm*#Mx?;XjS8c6?`|R*R&#)ay-J&j6-=FYyNI#(6mZy1e7pGrF*|% zaUEfFx`nA7W9alkX6u*0(cZ zf(3@eT{e~Oj%Sx|Jlb8DFm1wzvaBD+L{GP=%2Q{B*Pwskgzj3UD&_r=nAtiVT(Mop zS?!N=hEBf-$%U%2#l8PGaDX)9i0B=Flgwg%N{Gym+e%vbGLEa}WPqw>bP@1E4&rqmkIi`^E}&gYi-C3c{+7%ktH{KkEgNdLJMyN%i>Mj_JAeyXXc>3?2rE(G_Jf@ z^g=KptIJ7UUQ`l5{^XQ5l*4C)N(8QK5k3U*uSl9%$Fl#GMt`%0?fchWnt6tqZ%5Oo z-()$r7tqW$cI)BN(Ipo6 z%eXlj`7{!%@{fPf&gX^U~OqcYv9|%hx7& zQg}v<aGMu+i z5*<{2)2)G<+~`AgCtP_?U&Kofz?XjD>PhLrER2HZ3x=(;l2mHnkLgj3vkEdCS9Zc) z47?2o@h=-dfVjO609WWlU~}LPn*%fqFd(xUpBaS~gVt6O2n z1Y_|^Rtc~1CDRS%;&5H$Z;QO#e%P`qcvctkoT2PxK@;;gAYWQWL|)0N(X<2vV8cBe zjW=aAfES>31>jrU@Vfy2k-)n#X^^x= zuv`(`cuM_KvVB2l|65tn5nqL%O0XnLaM-CKQ7@Dki9kB$Dny zqC5DCIO*giv0>0@Stx4&70DUwaP&t-R?(BgFlm<)UoqqwOzDK|KMq2j&QNU$&5fNSDSy~!BZHSycM zNrc~=6qT-<#7)5j-tTRy&k80XB&fW?`MLvLbDmd(kqA%NAzs~wtfl1@Jfk3)k)_^fae%Ev!T=JJkk(ye|}ILY%N zQGDM3@*FakXd=(xv&kfxO&TckX9kkxLH3;fCb7c%nw4FJJSCFMqxM{G4JI+%cA5m0 z+Hu}%cOPA85P7y6+?fV=rW@Ru26&_=a) zL{Xx%6~`|)!vPo8pgDP(G8$F7^sGityT@x6^fZq&m*+;2@!d_?iXKB=dVn8}B9Rot zdnO8$Zdc*n!DIqvErUVd;8{3WfO(AuZyQX;5)(H?lSqSgE9~wdie??mGo#7O33Ccv zX2?1lOso-@miJcV?jFqT9B{}MA?1|9LoCemLX&mxy6k!WJ1~l!odbZ3Dp)I)vEQ^(S_`74}eu!tY2+_^^gR2 zW@(`wuyAAP0kLD&Xb+dP7m3xylcj~X_{|s?iG^2rOe{$Yap!5_F0CHnwpbE9F88WS zG=th2{X*UD!V^_5;yjPrPRdL;bbXJo!a5B44U}O z;pAz|ZW#d)4tO?2vt@=zu-%koD8^3D`xa}gA1bbE z6;1%qiAf|8bgs(PL=qh`Xa7CvOqe6RN+&;_bU^W{aOz|@+WP3z31nIU^ysMSxm)

nNVC3iERv+)euEsX6`BXEQP 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

gL*jp`U+mbYhMR{ z3PgTUd)|H>!vByjdIPS$!n5@a+%{G4+i#F}sof?b?QFo$z4%vkWU!$~=$=Y0{m6sg zB(M7w} z8#Z`BMb(2c^Y41mO*~eG+iPwXQ8WlE$a+|= zE_ByKc$l}ogFB>m$YQ_sppDHCTYQHs?KGJ``HE-O!&OoXIO@Z$jQq%)+LB^ag4WtIFH{Y^9MuV?`8;4Dxf>M(f9;>g9d2p z{3?E~0j@ac2I3Qfb-1M$Y`(f3COvuj36RtIc({cRVc_Nm_o7Ufir?!M`tH2qE%M2LHQ1J;t^05{og6~_A zvpx5|2Zv2(d*YN4Y?HG;@~nCi;6r`M_C6U@|IqtntWQEk zHt015lF{tB#epiaQD|^}gXYWw&YMm_2%sXH-#i7^-72!tiGvBK3WmkT3(68dgn@u( z4m<$|X#E0$!_I4S2g)ixgt=3ZUEcstLO;C9TmKVObwi3vsvm+A&_u>Wet24XMIR0Z zNy&Zp0mlv?2BO`Nr4qo)Ya&x4H)Lyd!4`iwTemRKa1r9hn>G~jb4|e5hxhT0CRn#l z;h(^PAWT>EZ+f_b0vohBbqcNzorbe#XZ|=|h7ae3r%6Pqy$*YmY;yYFhrRNRGVk>L z_hDZ1{r7pgE(`BrGUrc-gtvoW7Tezt34ZQymgnxj=A9<^J=Wt zt*izmoMLP0$#?voq|LD(*3>6d;K;C?j6abNa8CHboYmeMve$vMLtPu5#?g1-<1jaU zgr34-c(-*08y*ao)jvWLdXk^}2+vDu+}b(GZ+?Vc$Vnb^1{QkzF9YfS@h zI7=ps+aR?`Tzs)Nx|ZmZx7<2Xfb`<68=Rde8)~n@_fX*kql#yJOrn>c#Mh;9JFUOQ zsr${1FmSj*gD+Y+wg@_=4YE(N%?7tN#qj}NC4fHYZJt8`%X>feTCL4mY;#EbSNCYL z!MjPA-K{D)*&Pk1TzADcdhAvB5lrnbpy~3g1gaIVXipfooFfs_-#sGwB=H(yOyRz(xIe4UY8+>TT^90E9?x=aLOJ8Dk2iIqDrZ`QC)I}QsEDwD z81;@r@LqDP;d9F;Bw<9cudeLkb{1*C`{ZDgmEUWY1?z*IFOE@3!zo_<2?-fjoDS)i zHM}%0Jn*3!wqqH>VMW#J!%Eq(hIc^y$l@wU&z1GNyzf=N0m_nj%%^aJ3@l6GrzAwT zI+E{`e9x!wwny=0mDIzFh)()9Aiq=e_1~}@{Pw40X^>rxii}oP@#Zhl@>TJ+FVU(U z#`npCdE7Nvu00JE0Z%D?w&eKa$!BTp5MMe-lz6`{N#U;5#Eg5{4d;zR`JTO;QEuj3IrFFD$d~<@^bgsX3#^2?4AC3wGaNrm<0n7E z*6VoNXHt%#pOZy=&SescY!+MwE4s0SH+)Va{a&A);rMPt-8iV7aktiCOVGe8KgWifM8ouV@S^MIlNcFqm|oO@eFh{Bz5E3Dy}e<9Q7*e`1HJXDlPLoD{zDtWaJ!pdBp3SRbf z^Hg44br(76+??Z8|3jiD z*rmCbV=6w`;pN9PdHFF-V0B`o&+^i#ySko##dRD8Q;9yD3Mc zg;#!wrb6hVwoJEama$EVX%<+-3(S+Js7OLgjNOchQE_% zqV3Hfv0nf=O6;7fL_`6+z9&S88>V`cN}fN!3%*8;@$8K>Lv37|p|*G0Nv}W}&{Q9M zlLU34z76$JcgSbGX-DfjJ?Ucs^lwG=g<>hc;W~;mHzjeykrD@3a;(=j-*Q? z|9iNNKwQ}0=ar;^ig6~~g){n6t5F$|W2A9;MmjvSzG5VuM@qjea@@HV?D_jLUFN?` zblmy!nwHM<#OYLL3*a7x-=1H`^Qu?csc|oa|EuL+-tcCw)C=J2mG_d&zr);@$L>wz z%OEj%ixDFEZ+<}WBs@3vcqBb zcR0#!$X|Jd!%<$T{i@-q=P`|N$lJ4Bzw%Z`se?B<9D9A?2Zejj$tSnC<*^KY0tV%L zhud$T!%@8jeo^vw=(fXg2pAPVXw;dTo=r2TzdBZ-5T0O?YNH97m7A)9P@%Ud#PA)5wtDZc*U1A^71xe8xE(g;CtHnGWfbsVH5l0fhf> zozHhTHn#AR&2)V1WyrQ89R6Wff%Q#w@N7c>{4>K3y0IDJ)SKz3*;zmd8W#Tmodi1^ z+d3d;l^`TRVjPaAP&yVjSPDoaAM&>~7%)h(Kss4GuapiU4SYu_y+8IaK*QZ?U3571 z*Sf)SAl>G0JlDW)m(m5aI*RAm=#aV9P^G|CjoKWJ8jzCG=mvu^KLX^HlWwpYhvPL6 zje@xN516MXLE>g;rj@^0M#u8TG8%Kw|Co{X0Vz8iSXqAxLi7oXkv?IAU!##esTh51 z;>Z2VXfz#O!Odk9c49Ypei<#FFeTAQrzF8I1%6O(N;>>h_`x)v0@Hko6@IYRPAPz2 z5&TNvw*`I`@Y_)zQ%?PepDhj>=4LzHO8n2*J$Up0Ra zpFQIE9QsKjU*qAn&^kpT&GEK4X&jgW`FEKaS7XcFyrR z>>RJhXPlM)c^iF(4sYO(JVgik{r#Ace4ShW%v03QN6YZ%o~Dl&zRrb$YcPDb>P>&3 z?@)efCwX6W z*(K5H0WHwSPlEZteRLshhm*>El>4<`G?H(M>-+DgFA_sXwUPW}QIu}y`I}8NoOhg| z+xVl;(;j}Zgxj8{-!1sT1}fI&4H9Q0KLkS3_gzeWe-ojvVe&=?CJzZ{2_m$Lq#2Wc z!eqy7On#2Zf8-(VE`gB3&sNbBhMz1(a;rp9dic0;G2$R_@l!gM@W}`14}*Rx0A7o5 zDj}^p0^b``U}}VZsq}z?9q`-3b6%ikzn?+eKR5GdUZ8#ber|?z8~@!4beiAIDkHgh zlK=Asn&Nk>#7IDIQmSdAmaeCVU`G4>Gv7!+kw(4<1u|X#c0;2JCGi98#;PB7sh)y zbir>Ec7Z|{1}0z^Zs)?Uh>v}R&hoocVI+4d`Gu3TFMsJ3I; z5R2hwi(Js=&D2lx9Q5FGRjd{);U+QW=R^()?@{fJ+W zeBiXW{^_@=jrjEjlNlV&jmPQxh7b^AUz?%~%H@`7(80d%&}aN4u>N=N&{X2r*JecX z^=&=9prz|iH_$1>FSN>t_RRP$6oi5#BJ%71_AWLS+6px~xc^D|fnPsptKSZO{v=)G z*KZG`t9bl-^gBZYFf=3(cE1Ot=-S^0(Me$ao%iW|WWm5-7&@VMbU-?eBI+F-5ROnG zx~O(c3elNz5J8A;Kr<$V=mzY-q|m#_Gl(lhHvobUjr6!-NFZ=f4Bo+i@YWCMd4Bs8 za3F!a`-k+b-w;p_u*)qU(iT1a{(sWzelf5@#oXXWo1ouXddq2g-4Jub2zDDBg%a#i zcs*FY?u1u=L=AqjsJ`wa8bzmKevCd5Qk7)q$8+H!%lGgh0KhT~&T85AM zgg)XIXN3(W97%pcNBYUlCcpFvo$MD^3l-XV#HTdDZ+Ix;)X)2rMwnpXtKaY)ZKkmD z)vG^%S4_XYRv-K$Cfc*=TYskW2`ql~<8RSKANo^z{hI&N)zyH-Rh{X3<_s{90X~M| ze=-a(B*Y>~W7e`RyCq01Yf&-s_+)*i7Gvz6R5awPJ)EWxPfqs zLtZIRO5tY{Wx5?%7(SdVGo?<&GbCFCvMn5N$?YO3yI&TGo8|X>1B%?z8(v74Wj38f z*_m>+9oZ57Qm)p%wl#cpo(u>CBRuGl*W<&v@Mo)`0`3mqk}t28dY^o{P+q{DxO%!s zZq^(BQjxquZ~Ucxc{x_Ew(BeS`urFN-;Bn%Yo}uA`nNR&2;9XVG{xvo2maN)I3Awu zLW}KEHRH0d?9xGe9yE+=_L*$ae=V84EMvoQr_#WGY9D0ccSZ0Szm;rU7R8}O2Mt9p z%PjTzxOB!jfE^ka#SuP|D%T&~_~=#*FGCnd8e6bbb?ITdVcTt2!+JP`Z>xoB)J*hq z13ouA@`@gYd7%MSqCa<>i+--tpZ9b{KexUj@lEyt)gQecQWLMpwPKZ8((v$cm3;u$ z5BIA|eJzZrMt${Hs2+VSe?*Py>#y%oa|a+6ryLWwWT*`j7(K9GZPnLLa4wjT$J*gD z{7AzcV*8`I(JtV!ZJ>8lO@ z#x@+WaG3{gQj3S=&FwqNf$flkd&RfOwxc2j2Z1YN@IR9bRWpV+#Lr3IHv(K|nkSwi z*`@8W@Jpa;FIxBw;O#N^eM23blwZ_eQHV@RysHY;fvQ&l-^xO)LPPz7)yT{KAHE8> zR7DQUd{M7FuS@TZ9gSeM!+~(Ue9Q`+FB&@eB*~7F82Vcz?(PHbgoof1dEVRce>ZH=N*KG7U@UAff**r4eAPNTdXS{fz$u`X*xLJ4nVm{lNO*21h5nMaIV-INaj@ zfW*JTUR#9epF_TMMc(13%Z!IgFi>YQI4%Xlz8HooGWNnCF~{_4NZi__nvTl+0_c$g zJp3TmQ@dh^<54nBdDPHR=`B2G$M^*Ey++2tZrIbz_#}y|2GrtFS>_5YuS}bG8Hw8_ zRp~V3qu+Al^&|#Ke0>sp9LU7SVXjX#X+C|vGRDkGNIXiSy%U(@koY0^Ce;x5+B;fS z=1KY@#$)1_REJL43wqFuQ_{^OL=XJAY}%W22Z`SXL1%X)wUGE3?6x&B{XV#73G{i! z@WUu7+@`k;#3$)#Y8Q9;z`&J~bby2x31e6aj+5}s0COfMog?G$CODcCWR*arbb+oF zI-xUx#6!b?HRc4Xa>)1*Azm|#*OI8%r%x4(zpN(Sl!b*I8z93;y9#Y2uM&6z^E`^A z9#YP?Q1t_P{1Vd{tDc9mvVkqR2@=nZVJ-*D!Rcp5Kp!-Nu$XTw$(W4lg@-6`GcIORqU!vIm{KTJ?c% zTjPG1U%}(s$e51+v&)lPuzfXZ^`@JWcas>M0Dn zN1$iR`D!@5+;mbZo=W@)Nh%uI=0B5o)(t(J+k|@DGHDozqb8m5$@maHwbe6TN5Ys? zO~|i+nmIO)X!@M zowLY=XS!d|&gnIS;CdLp*!y=K`jce5(bhH+jK7k2lfjRBd@qG5X+HtJUZJ=be zBdSe)cQT^AT`fXSVQ79u&b^7m)%9>F&+Eq1#jmxg()W-(CFS7TZ#vSA+WaxfOm?!q zhxMZytapIvkKrKK27V5NJ4|A~6MDH^+~a5&J;3Z>_Yv4%34V5%`%ff(Tmn36>d%O$ zE5*@jtd9-LK$_dPLqVlEVMZ~<=^jM-ehK|0u2>ykcU9Gw&RRx^U0IZ#Ps)|-X5dxJQ**7-?nV( z%S<36`VNfE$;{P>*r_IAPdm)C;+R=QB80@V;+DAsdWTo^W`38%+fDF07eMCyBwm~X zeV*s(CF3KFYZ?C>`gGhl4>Dgv6?XyiIVkf@GSolKN#DjHM9VtOWX0qDMO($$nU#&x zla|unf^)MjfmI9mstpc{l@Q~}vKo+7+IVhVS>GZN7*>%voD&YsAr}3nQCUwx+)$+_ zqOqtwfqni1_X;`NPR0WZz`QkNqqwq=leS({JiCyL$MJoU6F6IT)bMoKXpY;Uc0|o; zwHs6fYHcE*JSSyY6`p1oNo0!W=+s|a5zFzB@#F-I?q)iUj-dvo<5-b%CGfQBK8eLT zFl?mRbj!$THs6t08IaS46C*iG3DI^Y7WpF{|euG4h2To&kxj`I;_JQt% zE|{D92okssmkDicIV? z*OPl5-mhI@$V(w{J?K`@^VZ_w@di~pkIMT!_{6j+m-jUijXFa+8UG_D(hK8>^6n&Y z#TYOrSswPyy_LY+8S)<1FR_5TOh4uQ6n1n1Tk<1h{6$wLFFbFIZjhm|7zUhnt1zKB z#|F%ixCiNIuz?oyS8YzUK!&d&*Nr#zU>D;4uKXCUd^k&_Cx;ix_YB=y?Wtd^3rk!ZD(n@%1>hX$SKjv$~PQ7c~C} z(>oBcO5i5OXu&U!1CKF&io{?8^kp-C2DfO4sF-K`21$uWdfjJWNJ19`n@xh(Mq>R4 za6RK}GLFpyv!UKgkjdH*j*$1Oh=6t=N5Fe6B03p^vA1=$u1xGjn;4$~eUbIwPdA9K zw_t!v#XE@25V>vTruR2wJg+TpVF8@+%6(`M++Vyim{7}W15m-zdG3U+4(~$>t>Tzo2kC1q;8~kld z$GLfj9rQ-VAEW6%JghtmFyx*E7`$K-e3y`MY7UIs8UGa?*VL^j_966nFvOb3cPBPK zt+>I=dEa-i3;2MCS$;1TG7iiU@I8*h>?rUg)1RkyRoCdPB?G#`)exU)lj_EhmllYr? z3~=%mdiz&t8nt|p4X1eh zn%Z7xuA|UKaYM6e@&oyITfF5^-)D*!;+V6e4>-v9E=&(OYx=_b&^?2|8<>v6?!9xs z1B`!%>1$NrEP8-yQf;`lf2RErG3PDvk*Gn6TbWT*fo?ki`Aw#LQ4Qu>1m@)y-9lm; z62xkXMY~CK!#&n5U(o;(q91fF!6MwT?eqc9vc9)uVS*9k_pbWIv+5SHsB>F0mM-|@&Mak^#2@HMFMYNVXt zCb#BV62GVc=9E}-E1n8CAkHVXHFv-eKQJ4*=3Zb;x9|g$E<2EO7YCjukB@!=bLoCCWN!*dGW+As_v=V%rGHY>%JAu#$_War}A!TNPmrYNt z{R$R5u`RL3n>AIENb*O`YVu_nUkrSL=8B%J~Tbl#DlbxVi#5Fr`d?g2Y$OslX?) ztne?Jpx?>kpODx9hgvu2>yTM5467mV*$y|US?Jl;u^oEY;p?tJ0LEf4wzW?yf$L3u e>l#7d8bc2O2V!s^a6=3pCUJ5!99WV^*ZnW*O#g5I diff --git a/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c b/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c index efc228421..3aeb3b223 100644 --- a/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c @@ -495,7 +495,7 @@ int pulseChip(int n){ return OK; } -int setRateCorrection(int64_t custom_tau_in_nsec){//in nanosec (will never be -1) +int64_t setRateCorrection(int64_t custom_tau_in_nsec){//in nanosec (will never be -1) //deactivating rate correction if(custom_tau_in_nsec==0){ @@ -521,6 +521,7 @@ int setRateCorrection(int64_t custom_tau_in_nsec){//in nanosec (will never be -1 } //activating rate correction Feb_Control_SetRateCorrectionVariable(1); + printf("Rate Correction Value set to %lld ns\n",(long long int)Feb_Control_Get_RateTable_Tau_in_nsec()); #ifdef VERBOSE Feb_Control_PrintCorrectedValues(); #endif @@ -542,7 +543,7 @@ int getDefaultSettingsTau_in_nsec(){ } -int setModule(sls_detector_module myMod, int* gain, int* offset,int* delay){ +int setModule(sls_detector_module myMod, int* gain, int* offset,int* delay, int64_t tau_ns){ int retval[2]; int i; @@ -553,18 +554,44 @@ int setModule(sls_detector_module myMod, int* gain, int* offset,int* delay){ //set the settings variable setSettings( (enum detectorSettings)myMod.reg,-1); + + //rate correction (ignore -2: from load settings) + if(tau_ns > -2){ + //set settings, with no tau in calib file + if(tau_ns == -1){ + tau_ns = getDefaultSettingsTau_in_nsec(); + //incorrect settings + if(tau_ns < 0) + return -1; + } + //set the tau for all + int64_t rate_retval = setRateCorrection(tau_ns); //tau_ns will not be -1 here + if(tau_ns != rate_retval){ + if(rate_retval == -1) + return -2; + else + return -3; + } + //set settings, with no tau in calib file : + //only setting tau, rate correction should be off + //(in previous "error" returns, its switched off anyway) + if(tau_ns == -1) + setRateCorrection(0); + }else cprintf(RED,"rate not changed\n"); + + //set the gains and offset variables locally for(i=0;i=0){ detectorGain[i] = gain[i]; printf("gain[%d]:%d\n",i,detectorGain[i]); - }else cprintf(RED,"gain not set\n"); + }else cprintf(RED,"gain not changed\n"); } for(i=0;i=0){ detectorOffset[i] = offset[i]; printf("offset[%d]:%d\n",i,detectorOffset[i]); - }else cprintf(RED,"offset not set\n"); + }else cprintf(RED,"offset not changed\n"); } if(setIODelay(*delay, -1)!= (*delay)){ diff --git a/slsDetectorSoftware/slsDetector/slsDetector.cpp b/slsDetectorSoftware/slsDetector/slsDetector.cpp index 647d8a420..55af4c622 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetector.cpp @@ -2669,6 +2669,7 @@ int slsDetector::setModule(int reg, int imod){ int* g=0; int* o=0; int* iod=0; + int64_t tau=-1; #ifdef VERBOSE std::cout << "slsDetector set module " << std::endl; @@ -2737,14 +2738,14 @@ int slsDetector::setModule(int reg, int imod){ ads[i]=-1; myModule.adcs=ads; } - ret=setModule(myModule,g,o,iod); + ret=setModule(myModule,g,o,iod,tau); } return ret; }; -int slsDetector::setModule(sls_detector_module module, int* gainval, int* offsetval, int* iodelay){ +int slsDetector::setModule(sls_detector_module module, int* gainval, int* offsetval, int* iodelay, int64_t tau){ int fnum=F_SET_MODULE; int retval; @@ -2770,6 +2771,8 @@ int slsDetector::setModule(sls_detector_module module, int* gainval, int* offset controlSocket->SendDataOnly(offsetval,sizeof(int)*thisDetector->nOffset); if(thisDetector->myDetectorType == EIGER) controlSocket->SendDataOnly(iodelay,sizeof(int)); + if(thisDetector->myDetectorType == EIGER) + controlSocket->SendDataOnly(&tau,sizeof(tau)); controlSocket->ReceiveDataOnly(&ret,sizeof(ret)); if (ret!=FAIL) { @@ -3136,6 +3139,7 @@ slsDetectorDefs::detectorSettings slsDetector::setSettings( detectorSettings ise offsetval=new int[thisDetector->nOffset]; if(thisDetector->myDetectorType == EIGER) iodelay = new int; + int64_t tau=-1; int ret=0; @@ -3323,7 +3327,7 @@ slsDetectorDefs::detectorSettings slsDetector::setSettings( detectorSettings ise #endif //extra gain and offset if(thisDetector->nGain) - ret = readCalibrationFile(calfname,gainval, offsetval,thisDetector->myDetectorType ); + ret = readCalibrationFile(calfname,gainval, offsetval, tau, thisDetector->myDetectorType ); //normal gain and offset inside sls_detector_module else ret = readCalibrationFile(calfname,myMod->gain, myMod->offset); @@ -3338,7 +3342,7 @@ slsDetectorDefs::detectorSettings slsDetector::setSettings( detectorSettings ise #endif //extra gain and offset if(thisDetector->nGain) - ret = readCalibrationFile(calfname,gainval, offsetval,thisDetector->myDetectorType ); + ret = readCalibrationFile(calfname,gainval, offsetval, tau, thisDetector->myDetectorType ); //normal gain and offset inside sls_detector_module else ret = readCalibrationFile(calfname,myMod->gain, myMod->offset); @@ -3351,7 +3355,7 @@ slsDetectorDefs::detectorSettings slsDetector::setSettings( detectorSettings ise } //if everything worked, set module**** - setModule(*myMod,gainval,offsetval,iodelay); + setModule(*myMod,gainval,offsetval,iodelay, tau); } } @@ -6218,6 +6222,9 @@ int slsDetector::writeSettingsFile(string fname, int imod, int* iodelay){ int slsDetector::loadSettingsFile(string fname, int imod) { sls_detector_module *myMod=NULL; + + //tau set to -2 to not affect in any way (-1 for set settings) + int64_t tau =-2; int* gainval=0; int* offsetval=0; int *iodelay=0; if(thisDetector->nGain){ @@ -6257,8 +6264,8 @@ int slsDetector::loadSettingsFile(string fname, int imod) { myMod->module=im; //settings is saved in myMod.reg for all except mythen if(thisDetector->myDetectorType!=MYTHEN) - myMod->reg=thisDetector->currentSettings; - setModule(*myMod,gainval,offsetval,iodelay); + myMod->reg=thisDetector->currentSettings; + setModule(*myMod,gainval,offsetval,iodelay,tau); deleteModule(myMod); if(gainval) delete[] gainval; if(offsetval) delete[] offsetval; @@ -6343,6 +6350,7 @@ int slsDetector::loadCalibrationFile(string fname, int imod) { sls_detector_module *myMod=NULL; string fn=fname; + int64_t tau = -1; int* gainval=0; int* offsetval=0; int* iodelay=0; if(thisDetector->nGain){ @@ -6380,14 +6388,14 @@ int slsDetector::loadCalibrationFile(string fname, int imod) { *iodelay = (int)setDAC(-1,IO_DELAY,0); //extra gain and offset if(thisDetector->nGain){ - if(readCalibrationFile(fn,gainval, offsetval,thisDetector->myDetectorType)==FAIL) + if(readCalibrationFile(fn,gainval, offsetval,tau, thisDetector->myDetectorType)==FAIL) return FAIL; } //normal gain and offset inside sls_detector_module else{ if(readCalibrationFile(fn,myMod->gain, myMod->offset)==FAIL) return FAIL; } - setModule(*myMod,gainval,offsetval,iodelay); + setModule(*myMod,gainval,offsetval,iodelay,tau); deleteModule(myMod); if(gainval) delete[]gainval; @@ -6419,7 +6427,7 @@ int slsDetector::saveCalibrationFile(string fname, int imod) { if ((myMod=getModule(im))) { //extra gain and offset if(thisDetector->nGain) - ret=writeCalibrationFile(ostfn.str(),gain, offset,thisDetector->myDetectorType); + ret=writeCalibrationFile(ostfn.str(),gain, offset,(int64_t)thisDetector->tDead, thisDetector->myDetectorType); //normal gain and offset inside sls_detector_module else ret=writeCalibrationFile(ostfn.str(),myMod->gain, myMod->offset); diff --git a/slsDetectorSoftware/slsDetector/slsDetector.h b/slsDetectorSoftware/slsDetector/slsDetector.h index a86c85081..b74bbd6eb 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.h +++ b/slsDetectorSoftware/slsDetector/slsDetector.h @@ -910,10 +910,11 @@ class slsDetector : public slsDetectorUtils, public energyConversion { \param gainval pointer to extra gain values \param offsetval pointer to extra offset values \param iodelay iodelay (detector specific) + \param tau tau (detector specific) \returns current register value \sa ::sls_detector_module */ - int setModule(sls_detector_module module, int* gainval, int* offsetval,int* iodelay); + int setModule(sls_detector_module module, int* gainval, int* offsetval,int* iodelay, int64_t tau); //virtual int setModule(sls_detector_module module); /** diff --git a/slsDetectorSoftware/slsDetectorAnalysis/energyConversion.cpp b/slsDetectorSoftware/slsDetectorAnalysis/energyConversion.cpp index cc8c88afd..aa54cb2ed 100644 --- a/slsDetectorSoftware/slsDetectorAnalysis/energyConversion.cpp +++ b/slsDetectorSoftware/slsDetectorAnalysis/energyConversion.cpp @@ -69,7 +69,7 @@ int energyConversion::writeCalibrationFile(string fname, double gain, double off }; -int energyConversion::readCalibrationFile(string fname, int *gain, int *offset, detectorType myDetectorType){ +int energyConversion::readCalibrationFile(string fname, int *gain, int *offset, int64_t &tau, detectorType myDetectorType){ @@ -87,6 +87,7 @@ int energyConversion::readCalibrationFile(string fname, int *gain, int *offset, #endif infile.open(fname.c_str(), ios_base::in); if (infile.is_open()) { + //get gain and offset for (ig=0; ig<4; ig++) { //while ( (getline(infile,str)) > -1) { getline(infile,str); @@ -101,6 +102,16 @@ int energyConversion::readCalibrationFile(string fname, int *gain, int *offset, if (ig>=4) break; } + //get tau + if (myDetectorType == EIGER) { + if(getline(infile,str)){ + istringstream ssstr(str); + ssstr >> tau; +#ifdef VERBOSE + std::cout<< "tau:" << tau << std::endl; +#endif + } + } infile.close(); cout << "Calibration file loaded: " << fname << endl; } else { @@ -124,7 +135,7 @@ int energyConversion::readCalibrationFile(string fname, int *gain, int *offset, }; -int energyConversion::writeCalibrationFile(string fname, int *gain, int *offset, detectorType myDetectorType){ +int energyConversion::writeCalibrationFile(string fname, int *gain, int *offset, int64_t tau, detectorType myDetectorType){ //std::cout<< "Function not yet implemented " << std::endl; ofstream outfile; switch (myDetectorType) { @@ -136,6 +147,7 @@ int energyConversion::writeCalibrationFile(string fname, int *gain, int *offset, if (outfile.is_open()) { for (int ig=0; ig<4; ig++) outfile << ((double)offset[ig]/1000) << " " << ((double)gain[ig]/1000) << std::endl; + outfile << tau << std::endl; } else { std::cout<< "Could not open calibration file "<< fname << " for writing" << std::endl; #ifndef MYROOT diff --git a/slsDetectorSoftware/slsDetectorAnalysis/energyConversion.h b/slsDetectorSoftware/slsDetectorAnalysis/energyConversion.h index 04ca34e08..027a78677 100644 --- a/slsDetectorSoftware/slsDetectorAnalysis/energyConversion.h +++ b/slsDetectorSoftware/slsDetectorAnalysis/energyConversion.h @@ -55,16 +55,19 @@ class energyConversion \param fname file to be read \param gain reference to the gain variable \offset reference to the offset variable + \tau tau + \tau tau */ - static int readCalibrationFile(string fname, int *gain, int *offset, detectorType myDetectorType); + static int readCalibrationFile(string fname, int *gain, int *offset, int64_t &tau, detectorType myDetectorType); /** writes a calibration file \param fname file to be written \param gain \param offset + \param tau */ - static int writeCalibrationFile(string fname, int *gain, int *offset, detectorType myDetectorType); + static int writeCalibrationFile(string fname, int *gain, int *offset, int64_t tau, detectorType myDetectorType); diff --git a/slsDetectorSoftware/slsDetectorServer/slsDetectorFunctionList.h b/slsDetectorSoftware/slsDetectorServer/slsDetectorFunctionList.h index 8a083e5c0..a7af872ad 100644 --- a/slsDetectorSoftware/slsDetectorServer/slsDetectorFunctionList.h +++ b/slsDetectorSoftware/slsDetectorServer/slsDetectorFunctionList.h @@ -51,7 +51,7 @@ int setCounterBit(int val); int pulsePixel(int n, int x, int y); int pulsePixelNMove(int n, int x, int y); int pulseChip(int n); -int setRateCorrection(int64_t custom_tau_in_nsec); +int64_t setRateCorrection(int64_t custom_tau_in_nsec); int getRateCorrectionEnable(); int getDefaultSettingsTau_in_nsec(); #endif @@ -70,7 +70,7 @@ int getChip(sls_detector_chip *myChip); #ifdef EIGERD -int setModule(sls_detector_module myMod, int* gain, int* offset,int* delay); +int setModule(sls_detector_module myMod, int* gain, int* offset,int* delay, int64_t tau_ns); int getModule(sls_detector_module *myMod, int* gain, int* offset); #else int setModule(sls_detector_module myMod); diff --git a/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c b/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c index 929864e5e..60b23cac3 100755 --- a/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c +++ b/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c @@ -1809,6 +1809,7 @@ int set_module(int file_des) { int *myGain = (int*)malloc(getNumberOfGainsPerModule()*sizeof(int)); int *myOffset = (int*)malloc(getNumberOfOffsetsPerModule()*sizeof(int)); int *myIODelay = (int*)malloc(sizeof(int)); + int64_t myTau=-1; #endif int *myChip=(int*)malloc(getNumberOfChipsPerModule()*sizeof(int)); int *myChan=(int*)malloc(getNumberOfChannelsPerModule()*sizeof(int)); @@ -1864,6 +1865,7 @@ int set_module(int file_des) { n = receiveData(file_des,myGain,sizeof(int)*getNumberOfGainsPerModule(),INT32); n = receiveData(file_des,myOffset,sizeof(int)*getNumberOfOffsetsPerModule(),INT32); n = receiveData(file_des,myIODelay,sizeof(int),INT32); + n = receiveData(file_des,&myTau,sizeof(myTau),INT64); #endif if (ret>=0) ret=OK; @@ -1879,7 +1881,8 @@ int set_module(int file_des) { printf("gain[%d]:%d\t%f\n",i,myGain[i],((double)myGain[i]/1000)); for(i=0;i