ó
‹™xTc           @   sÓ  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 „ Z d d „ Z	 d d	 „ Z
 i d
 d 6d
 d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6Z dC Z i d% d& 6d' d( 6d' d) 6d* d+ 6d* d, 6d- d. 6d/ d0 6d1 d2 6d- d3 6d4 d5 6d6 d7 6d8 d9 6d: d; 6d< d= 6d> d? 6Z i  Z x e j ƒ  D] Z e e e <q`Wx e D] Z e e e <q{Wx e j ƒ  D] Z e e e <qœWd@ e f dA „  ƒ  YZ dB „  Z d S(D   iÿÿÿÿ(   t   divisionN(   t   crystal(   t   sgtbx(   t   uctbxg{®Gáz„?c         C   s   t  |  d ƒ | k  S(   NiZ   (   t   abs(   t   anglet   eps(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/cryst1_interpretation.pyt   is90   s    c         C   s   t  |  d ƒ | k  S(   Nix   (   R   (   R   R   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/cryst1_interpretation.pyt   is120
   s    c         C   sR   |  | | d } t  |  | ƒ | k  oQ t  | | ƒ | k  oQ t  | | ƒ | k  S(   Ng      @(   R   (   t   rt   st   tR   t   m(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/cryst1_interpretation.pyt   equiv   s    s   R 3t   R3t   H3s   R -3s   R-3s   H-3s   R 3 2t   R32t   H32s   R 3 mt   R3Mt   H3Ms   R 3 ct   R3Ct   H3Cs   R -3 ms   R-3Ms   H-3Ms   R -3 cs   R-3Cs   H-3Ct   P2t   P21t   C2t   A2t   B2t   I2s(   Hall:  P 1 (-x,-1/2*y+1/2*z,1/2*y+1/2*z)t   A1s   Hall:  C 2y (x+1/4,y+1/4,z)t   C1211t   C21s"   Hall:  C 2y (x+1/4,y+1/4,-x+z-1/4)t   I1211t   I21s   Hall:  P 2 2ab (x+1/4,y+1/4,z)t   P21212As)   Hall:  I 4 2 (1/2*x+1/2*y,-1/2*x+1/2*y,z)t   F422s1   Hall:  P 4 2 (1/2*x+1/2*y-1/4,-1/2*x+1/2*y-1/4,z)t   C4212s	   P21212(A)s   Hall:  C 2c 2 (x+1/4,y,z)s   C2221A)s   Hall:  C 2 2 (x+1/4,y+1/4,z)t   C222As   Hall:  F 2 2 (x,y,z+1/4)t   F222As    Hall:  I 2 2 (x-1/4,y+1/4,z-1/4)t   I222As"   Hall:  P 4n 2n (x-1/4,y-1/4,z-1/4)t   P42212As"   Hall:  I 2 2 3 (x+1/4,y+1/4,z+1/4)t   I23At
   categorizec           B   s&   e  Z d  „  Z d „  Z d d „ Z RS(   c         C   s_   d  |  _ y5 | j ƒ  j d d ƒ j ƒ  |  _ t |  j |  _ Wn t k
 rZ d  |  _ n Xd  S(   Nt    t    (   t   Nonet   symbolt   stript   replacet   uppert   _allt   categoryt	   Exception(   t   selfR-   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/cryst1_interpretation.pyt   __init__F   s    	!c         C   s=   |  j  t k r d S|  j  t k r& d S|  j  t k r9 d Sd  S(   Nt   rhombohedralt
   short_monot   special(   R2   R6   R7   R8   R,   (   R4   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/cryst1_interpretation.pyt   get_categoryN   s       c         C   s?  |  j  d  k r d  S|  j d  k rN y t j |  j  ƒ SWqN t k
 rJ d  SXn  t | t j j	 ƒ rr | j
 ƒ  } n  |  j t k r9| d  k r‘ d  S| \ } } } } } } t | | ƒ d k rì t | ƒ rì t | ƒ rì t | ƒ rì d } n1 t | | | ƒ rt | | | ƒ rd } n d  St j t |  j  d | ƒ S|  j t k r| d  k rXd  S|  j  d |  j  d }	 }
 | \ } } } } } } t | ƒ rÌt | ƒ rÌ|	 d k r³d  St j |	 d |
 d	 ƒ St | ƒ rt | ƒ r|	 d
 k rôd  St j |	 d |
 ƒ Sn  |  j t k r/t j t |  j  ƒ St d ƒ ‚ d  S(   Ng{®Gáz„?t   Ht   Rt   :i    i   t   Bs    1 s    1t   Cs    1 1 s*   Programming error (should be unreachable).(   R-   R,   R2   R   t   space_group_infot   RuntimeErrort
   isinstanceR   t   extt	   unit_cellt
   parametersR6   R   R   R   R   R7   R8   (   R4   RC   t   at   bt   ct   alphat   betat   gammat   basis_symbolt   Zt   T(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/cryst1_interpretation.pyR?   T   sH        :	$	   N(   t   __name__t
   __module__R5   R9   R,   R?   (    (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/cryst1_interpretation.pyR)   D   s   		c         C   s÷   t  |  t ƒ r* t j j j d |  ƒ }  n  |  j } |  j } d „  } d „  } | d  k	 rÆ t	 | ƒ d k rÆ | d  k s� | j
 d d ƒ d k rÆ | | d  ƒ rÆ | | d ƒ rÆ t j d	 d  d
 d  ƒ St |  j ƒ j d	 | ƒ } t j d	 | d
 | ƒ S(   Nt   pdb_strc         S   s%   x |  D] } | d k r t  Sq Wt S(   Ni    i   (   i    i   (   t   Falset   True(   t   abct   v(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/cryst1_interpretation.pyt   are_dummy_lengthsy   s     c         S   s%   x |  D] } | d k r t  Sq Wt S(   Ni    iZ   (   i    iZ   (   RQ   RR   (   t   abgRT   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/cryst1_interpretation.pyt   are_dummy_angles}   s     i   R*   R+   t   P1i   RC   R?   (   RA   t   strt   iotbxt   pdbt   recordst   cryst1t   ucparamst   sgroupR,   t   lenR/   R   t   symmetryR)   R?   (   t   cryst1_recordt   uR
   RU   RW   R?   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/cryst1_interpretation.pyt   crystal_symmetryt   s"    				$		(   R   R   R   R   R   R   (   t
   __future__R    t	   iotbx.pdbRZ   t   cctbxR   R   R   R   R   R   R6   R7   R8   R1   t   keyst   symt   objectR)   Rd   (    (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/cryst1_interpretation.pyt   <module>   sj   
     
   0