From 4d5fd3886c14dccf87d8d0f9dc5ba10d89804290 Mon Sep 17 00:00:00 2001 From: Valerio Mariani <valerio.mariani@desy.de> Date: Tue, 6 Jun 2017 20:45:25 +0200 Subject: [PATCH] Fixed some bugs, added some checks and documentation --- cfel_cxi.py | 43 +++++++++++++++++-------- doc/build/doctrees/cfelpyutils.doctree | Bin 135019 -> 137275 bytes doc/build/doctrees/environment.pickle | Bin 12789 -> 12789 bytes doc/build/html/cfelpyutils.html | 8 ++--- doc/build/html/searchindex.js | 2 +- 5 files changed, 34 insertions(+), 19 deletions(-) diff --git a/cfel_cxi.py b/cfel_cxi.py index 7263d45..8076f96 100644 --- a/cfel_cxi.py +++ b/cfel_cxi.py @@ -25,20 +25,29 @@ from __future__ import division from __future__ import print_function from __future__ import unicode_literals -from builtins import str - from collections import namedtuple import h5py +import numpy _CXISimpleEntry = namedtuple('SimpleEntry', ['path', 'data', 'overwrite']) +def _assign_data_type(data): + + if isinstance(data, numpy.ndarray): + data_type = data.dtype + elif isinstance(data, bytes): + data_type = numpy.dtype('S256') + else: + data_type = type(data) + + return data_type class _Stack: def __init__(self, path, data, axes, compression, chunk_size): - self._data_type = type(data) + self._data_type = _assign_data_type(data) - if isinstance(data, (str, int, float)): + if isinstance(data, (bytes, int, float)): self._data_shape = (1,) else: self._data_shape = data.shape @@ -63,9 +72,12 @@ class _Stack: def write_initial_slice(self, file_handle, max_num_slices): file_handle.create_dataset(self.path, shape=(max_num_slices,) + self._data_shape, + dtype = self._data_type, maxshape=(max_num_slices,) + self._data_shape, compression=self._compression, chunks=self._chunk_size) - file_handle[self.path][0] = self._data_to_write + + dataset = file_handle[self.path] + dataset[0] = self._data_to_write if self._axes is not None: file_handle[self.path].attrs['axes'] = self._axes @@ -84,10 +96,12 @@ class _Stack: raise RuntimeError('Cannot append data to the stack entry at {}. The previous slice has not been written ' 'yet.'.format(self.path)) - if type(data) != self._data_type: + data_type = _assign_data_type(data) + + if data_type != self._data_type: raise RuntimeError('The type of the input data does not match what is already present in the stack.') - if isinstance(data, (str, int, float)): + if isinstance(data, (bytes, int, float)): curr_data_shape = (1,) else: curr_data_shape = data.shape @@ -109,8 +123,9 @@ class _Stack: def _validate_data(data): - if not isinstance(data, (str, int, float, numpy.ndarray)): - raise RuntimeError('The CXI Writer only accepts numpy objects, numbers and strings.') + + if not isinstance(data, (bytes, int, float, numpy.ndarray)): + raise RuntimeError('The CXI Writer only accepts numpy objects, numbers and ascii strings.') class CXIWriter: @@ -234,10 +249,10 @@ class CXIWriter: path (str): path in the hdf5 file where the stack will be written. - initial_data (Union[numpy.ndarray, str, int, float]: initial entry in the stack. It gets written to the + initial_data (Union[numpy.ndarray, bytes, int, float]: initial entry in the stack. It gets written to the stack as slice 0. Its characteristics are used to validate all data subsequently appended to the stack. - axes (str): the 'axes' attribute for the stack, as defined by the CXIDB file format. + axes (bytes): the 'axes' attribute for the stack, as defined by the CXIDB file format. compression (Union[None, bool,str]): compression parameter for the stack. This parameters works in the same way as the normal compression parameter from h5py. The default value of this parameter is True. @@ -280,7 +295,7 @@ class CXIWriter: path (str): path in the hdf5 file where the entry will be written. - data (Union: numpy.ndarray, str, int, float): data to write + data (Union[numpy.ndarray, bytes, int, float]): data to write overwrite (bool): if set to True, an entry already existing at the same location will be overwritten. If set to False, an attempt to overwrite an entry will raise an error. @@ -363,7 +378,7 @@ class CXIWriter: raise RuntimeError('Cannot create the link. An entry already exists at the specified path.') try: - link_target = self._fh[path] + link_target = self._fh[group] except KeyError: raise RuntimeError('Cannot create the link. The group to which the link points does not exist.') @@ -405,7 +420,7 @@ class CXIWriter: name (str): stack name, defining the stack to which the data will be appended. - data (Union: numpy.ndarray, str, int, float): data to write. The data will be validated against the type + data (Union[numpy.ndarray, bytes, int, float]: data to write. The data will be validated against the type and size of previous entries in the stack. """ diff --git a/doc/build/doctrees/cfelpyutils.doctree b/doc/build/doctrees/cfelpyutils.doctree index ae9ba9df5c4e2d3ac777db7a9cf2d7936b0bafc2..a41051f8809eafee804847961801c5089599379d 100644 GIT binary patch delta 15488 zcmaJ|d0drM`u914+$&smltp&9mwN$0ovG1E#U-blNG)6|!7aKa;zFtAh%HK`hQ89V z+|9-`Gl&{&5u?;n%e2hW%B}L3nWmX-&e-o+?)IXe;g9#d?>XORIp<l<bI$v6dZp#f zdP`7sP+i-GpzNWYCgzk>+%u_SR7KUq${C$2#+6N(QZ^$mZOn{m<EJ+E9r}!l4d&lV z%0up4QXV&7o*I7`ekdetc-i#vQ`2&|-}tEX;?<!C$}D-^{+F1%w0kP1<)uxyZ&KN` zJJWK;l}#&irsd}wFV|k*c=N(gFwQKr85b*)Ra}^He5BKuzc5DMcN_dgWrP`XMiv;i zKGhB(;YRiFWL4;c*gdM66<_k$k~vFeEy*blE^k+!=<azXhky7u7|TYasgYMA%KeB@ zBeT@~fe4#Xb5F8*)Q?CWRfr0XRcpeG{m(ho$}k-TkZY701@N3vYs4DGwY{N-QD57i zuh%sWS(F9p5c5=@h8ZpQC*V!DXs{dKFHTWsh0o~#KIe!JVJ8oXr(0A>65Wokx2uoC z^yKc~Z0x+m1*)e_cli!t8!PHo0+bk0D>98j9TYa$)}~E4l(#L<nLk0Ne*{jWI;*R( zO!q19_qfLr$W>f5W_)=PO<(ezOWXsot*ks1-6EZzjHnE!vGrz)al_ISTd|KT(i+vT zW*Sc}{i|grwI;f!8x3n5wp*CzK){A7n=X0^VvLAqp0v~mW^N#+En|#ZPq@MY85`$c zcIe)b5Nh;%He9Wd@fj6$?SkFJ+=$%Yv+>1eal)H?qirPaGTOWSqy3>i%ow(OH0(y4 z19lommv@2B>9^WxGkTrB5l(s^j<3(?)`Hsj`M7uRILvdi8Qc7Gv)SgGo5Gc;wtAlq zNXv6Gd*vu=NI1_;aJT`l*$wNeN~OYe!#Id(T(~MpSvyE~Y`C8DPq5o!=+QNhCPsxD zA013uy!KX=6K=FbJ5_eLQMBbIW5?R*s&6=ji0XwM_a{IvWAFyMQU6@38XnH>SQ2ie z&mXBqh8v5F7($T?;f-7fZ|l}oBh9h(4t0GvJCf>-;-7&GW7+eQ)FR=%KzJ|k@;34} zr5VRYg{tSm+1J%X6f!kmy%4U8&Ot1Q5TrsOu)wHXKMAiS<B3)>@|!oSBO>Fl$T*BL z2B-_7`#CfFi!ug8(ireY><=6FZTt|g$lf^qQkGHqe28xd^)Jp+xe+`)jtHZ4Q-SIp zLHR}D(_5SB)Bs-}#h@cX!w|?eDyx	T7ZvBO*-WyDNex5vfT5ywN1$jp8sX!aIFN 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 P@NoV*uc>#q%7y<2PYv*4 delta 15152 zcmb7LcYIXE_V)}WyO1TMkz~_$(>A*agkr-230=VmPr?%sNO*!_>758jlb=E97Z?Rm zu<$6-43E%@Pk1UFQBVZoi4_r0u{>0Mr`#<U_<erAU;enWcji0ioS8Y_Gw05|*|y$x z;bmLRNi`STwxMQrH|K!dlEM9l4DK;_)S#gijRrqaHhg$lMZRmq$l+COyS=E4d%C7q zLHG9~qPmrh?K{Giiw#~^!-g)y^|uF&oU-M*_i#wBx>WXCUekdh%9Z;>*~l^m-7GZU z)qn8Fd{@7LL&`>a@2N_j)gFvwqbH;oWpgr(&SN4V34f&<jr-R#zF61@(&o+Y>b`|> zRyjuUtow{P^XvSdkoQ-en4byImGtOBJ4CC_k;by;lej3)F$OP8gZ@Et`dQ2wFmHYw z;fDPsk&5V&WGY~64m`v?mX=0Ty`_DiwnS>U0&&LmDQ&Cnda*me5p2)Umpef%bs*B% zy6Eo(2O@8~tsKg0l;`@-&`)3Ss6KtmlPAp2El=$^-@gy*%F5Gw&M$ZKopJ7?CdQt{ zX^!{8`x$4KWg1a0-C?^*wNC$!q{fIkUptaTb_A@u9BH`E#~Q{<&)aG^7zM`MMVUtZ z^R-M=4MyqoMDX1pe(sW%xHd<Zq^Nfzt1d0+0?-uudZ3Zf|COWAmgMNtkD;b2au^dg zHHJrmHBe;iSlS-Sf)xaTu^C3^Wi<;LksUJjLi%~b*u7X68oSrQW8b(eJu)w>pYhqU ziMA<J;q*^pEkm0^O=IS(L)8R_o;(O*t72YDR<^kUnN1KJb4|xAs_=EBK~HcP!!9Hn z+kSf(Uc>eb<H$vuTI$eU9)Smp2bPb8omgvn$yNt@2^HmS-~)ndS3R)d(h|nC4DM4O z;t=P@D#Vb7U_l;&Med48RFI=obH}B1!KOAkj6HwLFw$2Jfk@-%3R91*9_yh3^|%f9 zDj%d#Gm^rgzIGU0b~jX+^;i*tND&sK2#W)|2U9_cYGEH=K*uMm*FyJ@juO#9MR~Sy z?M*ifW<3LL)H77{AdvK6fqJ0CxV+{d-H@8UgsIU7>cRxWwaO*DdbOU>WKIEWL`0^s zes+Yyio*2^;O&qhSVPpKqC8ulbwDbdU`vkQXvxQ72_nf7ENH}7kPWW{ZJ6wZ4K%^? zUZ8a}_Ds&uOFa+)OQ_N)sIrl79F2m;R#%#{#8bnMQ(Jbtf$~HJsN1e8dSeTK`;D@< zOzJj|G8RA6&p7f*U1R*ly2jOiltO1}HFmeJ1)YqiH#LD?fqT^{%GkNI9SjVw2oRuo zRFD82>E{guxE<?41h_ql32?YN*KucfKPJCtbBS#x)jIvpv!O$p;?l3)T%jtXi1$^^ zw`>91OM+O$wnUw;<#>@Qgan8SkYFvgXX;5KAwsQ=5*F0kJ_+74=58>(b8i$c7!~N9 zX9&+>`xHX*jLxSEYWUAav2P-TRtgJTDcfGuH>yv0yivIGKI5*P9jKm`?roIdQ@f&q zOh_=?J46@68gt)vs@VFhDj(~8;H6e3!jDl*ghusQ8G=X|7UZC@#{S(y=ms?yQ#WU7 zrkkmRsPIHcNhvESB_+ay3RX1wMn&U95dujO7UX|eTv>B~3K~mK?2~EW9$=0~=<v%f zlMZX@GaYs@is*n9M2CZ<iWviI*chx2vf<y@=!4G)5<cwnVhtk68Z5{fEMTmM#RrT) zK5XYTEqs92G{lG%ymXDLBG6Bm5jXhO+$A|R{5Z)(iKfv3O0+e;dheR*5N&k%M-H?x z>h50^*(N&Z%H51T`(x|3#EOvfwv1-yjX&UuEDA>!9T;LCL={f|fN0(2S;#id92gGe zRb37?1p9btd5T+d92Imc-dY}w-r85qiZ=Gdc-8aKy2<m9VGKU}f_jC)Sv8&hm!fsq zb3m=Z@v2HhRzQi`Asx4x9e=-AsE$P&(SQ2Tc^exqe4nHaMYD?^iq?A?VmcDBCSH9* zh&**RT5tFR_rC6z8W4)6UQk|jJ%BKxKWIsf=n!hZX~$Np9m^)7ZROE2>*13UZSbt0 zjpkWz789KHs$<9NfO;T?rd_p-(Mx`SX2ztfrpCi3V~wXjy1h}`nBXG(m44n3PYSUv zv?PVb*^f#hTZMHoicU<m52gyIe_#x+hJNxY<e54WRsR@{CF4&n2KxlTjbmJn<0-n8 zwLuiE&FmOnn;9{(HkGHE8-=H)s-@h4)@Ml!uMf;Hx_pqKcdx>|a5{o%d3H+QZD!xE zKD}Rk5MwS+TXi^wm*#McEY1GYPW3Id=BaZr`doWxXcV1EArvi*puFm~SVF)#qy7hl za2Qp3)B)3gZ9xNII{oAwqJNC6O!x%F(8?(PIivJ=g1S96v@r9|P6gF5mKUadtUl7; zT$oE|<BZM!zN4UhY;a+^)6W|grU>go3sV%!TzTm8Y)6~$ejMmu{k*k(DAhXsgJWrl zaw1!^L{9PsRJqQN0sGSe7%u>a37}MGK&<3<R>7FxDQym?_m>f>b*yn|NnzEBFB^hd zBcoawYh3@Ts$gZvplz(yny$W%b)kX0jsy9+hhuqoA0EWOZ~kgOMzv1=5w<bgNU57| z6z)e?{x%Imq3e8{G3DDT`#Ax9W)9>G-HMYPjAbYLF_xX|a;!L6_IFj7{J}-sil3?l zfWLfj*@*tkbgzpDL-)c+0T;~;E<H|qVg!J@u$oi2dky`)Q#FfYH)|Fbi~vwf2#&yQ z<3d3If#hid^y0P>0#O`5Us!foENYBRK1j!V+>IzBxk$#bza5Mff3waOM}oF-90^{C zV~4BiePtrRT9jm_Bdg*J+mEMV57kf#qISe_7JfLqV&=5Qa5}t#l9CI73fRFWmOfak zU{xH>u_Wc&>E{iu`Ucj8R``uLcGWFca~yvU?<Wr=KM%1*#`7xIG0LuGXwFI2{5(cQ z#7k!0{FgjsOBM(|@m-^5mRgQPs*qKVhz}+u4YA!^Ghe(UC6oSB3>~oAOiJ3s^LkN% zNl8y^@WEr;%vpKwc+L^9nHCER$`RTaxBuRdZfNH&A{DfALknZ>^-SZTM+%IHKRUv~ zkdAqxg9_BKnswkFdX1d|hHE!KBeg~}A&4|#LEADGjY@J+UV<^GBoE6(41rilif3CC zXEphMKSCQ{UUwU-x;0jx#T$!fHG=P0AY~U=5j`)~c;K%Y@Eh4FIXTu+!c7I{J7a%x zt9lKLD`j4&Yt;WU-y8?j*UJ>d5sJn^l1h^EKEu_a6mCYN|LwWnrH@8H;vN4xj!p_( zBZs)g4DUa(?|cjjsEVfLQ_Hku8lS8lZeP&gHn@%cj81Rfr`k0z%HA$ets3xfsF3tc z^^oB_8a|w!JRE3cO#U;8y3nd%L8%)Sv{SciU=;QA%Ib64rVLRqy8$I_Y8fhc)T{6g zGd8s@*hX`Sm4S3ky(8N9glpd?+Gn$N1e10wNbL+(t6Ickp5ldjY1EoCH6PWO&n_OG z49wIZLLZ5OCN~g{1I6%o4is?-!JVmkMSVB{kf+^t3_FwB*_0<iuZ)511)hW;&zsZF z8+h)<x)9IZ3B+@~Hx`;XvcfwO(RFSdth9BeYNx+gG@Z?}IWk!+?@JvMnDEuEc=)HX z^%CggH$iEKLMWd=Sk=%DHO3qk?NFHsxD~tg*)PDRPbWf0HBB0;TO>g(u+0|@^F+gC zTTR_~As$c6PS7Kr@B)?flHpU^27#?(m@d7F!VVn=pZ?Vi`FcnSCM2`*LF9a_o{<8t z*>($hXUOawR3niJMSj{0iu9YQFot>!ZR^tyr@<&V$MA)VQP}AO{e2qjgUccTSHp3d zBuKQql%T&!hhn7?jSZV};7>7X=~S>4SWq{w)kzc*TC0-@dfUg4sn4cDEq%rXwxl1h zeN?%pd=XCXC*cZt^)lQr!Jd)GtLI9TtnZ*3Myk|A9D7_fMvgvUZz6yK2IM#z(XEUe zVZ$!8Fi!v0P_<6v-MBE3_f)+u3#O?@6Pco26Pcn^l($iX5-Hj!f1;Vw;q&5<L=Mjg zpkRXq5u|IPUYrB7=$44mB~dc^LeyjOLfwzbDj>&Lcfq4pi2gT3e|6hjXaV+pV);AN zmZ8^rAtGRXU7U~IiN@gO8Tz~zTH8+u@<ZzwBN26sJKMjk!Lx*YNd0=BRn!g!8HetP zP+M38CAphSli!d&wCS5Bmp~m|mIXc)ktEX<oe!NLUGK?6rqUtLltfNu^_F~as^lb^ zKS<V-vmsGOGz2%?aWnK8tS2Z=p$RpP9E*XD;YdzNl66rYra_b?p@CWGE);Muv|zQ5 z4CJSi)I`ZitWLwB28}y99}?BXB#t#iDOdmv^tuALVw;u3^E89hW(xJDC+VY&VWGnE z&_ZaY3#K5?_BDZtw$%b&N#GnkqAB!55VP)!rm)SnRhl<bv&T_Qcj9*_2^qJOz(lrv zx5FGb#Tsib#U(qDq$k}0N8nqon)gvn#|i2yT>B<TPrDOF!tdP3XP32q#pY3cGz@@t zxH6L)(e&VX&aX04r4QC_6yBfAu;#wUusOuSV@Y~LF%%?yM^a7h9S;}4-23a@FwN$3 z@@(a@PEL|^-R2lMvh~rX5L-RJIozXc%>{Iq7)EK*om3-Jk?jmn5SJP)H}j+pPRf%$ zhkjIN?)-h6%)>rTy$9e?7{_ovyBRAe&Xp!OnT!Y~GGakw?BiV65+>0dZO*-=Cmk_7 z?xb@YJ!BY6fQ@0g){8DGFj;ypq-r07*vaQO`2c6XC`2eJ#DWyAcj{9`c%F*4q;ZW^ zBW{)5sm7-|p#DHOXzL7y1HiMZJ8>29G#4WEvil&>*j-w;dU|U(2;ic&Ok>X9YC<Z* z@T?F~ds?A9kx>FILjCUz_Sa9fgU8_!Y7&~xaSBbFwudD3a5B^MVZEmii8Zl3G=u&( zLQ4rn3>6eJbYeJ&8TzoE+!8#{iESX`?hP8p+{|_gH?2;^+(e6*n^noeO=Jj6ZLP;X z2-5>>Y1k3w<BHH6FkAK}<KrE(GEbK_hdAA{6AXou1n@ZaCI^XgB3Y}4U^udhy2_#d zm&y9&haexBVyXM-A!wm$r|@R>B@G6T2=UP0BJ5@s?M7W87VS<J7JY)X0T#U-ZVj_2 z<zX0N&q-kxWu?d|QcB%CiZP+lICSIA_}aytBALj8ouQes-yxlvai<(dQ@RyOxl;m^ zQteZCS8IbHWRvQHZ>ccn?3Kbq>XpJoQe#qhM;n<E+R-Xfm_!I9pT>fGx>pL52=8b^ z>ybhUr+O4MAc2;51FhDJ_%}s76`0blAD*f9iiWpIL!O$E!o2yH=s+0hzyfvH-o#;0 zims!(!(-ak9r{rV>04>h_eFPjS^XjUeiMDarRbxNVG<IP%EO6D4ObSI$^$~^<)Mv~ zPaxQXB8j?3Ztt@6xG&ga*oa2zFM%F7rYz&~2%qX5MALa03Z_wDK{JJdd-cL(4R6Wx zpDm^j>J5*p1*x<WFjvnlffOwEl**Q-W~BzFb+T8Lq)67#24^`CCW=ymVM4u|%Imu~ zmA7Gu59(u#3eN)V;2)*RG1Xp@?^DvVMExSYev)1i6(aSp$IYlPBPA><*wWZnY-xOw zpeMJ7CXjI>wp1aE#xF20+#Qafm_Psugte%_+_8TOTE$TT-J9NPIIJY$sDKu6R2Z0M zjSA&3F%T6p`@>Y2Leewz*%Qc?r_<;x>jRuyuA>*1j;GUt(O^!RKIw-c@ESMscKM3@ zq>}^-@Mfl0pqvoXE7FAN2G$0cJ}z7nGrh?`eA4(QRXhEA#3nja(Dp$vTJ21$#`k@{ zD%&vu91&A!uRKgOLhPM5$&#+Zc><Vw<+(IT!gv$=jT+1i^Qx>J6_~izOJ`oxO%Kt$ zemb)P0kn8nkn>(mldTJHX~ljJP5e-IE-mDSXHaV(d3_+A-LPG{xZ&!N&=l;Y={(k6 z>3q}|7zZV;kEK^9jmGzm_Q3)fXoWZg(sK+r@f=+sPgx=L8AA5yxB3FU%fDDxwL>EU z91-J6)Dkfa-)_<&yZ*2Ox~sQn0`gQQ7U-92F>4)<$sm<@Sgu>nh8X>tA7xS=o0%?D zXgLnzYOh68M)fh=PsRt))5k%K`ZOR=u)iRd0FLpvsft*y`XPY1rP2cvAOmXa$wN&B z2Gl<IG-TaME#p&ejYpNdnx<xG8V)nHb5vTLF0o~ib>5hZJJW=VRySrYqHWB@el80a z-<Sl?2Dtd>WOxe3lU~`O$GY_Ili@RXo~tOI9qU5hkbL$zm##k*I=~Wc<ZT&V<lnsK zT9Cv9Yvwuv1%;S6!X-?ciM0VHjtW=BOl<WG472T^YNvl2Y0A;(o`G>{vx`#q>S5FH z*ui!{+TW*kkK;YM6A~gSK*BTHJq*L@DVKOxi%RGQKT-#if0tYwJE_1V(xxX*MIUt0 z8~0lD+kE9-$IT=}6p;`MBH<;MkPvT)gx`@S^JL|eE9mE#<utAU4?RFaYZlM%{|nvK z=<Y}H6A`MDOtA|$(_7_2_YM8K;h`Cs#(jslWiUCjU<5o%^^z*4x_Q&aBV_zOp!QTZ zQ=zmxPEB=(hyyR()ZxVc*x?sq+Of$d(^B2Sp1yOCJyYF0aRJfm=0FzwD_pc-3+6&j zz!YMo1%LYgiN}QtjWr~nY@u}#*<NMO;OK$VLD2&nX?Z45Uw&mj#4@={C!%|7#=}I~ z*Q}1nT*5&!m+sF9aH$%fL~DY*QwDqIgINCo<f!%;`p$*;1d1g-fo`(*m*yuk<j4ab zJoEHv4NVbH9sL3{0Q*=$jAlfRV-($r|Dp_h_AJt`zX($i&kvxFEP|Qp#SFdSE67m` zGIX8A@UdEvLGOed3#hA5_3s%v@g*3lwq{UfY}<q_n5(_3cfSgEs&}~(HfcP}mvq_E zlk{7uI|sXmsEgkg;X`Mpp0flZlU9*r^T~5wxPIpE$tBR&{xwxQ{a>0>FyLjVP@iW6 zsHyNgp5Cthip}^XjQ-avFdm=q&n*g2GbWQfOs|^@wT(B*3vvFi%_L{8;P`2>VJ4Fk z;phYck1t7(AFoHp=}WIbJ$+;u<ST@bD@2JPeqSG%sk^)iZ@?2_ic49sq5@+=MVQ*r zjN)ylFq6qPPLv~-JP-?t45gX6=j$+>Zb@HHi#}ww7wlX`&t1RLV#o_5xT+`5G(*KM z1~A>XXA0emmcueQLiG|Z4hCeX?U|u)!7{qR_o4n5%>K1kKu4&dQAl15e_^KZXUz&c z{lS+JbjEx=Q^Ld_D<BQGSu1eNN^lX7hABWV6a+EMG;F2e{vNdJg2gTxC%=pOJVV%K zbsJ_In#FAUTb8g5nSg97AeXD9cddrww&7XqR6|L1x)D5k9h9Ztc@q|?L0Q$MYXIZ- zY{AWBoE*L`Sqr5I;KQGob+F&|vS3~kS#+qpm}-QCD3M9{*m@X7z33F^m-QHNcQKrg zT(@Nzk^7tJ=^LSyw!a1K;gE=;v)64TN=SJyOHX?Xis7uZlF{@%8+^+5nh#+ua5BQm z#7!tI#KcWm`Y%<`B<Tp&21vL$TpyEgR~2rew`KEu{VA&W5W4q99MLtNhw3jjLJzP< z3CNKxd0-^n$}9*>&)x(F?WuxFwxVhy#jj;mzfcWB!QNCLjja$HLh`fep~>MTfXqr{ zwti|0jIPs;sv__k#CSbx3m$zuv=!>uxzg$HU=>sc1+}@Ap!c@I2-P!Nx7Y@K>^;SZ z-qya9)%LhW-|Cp{cqC^ZE1gDLJJIRv@LP3ye+Tpe`yA;s%i5_Pc6#nsofhrFGco%L z>9pM1iPGg)Z`J9EJy1{CcT1<8)=n|lX=}D#`%mbvKFZcf?|{etkswc6k@1K;&f?Y4 zZ2k9la3i{ytxvrJS@w(4;gYpO1MF}i*rDHE=xVd&uq)NpUEabFgkL#EnvRlySVgt? zGKs!9L=EnJaHqp;Cf$d!G1zC=4~Q<bdG<b7X!D80+@Qojmn7_hpt66#4K9Q4Wis3@ z?B;jl1%2PYpcYz{>o;|gtD(;Z(!UOD6^GHbITA+azl#S<J*nPI0lVjL^rHel53G0( zT4S=sgW)`Ih(LL(8JWXd4MHglVnNZqdyby_KD41*3V+?WFJ*CUbAn-6wL<OYqZpnv zl5{p|l^9ihWj}fb?4$+>?%RS=R^23}1OrD<!pG*Y1|5RVaE0n68GIHqX8cw~CmqH! z`-?Kfi#Z(NjU(~#D#F7_62kavqgD+X5Q>H+D6dKlAUL>VBaIGE=FoN;-N#nD_?hHd zmPB@IEaJ$Hia4@&@knIH@QRVWfmX-hXM3rKJ*yYCQ7+ZPqrD&C*$kHWBCVM|@&mpw z%Q%iNk|qdnoJX>%gU6vaqBx=#eF&%QGo<}FZqIQ{r&|eRD2v1Siyz^E1a_ft-sS{m zBx^j9Q?2yicMhzpp>BT?ckk^UPOesx42f9VJo@{SczkupL&=qT-=oW1kW*kmkV0$d zejNpbLig()dVkh9X(!eOLih4;6&$)fpTIQx_f+lle<y=A-uyX_W`eCtj^G!c-|*0@ zpF9OcVE;ql*UYj1hi+x;2n)PJi^}DsD>7He@bYPVpO}@)M~<#s<^dIW6wy4_pm%6@ z=7x?U?#*TIM*z7A7Ucb|Ts{6XoGrXX|4^y9^28d6dM3-eWo1WYfn$h~qJNmFzs@<> zqNXAL<uGiD*?ZVcy-U<<(sQZV^Q(VDk=jhw<*8y!2g%o;`5cp(jWUdlx#H`a>c^== zR#=<!(12hx3W0gm`2d8S9UEyd8%%SSTFqfs|HdP(Ze2Tebu@=vJ<%(!j^0KG<a58o z2Uyed?*0nry^&Wu&*!CgN$h&fbjz>tJoSDryPnS*biMn$;(8Bz+4VYl#q}(Rn_Vv( z1%zBL+bgcu5^Dpl=dq}`{0&U851}fje~?!=w)9&({PN>BvG}q!{{p?NeOdtH8Ia=` zN4Mf=2s6L(Rdc-TXfx5!i<p<a;bk9N=4BtFqP&g%=Q(_updhQNy&*T-?qxSa3@s2A z=w@}6p%VEnM6Wvy9zFLGw1s85><jZu_GQ$AUt_{ds`9DlNPC7sU!MBCvQU<h$~TaQ zv5DR?*7R8x>ai;r7R-gZeg)s-;ft<s%yW_kKKd^5J;1SJ6`hkb@C6qs*QXc%2p#ZU z3N=cOcNhKk6j)F<FH|%N2`yB#PZlZ<YXb`v8?J_9#G#*HfUO5rJN?~7BmHxNF29Oz z*Sq;RC|<dWCz^i2lrx6^JK;&HktIW5V6z-g0NIx+d=ek#`~v;(coyr;&2pyC*t60J zK7KS>&K=~q<TU~DHo3ybD~MQHK`bax%=GD=zu~bu-qJ?$9QUP-qyj|-Ld9s*8`vh# zF@m?rGp0Eo{s-paX(!DtzgxQ$6msS!Atm^MQPEX%JdQjW&-1^-J^1Dm>t&bR=99?b z{sTjTJCB{yohOe$gZ_YcT*`1PZk25aM#B=A7rKNaIC>y}MwrIxX@rhE%LqAsbn}T@ zTGy512O33g3DXu{fp~O8*(k4Hhx7#=wb?d5kC%KNi8o(=&(72JK~0IAO-;O4&FG-7 zoPaF7S}Cu-0BWFZgLGR*-8}lgl<J~p=dqJ~r_?UnZfV|0%{le_JLpzC#6<n4hN`k1 z64U`Jsup^npsIhbsq(<~slYz5!Xkn&J-W8iwr>UXwG~A<zNzx@2=x!!uY&s7ilW5a zM3vgqYY7YP#&7@WkN&l(mcMpB&rwZ%^iT8vI-@rSM7g=y?@_zjV2cwVevNwrkn-`_ zdDU&}s0&JU&983iP%qZVY=m%s9`z|IZ{csH@UA6Z%8hcvKLfvg@lVH(aOx}fMEcJv z{`V?B{hyIs=pQcpe4($`{d}R1ru}@OuXO!<q0e0Xe4)=F{d}Phru=;QFMQ4KpGp_{ zFh?$J@TA3GL>Kx@0522qO7A-5LhnNSe4(>gKVSU#xafb9E_BEvmq#&W@R!hq9yjGO z1E=3Voi3Ee$c45QKVK+r`T3GVGn0vzQ8Vm=%O(!$JF;SE-x2e1Is7zf#pOlCJYU7- zMkP;Gv41VjT&4e5O}eJkr7O)^B~Ml*PgEsOQYBANB~MNzPfR6GN+nN7rJrV`m?xsr zPcu>MKURWOl|1-L9(W}Wy3$XhF6O~j`f0SqJV-PM2UyI5tK@-I@}MgHG^*lJ<*77` zynKBwM)gn&@^y<?l@vXlroSzY!Cy(g7Ut{D@ye+x6ZF}5<s#VfSk-(0djkC*o;U&h zSDH8h{d<l$0sVJ_I01cPFHX=t=mhjpv^W8MJS$E>pVx^K%%)#cXw?G-Oi5w`?p}bl zlM^Gr%wN~iPhUqE)koZhKKv55nN9)<$q@ol3h^Bs4x^hXg#f0M74%c2u(#2NFXCtP z@?HFlUe1Z1jU|s`KWk6o`;lV>bo9%zSV{m>M?d;0I@mqwoKie<5DDl?t{9Ng)nk!D z08`2g`YBS_q3Mi8e7Oe+s3flrNU6+YDV@ym62O%56#Wz_OaV&w#rrAy67Q$&oxLAp e2L8&xsSird$Y;rMf%QOuDS2&Pb^Qd4m;Viac8-t$ diff --git a/doc/build/doctrees/environment.pickle b/doc/build/doctrees/environment.pickle index f62090d6751e80b59d170fdca8486f3d1b9c6d77..28a677e6662fda797590dfab93a4c446cbe70796 100644 GIT binary patch delta 672 zcmeyG{55%l0h=6aW?o8a#grcQ-29Z%oYdkeJ>1D@sW}Cer6rj;#gqNmOg&269k2QB zV}1W8r?iJBCAA<Gs3R{q6R5U!N=8Zl6pbDsJw1IO0%?rTNJ%r*E2x~(Ba9@NmY9^8 zKlvP+<YY~Dg~^}U%tXYHWRr_3i%WodC;PG6FqUlYW?#d|STfmya}AL5l#`1c$oU{J z7fALAJ^>093mF6DH!l~q2T{*O>_Dp3r8Oom&|%#iEG7sNO%=BViKdEcOm@&`*?e9? z6eRjo(h)?dORIn=9~rRHIN9ZloFzSMkN}t*s3<=9f-w7J9eGKh0dDfDKr%;O6G%>z zcL0*T3ObXS6~urnDFq8YkiOKCjQo@-ZBu%*CQlR*nQWlMJ-J?i7p&9?NM2B|0+QT{ zwm{NT(H=;4D!Ks4bBZA2_?3KtWUP`ZS4mb7GXn$A812dZI%1O-DTxCmb}6X=$%jgo zKvG)S6-Xv3J8+luaHN&yC6{F8=S{vZFE;s*vI<zO0?4z>z(|?QrvePg$=)g&K(a)| z7)Y*AQ3sM2RKSi=wF9!fR6$PaP?f2NSzU@q2DMW(vI2qb(a0#tn3^%Qvt&wEI4ZXm hmD_~Moq)=niprgZ!sW<X3gK_oRyzrdnZ;k#xd1X6;qCwc delta 660 zcmeyG{55%l0h=6ma$0ImL1k%4W=`>x9`@Y)l+v73Ad59KFD12NvLBnNcagi}HSd4l zb6Yz~dw5b(3sQkHdC8eTRkc$xiu$K$^oZ%{=>rkSsQBcf%Hk3rL$9E6N{<kdL`F)Q z>EzRFl9PY1IZb}Troft(n3S16*^k|Zv1oHQ`x-{ZqRAGVYk-`moLuZc&If_HK(bHp z2~en5$QUTUdAYDXh<Yw!2U4vrtuc9l4(sM%F+q@Ms<<skG*w(<vV%U$=JOJwAkn9i zjvz{1S_MS;$bgl`$u4K)Eb3u{cz1H3qWI(s!t9fE<RyUyxXG&m$sBo2AURFm0Z8^L z=uBo-5CgKL6fF2a`cg|W@>8a?P3h5^JW)hsvVju!<az~Ouu>-=c|pMnNOCLM0!dFr zdm!1V=mI3qDT0jSSMmjtu}Z33MOi`23=BYHv?urLh)rIkBo36=rKAQVA1YY_Noi$Q zAepG_z+KeCkye_QT#}ieH~GH2*yKaXDqyt=AkQ)bBVsb23NR!md#h*w$r2S~Ah|+C z9Y|hK0Xs(34#@UW1v#lhRi++hbtxj!Yo};r1p?ipkx`T}HDhXL$&{>cRBkOQw+WRy d0hK!yl{*WC%aOGd!r!c|b`lsfi@&OK0RTRj-)R5< diff --git a/doc/build/html/cfelpyutils.html b/doc/build/html/cfelpyutils.html index 7e5d627..7d2a7f3 100644 --- a/doc/build/html/cfelpyutils.html +++ b/doc/build/html/cfelpyutils.html @@ -193,9 +193,9 @@ the stack.</p> <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> <li><strong>name</strong> (<em>str</em>) – stack name.</li> <li><strong>path</strong> (<em>str</em>) – path in the hdf5 file where the stack will be written.</li> -<li><strong></strong><strong>(</strong><strong>Union</strong><strong>[</strong><strong>numpy.ndarray</strong><strong>, </strong><strong>str</strong><strong>, </strong><strong>int</strong><strong>, </strong><strong>float</strong><strong>]</strong><strong></strong> (<em>initial_data</em>) – initial entry in the stack. It gets written to the</li> +<li><strong></strong><strong>(</strong><strong>Union</strong><strong>[</strong><strong>numpy.ndarray</strong><strong>, </strong><strong>bytes</strong><strong>, </strong><strong>int</strong><strong>, </strong><strong>float</strong><strong>]</strong><strong></strong> (<em>initial_data</em>) – initial entry in the stack. It gets written to the</li> <li><strong>as slice 0. Its characteristics are used to validate all data subsequently appended to the stack.</strong> (<em>stack</em>) – </li> -<li><strong>axes</strong> (<em>str</em>) – the ‘axes’ attribute for the stack, as defined by the CXIDB file format.</li> +<li><strong>axes</strong> (<em>bytes</em>) – the ‘axes’ attribute for the stack, as defined by the CXIDB file format.</li> <li><strong>compression</strong> (<em>Union</em><em>[</em><em>None</em><em>, </em><em>bool</em><em>,</em><em>str</em><em>]</em><em></em>) – compression parameter for the stack. This parameters works in the same</li> <li><strong>as the normal compression parameter from h5py. The default value of this parameter is True.</strong> (<em>way</em>) – </li> <li><strong>chunk_size</strong> (<em>Union</em><em>[</em><em>None</em><em>, </em><em>tuple</em><em>]</em><em></em>) – HDF5 chuck size for the stack. If this parameter is set to None, the</li> @@ -223,7 +223,7 @@ the write_slice_and_increment.</p> <tbody valign="top"> <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> <li><strong>name</strong> (<em>str</em>) – stack name, defining the stack to which the data will be appended.</li> -<li><strong></strong><strong>(</strong><strong>Union</strong> (<em>data</em>) – numpy.ndarray, str, int, float): data to write. The data will be validated against the type</li> +<li><strong></strong><strong>(</strong><strong>Union</strong><strong>[</strong><strong>numpy.ndarray</strong><strong>, </strong><strong>bytes</strong><strong>, </strong><strong>int</strong><strong>, </strong><strong>float</strong><strong>]</strong><strong></strong> (<em>data</em>) – data to write. The data will be validated against the type</li> <li><strong>size of previous entries in the stack.</strong> (<em>and</em>) – </li> </ul> </td> @@ -359,7 +359,7 @@ operations (for example, creating a link).</p> <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> <li><strong>name</strong> (<em>str</em>) – entry name</li> <li><strong>path</strong> (<em>str</em>) – path in the hdf5 file where the entry will be written.</li> -<li><strong></strong><strong>(</strong><strong>Union</strong> (<em>data</em>) – numpy.ndarray, str, int, float): data to write</li> +<li><strong>data</strong> (<em>Union</em><em>[</em><em>numpy.ndarray</em><em>, </em><em>bytes</em><em>, </em><em>int</em><em>, </em><em>float</em><em>]</em><em></em>) – data to write</li> <li><strong>overwrite</strong> (<em>bool</em>) – if set to True, an entry already existing at the same location will be overwritten. If set</li> <li><strong>False</strong><strong>, </strong><strong>an attempt to overwrite an entry will raise an error.</strong> (<em>to</em>) – </li> </ul> diff --git a/doc/build/html/searchindex.js b/doc/build/html/searchindex.js index 5f77a38..113258d 100644 --- a/doc/build/html/searchindex.js +++ b/doc/build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["cfelpyutils","index","modules"],envversion:51,filenames:["cfelpyutils.rst","index.rst","modules.rst"],objects:{"":{cfelpyutils:[0,0,0,"-"]},"cfelpyutils.cfel_crystfel":{load_crystfel_geometry:[0,1,1,""]},"cfelpyutils.cfel_cxi":{CXIWriter:[0,2,1,""]},"cfelpyutils.cfel_cxi.CXIWriter":{add_stack_to_writer:[0,3,1,""],append_data_to_stack:[0,3,1,""],close_file:[0,3,1,""],create_link:[0,3,1,""],create_link_to_group:[0,3,1,""],file_is_full:[0,3,1,""],get_file_handle:[0,3,1,""],initialize_stacks:[0,3,1,""],stacks_are_initialized:[0,3,1,""],write_simple_entry:[0,3,1,""],write_stack_slice_and_increment:[0,3,1,""]},"cfelpyutils.cfel_fabio":{read_cbf_from_stream:[0,1,1,""]},"cfelpyutils.cfel_geom":{apply_geometry_from_file:[0,1,1,""],apply_geometry_from_pixel_maps:[0,1,1,""],pixel_maps_for_image_view:[0,1,1,""],pixel_maps_from_geometry_file:[0,1,1,""]},"cfelpyutils.cfel_hdf5":{load_nparray_from_hdf5_file:[0,1,1,""]},"cfelpyutils.cfel_optarg":{parse_parameters:[0,1,1,""]},"cfelpyutils.cfel_psana":{dirname_from_source_runs:[0,1,1,""],psana_event_inspection:[0,1,1,""],psana_obj_from_string:[0,1,1,""]},cfelpyutils:{cfel_crystfel:[0,0,0,"-"],cfel_cxi:[0,0,0,"-"],cfel_fabio:[0,0,0,"-"],cfel_geom:[0,0,0,"-"],cfel_hdf5:[0,0,0,"-"],cfel_optarg:[0,0,0,"-"],cfel_psana:[0,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"],"2":["py","class","Python class"],"3":["py","method","Python method"]},objtypes:{"0":"py:module","1":"py:function","2":"py:class","3":"py:method"},terms:{"boolean":0,"case":0,"class":0,"default":0,"float":0,"function":0,"import":0,"int":0,"new":0,"return":0,"true":0,For:0,Its:0,THe:0,The:0,Use:0,about:0,access:0,accord:0,across:0,add:0,add_stack_to_writ:0,added:0,adher:0,after:0,again:0,against:0,all:0,allow:0,allowa:0,alreadi:0,also:0,amost:0,ani:0,anoth:0,api:0,appear:0,append:0,append_data_to_stack:0,appli:0,apply_geometry_from_fil:0,apply_geometry_from_pixel_map:0,are_stacks_initi:[],argument:0,arrai:0,assign:0,attempt:0,attribut:0,automat:0,axes:0,backcspad:0,base:0,beam:0,been:0,befor:0,block:0,bool:0,brace:0,bracket:0,buffer:0,build:0,can:0,cannot:0,cbf_obj:0,cbfimag:0,center:0,cfel:0,cfel_crystfel:2,cfel_cxi:2,cfel_fabio:2,cfel_geom:2,cfel_hdf5:2,cfel_optarg:2,cfel_psana:2,cfelfabio:0,cfelgeom:0,cfelhdf5:0,cfeloptarg:0,cfelpsana:0,chang:0,characterist:0,check:0,choic:0,chuck:0,chunk:0,chunk_siz:0,close:0,close_fil:0,command:0,compress:0,comput:0,config:0,configpars:0,configur:0,contain:0,content:[1,2],convers:0,convert:0,coordin:0,corner:0,correct:0,count:0,counter1:0,counter2:0,cours:0,cover:0,creat:0,create_link:0,create_link_to_group:0,crystfel:0,crystfel_geometri:0,cxi:0,cxidb:0,cxiwrit:0,cxix:0,data:0,data_as_slab:0,data_filenam:0,data_group:0,defin:0,delet:0,describ:0,detector1:0,detector2:0,detector:0,detector_1:0,detectorname1:0,detectorname2:0,determin:0,dict:0,dictionari:0,directori:0,dirnam:0,dirname_from_source_run:0,distanc:0,document:0,doubl:0,dtype:0,dure:0,each:0,end:0,ensur:0,entri:0,entry_1:0,error:0,etc:0,event:0,exampl:0,exist:0,exp:0,expand:0,extract:0,fabio:0,fals:0,file:0,file_is_ful:0,filenam:0,first:0,fix:0,fnam:0,follow:0,form:0,format:0,frame:0,from:0,frontcspad:0,full:0,further:0,gener:0,geometri:0,geometry_filenam:0,get:0,get_detector_geometry_2:0,get_file_handl:0,group:0,h5py:0,handl:0,has:0,have:0,hdf5:0,hold:0,html:0,http:0,identifi:0,im_out:0,imag:0,imageview:0,img_shap:0,implement:0,index:1,inform:0,initi:0,initial_data:0,initialize_stack:0,input:0,inspect:0,instanc:0,instanti:0,instead:0,integ:0,interact:0,intern:0,interoper:0,interpret:0,keep:0,kei:0,layout:0,left:0,level:0,like:0,line:0,link:0,list:0,load:0,load_crystfel_geometri:0,load_nparray_from_hdf5_fil:0,locat:0,low:0,make:0,manag:0,mani:0,manual:0,map:0,match:0,max_num_slic:0,maximum:0,miss:0,mod:0,modul:[1,2],monitor_param:0,more:0,multi:0,must:0,nake:0,name:0,ndarrai:0,need:0,never:0,next:0,non:0,none:0,nonetyp:0,normal:0,nparrai:0,number:0,number_of_entri:0,numpi:0,object:0,onc:0,one:0,onli:0,open:0,oper:0,oppos:0,option:0,order:0,org:0,origin:0,otherwis:0,out:0,output:0,overwrit:0,overwritten:0,own:0,p11:0,packag:2,page:1,paramet:0,pars:0,parse_paramet:0,parser:0,path:0,payload:0,petraiii:0,physic:0,pixel:0,pixel_maps_for_image_view:0,pixel_maps_from_geometry_fil:0,point:0,prefix:0,previou:0,print:0,process:0,project:0,provid:0,psana:0,psana_event_inspect:0,psana_obj_from_str:0,pyqtgraph:0,python:0,quot:0,rai:0,rais:0,rand:0,random:0,rang:[],rawconfigpars:0,read:0,read_cbf_from_stream:0,receiv:0,refer:0,reimplement:0,relev:0,replac:0,represent:0,reset:0,respect:0,risk:0,rule:0,same:0,search:1,see:0,sender:0,set:0,sever:0,shape:0,simpl:0,singl:0,size:0,slab:0,slab_shap:0,slice:0,softwar:0,sourc:0,specifi:0,squar:0,stack:0,stacks_are_initi:0,start:0,statu:0,str:0,stream:0,string:0,structur:0,style:0,subdirectori:0,submodul:2,subsequ:0,succe:0,sure:0,sync:0,synchron:0,system:0,take:0,test1:0,test2:0,tfel:0,than:0,thei:0,them:0,thi:0,time:0,top:0,tri:0,tupl:0,turn:0,type:0,uncorrect:0,union:0,unless:0,usag:0,use:0,used:0,user:0,using:0,util:0,valid:0,valu:0,verbatim:0,visual:0,wai:0,want:0,what:0,where:0,which:0,widget:0,without:0,word:0,work:0,write:0,write_simple_entri:0,write_slice_and_incr:0,write_stack_slice_and_incr:0,writer:0,written:0,www:0,your:0},titles:["cfelpyutils package","Welcome to cfelpyutils’s documentation!","cfelpyutils"],titleterms:{cfel_crystfel:0,cfel_cxi:0,cfel_fabio:0,cfel_geom:0,cfel_hdf5:0,cfel_optarg:0,cfel_psana:0,cfelfabio:[],cfelgeom:[],cfelhdf5:[],cfeloptarg:[],cfelpsana:[],cfelpyutil:[0,1,2],content:0,document:1,indic:1,modul:0,packag:0,submodul:0,tabl:1,welcom:1}}) \ No newline at end of file +Search.setIndex({docnames:["cfelpyutils","index","modules"],envversion:51,filenames:["cfelpyutils.rst","index.rst","modules.rst"],objects:{"":{cfelpyutils:[0,0,0,"-"]},"cfelpyutils.cfel_crystfel":{load_crystfel_geometry:[0,1,1,""]},"cfelpyutils.cfel_cxi":{CXIWriter:[0,2,1,""]},"cfelpyutils.cfel_cxi.CXIWriter":{add_stack_to_writer:[0,3,1,""],append_data_to_stack:[0,3,1,""],close_file:[0,3,1,""],create_link:[0,3,1,""],create_link_to_group:[0,3,1,""],file_is_full:[0,3,1,""],get_file_handle:[0,3,1,""],initialize_stacks:[0,3,1,""],stacks_are_initialized:[0,3,1,""],write_simple_entry:[0,3,1,""],write_stack_slice_and_increment:[0,3,1,""]},"cfelpyutils.cfel_fabio":{read_cbf_from_stream:[0,1,1,""]},"cfelpyutils.cfel_geom":{apply_geometry_from_file:[0,1,1,""],apply_geometry_from_pixel_maps:[0,1,1,""],pixel_maps_for_image_view:[0,1,1,""],pixel_maps_from_geometry_file:[0,1,1,""]},"cfelpyutils.cfel_hdf5":{load_nparray_from_hdf5_file:[0,1,1,""]},"cfelpyutils.cfel_optarg":{parse_parameters:[0,1,1,""]},"cfelpyutils.cfel_psana":{dirname_from_source_runs:[0,1,1,""],psana_event_inspection:[0,1,1,""],psana_obj_from_string:[0,1,1,""]},cfelpyutils:{cfel_crystfel:[0,0,0,"-"],cfel_cxi:[0,0,0,"-"],cfel_fabio:[0,0,0,"-"],cfel_geom:[0,0,0,"-"],cfel_hdf5:[0,0,0,"-"],cfel_optarg:[0,0,0,"-"],cfel_psana:[0,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"],"2":["py","class","Python class"],"3":["py","method","Python method"]},objtypes:{"0":"py:module","1":"py:function","2":"py:class","3":"py:method"},terms:{"boolean":0,"byte":0,"case":0,"class":0,"default":0,"float":0,"function":0,"import":0,"int":0,"new":0,"return":0,"true":0,For:0,Its:0,THe:0,The:0,Use:0,about:0,access:0,accord:0,across:0,add:0,add_stack_to_writ:0,added:0,adher:0,after:0,again:0,against:0,all:0,allow:0,allowa:0,alreadi:0,also:0,amost:0,ani:0,anoth:0,api:0,appear:0,append:0,append_data_to_stack:0,appli:0,apply_geometry_from_fil:0,apply_geometry_from_pixel_map:0,are_stacks_initi:[],argument:0,arrai:0,assign:0,attempt:0,attribut:0,automat:0,axes:0,backcspad:0,base:0,beam:0,been:0,befor:0,block:0,bool:0,brace:0,bracket:0,buffer:0,build:0,can:0,cannot:0,cbf_obj:0,cbfimag:0,center:0,cfel:0,cfel_crystfel:2,cfel_cxi:2,cfel_fabio:2,cfel_geom:2,cfel_hdf5:2,cfel_optarg:2,cfel_psana:2,cfelfabio:0,cfelgeom:0,cfelhdf5:0,cfeloptarg:0,cfelpsana:0,chang:0,characterist:0,check:0,choic:0,chuck:0,chunk:0,chunk_siz:0,close:0,close_fil:0,command:0,compress:0,comput:0,config:0,configpars:0,configur:0,contain:0,content:[1,2],convers:0,convert:0,coordin:0,corner:0,correct:0,count:0,counter1:0,counter2:0,cours:0,cover:0,creat:0,create_link:0,create_link_to_group:0,crystfel:0,crystfel_geometri:0,cxi:0,cxidb:0,cxiwrit:0,cxix:0,data:0,data_as_slab:0,data_filenam:0,data_group:0,defin:0,delet:0,describ:0,detector1:0,detector2:0,detector:0,detector_1:0,detectorname1:0,detectorname2:0,determin:0,dict:0,dictionari:0,directori:0,dirnam:0,dirname_from_source_run:0,distanc:0,document:0,doubl:0,dtype:0,dure:0,each:0,end:0,ensur:0,entri:0,entry_1:0,error:0,etc:0,event:0,exampl:0,exist:0,exp:0,expand:0,extract:0,fabio:0,fals:0,file:0,file_is_ful:0,filenam:0,first:0,fix:0,fnam:0,follow:0,form:0,format:0,frame:0,from:0,frontcspad:0,full:0,further:0,gener:0,geometri:0,geometry_filenam:0,get:0,get_detector_geometry_2:0,get_file_handl:0,group:0,h5py:0,handl:0,has:0,have:0,hdf5:0,hold:0,html:0,http:0,identifi:0,im_out:0,imag:0,imageview:0,img_shap:0,implement:0,index:1,inform:0,initi:0,initial_data:0,initialize_stack:0,input:0,inspect:0,instanc:0,instanti:0,instead:0,integ:0,interact:0,intern:0,interoper:0,interpret:0,keep:0,kei:0,layout:0,left:0,level:0,like:0,line:0,link:0,list:0,load:0,load_crystfel_geometri:0,load_nparray_from_hdf5_fil:0,locat:0,low:0,make:0,manag:0,mani:0,manual:0,map:0,match:0,max_num_slic:0,maximum:0,miss:0,mod:0,modul:[1,2],monitor_param:0,more:0,multi:0,must:0,nake:0,name:0,ndarrai:0,need:0,never:0,next:0,non:0,none:0,nonetyp:0,normal:0,nparrai:0,number:0,number_of_entri:0,numpi:0,object:0,onc:0,one:0,onli:0,open:0,oper:0,oppos:0,option:0,order:0,org:0,origin:0,otherwis:0,out:0,output:0,overwrit:0,overwritten:0,own:0,p11:0,packag:2,page:1,paramet:0,pars:0,parse_paramet:0,parser:0,path:0,payload:0,petraiii:0,physic:0,pixel:0,pixel_maps_for_image_view:0,pixel_maps_from_geometry_fil:0,point:0,prefix:0,previou:0,print:0,process:0,project:0,provid:0,psana:0,psana_event_inspect:0,psana_obj_from_str:0,pyqtgraph:0,python:0,quot:0,rai:0,rais:0,rand:0,random:0,rang:[],rawconfigpars:0,read:0,read_cbf_from_stream:0,receiv:0,refer:0,reimplement:0,relev:0,replac:0,represent:0,reset:0,respect:0,risk:0,rule:0,same:0,search:1,see:0,sender:0,set:0,sever:0,shape:0,simpl:0,singl:0,size:0,slab:0,slab_shap:0,slice:0,softwar:0,sourc:0,specifi:0,squar:0,stack:0,stacks_are_initi:0,start:0,statu:0,str:0,stream:0,string:0,structur:0,style:0,subdirectori:0,submodul:2,subsequ:0,succe:0,sure:0,sync:0,synchron:0,system:0,take:0,test1:0,test2:0,tfel:0,than:0,thei:0,them:0,thi:0,time:0,top:0,tri:0,tupl:0,turn:0,type:0,uncorrect:0,union:0,unless:0,usag:0,use:0,used:0,user:0,using:0,util:0,valid:0,valu:0,verbatim:0,visual:0,wai:0,want:0,what:0,where:0,which:0,widget:0,without:0,word:0,work:0,write:0,write_simple_entri:0,write_slice_and_incr:0,write_stack_slice_and_incr:0,writer:0,written:0,www:0,your:0},titles:["cfelpyutils package","Welcome to cfelpyutils’s documentation!","cfelpyutils"],titleterms:{cfel_crystfel:0,cfel_cxi:0,cfel_fabio:0,cfel_geom:0,cfel_hdf5:0,cfel_optarg:0,cfel_psana:0,cfelfabio:[],cfelgeom:[],cfelhdf5:[],cfeloptarg:[],cfelpsana:[],cfelpyutil:[0,1,2],content:0,document:1,indic:1,modul:0,packag:0,submodul:0,tabl:1,welcom:1}}) \ No newline at end of file -- GitLab