ó
z™xTc           @   sr   d  d l  m Z d  d l m Z m Z d  d l m Z d  d l Z d e f d „  ƒ  YZ	 d e f d „  ƒ  YZ
 d S(	   iÿÿÿÿ(   t   division(   t   DetectorImageBaset   tile_manager_base(   t   flexNt   NpyImagec           B   sh   e  Z d
 d  „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d
 d „ Z d	 „  Z RS(   c         C   s&   t  j |  | ƒ d |  _ | |  _ d  S(   Nt   npy_raw(   R   t   __init__t
   vendortypet   source_data(   t   selft   filenameR   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/detectors/npy.pyR      s    	c         C   s×  | j  j } |  j d  k rI t |  j d ƒ } t j | ƒ } | j ƒ  n	 |  j } i  |  _	 | d k r¼d d  l
 } | d j d |  j	 d <| d j d |  j	 d <d	 |  j	 d
 <d |  j	 d |  j	 d
 |  j	 d <d |  j	 d |  j	 d
 |  j	 d <d0 |  j	 d <d |  j	 d <d |  j	 d <d |  j	 d <d2 |  j	 d <d |  j	 d <| d d } d } d } | d | d d | d d |  j	 d <| d j | j ƒ }	 t j |	 ƒ }	 |  j |	 ƒ n¸| d3 k rÞ| j d, d  ƒ |  j	 d, <| d |  j	 d <| d |  j	 d <| d |  j	 d <| d |  j	 d <d |  j	 d <d |  j	 d <| d
 |  j	 d
 <| d |  j	 d <| d |  j	 d <| d |  j	 d <d |  j	 d <| d |  j	 d <|  j | d- ƒ |  j	 d, d  k	 rt|  j	 d, | j  _ qtn–| d  k rt| j d, d  ƒ |  j	 d, <| j d d  ƒ |  j	 d <| j d d  ƒ |  j	 d <| d |  j	 d <| j d d  ƒ |  j	 d <| d
 |  j	 d
 <| d |  j	 d <| d |  j	 d <| d |  j	 d <| d |  j	 d <d | k r| d d k r| j d d  ƒ |  j	 d <| j d d  ƒ |  j	 d <n  d d  l }
 |
 j |  j	 d ƒ r7d. |  j	 d <n  |  j | d- ƒ |  j	 d, d  k	 rt|  j	 d, | j  _ qtn  | d4 k rÓ| j  j d  k rÓ| j  j d  k	 rÓd g t t | j  j ƒ d ƒ | j  _ qÓn  d  S(5   Nt   rbs   CXI 3.1iÿÿÿÿt   imagei    t   SIZE1i   t   SIZE2g)\�Âõ(¼?t
   PIXEL_SIZEg      à?t   BEAM_CENTER_Xt   BEAM_CENTER_Yi   i   t   CCD_IMAGE_SATURATIONi]   t   DISTANCEt	   OSC_STARTt	   OSC_RANGEt   SATURATED_VALUEt   TWOTHETAt   beamEnrgg“»×bZà?g      @g    £á±At
   WAVELENGTHs   CXI 3.2s   CXI 4.1s   CXI 5.1s   CXI 6.1s   CXI 7.1s   CXI 7.ds   XPP 7.1s   XPP 7.marccds   CXI 8.1s   CXI 8.ds   XPP 8.1s   XPP 8.marccds   CXI 8.2s   Sacla.MPCCDs   CXI 9.1s   XPP 9.1t   ACTIVE_AREASt   DATAg        i @  iÿ?  i @  iÿ?  (   s   CXI 3.2s   CXI 4.1s   CXI 5.1s   CXI 6.1s   CXI 7.1s   CXI 7.ds   XPP 7.1s   XPP 7.marccds   CXI 8.1s   CXI 8.ds   XPP 8.1s   XPP 8.marccds   CXI 8.2s   Sacla.MPCCDs   CXI 9.1s   XPP 9.1(   s   CXI 3.1s   CXI 3.2(   t   distlt   detector_format_versionR   t   Nonet   openR
   t   picklet   loadt   closet
   parameterst   numpyt   shapet   astypet   int32R   t   intt   bin_safe_set_datat   gett   detector_tilingt   matht   isnant   tile_translationst   len(   R	   t   horizons_philt   version_controlt   streamt
   cspad_dataR$   t   gammat   Kt   Lt   SIR,   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/detectors/npy.pyt
   readHeader   sŠ    		##	)	c         C   s   d  S(   N(    (   R	   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/detectors/npy.pyt   readw   s    c         C   s=  | j  j d  k r d  S| j  j d  k r, d  St | j  j ƒ d k rá | j  j d k rÝ |  j d k rº d |  j d <|  j t	 t |  j ƒ d ƒ |  _ |  j j
 t j |  j |  j ƒ ƒ n  d G|  j G|  j G|  j j ƒ  GHn  d  Sd t | j  j ƒ t | j  j ƒ k st ‚ |  j d ƒ } | j t j | j ƒ  ƒ ƒ } |  j | ƒ } xÞ t | j ƒ  ƒ D]Ê \ } } | d	 } | d
 } | j  j d | d	 }	 | j  j d | d
 }
 | j  j d | d } | j  j d | d } | j d | j d |	 d |
 d | |	 d | |
 ƒ d |	 | d |
 | ƒ q^W|  j | ƒ d  S(   Ni   s   CXI 4.1ir  i¹   R   i   s   CXI 2x2 sizet   rawdatai    i   i   i   t   blockt   i_rowt   i_columnt   n_rowst	   n_columns(   s   CXI 4.1(   R   R+   R   R.   R/   R   t   size1R#   t   linearintdataR(   t   reshapeR   t   gridt   size2t   focust   AssertionErrort   __getattr__t	   __class__t   get_tile_managert	   enumeratet   effective_translationst   matrix_paste_block_in_placet   matrix_copy_blockR)   (   R	   t   philt   shifted_int_data_oldt   shifted_int_data_newt   managert   it   shiftt
   shift_slowt
   shift_fastt   ur_slowt   ur_fastt   ll_slowt   ll_fast(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/detectors/npy.pyt   translate_tilesz   s>      #%#.

		
c         C   sI   t  | ƒ } | j | ƒ | j | ƒ |  j | |  j d | j ƒ d  S(   Ni   (   R   R8   RZ   R)   RA   (   R	   R
   t	   adu_scaleRN   t   stddev(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/detectors/npy.pyt   correct_gain_in_place¨   s    c      	   C   sï   |  j  | ƒ j ƒ  } | } t | ƒ d d k s7 t ‚ g  t d t | ƒ d ƒ D]D } | | d | | d d | | d d | | d d f ^ qP } x> | D]6 } |  j j d |  j | ƒ d | d d | d ƒ q¡ W|  j |  j ƒ d	 S(
   sJ   The 'in place' function actually changes the raw data in this image objecti   i    i   i   i   R;   R<   R=   N(	   RI   t   effective_tiling_as_flex_intR/   RF   t   xrangeRA   RL   t   correct_background_by_blockR)   (   R	   RN   t   active_areast   BRR   t   asicst   asic(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/detectors/npy.pyt   correct_background_in_place®   s    c
c         C   s&   d d l  m } | |  j | ƒ } | S(   s€   The 'by block' function doesn't changes the object data, it just returns the
       filtered data for a particular detector asiciÿÿÿÿ(   t   background_correct_padded_block(   t   iotbx.detectors.util.filtersRf   RA   (   R	   Rd   Rf   t   corrected_data(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/detectors/npy.pyR`   Â   s    c         C   sH   t  | d t |  j |  j ƒ t |  j |  j ƒ f d |  j d |  j ƒS(   Nt   beamR@   RD   (   t   tile_managerR(   t   beamxt
   pixel_sizet   beamyR@   RD   (   R	   RN   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/detectors/npy.pyRI   Ê   s    	c         C   sP   y% | d  k r$ |  j ƒ  j ƒ  } n  Wn t k
 r8 n Xt j |  | | ƒ d  S(   N(   R   t   get_raw_datat   iroundt   AttributeErrorR   t   debug_write(   R	   t   fileoutt   mod_data(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/detectors/npy.pyRq   Ð   s    c         C   s   d S(   Ni   (    (   R	   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/detectors/npy.pyt	   getEndianÙ   s    N(   t   __name__t
   __module__R   R   R8   R9   RZ   R]   Re   R`   RI   Rq   Rt   (    (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/detectors/npy.pyR      s   	]		.					Rj   c           B   s   e  Z d  „  Z d „  Z RS(   c         c   sÙ  |  j  j j d  k rvd d l m } | |  j ƒ } x;t t |  j  j j	 ƒ d ƒ D]} | |  j  j j	 d | d | d !ƒ | |  j  j j	 d | d d | d !ƒ d } | | } t
 t
 f t
 t f t t
 f t t f g j | d d k  | d d k  f ƒ } |  j  j j d | d |  j  j j d | d |  j  j j d | d |  j  j j d | d f VqT Wd  Sx\ t t |  j  j j ƒ d ƒ D]; } |  j  j j d | d |  j  j j d | d f Vq–Wd  S(   Niÿÿÿÿ(   t   coli   i   i    i   (   t   working_paramsR   t   quad_translationsR   t   scitbx.matrixRw   Ri   R_   R/   R+   t   Truet   Falset   indexR.   (   R	   Rw   Ri   t   itilet   tile_centert   deltat   iquadRR   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/detectors/npy.pyRK   ß   s"    &%1
*#"&c   	      K   sœ  d d  l  } t j | j  |  j j j ƒ ƒ } t | ƒ d d k sI t ‚ x` t d t | ƒ d ƒ D]F } | | | | d k  s† t ‚ | | d | | d k  sb t ‚ qb W|  j j j	 d  k r˜d t |  j j j	 ƒ t | ƒ k r˜| j d |  j ƒ |  _ x— t |  j ƒ  ƒ D]€ \ } } | d } | d } | d | d c | 7<| d | d c | 7<| d | d c | 7<| d | d c | 7<qWn  | S(   Niÿÿÿÿi   i    i   i   i   Ri   (   t   copyR   R(   Rx   R   R+   R/   RF   R_   R.   R   R*   Ri   RJ   RK   (	   R	   t   kwargsR‚   t   ITt   itlRR   RS   RT   RU   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/detectors/npy.pyt!   effective_tiling_as_flex_int_implö   s"    ! &%

(   Ru   Rv   RK   R†   (    (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/detectors/npy.pyRj   Ý   s   	(   t
   __future__R    t   iotbx.detectors.detectorbaseR   R   t   scitbx.array_familyR   t   cPickleR    R   Rj   (    (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/detectors/npy.pyt   <module>   s
   Ï