ó
M™xTc           @   s¨   d  d l  m Z d  d l m Z e j Z e j Z d „  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 d
 „  ƒ  YZ d S(   iÿÿÿÿ(   t   division(   t   sgtbxc         C   s(   t  j d |  ƒ j ƒ  j t t ƒ j ƒ  S(   Nt   group(   R   t   space_group_infot   typet.   expand_addl_generators_of_euclidean_normalizert   Truet   build_derived_acentric_group(   R   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/sgtbx/lattice_symmetry.pyt   metric_supergroup   s    (   t   adopt_init_args(   t	   subgroups(   t   flex(   t   crystal(   t   bravais_typest   change_of_basis_opt   metric_subgroupsc           B   sY   e  Z e e e d  „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 RS(   c         C   s=   t  |  t ƒ  ƒ g  |  _ |  j ƒ  |  j d |  j ƒ  ƒ d  S(   Nt   group_of_interest(   R	   t   localst   result_groupst   change_input_to_minimum_cellt   derive_result_group_listt   lattice_group_info(   t   selft   input_symmetryt	   max_deltat)   enforce_max_delta_for_generated_two_foldst   bravais_types_onlyt   best_monoclinic_beta(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/sgtbx/lattice_symmetry.pyt   __init__   s    	
c         C   s.   |  j  j ƒ  |  _ |  j  j |  j ƒ |  _ d  S(   N(   R   t"   change_of_basis_op_to_minimum_cellt   cb_op_inp_minimumt   change_basist   minimum_symmetry(   R   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/sgtbx/lattice_symmetry.pyR      s    c         C   s:   t  j |  j j ƒ  d |  j d |  j ƒ} t  j d | ƒ S(   NR   R   R   (   R   t   lattice_symmetry_groupR    t	   unit_cellR   R   R   (   R   t   lattice_group(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/sgtbx/lattice_symmetry.pyR   &   s
    	c      	   C   s  t  j  | ƒ j ƒ  } t j ƒ  } xi | D]a } | j ƒ  } t j | t ƒ j ƒ  } d | k oi d k n st t	 ‚ | j
 | d | ƒ q( Wt j | t ƒ } xw| D]o} | | }	 t |	 ƒ }
 t j |	 ƒ } | j t j d ƒ ƒ t j d |  j j ƒ  d | d t ƒ } t j d |  j j ƒ  d |
 d t ƒ } | j ƒ  j ƒ  j ƒ  } | j | ƒ } |  j r†t | j ƒ  ƒ t j k r†q¦ n  |  j | ƒ } | j | ƒ } t t | ƒ d d	 d
 d d d ƒ} t t | ƒ d d	 d
 d d d ƒ} t t |  j ƒ d d	 d
 d d d ƒ|  _ | | |  j } | j ƒ  j  |  j! j ƒ  ƒ rÃ| j" ƒ  } y | j | ƒ } Wn4 t# k
 rš} t | ƒ j$ d ƒ d k  rÀ‚  qÀqÃX| j ƒ  | j ƒ  k rÃ| | } qÃn  |  j% j
 i | d 6| d 6| d 6| d 6| d 6t& d |  j j ƒ  d |
 ƒ d 6ƒ q¦ Wd  S(   Ni   iæ   iè  i    R"   t   space_groupt   assert_is_compatible_unit_cellt
   stop_charst    t   r_deni�   t   t_dens.   Unsuitable value for rational rotation matrix.t   subsymt   supersymt
   ref_subsymt   best_subsymt   cb_op_inp_bestt   reduced_cellt   max_angular_difference(   i    i    i    ('   R
   t   groups_parent_settingR   t   doublet   order_zR   t   space_group_typet   Falset   numbert   AssertionErrort   appendt   sort_permutationR   R   R$   t
   expand_invt   tr_vecR   t   symmetryR    R"   R   R   t   cb_opR   R   t   strR   t   centrict   change_of_basis_op_to_best_cellR   R   t   is_similar_toR   t   inverset   RuntimeErrort   findR   t   find_max_delta(   R   R   t   subgrst   sort_valuesR   R3   t   space_group_numbert   permt   i_subgrt   acentric_subgroupt   acentric_supergroupt   centric_groupR*   R+   t   cb_op_minimum_refR,   t   cb_op_best_cellR-   R.   t
   cb_op_corrt   best_subsym_corrt   e(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/sgtbx/lattice_symmetry.pyR   /   sb    "
					$$*
c         C   s   | j  d |  j ƒ S(   NR   (   R@   R   (   R   R,   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/sgtbx/lattice_symmetry.pyR@   r   s    	c         C   s6   Hd GHd GHH|  j  j ƒ  Hd |  j GHHd GHd GHHd  S(   Nt   Inputs   =====s   Angular tolerance: %.3f degreess   Similar symmetriess   ==================(   R   t   show_summaryR   (   R   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/sgtbx/lattice_symmetry.pyt
   show_inputv   s    c         C   s¸   x± |  j  D]¦ } | d j ƒ  j d d ƒ d G|  j j ƒ  GHd G| d j ƒ  GH| d j ƒ  j d d ƒ d G| d j ƒ  GHd	 G| d
 j ƒ  GHd G| d
 j ƒ  GHd | d GHHq
 Wd  S(   NR*   t   prefixs"   Symmetry in minimum-lengths cell: s!         Input minimum-lengths cell:s!              Symmetry-adapted cell:R-   s"               Conventional setting: s!                          Unit cell:s!                    Change of basis:R.   s!                            Inverse:s.         Maximal angular difference: %.3f degreesR0   (   R   R   RT   R    R"   t   ct   c_inv(   R   t   item(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/sgtbx/lattice_symmetry.pyt   show_groupsƒ   s    
c         C   s   |  j  ƒ  |  j ƒ  d  S(   N(   RU   RZ   (   R   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/sgtbx/lattice_symmetry.pyt   show“   s    
(   t   __name__t
   __module__R   R   R   R   R   R@   RU   RZ   R[   (    (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/sgtbx/lattice_symmetry.pyR      s   				C			N(    (   t
   __future__R    t   cctbxR   R!   R   t   lattice_symmetry_find_max_deltaRE   R   t   libtbxR	   t   cctbx.sgtbxR
   t   scitbx.array_familyR   R   R   R   R   (    (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/sgtbx/lattice_symmetry.pyt   <module>   s   			