ó
z™xTc           @   sÐ   d  d l  m Z d  d l Z d  d l Z d  d l m Z d  d l m Z d e f d „  ƒ  YZ e	 d k rÌ d  d l
 Z
 e
 j d Z e e ƒ Z e j ƒ  e GHe j GHe j Ge e j ƒ Ge j e j GHn  d S(	   iÿÿÿÿ(   t   divisionN(   t   DetectorImageBase(   t   ImageExceptiont   PilatusImagec           B   sz   e  Z d  „  Z d d d d d d d d d	 d
 d d d d d d g Z d „  Z d „  Z d „  Z d d „ Z d d „ Z RS(   c         C   s&   t  j |  | ƒ d |  _ d |  _ d  S(   Nt   Pilatusiÿÿÿÿ(   R   t   __init__t
   vendortypet   vendor_specific_null_value(   t   selft   filename(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/detectors/pilatus_minicbf.pyR      s    	t   PIXEL_SIZE_UNITSt   DISTANCEt   PHIt
   WAVELENGTHt   SIZE1t   SIZE2t   TWOTHETAt   DISTANCE_UNITSt	   OSC_RANGEt   BEAM_CENTER_Xt   BEAM_CENTER_Yt   CCD_IMAGE_SATURATIONt	   OSC_STARTt   DETECTOR_SNt
   PIXEL_SIZEt   AXISc         C   s   t  d ƒ ‚ d  S(   Ns$   file length not computed for miniCBF(   R   (   R   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/detectors/pilatus_minicbf.pyt
   fileLength   s    c         C   s   t  d ƒ ‚ d  S(   Ns$   endian-ness not computed for miniCBF(   R   (   R   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/detectors/pilatus_minicbf.pyt	   getEndian   s    c         C   s   t  S(   N(   t   False(   R   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/detectors/pilatus_minicbf.pyt   endian_swap_required   s    t   buffer_basedc         C   sÕ   |  j  ƒ  |  j d  k r< |  j j ƒ  |  j |  j k r< d  S|  j d k rZ t d ƒ ‚ n  yW d d l m	 } | |  j
 ƒ |  _ |  j j | ƒ j |  j |  j ƒ } |  j | ƒ Wn t k
 rÐ t d ƒ ‚ n Xd  S(   Ni   s(   2-by-2 binning not supported for miniCBFiÿÿÿÿ(   t   cbf_binary_adaptors,   unable to read miniCBF data; contact authors(   t
   readHeadert   linearintdatat   Nonet   sizet   size1t   size2t   binR   t   cbflib_adaptbxR   R	   t   adaptort   uncompress_implementationt   uncompress_datat   bin_safe_set_datat	   Exception(   R   t	   algorithmR   t   data(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/detectors/pilatus_minicbf.pyt   read   s    
i 0  c         C   s�  |  j  s™t |  j d ƒ j | ƒ } t j d ƒ } | j | ƒ } t j d ƒ } | j | ƒ } | j d ƒ } | j d ƒ } | | d | !|  _ g  |  j j	 d ƒ D] }	 |	 j
 ƒ  ^ q¥ |  _ xN t t |  j ƒ ƒ D]7 }
 x. d D]& } |  j |
 j | d	 ƒ |  j |
 <qã WqÖ Wi d
 d 6|  _  x™d d d t f d d d t f d d d t f d d d t f d d d t f d d d t f d d d t f d d d t f d d d t f d d d t f d d d t f d  d! d t f d" d# d t f d$ d% d t f d& d& d t f d' d' d t f g D]¡ \ } } }
 } xŒ |  j D]� } | j | ƒ d( k r4|
 d k r‘| j	 d) ƒ } d) j | d t | ƒ !ƒ |  j  | <Pn  | | j	 d) ƒ |
 ƒ |  j  | <Pq4q4WqW|  j  d c i d d* 6d+ d, 6|  j  d 9<|  j  d c i d d* 6d+ d, 6|  j  d 9<|  j  d c |  j  d 9<|  j  d c |  j  d 9<t j |  j  d ƒ } t j |  j  d ƒ |  j  d <t j | ƒ |  j  d <g  } t } x^ | j ƒ  D]P } d | k rÆt } n( | sÒq«n t | j
 ƒ  ƒ d( k rîPn  | j | ƒ q«Wd- j | ƒ |  _ g  |  j j	 d- ƒ D] }	 |	 j
 ƒ  ^ q$|  _ xN t t |  j ƒ ƒ D]7 }
 x. d D]& } |  j |
 j | d	 ƒ |  j |
 <qbWqUWx… d. d/ d t f d0 d1 d t f g D]_ \ } } }
 } xJ |  j D]? } | j | ƒ d( k rÑ| | j	 d) ƒ |
 ƒ |  j  | <PqÑqÑWqµW|  j d2 k rB|  j d3 k rBd4 |  _ q™|  j d5 k rl|  j d6 k rld7 |  _ q™|  j d8 k r™|  j d9 k r™d: |  _ q™n  d  S(;   Nt   rbs%   _array_data.header_convention[ "]*SLSs)   _array_data.header_convention[ "]*PILATUSs   _array_data.header_contentss   _array_data.datai   t   #s   
,();t    iÿÿ  R   t   Count_cutoffR   s	   Detector:iÿÿÿÿR   t
   Pixel_sizeR
   i   R   t   Start_angleR   t   Detector_distanceR   R   t
   WavelengthR   t   Beam_xyR   R   t   Angle_incrementR   t   Detector_2thetaR   t   Oscillation_axisR   t   Phit   OMEGAt   DATEi    t    t   mmiè  t   ms   
R   s   X-Binary-Size-Second-DimensionR   s   X-Binary-Size-Fastest-Dimensioniß	  iŸ	  s
   Pilatus-6Mi�  iÃ  s
   Pilatus-2Mik  iç  s   Pilatus-300K(   t
   parameterst   openR	   R/   t   ret   compilet   findallt   indext   headert   splitt   stript   headerlinest   xranget   lent   replacet   intt   strt   floatt   findt   joint   copyR   t
   splitlinest   Truet   appendR$   R%   R   (   R   t	   maxlengtht   rawdatat   SLS_patternt	   SLS_matcht   PILATUS_patternt   PILATUS_matcht
   headeropent   headercloset   xt   idxt	   charactert   tagt   searcht   datatypet   linet   tokenst   swpt   header_linest   found_array_data_datat   record(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/detectors/pilatus_minicbf.pyR    1   s˜    	.(%# 	.(% (	   t   __name__t
   __module__R   t   mandatory_keysR   R   R   R/   R    (    (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/detectors/pilatus_minicbf.pyR      s   					t   __main__i   (   t
   __future__R    RT   RD   t   iotbx.detectors.detectorbaseR   t   iotbx.detectorsR   R   Rl   t   syst   argvt   it   aR/   RB   RY   RM   R$   R%   (    (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/detectors/pilatus_minicbf.pyt   <module>   s   ‰
