ó
ÿ™xTc           @   s—   d  d l  m 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	 x& e	 j
 d D] Z e j e ƒ GHqx Wn  d S(	   iÿÿÿÿ(   t   divisionN(   t   FormatCBFFull(   t   Detectort   FormatCBFMultiTilec           B   sM   e  Z d  Z e d „  ƒ Z d „  Z d „  Z d „  Z d „  Z d d „ Z
 RS(   s+   An image reading class multi-tile CBF filesc         C   s/   t  j ƒ  } | j |  t  j ƒ | j ƒ  d k S(   sV   Check to see if this looks like an CBF format image, i.e. we can
    make sense of it.i   (   t   pycbft   cbf_handle_structt   read_widefilet
   MSG_DIGESTt   count_elements(   t
   image_filet
   cbf_handle(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/format/FormatCBFMultiTile.pyt
   understand   s    c         C   s2   |  j  | ƒ s t ‚ t j |  | ƒ d |  _ d S(   s3   Initialise the image structure from the given file.N(   R   t   AssertionErrorR   t   __init__t   Nonet	   _raw_data(   t   selfR	   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/format/FormatCBFMultiTile.pyR      s    	c         C   s}   d d l  m } | j |  ƒ y  d d l m } | ƒ  |  _ Wn  t k
 r_ t j ƒ  |  _ n X|  j j	 |  j
 t j ƒ d S(   sK   Open the image file as a cbf file handle, and keep this somewhere
    safe.iÿÿÿÿ(   t	   FormatCBF(   t   cbf_wrapperN(   t   dxtbx.format.FormatCBFR   t   _startt!   xfel.cftbx.detector.cspad_cbf_tbxR   t   _cbf_handlet   ImportErrorR   R   R   t   _image_fileR   (   R   R   R   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/format/FormatCBFMultiTile.pyR   *   s    c         C   sØ  |  j  } t ƒ  } x¿t | j ƒ  ƒ D]«} | j | ƒ } | j d ƒ | j d ƒ | j | ƒ | j d ƒ | j ƒ  } | j	 | ƒ } | j
 ƒ  } | j | ƒ | j d ƒ | j d ƒ f } | j ƒ  d d !}	 | j ƒ  d d !}
 | j d d ƒ } t t | j d ƒ ƒ ƒ } yE | j d	 ƒ | j d
 ƒ | j ƒ  } | j d ƒ } | | f } Wn d } n X| j | ƒ ~ | j |	 |
 | ƒ | j t t t | ƒ ƒ ƒ | j | ƒ | j t t t | ƒ ƒ ƒ q% W| S(   s#   Return a working detector instance.t   diffrn_data_framet   detector_element_idt   array_idi   i   i    i   i   t   array_intensitiest   undefined_valueg        (   g        g        (   R   R   t   xrangeR   t   get_element_idt   find_categoryt   find_columnt   find_rowt	   get_valuet   construct_detectort	   add_panelt   set_namet   get_inferred_pixel_sizet   get_detector_axest   get_pixel_coordinates_fst   tuplet   reversedt   get_image_sizet   get_doublevaluet   get_overloadt   __swig_destroy__t   set_local_framet   set_pixel_sizet   mapt   floatt   set_image_sizet   set_trusted_range(   R   t   cbft   dt   it   ele_idR   t   cbf_detectort   pt   pixelt   fastt   slowt   origint   sizet	   underloadt   overloadt   trusted_range(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/format/FormatCBFMultiTile.pyt	   _detector8   sB    		
 c         C   s   |  j  j |  j ƒ S(   s   Return a working beam instance.(   t   _beam_factoryt   imgCIF_HR   (   R   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/format/FormatCBFMultiTile.pyt   _beamk   s    c         C   sÿ  |  j  d  k rÝg  |  _  |  j } | j d ƒ xA | j ƒ  j ƒ  d k rq y | j ƒ  Wq1 t k
 rm } d  SXq1 W| j d ƒ | j	 d ƒ |  j
 ƒ  } d d  l } d d l m } x| D]ú } | j ƒ  } | j d ƒ | | j ƒ  k sò t ‚ | j d ƒ | j ƒ  j d ƒ d k s t ‚ | j ƒ  }	 | j | j |	 | j ƒ ƒ }
 | j ƒ  } | d | d	 f } |
 j | j | Œ  ƒ |  j  j |
 ƒ y | j ƒ  Wq» t k
 r´} Pq» Xq» Wt | ƒ t |  j  ƒ k sÝt ‚ n  | d  k	 rô|  j  | S|  j  d S(
   Ni    t
   array_dataiÿÿÿÿ(   t   flexR   t   datat   bnryi   i   (   R   R   R   t   select_categoryt   category_namet   lowert   next_categoryt	   Exceptiont   select_columnt
   select_rowt   get_detectort   numpyt   scitbx.array_familyRI   t   get_nameR!   R#   R   t   get_typeofvaluet   findt   get_realarray_as_stringt   doublet
   fromstringR3   t    get_realarrayparameters_wdims_fst   reshapet   gridt   appendt   next_rowt   len(   R   t   indexR6   t   eR7   RT   RI   t   panelt   namet   image_stringt   imaget
   parameterst
   image_size(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/format/FormatCBFMultiTile.pyt   get_raw_datap   sD    			!	$N(   t   __name__t
   __module__t   __doc__t   staticmethodR   R   R   RD   RG   R   Rj   (    (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/format/FormatCBFMultiTile.pyR      s   			3	t   __main__i   (   t
   __future__R    R   t   dxtbx.format.FormatCBFFullR   t   dxtbx.model.detectorR   R   Rk   t   syst   argvt   argR   (    (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/format/FormatCBFMultiTile.pyt   <module>
   s   