ó
N™xTc           @   s   d  d l  m Z d  d l m Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d „  Z d „  Z e	 d	 k r{ e ƒ  e ƒ  n  d
 S(   iÿÿÿÿ(   t   division(   t   sgtbxt   find_best_cellc           B   s2   e  Z d e d  „ Z d „  Z d „  Z d „  Z RS(   c         C   sÑ  | d  k r d } n  g  |  _ | j ƒ  j ƒ  j ƒ  } | d k r} | j ƒ  |  _ | j |  j ƒ |  _ |  j j	 |  j ƒ d  S| d k  s• | d k rÄ t
 j ƒ  |  _ | |  _ |  j j	 |  j ƒ d  St
 j d | d d ƒ } | j ƒ  j ƒ  j ƒ  } | j ƒ  j ƒ  } | j ƒ  | } | j ƒ  j | ƒ | j ƒ  k s=t ‚ t
 j ƒ  }	 | }
 | d k rît
 j | j ƒ  d ƒ j ƒ  ƒ } t | j ƒ  ƒ d k sšt ‚ t | j ƒ  ƒ } | j d	 ƒ d k sÇt ‚ | j d ƒ } t
 j | j ƒ  ƒ } xÍ| j ƒ  D]ï } t
 j | ƒ j |	 ƒ } | j | ƒ } | j ƒ  | j ƒ  k rø| r�| d k r�| j ƒ  j ƒ  } | j ƒ  s�| j | ƒ | j | ƒ } q�n  |  j j	 | ƒ |
 j ƒ  j d
 | j ƒ  d | d | ƒ } | d	 k rç| }	 | }
 qçqøqøWnÍ t  | ƒ j! d ƒ s
