ó
×™xTc           @   s²  d  d l  m Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l m	 Z	 d  d l Z d  d l
 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 d  d l m Z d  d	 l m Z d  d
 l m Z m Z d  d l m Z d  d l m Z d  d l Z e
 j
 ƒ  Z d d d „ Z e j j j  e j j _! e e j j _  d d „ Z" d „  Z# d? Z$ d@ Z% d% „  Z& d& „  Z' d d' „ Z( d( „  Z) d) „  Z* d* „  Z+ d+ „  Z, d, „  Z- d- „  Z. d. „  Z/ d/ „  Z0 d0 d1 „ Z1 d0 d2 dA d5 „ Z2 d0 d2 dB d6 „ Z3 d7 „  Z4 e5 d8 k r®e j6 e j7 d9 e4 d: e8 d; e9 ƒy e0 ƒ  Wq®e: k
 rªe j; ƒ  Z< e= e< ƒ d< k r¤d= GHe j; ƒ  GHd> GHn  ‚  q®Xn  d S(C   iÿÿÿÿ(   t   divisionN(   t   flex(   t   masks(   t   miller(   t   space_group_info(   t   random_structure(   t   crystal(   t   xray(   t   approx_equalt   is_below_limit(   t   format_cpu_times(   t   debug_utilsc         C   st  d d  l  } d d l m } | | g j d  ƒ d k s= t ‚ | d  k rb | |  j ƒ  j ƒ  } n  |  j ƒ  j	 ƒ  } g  } xF t
 d ƒ D]8 } | j | j  ƒ  ƒ | d k  r‡ | | c d 9<q‡ q‡ W| d k  råd d | d } d t d	 | d
 d ƒ | d }	 d t | |	 ƒ t | |	 ƒ }
 t t | |	 d ƒ d	 | |	 d ƒ } | |
 k s^t ‚ |
 | |
 | d } | d k r¬|	 d k r¬| d k r¬| |	 | d k s²t ‚ d | d d | d d | d | |	 | f } n| d k  r0d | d d | d d | d d d d | d d f } nÃ | d k  rod | d d | d d | d d d d f } n„ | d k  r®d | d d | d d | d d d d f } nE | d k  ríd | d d | d d | d d d d f } n d } | j | ƒ j d |  j ƒ  j ƒ  ƒ } | | j ƒ  d } t | j ƒ  ƒ } x$ t
 d ƒ D] } | | c | 9<qMW| j | ƒ S(    Niÿÿÿÿ(   t   uctbxi   i   i   g      @g      @g     Àb@g     €v@g     €A@g      d@i   g     àe@g      @i   g     0v@g      ð?i    i   i   iZ   g      V@g      T@iK   i�   iÃ   ix   t   cb_opg      @(   g      ð?g      ð?g      ð?iZ   iZ   iZ   gUUUUUUÕ?(   t   randomt   cctbxR   t   countt   Nonet   AssertionErrort   groupt   order_zt   typet   numbert   xranget   appendt   mint   maxt	   unit_cellt   change_basist'   change_of_basis_op_to_reference_settingt   inverset   volumet   listt
   parameters(   t   selfR   t
   asu_volumeR   R   t	   sg_numbert   rndt   it   alphat   betat	   gamma_mint	   gamma_maxt   gammat   paramsR   t   f(    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/masks/tst_asu_mask.pyt   random_compatible_unit_cell   sJ    !# ($3?333 g•Ö&è.>c         C   s  |  j  ƒ  s t ‚ | j  ƒ  s- t | j ƒ ‚ t j |  j ƒ  | j ƒ  ƒ } |  j | j ƒ  j d ƒ ƒ j	 ƒ  } | j | j ƒ  j d ƒ ƒ j	 ƒ  } | j
 ƒ  | j
 ƒ  k s× t t | j
 ƒ  ƒ d t | j
 ƒ  ƒ ƒ ‚ | j
 ƒ  d k st t | j
 ƒ  ƒ ƒ ‚ d } d } d } x™ t | j
 ƒ  ƒ D]… }	 t | |	 | |	 ƒ }
 t t | |	 ƒ t | |	 ƒ ƒ } | | d k r„|
 | } n d } | | k r&| } |
 } | } q&q&W| | k sý| | d k sýt d t | ƒ d t | ƒ d t | ƒ ƒ ‚ | j
 ƒ  S(	   Ni    i   s    != g        g{®Gáz„?s   max  rel_dif = s	      dif = s       mx =(   t   is_complex_arrayR   t	   __class__R   t   match_indicest   indicest   selectt   pairst   columnt   datat   sizet   strR   t   absR   (   t   obst   othert	   tolerancet   matchingt   data0R6   t   max_rel_dift   max_dift   max_mxR&   t   dift   mxt   rel_dif(    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/masks/tst_asu_mask.pyt
   compare_fcF   s0    $$)*#/c         C   s‹   d d l  m } g  } g  } xh t |  j ƒ  ƒ D]T \ } } y! | j | j j | j ƒ  ƒ Wq/ t k
 r‚ | j | j ƒ  ƒ q/ Xq/ W| S(   Niÿÿÿÿ(   t   van_der_waals_radii(	   t   cctbx.eltbxRF   t	   enumeratet
   scatterersR   t   vdwt   tablet   element_symbolt	   Exception(   t	   structureRF   t   unknownt
   atom_radiit   i_seqt	   scatterer(    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/masks/tst_asu_mask.pyt	   get_radiic   s    s
   P 21 21 21s   P 21s   P 1 1 21s   P 21/nt   P1t   Fm3mt   R3t   P61t   I41s   I 1 m 1t   Nt   Ct   Ot   Ht   Cat   Bt   Lit   Rut   Mgt   Sec         C   sf   |  d k s t  ‚ g  } xG t |  ƒ D]9 } | t t ƒ k  rQ | j t | ƒ q% | j d ƒ q% W| S(   Ni    RZ   (   R   R   t   lent   ElementsR   (   t   n_atomst   atomsR&   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/masks/tst_asu_mask.pyt
   make_atomst   s    c      
   C   s  t  j j |  ƒ } | j d | | ƒ } t j d | d |  ƒ } t j d | ƒ } x³ t | ƒ D]¥ } | t	 t
 ƒ k  r„ t
 | } n d } | | d t | ƒ | | | d t | ƒ | | d t | ƒ f }	 t j d	 |	 d
 d d d d | ƒ }
 | j |
 ƒ q_ W| S(   NR#   R   t   space_group_symbolt   crystal_symmetryRZ   i   i   i   t   sitet   ugš™™™™™¹?t	   occupancyg      ð?t   scattering_type(   R   t   sgtbxR   t!   any_compatible_unit_cell_originalR   t   symmetryR   RN   R   Rc   Rd   t   floatRR   t   add_scatterer(   t   spgr_symbolt   nt   atom_volumeR   t   cellRp   RN   R&   t   elementRj   RR   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/masks/tst_asu_mask.pyt   build_struc~   s"    	I		c         C   sÉ   g  } g  } t  | ƒ t  | ƒ k s* t ‚ |  j | | ƒ |  j | j ƒ  ƒ } | j ƒ  j d | ƒ } t j t j	 | j
 ƒ  ƒ ƒ } t | t ƒ s£ t | j ƒ ‚ | | k  sÅ t d t | ƒ ƒ ‚ d  S(   NR6   s   Maximum deviation from zero = (   Rc   R   t   computet   structure_factorsR2   t   sett   arrayR   R   R9   R6   t
   isinstanceRq   R0   R8   (   t   asu_maskt   fcR<   t   radiit   sitest   fm_asut   max_zero(    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/masks/tst_asu_mask.pyt	   zero_test“   s    c         C   sé   |  j  ƒ  } |  j ƒ  } d G| j GH|  j ƒ  j ƒ  } d G| j ƒ  j ƒ  j ƒ  GHd G| j ƒ  j ƒ  GHt	 j
 j ƒ  } x | D] } d G| GHq| WxS | D]K } d G| Gd G| j ƒ  j ƒ  Gd G| j ƒ  j ƒ  Gd G| j ƒ  j ƒ  GHq– Wd  S(	   Ns   NNN = s   CB r= s   CB t= s   LTR= s   Op: s    Order=s	     r.den= s	    tr.den= (   t   smxt   ltrR0   R   R   t   ct   rt	   as_doublet   tR   Rn   t   rt_mxt   ordert   den(   R   t   opst   ltrst   cbt   identR†   t   op(    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/masks/tst_asu_mask.pyt   check_groupž   s    0c   *      C   sÑ	  | j  } | j } | j } | j } | j } t j d ƒ d } d } d }	 t j j	 ƒ  }
 t
 |
 _ t
 |
 _ | |
 _ | |
 _ |  j d | ƒ j ƒ  } xP | j ƒ  j ƒ  d k ré | d } | d k sÎ t ‚ |  j d | ƒ j ƒ  } qš Wt d I| Id I| Id	 I| Id
 I| Id I| j ƒ  j ƒ  IJ|  j t ƒ |  j ƒ  } t d I|  j ƒ  j ƒ  Id I| j ƒ  Id I| j ƒ  IJt d I| j ƒ  j ƒ  IJt j ƒ  } t j d |  j ƒ  d |  j ƒ  d | j ƒ  d |
 j d |
 j d |
 j ƒ } t j ƒ  } | | | 7} | j ƒ  } t d I| IJt  | | d | ƒt! |  ƒ } t" | ƒ t" |  j# ƒ  ƒ k s{t ‚ t j ƒ  } | j$ |  j# ƒ  | ƒ t j ƒ  } | | | 7} t d I| j% ƒ  Id I| j& IJt j ƒ  } | j | j' ƒ  ƒ } | j( ƒ  j) d | ƒ } t j ƒ  } | | } | | | 7} | j* d  k	 r‹t, | j* d d ƒ } | |  j- ƒ  IJ| j. ƒ  | j/ | j* d ƒ | j/ | j* d d t0 ƒ d  d  l1 } | j2 j3 ƒ  } | j4 d! ƒ | j5 d" d# ƒ | j6 | j7 ƒ  ƒ | j8 | j ƒ  ƒ | j9 d$ d% d& d' d | j ƒ  ƒ } | j: d$ d( d) d ƒ } | j; d* | d+ d, ƒ | k sdt ‚ | j5 d" d- ƒ | j< | j* d. ƒ n  t j ƒ  } |  j= ƒ  } t j ƒ  } | | } | | | 7} | j> ƒ  } | j? d/ | j@ ƒ  ƒ } t j ƒ  } t jA d0 | d1 | d2 |
 j d3 |
 j d |
 j d |
 j ƒ } t j ƒ  } | | } | | | 7} t j ƒ  } | j d4 | ƒ } t j ƒ  } | | } | | | 7} | j t ƒ t j ƒ  } t jA d0 |  d1 | d2 |
 j d3 |
 j d |
 j d |
 j ƒ }  t j ƒ  } | | }! |	 | | 7}	 t j ƒ  } |  j d4 | ƒ }" t j ƒ  } | | }# |	 | | 7}	 t d5 I| j ƒ  j ƒ  Id6 I| j ƒ  j ƒ  IJt d7 I| d8 Id9 I|	 d8 Id: I| d8 IJt d; I| jB Id< I| jC Id= I| jD Id> I| jE Id? I| d8 Id@ I| jF IJt dA I|! d8 IdB I|# d8 IJt dC I| d8 IdD I| d8 IdB I| d8 IJ| j ƒ  j ƒ  |" j ƒ  j ƒ  k s�t ‚ | jG }$ | jG }% tH tI |$ ƒ tI |% ƒ ƒ }& |& dE k rítI |$ |% ƒ |& }' n d }' |' dE k rF| jJ d  k	 r=t, | jJ d ƒ } | |  j- ƒ  IJ| j. ƒ  n  dF ‚ n  tK | jG | jG ƒ sat ‚ tK | jL | jL ƒ s|t ‚ tM dG | jL dH | jG ƒ s�t ‚ tN | | d | ƒ}( |( | j ƒ  j ƒ  k sút dI tO |( ƒ dJ tO | j ƒ  j ƒ  ƒ ƒ ‚ |( d k s	t ‚ | r 	t jP ƒ  GHn  | j$ |  j# ƒ  | ƒ | j | j' ƒ  ƒ }) | j( ƒ  j) d |) ƒ }) tN | |) d | ƒ}( |( | j ƒ  j ƒ  k sÀ	t dI tO |( ƒ dJ tO | j ƒ  j ƒ  ƒ ƒ ‚ t j d ƒ d  S(K   Ni    g        t   d_mini   g333333ó?gü©ñÒMbP?s   Resolution= s     solvent radius= s     shrink radius= s     Tolerance= s     Number of reflection= s   Cell volume= s     Group order= s    p= s   Hall  symbol: R   R   t
   resolutiont   grid_step_factort   solvent_radiust   shrink_truncation_radiuss   asu mask grid = R<   s      n asu atoms= s      has-enclosed= R6   s   .pdbt   ws	   _mask.maps   _inverted_mask.mapi   iÿÿÿÿs	   mask testt   linet   startt   namet   mask_test_crystalt   project_namet   mask_test_projectt   mask_test_datasett
   wavelengtht   miller_arrayt   column_root_labelt   Ft   dones   _sf.mtzRi   t   xray_structuret   gridding_n_realt   ignore_zero_occupancy_atomst   ignore_hydrogen_atomst
   miller_sets#   Number of reflections ::: Fm asu = s   Fm P1 = s   Time ( ms )    P1= g     @�@s	      orig= s	       asu= s   Times ( ms ) mask_asu= s    atoms_to_asu= s    accessible= s
    contact= s    Fc= s    fft= s   Times ( ms ) orig:  mask= s     Fc=s   Times ( ms ) p1 :  expand= s     mask= g�íµ ÷Æ°>s   Not equal solvent volumet   valuet   limits   N compared refls: s    != (Q   R<   R•   R—   t   shrink_radiust   verboset   coutt   truncateR   t   mask_master_paramst   extractt   Falset   ignore_hydrogensR¨   R˜   Rz   t   f_calcR6   R7   R   t   show_summaryt   space_groupR   R   R   t   order_pR   t   hall_symbolt   timet	   atom_maskR”   R–   t	   grid_sizeR„   RS   Rc   t
   sites_fracRy   t   n_asu_atomst   debug_has_enclosed_boxR2   R{   R|   t
   save_filesR   t   opent   as_pdb_filet   closet   xplor_write_mapt   Truet	   iotbx.mtzt   mtzt   objectt	   set_titlet   add_historyt   set_space_group_infoR   t   set_hkl_baset   add_crystalt   add_datasett   add_miller_arrayt   writet   expand_to_p1t	   deep_copyt   customized_copyRi   t   bulk_solventt   debug_mask_asu_timet   debug_atoms_to_asu_timet   debug_accessible_timet   debug_contact_timet   debug_fft_timet   contact_surface_fractionR   R9   t   failed_fileR   t   accessible_surface_fractionR	   RE   R8   t   getvalue(*   t   struct   optsR<   R•   R—   R­   R®   t   time_p1t   time_asut	   time_origR,   R   R   t   tbR~   t   tet   gridR€   R‚   t   time_asu_sft   tmp_filet   iotbxt   mtzoR   t   datasett   struc_p1t   time_p1_expt   fc_p1t   blk_p1t   time_p1_mskt   fm_p1t
   time_p1_sft   blk_ot   time_orig_mskt   fm_ot   time_orig_sft   t_v1t   t_v2t   t_v3t   t_v4t
   n_comparedt   fm_asu2(    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/masks/tst_asu_mask.pyt   compare_masks­   sL   									
$			$

				
				

				


*				--c   
      C   sÌ   | j  r( d Gt |  ƒ Gd GH| Gd GHn  | j } | j } x‹ |  D]ƒ } xz t d ƒ D]l } | | } xY t d ƒ D]K } | d | } t | | j | j ƒ }	 | | _ | | _ t |	 | ƒ qq WqT WqA Wd  S(   Ns!   Standard tests, n space groups = s
   
 options=s   
i   g      à?(	   R®   Rc   R—   R­   R   Rx   Re   Ru   Rü   (
   t   groupst   optionsR—   R­   t   sgt   islvt   slv_radt   ishrt   shr_radRÞ   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/masks/tst_asu_mask.pyt   standard_testsb  s    			
		c         C   sþ  d d  l  } t | j ƒ } | j } d Gt |  ƒ GHd G| j  Gd GHx´|  D]¬} d G| Gd G| j  GHt | ƒ } d G| j ƒ  j ƒ  Gd G| j ƒ  j ƒ  Gd	 G| j ƒ  j	 ƒ  GHxFt
 | j  ƒ D]5} | d
 k rä d } d }	 | }
 nv | d k rd } d }	 | }
 nU | d k r&d } d }	 | }
 n4 d | j  ƒ  } d | | j  ƒ  }	 | | j  ƒ  }
 d  } y+ t j d | d | j d t d | ƒ } Wn- t k
 rºd G| j Gd G| Gd G| GHn X| d  k	 r½ |
 | _ |	 | _ | | _ t | | ƒ q½ q½ WqJ Wd  S(   Niÿÿÿÿs   Number of space groups: s(   Number of random tests per space group: s   
s   Space group= s     n tests= s          HM= s
     LOOKUP= s     HALL= i    gš™™™™™ñ?gÍÌÌÌÌÌì?i   g        i   g      @g/iŒÖQUõ?R   t   volume_per_atomt   general_positions_onlyt   elementss3   Failed to generate random structure:  atom_volume= s    group= s   
   atoms= (   R   Rg   Re   R•   Rc   R   R   t    universal_hermann_mauguin_symbolt   lookup_symbolR¹   R   R   R   R¦   Ru   R³   RM   R­   R—   Rü   (   Rý   Rß   R   Rf   R•   Rÿ   R   R&   R  R  t   resRÞ   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/masks/tst_asu_mask.pyt   random_testss  sT    									c         C   s@   |  j  d ƒ } t j j j | ƒ } | d  k r4 | S| d Sd  S(   Ni   i    (   t   extract_remark_iii_recordsRè   t   pdbt   remark_2_interpretationt   extract_resolutionR   (   t	   pdb_inputt   default_resolutiont   strsR
  (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/masks/tst_asu_mask.pyt   get_resolution£  s
    c         C   sµ  d GH|  Gd GH|  j  } | d k s) t ‚ t j j d ƒ } | d  k	 sS t d ƒ ‚ t j j | ƒ sq t | ƒ ‚ |  j } d G| GHt j	 | ƒ } d } xõ | D]í } t j j
 | | ƒ } t j j | ƒ } t j j | ƒ } t j j | ƒ rŸ t j j | ƒ j ƒ  }	 |	 j d ƒ d k rŒ| d	 } d
 G| GHt j j d d  d | ƒ }
 |
 j ƒ  } t |
 | ƒ |  _ t | |  ƒ | | k r‰Pq‰qŒqŸ qŸ Wd G| GH| d k s±t d ƒ ‚ d  S(   Ns   CCI tests,  
 options=s   
i    t   CCI_REFINE_VETTEDsG   Tests on CCI structures requested, but CCI_REFINE_VETTED is not defineds   Testing files in R  iÿÿÿÿi   s   Processing file: t   source_infot	   file_names   Number of structures tested: s   No CCI files have been tested(   t   cciR   t   ost   environt   getR   t   patht   isdirR•   t   listdirt   joint   abspatht   realpatht   isfilet   basenamet   lowert   findRè   R  t   inputt   xray_structure_simpleR  Rü   (   Rþ   t   n_filest   dR•   t   flsRt   R-   t   ffullt   frealt   fbaset   pdb_inpRÞ   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/masks/tst_asu_mask.pyt   cci_vetted_tests«  s8    				
		c         C   s0   t  j |  | ƒ } x | D] } d G| GHq W| S(   Ns   Generated: (   R   t   generate_groups(   t   grpt   ncbt   hallst   h(    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/masks/tst_asu_mask.pyt   generate_cbÊ  s    c          C   s¦  d d  l  }  |  j ƒ  } | j d d d d d d d t d	 d
 ƒ| j d d d d d d d d d	 d ƒ| j d d d d d d d d d d d	 d ƒ| j d d d d d d d d d d d	 d ƒ| j d d d d d d d d  d d! d	 d" ƒ| j d# d$ d d d d d d% d d! d	 d& ƒ| j d' d( d d d d d d) d	 d* ƒ| j d+ d, d d d d d d- d d. d	 d- ƒ| j d/ d0 d d d d d d1 d d2 d	 d- ƒ| j d3 d d d d d d4 d d5 d	 d6 ƒ| j d7 d d d d d d8 d d9 d	 d: ƒ| j d; d d d d d d< d	 d= ƒ| j d> d d d d d d? d	 d@ ƒ| j dA d d d d d dB d d! d	 dC ƒ| j dD d d d d d dE d	 dF ƒ| j ƒ  \ } } g  } | j d  k oÇ| j d  k ræ| j d! k rædG | _ n  | j d  k	 r>t	 | j dH ƒ } x' | j
 ƒ  D] } | j | j ƒ  ƒ qW| j ƒ  n  | j d  k t | ƒ d! k @rm| j t ƒ nÄ | j dI k r¬x² t dG dJ ƒ D] } | j t | ƒ ƒ qŒWn… | j dK k rt j j ƒ  } xd t r| j ƒ  }	 | j |	 j ƒ  ƒ |	 j ƒ  dL k rÍPqÍqÍWn" | j d  k	 r1| j | j ƒ n  | j d! k rÄg  }
 x> | D]6 } t | | j ƒ } x | D] } |
 j | ƒ qlWqMWt	 dM dN ƒ } x |
 D] } | | IJq�W| j ƒ  |
 } n  | j d! k rãt | | ƒ n  | j d! k rÿt | ƒ n  | j d  k	 r]t  j! j" dO d  dP | j ƒ } | j# ƒ  } t$ | | j% ƒ | _% t& | | ƒ n= | j d! k rš| j d! k rš| j d  k ršt' | | ƒ n  t( ƒ  GHd  S(Q   Niÿÿÿÿs   -vs	   --verboset   actiont
   store_truet   destR®   t   defaultt   helps
   be verboses   -gs   --space_groupt   storeR   t   stringR·   s   space group symbol or numbers   -ns	   --n_atomst   intRe   i   s&   number of atoms in the asymmetric units   -as   --atom_volumeRq   Ru   g      I@s   volume of one atom in agstrom^3s   -zs   --randomR   i    s+   number of random structures per space groups   -cs   --cciR  s*   number of structures from CCI PDB databases   -fs
   --pdb_filet   files   pdb file to tests   -rs   --resolutionR•   gZd;ßO�ÿ?s   -ts   --toleranceR<   g�íµ ÷Æ°>s   --solvent_radiusR—   gš™™™™™ñ?s   solvent radiuss   --shrink_radiusR­   gÍÌÌÌÌÌì?s   shrink truncation radiuss   --save_failedRÛ   s-   file name for the pdb of the failed structures   --save_filesRÀ   s,   base file name for pdb/mask/sf files to saves   --change_basisR   s   number of basiss   --groups_filet   groups_files)   file containing space group, one per linei   Rˆ   t   alliç   t   all530iæ   s   generated_groups.txtR™   R  R  ()   t   optparset   OptionParsert
   add_optionR³   t
   parse_argsR·   R   R>  R   RÁ   t	   readlinesR   t   stripRÃ   Rc   t   extendt   SpaceGroupsR   R8   R   Rn   t   space_group_symbol_iteratorRÅ   t   nextt   hermann_mauguinR   R   R4  R  R  R.  R=  Rè   R  R%  R&  R  R•   Rü   R  R
   (   RA  t   parserRß   t   argsRý   Rç   Rš   t   isgt   itt   symbolt	   cb_groupsR0  R2  t   hallt   gR-  RÞ   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/masks/tst_asu_mask.pyt   runÐ  sž    	
	-id   c   
      C   s>  d d l  m } d d l m } xd d d g D]} xý d d d d g D]é } t j d |  d d  | d	 d |  d d d d ƒ } | d | ƒ } t j d | j ƒ  d | j	 ƒ  d | d | d d d d ƒ } | j
 | j ƒ  | ƒ | j ƒ  }	 t j |	 ƒ d k st ‚ t j |	 ƒ | j	 ƒ  j ƒ  k sI t ‚ qI Wq0 Wd  S(!   Niÿÿÿÿ(   t   maptbx(   t   vdw_radii_from_xray_structurei   g      ø?gÍÌÌÌÌÌ @g      ð?i   i   i   i   R   R  R[   RY   RZ   R  i   t   min_distanceR¦   R   R   R•   R–   R—   R˜   g        g      à?gUUUUUUÕ?g      Ð?gš™™™™™É?(   R[   RY   RZ   (   R   RU  t   cctbx.masksRV  R   R¦   R   R»   R   R·   Ry   R½   t   mask_data_whole_ucR   R   R   R   R   (
   R   t   n_sitesRU  RV  R”   t   resolution_factort   xrsRP   R~   t	   mask_data(    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/masks/tst_asu_mask.pyt   exercise_mask_data_1)  s,    				'g       @g      ð?i   c         C   s¯  d d l  m } d d l m } xˆd d g D]z} xqd d g D]c} t j d |  d d" | d d |  d d d d ƒ } | j d d ƒ | r¥ | j d t ƒ } n  | d | ƒ }	 t	 j
 d | j ƒ  d | j ƒ  d | d | d d d d ƒ }
 |
 j | j ƒ  |	 ƒ |
 j ƒ  } | j d t ƒ } x5 | j ƒ  D]' } | j | ƒ } | d k s1t ‚ q1W| | j ƒ  j ƒ  } | d k r¢| j | t j | j ƒ  ƒ ƒ } n  x5 | j ƒ  D]' } | j | ƒ } | d k s¯t ‚ q¯W| j d | ƒ j ƒ  } | j ƒ  j d |
 j | j ƒ  ƒ ƒ } | j d | d t d t d  t ƒ } t | ƒ j ƒ  } t | ƒ j ƒ  } t j  t j | | ƒ ƒ t j  | | ƒ } t! | d! ƒ s@ t ‚ q@ Wq- Wd  S(#   Niÿÿÿÿ(   RU  (   RV  i    i   R   R  R[   RY   RZ   i   R  i2   RW  g      ø?t   mean_distancei
   t   sites_mod_positiveR¦   R   R   R•   R–   R—   g      ð?R˜   R”   R6   t   mapt	   use_scalet   anomalous_flagt   use_sgg        (   R[   RY   RZ   ("   R   RU  RX  RV  R   R¦   t   shake_sites_in_placeRÑ   RÅ   R   R»   R   R·   Ry   R½   RY  t   value_at_closest_grid_pointR   R   t   copyR   Rå   t   focusRz   Rµ   R{   R|   R2   t   structure_factors_from_mapR³   R9   R6   t   sumR   (   R   RZ  R”   R[  RU  RV  t   yn2t   ynR\  RP   R~   R]  t   xrs_p1t	   site_fract   mvR   t   f_mask_1t   f_mask_2t   fm1t   fm2Rˆ   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/masks/tst_asu_mask.pyt   exercise_mask_data_2W  sP    		 		$'-c         C   s  d d l  m } t j d |  d d  | d d	 |  d
 d d d ƒ } | j d | j ƒ  d | j ƒ  d | j d | d | ƒ } | j ƒ  } | j	 d | ƒ j
 ƒ  } | j d d ƒ | j d t ƒ }	 t j j d | d t d d	 d d	 d t d | ƒ }
 |
 j |
 j } } | j ƒ  | k s!t ‚ | j ƒ  j d | j	 | j ƒ  ƒ ƒ } | j d | d t d t d t ƒ } t j j d | d t d d	 d d	 d t d | ƒ } | j d | j d t d t d t ƒ } t | j ƒ  | j ƒ  ƒ sçt ‚ t | j ƒ  | j ƒ  ƒ st ‚ d  S(!   Niÿÿÿÿ(   RU  R   R  R[   RY   RZ   i   i   R  i2   RW  g      ø?R   t   symmetry_flagsR[  R”   R_  i
   R`  R¦   t   p1R—   R˜   t   for_structure_factorst   n_realR6   Ra  Rb  Rc  Rd  (   R[   RY   RZ   (   R   RU  R   R¦   t   crystal_griddingR   R   t   use_space_group_symmetryRx  Rz   Rµ   Re  RÑ   RÅ   t   mmtbxR   t   mask_from_xray_structureR³   R~   R]  Rh  R   R{   R|   R2   Ri  R   R6   (   R   RZ  R”   R[  RU  R\  Ry  Rx  t	   dummy_setRm  t   mo1R~   t
   mask_data1Rp  Rq  t   mo3t   f_mask_3(    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/masks/tst_asu_mask.pyt   exercise_mask_data_3…  sP    							!c         C   s"   t  | ƒ t | ƒ t | ƒ d  S(   N(   R^  Rt  R‚  (   t   flagsR   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/masks/tst_asu_mask.pyt   run_call_back´  s    

t   __main__i   t   symbols_to_stdoutt   symbols_to_stderri    s   <<<<<<<< Start Log:s   >>>>>>>> End Log(
   s
   P 21 21 21s   P 21s   P 1 1 21s   P 21/nRT   RU   RV   RW   RX   s   I 1 m 1(   RY   RZ   R[   R\   R]   RZ   R^   R_   R`   RY   R\   R\   Ra   Rb   g      Ð?g      Ð?(>   t
   __future__R    t   sysR  Rº   t	   iotbx.pdbRè   t!   iotbx.pdb.remark_2_interpretationt   scitbx.array_familyR   t   StringIOR{  R   R   R   t   cctbx.sgtbxR   t   cctbx.developmentR   R   R   t   libtbx.test_utilsR   R	   t   libtbx.utilsR
   R   t   mmtbx.masksR¯   R   R.   Rn   t   any_compatible_unit_cellRo   RE   RS   RH  Rd   Rg   Rx   R„   R“   Rü   R  R  R  R.  R4  RT  R^  Rt  R‚  R„  t   __name__t   parse_options_loop_space_groupst   argvRÅ   R³   RM   RÝ   t   logRc   (    (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/masks/tst_asu_mask.pyt   <module>   sp   $)	  	
			µ		0				Y.-.	