ó
w™xTc           @   sR  d  d l  m Z d  d l Z d  d l Z d  d l m Z d  d l m Z d  d l m	 Z	 d „  Z
 d „  Z d „  Z d	 e f d
 „  ƒ  YZ e d k rN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 GHx3 d d d d d d d g D] Z e Gd e d UqWe e d ƒ GHe d d e ƒ Z n  d S(   iÿÿÿÿ(   t   divisionN(   t   PilatusImage(   t   ImageException(   t   flexc         C   s©  y d d l  m } Wn! t k
 r7 d d l m } n Xd d l  m  } | |  ƒ } | j d k si t ‚ d d l m } | |  ƒ } | j ƒ  } t	 ƒ  } d | j
 ƒ  k rê t | d ƒ } d | k oÓ d	 k n sÞ t ‚ | | _ n  t | d
 ƒ | _ | d | _ d | _ i  | _ x? | j D]4 }	 d |	 j ƒ  }
 | j |	 | |
 ƒ | j |	 <q&W| d d k r}| j | _ n | d d k rœ| j | _ n  | | _ | S(   Niÿÿÿÿ(   t   parse_qs(   t   urlparset   httpt   https(   t   urlopens   Image-slicei    i   s	   Image-bins   Image-filenames
   Pilatus-6Ms   Image-%ss   Image-data_encryptiont   picklet   byte(   R   R   (   R   R   t	   Exceptiont   cgit   schemet   AssertionErrort   urllib2R   t   infot   PilatusSlicet   keyst   intt
   sliceindext   bint   filenamet
   vendortypet
   parameterst   mandatory_keyst   lowert
   data_typest&   slice_callback_with_portable_http_datat   slice_callbackt.   slice_callback_with_high_performance_http_datat   object(   t   urlR   R   t   parsedR   t   ResponseR   t   PR   t   itemt
   header_key(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/detectors/pilatus_slice.pyt   pilatus_slice_from_http_url   s8      	"		"	c         C   së   y d d l  m } Wn! t k
 r7 d d l m } n Xd d l  m  } | |  ƒ } | j d k si t ‚ | j j d ƒ d } | | j k r˜ t | ƒ S| | j j d ƒ d ƒ } t	 | d d ƒ } t | ƒ } | j
 ƒ  t | | ƒ S(	   Niÿÿÿÿ(   R   (   R   t   filet   ?i    i   t   slice(   R   R   R   R   R   R   t   patht   splitR   R   t
   readHeadert)   pilatus_slice_from_object_and_slicenumber(   R    R   R   R!   R'   t   qsR   R   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/detectors/pilatus_slice.pyt   pilatus_slice_from_file_url&   s      

c         C   s{   t  ƒ  } d | k o  d k n s+ t ‚ | | _ |  | _ | j | j ƒ d | _ | j |  j ƒ | _ | j | _	 | S(   Ni    i   s
   Pilatus-6M(
   R   R   R   R   t+   copy_common_attributes_from_parent_instanceR   t   slice_parametersR   t   slice_callback_with_object_dataR   (   R   R   R#   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/detectors/pilatus_slice.pyR-   7   s    	"			R   c           B   sr   e  Z d  „  Z e j e j ƒ Z e j i e d 6e d 6e d 6ƒ d „  Z d „  Z	 d „  Z
 d „  Z d „  Z RS(	   c         C   s   t  |  _ d  S(   N(   t   Falset   already_read_data(   t   self(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/detectors/pilatus_slice.pyt   __init__C   s    t   PIXEL_SIZE_UNITSt   DISTANCE_UNITSt   AXISc         C   s›   i  } xO d d d d d d d d d	 d
 d d d d g D] } t  j  | | ƒ | | <q7 Wd | d <| d | d } | |  j d } | | d | d <| S(   NR7   t   DISTANCEt   PHIt
   WAVELENGTHt   SIZE2t   TWOTHETAR8   t	   OSC_RANGEt   BEAM_CENTER_Yt   CCD_IMAGE_SATURATIONt	   OSC_STARTt   DETECTOR_SNt
   PIXEL_SIZER9   iÃ   t   SIZE1t   BEAM_CENTER_Xi   iÔ   (   t   copyR   (   R5   t   paramt   resultR$   t   pixelst
   correction(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/detectors/pilatus_slice.pyR1   I   s    
c         C   s   t  j |  j ƒ } |  ` | S(   N(   t   cPicklet   loadR   (   R5   t   linearintdata(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/detectors/pilatus_slice.pyR   X   s    c         C   sŠ   |  j  j ƒ  } t j | ƒ } | j ƒ  } | d k rO | j t j d ƒ ƒ n1 | d k rt | j t j d ƒ ƒ n t d ƒ ‚ |  `  | S(	   NiT iÃ   iŸ	  i�ø^ iß	  s(   wrong number of pixels for Pilatus image(   iÃ   iŸ	  (   iß	  iŸ	  (   R   t   readR   t   int_from_byte_strt   sizet   reshapet   gridR   (   R5   t   BYURN   t   provisional_size(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/detectors/pilatus_slice.pyR   ]   s    c         C   sd   |  j  j ƒ  d d |  j } | d } t j |  j  j | | !ƒ } | j t j d ƒ ƒ |  `  | S(   NiŸ	  iÃ   i   iÔ   iT (   iÃ   iŸ	  (   R   RO   R   R   R   RN   RR   RS   (   R5   t   start_indext
   stop_indexRN   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/detectors/pilatus_slice.pyR2   j   s    
c         C   s-   |  j  r d  S|  j |  j ƒ  ƒ t |  _  d  S(   N(   R4   t   bin_safe_set_dataR   t   True(   R5   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/detectors/pilatus_slice.pyRO   s   s    	 (   t   __name__t
   __module__R6   RG   R   R   t   updatet   strR1   R   R   R2   RO   (    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/detectors/pilatus_slice.pyR   B   s   	"					t   __main__i   R   R   t   headert   headerlinesRN   R   R   s
   print a.%si   R    s   file://%s?slice=5(   t
   __future__R    RG   RL   t   iotbx.detectors.pilatus_minicbfR   t   iotbx.detectorsR   t   scitbx.array_familyR   R&   R/   R-   R   RZ   t   syst   argvt   full_path_to_filet   testing_filet   aRO   R   t   rawdatat   lent   size1t   size2t   dataitemR#   (    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/detectors/pilatus_slice.pyt   <module>   s*   			6
#"