ó
Ö™xTc           @   sK  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 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 d  d l Z d  d l Z d  d l m Z d  d l Z d „  Z d „  Z d „  Z d „  Z d d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z e  d k rGe ƒ  n  d S(   iÿÿÿÿ(   t   division(   t   van_der_waals_radii(   t   maptbx(   t   xray(   t   miller(   t   crystal(   t   random_structure(   t   debug_utils(   t   flex(   t   approx_equalN(   t   around_atomsc      	   C   sè   t  j d | d | ƒ } t j d | ƒ } t j d |  d d d d d	 d
 ƒ } | j | ƒ t j ƒ  } t j ƒ  } xG | j	 ƒ  D]9 } | j
 t | j ƒ ƒ | j
 t j j | j ƒ  ƒ q€ W| j ƒ  | j ƒ  k sÛ t ‚ | | | f S(   Nt	   unit_cellt   space_group_symbolt   crystal_symmetryt   sitet   ugš™™™™™¹?t	   occupancyg      ð?t   scattering_typet   C(   R   t   symmetryR   t	   structuret	   scatterert   add_scattererR   t   vec3_doublet   doublet
   scattererst   appendt   listR   R   t   vdwt   tablet   element_symbolt   sizet   AssertionError(   R   t   sgt   cellR   R   R   t   xyzft   atmrad(    (    sC   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/masks/tst_masks.pyt   structure_init   s     			!c          C   s8  d' }  d t  j j d	 } | d d( t j d d) } x§|  D]Ÿ} x–|  D]Ž} x…|  D]}} t | | | f d | | | d d d f ƒ \ } } } d }	 t j d | j ƒ  d |	 ƒ }
 d } d } t	 | j ƒ  | j
 ƒ  j ƒ  | | |
 j ƒ  | | ƒ } | j d k st ‚ | j d k s$t ‚ t d | j d d ƒ sCt ‚ t d | j d d ƒ sbt ‚ t j | j ƒ d k s€t ‚ t j | j ƒ d k sžt ‚ | j j ƒ  | j j d ƒ | j j d ƒ k sX t ‚ qX WqK Wq> Wd* }  g  } g  } xò |  D]ê } xá |  D]Ù } xÐ |  D]È } t | | | f d d+ ƒ \ } } } d }	 t j d | j ƒ  d |	 ƒ }
 d } d } t	 | j ƒ  | j
 ƒ  j ƒ  | | |
 j ƒ  | | ƒ } | j | j ƒ | j | j ƒ | j | j k st ‚ qWqWqúWt t | ƒ t | ƒ ƒ s	t ‚ d, }  g  } g  } xò |  D]ê } xá |  D]Ù } xÐ |  D]È } t | | | f d d- ƒ \ } } } d }	 t j d | j ƒ  d |	 ƒ }
 d } d } t	 | j ƒ  | j
 ƒ  j ƒ  | | |
 j ƒ  | | ƒ } | j | j ƒ | j | j ƒ | j | j k s<t ‚ q<Wq/Wq"Wt t | ƒ t | ƒ d& ƒ s4t ‚ d  S(.   Ng¸…ëQ¸ú?gÃõ(\�Âå?g        g      à?g×£p=
×Ó¿g{®Gázä¿g®Gázú¿g       @R   g      @g      @g      ð?t   P1iZ   gš™™™™™¹?R   t   stepi    g{®Gáz„?i   g       Àg      ð¿g      à¿t   C2g      @g      @g      @iP   g      Ð?gøSã¥›Äú?gìQ¸…ëå?g)\�Âõ(Ô¿gøSã¥›Ää¿gþÔxé&1ú¿g      @iF   id   gü©ñÒMbP?(   g¸…ëQ¸ú?gÃõ(\�Âå?g        g      à?g×£p=
×Ó¿g{®Gázä¿g®Gázú¿gUUUUUUõ?gUUUUUUÕ?(   g       Àg      ð¿g      à¿g        g      à?g      ð?g       @(   g      @g      @g      @iZ   iP   iZ   (   gøSã¥›Äú?gìQ¸…ëå?g)\�Âõ(Ô¿gøSã¥›Ää¿gþÔxé&1ú¿(   g      @g      @g      @iF   iP   id   (   R   R   R   t   matht   piR%   R   t   crystal_griddingR   R
   t   space_groupt   order_zt   n_realt   solvent_radiusR    t   shrink_truncation_radiusR	   t   accessible_surface_fractiont   contact_surface_fractionR   t   maxt   datat   minR   t   countR   (   t   rt   dt   at   xt   yt   zR   R#   R$   R'   R+   R0   R/   t   mt   asft   csf(    (    sC   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/masks/tst_masks.pyt
   exercise_1&   s¨    $					C					$!					$c          C   s%  t  j d d d d ƒ }  t j d |  ƒ } t j ƒ  } t j ƒ  } x­ t d	 ƒ D]Ÿ } t j d
 d | t	 t
 j | ƒ ƒ d d | t	 t
 j | ƒ ƒ d d | d f d d ƒ } | j | ƒ | j t j j | j ƒ  ƒ | j | j ƒ qO Wt j d | d d d t ƒ } d } t j d | j ƒ  d | ƒ } | j ƒ  }	 d }
 d } t | j ƒ  | j ƒ  j ƒ  | j ƒ  | |	 | |
 ƒ } | j d k s—t  ‚ | j! d k s¬t  ‚ t j" | j# ƒ d k sÊt  ‚ t j$ | j# ƒ d k sèt  ‚ | j# j% ƒ  | j# j& d ƒ | j# j& d ƒ k st  ‚ t' j( j) d | d |	 d t d | d |
 ƒ } | j# j* | j# ƒ sgt  ‚ t' j( j) d | d | d t d | d |
 ƒ } | j# j* | j# ƒ s¯t  ‚ | j+ d | ƒ } | j+ d | ƒ } t, | j# ƒ  | j# ƒ  ƒ sôt  ‚ t, t j- t j	 | j# ƒ  ƒ ƒ d ƒ s!t  ‚ d  S(   NR   g®Gáz®@g=
