ó
œ™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 l m Z d  d l m	 Z	 d  d l
 Z
 d e f d	 „  ƒ  YZ d
 „  Z d „  Z d „  Z d e f d „  ƒ  YZ d S(   iÿÿÿÿ(   t   divisionN(   t   sgtbx(   t   geometry_restraints(   t   linking_setup(   t   linking_utils(   t   glyco_utilst   ResidueLinkClassc           B   s   e  Z d  „  Z RS(   c         C   s7   | |  k r3 | |  | k r3 |  | j  | ƒ q3 n  d  S(   N(   t   remove(   t   selft   residuest
   atom_names(    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/linking_mixins.pyt   remove_link   s    (   t   __name__t
   __module__R   (    (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/linking_mixins.pyR      s   c      
   C   sÈ  d „  } d „  } |  s t  ‚ d }	 x
|  j D]ÿ }
 | | | |
 ƒ } | d  k rX q. n  | | | | ƒ s£ | } | } | } | | | |
 ƒ } | d  k r£ q. q£ n  d } t j d | d t |
 | ƒ d d |
 j d	 ƒ } | j d
 | d d | d d | ƒ | j d
 | d d | d d | ƒ |	 d 7}	 q. Wxt |  j	 D]i } | | | | ƒ } | d  k req;n  t j
 d | d | j d d | j d	 ƒ } | j j d | ƒ q;Wx} |  j D]r } | | | | ƒ } | d  k rÜq²n  t j d | d | j d d | j d	 d | j ƒ } | j j d | ƒ q²Wx” |  j D]‰ } | | | | ƒ } | d  k r\q2n  d } | j d  j ƒ  d k r„d } n  t j d | d | d t d d ƒ } | j j d | ƒ q2Wi  } i  } x� |  j D]‚ } | | | | ƒ } | d  k rÿqÕn  | j | j g  ƒ | | j c | 7<| j | j g  ƒ | | j j d | j d	 ƒ qÕW| rÄx` | D]U } t | | ƒ d k  rŠqhn  t j d | | d | | ƒ } | j  j d | ƒ qhWn  |	 S(   Nc         S   sŒ  g  } | j  ƒ  } d | k r3 d d d d g } n¨ d | k r` d d d d d d d	 d
 g } n{ d | k r‡ d d d d d d g } nT d | k r´ d d d d d d d d g } n' d | k rÏ d d g } n d sÛ t ‚ xª t | ƒ D]œ \ } } | d rTt | | ƒ } xt |	 D]5 }
 |
 j j ƒ  | j ƒ  k r| j |
 j ƒ PqqWd  Sqè t | | ƒ d k rx|  j	 ƒ  }	 qè | j	 ƒ  }	 qè W| S(   Nt
   value_distt   atom_1_comp_idt	   atom_id_1t   atom_2_comp_idt	   atom_id_2t   periodt   atom_3_comp_idt	   atom_id_3t   atom_4_comp_idt	   atom_id_4t   value_anglet   volume_signt   atom_centre_comp_idt   atom_id_centret   plane_idt   atom_comp_idt   atom_idi    i   i   (
   t   cif_keywordst   AssertionErrort	   enumeratet   getattrt   namet   stript   appendt   i_seqt   Nonet   atoms(   t   atom_group1t   atom_group2t	   restraintt   i_seqst   keyst   attrst   it   attrR#   R(   t   atom(    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/linking_mixins.pyt   _get_restraint_i_seqs   s`    
c         S   s‡   g  } x[ | D]S } xJ t  |  j ƒ  ƒ t  | j ƒ  ƒ D]& } | j | k r6 | j | ƒ Pq6 q6 Wq Wt j | Œ  } | d k rƒ t St S(   Ni	   (   t   listR(   R&   R%   R   t   get_distance2t   Falset   True(   R)   R*   R,   R(   R&   R1   t   d2(    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/linking_mixins.pyt   _check_i_seqsb   s    ) i    R   R,   t   distance_idealt   weighti   i   R&   t   j_seqt   paramst   rt_mx_jit   angle_idealt   proxyt   periodicityg333333@i   t   negag333333Àt   volume_idealt
   both_signsg      9@t   weights(!   R    t	   bond_listR'   R   t   bond_simple_proxyR"   t   value_dist_esdt   updatet   add_pairt
   angle_listt   angle_proxyR   t   value_angle_esdt   anglet   add_if_not_duplicatedt   tor_listt   dihedral_proxyR   t   dihedralt	   chir_listR   t   lowert   chirality_proxyR5   t	   chiralityt
   plane_listt
   setdefaultR   R%   t   dist_esdt   lent   planarity_proxyt	   planarity(   t   linkR)   R*   t   bond_params_tablet   bond_asu_tablet   geometry_proxy_registriesR=   R2   R8   t   countt   bondR,   t   tmpt   valueR?   RM   t   tort   chirRB   t   planesRD   t   planeR   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/linking_mixins.pyt   _apply_link_using_proxies   s¶    
	G		 	 		
	

	 			 			 				 # 	
c         C   sì   |  j  ƒ  j  ƒ  j  ƒ  } |  j  ƒ  j  ƒ  j  ƒ  } | j | j k sF t Si  } | j ƒ  } x� t d d d ƒ D]m } xd | | j ƒ  D]R } | j ƒ  |  j ƒ  k r® |  | | <Pq‚ | j ƒ  | j ƒ  k r‚ | | | <Pq‚ q‚ Wqk Wt | ƒ d k S(   Ni    iþÿÿÿiÿÿÿÿi   (   t   parentt   idR5   t   residue_groupst   rangeR(   t   quoteRY   (   t   atom1t   atom2t   chain1t   chain2t   flt   rgsR/   R1   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/linking_mixins.pyt   possible_cyclic_peptideÔ   s     

c   
      C   sz  t  j |  ƒ } t  j | ƒ } |  j ƒ  } | j ƒ  } | j sH | j rv| j rZ | } n | } t  j | j ƒ d k r| d  Sd } |  j j ƒ  d k r¶ | j j ƒ  d k r¶ | t	 f Sd } x6 | j
 ƒ  D]( }	 |	 j j ƒ  d k rÉ | d 7} qÉ qÉ W| d	 k rd  Sd
 } | j j ƒ  d k r?|  j j ƒ  d k r?| t	 f S|  j j ƒ  d k rv| j j ƒ  d k rv| t f Sn  t	 S(   Nt   othert   SSt   SGi    t   Ct   Nt   Oi   i   t   TRANS(   s   other(   Rx   Ry   Rz   (   R   t   get_classesRi   t   common_amino_acidt	   get_classt   resnameR'   R#   R$   R5   R(   R6   (
   Rn   Ro   t   classes1t   classes2R)   R*   Ru   t   keyR`   R1   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/linking_mixins.pyt   check_for_peptide_linksè   s2    		*
  *
*t   linking_mixinsc           B   sJ   e  Z d  d d d e d „ Z e e e d	 d d d d d d	 e d „ Z RS(
   g      y@gffffffþ?g      @g×£p=
×ÿ?c	   %      C   sg  d s t  ‚ t j ƒ  }	 d d  l }
 t d „ } g  } i  } x6 | j ƒ  D]( } | j | k rI | j | j ƒ qI qI Wx1| D])} x t | | | d | ƒƒ D]\ } } |
 j | ƒ } xåt | | | d t ƒƒ D]È\ } } | | k ró qÕ n  |
 j | ƒ } | j	 rqÕ n  | j	 r qÕ n  | j
 r8| j
 r8qÕ n  | j rP| j rPqÕ n  |
 j | | ƒ } | | k rtqÕ n  | rš| j ƒ  G| j ƒ  G| G| GHn  |
 j |  j | | | | d | d | d | d | ƒ} | d  k râqÕ n  | \ } } } x© t | | | ƒ D]• \ } } } | rOd d	 GH| GHd
 G| GHx | D] } | j ƒ  GHq7Wn  | j | d ƒ |  j | | | | d | ƒ} | r�d | GHn  | | | <qWqÕ Wqž Wq| Wg  }  |  j rd }! x$t |  j ƒ D]\ }" }# t |# d t ƒ sòqÎn  |# j | j k r:|! d d |# j d d |# j d d |# j f 7}! n~ t |# d t ƒ rOni t |# d t ƒ rdnT |! d d |# j d d |# j d d f 7}! |! d d |# j f 7}! d  | j |# j <| j |# j d ƒ rÎ|! | |# j 7}! qÎqÎW|! r| d d IJ| |! d  IJqn  |  rE|  j ƒ  |  j ƒ  x |  D] }$ |  j |$ =q.Wn  | d d  t j ƒ  |	 f IJd  S(!   Ni    iÿÿÿÿc         s   s˜   d s t  ‚ x… t |  j ƒ  ƒ D]q \ } } | j | k r@ q n  xM t | j ƒ  ƒ D]9 \ } } | r} d | j | j f GHn  | j ƒ  d VqS Wq Wd  S(   Ni    s'     residue_group: resseq="%s" icode="%s"(   R    R!   t   chainsRj   Rk   t   resseqt   icodeR(   (   t   modelt   chain_idt   verboset   i_chaint   chaint   i_residue_groupt   residue_group(    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/linking_mixins.pyt%   generate_first_atom_of_residue_groups  s      RŠ   t   amino_acid_bond_cutofft   rna_dna_bond_cutofft   intra_residue_bond_cutofft   -iP   t	   data_linkt    s   rc :%s:t	   automatics   %sLinking %s to %s using %s
t    i   i   i   t   possible_peptide_linkt   possible_rna_dna_links   %sLinking %s to %s
s   %sCreating link for "%s"
i
   s1   %sAdding automatically detected intra-chain linksi   s+   %sTime to detect intra-chain links : %0.1fss           s           s
             s         (   s         s         (   R    t   timeR   R5   R…   Rj   R%   R!   R|   t   common_waterR}   t   common_rna_dnaR4   Rm   t   process_atom_groups_for_linkingt   pdb_hierarchyR'   t   zipRW   t   process_custom_linkst   apply_cif_linksR"   R”   t   link_link_id_dictt   pdbres_pairt   gett   sortt   reverse(%   R   Rˆ   t   mon_lib_srvt   logt   residue_group_cutoff2R�   R‘   R’   RŠ   t   t0R   R�   t	   chain_idst   outlsRŒ   R‰   t   i_atomRn   R€   t   j_atomRo   R�   R7   t   rct   pdbres_pairst
   data_linkst   atomssR£   R”   R(   R1   Rb   R   t   outlR/   t   applyt   r(    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/linking_mixins.pyt   process_intra_chain_links  sÄ    	 "" 	 	     	 						 

 g      @g       @g      à?c   b         s¢  t  ˆ d ƒ s t ‚ | d  k rF t |	 |
 | j j | | | ƒ } n  g  } | rv d |	 |
 | j j | | | f GHn  d d l m ‰  d d l m	 ‰ d d  ‡  ‡ ‡ f d † } d ‡ f d † } | d	 | |	 | |
 | j
 oè | j j
 | j j | | f IJt j ƒ  } ˆ j j ƒ  } g  } i  } d
 } d
 } g  } d
 } d
 } t ƒ  } i  } i  } | d | ƒ \ } ‰ }  }! }" xt | d | d | ƒ ƒ D]ç\ }# }$ |$ \ }% }& }' }( }) }* }+ }, | j |& |' d
 ƒ r×q’n  | j |& |' d ƒ ròq’n  | |& }- | |' }. | r<|& G|' G|- j ƒ  G|. j ƒ  Gd |( G|+ G|* GHn  |- j |. ƒ s]d
 s’t ‚ q’n  |- j ƒ  j ƒ  |. j ƒ  j ƒ  k r‡q’n  |- j ƒ  }/ |. j ƒ  }0 |/ j j ƒ  |0 j j ƒ  k rÀn3 |/ j j ƒ  d k rØn |0 j j ƒ  d k r’n q’t j |- ƒ }1 t j |. ƒ }2 t }3 | r/d |1 |2 f GHn  |1 j rh|2 j rh| sMq’n  t |- |. ƒ rht }3 qhn  |1 j rŒ|2 j rŒ| j
 sŒq’qŒn  |* rÅ|1 j rª|2 j rªq’n  |2 j rÅ|1 j rÅq’qÅn  | rdt }4 |& | k rx3 | |& D]$ }5 | j |' |5 d
 ƒ rèt }4 qèqèWn  |' | k rUx3 | |' D]$ }5 | j |& |5 d
 ƒ r*t }4 q*q*Wn  |4 rdq’qdn  |- j ƒ  d d !|. j ƒ  d d !g }6 |6 j ƒ  |* r°|6 j  t! |+ ƒ ƒ n  t" |6 ƒ }6 t j# |- |. d |( d | d |
 d | j j d | j j$ d | d | d | d |	 d |3 d | ƒsH| r’d G|- j ƒ  G|. j ƒ  G|6 GHq’q’n  |1 j% pW|2 j% s“t j& ˆ j |- ƒ suq’n  t j& ˆ j |. ƒ s“q’q“n  |1 j rÍ|2 j rÍ| j  t" t' |- j( |. j( g ƒ ƒ ƒ n  t j |- d t ƒ}7 t j |. d t ƒ}8 |7 |8 g }9 |9 j ƒ  t" |9 ƒ }9 | r2d |9 k r2q’n  | j
 rZ| j j
 rZd |9 k rZq’n  | rsd  |9 k rsq’n  | rŒd! |9 k rŒq’n  |- j) |. j) g }: |: j ƒ  |6 | k rÍ|: | |6 k rÍq’qÍn  t* | j+ |6 g  ƒ ƒ }; |; t, j- j. |9 d ƒ k r/| r’d" G|; Gt, j- j. |9 d ƒ G|9 GHq’q’n  | |6 j  |: ƒ |6 }< g  }= x$ |/ j ƒ  D] }> |= j  |> j( ƒ qYWg  }? x$ |0 j ƒ  D] }> |? j  |> j( ƒ q†Wg  }@ xH |= D]@ }A x7 |? D]/ }B |A |B g }C |C j ƒ  |@ j  t" |C ƒ ƒ qºWq­Wt }D |1 j o|2 j s<x0 | j/ j0 D] }E |E j1 |@ k rt }D PqqWn  |D rHq’n  t j2 |/ |0 ˆ j3 ƒ \ }F }G }6 |G r„|0 }C |/ }0 |C }/ n  ˆ j4 j5 ƒ  }H t* |< ƒ d# k rÆt6 j7 d$ d% d& |H j8 ƒ  ƒ }I n" t6 j7 d$ |< d# d& |H j8 ƒ  ƒ }I |F r`	| j+ |6 g  ƒ | |6 j  |/ |0 g ƒ t9 |F |/ |0 | | | d' |I ƒ| rF	d( G|6 GHn  |F j: ˆ j; d) |6 <q’n  t j< ˆ j |- |. ƒ }J |J s”	| j= |< |: ƒ q’n  |J \ }K }L }M t* |L ƒ d k s»	t ‚ |L d
 }6 ˆ j3 j> j. |6 d  ƒ }F |6 j? d* ƒ d k s
|6 j? d+ ƒ d k rl
t@ jA |0 |/ | | | d' |I ƒ\ }6 }N | j+ |6 g  ƒ | |6 j  |/ |0 g ƒ |N ˆ j; d) |6 <q’n˜|F r¾
| j+ |6 g  ƒ | |6 j  |/ |0 g ƒ t9 |F |/ |0 | | | d' |I ƒq’nFtB |- |. ƒ }J t* |< ƒ d, k rè
d  }J n  |J r|J \ }6 }G ˆ j3 j> j. |6 ƒ }F |G r*|0 }C |/ }0 |C }/ n  t9 |F |/ |0 | | | d' |I ƒ}J |J s‡|0 }C |/ }0 |C }/ t9 |F |/ |0 | | | d' |I ƒ}J n  |* rÇ| d 7} | j  | |& j ƒ  | |' j ƒ  |+ |6 f ƒ q’| d 7} | j  | |& j ƒ  | |' j ƒ  d  |6 f ƒ q’n  | j+ |# g  ƒ | |# j  |/ |0 |- |. g ƒ |* rØ| d 7} | j  | |& j ƒ  | |' j ƒ  |+ |1 j r||2 j r|d- n d. f ƒ | j+ |& g  ƒ | j+ |' g  ƒ | |& j  |' ƒ | |' j  |& ƒ |  jC |, ƒ q’| d 7} | j  | |& j ƒ  | |' j ƒ  d  |1 j r|2 j rd- n d. f ƒ | j+ |& g  ƒ | j+ |' g  ƒ | |& j  |' ƒ | |' j  |& ƒ |  jC |, j1 ƒ q’W| rùxs t' | ƒ D]b }6 d/ d0 GH|6 GHxK | |6 D]? }O x6 |O D]. }> y |> j ƒ  GHWq¼tD k
 ré|> GHq¼Xq¼Wq¯Wq�Wn  |  jE ƒ  }P dL \ }Q }R xæ|P jF ƒ  D]Ø}S |S j1 ƒ  \ }& }' |& |" |& k sLt ‚ |' |" |' k sbt ‚ | |& }- | |' }. |S jG jH ƒ  r’|Q d 7}Q n
 |R d 7}R t j |- ƒ }1 t j |. ƒ }2 |1 j r|2 j r| j
 r| j j
 r| j jI | j jJ | j jK g }T n tL jM |- |. ƒ }T d1 }U d2 }V d3 }W t* |T ƒ d
 k r†|T d
 }U t* |T ƒ d k r†|T d }V t* |T ƒ d# k rƒ|T d# }W qƒq†n  |U d  k r›d1 }U n  | jN d4 |& d5 |' d6 tO jP d7 |U d8 d9 |V d# d: |W ƒ ƒ | jC d4 |& d5 |' d' |S jG ƒ qW| r | d; | | f IJxC t' | ƒ D]5 \ }X }Y }* }Z |* d  k r!| d< |X |Y f IJq!q!WxC t' | ƒ D]2 \ }X }Y }* }[ |* rg| d= |X |Y |* f IJqgqgWn  | d> |Q |R f IJ|R d
 k rÉd }\ n d? }\ d@ „  }] | r�| dA IJx² t' | ƒ D]¡ }6 | dB |6 IJ| |6 j |] ƒ xy | |6 D]m \ }^ }_ |^ j sC|_ j rr| dC |^ j ƒ  |_ j ƒ  |^ j |_ j f IJq%| dD |^ j ƒ  |_ j ƒ  f IJq%WqõWn  | r†| dE | | f IJxÌ dM dN g D]» \ }` }[ | dH |` IJxO t' | ƒ D]A \ }X }Y }* }a |* d  k rë|a |[ k rë| dI |X |Y f IJqëqëWxL t' | ƒ D]> \ }X }Y }* }a |* r=|a |[ k r=| dJ |X |Y |* f IJq=q=WqÄWn  | dK t j ƒ  | IJ| S(O   Nt   cifsÙ   
      metal_coordination_cutoff %s
      amino_acid_bond_cutoff    %s
      rna_dna_bond_cutoff       %s
      carbohydrate_bond_cutoff  %s
      inter_residue_bond_cutoff %s
      second_row_buffer         %s
      iÿÿÿÿ(   t   crystal(   t   flexg      @c            sŽ  | d  k rK ˆ j j ƒ  } ˆ j ƒ  } x! | D] } | j | j ƒ q. Wn  ˆ j d  k	 ro ˆ j j | ƒ } n  ˆ j j | ƒ } ˆ j	 j | ƒ } ˆ j
 j | ƒ } ˆ j j d |  ƒ } ˆ j j | ƒ }	 | j d |	 d ˆ j ƒ  j | ƒ ƒ ˆ  j d | ƒ }
 t j d | d | d | d | d	 t j d
 d ƒ d ˆ j | j ƒ  ƒ d ˆ j | j ƒ  d ƒ d |  d d d |
 g ƒ 
} | |	 |
 | | f S(   Nt   buffer_thicknesst   original_sitest   site_symmetry_tablet   asu_mappingst   model_indicest   conformer_indicest   sym_excl_indicest   donor_acceptor_excl_groupst   nonbonded_paramst   default_distancei   t   nonbonded_typest   nonbonded_chargesi    t%   nonbonded_distance_cutoff_plus_buffert   min_cubicle_edgei   t   shell_asu_tables(   R'   Rž   R(   t   size_tR%   R&   R¾   t   selectR¿   RÀ   RÁ   t   special_position_settingsR½   t
   sites_cartt   process_sites_cartR¼   t   pair_asu_tableR   t   nonbonded_sorted_asu_proxiesRÂ   t
   std_stringt   sizet   int(   t   max_bonded_cutoffR,   R(   R1   R¾   R¿   RÀ   RÁ   R½   RÌ   RÎ   t   nonbonded_proxies(   R¸   R¹   R   (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/linking_mixins.pyt   _nonbonded_pair_objectsó  s<    					c         3   sT   |  j  d d d ˆ  d t ƒ } | d  k r. d  S| \ } } x | D] } | VqA Wd  S(   Nt   by_valuet   deltaRÌ   t   include_proxy(   t
   get_sortedR6   R'   (   RÔ   RÓ   R¯   t   junkt   item(   RÌ   (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/linking_mixins.pyt2   _nonbonded_pair_generator_geometry_restraints_sort  s    	 sè   
  Automatic linking
    Parameters for automatic linking
      Linking & cutoffs
        Metal        : %-5s - %0.2f
        Amimo acid   : %-5s - %0.2f
        RNA/DNA      : %-5s - %0.2f
        Carbohydrate : %-5s - %0.2f
      i    RÓ   RÔ   i   s   Distance: %0.2fR•   s   
Residue classes

%s
%s i	   t   distanceR�   R‘   t   rna_dna_angle_cutofft   inter_residue_bond_cutofft   second_row_buffert   saccharide_bond_cutofft   metal_coordination_cutofft   use_only_bond_cutoffRŠ   s   is not linkedt   important_onlyt   metalRœ   R}   t   common_saccharides   too many links:i   t   symbols   x,y,zt   t_denR=   s   predefined residue named links   link_%st   ALPHAt   BETAi   s   h-dnaRa   R“   iP   gffffff@g{®Gáz”?g        R&   R;   R<   R9   R:   g      ð?t   slacks4     Number of additional links: simple=%d, symmetry=%ds       Simple link:   %s - %ss&       Symmetry link: %s - %s sym. op: %ss0     Number of custom bonds: simple=%d, symmetry=%ds     c         S   sv   |  d }  | d } |  j  ƒ  d | j  ƒ  d k rN |  j | j k  rJ d Sd S|  j  ƒ  d | j  ƒ  d k  rr d Sd S(   Ni    i   iÿÿÿÿi   (   t   id_strt   altloc(   t   ag1t   ag2(    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/linking_mixins.pyt   _sort_on_idÚ  s    

  s     Links applieds       %ss&         "%s" - "%s" : altloc "%s" - "%s"s         "%s" - "%s"s4     Number of additional bonds: simple=%d, symmetry=%ds   Nucleic acid basepair bondss   Other bondss     %s:s       Simple bond:   %s - %ss&       Symmetry bond: %s - %s sym. op: %ss,     Time building additional restraints: %0.2f(   i    i    (   s   Nucleic acid basepair bondss   h-dna(   s   Other bondss   bond(Q   t   hasattrR    R'   t   maxt   bondst   bond_distance_cutofft   cctbxR¸   t   cctbx.array_familyR¹   t   enabledRš   Rž   R(   R   R!   t   containsRm   t   is_in_same_conformer_asRi   Rí   R$   R   R|   R5   R}   Rt   R6   Rœ   Ræ   Rì   R¥   R%   t   strt   tuplet   is_atom_pair_linkedt(   angle_between_bond_and_nucleobase_cutofft   common_elementt   check_valencet   sortedR&   R#   RY   RW   R   t   maximum_inter_residue_linksR¤   t   bond_simplet   proxiesR,   t   is_atom_group_pair_linkedR§   RË   t   space_groupR   t   rt_mxRè   Rh   t
   cif_objectR·   t+   process_atom_groups_for_linking_single_linkR   R¢   t   findR   t(   apply_glyco_link_using_proxies_and_atomsRƒ   RI   t	   Exceptiont   extract_pair_sym_tablet   iteratorR=   t
   is_unit_mxt   target_valuet   sigmaRë   t   bondlength_defaultst   runRH   R   t   bond_params(b   R   R]   R^   R_   t	   na_paramst   link_metalst   link_residuest   link_carbohydratesRÓ   Râ   R�   Rß   Rà   t   carbohydrate_bond_cutoffR¨   RŠ   t   hbonds_in_bond_listRÕ   RÜ   Rª   R(   t	   bond_datat   bond_data_i_seqst   simple_bondst	   sym_bondst	   link_datat   simple_linkst	   sym_linkst   donet   linkst   custom_linksRÔ   RÎ   R½   t   nonbonded_i_seqst   iiRÛ   t   labelsR&   R;   RÝ   t   vdw_distancet   sym_opR=   R?   Rn   Ro   R)   R*   R€   R�   Rã   t   bondedt   t_iR‚   t   class1t   class2t	   class_keyt   namest   current_number_of_linkst   done_keyR,   R1   t   j_seqst   ij_seqsR/   t   jRb   t
   link_foundRF   R\   t   swapR  t   link_rt_mx_jiR¯   t   pdbrest   link_keyt
   link_atomsR·   t   pairt   pair_sym_tablet   n_simplet
   n_symmetryt   sym_pairt   anst   equilR:   Rë   t   label1t   label2t	   link_namet	   bond_typet   blanksRð   Rî   Rï   t   captiont   bt(    (   R¸   R¹   R   RÌ   sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/linking_mixins.pyt   process_nonbonded_for_links³  s(   		#	
	  


$    		  	   	
	   	(		
    
	#
 	!" 	
*			



	
		  

 
	

			
	

		
		

N(   R   R   R5   R¶   R6   R'   RH  (    (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/linking_mixins.pyR„     s    ¨(   t
   __future__R    Rš   Rõ   R   R   t   mmtbx.monomer_libraryR   R   R   R  t   dictR   Rh   Rt   Rƒ   t   objectR„   (    (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/linking_mixins.pyt   <module>   s   	Ã		