ó
P™xTc           @   s�  d  d l  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	 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  d l Z d „  Z d „  Z d „  Z d „  Z d „  Z e d „ Z d „  Z d „  Z  d „  Z! e d d „ Z" e e d d d „ Z# d „  Z$ d „  Z% e& d k r‰e% d e j' d ƒ n  d S(   iÿÿÿÿ(   t   division(   t   adptbx(   t   eltbxN(   t   random_structure(   t   debug_utils(   t   dot6fdot_listt   dot6gdott   dot6gdot_list(   t	   LATT_SYMM(   t   dicts(   t   easy_run(   t   StringIOc         C   sJ   t  j d ƒ } x4 |  j ƒ  D]& } | | j c | j | j ƒ  7<q W| S(   Ni    (   R	   t   with_default_valuet
   scattererst   scattering_typet	   occupancyt   multiplicity(   t   xray_structuret   resultt   sc(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/development/run_shelx.pyt   calculate_cell_content   s    $c         C   s   g  } | j  } g  } | r™ t |  ƒ } | d d j | j ƒ  ƒ ƒ x>| j ƒ  D]A } | d | f ƒ | j  t t d t | | d ƒ ƒ ƒ ƒ qQ Wnì xé |  j ƒ  D]Û } t j	 j
 | j ƒ j ƒ  } | j ƒ  }	 | j ƒ  }
 | d | j |	 d |
 d |	 d |
 d |	 d |
 d f ƒ | d	 |	 d
 |
 d
 | j ƒ  | j | j f ƒ | j  t t d t | j | j ƒ  d ƒ ƒ ƒ ƒ q¦ W| d d j | ƒ ƒ | S(   Ns   SFAC t    s   DISP %s 0 0 0i   g      à?s'   SFAC %s %.8f %.8f %.8f %.8f %.8f %.8f =i    i   s#        %.8f %.8f %.8f %.8f %.8f 0 1 1i   s   UNIT (   t   appendR   t   joint   keyst   strt   maxt   intR   R   t   xray_scatteringt   it1992R   t   fetcht
   array_of_at
   array_of_bt   labelt   ct   fpt   fdpR   R   (   R   t
   short_sfact   linest   lt   UNITt   celcont   sft	   scatterert   gaussiant   at   b(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/development/run_shelx.pyt   SFAC_DISP_UNIT   s2    	11c         C   s(   |  d k s t  ‚ |  d k  s$ t  ‚ |  S(   Niûÿÿÿi   (   t   AssertionError(   t   x(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/development/run_shelx.pyt   NOFIX1   s    c         C   s,   |  d k s t  ‚ |  d k  s$ t  ‚ d |  S(   Niûÿÿÿi   g      $@(   R0   (   R1   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/development/run_shelx.pyt   FIX6   s    c      
   C   sÄ  | r t  |  ƒ j ƒ  } n  g  } | j } d } x�|  j ƒ  D]} | d 7} | j t | ƒ } | r | j | j ƒ d } n | } g  }	 x$ | j D] }
 |	 j t |
 ƒ ƒ q• Wt	 |	 ƒ }	 t | j
 ƒ  ƒ } | j j ƒ  s| d | | |	 t | ƒ t t | j ƒ ƒ f ƒ q= t j |  j ƒ  | j ƒ } g  } x! | D] } | j t | ƒ ƒ q<W| } | d | | |	 t | ƒ t | d  ƒ f ƒ | d t | d | d | d | d	 f ƒ ƒ q= W| S(
   Ni    i   s   %-4s %d %s %s %ss   %-4s %d %s %s %s =i   s       %si   i   i   (   R   R   R   R   R   R   t   indext   siteR2   R   t   weightt   flagst   use_u_anisoR   t   u_isoR   t   u_star_as_u_cift	   unit_cellt   u_starR   (   R   R%   R)   R&   R'   t   iR+   t   lblt   sfact   coorR1   t   soft   ut   u_fixR"   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/development/run_shelx.pyt   atoms;   s8    	
  4c         C   sª   |  d ƒ x� t  | j ƒ  ƒ D]{ \ } } t | j ƒ  | ƒ } d | f } t | ƒ d k sj t d ƒ ‚ | s} | d k r |  d | | d f ƒ q q W|  d ƒ d  S(	   Ns   HKLF -3s   %8.2fi   s*   structure factor does not fit f8.2 format.s       0.00s   %4d%4d%4d%s%8.2fg{®Gáz„?s      0   0   0    0.00    0.00(   t	   enumeratet   indicest   abst   datat   lenR0   (   t   lappt   f_calct
   skip_zerosR=   t   ht   ft   s(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/development/run_shelx.pyt   HKLFY   s    
c         C   s•   t  |  j ƒ  ƒ d k r$ t d ‚ n  xj |  j ƒ  D]\ } | j d k rb t d | j | j f ‚ n  | j d k r1 t d | j | j f ‚ q1 q1 Wd  S(   Nic   s%   Cannot handle more than 99 scatterer.gš™™™™™ñ?s$   Error: occupancy too large: %s: %.6gg      ð?s    Error: u_iso too large: %s: %.6g(   RI   R   t   RuntimeErrorR   R!   R9   (   R   R+   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/development/run_shelx.pyt	   pre_checkc   s    c         C   sÉ   x¹ | D]± } | j  d ƒ d k r | j ƒ  } t | d ƒ } t | d ƒ } t |  j ƒ  ƒ | k rr t d ‚ n  d s~ | r” d G| G|  j ƒ  GHn  | d k r´ t d | d	  ‚ n  d  Sq Wt d
 ‚ d  S(   Ns   R1 = i    i	   i   s   Shelx lost Miller indices.t   R1g{®Gáz„?s   Error: iÿÿÿÿs    R1 not found in Shelx .lst file.(   t   findt   splitt   floatR   RI   RF   RQ   t   space_group_info(   t
   miller_sett	   shelx_lstt   verboseR'   t   fldsRS   t   n_data(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/development/run_shelx.pyt   check_r1o   s    c         C   sþ  i  } d } xE | j  ƒ  D]7 } | d 7} | j t | ƒ j ƒ  } | d | | <q Wd } d }	 xW| d D]K}
 |
 d  d k rk | d 7} |
 d d !j ƒ  } | | } | j  ƒ  | j j ƒ  sÇ t ‚ |
 d d	 !} t j	 | j
 ƒ  | j  ƒ  | j ƒ } d } d
 } xz t d ƒ D]l } t | | d | d d !ƒ } t t | | d ƒ ƒ } | d | 7} t | | ƒ d k rd } qqW| d k r¶|
 d  GH| GH| GHd GH|	 d 7}	 q¶qk qk Wd sÒ| sÒ|	 d k rè|  d |	 | f GHn  |	 d k sút ‚ d  S(   Ni    i   i   i   t   ANISOUi   i   i   iF   t    i   g     ˆÃ@s   %7diÿÿÿÿs   Error: ANISOU mismatch.s   : ANISOU mismatches: %d of %d(   R   R   R   t   uppert   stripR7   R8   R0   R   t   u_star_as_u_cartR;   R<   t   xrangeR   t   roundRG   (   t
   shelx_titlR   t	   shelx_pdbRZ   t   lbl_dictR=   R+   R>   t   TotalANISOUt   TotalMismatchesR'   RB   t   u_cartt   mismatchRO   t   u_shelxt   u_adptbx(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/development/run_shelx.pyt   check_anisou~   sF    


 	i    c         C   s¾  | j  ƒ  } | j ƒ  j ƒ  d k s* t ‚ t | ƒ | j ƒ  } g  } | j } | d |  ƒ | d t | j ƒ  j	 ƒ  ƒ ƒ | d ƒ t
 ƒ  } t | | j ƒ  ƒ | | j ƒ  d  ƒ | t | | ƒ 7} | d ƒ | d ƒ | d ƒ | d	 ƒ | d
 ƒ | t | | ƒ 7} t | | ƒ t d d ƒ }	 x3 | D]+ } d sD| rL| GHn  |	 j | d ƒ q2W|	 j ƒ  t j j ƒ  t j j ƒ  y t j d ƒ Wn$ t k
 r¬‚  n t k
 r¼n Xt j d d ƒ j ƒ  j }
 d sä| rýx |
 D] } | GHqëWn  t d d ƒ }	 |	 j  ƒ  } |	 j ƒ  t j j ƒ  t d d ƒ }	 |	 j  ƒ  } |	 j ƒ  t j j ƒ  d sm| rŠx | D] } | d  GHqtWn  t j j ƒ  t! | | | ƒ t" |  | | | ƒ d  S(   Ni    s   TITL s	   CELL 1.0 s   ZERR 1 0.01 0.01 0.01 0 0 0iÿÿÿÿs   FVAR 1.s   L.S. 1s   BLOC 0s	   SPEC -0.1s   WPDB 2s   tmp.inst   ws   
