ó
€™xTc           @   sv   d  d l  m Z d  d l Z e j j d ƒ Z d  d l Z d  d l m	 Z	 d e d „ Z d e j f d „  ƒ  YZ d S(   iÿÿÿÿ(   t   divisionNt   iotbx_shelx_ext(   t   flexc         C   s  |  j  ƒ  s t ‚ | d k r* t j } n  d „  } |  j ƒ  } |  j ƒ  } | d k	 s] t ‚ t j | ƒ } t j	 | ƒ } | d k	 rº t | t j | ƒ ƒ } t	 | t j	 | ƒ ƒ } n  d } d }	 | d k  rd | }
 t
 |
 ƒ d k r| s| | ƒ n  d | } qn  | d k r\d | }
 t
 |
 ƒ d k r\| sL| | ƒ n  d | }	 q\n  t | |	 ƒ } |  j ƒ  } d }
 x� t |  j ƒ  ƒ D]m \ } } | d k	 rµ| | }
 n  d	 „  } d
 „  } | | ƒ | | | | ƒ | |
 | ƒ } | | IJq�W| d IJd S(   së     If the maximum data value does not fit into the f8.2/f8.0 format:
  normalise_if_format_overflow=False: RuntimeError is thrown
  normalise_if_format_overflow=True: data is normalised to the largest
  number to fit f8.2/f8.0 format
  c         S   s   t  d |  ƒ ‚ d  S(   Ns.   SHELX HKL file F8.2/F8.0 format overflow: %.8g(   t   RuntimeError(   t   v(    (    s>   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/shelx/hklf.pyt   raise_f8_overflow   s    i   i    s   %8.0fi   g   àÏcÁg   üƒ×—Ag{®Gáz„?c         S   s3   d |  } t  | ƒ d k r/ t d | ƒ ‚ n  | S(   Ns	   %4d%4d%4di   s'   SHELXL HKL file 3I4 format overflow: %s(   t   lenR   (   t   ht   result(    (    s>   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/shelx/hklf.pyt   fmt_3i40   s
    
c         S   sd   d |  } t  | ƒ d k r` d |  } t  | ƒ d k r` d |  } t  | ƒ d k s] t ‚ q` n  | S(   Ns   %8.2fi   s   %8.1fs   %8.0f(   R   t   AssertionError(   R   R   (    (    s>   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/shelx/hklf.pyt   fmt_f86   s    


s      0   0   0    0.00    0.00N(   t   is_real_arrayR
   t   Nonet   syst   stdoutt   datat   sigmasR   t   mint   maxR   t	   enumeratet   indices(   t   miller_arrayt   file_objectt   normalise_if_format_overflowR   R   R   t   min_valt   max_valt   min_sct   max_sct   st   scalet   iR   R	   R   t   line(    (    s>   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/shelx/hklf.pyt!   miller_array_export_as_shelx_hklf   sJ    
 	

 		,t   readerc           B   s\   e  Z d d d  „ Z d e e d d „ Z d „  Z e d ƒ Z e d ƒ Z	 e d ƒ Z
 [ RS(   c         C   sŽ   | | g j  d  ƒ d k s! t ‚ | d  k rR d d l m } | j d | ƒ } n  d d l m } t t	 |  ƒ j
 d | j | j ƒ  ƒ ƒ d  S(   Ni   iÿÿÿÿ(   t
   smart_opent	   file_name(   R   t   lines(   t   countR   R
   t   libtbxR#   t   for_readingt   cctbx.array_familyR   t   superR"   t   __init__t   split_linest   read(   t   selfR   R$   R#   R   (    (    s>   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/shelx/hklf.pyR+   D   s    !c   
      C   s.  d d l  m } d d l  m } | d  k r; | j ƒ  } n  | d  k r\ | j d d ƒ } n  | j d | d |  j ƒ  ƒ j ƒ  } g  } | j	 d | d	 |  j
 ƒ  d
 |  j ƒ  ƒ j | j d d d
 g ƒ ƒ }	 | j |	 ƒ |  j ƒ  d  k	 r*| j | j	 d | d	 |  j ƒ  ƒ j | j d d g ƒ ƒ ƒ n  | S(   Niÿÿÿÿ(   t   miller(   t   crystalt   source_typet
   shelx_hklft   crystal_symmetryR   t
   miller_setR   R   t   labelst   obst   alphas(   t   cctbxR/   R0   R   t   symmetryt
   array_infot   setR   t   auto_anomaloust   arrayR   R   t   set_infot   customized_copyt   appendR7   (
   R.   R3   t   force_symmetryt   merge_equivalentst   base_array_infoR/   R0   R4   t   miller_arraysR6   (    (    s>   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/shelx/hklf.pyt   as_miller_arraysL   s,    		c            s   ‡  f d †  } | S(   Nc            s5   t  t t |  ƒ ˆ  ƒ ƒ  } | j ƒ  d k r1 d  S| S(   Ni    (   t   getattrR*   R"   t   sizeR   (   R.   R   (   t   method_name(    s>   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/shelx/hklf.pyt   fi   s    (    (   RH   RI   (    (   RH   s>   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/shelx/hklf.pyt	   _overrideh   s    R7   t   batch_numberst   wavelengthsN(   t   __name__t
   __module__R   R+   t   Falset   TrueRE   RJ   R7   RK   RL   (    (    (    s>   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/shelx/hklf.pyR"   B   s   		(   t
   __future__R    t   boost.pythont   boostt   pythont
   import_extR   R   R)   R   R   RO   R!   t   hklf_readerR"   (    (    (    s>   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/shelx/hklf.pyt   <module>   s   8