ó
(™xTc           @   sÍ  d  d l  m Z d  d l Z e j j d ƒ Z d  d l Td  d l Z	 d  d l
 Z
 d  d l Z e j Z xº d d g D]; Z e	 j j d e ƒ Z e j e ƒ rr e e j d <Pqr qr We j d	 ƒ r	e j e j e j d	 ƒ d
 ƒ ƒ r	e j e j d	 ƒ d
 ƒ e j d <n d  d l Z e j d ƒ g  e d „ Z d „  Z i d e j j 6d e j j 6d e j j 6d e j j 6d e j j  6d e j j! 6e _" d „  e _# d e$ f d „  ƒ  YZ% d e$ f d „  ƒ  YZ& d S(   iÿÿÿÿ(   t   divisionNt   ccp4io_adaptbx_ext(   t   *s   libccp4/data/syminfo.libs   lib/data/syminfo.libt   ccp4iot   SYMINFOt   CLIBDs   syminfo.libs)   ccp4io_adaptbx: cannot locate syminfo.libc         C   s±   t  j ƒ  } | r t } n	 d „  } | rF | j t t j | ƒ ƒ n  xd |  j ƒ  D]V } xM | d | ƒ D]< } | j | j	 ƒ  ƒ } d | k  ri t
 t  j | ƒ ‚ qi qi WqS W| S(   s6   Converts iotbx.pdb.hierarchy object to an MMDB Managerc         S   s
   |  j  ƒ  S(   N(   t   atoms(   t   rg(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/ccp4io_adaptbx/__init__.pyt   <lambda>#   s    R   i    (   t   mmdbt   Managert   select_atoms_with_same_resnamet   SetFlagt   reducet   operatort   or_t   residue_groupst   PutPDBStringt   format_atom_recordt   RuntimeErrort   GetErrorDescription(   t   roott   flagst   remove_duplicatest   managert   selectorR   t   atomt   rc(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/ccp4io_adaptbx/__init__.pyt   to_mmdb   s    		c         C   sr   i  } x6 |  j  ƒ  D]( } | j | j ƒ  j g  ƒ j | ƒ q Wt g  | j ƒ  D] } t | ƒ | f ^ qO ƒ d S(   Ni   (   R   t
   setdefaultt   parentt   resnamet   appendt   maxt   valuest   len(   R   t   atoms_int   at   _(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/ccp4io_adaptbx/__init__.pyR   2   s    &s"   secondary structure does not matchs   structures are too remotes$   can't make graph for first structures   empty graph for first structures%   can't make graph for second structures    empty graph for second structurec         C   s   t  j j |  d ƒ S(   Ns   undocumented return code(   t   ssmt   ERROR_DESCRIPTION_FORt   get(   R   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/ccp4io_adaptbx/__init__.pyR   E   s    t   SecondaryStructureMatchingc           B   sD   e  Z d  Z e j j e j j d „ Z d „  Z	 d „  Z
 d „  Z RS(   s-   SSM matching with iotbx.pdb.hierarchy objectsc   	      C   sØ  g  |  _  g  |  _ g  |  _ g  |  _ xÂ | | g D]´ } t d | ƒ } | j ƒ  } | j d | d t j j	 d d d t j
 j ƒ | j d | ƒ d k rµ t d t |  j ƒ d	 ‚ n  |  j  j | ƒ |  j j | ƒ |  j j | ƒ q1 Wt |  j  ƒ d
 k st ‚ t |  j ƒ d
 k st ‚ t |  j ƒ d
 k s:t ‚ t j ƒ  |  _ |  j j d |  j d d |  j d	 d | d | d |  j d d |  j d	 ƒ } | t j j k rÂt t j d | ƒ ‚ n  |  j j ƒ  |  _ d  S(   NR   t   selHndt   selTypet   cidR   t   selKeyi    s%   Empty atom selection for structure %si   i   t   manager1t   manager2t	   precisiont   connectivityt   selHnd1t   selHnd2R   (   t   chainst   managerst   handlest   qvaluesR   t   NewSelectiont   SelectR	   t   SELECTION_TYPEt   ATOMt   SELECTION_KEYt   NEWt   GetSelLengthR   R#   R    t   AssertionErrorR'   t   SSMAlignt   Alignt   RETURN_CODEt   OkR   t
   GetQvalues(	   t   selft   movingt	   referenceR1   R2   t   chainR   t   handleR   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/ccp4io_adaptbx/__init__.pyt   __init__L   s@    					c         C   s   |  j  S(   N(   R8   (   RF   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/ccp4io_adaptbx/__init__.pyRE   €   s    c         C   s­   | t  |  j ƒ k r d GHd  S|  j j d |  j d d |  j d d t j j d t j j d |  j	 d d	 |  j	 d d
 | ƒ } | t j
 j k r© t t j d | ƒ ‚ n  d  S(   Ns   Not that many matches availableR/   i    R0   i   R1   R2   R3   R4   t	   nselectedR   (   R#   R8   R'   t   AlignSelectedMatchR6   t	   PRECISIONt   Normalt   CONNECTIVITYt   FlexibleR7   RC   RD   R   R   (   RF   RL   R   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/ccp4io_adaptbx/__init__.pyRM   „   s    	c         C   s
   |  j  j S(   N(   R'   t   t_matrix(   RF   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/ccp4io_adaptbx/__init__.pyt
   get_matrix—   s    (   t   __name__t
   __module__t   __doc__R'   RN   RO   RP   RQ   RK   RE   RM   RS   (    (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/ccp4io_adaptbx/__init__.pyR*   I   s   	/		t   SSMAlignmentc           B   s5   e  Z d  Z d „  Z d „  Z d „  Z e e ƒ Z RS(   s   SSM alignment from SSM matchc   
      C   sß   t  j ƒ  } | j d | j d d | j d d | j  ƒ | d | j d ƒ } | d | j d ƒ } g  |  _ g  |  _ xa | j ƒ  D]S \ \ } } } d „  }	 |  j j |	 | | ƒ |	 | | ƒ f ƒ |  j j | ƒ q„ Wd  S(   NR/   i    R0   i   t	   ssm_alignRI   c         S   sR   |  d  k r d  S|  j |  j |  j f } | | k sJ t d t | ƒ ƒ ‚ | | S(   Ns   Id %s missing(   t   Nonet   chain_idt   resseqt   inscodeR@   t   str(   t   rgit   indexert
   identifier(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/ccp4io_adaptbx/__init__.pyR)   ­   s
    "(	   R'   t
   XAlignTextt   XAlignR6   R5   t   pairst   statst
   get_blocksR    (
   RF   t   matchR_   t   alignt   indexer1t   indexer2t   ft   sR%   R)   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/ccp4io_adaptbx/__init__.pyRK   Ÿ   s    	
			(c   
      C   sF  d } d } d } d } d } d } d } xÞ |  j  D]Ó } t | ƒ d k r4 | d 7} | d d k rs | d 7} n  | d d k r� | d 7} n  | d d k r­ | d 7} n  | d d k rÊ | d 7} n  | d d k rç | d 7} n  | d d k r| d 7} qq4 q4 W| d	 }	 | |	 | |	 | |	 | |	 | |	 | |	 | f S(
   Ni    g        i   i   g      ð?i   i   i   g      Y@(   Rd   R#   (
   RF   t   gaplessalignlent   s5t   s4t   s3t   s2t   s1t   s0t   et   glen(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/ccp4io_adaptbx/__init__.pyt   GetSSMSequenceIdentityº   s0         
	      
c         C   s   d „  } |  d | d | ƒ S(   Nc         S   s>   t  g  |  j ƒ  D]' } |  j | j ƒ  | j f | f ^ q ƒ S(   N(   t   dictR   t   idt   resseq_as_intt   icode(   RI   R   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/ccp4io_adaptbx/__init__.pyR   ×   s   Rf   R_   (    (   t   clsRf   R_   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/ccp4io_adaptbx/__init__.pyR   Õ   s    	(   RT   RU   RV   RK   Ru   R   t   classmethod(    (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/ccp4io_adaptbx/__init__.pyRW   œ   s
   				('   t
   __future__R    t   boost.pythont   boostt   pythont
   import_extt   extR   t   libtbx.load_envt   libtbxR   t   ost   patht   opR&   t   envt
   under_distt   isfilet   environt   getenvt   joint   warningst   warnt   TrueR   R   R'   RC   t   NoHitst   NoSuperpositiont   NoGrapht
   NoVerticest   NoGraph2t   NoVertices2R(   R   t   objectR*   RW   (    (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/ccp4io_adaptbx/__init__.pyt   <module>   s:   
	3%	
S