ó
N™xTc           @   sÁ  d  d l  m Z d  d l m Z d  d l Z e j j d ƒ Z d  d l	 Td  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 d  d l Z d  d l Z d  d l m Z m Z d  d l Z d  d l Z e d e j j ƒ  ƒ e j  Z! e j j" j# Z$ e j j% j& Z' d e( f d „  ƒ  YZ) e* e* e* g e* g d „ Z+ e* e* e* e* d d d „ Z, d e) f d „  ƒ  YZ- e* e* e* d d d „ Z. d e j j/ e0 f d „  ƒ  YZ1 d e( f d „  ƒ  YZ2 d e j3 f d „  ƒ  YZ4 d e( f d  „  ƒ  YZ5 d! e( f d" „  ƒ  YZ6 d# e j3 f d$ „  ƒ  YZ7 d e j j/ e8 f d% „  ƒ  YZ1 d& e( f d' „  ƒ  YZ9 d( „  Z: d) e9 f d* „  ƒ  YZ; d+ e9 f d, „  ƒ  YZ< d- „  Z= d S(.   iÿÿÿÿ(   t   division(   t   flexNt   cctbx_crystal_ext(   t   *(   t   find_best_cell(   t   sgtbx(   t   uctbx(   t
   covariancet   geometry(   t   shared(   t   stl(   t   Keept   Sorryt   number_of_bytest   symmetryc        	   B   sÓ  e  Z d  Z d- d- d- d- e e e e d „ Z d „  Z e e e d „ Z	 d „  Z
 d „  Z d „  Z d d „ Z d- d d	 „ Z d
 d d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d- e d „ Z d- d „ Z d „  Z d „  Z d- d- d „ Z d- d- d „ Z d „  Z d „  Z d „  Z d „  Z  d „  Z! e e d „ Z" d  „  Z# d! „  Z$ d- d- d- d- d- d" e d# „ Z% d- d$ „ Z& d% „  Z' d& „  Z( d' d( e d) „ Z) d* „  Z* d- d+ „ Z+ d, „  Z, RS(.   sl   This class represents the symmetry of a crystal and bundles information on its unit cell and space group.
  c	         C   s}  | | | g j  d ƒ d k s$ t ‚ | d k	 rX t | t j j ƒ rX t j | ƒ } n  | |  _ | |  _ |  j d k rî | d k	 r� t	 j
 d | ƒ |  _ qî | d k	 rî t | t	 j ƒ rÓ t	 j
 d | ƒ |  _ që t	 j
 d | ƒ |  _ qî n  |  j ƒ  d k	 ry|  j
 ƒ  d k	 ry| rç|  j
 ƒ  }	 |	 j ƒ  j ƒ  }
 |
 d k r�|  j ƒ  j ƒ  rä|	 j ƒ  j ƒ  } | j d ƒ rŠ|	 j ƒ  |  _ qŠqäqç|
 d k rç|  j ƒ  j ƒ  rä|	 j ƒ  j ƒ  } | j d ƒ rá|	 j ƒ  |  _ qáqäqçn  | rR| r7|  j ƒ  sOt d d	 t |  j ƒ t |  j j ƒ  ƒ f ƒ ‚ qOqR|  j ƒ  sRt d
 ƒ ‚ n  | ry|  j ƒ  j |  j ƒ |  _ qyn  d S(   s•  Initialises a new crystal.symmetry class object from different input data. Only one of space_group, space_group_info and space_group_symbol may be used.

    :param unit_cell:          object specifying the unit_cell properties
    :type unit_cell:           cctbc.uctbx.ext.unit_cell or tuple(lattice parameters)
    :param space_group_symbol: Hermann-Mauguin symbol of the crystallographic space group
    :type space_group_symbol:  string
    :param space_group_info:   object describing the desired space group
    :type space_group_info:    cctbx.sgtbx.space_group_info
    :param space_group:        the desired space group of the symmetry class
    :type space_group:         cctbx.sgtbx.space_group
    :param correct_rhombohedral_setting_if_necessary: If set to 'True' an automatic conversion between rhombohedral and hexagonal basis will be done
    :type correct_rhombohedral_setting_if_necessary:  boolean
    :param assert_is_compatible_unit_cell: If set to 'True' a consistency check will be performed on the relation of space group to lattice parameters
    :type assert_is_compatible_unit_cell:  boolean
    :param force_compatible_unit_cell:     If set to 'True' the crystal parameters will be averaged to comply with the restrictions of the space group
    :type force_compatible_unit_cell:      boolean

    :returns: a new crystal.symmetry class with desired properties
    :rtype: cctbx.crystal.symmetry
    i   t   symbolt   groupt   Ps    :Rt   Rs    :Hs4   The space group '%s' is incompatible with unit cell s   parameters %s.s6   Space group is incompatible with unit cell parameters.N(   t   countt   Nonet   AssertionErrort
   isinstanceR   t   extt	   unit_cellt
   _unit_cellt   _space_group_infoR   t   space_group_infot   space_groupR   t!   conventional_centring_type_symbolt   is_conventional_hexagonal_basist   typet   lookup_symbolt   endswitht   reference_settingt"   is_conventional_rhombohedral_basist   primitive_settingt   is_compatible_unit_cellR   t   strt
   parameterst   average_unit_cell(   t   selfR   t   space_group_symbolR   R   t)   correct_rhombohedral_setting_if_necessaryt   assert_is_compatible_unit_cellt%   raise_sorry_if_incompatible_unit_cellt   force_compatible_unit_cellt   sgit   zt   ls(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt   __init__"   sN    $			$"c         C   s   | j  |  _  | j |  _ d  S(   N(   R   R   (   R)   t   other(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt   _copy_constructori   s    c         C   sI   | t  k r |  j } n  | t  k r0 |  j } n  t d | d | d | ƒ S(   NR   R   R-   (   R   R   R   R   (   R)   R   R   R-   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt   customized_copym   s      c         C   s   |  j  S(   N(   R   (   R)   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyR   u   s    c         C   s   |  j  S(   N(   R   (   R)   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyR   x   s    c         C   s#   |  j  } | d  k r d  S| j ƒ  S(   N(   R   R   R   (   R)   R/   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyR   {   s    	 t    c         C   s2   d } | | t  |  j ƒ  ƒ | t  |  j ƒ  ƒ f S(   Ns@   crystal.symmetry(
%s  unit_cell=%s,
%s  space_group_symbol="%s")(   R&   R   R   (   R)   t   indentt   fmt(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt
   as_py_code€   s    c         C   s®   | d  k r t j } n  |  j ƒ  d  k rA | | d Id  IJn  |  j ƒ  j d | d | d ƒ |  j ƒ  d  k rŠ | | d Id  IJn  |  j ƒ  j d | d | d ƒ d  S(   Ns
   Unit cell:t   ft   prefixs   Unit cell: s   Space group:s   Space group: (   R   t   syst   stdoutR   t   show_parametersR   t   show_summary(   R)   R:   R;   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyR?   ‰   s      g{®Gáz„?g      ð?c         C   s;   |  j  ƒ  j | j  ƒ  | | ƒ s% t S|  j ƒ  | j ƒ  k S(   N(   R   t   is_similar_tot   FalseR   (   R)   R3   t   relative_length_tolerancet   absolute_angle_tolerance(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt   is_similar_symmetry”   s     c         C   s   |  j  ƒ  j |  j ƒ  ƒ S(   N(   R   R%   R   (   R)   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyR%   š   s    c         C   s   t  |  j ƒ  d d ƒS(   NR*   s   P 1(   R   R   (   R)   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt   cell_equivalent_p1�   s    c         C   sR   t  | t ƒ r! t j | ƒ } n  t d |  j ƒ  j | ƒ d |  j ƒ  j | ƒ ƒ S(   NR   R   (   R   R&   R   t   change_of_basis_opR   R   t   change_basisR   (   R)   t   cb_op(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyRG       s
    c         C   s   |  j  ƒ  j ƒ  S(   N(   R   t   z2p_op(   R)   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt'   change_of_basis_op_to_primitive_setting§   s    c         C   s   |  j  |  j ƒ  ƒ S(   N(   RG   RJ   (   R)   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyR$   ª   s    c         C   s   |  j  ƒ  j ƒ  j ƒ  S(   N(   R   R   RH   (   R)   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt'   change_of_basis_op_to_reference_setting­   s    c         C   s   |  j  |  j ƒ  ƒ S(   N(   RG   RK   (   R)   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt   as_reference_setting°   s    c         C   s   t  d |  d | d | ƒ j ƒ  S(   Nt   input_symmetryt   angular_tolerancet   best_monoclinic_beta(   R   RH   (   R)   RN   RO   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt   change_of_basis_op_to_best_cell³   s    c         C   s   |  j  |  j d | ƒ ƒ S(   NRN   (   RG   RP   (   R)   RN   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt	   best_cell»   s    c         C   s•   |  j  ƒ  j ƒ  } | j ƒ  j ƒ  } |  j ƒ  j | j ƒ  | j ƒ  ƒ } | j ƒ  } t	 j
 t	 j t	 j | j ƒ  d ƒ ƒ ƒ j ƒ  } | j | ƒ | S(   Ni   (   R   RI   t   c_invt   rR   RG   t   numt   dent   minimum_reductionR   RF   t   rt_mxt   rot_mxt   r_invt   inverset   new_denominators(   R)   RI   RY   t   p_cellt   redt   p2n_op(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt"   change_of_basis_op_to_minimum_cell¿   s    $*c         C   s   |  j  |  j ƒ  ƒ S(   N(   RG   R_   (   R)   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt   minimum_cellÈ   s    c         C   se   |  j  ƒ  j ƒ  } | j ƒ  j ƒ  } |  j ƒ  j | j ƒ  | j ƒ  ƒ } | j ƒ  } | j	 | ƒ | S(   N(
   R   RI   RR   RS   R   RG   RT   RU   t!   change_of_basis_op_to_niggli_cellR[   (   R)   t   relative_epsilont   iteration_limitRI   RY   R\   R^   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyRa   Ë   s
    $c         C   s   |  j  |  j d | d | ƒ ƒ S(   NRb   Rc   (   RG   Ra   (   R)   Rb   Rc   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt   niggli_cellÔ   s    c         C   s   |  j  ƒ  j ƒ  j ƒ  S(   N(   R   R   t   change_of_hand_op(   R)   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt"   change_of_basis_op_to_inverse_handÛ   s    c         C   s   |  j  |  j ƒ  ƒ S(   N(   RG   Rf   (   R)   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt   inverse_handÞ   s    c         C   s+   t  d |  j ƒ  d |  j ƒ  j d | ƒ ƒ S(   NR   R   t   anomalous_flag(   R   R   R   t(   build_derived_reflection_intensity_group(   R)   Rh   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt   reflection_intensity_symmetryá   s    c         C   s%   t  d |  j ƒ  d |  j ƒ  j ƒ  ƒ S(   NR   R   (   R   R   R   t   build_derived_patterson_group(   R)   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt   patterson_symmetryè   s    c         C   s   |  j  ƒ  j ƒ  |  j  ƒ  k S(   N(   R   Rk   (   R)   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt   is_patterson_symmetryí   s    c         C   s¿   | d  k r1 t d |  j ƒ  d |  j ƒ  d | ƒ S| t k rL |  } | } n | } |  } | j ƒ  } | j ƒ  } | d  k r‹ | j ƒ  } n  | d  k r¦ | j ƒ  } n  t d | d | d | ƒ S(   NR   R   R-   (   R   R   R   R   RA   (   R)   t   other_symmetryt   forceR-   t   strongt   weakR   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt   join_symmetryñ   s(    	c         C   s4   |  j  ƒ  } | j |  j ƒ  j d | j | ƒ ƒ ƒ S(   Nt   translation_frac(   R   t   orthogonalizeR   t)   subtract_continuous_allowed_origin_shiftst   fractionalize(   R)   t   translation_cartt   uc(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyRu     s    c         C   s"   |  j  ƒ  j ƒ  j d |  j ƒ  ƒ S(   NR   (   R   t   direct_space_asut   define_metricR   (   R)   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyRy     s    i   c   	      C   s\   d d l  m } | j d |  j ƒ  d | d | d | d | d |  j ƒ  d	 | d
 | d | ƒ 	S(   Niÿÿÿÿ(   t   maptbxR   t   d_mint   resolution_factort   stept   symmetry_flagsR   t   mandatory_factorst	   max_primet   assert_shannon_sampling(   t   cctbxR{   t   crystal_griddingR   R   (	   R)   R|   R}   R~   R   R€   R�   R‚   R{   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt   gridding  s    	c         C   s@   d d  l  } t j d |  j ƒ  d |  j ƒ  j d | ƒ d | ƒ S(   NiÿÿÿÿR   t   asut   is_inside_epsilont   buffer_thickness(   t   cctbx.crystal.direct_space_asuRy   t   asu_mappingsR   t   as_float_asu(   R)   Rˆ   t   asu_is_inside_epsilonRƒ   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyRŠ   (  s    		c         C   sG   d d l  m } | j |  j ƒ  |  j ƒ  j | j |  j ƒ  | ƒ ƒ ƒ S(   Niÿÿÿÿ(   t   adptbx(   Rƒ   R�   t   u_star_as_u_cartR   R   t   average_u_start   u_cart_as_u_star(   R)   t   u_cartR�   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt   average_u_cart0  s    c         C   s   |  j  d | ƒ S(   NR‘   (   R’   (   R)   t   b_cart(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt   average_b_cart6  s    g      à?i    c      	   C   s   t  d |  d | d | d | ƒ S(   Nt   crystal_symmetryt   min_distance_sym_equivt   u_star_tolerancet   assert_min_distance_sym_equiv(   t   special_position_settings(   R)   R–   R—   R˜   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyR™   9  s
    c         C   s,   d d l  m } | j d |  d | d | ƒ S(   Niÿÿÿÿ(   t   millerR•   t   indicesRh   (   Rƒ   Rš   t   set(   R)   R›   Rh   Rš   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt
   miller_setC  s
    	c      	   C   s2   d d l  m } | j d |  d | d | d | ƒ S(   Niÿÿÿÿ(   Rš   R•   Rh   R|   t   d_max(   Rƒ   Rš   t	   build_set(   R)   Rh   R|   Rž   Rš   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt   build_miller_setJ  s    	c         C   s   d d  l  } | j j |  ƒ j S(   Niÿÿÿÿ(   t	   iotbx.cift   cift   crystal_symmetry_as_cif_blockt	   cif_block(   R)   t   iotbx(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt   as_cif_blockR  s    N(-   t   __name__t
   __module__t   __doc__R   RA   t   TrueR2   R4   R   R5   R   R   R   R9   R?   RD   R%   RE   RG   RJ   R$   RK   RL   RP   RQ   R_   R`   Ra   Rd   Rf   Rg   Rj   Rl   Rm   Rr   Ru   Ry   R…   RŠ   R’   R”   R™   R�   R    R¦   (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyR      sx   ?																									c   	      C   sÇ  |  | g | | } | j  d ƒ t | ƒ k r> t d ƒ ‚ n  t d d d d ƒ } |  d k	 rz | j d |  d t ƒ } n  | d k	 r¡ | j d | d t ƒ } n  | j ƒ  d k rx] | D]R } | d k	 rº | j ƒ  } | d k	 rt d | d | j ƒ  d t ƒ } Pqqº qº Wn  x5 | D]- } | d k	 r| j d | d t ƒ } qqW| j ƒ  d k rÃxc | D]X } d } | d k	 r‹| j ƒ  } n  | d k	 rdt d | j ƒ  d | d t ƒ } PqdqdWn  | S(   sB   Select/construct a crystal symmetry from a list of various optionss.   No unit cell and symmetry information suppliedR   R   Rn   Ro   R,   N(	   R   R   t   lenR   R   Rr   RA   R   R   (	   t   from_command_linet   from_parameter_filet   from_coordinate_filest   from_reflection_filest   tmpt   resultR•   R   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt   select_crystal_symmetryV  sL    						g      à?i    c         C   sC   t  d t j d |  d | d | d | d | d | ƒ d t j ƒ  ƒ S(	   NR   t
   sites_cartt   sites_cart_mint   sites_cart_maxt   buffer_layert   default_buffer_layert   min_unit_cell_lengthR   (   R   R   t   non_crystallographic_unit_cellR   R   (   R³   R´   Rµ   R¶   R·   R¸   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt   non_crystallographic_symmetry…  s    		R™   c        
   B   s  e  Z d  d e d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d d d „ Z
 d	 „  Z d d d d
 „ Z d d „ Z d d d d d „ Z d d d d d e d „ Z d d d d d d d d „ Z d d d d „ Z d d d e d d d d d d „	 Z RS(   g      à?i    c         C   s/   t  j |  | ƒ | |  _ | |  _ | |  _ d  S(   N(   R   R4   t   _min_distance_sym_equivt   _u_star_tolerancet   _assert_min_distance_sym_equiv(   R)   R•   R–   R—   R˜   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyR2   ˜  s    		c         C   s8   t  j |  | ƒ | j |  _ | j |  _ | j |  _ d  S(   N(   R   R4   R»   R¼   R½   (   R)   R3   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyR4   ¡  s    c         C   s   |  j  S(   N(   R»   (   R)   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyR–   §  s    c         C   s   |  j  S(   N(   R¼   (   R)   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyR—   ª  s    c         C   s   |  j  S(   N(   R½   (   R)   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyR˜   ­  s    c      	   C   s=   t  d t j |  | ƒ d |  j ƒ  d |  j ƒ  d |  j ƒ  ƒ S(   NR•   R–   R—   R˜   (   R™   R   RG   R–   R—   R˜   (   R)   RH   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyRG   °  s
    c         C   sv   | | g j  d  ƒ d k s! t ‚ | d  k	 rE |  j ƒ  j | ƒ } n  t j |  j ƒ  |  j ƒ  | |  j ƒ  |  j	 ƒ  ƒ S(   Ni   (
   R   R   R   R   Rv   R   t   site_symmetryR   R–   R˜   (   R)   t   sitet	   site_cart(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyR¾   ·  s    !			c         C   s   t  j |  j | ƒ ƒ S(   N(   R   t   sym_equiv_sitesR¾   (   R)   R¿   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyRÁ   Â  s    c         C   s›   | d  k | d  k k s t ‚ | d  k rE |  j ƒ  j d | ƒ } n  t j ƒ  } | j d |  j ƒ  d |  j ƒ  d | d | d |  j ƒ  d |  j	 ƒ  ƒ | S(   NR³   R   R   t   original_sites_fract$   unconditional_general_position_flagsR–   R˜   (
   R   R   R   Rv   R   t   site_symmetry_tablet   processR   R–   R˜   (   R)   t
   sites_fracR³   RÃ   R±   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyRÄ   Å  s    	c         C   s%   d d  l  j j } | d |  d | ƒ S(   NiÿÿÿÿR™   t
   scatterers(   t   cctbx.xray.structuret   xrayt	   structure(   R)   RÇ   t   _(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt   xray_structure×  s    c         C   s¶   t  j |  d | d | ƒ} | d  k	 s3 | d  k	 r² | d  k sQ | d  k sQ t ‚ | d  k rx |  j ƒ  j d | ƒ } n  | d  k r™ |  j d | ƒ } n  | j d | d | ƒ n  | S(   NRˆ   RŒ   R³   RÆ   t   original_sitesRÄ   (   R   RŠ   R   R   R   Rv   RÄ   t   process_sites_frac(   R)   Rˆ   RÆ   R³   RÄ   RŒ   RŠ   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyRŠ   Û  s    		
c   	      C   sv   | d  k	 s | d  k	 s t ‚ | d  k r3 | } n  |  j d | d | d | d | d | ƒ } t d | d | d | ƒ S(	   NRˆ   RÆ   R³   RÄ   RŒ   RŠ   t   distance_cutofft   minimal(   R   R   RŠ   t   neighbors_fast_pair_generator(	   R)   RÏ   RÆ   R³   RÄ   t   asu_mappings_buffer_thicknessRŒ   RÐ   RŠ   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt   pair_generatorï  s    			i   c	         C   s­   | d  k	 s | d  k	 s t ‚ | d  k r3 | } n  |  j d | d | d | d | d | ƒ }	 t d |	 ƒ }
 | d  k r� |	 j ƒ  j ƒ  } n  |
 j d | d | d	 | ƒ |
 S(
   NRˆ   RÆ   R³   RÄ   RŒ   RŠ   RÏ   t   min_cubicle_edget   epsilon(   R   R   RŠ   t   pair_asu_tableR†   R‡   t   add_all_pairs(   R)   RÏ   RÆ   R³   RÄ   RÒ   RŒ   RÔ   t   distance_cutoff_epsilonRŠ   R±   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyRÖ     s"    					iÿÿÿÿc         C   s[   t  d |  j ƒ  d |  j ƒ  j d | ƒ d | d | d | ƒ } |  j | _ |  j | _ | S(   NR   R†   R‡   RÏ   RÒ   t   cubicle_epsilon(   t   incremental_pairsR   Ry   R‹   R»   R–   R½   R˜   (   R)   RÏ   RŒ   RÒ   RÙ   R±   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyRÚ      s    		i   c
         C   sÖ   | d  k r | } n  | d  k r* | } n  | d  k r? | } n  | d  k	 sQ t ‚ | d  k	 sc t ‚ t d |  j ƒ  d |  j ƒ  j d | ƒ d | d | d | d | d | d	 | d
 |	 ƒ 	}
 |  j |
 _ |  j |
 _	 |
 S(   NR   R†   R‡   t   min_cross_distancet   min_self_distancet   general_positions_onlyt   estimated_reduction_factorRÒ   RÔ   RÙ   (
   R   R   t   site_cluster_analysisR   Ry   R‹   R»   R–   R½   R˜   (   R)   t   min_distanceRÛ   RÜ   RÝ   RÞ   RŒ   RÒ   RÔ   RÙ   R±   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyRß   0  s,    
 	 	 			N(   R§   R¨   Rª   R2   R4   R–   R—   R˜   RG   R   R¾   RÁ   RÄ   RÌ   RŠ   RA   RÓ   RÖ   RÚ   Rß   (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyR™   –  sV   						i   s&   Excessive special position correction:c   
      C   s1  | d  k | d  k k s t ‚ |  j ƒ  } | d  k rH | j | ƒ } n  | | } | j | | ƒ }	 |	 | k r| d t | ƒ 7} | d t |  j ƒ  ƒ 7} | d t | ƒ 7} | d  k	 rÏ | d | 7} n  | d t | ƒ 7} | d t | ƒ 7} | d |	 7} t | ƒ ‚ n  | d  k r$| S| j | ƒ S(   Ns   
  unit_cell: %ss   
  space_group_info: %ss   
  special_op: %ss   
  site_label: %ss   
  site_frac: %ss   
  site_special_frac: %ss   
  distance_moved: %g(   R   R   R   Rv   t   distanceR&   R   Rt   (
   R•   t
   special_opt	   site_fracRÀ   t
   site_labelt	   tolerancet   error_messageR   t   site_special_fract   distance_moved(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt   correct_special_positionN  s(    
	RË   c           B   sS   e  Z d  „  Z d d d „ Z d d d e e d d „ Z d d d e d d „ Z RS(   c   	      C   sš   g  } x� t  |  j ƒ  ƒ D]y \ } } | g } xT | j ƒ  D]F \ } } | g } x! | D] } | j t | ƒ ƒ qW W| j | ƒ q; W| j | ƒ q W| S(   N(   t	   enumeratet   tablet   itemst   appendt   list(	   R)   R±   t   i_seqt
   j_seq_dictt
   i_seq_listt   j_seqt   j_sym_groupt
   j_seq_listt   j_syms(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt   as_nested_listsm  s    		c         C   sm  | d  k r t j } n  | d  k r® xBt |  j ƒ  ƒ D]p \ } } | d I| IJxQ | j ƒ  D]C \ } } | d I| IJx$ | D] } | d It | ƒ IJqƒ Wq` Wq7 Wn» t | ƒ |  j ƒ  j ƒ  k sÒ t	 ‚ x” t |  j ƒ  ƒ D]€ \ } } | d | | | f IJxY | j ƒ  D]K \ } } | d | | | f IJx$ | D] } | d It | ƒ IJqAWqWqå Wd  S(   Ns   i_seq:s     j_seq:s       j_syms:s   %s(%d)s     %s(%d)(
   R   R<   R=   Rê   Rë   Rì   Rî   R«   t   sizeR   (   R)   R:   t   site_labelsRï   Rð   Rò   Ró   Rõ   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt   showy  s      %$c         C   s1   t  d |  d | d | d | d | d | d | ƒ S(   NRÖ   Rø   RÆ   R³   t   show_cartesiant   keep_pair_asu_tablet   out(   t   show_distances(   R)   Rø   RÆ   R³   Rú   Rû   Rü   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyRý   ‹  s    c         C   s+   t  d |  d | d | d | d | d | ƒ S(   NRÖ   Rø   RÆ   R³   Rû   Rü   (   t   show_angles(   R)   Rø   RÆ   R³   Rû   Rü   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyRþ   ›  s    N(   R§   R¨   Rö   R   Rù   RA   Rý   Rþ   (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyRË   k  s   	t   calculate_distancesc           B   s/   e  Z e d d d d  „ Z d „  Z d „  Z RS(   c         C   s_   t  j |  t ƒ  ƒ t j ƒ  |  _ |  j d  k	 rC t j ƒ  |  _ n	 d  |  _ t j	 ƒ  |  _
 d  S(   N(   t   libtbxt   adopt_init_argst   localsR   t   doublet	   distancest   covariance_matrixR   t	   variancest   size_tt   pair_counts(   R)   RÖ   RÆ   t   skip_j_seq_less_than_i_seqR  t   cell_covariance_matrixt   parameter_map(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyR2   «  s    	c         C   s
   |  j  ƒ  S(   N(   t   next(   R)   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt   __iter__º  s    c         c   s}  d t  f d „  ƒ  Y} |  j j ƒ  } | j ƒ  } |  j d  k	 rs |  j d  k	 sU t ‚ t j	 |  j | |  j ƒ } n  xt
 |  j j ƒ  ƒ D]ì\ } } | j | d ƒ j ƒ  } |  j | } d }	 t j ƒ  }
 g  } xÊ | j ƒ  D]¼ \ } } |  j r| | k  rqß n  |  j | } x… t
 | ƒ D]w \ } } |	 | j ƒ  7}	 | d } | j | j | | ƒ ƒ } | j | | | ƒ } |
 j | ƒ | j | | f ƒ q Wqß Wt j d |
 ƒ } x±t j | | ƒ D]�\ } } |  j | } | | } | | } xmt
 | ƒ D]_\ } } | j | j | | ƒ ƒ } | | } t j | j | ƒ | j | ƒ f ƒ } | j } |  j j | ƒ |  j d  k	 r7t j t j | | f ƒ | |  j ƒ } |  j d  k	 r| j  | | | ƒ } | d k sî| | k r$| j! ƒ  r$| j  | |  j | | ƒ } q$n | j  | | | ƒ } |  j" j | ƒ n d  } | | | | |	 | | d | ƒVqþWqÄW|  j# j |	 ƒ q‰ Wd  S(   NRá   c           B   s   e  Z d d d d  „ Z RS(   c         S   s   t  j |  t ƒ  ƒ d  S(   N(   R   R  R  (   R)   Rá   Rï   Rò   t
   pair_countt   rt_mx_jit   i_j_symt   variance(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyR2   À  s    N(   R§   R¨   R   R2   (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyRá   ¿  s   i    t   datag¼‰Ø—²Ò¬<R  ($   t   objectRÖ   RŠ   R   R  R   R  R   R   t   orthogonalize_covariance_matrixRê   Rë   t	   get_rt_mxRZ   RÆ   R   R  Rì   R	  R÷   t   multiplyRá   Rí   t   sort_permutationt   selectR   Rt   t   distance_modelR  t#   extract_covariance_matrix_for_sitesR  R
  R  t
   is_unit_mxR  R  (   R)   Rá   RŠ   R   t   cov_cartRï   t   asu_dictt   rt_mx_i_invt   site_frac_iR  t   distst   j_seq_i_groupRò   t   j_sym_groupst   site_frac_jt   i_groupRó   t   j_symR  t   distt   permutationR  t   site_frac_jit   dt   covt   var(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyR  ½  sf    " 



	!%%N(   R§   R¨   Rª   R   R2   R  R  (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyRÿ   ©  s   		Rý   c           B   s5   e  Z d  d d g Z d d d e e e d d „ Z RS(   RÖ   t   distances_infot   have_symc	         C   s–  | | g j  d  ƒ d k s! t ‚ | d  k r9 t j } n  | rK | |  _ n	 d  |  _ | j ƒ  }	 |	 j ƒ  }
 | d  k r� |
 j d | ƒ } n  | d  k rÊ t	 d | j
 ƒ  d ƒ } d | } | d 7} n: d } x# | D] } t | t	 | ƒ ƒ } q× Wd | d } t | | d | ƒ|  _ t |  _ t ƒ  } xa|  j D]V} | j | j } } | j } d d	 l m } | | k } | rK| j | ƒ | d  k r¦| | d } n | | | } | d
 | j 7} | | } | rþg  |
 j | ƒ D] } d | ^ qå} n g  | D] } d | ^ q} | d | d | Id d j | ƒ d IJn  | d  k rv| d I| | d d In | d I| | | d I| d | j I| j d k r»d } n d } | | | } | rþg  |
 j | ƒ D] } d | ^ qå} n g  | D] } d | ^ q} | d d j | ƒ d 7} | j ƒ  sb| d t | ƒ 7} t |  _ n  | | IJ| r8| j d k r8| d IJq8q8Wd  S(   Ni   R³   s   %ds   site_%%0%ddi   s   %%-%dsR	  iÿÿÿÿ(   R   s    pair count: %3ds    %7.2fs    %7.4fi   s   <<t   ,s   >>t    t   :s   %8.4fi    s   sym. equiv.s              s    (t   )s    sym=s     no neighbors(   R   R   R   R<   R=   RÖ   RŠ   R   Rv   R«   R÷   t   maxRÿ   R,  RA   R-  Rœ   Rï   Rò   R  t   scitbx.array_familyR   t   addR  Rt   t   joinRá   R  R  R&   Rª   (   R)   RÖ   Rø   RÆ   R³   Rú   Rû   R	  Rü   RŠ   R   t	   label_lent	   label_fmtt   labelt   i_seqs_donet   diRï   Rò   R  R   t   first_time_i_seqt   sR  t   xt   formatted_siteR(  (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyR2     sx    	! 	
				
&	&
N(   R§   R¨   t	   __slots__R   RA   R2   (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyRý     s   t   calculate_anglesc           B   s2   e  Z e d d d d d  „ Z d „  Z d „  Z RS(   c         C   sn   t  j |  t ƒ  ƒ t j ƒ  |  _ |  j d  k	 rC t j ƒ  |  _ n	 d  |  _ t j ƒ  |  _	 t j
 ƒ  |  _ d  S(   N(   R   R  R  R   R  R  R  R   R  t   anglesR  R  (   R)   RÖ   RÆ   R	  R  R
  R  t   conformer_indices(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyR2   U  s    	c         C   s
   |  j  ƒ  S(   N(   R  (   R)   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyR  f  s    c         c   s
  d t  f d „  ƒ  Y} |  j j ƒ  } | j ƒ  } |  j d  k	 rs |  j d  k	 sU t ‚ t j	 |  j | |  j ƒ } n  x�t
 |  j j ƒ  ƒ D]y\ } } | j | d ƒ j ƒ  } |  j | } t j ƒ  }	 x9| j ƒ  D]+\ }
 } |  j |
 } x| D]} xþt
 | ƒ D]ð\ } } | j | j |
 | ƒ ƒ } | | } x¼| j ƒ  D]®\ } } |  j rk|
 | k  rkqDn  | |
 k r�| j ƒ  d k r�qDn  | |
 k r¡qDn  |  j | } xA| D]9} x0t
 | ƒ D]"\ } } |
 | k rò| | k ròqÈn  | | k r| d k rqÈn  |  j d  k	 r?|  j |
 |  j | k r?qÈn  | j | j | | ƒ ƒ } | | } t j | j | ƒ | j | ƒ | j | ƒ f ƒ } | j } |  j j | ƒ |  j d  k	 rÁt j t j |
 | | f ƒ | |  j ƒ } |  j d  k	 rŠ| j | | | t  j! ƒ  | f ƒ } | d k sZ| |
 k rA| j" ƒ  sZ| | k r®| j" ƒ  r®| j | |  j | | t  j! ƒ  | f ƒ } q®n$ | j | | | t  j! ƒ  | f ƒ } |  j# j | ƒ n d  } | | |
 | | f | | d | ƒVqÈWqµWqDWqWqó WqÓ Wq‰ Wd  S(   Nt   anglec           B   s   e  Z d d d d  „ Z RS(   c         S   s   t  j |  t ƒ  ƒ d  S(   N(   R   R  R  (   R)   RC  t   i_seqsR  t   rt_mx_kiR  (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyR2   l  s    N(   R§   R¨   R   R2   (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyRC  k  s   i    i   gVçž¯â<R  ($   R  RÖ   RŠ   R   R  R   R  R   R   R  Rê   Rë   R  RZ   RÆ   R   R  Rì   R  R	  R÷   RB  R   RC  Rt   t   angle_modelRA  Rí   R  R  R
  R  R   RW   R  R  (   R)   RC  RŠ   R   R  Rï   R  R  R  RA  Rò   R"  R#  Ró   R  R%  R  R(  t   k_seqt   k_sym_groupst   site_frac_kt   k_sym_groupt   i_k_symt   k_symRE  t   site_frac_kit   at   angle_R*  R+  (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyR  i  s~    	"
     
 
	N(   R§   R¨   Rª   R   R2   R  R  (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyR@  S  s   
	Rþ   c           B   s#   e  Z d d d e e d d  „ Z RS(   c         C   s‘  | | g j  d  ƒ d k s! t ‚ | d  k r9 t j } n  | rK | |  _ n	 d  |  _ g  } | d  k r— t d | j ƒ  d ƒ }	 d |	 }
 |	 d 7}	 nD d }	 x# | D] } t |	 t | ƒ ƒ }	 q¤ Wd |	 d }
 |
 d 9}
 t	 | | ƒ } xO| D]G} | j
 \ } } } | j } | j } | d  k r<|
 | d d } ná | | } | | } | | } | j ƒ  s²| | k rˆ| j | ƒ d } n | j | ƒ t | ƒ } | d	 | 7} n  | j ƒ  s
