ó
‡™xTc           @   sø   d  d l  m Z d  d l m Z d  d l Z d  d l j Z e j	 j
 d ƒ r› xQ d d g D]4 Z e j	 j d d d e ƒ Z e j e ƒ rZ PqZ qZ Wd Z n d Z i i  d	 6i  d
 6Z g  Z e d j ƒ  ƒ Z e d „ Z d „  Z d „  Z d „  Z d S(   iÿÿÿÿ(   t   division(   t   sgtbxNt   ccp4ios   libccp4/datat   datat   module_namet   paths	   symop.libs   syminfo.libs   
P 21/m 21/m 2/n a
c         C   sÎ  | t  j ƒ  k s t ‚ |  j ƒ  } | j ƒ  } t  | } | j | d ƒ } | d k r\ | S| d k sz t t ƒ d k rXg  } t d  k	 r¨ | j
 t j t | ƒ ƒ n  | j
 t j d | ƒ ƒ t } x� | D]m }	 t j |	 ƒ rÏ t } | d k r.t d |  d t |	 ƒ ƒ }
 |
 d  k	 r9|
 | | <|
 Sq<t |	 ƒ PqÏ qÏ W| rX| sUt ‚ qXn  | d k rÊxc t | j ƒ  D]N \ } }
 t j d d	 | ƒ } | j ƒ  j ƒ  } |
 | | <| | k ru|
 SquWn  d  S(
   Ns   ..unknown..s   syminfo.libi    s   $CCP4_LIB/data/s	   symop.libt   space_group_infot	   file_itert   symbols   Hall: (   t   _ccp4_symbol_cachet   keyst   AssertionErrort   typet   lookup_symbolt   gett   lent   _syminfo_lib_cachet   ccp4io_lib_datat   Nonet   appendt   opt   joint
   expandvarst   Falset   isfilet   Truet    search_symop_lib_for_ccp4_symbolt   opent   build_syminfo_lib_cachet   numberR   R   (   R   t   lib_namet   require_at_least_one_libt   sg_typeR   t   cachet   resultt	   lib_pathst   found_at_least_one_libt   lib_patht   ccp4_symbolt   hallt   sgit   lus(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/mtz/extract_from_symmetry_lib.pyR&      sF    



c   
      C   sÂ   |  j  ƒ  j ƒ  } x© | D]¡ } | j d  d ƒ } t | d d ƒ } t | d ƒ } | | k r… xV t | ƒ D] } | j ƒ  qn Wq | d } t d | d | ƒ }	 |  j ƒ  |	 k r | Sq Wd  S(   Ni   i    iýÿÿÿi   i   R   t   order_z(	   R   R   t   splitR   t   intt   xranget   nextt   collect_symopst   group(
   R   R   t   given_space_group_numbert   linet   fldst   space_group_numberR*   t   iR"   R0   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/mtz/extract_from_symmetry_lib.pyR   ?   s    
c         C   sO   t  j ƒ  } x< t | ƒ D]. } |  j ƒ  j ƒ  } | j t  j | ƒ ƒ q W| S(   N(   R   t   space_groupR-   R.   t   stript
   expand_smxt   rt_mx(   R   R*   R"   R5   R2   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/mtz/extract_from_symmetry_lib.pyR/   O   s
    c         C   sÌ  t  j d  ƒ x! t d ƒ D] } t  j g  ƒ q Wt |  ƒ } xˆ| D]€} | j ƒ  } | d k rD d  } i  } xS| D]<} | j ƒ  } | d k r?| d  k	 s¥ t ‚ t | ƒ d k s½ t ‚ d „  } | | d ƒ } | d  k sî | t k r t | d ƒ d k r| d } q t	 d	 ƒ ‚ n  t  | j | d
 | f ƒ Pn  | j
 d ƒ r©| j ƒ  } t | ƒ d k srt ‚ t | d ƒ } | d k s”t ‚ | d k s±t ‚ qu | j
 d ƒ ru | j d  d ƒ } t | ƒ d k sât ‚ | d j ƒ  }	 |	 d k r±|	 | k st ‚ | d j ƒ  }
 t |
 ƒ d k s8t ‚ |
 j
 d ƒ sMt ‚ |
 j d ƒ sbt ‚ |	 d k ršd j |
 d d !j ƒ  ƒ j d ƒ | |	 <q®|
 d d !| |	 <q±qu qu Wt	 d ƒ ‚ qD qD Wd  S(   Niæ   t   begin_spacegroupt   end_spacegroupi   c         S   s`   d  } xS |  D]K } t | ƒ d k r+ q n  | d  k sO t | ƒ t | ƒ k r | } q q W| S(   Ni    (   R   R   (   t   s_listR"   t   s(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/mtz/extract_from_symmetry_lib.pyt   get_shorteste   s     $t   oldt   xhmi    s    Missing both xHM and old symbolsR'   s   number i   i   s   symbol t   't    iÿÿÿÿs   ' 's   Missing end_spacegroup(   s   hallR@   s   old(   R   R   R   R-   R   R7   R   R   t   syminfo_lib_bad_oldt   RuntimeErrort
   startswithR+   R,   t   lowert   endswithR   (   R%   R   R   R2   t   lt   symbolsR>   R&   R3   t   stypeR   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/mtz/extract_from_symmetry_lib.pyR   V   sX    	,(   t
   __future__R    t   cctbxR   t   libtbx.load_envt   libtbxt   os.pathR   R   t   envt
   has_modulet   _t
   under_distR   t   isdirR   R	   R   t   sett
   splitlinesRC   R   R&   R   R/   R   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/mtz/extract_from_symmetry_lib.pyt   <module>   s&   	'		