ó
E™xTc           @   s€  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 m Z m Z d  d l m Z d  d l Z d  d l Z d  d l Z d „  Z d e f d „  ƒ  YZ d d „ Z d  e e d „ Z  d „  Z! d „  Z" d „  Z# d „  Z$ d „  Z% d „  Z& d „  Z' e( d k r|e' ƒ  n  d S(   iÿÿÿÿ(   t   division(   t   dump_pdb(   t   close_packing(   t   crystal(   t!   non_crystallographic_asu_mappings(   t   sgtbx(   t   uctbx(   t   flex(   t   debug_utils(   t   matrix(   t   ifloort   iceil(   t   approx_equalNc         C   s,   t  j |  |  |  t j d ƒ d d d f ƒ S(   Ni   g      @iZ   ix   gUUUUUU@(   R   t	   unit_cellt   matht   sqrt(   t   point_distance(    (    sX   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_crystal_close_packing.pyt   hexagonal_sampling_cell   s    t   hexagonal_boxc           B   s   e  Z d  „  Z RS(   c         C   sh   t  | ƒ d k s t ‚ | j d | ƒ } | j ƒ  |  _ | j ƒ  |  _ | t j | j ƒ  ƒ |  _ d  S(   Ni    t
   sites_cart(	   t   lent   AssertionErrort   fractionalizet   mint   maxR   t	   min_indext   dott   pivot(   t   selft   hex_cellt   vertices_cartt   vertices_hex(    (    sX   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_crystal_close_packing.pyt   __init__   s
    (   t   __name__t
   __module__R    (    (    (    sX   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_crystal_close_packing.pyR      s   i    c         C   sÇ   | d d k ri |  d d d k rA |  d |  d |  d d g S|  d d |  d d |  d d g SnZ |  d d d k rœ |  d |  d |  d d g S|  d d |  d d	 |  d d g Sd  S(
   Ni   i    i   g      à?g      @gUUUUUUÕ?gUUUUUUå?gUUUUUUÕ?gUUUUUUå?(    (   t   pointt   layer(    (    sX   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_crystal_close_packing.pyt   hex_indices_as_site   s    (c         C   sQ  | r9 t  j d |  d | d | d | d | d | ƒ } n  | d k sK t ‚ | d k  ru | d d
 t j d ƒ } n  | r/| j ƒ  j ƒ  |  j ƒ  k sŸ t ‚ | j ƒ  j ƒ  j	 | j ƒ  ƒ sÆ t ‚ | j
 ƒ  | k sÞ t ‚ t | j ƒ  | ƒ sù t ‚ t | j ƒ  | ƒ st ‚ | j ƒ  | k s/t ‚ n  | j d | ƒ } t d | ƒ }	 t d |	 d | j d t ƒ ƒ }
 t d |	 d | j d t ƒ ƒ } g  } g  } x¿ t d ƒ D]± } | | rØ| j d ƒ | j d ƒ q«t t |
 j | |
 j | ƒ ƒ } | j t d t | j | |
 j | ƒ ƒ ƒ | j | t d t | j | |
 j | ƒ ƒ ƒ q«W| r¥t | j ƒ  ƒ | k s„t ‚ t | j ƒ  ƒ | k s¥t ‚ n  t j  | j ƒ  j! ƒ  ƒ t j  |	 j" ƒ  ƒ } t# j$ ƒ  } xt# j% d | d | d t& ƒ D]å } t j' |
 j ƒ t j' t( | ƒ ƒ } | | } | j) | ƒ rR| j | ƒ qþ| rþxˆ d d d d d d d d  d! d" d# d$ g D]Y } t( | d | d ƒ} | t j' | ƒ } | | } | j) | ƒ rƒ| j | ƒ PqƒqƒWqþqþW| j* ƒ  d k sÿt ‚ |  j+ ƒ  j, ƒ  } | d  | } | | d 7} | rM| j- ƒ  sFt ‚ | j. ƒ  } | j- ƒ  sdt ‚ | j* ƒ  | j* ƒ  k s‚t ‚ t | | ƒ s—t ‚ | j/ ƒ  | j- ƒ  s´t ‚ t | j0 ƒ  | d ƒ sÓt ‚ | j1 ƒ  | j* ƒ  d k sõt ‚ | j- ƒ  st ‚ | j/ ƒ  d } x | D] } | d 7} qW| | j* ƒ  k sMt ‚ n  | S(%   Nt   cb_op_original_to_samplingt	   float_asut   continuous_shift_flagsR   t   buffer_thicknesst   all_twelve_neighborsi    i   g      @g      à?i   t	   thicknessR   R   t	   cartesianiþÿÿÿt   begint   endt
   open_rangei   iÿÿÿÿR$   i	   gUUUUUUå?(   i   i    i    (   i   i   i    (   i    i   i    (   iÿÿÿÿi    i    (   iÿÿÿÿiÿÿÿÿi    (   i    iÿÿÿÿi    (   i    i    i   (   iÿÿÿÿiÿÿÿÿi   (   i    iÿÿÿÿi   (   i    i    iÿÿÿÿ(   iÿÿÿÿiÿÿÿÿiÿÿÿÿ(   i    iÿÿÿÿiÿÿÿÿ(2   R   t   hexagonal_sampling_generatorR   R   R   R&   t   cR'   R   t   is_similar_toR(   R   R   R)   R*   t
   add_bufferR   R   t   shape_verticest   Truet   xranget   appendR   t   absR   R   R   R
   t   listt	   box_lowert	   box_upperR	   t   sqrt   fractionalization_matrixt   orthogonalization_matrixR   t   vec3_doublet   nested_loopt   Falset   colR%   t	   is_insidet   sizet   c_invt   as_double_arrayt   at_endt   all_sites_fract   restartt   next_site_fract   count_sites(   R&   R'   R(   R   R)   R*   t   exercise_cppt   cppt   float_asu_bufferR   t   hex_boxt   hex_box_bufferR:   R;   t   it   nt   hex_to_frac_matrixt
   sites_fracR#   t   site_hext	   site_fract   offsett
   offset_hext   offset_fract   other_site_fract   rtt   cpp_sites_fract   site(    (    sX   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_crystal_close_packing.pyt   hcp_fill_box+   s     	$'
$.6!
	

"
 c         C   sd   t  j d |  d | ƒ } t d | j d | j d | j d | d | d | ƒ } |  j ƒ  j d	 | ƒ S(
   Nt   crystal_symmetryt   symmetry_flagsR&   R'   R(   R   R)   R*   RT   (   R   t   setup_hexagonal_samplingR^   R&   R'   R(   R   t   orthogonalize(   R_   R`   R   R)   R*   t   sRT   (    (    sX   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_crystal_close_packing.pyt    hexagonal_close_packing_sampling�   s    						c         C   sš  t  d |  ƒ } | t j d ƒ d } t j d | d | ƒ } t j d | d | ƒ } | j ƒ  | j ƒ  k st t ‚ | j ƒ  i  } x— | D]� } | j	 | j
 k s© t ‚ | j d k s¾ t ‚ t | j | d ƒ sÚ t ‚ | j | j
 d ƒ d | | j
 <| j | j	 d ƒ d | | j	 <q‹ Wi  }	 x. | j ƒ  D]  }
 |	 j |
 d ƒ d |	 |
 <q1W| rc|	 GHn  t | ƒ d k r–t | j ƒ  ƒ d k s–t ‚ n  d  S(	   NR   i   g®Gáz®ï?t   asu_mappingst   distance_cutoffi    i   i   (   R   R   R   R   t   neighbors_simple_pair_generatort   neighbors_fast_pair_generatort   count_pairsR   RI   t   j_seqt   i_seqt   j_symR   t   dist_sqt   gett   valuesR   R   (   R   R   t   verboseRe   Rf   t   simple_pair_generatort   pair_generatort	   neighborst   pairt   n_dictRR   (    (    sX   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_crystal_close_packing.pyt   check_distances’   s0    				
 $c         C   s  |  j  ƒ  } | r$ d G| j ƒ  GHn  |  j | ƒ } t j d | d | j ƒ  j ƒ  d | j ƒ  j ƒ  ƒ }	 |	 j ƒ  s{ t	 ‚ |	 j
 ƒ  }
 | rœ t j ƒ  } n d  } | r°|  j d | d d | ƒ j ƒ  } | d  k	 r]x„ t j | j ƒ  ƒ D]j } | j ƒ  j ƒ  | d k  rì g  t | | j ƒ  ƒ D] \ } } t | ƒ | ^ q$} | j | ƒ qì qì Wn  | j ƒ  j ƒ  | j ƒ  k  rÊd	 G|  j ƒ  G| j ƒ  j ƒ  G| j ƒ  GHt	 ‚ qÊn|  j d | d
 d | ƒ j ƒ  } |  j ƒ  j d | ƒ } | j ƒ  j ƒ  } | d  | } | | d 7} d d t j d ƒ | d d } | rMd G| GHn  x&t j | j ƒ  ƒ D]} | j ƒ  j ƒ  | d k  rcg  t | | j ƒ  ƒ D] \ } } t | ƒ | ^ q›} | d  k	 rÙ| j | ƒ n  | j ƒ  | } t j d | j ƒ  d |	 j ƒ  d | d d d d ƒ } t j d | d | d |
 ƒ j  ƒ  } | | k rrd	 G|  j ƒ  G| G| GHt	 ‚ qrqcqcW| j ƒ  j ƒ  d | j ƒ  k  rÊd	 G|  j ƒ  G| j ƒ  j ƒ  G| j ƒ  GHt	 ‚ n  | d  k	 rt! d d d |  d |  j ƒ  j" d  | ƒ ƒ n  d  S(!   Ns   cb_op_inp_ref.c():t   flagst   space_group_typet   seminvariantt   stepgffffffæ?R`   i    s   FAIL:g       @R   i	   i   g      à?i   g      @s   max_distance:R   t   space_groupt   original_sitet   minimum_distanceg�íµ ÷ÆÀ>t	   toleranceg�íµ ÷Æ°>t   reference_sitest   otherst/   principal_continuous_allowed_origin_shift_flagsi
   t	   file_names   tag_sites.pdbR_   RT   (#   t'   change_of_basis_op_to_reference_settingR1   t   change_basisR   t   search_symmetryt   space_group_infot   typet   structure_seminvariantst   continuous_shifts_are_principalR   R(   R   R?   t   Nonet   griddingt   tagsR@   t   n_realt	   tag_arrayt   zipt   floatR7   t   n_independentRD   R   R   RF   R   R   t   sym_equiv_sitest   subgroupt   min_sym_equiv_distance_infot   distR   Rb   (   t   inp_symmetryR`   R   R   t   strictly_insidet   flag_write_pdbRp   t   cb_op_inp_reft   ref_symmetryR…   R(   t   tag_sites_fract   inp_tagsR#   RR   t   dt   point_frac_inpt   sites_frac_inpR[   t   sites_frac_reft   max_distancet   point_frac_reft   equiv_pointst   min_dist(    (    sX   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_crystal_close_packing.pyt   check_with_grid_tags¬   s†    		
8	
	#8				"	c         C   s_  t  j d | j d d ƒ d | ƒ } |  j r; | j ƒ  GHn  t j d t d d d t d	 t d
 t ƒ } d } d } t } |  j	 r‰ d } n  |  j
 r› t } n  |  j r¹ d G| GHd G| GHn  t d | d | d | d | d | ƒ } t d | d | d |  j ƒ t d | d | d | d | d |  j	 d |  j d |  j ƒ |  j r[t d d d | d | ƒ n  d  S(   NR   t   volumeiè  R†   t   use_space_group_symmetryt   use_space_group_ltri    t   use_seminvariantst   use_normalizer_k2lt   use_normalizer_l2ni   iÿÿÿÿs   buffer_thickness:s   all_twelve_neighbors:R_   R`   R   R)   R*   R   Rp   R–   R—   R˜   R‚   s   hex_sites.pdb(   R   t   symmetryt   any_compatible_unit_cellt   VerboseR   R   t   search_symmetry_flagsR5   RA   R—   R*   Rd   Rv   R¥   t	   write_pdbR   (   Rw   R†   R_   R`   R   R)   R*   R   (    (    sX   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_crystal_close_packing.pyt   run_call_backö   sX    												
		
	c          C   sy   t  d t j d d d d ƒ d t j d t d	 d
 d t d t d t ƒ d d d d d t ƒ }  t |  ƒ d k su t ‚ d  S(   NR_   R   g¸…ëQØ,@iZ   t   space_group_symbols   F m -3 mR`   R§   R¨   i    R©   Rª   R«   R   i   R)   iÿÿÿÿR*   i$   (   g¸…ëQØ,@g¸…ëQØ,@g¸…ëQØ,@iZ   iZ   iZ   (	   Rd   R   R¬   R   R¯   R5   RA   R   R   (   R   (    (    sX   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_crystal_close_packing.pyt   exercise_all_twelve_neighbors&  s    					c   	      C   sA  t  j d d d d ƒ } t j ƒ  } g  } xÓ t t g D]Å } x¼ t t g D]® } x¥ t t g D]— } t j d | d t j d | d d	 d
 | d t d t ƒ d d d d d | ƒ } t j ƒ  } | j	 | j
 ƒ  ƒ |  r] | d Gd t j ƒ  | GHq] q] WqJ Wq7 W| d d d d d d d d g k s*t ‚ d t j ƒ  | GHd  S(   NR   s'   255.260  265.250  184.400  90.00  90.00R²   s	   P 21 21 2R_   R`   R§   R¨   i    R©   Rª   R«   R   i   R)   iÿÿÿÿR*   s   %.2fið¢  i±  iH¤ i¡Ñ iÀy i-› i6? i†Ï s!   time groel_sampling: %.2f seconds(   R   R¬   t   timeR5   RA   R   t   hexagonal_samplingR   R¯   R7   RK   R   (	   Rp   R_   t   t00t   n_sitesR§   R©   R*   t   sampling_generatort   t0(    (    sX   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_crystal_close_packing.pyt   exercise_groel_sampling7  s4    						*c           C   sD   t  ƒ  t d d t j d k ƒ t j t j d t d ƒ d GHd  S(	   NRp   s	   --Verbosei   R—   R*   R°   t   OK(   s   strictly_insides   all_twelve_neighborss	   write_pdb(   R³   Rº   t   syst   argvR   t   parse_options_loop_space_groupsR±   (    (    (    sX   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_crystal_close_packing.pyt   runS  s      t   __main__()   t
   __future__R    t   iotbx.pdb.tst_pdbR   t   cctbx.crystalR   t   cctbxR   t   cctbx.crystal.direct_space_asuR   R   R   t   cctbx.array_familyR   t   cctbx.developmentR   t   scitbxR	   t   libtbx.math_utilsR
   R   t   libtbx.test_utilsR   R´   R   R¼   R   t   objectR   R%   RA   R5   R^   Rd   Rv   R¥   R±   R³   Rº   R¿   R!   (    (    (    sX   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_crystal_close_packing.pyt   <module>   s8   		S			J	0				