ó
ü™xTc           @   sœ   d  d l  m Z d  d l Z d  d l Z d  d l m Z d „  Z d e f d „  ƒ  YZ e d k r˜ d  d l	 Z	 x& e	 j
 d D] Z e j e ƒ GHq} Wn  d S(	   iÿÿÿÿ(   t   divisionN(   t   FormatTIFFRayonixc         C   s¼   t  |  ƒ t k r; t  |  ƒ t k r; |  d k  r4 d S|  Sn  g  } xX |  D]P } t  | ƒ t k rv | j t | ƒ ƒ qH | d k  r‹ d } n  | j | ƒ qH Wt  |  ƒ t k r¸ t | ƒ S| S(   s7    Sets l or values in l that are less than zero to zero i    (   t   typet   listt   tuplet   appendt   check(   t   lt   rett   val(    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/format/FormatTIFFRayonixXPP.pyR      s    $	
t   FormatTIFFRayonixXPPc           B   sn   e  Z d  Z e d „  ƒ Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d	 „  Z d
 „  Z RS(   sr   A class for reading TIFF format Rayonix images, and correctly
  constructing a model for the experiment from this.c            s¯   d ‡  f d † } g  t  d ƒ D] } | d d | d ƒ ^ q } d j g  | D]< } | d k rN t | ƒ d	 k  rN t | ƒ d
 k rN | ^ qN ƒ } t j d ƒ } | j | ƒ S(   s4   Check to see if this looks like an XPP Rayonix TIFF i   c            sM   t  ˆ  d ƒ } d } | j | | ƒ | j | ƒ } t j | |  | ƒ d S(   Nt   rbt   <i    (   t   opent   seekt   readt   structt   unpack(   t   ftypet   indext   typelent   offsett   ft	   si_formatt   rawdata(   t
   image_file(    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/format/FormatTIFFRayonixXPP.pyt   get,   s
    i€   t   ci€  i   t    t    i   i    s#   .*xpp[a-zA-Z][0-9][0-9][0-9][0-9].*(   t   xranget   joint   ordt   ret   compilet   match(   R   R   t   it   dataR   t   filepatht   pattern(    (   R   sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/format/FormatTIFFRayonixXPP.pyt
   understand(   s
    /Rc         C   sE   |  j  | ƒ s t ‚ d d l m } d „  | _ t j |  | ƒ d S(   sc   Initialise the image structure from the given file, including a
    proper model of the experiment.iÿÿÿÿ(   t   MARImagec         S   s   d  S(   N(   t   None(   t   self(    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/format/FormatTIFFRayonixXPP.pyt   <lambda>A   s    N(   R(   t   AssertionErrort   iotbx.detectors.marR)   t   _read_header_assertsR   t   __init__(   R+   R   R)   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/format/FormatTIFFRayonixXPP.pyR0   :   s
    c         C   sl   t  j |  j |  j d d !ƒ d  \ } } t  j |  j |  j d d !ƒ d  \ } } | d | | d | f S(   s
  Get the beam x, y positions which are defined in the standard
    to be in pixels. X and Y are not defined by the documentation, so
    taking as a given that these are horizontal and vertical. N.B.
    the documentation states that the horizontal direction is fast.i„  iŒ  i   i  i  iè  (   R   R   t   _iit   _tiff_header_bytes(   R+   t   beam_xt   beam_yt   pixel_xt   pixel_y(    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/format/FormatTIFFRayonixXPP.pyt   _get_rayonix_beam_xyM   s
    ##c         C   s   t  t j |  ƒ ƒ S(   N(   R   R   t   _get_rayonix_detector_rotations(   R+   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/format/FormatTIFFRayonixXPP.pyR8   Z   s    c         C   s   t  t j |  ƒ ƒ S(   N(   R   R   t   _get_rayonix_distance(   R+   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/format/FormatTIFFRayonixXPP.pyR9   ]   s    c         C   s   t  t j |  ƒ ƒ S(   N(   R   R   t   _get_rayonix_pixel_size(   R+   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/format/FormatTIFFRayonixXPP.pyR:   `   s    c         C   s   t  t j |  ƒ ƒ S(   N(   R   R   t   _get_rayonix_times(   R+   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/format/FormatTIFFRayonixXPP.pyR;   c   s    c         C   s   t  t j |  ƒ ƒ S(   N(   R   R   t   _get_rayonix_timestamp(   R+   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/format/FormatTIFFRayonixXPP.pyR<   f   s    c         C   s   t  t j |  ƒ ƒ S(   N(   R   R   t   _get_rayonix_scan_angles(   R+   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/format/FormatTIFFRayonixXPP.pyR=   i   s    c         C   s   t  t j |  ƒ ƒ S(   N(   R   R   R8   (   R+   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/format/FormatTIFFRayonixXPP.pyR8   l   s    (   t   __name__t
   __module__t   __doc__t   staticmethodR(   R0   R7   R8   R9   R:   R;   R<   R=   (    (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/format/FormatTIFFRayonixXPP.pyR
   $   s   								t   __main__i   (   t
   __future__R    R   R!   t   dxtbx.format.FormatTIFFRayonixR   R   R
   R>   t   syst   argvt   argR(   (    (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/format/FormatTIFFRayonixXPP.pyt   <module>
   s   	K