| | k rà| j | ƒ d } n | j | ƒ t | ƒ } | d	 | 7} n  |
 | | | f } | d
 | j 7} | | IJqñ W| j |  _ | j |  _ x6 t | ƒ D]( \ } } | d	 | d I| | IJqaWd  S(   Ni   s   %ds   site_%%0%ddi   s   %%-%dsi   i   R0  s   *%ss    %6.2f(   R   R   R   R<   R=   RÖ   R«   R÷   R2  R@  RD  R  RE  R  t   indexRí   RC  RA  R  Rá   Rê   (   R)   RÖ   Rø   RÆ   R³   Rú   Rû   Rü   t   rt_mxsR6  R7  R8  RA  RN  Rò   Rï   RG  R  RE  R<  t   i_labelt   j_labelt   k_labelt   jt   kt   iRW   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyR2   µ  s\    	! 	

		


N(   R§   R¨   R   RA   R2   (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyRþ   ³  s   t   sym_pairc           B   s)   e  Z d  d d g Z d „  Z d „  Z RS(   Rï   Rò   R  c         C   s   | |  _  | |  _ | |  _ d  S(   N(   Rï   Rò   R  (   R)   Rï   Rò   R  (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyR2   ö  s    		c         C   s   |  j  |  j f S(   N(   Rï   Rò   (   R)   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyRD  û  s    (   R§   R¨   R?  R2   RD  (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyRX  ò  s   	c           B   s¤   e  Z d  „  Z d „  Z d d „ Z d d d d d d „ Z d d d e e e d d „ Z d „  Z	 d „  Z
 d „  Z d „  Z d	 „  Z d
 „  Z d „  Z d „  Z RS(   c      
   c   si   xb t  |  ƒ D]T \ } } xE | j ƒ  D]7 \ } } x( | D]  } t d | d | d | ƒ Vq9 Wq& Wq Wd  S(   NRï   Rò   R  (   Rê   Rì   RX  (   R)   Rï   t   pair_sym_dictRò   t   sym_opsR  (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt   iterator   s    c      
   C   sT  t  d |  j ƒ  ƒ } x8t |  ƒ D]*\ } } x| j ƒ  D]\ } } g  } x– | D]Ž } | | k rv | | }	 }
 n | | | j ƒ  }	 }
 } xO | D] } | j d | ƒ r— Pq— q— W| j d |	 d |
 d | ƒ } | j | ƒ qT W| |	 } t ƒ  | |
 <| |
 } x> t	 g  | D] } | j
 ƒ  d ^ qƒ D] } | j | ƒ q1Wq; Wq" W| S(   NR÷   R  Rï   Rò   i    (   t   pair_sym_tableR÷   Rê   Rì   RZ   t   is_equivalentt%   symmetry_equivalent_pair_interactionsRí   t   pair_sym_opst   sortedt   get(   R)   RÄ   R±   Rï   RY  Rò   RZ  t	   sepi_objsR  RW  RU  t   sepi_objt   rit   rij(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt   tidy  s(    	