s   tmp.lstt   commands
   shelxl tmpt   rs   tmp.pdb(#   R   R   t   sizeR0   RR   RK   R   R   R;   t
   parametersR   R   t   space_groupt   getvalueR/   RD   RP   t   opent   writet   closet   syst   stdoutt   flusht   stderrt   ost   unlinkt   KeyboardInterruptt	   ExceptionR
   t   fully_bufferedt   raise_if_errorst   stdout_linest	   readlinesR]   Rn   (   Re   t   structure_factorsR%   RZ   R   RK   R&   R'   RO   RN   t
   shelxl_outRY   Rf   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/development/run_shelx.pyt	   run_shelx¥   sh    
	 
	




 
    

 g       @c         C   s°   t  j |  d d d | d | d d d	 | d
 t d t ƒj d | d | d d ƒ } d s^ | rq | j ƒ  j ƒ  n  t |  ƒ d t | ƒ d t | ƒ } t | | d | ƒd  S(   Nt   elementst   Nt   Ct   OR8   t	   use_u_isot   random_f_prime_d_ming      ð?t   random_f_double_primet   random_u_isot   random_occupancyt   anomalous_flagt   d_mint	   algorithmt   directi    s   , anomalous=s   , use_u_aniso=RZ   (   R‰   RŠ   RŠ   R‹   (   R   R   t   TrueR…   t   show_summaryR   R‡   (   RW   R‘   R8   R’   RZ   R…   Re   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/development/run_shelx.pyt   exercise×   s    (c         C   sy   | j  ƒ  } | j ƒ  r. | j ƒ  r. d GHd  SxD t t f D]6 } x- t t f D] } t | | | d |  j ƒqN Wq; Wd  S(   Ns;   Skipping space group: centre of inversion is not at origin.RZ   (   t   groupt
   is_centrict   is_origin_centrict   FalseR•   R—   t   Verbose(   R7   RW   t   sgR‘   R8   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/development/run_shelx.pyt   run_call_backî   s    c         C   s8   t  j j d d ƒ d  k r$ d GHd  St j |  t ƒ d  S(   NRp   t   shelxls   shelxl not available.(   t   libtbxt   patht   full_command_patht   NoneR   t   parse_options_loop_space_groupsRž   (   t   args(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/development/run_shelx.pyt   runø   s    t   __main__R¥   i   ((   t
   __future__R    t   cctbxR   R   t   cctbx.eltbx.xray_scatteringt   cctbx.developmentR   R   t   cctbx.development.fmt_utilsR   R   R   t   iotbx.shelx.write_insR   t   scitbx.python_utilsR	   t   libtbx.pathR    R
   t	   cStringIOR   Ry   R}   R   R/   R2   R3   RD   R›   RP   RR   R]   Rn   R‡   R—   Rž   R¦   t   __name__t   argv(    (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/development/run_shelx.pyt   <module>   s<   					
			'3	
	