ó
†™xTc           @   së   d  d l  m Z d  d l m Z d  d l m Z d  d l m Z d  d l Z d  d l	 Z	 d  d l
 Z
 e
 j Z y d  d l Z Wn e k
 r– d Z n Xd „  Z d „  Z d „  Z d	 „  Z d
 „  Z e d k rç e d e	 j d ƒ n  d S(   iÿÿÿÿ(   t   division(   t   extract_from_symmetry_lib(   t   sgtbx(   t   format_cpu_timesNc          C   s  x	t  d d ƒ D]ø }  t j d |  d d ƒ } t j d | d d ƒ } | d	 d
 k rk d | d d } n  t j d | d d ƒ j ƒ  | j ƒ  k s› t ‚ t j d | d d ƒ } | d	 d
 k rØ d | d d } n  t j d | d d ƒ j ƒ  | j ƒ  k s t ‚ q Wd  S(   Ni   iç   t   numbert   table_idt   A1983t   space_group_infot   lib_names	   symop.libi    t   Ht   Rs   :Ht   symbols   syminfo.lib(   t   xrangeR   R   R   t   ccp4_symbolt   groupt   AssertionError(   t   space_group_numberR   R   (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/mtz/tst_extract_from_symmetry_lib.pyt   exercise_230   s(    					!			c          C   s  t  t j t j d ƒ ƒ }  t j ƒ  } t j ƒ  } xC|  D];} | j d  d ƒ } | d } | | c d 7<t	 | d ƒ } t	 | d ƒ } | d } | | c d 7<t j
 d |  d | ƒ }	 |	 j ƒ  | k sÖ t ‚ t j d	 |	 ƒ }
 t j d
 |
 d d ƒ } | | k st ‚ |
 j ƒ  j ƒ  | k s0t ‚ d d l m } | d
 |
 ƒ } t | ƒ d k r: d G| G| G| GHq: q: Wx? | j ƒ  D]1 \ } } | d k r†t d | | f ƒ ‚ q†q†Wt j ƒ  } x? | j ƒ  D]1 \ } } | d k rÔt d | | f ƒ ‚ qÔqÔWd  S(   Ns	   symop.libi   i    i   iýÿÿÿi   t	   file_itert   order_zR   R   R   iÿÿÿÿ(   t   format_cryst1_sgroupi   s4   ccp4 symop.lib setting leads to pdb CRYST1 overflow:s1   ccp4 id "%s" appears %d times (should be unique).s5   ccp4 symbol "%s" appears %d times (should be unique).(   t   opent   opt   joinR   t   ccp4io_lib_datat   libtbxt   dict_with_default_0t   splitt   Nonet   intt   collect_symopsR   R   R   R   R   t   typeR   t	   iotbx.pdbR   t   lent   itemst   RuntimeError(   R   t   ccp4_id_countst   ccp4_symbol_countst   linet   fldst   ccp4_idR   R   t   given_ccp4_symbolR   R   t   retrieved_ccp4_symbolR   t   sgroupt   countR   (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/mtz/tst_extract_from_symmetry_lib.pyt   exercise_symop_lib_recycling%   sJ    	

			c         C   s  t  j d k r d  St d d ƒ | IJt j j ƒ  } | j d d d t j j j ƒ | j	 ƒ  d k rt d GH| GHHnŠ t
 j ƒ  } x9 t | j ƒ  ƒ D]% } | j d | ƒ } | j | ƒ q“ Wt
 j d	 | ƒ } | j ƒ  |  j ƒ  k rþ d
 GH| GH|  GH| GHHn  d  S(   Nt   nts   tmp.pdbt   wt   fileNamet   gzipModei    s+   MMDB does not recognize space group symbol:t   NopR   s   MMDB symmetry mismatch:(   t   ost   nameR   t   ccp4io_adaptbxt   mmdbt   Managert   ReadPDBASCIIt
   IO_GZ_MODEt   GZM_NONEt   isSpaceGroupR   t   space_groupR   t   GetNumberOfSymOpst   GetSymOpt
   expand_smxR   R   (   t   sgi_hallt   pdb_strt   mgrt   sgt   it   st   sgi(    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/mtz/tst_extract_from_symmetry_lib.pyt#   exercise_mmdb_cryst1_interpretationM   s*    c          C   sß  t  j d t j d ƒ d d ƒ d k s- t ‚ d d  l }  d } xct d d ƒ D]R} xIt  j | D]:\ } } t j d	 d
 | ƒ } | j ƒ  j	 ƒ  r� qc n  |  j
 j d | ƒ } t | ƒ d k rÔ d G| G| GHn  | j d d ƒ } |  j
 j d | ƒ } |  j
 j j d | ƒ }	 |	 j ƒ  d  k rc| d k r5Hn  d | j d d ƒ j ƒ  | f GH| d 7} n |	 j d | ƒ s{t ‚ t d  k	 rc t d | d | ƒ qc qc WqO W| d k rÛHd d l m }
 t d |
 | ƒ ƒ ‚ n  d  S(   NR   s   P 1R   s   syminfo.libiÿÿÿÿi    i   iæ   R   s   Hall: i   s6   ccp4 syminfo.lib setting leads to pdb CRYST1 overflow:t   volumeiè  t   crystal_symmetryt   cryst1_records   "%s": "Hall: %s",t    t    t   otherR@   RA   (   t   plural_sst   Please edit iotbx/pdb/cryst1_interpretation.py:
  Add the %d line%s above with "Hall:" to the "special" dictionary.
iç   (   R   R   R   R   R   t   iotbx.pdb.cryst1_interpretationR   t   _syminfo_lib_cacheR   t
   is_centrict   pdbR   R!   t   any_compatible_crystal_symmetryt   format_cryst1_recordt   cryst1_interpretationRI   R   t   replacet   uppert   is_similar_symmetryR5   RG   t   libtbx.utilsRN   R#   (   t   iotbxt   n_need_more_specialR   t   hallR   R@   R+   t   csRA   t   cs2RN   (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/mtz/tst_extract_from_symmetry_lib.pyt)   exercise_syminfo_lib_pdb_cryst1_recyclinge   sD    		 c         C   sQ   t  |  ƒ d k s t ‚ t j d  k r0 d GHd  St ƒ  t ƒ  t ƒ  t ƒ  GHd  S(   Ni    sI   Skipping iotbx/mtz/tst_extract_from_symmetry_lib.py: ccp4io not available(	   R!   R   R   R   R   R   R-   R_   R   (   t   args(    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/mtz/tst_extract_from_symmetry_lib.pyt   exercise�   s    t   __main__R`   i   (   t
   __future__R    t	   iotbx.mtzR   t   cctbxR   RY   R   R   t   sysR3   t   pathR   R5   t   ImportErrorR   R   R-   RG   R_   Ra   t   __name__t   argv(    (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/mtz/tst_extract_from_symmetry_lib.pyt   <module>   s"   	
		(		(	