×£p½$@iZ   gHáz®ï`@R   R(   R   id   R   g      ð?g     @�@R   R   t   d_mint   anomalous_flagg      à?R'   i   i    t   xray_structuret   gridding_n_realt   ignore_zero_occupancy_atomsR/   R0   t	   grid_stept
   miller_setgt[¦O¸‘@(   g®Gáz®@g=
×£p½$@g=
×£p½$@iZ   gHáz®ï`@iZ   (.   R   R   R   R   R   R   R   t   xrangeR   t   absR)   t   sint   cosR   R   R   R   R   R   R   R   t	   build_sett   FalseR   R+   R   R.   R
   R,   R-   t
   sites_fracR/   R    R0   R3   R4   R5   R   R6   t   mmtbxt   maskst   bulk_solventt   all_eqt   structure_factorsR	   t   sum(   R   R   R$   R#   t   kR   RG   R'   R+   t   nxyzR0   R/   t   m1t   m2t   m3t   f_mask2t   f_mask3(    (    sC   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/masks/tst_masks.pyt
   exercise_2‚   sr    											7		!c          C   s»  d d l  m }  d d l m } t j d | j d ƒ d d g d d	 d ƒ } | j d d ƒ j ƒ  } |  j	 j
 ƒ  } |  j d | d | ƒ } t | j ƒ  j ƒ  ƒ d d g k s· t ‚ | j ƒ  } t | ƒ d k sÛ t ‚ t j t j | d j ƒ  ƒ ƒ d k s	t ‚ | j d d ƒ t | _ t | _ |  j d | d | d | ƒ } t | j ƒ  j ƒ  ƒ d d g k sst ‚ | j ƒ  } t | ƒ d k s—t ‚ | j ƒ  } t | ƒ d k s»t ‚ t j t j | d j ƒ  ƒ ƒ t j t j | d j ƒ  ƒ ƒ k st ‚ t | _ t | _ |  j d | d | d | ƒ }	 t | j ƒ  j ƒ  ƒ d d g k s_t ‚ |	 j ƒ  }
 t |
 ƒ d k sƒt ‚ t t j |
 d j ƒ  ƒ j ƒ  j ƒ  d ƒ s·t ‚ d  S(   Niÿÿÿÿ(   RP   (   t   sgtbxt   space_group_infoR&   t   elementsR   i   R   i
   i   i   iF   iP   ix   RA   g       @t   miller_arrayRC   g      ð?i   i    g      @t   valuet   mask_paramsg        (   i
   i   i   iF   iP   ix   (   g        g        g        (   RO   RP   t   cctbxR]   R   RC   R^   RS   t   f_calct   mask_master_paramst   extractt   managerR   R   t   extract_occupanciesR    t   shell_f_maskst   lenR   t   meanRI   R4   t   set_occupanciesRM   RE   t   use_asu_maskst   TrueR	   t   min_max_meant   as_tuple(   RP   R]   t   xsRd   t   mpt   mm1t   fmasks1t   mm2t   fmasks2t   mm3t   fmasks3(    (    sC   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/masks/tst_masks.pyt
   exercise_3½   sJ    			*.			*+			*i
   c         C   sL  t  j d |  d d | d d |  d d	 d
 d ƒ } xt t g D]} t j d | d d d | ƒ } xÜ d d d g D]Ê } xÁ d d d g D]¯ } t j j d | d d d t d | d | ƒ } | j	 d | ƒ } | j
 ƒ  }	 |	 j ƒ  j ƒ  d k r� |	 j |	 ƒ }
 t j t j |
 j ƒ  |	 j ƒ  ƒ ƒ d k  s<t ‚ q� q� Wqv WqA Wd  S(   NR^   R_   t   Ot   NR   i   i   t   volume_per_atomi   t   min_distanceR   RA   RB   i    g      à?i   i   RC   RF   RE   R/   R0   RG   g�íµ ÷Æ°>(   Rz   R{   R   g.!	Ž˜@g¨ô—›wã@(   R   RC   RM   Rn   R   RL   RO   RP   RQ   RS   t   select_centrict   indicesR   t   phase_transferR   R3   RI   R4   R    (   R^   t   n_sitesR   RB   RG   R0   R/   t   bulk_solvent_maskt   f_maskt   centricst   ideal(    (    sC   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/masks/tst_masks.pyt   exercise_centricsæ   s.    					c   
   	   C   s  t  j d | d | ƒ } t j d | ƒ } t j d |  d d d d d	 d
 ƒ } t j d | d d d d d	 d
 ƒ } | j | ƒ | j | ƒ t j ƒ  } t j ƒ  }	 xG | j	 ƒ  D]9 } | j
 t | j ƒ ƒ |	 j
 t j j | j ƒ  ƒ q± W| j ƒ  |	 j ƒ  k st ‚ | | |	 f S(   NR   R   R   R   R   gš™™™™™¹?R   g      ð?R   R   (   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R    (
   R   t   site2R!   R"   R   R   R   t
   scatterer2R#   R$   (    (    sC   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/masks/tst_masks.pyt   structure_init2ÿ   s,    					!c         C   s3  t  j j d } d | d | } d } d d | | d d f } | d } | d } d }	 | | | |  d |  d	 |  d
 g }
 t | | d |
 ƒ \ } } } t | | d |
 ƒ \ } } } d | | } t j d | j ƒ  d | ƒ } t | j ƒ  | j ƒ  j	 ƒ  | | | j
 ƒ  | |	 d t d t ƒ} t | j ƒ  | j ƒ  j	 ƒ  | | | j
 ƒ  | |	 d t d t ƒ} t | j ƒ  | j ƒ  j	 ƒ  | | | j
 ƒ  | |	 d t d t ƒ} t | j ƒ  | j ƒ  j	 ƒ  | | | j
 ƒ  | |	 d t d t ƒ} | j | j k s	t ‚ t t | j ƒ t | j ƒ ƒ } t t | j ƒ t | j ƒ ƒ } t t | j ƒ t | j ƒ ƒ } | d k r­t t | j | j ƒ ƒ t | ƒ d k  s­t ‚ n  | d k rît t | j | j ƒ ƒ t | ƒ d k  sît ‚ n  | d k r/t t | j | j ƒ ƒ t | ƒ d k  s/t ‚ n  d  S(   NR   g       @g      Ð?gÍÌÌÌÌÌì?g      à?gÍÌÌÌÌÌ@g        i    i   i   R&   g      ð?R   R'   t   explicit_distancet   debugg{®Gáz„?(   g      Ð?g      Ð?g      Ð?gÍÌÌÌÌÌü?(   R   R   R   R‰   R   R+   R   R
   R,   R-   R.   RM   Rn   t   n_atom_pointsR    R3   RI   t   float(   t   anglest   nspacingt   aft   radR9   t   pos1t   pos2t   solvent_radius1t   solvent_radius2R0   R"   t
   structure1t   xyzf1t   atmrad1t
   structure2t   xyzf2t   atmrad2R'   R+   RW   RX   RY   t   m4t   mx1t   mx2t   mx3(    (    sC   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/masks/tst_masks.pyt   tst2_run  sp    

$										!!!55c           C   sš   t  d d d g d d ƒ t  d d d g d d ƒ t  d d d g d d ƒ t  d d d g d d ƒ t  d d d	 g d d ƒ t  d d d g d d ƒ d  S(
   Ng      $@g     €V@g     `a@g      @g     @e@g      @g      4@g      >@g      D@(   R    (    (    (    sC   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/masks/tst_masks.pyt
   exercise_4X  s    c         C   s   t  | ƒ d  S(   N(   R†   (   t   flagsR^   (    (    sC   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/masks/tst_masks.pyt   run_call_backf  s    c           C   sC   t  ƒ  t ƒ  t ƒ  t ƒ  t j t j d t d t	 d t
 ƒd  S(   Ni   t   symbols_to_stdoutt   symbols_to_stderr(   R@   R\   Ry   R¡   R   t   parse_options_loop_space_groupst   syst   argvR£   Rn   RM   (    (    (    sC   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/masks/tst_masks.pyt   runi  s    t   __main__(!   t
   __future__R    t   cctbx.eltbxR   Rc   R   R   R   R   t   cctbx.developmentR   R   t   cctbx.array_familyR   t   libtbx.test_utilsR	   R)   R§   t   cctbx.masksR
   t   mmtbx.masksRO   R%   R@   R\   Ry   R†   R‰   R    R¡   R£   R©   t   __name__(    (    (    sC   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/masks/tst_masks.pyt   <module>   s2   		\	;	)		A			