ó
Ä™xTc           @   sã   d  d l  m Z d  d l Z d  d l m Z d  d l m Z m Z d  d l Z d  d l	 Z	 d  d l
 Z
 e j j d ƒ Z d Z d e f d „  ƒ  YZ d	 e f d
 „  ƒ  YZ d e f d „  ƒ  YZ d „  Z d e f d „  ƒ  YZ d S(   iÿÿÿÿ(   t   divisionN(   t   null_out(   t
   group_argst   adopt_init_argssó   
file_name = None
  .type = str
energy_cutoff = -0.5
  .type = float
distance_cutoff = 4.0
  .type = float
nh_bond_length = 1.01
  .type = float
verbosity = 0
  .type = int
pymol_script = None
  .type = path
atom_output = False
  .type = bool
i    t   hbondc           B   sb   e  Z d  „  Z d
 d d „ Z d „  Z e d „ Z d „  Z d „  Z	 d „  Z
 d „  Z d	 „  Z RS(   c         C   s�   t  |  t ƒ  ƒ | j ƒ  d j |  _ | j ƒ  d j |  _ |  j d |  _ |  j d |  _ t |  _	 | j
 ƒ  j
 ƒ  | j
 ƒ  j
 ƒ  k |  _ d  S(   Ni    i   (   R   t   localst   atomst   tmpt   i_rest   j_rest   _i_res_offsett   _j_res_offsett   Falset   _helix_flagt   parentt   within_chain(   t   selft   residue1t   residue2t   energy(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/secondary_structure/dssp.pyt   __init__(   s    	t    c         C   sŸ   | d  k r t j } n  | d | |  j j ƒ  j ƒ  j |  j j |  j j ƒ  j ƒ  |  j j ƒ  j ƒ  j |  j j |  j j ƒ  j ƒ  |  j	 |  j
 |  j f
 IJd  S(   Ns+   %s%s %s %s O --> %s %s %s N : %6.3f [%d,%d](   t   Nonet   syst   stdoutR   R   t   idt   resnamet   residR   R   R   R	   (   R   t   outt   prefix(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/secondary_structure/dssp.pyt   show2   s     
		c         C   s<   |  j  r8 |  j |  j } | d k r8 | d k  r8 | Sn  d  S(   Ni   i   (   R   R	   R   R   (   R   t   n_turn(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/secondary_structure/dssp.pyt
   get_n_turn=   s
    	c         C   s   | |  _  d  S(   N(   R   (   R   t   flag(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/secondary_structure/dssp.pyt   set_helicalD   s    c         C   s   |  j  S(   N(   R   (   R   (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/secondary_structure/dssp.pyt
   is_helicalG   s    c         C   s8   | d  k r t S|  j j ƒ  j ƒ  | j j ƒ  j ƒ  k S(   N(   R   R   R   R   (   R   t   other(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/secondary_structure/dssp.pyt   is_same_chainJ   s     c         C   sˆ   d } | |  j  j ƒ  j ƒ  j j ƒ  |  j  j ƒ  j ƒ  d f } | |  j j ƒ  j ƒ  j j ƒ  |  j j ƒ  j ƒ  d f } d | | f S(   Ns"   chain '%s' and resi %s and name %st   Ot   Ns   dist (%s), (%s)(   R   R   R   t   stripR   R   (   R   t   sel_fmtt   sel1t   sel2(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/secondary_structure/dssp.pyt   as_pymol_cmdN   s    c         C   s¨   | d  k r t S| j ƒ  \ } } } } |  j | k rd |  j | k rd |  j | k rd |  j | k s  |  j | k r¤ |  j | k r¤ |  j | k r¤ |  j | k r¤ t St S(   N(   R   R   t   get_residue_rangeR   R	   t   True(   R   t   Lt   i_res_startt	   i_res_endt   j_res_startt	   j_res_end(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/secondary_structure/dssp.pyt   is_in_ladderV   s     c         C   sœ   | j  |  j k r$ | j |  j k sH | j |  j  k rL | j  |  j k rL d S| j |  j  k rp | j  |  j k s” | j |  j k r˜ | j  |  j k r˜ d Sd S(   Ni   iÿÿÿÿi    (   R	   R   R   R
   (   R   R$   (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/secondary_structure/dssp.pyt	   is_bridge`   s    $N(   t   __name__t
   __module__R   R   R   R    R.   R"   R#   R%   R,   R4   R5   (    (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/secondary_structure/dssp.pyR   '   s   	
					
t   bridgec           B   s;   e  Z d d d  „ Z d „  Z d „  Z d d e d „ Z RS(   c         C   s  t  |  t ƒ  ƒ | | g j d  ƒ d k s1 t ‚ | d  k r| d k r¥ | j | j k rt | j } | j d } qæ | j | j k sŒ t ‚ | j d } | j } nA | j | j k rÌ | j } | j } n | j d } | j d } t | | ƒ |  _ t | | ƒ |  _ n  d  S(   Ni    i   i   (   i    i   (	   R   R   t   countR   t   AssertionErrorR   R	   t   mint   max(   R   t   hbond1t   hbond2t	   directionR   R	   (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/secondary_structure/dssp.pyR   m   s"    !		c         C   s   | |  j  k p | |  j k S(   N(   R=   R>   (   R   R   (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/secondary_structure/dssp.pyt   contains_hbondƒ   s    c         C   s4   t  d |  j d |  j d |  j d |  j d |  j ƒ S(   NR=   R>   R?   R   R	   (   R8   R>   R=   R?   R	   R   (   R   (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/secondary_structure/dssp.pyt   invert†   s    				R   c         C   s£   | d  k r t j } n  d } | rE |  j d k r< d } qE d } n  | d | | |  j |  j f IJ|  j j d | d | d ƒ |  j j d | d | d ƒ d  S(	   NR   i   s    (parallel)s    (antiparallel)s   %sBridge%s [%d,%d]:R   R   s     (	   R   R   R   R?   R   R	   R=   R   R>   (   R   R   R   t   show_directionR?   (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/secondary_structure/dssp.pyR   Ž   s     		N(   R6   R7   R   R   R@   RA   R.   R   (    (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/secondary_structure/dssp.pyR8   l   s   		t   ladderc           B   sV   e  Z d  „  Z d „  Z d d d „ Z d „  Z d d „ Z d „  Z d e	 d „ Z
 RS(	   c         C   s   g  |  _  g  |  _ d  |  _ d  S(   N(   t   bridgest   bridge_i_resR   R?   (   R   (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/secondary_structure/dssp.pyR   œ   s    		c         C   s„   |  j  d  k r | j  |  _  n |  j  | j  k s6 t ‚ | j | j f |  j k r€ |  j j | ƒ |  j j | j | j f ƒ n  d  S(   N(   R?   R   R:   R   R	   RE   RD   t   append(   R   t   b(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/secondary_structure/dssp.pyt
   add_bridge¡   s    R   c         C   s   | d  k r t j } n  |  j d k r0 d } n d } | d | | f IJx. |  j D]# } | j | d | d d t ƒqT Wd  S(   Ni   t   parallelt   antiparallels   %sLadder (%s):R   s     RB   (   R   R   R   R?   RD   R   R   (   R   R   R   R?   R8   (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/secondary_structure/dssp.pyR   ª   s     	c   	      C   sÔ   d d l  m } t |  j d j |  j d j ƒ } t |  j d j |  j d j ƒ } | | } | | } | j d | d d d | j d | j d	 | j	 d
 | j
 d | j d | j d | j	 d | j
 d d ƒ } | S(   Niÿÿÿÿ(   t   secondary_structurei    t   sheet_idt	   strand_idi   t   start_resnamet   start_chain_idt   start_resseqt   start_icodet   end_resnamet   end_chain_idt
   end_resseqt	   end_icodet   sense(   t	   iotbx.pdbRK   R;   RD   R   R<   t
   pdb_strandR   t   chain_idt   resseqt   icode(	   R   RL   t
   pdb_labelsRK   t   start_i_rest	   end_i_rest   startt   endt   first_strand(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/secondary_structure/dssp.pyt   get_initial_strand´   s$    ##

										c         C   s±  d d l  m } d  } } t j } t j }	 | d  k	 r‚ t | j d j | j d j ƒ } t | j d j | j d j ƒ }	 n  t |  j d j	 |  j d j	 ƒ }
 t |  j d j	 |  j d j	 ƒ } t |
 | ƒ } t | |	 ƒ } | | k r0t
 j ƒ  } |  j d | ƒ t d | | | j ƒ  f ƒ ‚ n  | | } | | } | j d | d | d | j d	 | j d
 | j d | j d | j d | j d | j d | j d |  j ƒ } | S(   Niÿÿÿÿ(   RK   i    R   s#   start_i_res(%d) > end_i_res(%d):
%sRL   RM   RN   RO   RP   RQ   RR   RS   RT   RU   RV   (   RW   RK   R   R   t   maxintR;   RD   R   R<   R	   t	   cStringIOt   StringIOR   t   RuntimeErrort   getvalueRX   R   RY   RZ   R[   R?   (   R   RL   RM   R\   t   next_ladderRK   R]   R^   t   next_ladder_i_startt   next_ladder_i_endR2   R3   R   R_   R`   t   strand(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/secondary_structure/dssp.pyt   get_next_strandÈ   sB    
	
##

									c         C   sœ   t  |  j d j |  j d j ƒ } t |  j d j |  j d j ƒ } t  |  j d j |  j d j ƒ } t |  j d j |  j d j ƒ } | | | | f S(   Ni    iÿÿÿÿ(   R;   RD   R   R<   R	   (   R   R0   R1   R2   R3   (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/secondary_structure/dssp.pyR-   ì   s
    ####c         C   s  d d l  m } |  j ƒ  \ } } } }	 d  }
 d  } d  } } t } t j } d } d } x| D]þ } |  j d j | ƒ s¡ |  j d j | ƒ s¡ | j	 |  ƒ r` | j
 | k  rþ | j
 | k rþ | j
 | k rþ | }
 | j
 } | } | } |
 j
 } |
 j } n  | j | k r^| j | k r^| j | k r^| }
 | j } | } | } |
 j
 } |
 j } q^q` q` W|
 d  k rZ| d  k	 rZxÝ | D]Ò } | j	 | ƒ r�| j
 | k  ró| j
 | k ró| j
 | k ró| }
 | j
 } | } | } |
 j
 } |
 j } n  | j | k rS| j | k rS| j | k rS| }
 | j } | } | } |
 j } |
 j
 } qSq�q�Wn  |
 d  k r›t j ƒ  } |  j d | ƒ t d | j ƒ  ƒ ‚ n  | | } | | } | j d | d	 | j d
 | j d | j d | j d | d | j d | j d | j d | j ƒ 
S(   Niÿÿÿÿ(   RK   s    O  s    N  i    R   s!   Can't find start of H-bonding:
%st   cur_atomt   cur_resnamet   cur_chain_idt
   cur_resseqt	   cur_icodet	   prev_atomt   prev_resnamet   prev_chain_idt   prev_resseqt
   prev_icode(   RW   RK   R-   R   R   R   Rc   RD   R@   R4   R   R	   Rd   Re   R   Rf   Rg   t   pdb_strand_registerR   RY   RZ   R[   (   R   t   hbondsR\   t   prev_laddert   is_last_strandRK   R0   R1   R2   R3   t   start_hbondt   start_atom_namet
   curr_i_rest
   prev_i_rest
   start_on_nt	   min_i_rest   o_labelt   n_labelR   t	   curr_atomRr   R   t   curr_rest   prev_res(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/secondary_structure/dssp.pyt   get_strand_registeró   s‚    
									

								N(   R6   R7   R   RH   R   R   Rb   Rl   R-   R   R†   (    (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/secondary_structure/dssp.pyRC   ›   s   			
	#	c      	   C   sF   |  j  ƒ  } | j  ƒ  } t d |  j d | j d | j ƒ  d | j ƒ S(   NR   RY   RZ   R[   (   R   R   R   R   t   resseq_as_intR[   (   t
   atom_groupt   residue_groupt   chain(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/secondary_structure/dssp.pyt   get_pdb_fields=  s    		t   dsspc           B   sY   e  Z d d d d d d  „ Z d d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z	 RS(   c         C   sà  t  j  ƒ  } | d  k r$ t j } n  | d  k r< t ƒ  } n  | d  k rW t j ƒ  } n  | d  k rr | j ƒ  } n  | d  k r� | j ƒ  } n  g  |  _	 | |  _
 | |  _ | |  _ | |  _ t  j  ƒ  } | j ƒ  j d ƒ sâ t ‚ | j ƒ  }	 | j d | j ƒ }
 |
 j ƒ  } |
 j ƒ  |  _ g  |  _ d } xÒ | j ƒ  j ƒ  D]¾ } d  } x¯ | j ƒ  D]¡ } | j ƒ  } | d  k	 r¤| | d k r¤|  j j d  ƒ | d 7} n  | } | j ƒ  d } |  j j t | ƒ ƒ x | j ƒ  D] } | | _ qÝW| d 7} qYWq@Wt  j  ƒ  } |  j j  d k r5| d | | IJn  d } d } x| j ƒ  j ƒ  D] } | j! ƒ  slqTn  xå | j ƒ  D]× } | j ƒ  d } | j ƒ  } x² | D]ª } | j" d k r¢t  j  ƒ  } |  j# | ƒ } | t  j  ƒ  | 7} t  j  ƒ  } x? | D]7 } |  j$ | | ƒ } | d  k	 rù|  j	 j | ƒ qùqùW| t  j  ƒ  | 7} Pq¢q¢WqyWqTWt  j  ƒ  } |  j j  d k r§| d | | IJ| d | IJ| d | IJn  |  j j  d	 k rí| d
 IJx' |  j	 D] } | j% | d d ƒqÍWn  |  j j& d  k	 rt' |  j j& d ƒ |  _( n t ƒ  |  _( t  j  ƒ  } |  j) ƒ  |  _* t  j  ƒ  } |  j j  d k rt| d | | IJn  |  j+ ƒ  |  _, t  j  ƒ  } |  j j  d k r¶| d | | IJn  |  j% d | ƒ |  j( j- ƒ  d  |  _ d  S(   Ni    t   distance_cutoffi   s   Time to initialize: %.3fss    O  s   Time to find H-bonds: %.3fs     local atom detection: %.3fs     analysis: %.3fi   s   All hydrogen bonds:R   s     t   ws   Time to find helices: %.3fs   Time to find sheets: %.3fR   (.   t   timeR   R   R   R   t   master_philt   extractR   t   extract_xray_structureRx   t   pdb_hierarchyt	   pdb_atomst   paramst   logt   extract_i_seqt   all_eqR:   t	   unit_cellt   pair_asu_tableR�   t   asu_mappingst   tablet	   asu_tableR\   t
   only_modelt   chainst   residue_groupsR‡   RF   t   atom_groupsR‹   R   t	   verbosityt
   is_proteint   namet   find_nearby_backbone_nt   process_o_n_interactionR   t   pymol_scriptt   opent   _pmlt   find_helicest   helicest   find_sheetst   sheetst   close(   R   R“   t   xray_structureR”   R•   R   R–   t   t0t   t1R™   Rš   R›   t   kRŠ   t   last_resseqR‰   RZ   Rˆ   t   atomt	   t_processt   t_findt   ag_atomst   tf0t   n_atomst   tp0t   n_atomR   t   t2t   t3(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/secondary_structure/dssp.pyR   G  sª        							
c         C   sd   | d  k r t j } n  x! |  j D] } | | j ƒ  IJq" Wx! |  j D] } | | j ƒ  IJqF Wd  S(   N(   R   R   R   R«   t
   as_pdb_strR­   (   R   R   t   helixt   sheet(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/secondary_structure/dssp.pyR   ¥  s     c         C   s,   d d l  m } | j d |  j d |  j ƒ S(   Niÿÿÿÿ(   RK   R«   R­   (   RW   RK   t
   annotationR«   R­   (   R   RK   (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/secondary_structure/dssp.pyt   get_annotation¬  s    		c         C   s\  d d l  m } g  } |  j | j } x/| j ƒ  D]!\ } } |  j | } | j j ƒ  d k r3 | } | j ƒ  }	 |	 j	 d k rˆ q3 n  | j ƒ  j ƒ  j ƒ  }
 | j ƒ  j ƒ  j ƒ  } | j ƒ  j ƒ  j
 ƒ  } |	 j ƒ  j
 ƒ  } |
 | k r
t | | ƒ d k  r
q3 n  t | | j ƒ | | j ƒ ƒ } | |  j j k rDq3 n  | j | ƒ q3 q3 W| S(   Niÿÿÿÿ(   t   colR'   t   PROi   (   t   scitbx.matrixRÃ   R�   t   i_seqt   itemsR”   R¤   R(   R   R   R‡   t   abst   xyzR•   R�   RF   (   R   t   o_atomRÃ   R¹   t   asu_dictt   j_seqt   j_sym_groupsR$   R»   t   n_atom_groupt   o_chaint   other_chaint   o_resseqt   n_resseqt   dxyz(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/secondary_structure/dssp.pyR¥   ²  s*    ""c         C   s}   d d  l  } | j j d ƒ } | j d | d | ƒ } | d  k	 ry | |  j j k  ry t d | j ƒ  d | j ƒ  d | ƒ Sd  S(   Niÿÿÿÿt   mmtbx_dssp_extR&   R'   R   R   R   (	   t   boost.pythont   pythont
   import_extt   get_o_n_hbond_energyR   R•   t   energy_cutoffR   R   (   R   RÊ   R»   t   boostt   extR   (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/secondary_structure/dssp.pyR¦   Ë  s    c         C   sÆ  d d l  m } g  } t j } } g  } d  } d  } x« |  j D]  } | j ƒ  }	 |	 d  k	 r@ | j | ƒ s� |	 | k s� | j | d k r» t	 | ƒ d k r¯ | j
 | ƒ n  | g } n | j
 | ƒ | j } |	 } | } q@ q@ Wt	 | ƒ d k r| j
 | ƒ n  |  j j d k rz|  j d t	 | ƒ IJxH | D]= }
 |  j d IJx' |
 D] } | j d |  j d	 d
 ƒ qPWq6Wn  g  } i d d 6d d 6d d 6} t } d  } xt | ƒ D]
\ } }
 t } |
 d j ƒ  }	 t	 |
 ƒ d k  rôd  } q´n  | d  k	 r¶| d } |
 | } | j | ƒ r¶| j | j k  r¶| d 7} x: | t	 |
 ƒ k  r{|
 | j | j k rw| d 7} qBPqBWd  } | t	 |
 ƒ k s´t	 |
 | ƒ d k  r³q´q³q¶n  x |
 D] } | j ƒ  q½Wt |
 | j ƒ } t |
 d j ƒ } | j d | d d | d d | j d | j d | j d | j d | j d | j d | j d | j d | |	 d d d | j | j d ƒ } | j
 | ƒ |
 } x% |
 | D] } |  j | j ƒ  IJq¡Wq´W| S(   Niÿÿÿÿ(   RK   i   i    i   s   %d basic turnss   TURN:R   R   s     i   i   i   t   serialt   helix_idRN   RO   RP   RQ   RR   RS   RT   RU   t   helix_classt   commentR   t   length(   RW   RK   R   Rc   R   Rx   R    R%   R   t   lenRF   R•   R¢   R–   R   R   t	   enumeratet
   TURN_STARTR	   R"   R‹   R   R   t	   pdb_helixR   RY   RZ   R[   R©   R,   (   R   RK   t   turnst   i_prevt   j_prevt   current_turnt   prev_n_turnt
   prev_hbondt   hbR   t   turnR«   t   helix_classest   ignore_previoust	   prev_turnR²   t
   turn_startt   last_hbond_prev_turnt   first_hbond_curr_turnR_   R`   R¿   (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/secondary_structure/dssp.pyRª   Ü  s’    	$


(	

								
c   1      C   s&  d d l  m } t |  j ƒ d } g  } t j ƒ  } xº t |  j ƒ D]© \ } } | j ƒ  rc qE n  d } x‚ |  j | d D]o } | j ƒ  r“ q{ n  | j | ƒ }	 |	 d k r{ t | | |	 ƒ }
 | j	 |
 ƒ | d 7} | d k rê Pqê q{ q{ WqE Wt j ƒ  } |  j
 j d k r(|  j d | | IJn  | j d „  ƒ |  j
 j d k rqx$ | D] }
 |
 j d |  j ƒ qQWn  t g  | D] }
 |
 j ^ q{ƒ } t g  | D] }
 |
 j ^ q�ƒ } t t | j | ƒ ƒ ƒ } g  } g  } t j } x_ | D]W } | | d k r| j	 | ƒ n+ t | ƒ d k r5| j	 | ƒ n  | g } | } qíWt | ƒ d k rj| j	 | ƒ n  g  } d } x*t | ƒ D]\ } } t g  ƒ } x¶ | D]® } x¥ | D]� }
 d  } |
 j | k rÖ|
 j } n |
 j | k rñ|
 j } n  | d  k	 r¯xL t | ƒ D]; \ } } | | k r(q
q
| | k r
| j | ƒ Pq
q
Wq¯q¯Wq¢Wt | ƒ d k r’| d 7} t | ƒ d k r’| d 7} q’n  | j	 | ƒ qƒWg  } g  } d } t j } t } xe| | k  r,d } d }  x%| t | ƒ k  r| | } t | ƒ d k s)| rðt | ƒ d k rðt ƒ  }! | | } d }" d  }# } t | ƒ d k rÎxE t | ƒ D]7 }$ | |$ }% t |% ƒ |" k rk|$ }# t |% ƒ }" qkqkW|# d  k	 s¸t ‚ |# } | j | ƒ n | j ƒ  } | d  k	 sìt ‚ | | } x� | D]y } xp | D]h }
 |
 j | k rD|
 j | k rD|! j |
 j ƒ  ƒ q