0c      
   C   s°  t  d |  j ƒ  ƒ } x”t |  ƒ D]†\ } } | | } xm| j ƒ  D]_\ } } | j | ƒ } | d  k r† t ƒ  | | <| | } n  | | }	 |	 j | ƒ }
 |
 d  k rÅ t ƒ  |	 | <|	 | }
 n  xÜ | D]Ô } | d  k r| j | ƒ | | k r |
 j | j ƒ  ƒ q qÌ | j	 } x6 | d | d | d | ƒ j ƒ  D] } | j | ƒ q;W| | k rÌ x? | d | d | d | j ƒ  ƒ j ƒ  D] } |
 j | ƒ q†WqÌ qÌ WqE Wq" W| S(   NR÷   Rï   Rò   R  (
   R\  R÷   Rê   Rì   Ra  R   R_  Rí   RZ   R^  (   R)   RÄ   R±   Rï   RY  Rd  Rò   RZ  Re  t   rjt   rjiR  t   sepiR<  (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt   full_connectivity  s>    

			 c            s"  ˆ d  k	 r- t ˆ ƒ |  j ƒ  k s- t ‚ n  | d  k	 rl t | ƒ |  j ƒ  k sW t ‚ | d  k	 sl t ‚ n  | d  k	 rŸ | j ƒ  j ƒ  |  j ƒ  k sŸ t ‚ n  ˆ  d  k r· t j ‰  n  ‡  ‡ ‡ f d †  } ‡  ‡ ‡ f d †  } x:t |  ƒ D],\ ‰ } | ƒ  x| j ƒ  D]\ ‰ }	 | ƒ  | d  k ró| d  k r]x´ |	 D] }
 ˆ  d I|
 IJq@Wqt |	 ƒ d k rt	 g  |	 D] } t t
 | ƒ ƒ ^ qyƒ } d | } xI |	 D]> }
 | j | ˆ |
 | ˆ ƒ } ˆ  | t
 |
 ƒ | f IJq«Wqqd } g  } xs |	 D]k }
 | j d ˆ d ˆ d |
 ƒ j ƒ  } | j | ƒ t	 | t	 g  | D] } t t
 | ƒ ƒ ^ qMƒ ƒ } qW| d k rd	 | } xˆ | D]} } d
 } d
 } xh | D]` } | d  k	 râd | j | ˆ | | ˆ ƒ } n  ˆ  | t
 | ƒ | | f j ƒ  IJd } q«Wq’WqqWqî Wd  S(   Nc              s;   ˆ d  k r ˆ  d Iˆ IJn ˆ  d ˆ ˆ ˆ f IJd  S(   Ns   i_seq:s   %s(%d)(   R   (    (   R:   Rï   Rø   (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt   show_iN  s    c              s;   ˆ d  k r ˆ  d Iˆ IJn ˆ  d ˆ ˆ ˆ f IJd  S(   Ns     j_seq:s     %s(%d)(   R   (    (   R:   Rò   Rø   (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt   show_jS  s    s      i    s       %%-%ds  %%8.4fRï   Rò   R  s       %%-%ds%%s%%sR6   s     %8.4fs     sym. equiv.(   R   R«   R÷   R   R›   R<   R=   Rê   Rì   R2  R&   Rá   R^  Ra  Rí   t   rstrip(   R)   R:   Rø   RÄ   RÆ   R   Rk  Rl  RY  RZ  R  RË   t   max_lenR8   R)  t   sepisRi  t   eR<  (    (   R:   Rï   Rò   Rø   sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyRù   A  sX    !' +
$	8
	#c
            sÅ  ˆ | g j  d  ƒ d k s! t ‚ |	 d  k r9 t j }	 n  ˆ d  k rZ ˆ j d | ƒ ‰ n  | d  k r— t d ˆ j ƒ  d ƒ }
 d |
 } |
 d 7}
 n< t d t g  | D] } t | ƒ ^ q§ ƒ ƒ }
 d |
 d } | râ d  } n” g  t	 |  j ƒ  ƒ D] } t
 ƒ  ^ qõ } xi t |  ƒ D][ \ ‰ } xL | j ƒ  D]> \ } } | ˆ k r0ˆ | k  sZt ‚ | | j ˆ ƒ q0q0WqWt j ƒ  } x<t |  ƒ D].\ ‰ } ˆ ˆ ‰ g  ‰  ‡  ‡ ‡ ‡ ‡ ‡ f d †  } x8 | j ƒ  D]* \ } } x | D] } | | | ƒ qéWqÖW| d  k	 rTxA | ˆ D]2 } x) |  | ˆ D] } | | | j ƒ  ƒ q0WqWn  ˆ  j ƒ  | rst ˆ  ƒ } n1 t g  ˆ  D] \ } } } } t | ƒ ^ q}ƒ } | d  k rÁ| ˆ d } n | | ˆ } | d | 7} | rg  ˆ j ˆ ƒ D] } d	 | ^ qó} n g  ˆ D] } d
 | ^ q} |	 d |
 d | Id d j | ƒ d IJx>ˆ  D]6\ } } } } d } x| D]} | d  k r­|	 d I| | d d In |	 d I| | | d I|	 d | I| } d } | ˆ | } | r g  ˆ j | ƒ D] } d	 | ^ q} n g  | D] } d
 | ^ q'} | d d j | ƒ d 7} | j ƒ  s{| d t | ƒ 7} n  |	 | IJ| r|Pq|q|Wq]W| d k r°|	 d IJn  | j | ƒ q�W| S(   Ni   R³   s   %ds   site_%%0%ddi   s   %%-%dsc            s[   | ˆ |  } ˆ j  d ˆ d |  d | ƒ j ƒ  } ˆ  j ˆ j ˆ | ƒ |  | | g ƒ d  S(   NRï   Rò   R  (   R^  Ra  Rí   Rá   (   Rò   R  R(  Ri  (   t   distance_infoRï   R  RÄ   RÆ   R   (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt   distance_info_append�  s    	s    pair count: %3ds    %7.2fs    %7.4fi   s   <<R.  s   >>s              R/  R0  s   %8.4fs   sym. equiv.s    (R1  s    sym=i    s     no neighbors(   R   R   R   R<   R=   Rv   R«   R÷   R2  t   xrangeRœ   Rê   Rì   R4  R   R  RZ   t   sortt   sumRt   R5  R  R&   Rí   (   R)   R   RÄ   Rø   RÆ   R³   Rú   R	  t   skip_sym_equivRü   R6  R7  RË   t   back_interactionsRY  Rò   RZ  R  Rr  R  t   rt_mx_ji_invR  Ri  R<  R=  R>  Rá   t	   sym_equivt   rt_mx_ji_equivt   site_frac_ji_equiv(    (   Rq  Rï   R  RÄ   RÆ   R   sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyRý   {  sŠ    
! 
.	(
	
1&&
c         C   sn   d } xa t  |  ƒ D]S \ } } xD | j ƒ  D]6 \ } } x' | D] } | j ƒ  s? | d 7} q? q? Wq, Wq W| S(   Ni    i   (   Rê   Rì   R  (   R)   R±   Rï   RY  Rò   RZ  t   sym_op(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt"   number_of_pairs_involving_symmetryÙ  s    c         C   sx   g  } xk t  |  ƒ D]] \ } } xN | j ƒ  D]@ \ } } x1 | D]) } | j ƒ  r? | j | | f ƒ Pq? q? Wq, Wq W| S(   N(   Rê   Rì   R  Rí   (   R)   R±   Rï   RY  Rò   RZ  R|  (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt   simple_edge_listâ  s    c         C   sz   g  } xm t  |  ƒ D]_ \ } } xP | j ƒ  D]B \ } } x3 | D]+ } | j ƒ  s? | j | | | f ƒ q? q? Wq, Wq W| S(   N(   Rê   Rì   R  Rí   (   R)   R±   Rï   RY  Rò   RZ  R|  (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt   symmetry_edge_listì  s    %c         C   s™   g  } g  } x€ t  |  ƒ D]r \ } } xc | j ƒ  D]U \ } } xF | D]> } | j ƒ  rm | j | | f ƒ qE | j | | | f ƒ qE Wq2 Wq W| | f S(   N(   Rê   Rì   R  Rí   (   R)   t   simplet   symRï   RY  Rò   RZ  R|  (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt   both_edge_listõ  s    "c         C   s–   t  j |  j ƒ  ƒ } xz t |  ƒ D]l \ } } x] | j ƒ  D]O \ } } x@ | D]8 } | j ƒ  rN | | j | ƒ | | j | ƒ PqN qN Wq; Wq" W| S(   N(   R	   t   stl_set_unsignedR÷   Rê   Rì   R  t   insert(   R)   R±   Rï   RY  Rò   RZ  R|  (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt   full_simple_connectivity  s    c         C   s?   |  | j  ƒ  d k r t Sx |  D] } | | k r! t Sq! Wt S(   Ni    (   R÷   Rª   RA   (   R)   Rï   RY  (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt	   is_paired  s      c         C   ss   t  ƒ  } t j ƒ  j ƒ  } xQ t |  ƒ D]C \ } } t ƒ  } x | j ƒ  D] } | | | <qJ W| j | ƒ q( W| S(   N(   R\  R   R   t   all_opsRê   RY  t   keysRí   (   R)   R±   RZ  Rï   t   self_pair_sym_dictR)  Rò   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt   discard_symmetry  s    		c         C   s•   |  j  ƒ  } | j  ƒ  | k s$ t ‚ xj t |  | ƒ D]Y \ } } xJ | j ƒ  D]< \ } } | | k  sk t ‚ | j | ƒ | | j | ƒ qM Wq4 Wd  S(   N(   R÷   R   t   zipRì   t
   setdefaultt   extend(   R)   R3   t	   self_sizeR‰  t   other_pair_sym_dictRò   t   other_sym_ops(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt   add_pair_sym_table_in_place  s    N(   R§   R¨   R[  Rf  R   Rj  Rù   RA   Rý   R}  R~  R  R‚  R…  R†  RŠ  R‘  (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyRË   þ  s.   		"9U			
						
t   _clustering_mix_inc           B   s   e  Z d  „  Z d „  Z RS(   c         C   s   |  j  j ƒ  j d |  j ƒ S(   NRÆ   (   R™   R   Rt   RÆ   (   R)   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyR³   '  s    c         C   sÚ   t  j ƒ  } x$ |  j D] } | j t | ƒ ƒ q Wt  j | d t ƒ} t  j d |  j d | ƒ } g  } xa t | ƒ D]S \ } } t | ƒ d k r˜ Pn  t  j | ƒ } | j | j t  j d | ƒ ƒ ƒ qv W| |  _ |  S(   Nt   reverset   sequenceR'  i    R  (	   R   R  t   index_groupsRí   R«   R  Rª   R  Rê   (   R)   t   cluster_sizest   igR'  t   sorted_index_groupsR•  RW  (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt   tidy_index_groups_in_place+  s    			 &	(   R§   R¨   R³   R™  (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyR’  %  s   	c         C   sÊ   t  j ƒ  } x! | D] } | j t | ƒ ƒ q Wt  j | d t ƒ} t  j d | d | ƒ } t  j ƒ  } xZ t | ƒ D]L \ } } t  j | ƒ } | j | j t  j d |  j | ƒ d t ƒ ƒ ƒ qv W| S(   NR“  R”  R'  R  (	   R   R  Rí   R«   R  Rª   R  Rê   R�  (   t   scoresR•  R–  R—  R'  R˜  t
   prioritiesRW  (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt!   _priorities_based_on_cluster_size;  s    		)t   incremental_clusteringc           B   s   e  Z d e e d  d „ Z RS(   i    c   )      C   s¨  | |  _  | |  _ | j ƒ  } | j d | ƒ }	 | j d |	 ƒ }
 | sƒ x« |
 j ƒ  D]' } |
 j | ƒ j ƒ  |	 | |	 | <qU Wns t j	 |	 j
 ƒ  |
 j ƒ  ƒ } |
 j | ƒ }
 |
 j ƒ  d k sÉ t ‚ |	 j | ƒ }	 | d  k	 rö | j | ƒ } n  | rY| j ƒ  j ƒ  j d |	 ƒ } |
 j | ƒ }
 |	 j | ƒ }	 | d  k	 rY| j | ƒ } qYn  |	 j
 ƒ  } t j t | ƒ ƒ } | } g  t | ƒ D] } | g ^ q�} | j ƒ  d ƒ g | } | j } xŠt | ƒ D]|\ } } | d k ríPn  | j d | d |	 d |
 ƒ } t d | ƒ } | j d | ƒ | d  k rE| j ƒ  } n  | | k rlt j d	 | d
 t ƒ } n t d | d | ƒ } xÉ| D]Á} | | } | d k rÖ| t | ƒ d k rÖt | | ƒ | k  rÖqˆn  | j | d ƒ } | |	 | } | j  ƒ  | } x@| j! ƒ  D]2\ } } | | } | | k r;qn  | d k ry| t | ƒ d k ryt | | ƒ | k  ryqn  | d } d  }  xb | D]Z }! |! d }" | j | |" ƒ }# |# |	 | }$ | | |$ ƒ }% | |% k r�|% } |# }  q�q�W|  d  k	 s t ‚ |  }# t | | ƒ t | | ƒ k r¯| | j" | j# ƒ  j" |# j" | | j# ƒ  ƒ ƒ ƒ }& xD | | D]8 }' | | j$ |' ƒ | | |' <|& j" | |' ƒ | |' <qfWg  | | <nŒ | | j" |# j# ƒ  j" | j" | | j# ƒ  ƒ ƒ ƒ }& xD | | D]8 }' | | j$ |' ƒ | | |' <|& j" | |' ƒ | |' <qïWg  | | <| } | d 8} qWqˆWqÑW| d k sct ‚ x, t |	 ƒ D] \ } }( | | |( |	 | <qpW|	 |  _% | |  _& d  S(   NR³   RÆ   i    i   Rˆ   RÄ   RŠ   RÏ   R  R“  Rš  R•  g�íµ ÷Æ°>gzo ð?('   R™   t   distance_cutoffsR   Rv   RÄ   t   special_position_indicesRa  Râ   R   t   boolR÷   R  t   n_special_positionsR   R   Ry   R‹   t   is_inside_fracR  Rs  R   Rá   Rê   RŠ   RÖ   R×   R  R  Rª   Rœ  R«   R  Rë   Rì   R  RZ   Rí   RÆ   R•  ()   R)   R™   R³   Rž  Rš  t   discard_special_positionst   discard_not_strictly_inside_asut   initial_required_cluster_sizeR   RÆ   RÄ   Rï   t	   selectiont   n_sitest   assignmentst
   n_clustersR•  t   symmetry_opst   get_distancet   i_distance_cutoffRÏ   RŠ   t   pair_asu_tabR›  t	   i_clustert   rt_mx_ipt   site_ipRð   Rò   Ró   t	   j_clustert   smallest_distancet   best_rt_mx_jpRõ   R%  t   rt_mx_jpt   site_jpRá   t   rt_mx_ct   c_seqRã   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyR2   L  sÎ    						"	 			

 






	N(   R§   R¨   R   RA   R2   (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyR�  J  s   t   distance_based_clusteringc           B   s   e  Z e d  „ Z RS(   c   "      C   sU  | |  _  | |  _ | j ƒ  } | j d | ƒ } | j d | ƒ } | sƒ x� | j ƒ  D]' } | j | ƒ j ƒ  | | | | <qU WnU t j	 | j
 ƒ  | j ƒ  ƒ }	 | j |	 ƒ } | j ƒ  d k sÉ t ‚ | j |	 ƒ } | j
 ƒ  }
 t j t |
 ƒ ƒ } |
 } g  t |
 ƒ D] } | g ^ q} | j ƒ  d ƒ g |
 } | j d | d | d | ƒ } t d | ƒ } | j d | ƒ | j ƒ  } g  } t j ƒ  } | j } x€ | j ƒ  D]r } | | j } | | j } | j | } | | | ƒ } | | d k st | ƒ ‚ | j | ƒ | j | ƒ q«Wt j d
 | ƒ } xÈ| D]À} | d k rPPn  | | } | j } | j } | | } | | } | | k r’q:n  t | | ƒ t | | ƒ k r/| | j | j j | | j ƒ  ƒ ƒ } xD | | D]8 }  | | j |  ƒ | | |  <| j | |  ƒ | |  <qæWg  | | <n€ | | j | j j ƒ  j | | j ƒ  ƒ ƒ } xD | | D]8 }  | | j |  ƒ | | |  <| j | |  ƒ | |  <qiWg  | | <| d 8} t  | | | | | | | | | ƒ | | ƒ d	 k  s:t ‚ q:W| d k st ‚ x, t! | ƒ D] \ } }! | | |! | | <qW| |  _" | |  _# d  S(   NR³   RÆ   i    Rˆ   RÄ   RŠ   RÏ   i   g�íµ ÷Æ°>R  gzo ð?($   R™   RÏ   R   Rv   RÄ   RŸ  Ra  Râ   R   R   R÷   R  R¡  R   R  Rs  R   RŠ   RÖ   R×   t   extract_pair_sym_tableR  Rá   R[  Rï   Rò   R  Rí   R  R«   R  RZ   t   absRê   RÆ   R•  ("   R)   R™   R³   RÏ   R£  R   RÆ   RÄ   Rï   R¦  R§  R¨  R©  R•  Rª  RŠ   R­  t   pair_sym_tabt	   sym_pairsR  R«  t   pairt   site_it   site_jt   site_jiRá   R›  t   i_pairRò   R®  R±  R¶  R·  Rã   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyR2   À  sš    					"			 
		

 
	




0	(   R§   R¨   RA   R2   (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyR¸  ¾  s   c         C   s@  d d l  m } d d l m } | j |  j ƒ  ƒ } | j |  j ƒ  ƒ } | | } | j g  | D] } | | | ƒ ^ qa ƒ }	 |	 | }
 | | d } | |
 d } |  | d | } t j |	 ƒ } t j	 | j
 ƒ  d ƒ } g  t | j ƒ  ƒ D] } t j	 ƒ  ^ qò } x‡ t | ƒ D]y \ } } g  t | |	 ƒ D]* \ } } t d t t | ƒ | ƒ ƒ ^ q3} | | ƒ } | | c d 7<| | j | ƒ qWt j d | d	 t ƒ } | j | ƒ } |  j ƒ  | } d } x( | D]  } | | 7} | | k rØPqØqØW~ ~ t j	 ƒ  } x+ | | k j ƒ  D] } | j | | ƒ q!W| S(
   Niÿÿÿÿ(   t   matrix(   t   iceili   g      ð?i    i   R  R“  (   t   scitbxRÂ  t   libtbx.math_utilsRÃ  t   colt   minR2  R   t   gridR  t   size_1dRs  R÷   Rê   R‹  t   intRí   R  Rª   R  t
   iselectionR�  (   R³   t   box_sizet   fraction_to_be_retainedRÂ  RÃ  t
   lower_leftt   upper_rightt
   sites_spanR=  t   n_boxest   box_spant   sites_centert
   box_origint   box_coordinatest   box_gridt
   box_countsRW  t   box_membersRï   t   nt   box_index_3dt   box_index_1dt   permt   box_counts_sortedt	   thresholdt
   sum_countst   required_countst   site_selectiont   i_box(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt   cluster_erosion  s@    
,
+@
(>   t
   __future__R    t   cctbx.array_familyR   t   boost.pythont   boostt   pythont
   import_extR   R   t   cctbx.crystal.find_best_cellR   Rƒ   R   R   R   R   R3  R	   RÄ  R
   t   scitbx.stl.sett   scitbx.stl.vectorR   t   libtbx.utilsR   R   R<   t   scitbx.cubicle_neighborst"   cubicles_max_memory_allocation_sett   cubicle_neighborst"   cubicles_max_memory_allocation_gett   stl_vector_rt_mxR_  t   vectort   set_unsignedt   pair_asu_j_sym_groupsRœ   t   unsignedt   pair_asu_j_sym_groupR  R   R   R²   Rº   R™   Ré   t   injectorRÖ   RË   Rÿ   t   slots_getstate_setstateRý   R@  Rþ   RX  R\  R’  Rœ  R�  R¸  Rã  (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/__init__.pyt   <module>   sh   
	ÿ 9,»>ZP`?ÿ (	tU