ó
™™xTc           @   s>   d  d l  m Z d d d e d „ Z d d d e d „ Z d S(   iÿÿÿÿ(   t   divisionc   	         sž   d d l  m ‰  g  d „ ‰ t ‡  ‡ f d † ‰ ‡ ‡ f d †  } d  d  ‡  f d † } | r‚ | |  | d | d | ƒ\ } } n | |  ƒ \ } } | | f S(	   Niÿÿÿÿ(   t   geometryc   	      S   sN  d } d  } x*|  j ƒ  D]} | j j ƒ  | j j ƒ  k rC q n  t } x6 | D]( } | j j ƒ  | j j ƒ  k rP PqP qP Wt } | sŽ q n  | j j ƒ  d k r¾ | j j ƒ  d	 k r¾ q n  | j d | j d d } | | j d | j d d 7} | | j d | j d d 7} | | k  r | } | } q q W| rF| g Sg  Sd  S(
   Niè  t   Ht   Dt   Ti    i   i   (   R   R   R   (   R   R   R   (   t   Nonet   atomst   namet   stript   Falset   Truet   elementt   xyz(	   t
   atom_groupt   atomt   excludet   min_d2t   min_atomt   atom1t   processt   atom2t   d2(    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/correct_hydrogen_geometries.pyt
   get_bonded   s0        c   
         s&  d } g  } ˆ |  | ƒ } | sM | d 7} | rC d | j  ƒ  GHn  | | f Sx& | D] } ˆ |  | d | g ƒ} qT W| s¨ | d 7} | rž d | j  ƒ  GHn  | | f S| d j j ƒ  d k rË | | f Sy, ˆ  j | j | j | d j f ƒ j } Wn5 t k
 r.d	 | j  ƒ  d
  GH| d 7} | | f SX| d k  rd d d g }	 | j d d | j d |	 d <| j d d | j d |	 d <| j d d | j d |	 d <ˆ  j |	 | j | d j f ƒ j } | d k rt |	 ƒ | _ | rd | j  ƒ  d
  GHn  | j | j	 ƒ qn  | | f S(   Ni    i   s   not bonded: %sR   s   not angled: %sR   R   R   s     Bad angle "%s"i   g     @U@i   g     ÀW@s     Inverted "%s" (   R   R   R   (
   t   format_atom_recordR   R   t   angleR   t   angle_modelt	   Exceptiont   tuplet   appendt   i_seq(
   R   R   t   verboset   bad_hydrogen_countt   corrected_hydrogen_countt   bondedt   bat   angledR   R   (   R   R   (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/correct_hydrogen_geometries.pyt
   get_angles%   sF    
 

 

 ,
   % c      
      sê   d } g  } xÑ |  j  ƒ  D]Ã } xº | j ƒ  D]¬ } x£ | j ƒ  D]• } xŒ t | j ƒ  ƒ D]x \ } } xi t | j ƒ  ƒ D]U \ } }	 |	 j j ƒ  d k rw ˆ  | |	 d ˆ ƒ}
 | |
 d 7} | |
 d 7} qw qw WqX Wq? Wq, Wq W| d  f S(   Ni    R   R   R   R   i   (   R   R   R   (	   t   modelst   chainst   residue_groupst	   enumeratet   atom_groupsR   R   R   R   (   t	   hierarchyR   R    t   modelt   chaint   residue_groupt   atom_group_iR   t   iR   t   rc(   R$   R   (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/correct_hydrogen_geometries.pyt
   get_i_seqsF   s    %c            sC  | d  k r! | r! | j ƒ  } n  | d  k rH |  j ƒ  } | j ƒ  } n  g  } g  } | j j } |  j ƒ  } xÊ| D]Â} | j \ }	 }
 } | |	 j j ƒ  d k s½ | | j j ƒ  d	 k rs | |	 j j ƒ  d
 k rõ | | j j ƒ  d k rõ qs n  | |	 j j ƒ  d k r+|	 } | |	 } | | } n | } | | } | |	 } | |
 } | | k raqs n  ˆ  j	 | | | f ƒ j
 } | d k  r5d d d g } | d d | d | d <| d d | d | d <| d d | d | d <ˆ  j	 | | | f ƒ j
 } | d k r2| j t | ƒ ƒ | j | ƒ q2q5qs qs W| | f S(   NR   R   g     @U@i    i   i   g     ÀW@(   R   R   (   R   R   (   R   R   (   R   R   (   R   R   (   R   t
   sites_cartt   extract_xray_structureR   t   angle_proxiesR   t   i_seqsR   R   R   R   R   R   (   R*   t   restraints_managert   xray_structureR2   R5   t   xyzst   angle_proxies_simpleR   t   proxyR   t   j_seqt   k_seqt   i_ht   site_it   site_kt   site_jR   R   (   R   (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/correct_hydrogen_geometries.pyt"   get_i_seqs_from_restraints_managerU   sJ    



 R7   R2   (   t   cctbxR   R	   R   (	   R*   R6   R7   R2   R   R1   RA   R5   R8   (    (   R   R$   R   R   s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/correct_hydrogen_geometries.pyt   get_bad_hydrogen_i_seqs   s    !-c         C   s2  | s | s t  ‚ d } d } t |  j ƒ  ƒ d k rE d GH| | f St |  d | d | d | ƒ\ } } | d  k r d | f St | ƒ t | ƒ k s� t  ‚ | r² | j ƒ  } n  x' t | | ƒ D] \ }	 }
 |
 | |	 <qÂ W| rò | j | ƒ n0 x- t |  j	 ƒ  ƒ D] \ } } | | | _
 qW| } | | f S(   Ni    i   s4     
Model files with more than one model are ignored
R6   R7   R2   (   t   AssertionErrort   lenR%   RC   R   R2   t   zipt   set_sites_cartR(   R   R   (   R*   R6   R7   R2   R   R   R    R5   R8   R   R   R/   R   (    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/correct_hydrogen_geometries.pyt   correct_hydrogen_geometries‘   s.    
	
N(   t
   __future__R    R   R	   RC   RH   (    (    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/correct_hydrogen_geometries.pyt   <module>   s   ‹