|
 j | k r
|
 j | k r
|! j |
 ƒ q
q
WqýW| j	 |! ƒ | | }& t  } |& j | ƒ | d 7} | } t |& ƒ d k r| j	 | ƒ g  } | d 7} t } Pqqã| d 7} |  d 7}  qãW|  | k r#t  } d } n  |  } qÈWg  }' xìt | ƒ D]Þ\ } }( | d }) |  j
 j d k r£|  j d	 |) IJx' |( D] }! |! j |  j d
 d ƒq€Wn  | j! d |) d t |( ƒ d d g  d g  ƒ }* |( d j" |) |  j# ƒ }+ |* j$ |+ ƒ |* j% d  ƒ |' j	 |* ƒ d  }, xt |( ƒ D]ö \ }- }! d  }. |- t |( ƒ d k  r]|( |- d }. n  |! j& d |) d |- d d |  j# d |. ƒ }/ |! j' d |  j d |  j# d |, d |. d  k ƒ }0 |! }, |0 d  k r |  j
 j d k rü|  j d IJ|! j |  j ƒ n  Pn  |* j$ |/ ƒ |* j% |0 ƒ q$Wq@W|' S(   Niÿÿÿÿ(   RK   i   i    i   s   Time to find bridges: %.3fsc         S   s   t  |  j | j ƒ S(   N(   t   cmpR   (   t   aRG   (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/secondary_structure/dssp.pyt   <lambda>G  s    R   s	   SHEET %d:R   s     RL   t	   n_strandst   strandst   registrationsRM   R\   Rh   Rx   Ry   Rz   s   missing register:((   RW   RK   Rá   Rx   R�   Râ   R#   R5   R8   RF   R•   R¢   R–   t   sortR   t   setR   R	   t   sortedt   listt   unionR   Rc   R   t   addR   RC   R:   t   removet   popRH   RA   R.   t	   pdb_sheetRb   R\   t
   add_strandt   add_registrationRl   R†   (1   R   RK   t   i_maxRD   R±   R²   R=   t	   n_bridgesR>   R5   t   BR¼   t	   all_i_rest	   all_j_rest   all_indicesR÷   t   curr_strandR~   R   t   connectionst   n_connectedt   uRk   t   linkedt   other_i_rest   vt   other_strandt   all_sheet_ladderst   sheet_ladderst   n_processedt   n_left_lastt   start_on_next_strandt   n_leftR/   t   max_connecting_strand_lengtht   best_strand_indext   v_t   other_t   next_linkedR­   t   laddersRL   t   current_sheetRa   Ry   t   i_ladderRh   t   next_strandt   register(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/secondary_structure/dssp.pyR¬   /  s4     
""
	

	

*	







	

			
					N(
   R6   R7   R   R   R   RÂ   R¥   R¦   Rª   R¬   (    (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/secondary_structure/dssp.pyRŒ   F  s   X				S(   t
   __future__R    t   libtbx.philt   libtbxt   libtbx.utilsR   R   R   Rd   R�   R   t   philt   parseR�   Rã   t   objectR   R8   RC   R‹   RŒ   (    (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/secondary_structure/dssp.pyt   <module>   s   		E/¢		