t ‚ t
 j d ƒ j | ƒ } x– | D]Ž } t
 j | ƒ j |	 ƒ } | j | ƒ } | j ƒ  | j ƒ  k r)|  j j	 | ƒ |
 j ƒ  j" | j ƒ  ƒ } | d	 k r·| }	 | }
 q·q)q)W|	 |  _ |
 |  _ d  S(   Ni   i   iK   t   symbolt   table_idt   A1983i   i   i    t   othert   unique_axist   angular_tolerances   :2s   P 4 3*(#   t   Nonet
   _all_cellst   space_group_infot   typet   numbert!   change_of_basis_op_to_niggli_cellt   _cb_opt   change_basist	   _symmetryt   appendR   t   change_of_basis_opt   cb_opt   inverset   groupt   space_groupt   AssertionErrort   rot_mx_infot   rt   abst   listt   evt   countt   indext   find_affinet   cb_mxt   new_denominatorst	   unit_cellt+   change_of_basis_op_for_best_monoclinic_betat   is_identity_opt   updatet   compare_monoclinict   strt   endswitht   compare_orthorhombic(   t   selft   input_symmetryR   t   best_monoclinic_betat   space_group_numbert   standard_infot   cb_op_inp_reft   cb_op_std_reft   cb_op_std_inpt
   best_cb_opt   best_symmetryt   two_fold_infoR   R   t   affineR!   R   t   alt_symmetryt   cb_op_best_betat
   cmp_resultt   affine_groupt   affine_s(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/find_best_cell.pyt   __init__   s~    					'!				c         C   s   |  j  S(   N(   R   (   R+   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/find_best_cell.pyR   M   s    c         C   s   |  j  S(   N(   R   (   R+   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/find_best_cell.pyt   symmetryP   s    c         C   s   |  j  S(   N(   R
   (   R+   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/find_best_cell.pyt	   all_cellsS   s    N(   t   __name__t
   __module__R	   t   TrueR<   R   R=   R>   (    (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/find_best_cell.pyR      s
   C		t   alternative_find_best_cellc           B   sA   e  Z d  „  Z d d „ Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s»  d d l  m } | |  _ | j |  j d | ƒ|  _ t j d | ƒ |  _ |  j j ƒ  j	 ƒ  |  _	 d  |  _ t j d ƒ |  _ |  j j ƒ  } |  j j | ƒ |  _ |  j j ƒ  |  _ |  j j | ƒ |  _ | |  j |  _ t j d ƒ t j d ƒ t j d ƒ t j d ƒ t j d	 ƒ t j d
 ƒ g |  _ d d d d d  d  g } t j d ƒ g |  _ t j d ƒ g |  _ d  } t j d ƒ j ƒ  j ƒ  } xŸ t |  j d | d ƒ D]ƒ \ } }	 |  j j | ƒ }
 |
 j ƒ  j	 ƒ  } |
 j ƒ  j ƒ  j ƒ  } | | k r¦|  j j | ƒ |  j j |
 j ƒ  ƒ |	 } q¦q¦W| g |  _ |  j | | ƒ g |  _ xY |  j d D]J } |  j j | ƒ j ƒ  } |  j j | ƒ |  j j |  j | | ƒ ƒ q_W|  j ƒ  d  S(   Niÿÿÿÿ(   t   crystalR   R   s   x,y,zs   -x,z,ys   y,x,-zs   z,-y,xs   z,x,ys   y,z,xt   Alli    i   i   (   t   cctbxRC   R#   R=   t   xsR   R   t   sg_infoR   t   hall_symbolR	   t	   best_cellR   R3   t'   change_of_basis_op_to_reference_settingR   t   axes_permutt   allowed_cb_opst   allowed_cb_ops_to_reft   cR   t   zipR   t   unit_cell_arrayt   order_checkt   order_check_arrayt   find_it(   R+   R#   R   RC   t   tmpt	   fix_flagst   fixed_elementt   identity_opR   t   fixedt   sg_newt   sg_new_hall_symbolt   cp_op_to_ref_rotational_partt   tmp_uc(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/find_best_cell.pyR<   `   sN    		 c         C   sø   t  } | j ƒ  d | j ƒ  d | j ƒ  d g } | d  k rv | d | d k rô | d | d k rs t } qs qô n~ | d k sˆ t ‚ | d k sš t ‚ g  } x4 t d ƒ D]& } | | k r­ | j | | ƒ q­ q­ W| d | d k rô t } n  | S(   Ni    i   i   i   (   t   Falset
   parametersR	   RA   R   t   xrangeR   (   R+   R#   RX   t   prefered_ordert   abct   tmp_abct   ii(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/find_best_cell.pyRQ   «   s"    	c         C   sï   |  j  j t ƒ } d  } | d k r9 |  j  j t ƒ } nB x? t |  j  t t |  j  ƒ ƒ ƒ D] \ } } | r[ | } Pq[ q[ W| d  k r� d } n  |  j | |  j	 | |  j
 |  _
 |  j j |  j	 | |  j | ƒ |  _ |  j j ƒ  |  _ d  S(   Ni   i    (   RR   R   RA   R	   R   RO   t   ranget   lenRM   RL   R3   RF   R   t   best_xsR#   RI   (   R+   t   n_truet
   best_indext   orderRc   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/find_best_cell.pyRS   Á   s    "	'c         C   s   |  j  S(   N(   RI   (   R+   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/find_best_cell.pyt   return_best_cellÙ   s    c         C   s   |  j  S(   N(   R3   (   R+   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/find_best_cell.pyt&   return_change_of_basis_op_to_best_cellÜ   s    c         C   s   |  j  S(   N(   Rf   (   R+   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/find_best_cell.pyt   return_best_xsß   s    N(	   R?   R@   R<   R	   RQ   RS   Rj   Rk   Rl   (    (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/find_best_cell.pyRB   _   s   	K			c          C   sä   d d l  m }  t j d ƒ } x¾ t d d ƒ D]­ } t j d | ƒ } | j d d ƒ } |  j d	 | d
 | ƒ j | ƒ } t	 | j
 ƒ  | j ƒ  ƒ } d G| GHd G| j ƒ  j ƒ  GHd G| j ƒ  j ƒ  GHd Gt | j ƒ GHHHq/ Wd  S(   Niÿÿÿÿ(   RC   s   x,y,zi   iç   R   t   volumeiè  R#   R   s   Space group : s   Unit cell   : s   cb op       : s   N cb op     : (   RE   RC   R   R   Rd   R   t   any_compatible_unit_cellR=   R   RB   R#   R   Rj   R^   Rk   t   as_xyzRe   RL   (   RC   R   R.   t   sgit   ucRF   t   abest(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/find_best_cell.pyt   exercise_alternativeã   s    !	c          C   sß   d d l  m }  t j d ƒ } x¹ d g t d d ƒ D]¡ } t j d | ƒ } | j d d	 ƒ } |  j d
 | d | ƒ j | ƒ } t	 | d d ƒ} | j ƒ  j
 ƒ  | j ƒ  j ƒ  GH| j ƒ  j ƒ  GHt | j ƒ  ƒ GHHq6 Wd  S(   Niÿÿÿÿ(   RC   s   y,z,xi   i   iI   R   Rm   iè  R#   R   R   (   RE   RC   R   R   Rd   R   Rn   R=   R   R   t   show_summaryR   Ro   RN   Re   R>   (   RC   R   R.   Rp   Rq   RF   t   best(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/find_best_cell.pyt   exerciseö   s    !t   __main__N(
   t
   __future__R    RE   R   t   objectR   RB   Rs   Rv   R?   (    (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/crystal/find_best_cell.pyt   <module>   s   Z„		