ó
P™xTc           @   sQ  d  d l  m Z d  d l m Z d  d l m Z d  d l m Z d  d l m Z m	 Z	 m
 Z
 d  d l m Z m Z m Z d  d l m Z d  d l m Z d  d	 l Z d  d
 l m Z d  d l m Z d  d	 l Z d „  Z d „  Z d	 d d	 d	 d „ Z d „  Z d d „ Z d „  Z d „  Z  e! d k rMd  d	 l Z e  d e j" d ƒ n  d	 S(   iÿÿÿÿ(   t   division(   t   adptbx(   t   random_structure(   t   debug_utils(   t   dot6fdot_listt   dot6gdott   dot6gdot_list(   t   FIXt   NOFIXt   HKLF(   t	   LATT_SYMM(   t   is_below_limitN(   t   easy_run(   t   StringIOc      
   C   sn  | j  ƒ  } | j | j ƒ  ƒ } t | j ƒ  j ƒ  ƒ } |  d d j | ƒ ƒ i  } g  } xô t | ƒ D]æ \ } } | d | | <| j | ƒ }	 |	 j	 ƒ  d k sª t
 ‚ |	 j ƒ  s¼ t
 ‚ |	 j ƒ  }
 |	 j ƒ  } |  d |
 d | d |
 d | d |
 d | d f ƒ |  d |
 d	 | d	 |	 j ƒ  f ƒ | j d
 | | j | ƒ ƒ qi W|  d d j | ƒ ƒ | S(   Ns        scattering types: %st    i   i   s$   SFAC %.8f %.8f %.8f %.8f %.8f %.8f =i    i   s        %.8f %.8f %.8f 0 0 0 1i   s   %.0fs   UNIT (   t   scattering_type_registryt   unit_cell_occupancy_sumst
   scattererst   sortedt   as_type_gaussian_dictt   keyst   joint	   enumeratet   gaussiant   n_termst   AssertionErrort   use_ct
   array_of_at
   array_of_bt   ct   appendt   unique_index(   t   lappt   xray_structuret   regR   t	   st_sortedt   sfac_indicest   unitt   i_stt   stR   t   at   b(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/development/run_shelx76.pyt	   sfac_unit   s.    "c      
   C   s«  | j  ƒ  } | d  k r! i  } n3 t | ƒ | j ƒ  k s? t ‚ t t | | ƒ ƒ } | j ƒ  j ƒ  } | j	 ƒ  d k r‡ d  } d  } n½ | j
 ƒ  s™ t ‚ | j ƒ  } | j ƒ  }	 d  }
 xx t | j ƒ  ƒ D]d \ } } |	 j | j ƒ } t | j ƒ  | j d ƒ ƒ } |
 d  k s|
 | k  rÊ | }
 | } qÊ qÊ W|
 d  k	 sDt ‚ x`t | j ƒ  ƒ D]L\ } } | j } d | | d f } | | } | j | ƒ } g  } | d  k s·| | k rö| d  k ríx- | j D] } | j t | ƒ ƒ qÍWq™| } n£ | d  k rPx” t | j | ƒ D]4 \ } } | r0t } n t } | j | | ƒ ƒ qWnI xF t | | ƒ D]5 \ } } | rˆ| j t | ƒ ƒ q`| j | ƒ q`Wt | ƒ } t | j ƒ  ƒ } | j j ƒ  sû|  d | | | t | ƒ t t | j ƒ ƒ f ƒ qWt j | j  ƒ  | j! ƒ } g  } x! | D] } | j t | ƒ ƒ q#W| } |  d | | | t | ƒ t" | d  ƒ f ƒ |  d t" | d | d | d	 | d
 f ƒ ƒ qWWd  S(   Ni    s   %s%02di   s   %-4s %d %s %s %ss   %-4s %d %s %s %s =i   s       %si   i   i   (#   t   special_position_indicest   Nonet   lent   sizeR   t   dictt   zipt   space_group_infot   structure_seminvariantst*   number_of_continuous_allowed_origin_shiftst   continuous_shifts_are_principalt    principal_continuous_shift_flagsR   R   R   R   t   scattering_typet   abst   weightt   at_stolt   gett   siteR   R   R   R   t   flagst   use_u_anisoR   t   u_isoR   t   u_star_as_u_cift	   unit_cellt   u_starR   (   R    R$   R!   t   encoded_sitest   spist   enc_dictt   sst   caosh_flagst
   caosh_i_scR"   t   w_maxt   i_sct   scR   t   wR'   t   lblt   sfact   enc_sitet   coort   xt   ft   fixt   soft   ut   u_fixR   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/development/run_shelx76.pyt   atoms'   sl    			
 	 	 t   0c         C   su  | j  ƒ  j ƒ  d k s t ‚ | d  k | d  k k s< t ‚ g  } | j } | d  k rl t | j ƒ  ƒ } n  | d | ƒ | d t | j ƒ  j	 ƒ  ƒ ƒ t
 ƒ  } t | | j ƒ  d t ƒ| | j ƒ  d  ƒ t | | ƒ }	 | d  k rø | d ƒ n x | D] }
 | d |
 ƒ qÿ W| d | ƒ t | |	 | | ƒ t | |  d	 t ƒ| d
 ƒ t d d ƒ d j | ƒ IJd  S(   Ni    s   TITL s	   CELL 0.7 t   decimaliÿÿÿÿs   FVAR 1.0s	   FVAR %.6fs   L.S. %st
   skip_zerost   ENDs   tmp.insRK   s   
(   R   R.   R   R,   R   t   strR1   R   R@   t
   parametersR   R
   t   space_groupt   Truet   getvalueR*   RV   R	   t   openR   (   t   f_obsR!   t   titlt   l_s_parameterst   fvarsRB   t   linesR    t   sR$   t   fv(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/development/run_shelx76.pyt   write_shelx76_lsc   s*    	 	
c   
      C   sv  t  | | |  ƒ t j d d ƒ j ƒ  j } d } d } d  } t | ƒ } xì | D]ä } | j | ƒ d k r¾ | j ƒ  }	 t	 |	 ƒ d k s� t
 ‚ |	 d d k s¥ t
 ‚ |	 d	 d
 k s4t
 ‚ qP | j | ƒ d k rP t	 | j ƒ  j ƒ  ƒ d k s÷ t
 ‚ | j ƒ  j ƒ  }	 t	 |	 ƒ d k s!t
 ‚ t |	 d ƒ } qP qP W| d  k rWt d | ƒ ‚ n  t d | d d ƒ srt
 ‚ d  S(   Nt   commands   shelx76 < tmp.inss   REFLEXIONS READ, OF WHICHs   RESIDUALS BEFORE CYCLE   1 FORi    i   i   t   REJECTEDi   RW   i   i   s   Not found in shelx76 output: %st   valuet   limitg{®Gázt?(   Rh   R   t   fully_bufferedt   raise_if_errorst   stdout_linesR,   t   itert   findt   splitR-   R   t   nextt   stript   floatt   RuntimeErrorR   (
   Rb   R!   Ra   t	   shelx_outt   reflections_keyt   residuals_keyt   rRe   t   linet   flds(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/development/run_shelx76.pyt   run_shelx76�   s(    $g      ð?c      	   C   s{   t  j |  d d d t ƒ} | j d d ƒ | j d t d	 | d
 d d t ƒ j ƒ  j ƒ  } t |  ƒ } t	 | | | ƒ d  S(   Nt   elementst   Nt   Ct   Ot   random_u_isot   tablet   it1992t   anomalous_flagt   d_mint	   algorithmt   directt   cos_sin_table(   R   R€   R€   R�   (
   R   R!   R^   R   t   structure_factorst   Falset   f_calct
   amplitudesR[   R}   (   R1   R†   R!   Ra   Rb   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/development/run_shelx76.pyt   exercise™   s    		c         C   s<   | j  ƒ  } | j ƒ  r. | j ƒ  r. d GHd  St | ƒ d  S(   Ns;   Skipping space group: centre of inversion is not at origin.(   t   groupt
   is_centrict   is_origin_centricRŽ   (   R<   R1   t   sg(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/development/run_shelx76.pyt   run_call_back§   s
    c         C   s8   t  j j d d ƒ d  k r$ d GHd  St j |  t ƒ d  S(   NRi   t   shelx76s   shelx76 not available.(   t   libtbxt   patht   full_command_pathR,   R   t   parse_options_loop_space_groupsR“   (   t   args(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/development/run_shelx76.pyt   run®   s    t   __main__R™   i   (#   t
   __future__R    t   cctbxR   t   cctbx.developmentR   R   t   cctbx.development.fmt_utilsR   R   R   t   cctbx.development.run_shelxR   R   R	   t   iotbx.shelx.write_insR
   t   libtbx.test_utilsR   t   libtbx.pathR•   R   t	   cStringIOR   t   sysR*   RV   R,   Rh   R}   RŽ   R“   Rš   t   __name__t   argv(    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/development/run_shelx76.pyt   <module>   s0   		?			