ó
É™xTc        -   @   sÒ  d  d l  m Z d  d l Z d  d l m Z d  d l Z e j j	 d ƒ Z
 d  d l m Z d  d l Z d e f d „  ƒ  YZ d e f d	 „  ƒ  YZ d
 d d d d d d d d d d d d d d d d d d d g d d d d d d d d d  d! d" d# d$ d  d# d% d& d d' d g d d d( d) d* d+ d, d- d. d/ d0 d1 d2 d3 d4 d d  d5 d6 d g d d d) d7 d  d d, d d  d d5 d8 d9 d: d d% d d; d< d g d d d* d  d= d> d; d? d d
 d d d@ dA dB dC dD d dE dF g d d d+ d d> dG d5 d0 dH dI d$ d d d d0 d d% d d< d" g d d d, d, d; d5 dJ d- d% d5 d5 d3 dK dL d3 dM d4 d& d$ d  g d d d- d d? d0 d- dN d dO dP d; d d d d d. dQ d dR g d d  d. d  d dH d% d dS dT dE d? d d, d) dK d% d- d dU g d d! d/ d d
 dI d5 dO dT dV dQ dT dW d; dX d$ dH dY d; dR g d d" d0 d5 d d$ d5 dP dE dQ dZ dH d5 d2 d d[ d9 d
 d\ d- g d d# d1 d8 d d d3 d; d? dT dH d] d d^ d% d, dE dH d\ d5 g d d$ d2 d9 d@ d dK d d dW d5 d dV d dK d_ d d d* d` g d d  d3 d: dA d dL d d, d; d2 d^ d da d d dM d d> d/ g d d# d4 d dB d0 d3 d d) dX d d% dK d db dc dR dW dP d\ g d d% d d% dC d dM d dK d$ d[ d, d_ d dc d3 d d2 dW d$ g d d& d  d dD d% d4 d. d% dH d9 dE d dM dR d dd d d" de g d d d5 d; d d d& dQ d- dY d
 dH d d dW d2 d df dg dW g d d' d6 d< dE d< d$ d d d; d\ d\ d* d> dP dW d" dg dh dK g d d d d dF d" d  dR dU dR d- d5 d` d/ d\ d$ de dW dK di g g Z dj dK d  dK d  dc d% dK d  d  dK d  d  d  d  dK d. d% d% dc d  dK d  g dK dj dc dj d. d d  d% d d% d dc dE dK d% d  d% d% d d d  dc d g d  dc d d dc dK dc dc dK dc dK dK dK d dc d d  d  d  d dK dc dc g dK dj d d^ d d d  d  d d  d d d d  d% dK d% d  d d d  dc d. g d  d. dc d d+ dc dc d% d d. dc dK d% d  d d% d  d  dc dc d  dK dj g dc d dK d dc d^ d d  d% d d. d% d d d dc dc dK d  d. dK dE d g d% d  dc d  dc d d^ dK d dK d dc d% dK dK dc d% dK d dc dK dc dK g dK d% dc d  d% d  dK d? d d% dc d  d. dK d. d% d  dK d dc d  d d% g d  d dK d d d% d d dj dc d d dc dc dc d dc d  dE dc d  d  dc g d  d% dc d  d. d dK d% dc d+ dc dK d% d  d d d% d  dc dc d  dK d. g dK d dK d dc d. d dc d dc dj d d d dK dc dc d  d. dK d  d  dc g d  dc dK d dK d% dc d  d dK d d, dK dc d% dK dK d  d. d  d  d% d  g d  dE dK d d% d d% d. dc d% d dK d, dK d% d  d. d% dc d d  dK d% g d  dK d d  d  d dK dK dc d  d dc dK d? d  dc d  d  dc d dK dc d  g d  d% dc d% d d dK d. dc d dK d% d% d  d, d. d% d  dc d  d  d  dE g dK d  d dK d% dc dc d% d d dc dK d  dc d. d, d  d  dc dc d  d  d% g d. d% d  d% d  dc d% d  dc d% dc dK d. d  d% d  dj d dK d d  dK d% g d% d% d  d  d  dK dK dK d  d  d  d  d% d  d  d  d dj d% dc d% dK d  g d% d d  d dc d  d d dE dc d. d. dc dc dc dc dK d% dj dc d  d  dc g dc d d d dc d. dc dc dc dc dK d  d d d  dc d dc dc dk dc d dK g d  d  dK d  d  dK dK d  d  d  d  d  d  dK d  d  d  d% d  dc d  d  d  g dK dc dc dc dK dE dc d d  dK d  d% dK dc d  d  dK dK d  d d  d^ dK g d  d dc d. dj d dK d% dc d. dc d  d% d  dE d% d% d  dc dK d  dK dj g g Z dl dm dn do dp dq dr ds dt du dv dw dx dy dz d{ d| d} d~ d g Z dE d% dK d  dK d% dK d  d  d  d  dK d  d  d  d. d% d% dc dK g d% d_ dc d dK dc dc d  dc d  d  dc dc dc dc d  d  d  dK dK g dK dc d+ d dc d  d  dc d  d dc d. d  d% dK d% d  dc d dc g d  d d dj dc dK d% dc d. dc dK d% d  d d% d% d  dK dc dK g dK dK dc dc d+ dc d  d% dc d% d% dc d dc dc dK dK d  d. d g d% dc d  dK dc d+ dK d dK d dc d% dK dK dK d% dK dc dK dc g dK dc d  d% d  dK d^ dc d  dc dK d. dK d% d% d  dK dc dK d g d  d  dc dc d% d dc dE dc d d. dc dc dc dc dK d  d dc d  g d  dc d  d. dc dK d  dc dj dK d  d% d  d. d d% d  dK dc dK g d  d  d dc d% d dc d dK dE d dc dc dK dK dK d  d. dK d  g d  d  dc dK d% dc dK d. d  d dj dK dK d% d  d  d  d. d  d  g dK dc d. d% dc d% d. dc d% dc dK d+ dK d% d% d. d% dc d dK g d  dc d  d  d dK dK dc d  dc dK dK d, d  dK d  d  dK d dc g d  dc d% d dc dK d% dc d. dK d% d% d  dj d. d% d  dK dK d  g d  dc dK d% dc dK d% dc d dK d  d% dK d. dj d  d  dc dc dK g d. d  d% d% dK d% d  dK d% dK d  d. d  d% d  dE d. dK dc dK g d% d  d  d  dK dK dK d  d  d  d  d% d  d  d  d. dj d% dK dK g d% d  dc dK d  dc dc d dK d. d. dc dK dK dc dK d% dE dc d  g dc dK d dc d. dK dK dc dc dK d  d d dK dc dc dK dc d d g dK dK dc dK d dc d d  dK d  d  dK dc d  dK dK dK d  d d, g g Z dM Z d€ „  Z d� „  Z d‚ „  Z dƒ „  Z d„ „  Z d… „  Z d† e
 j f d‡ „  ƒ  YZ dˆ e f d‰ „  ƒ  YZ dŠ „  Z e d‹ k rÎe ƒ  e ƒ  e ƒ  n  d S(Œ   iÿÿÿÿ(   t   divisionN(   t   flext   mmtbx_alignment_ext(   t   adopt_init_argst   alignc           B   se   e  Z d  d d d d „ Z d „  Z d „  Z d d d „ Z d d „ Z d „  Z d	 „  Z	 d
 „  Z
 RS(   t   globali   t   identityc      	   C   s  | d k s t  ‚ | d  k s* | d k r3 t } nL | d k rH t } n7 | d k r] t } n" t | t ƒ r t d | ƒ ‚ n  | j ƒ  } | j ƒ  } t	 |  t
 ƒ  ƒ | | } } t | ƒ t | ƒ f \ }	 }
 \ |  _ |  _ |  j |	 d |
 d ƒ } |  j |	 d |
 d ƒ } |  j |	 d |
 d ƒ } |  j |	 d |
 d ƒ } | d k rÅx3 t d	 |	 d ƒ D] } |  j | ƒ | | d	 <qjWx6 t d	 |
 d ƒ D] } |  j | ƒ | d	 | <q Wn  xt d |	 d ƒ D]ý} xôt d |
 d ƒ D]ß} | d k r/| | d | |  j d ƒ | | | <n@ t | | d | |  j d ƒ | | d | | ƒ | | | <| d k r¥| | | d |  j d ƒ | | | <n@ t | | | d |  j d ƒ | | | d | ƒ | | | <t | | d | d | | | d | | d ƒ | | | | | | ƒ | | | <| d k rjt | | | d	 ƒ | | | <n  | | | | | | k r—d | | | <qó| | | | | | k rÄd
 | | | <qód	 | | | <qóWqÙW| | | | f \ |  _ |  _ |  _ |  _ d  S(   NR   t   localt   no_end_gapsR   t   dayhofft   blosum50s!   Unknown similarity_function: "%s"i   i    iÿÿÿÿ(   R   R   R   (   t   AssertionErrort   NoneR   R	   R
   t
   isinstancet   strt   RuntimeErrort   upperR   t   localst   lent   mt   nt   make_matrixt   ranget   gap_costt   maxt   Mt   Dt   It   E(   t   selft   seq_at   seq_bt   stylet   gap_opening_penaltyt   gap_extension_penaltyt   similarity_functiont   At   BR   R   R   R   R   R   t   it   j(    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/alignment.pyt   __init__C   sT    			.   *@ *@W "  c         C   s   |  j  | |  j S(   N(   R!   R"   (   R   t   width(    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/alignment.pyR   ~   s    c         C   s5   g  } x( t  | ƒ D] } | j d g | ƒ q W| S(   Ni    (   t   xranget   append(   R   R   R   t   RR&   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/alignment.pyR   �   s    c   	      C   s¾   | d  k r t j } n  | d  k	 r1 | | IJn  x# d |  j D] } | d | Iq? W| Jd |  j } xO t | ƒ D]A \ } } | d | | Ix | D] } | d | Iqš W| Jqu Wd  S(   Ns     s   %5ct    s   %5.1f(   R   t   syst   stdoutR   R   t	   enumerate(	   R   t   datat   labelt   outt   at   seqR&   t   rowt   x(    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/alignment.pyt   show_matrix‡   s       c         C   sa   xZ d |  j  f d |  j f d |  j f d |  j f g D]" \ } } |  j d | d | ƒ q7 W|  S(   NR   R   R   R   R1   R2   (   R   R   R   R   R8   (   R   R3   R2   R1   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/alignment.pyt   show_matrices“   s    c         C   s!   |  j  ƒ  \ } } |  j | | S(   N(   t   endptR   (   R   R&   R'   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/alignment.pyt   score›   s    c         C   s¹  |  j  d k r |  j |  j f S|  j  d k rÌ |  j d d d d } } } xr t |  j d ƒ D]] } xT t |  j d ƒ D]? } |  j | | | k r{ |  j | | | | } } } q{ q{ Wqa W| | f S|  j d d d d } } } x] t |  j d ƒ D]H } |  j } |  j | | | k rÿ |  j | | | | } } } qÿ qÿ Wx] t |  j d ƒ D]H } |  j } |  j | | | k r_|  j | | | | } } } q_q_W| | f Sd  S(   NR   R   i    i   (   R    R   R   R   R*   (   R   t   bestt   iit   jjR&   R'   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/alignment.pyR:   Ÿ   s&     *
	 &	 &c         C   s2  |  j  |  j |  j |  j f \ } } } } |  j |  j } } g  } | j } |  j ƒ  \ }	 }
 |  j d k r“x§ |	 d k r|
 d k r| |	 |
 d k r³ | d ƒ |
 d 8}
 qp | |	 |
 d k rÞ | d ƒ |	 d 8}	 qp | |	 |
 d k rp | d ƒ |	 d 8}	 |
 d 8}
 qp qp Wx$ |	 d k r=| d ƒ |	 d 8}	 qWx$ |
 d k rd| d ƒ |
 d 8}
 qAWt	 t
 |  j ƒ ƒ t	 t
 |  j ƒ ƒ } } nÚ |	 |
 } } x£ | |	 |
 d k rE| |	 |
 d k râ| d ƒ |
 d 8}
 q£| |	 |
 d k r| d ƒ |	 d 8}	 q£| |	 |
 d k r£| d ƒ |	 d 8}	 |
 d 8}
 q£q£Wt	 |	 | d ƒ t	 |
 | d ƒ } } | j ƒ  d j | ƒ } g  g  } } g  g  } } d \ } } xC| D];} | d k r| | }	 | d 7} | j |	 ƒ | j |  j |	 ƒ | j d  ƒ | j d	 ƒ q³| d k ru| j d  ƒ | j d	 ƒ | | }	 | d 7} | j |	 ƒ | j |  j |	 ƒ q³| d k r³| | }	 | d 7} | j |	 ƒ | j |  j |	 ƒ | | }	 | d 7} | j |	 ƒ | j |  j |	 ƒ q³q³Wt d
 |  j d d j | ƒ d d j | ƒ d | d | d | ƒ S(   NR   i    iÿÿÿÿR&   i   t   dR   t    t   -R#   R4   t   bt   i_seqs_at   i_seqs_bt   match_codes(   i    i    (   R   R   R   R   R   R   R+   R:   R    R   R   R   R   t   reverset   joinR   t	   alignmentR#   (   R   R   R   R   R   R   R   RE   t   mcapR&   R'   t   Ft   Gt   pt   qt   sat   sbt   iat   ibt   ut   vR4   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/alignment.pyt   extract_alignment´   sŽ    *	 
  
  
 
  
  
 . 
  
  
 
 '








	N(   t   __name__t
   __module__R(   R   R   R   R8   R9   R;   R:   RT   (    (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/alignment.pyR   A   s   5				RH   c        	   B   sw   e  Z d  „  Z d d d „ Z d „  Z d d „ Z d d „ Z d d „ Z d d d d d	 d
 d e	 d „ Z
 d „  Z RS(   c         C   s   t  |  t ƒ  ƒ d  S(   N(   R   R   (   R   R#   R4   RB   RC   RD   RE   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/alignment.pyR(   ÷   s    i    c         C   sŸ   | d  k r |  j } n  g  } | j } xh t |  j |  j ƒ D]Q \ } } | | k rb | d ƒ q= | | | ƒ | k r„ | d ƒ q= | d ƒ q= Wd j | ƒ S(   Nt   |t   *R-   R@   (   R   R#   R+   t   zipR4   RB   RG   (   R   R#   t   is_similar_thresholdt   resultt   apR4   RB   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/alignment.pyt   matchesþ   s    	"c         C   s   |  j  d t ƒ S(   NR#   (   R]   R   (   R   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/alignment.pyt   identity_matches  s    c         C   s   |  j  d t d | ƒ S(   NR#   RZ   (   R]   R	   (   R   RZ   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/alignment.pyt   dayhoff_matches  s    	c         C   s   |  j  d t d | ƒ S(   NR#   RZ   (   R]   R
   (   R   RZ   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/alignment.pyt   blosum50_matches  s    	c         C   sŸ   t  | ƒ } | j d ƒ d } } xU t |  j |  j ƒ D]> \ } } | | k r9 | d 7} | | k rw | d 7} qw q9 q9 W| d k s“ | d k r— d S| | S(   s,  
    Returns fractional sequence identity, defined here as the number of matches
    between the aligned sequences divided by the number of valid residues in
    the first sequence.  The optional argument skip_chars may be used to
    pass over null residues (e.g. 'X' for a gap in a PDB chain).
    RA   i    i   g        (   t   listR+   RY   R4   RB   (   R   t
   skip_charst	   n_matchest   n_totalR4   RB   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/alignment.pyt   calculate_sequence_identity  s    
"
i   i   t	   referencet   queryc	         C   sö  | d  k r |  j ƒ  } n  | d  k r3 t j } n  | d d d !}	 | d d d !}
 d } d } xQ t | ƒ D]C } x0 t | ƒ D]" } | d 7} | d | d 7} q� W| d 7} qn W| J| J| d  k	 rÖ | | IJn  | rñ | d	 | IJ| Jn  t } t |  j ƒ } d } xã| sñ| | | } | |	 d Ixx t | ƒ D]j } | | | } | | d | } | | k ry| } n  | | k  r>|  j | | !} | | Id
 Iq>q>W| J| d Ixu t | ƒ D]g } | | | } | | d | } | | k r| } n  | | k  rÇ| | | !} | | Id
 IqÇqÇW| d 7} | J| |
 d Ixx t | ƒ D]j } | | | } | | d | } | | k r–| } n  | | k  r[|  j | | !} | | Id
 Iq[q[W| J| J| | | | k rt	 } qqW| S(   NR-   i   i    R@   i   s   %si
   s        s                 s      s                s           s           (
   R   R]   R.   R/   R*   t   FalseR   R4   RB   t   True(   R   R]   R3   t
   block_sizet   n_blockt   top_namet   bottom_namet   commentt
   show_rulert   top_strt   bot_strt   rulert   countR=   R>   t   doneR   t   offsett   startt   stopt   tmp(    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/alignment.pyt   pretty_print-  sx    	  
		
	
	c         C   sª   t  j ƒ  } t  j ƒ  } x… t |  j |  j |  j |  j ƒ D]b \ } } } } | | k r: | d k r: | d  k	 rœ | d  k	 rœ | j | ƒ | j | ƒ qœ q: q: W| | f S(   NRA   (   RA   N(	   R   t   size_tRY   R4   RB   RC   RD   R   R+   (   R   t   i_seqst   j_seqsR4   RB   R&   R'   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/alignment.pyt   exact_match_selections{  s    4N(    (   RU   RV   R(   R   R]   R^   R_   R`   Re   Ri   Ry   R}   (    (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/alignment.pyRH   õ   s   		Fi   iìÿÿÿi   iÝÿÿÿi   iòÿÿÿiûÿÿÿiôÿÿÿiíÿÿÿiõÿÿÿi   i   iüÿÿÿiñÿÿÿi   iÆÿÿÿiw   iÍÿÿÿiËÿÿÿiÕÿÿÿiÞÿÿÿiéÿÿÿiÊÿÿÿiÄÿÿÿiÌÿÿÿiÜÿÿÿiäÿÿÿi    iêÿÿÿi²ÿÿÿi'   i"   iÈÿÿÿi   i   ièÿÿÿi   iØÿÿÿiæÿÿÿi   iöÿÿÿi   ióÿÿÿiëÿÿÿi¼ÿÿÿi&   i   iúÿÿÿi   iîÿÿÿiºÿÿÿi[   iÐÿÿÿi
   iÒÿÿÿiÑÿÿÿiÓÿÿÿiàÿÿÿiáÿÿÿi   iF   i0   iïÿÿÿi×ÿÿÿiA   iþÿÿÿi   iøÿÿÿi-   i   i   i%   i÷ÿÿÿi/   iãÿÿÿiÔÿÿÿi;   içÿÿÿiâÿÿÿi   i@   iðÿÿÿiÖÿÿÿi   i   i	   iÏÿÿÿi(   i=   iýÿÿÿi   iåÿÿÿi+   iÂÿÿÿi­   ie   i   i   R$   t   CR   R   RJ   RK   t   HR   t   Kt   LR   t   Nt   Pt   QR,   t   St   Tt   Vt   Wt   Yc         C   s   t  |  | k ƒ S(   N(   t   int(   R4   RB   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/alignment.pyR   å  s    c         C   sM   d } | j  |  ƒ | j  | ƒ } } | d k s= | d k rA d St | | S(   Nt   ACDEFGHIKLMNPQRSTVWYiÿÿÿÿi    (   t   findt   dayhoff_mdm78_similarity_scores(   R4   RB   t   AAsR&   R'   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/alignment.pyR	   è  s
     c         C   sM   d } | j  |  ƒ | j  | ƒ } } | d k s= | d k rA d St | | S(   Nt   ABCDEFGHIKLMNPQRSTVWXYZiÿÿÿÿi    (   RŒ   t   blosum50_similarity_scores(   R4   RB   RŽ   R&   R'   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/alignment.pyR
   î  s
     c         C   sC   y" t  j |  ƒ } t  j | ƒ } Wn t k
 r6 d SXt | | S(   Ni    (   t   amino_acid_codest   indext
   ValueErrort   blosum62_similarity_scores(   t   leftt   rightt
   index_leftt   index_right(    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/alignment.pyt   blosum62ô  s    c          C   sL   d d l  m }  x5 t t g D]' } |  j | ƒ j d d ƒ s t ‚ q Wd  S(   Niÿÿÿÿ(   R   t   relative_epsilongVçž¯Ò<(   t   scitbx.array_familyR   R�   R�   t   doublet   matrix_is_symmetricR   (   R   R   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/alignment.pyt   exercise_similarity_scoresÿ  s    c          C   ss  d d l  m }  d } d } t | | ƒ } | j ƒ  d | j ƒ  GH| j ƒ  } | j GH| j GH| j ƒ  GH| j	 GHd } d j
 ƒ  } t | | d d	 d
 d d t d d ƒ} d GHd | j ƒ  GH| j ƒ  } | j GH| j GH| j ƒ  GH| j	 GH|  | j ƒ  d ƒ s
t ‚ d } d } t | | d d	 d
 d d d d d ƒ} d GHd | j ƒ  GH| j ƒ  } | j GH| j GH| j ƒ  GH| j	 GH|  | j ƒ  d ƒ s›t ‚ d } d } t | | d d d
 d d t d d ƒ} d GHd | j ƒ  GH| j ƒ  } | j GH| j GH| j ƒ  GH| j	 GH|  | j ƒ  d ƒ s,t ‚ d } d } t | | d d d
 d d d d d ƒ} d GHd | j ƒ  GH| j ƒ  } | j GH| j GH| j d t d d ƒ GH| j	 GH|  | j ƒ  d ƒ sÉt ‚ H| j d d  d d  d  d! d" d# d$ d% d& d' d( d) ƒ d* } d+ } t | | d t ƒ} | j ƒ  } | j d, k s@t ‚ | j d- k sUt ‚ | j	 d+ k sjt ‚ d. GHd  S(/   Niÿÿÿÿ(   t   approx_equalt   AAAGGTTt   AAATTs
   score=%.1ft|   AESSADKFKRQHMDTEGPSKSSPTYCNQMMKRQGMTKGSCKPVNTFVHEPLEDVQAICSQGQVTCKNGRNNCHKSSSTLRITDCRLKGSSKYPNCDYTTTDSQKHIIIACDGNPYVPVHFDASVtz   DNSRYTHFLTQHYDAKPQGRDDRYCESIMRRRGLTSPCKDINTFIHGNKRSIKAICENKNGNPHRENLRISKSSFQVTTCKLHGGSPWPPCQYRATAGFRNVVVACENGLPVHLDQSIFRRPR!   i–   R"   i   R#   R    R   s(   
1rra vs. 1bli; GLOBAL allignment; mdm78g·e¥I)Õ?R	   R   s'   
1rra vs. 1bli; LOCAL allignment; mdm78gÅÊ¦\áÕ?i
   i   s+   
1rra vs. 1bli; GLOBAL allignment; blosum50gÌ²'�Í9×?R
   s*   
1rra vs. 1bli; LOCAL allignment; blosum50RZ   i    g¹DkE›×?R]   R3   Rj   i2   Rk   i   Rl   t   1rraRm   t   1bliRn   s   pretty_print is pretty prettyt1   GTLIRVTPEQPTHAVCVLGTLTQLDICSSAPXXXTSFSINASPGVVVDIt<   GPLGSPEFMAQGTLIRVTPEQPTHAVCVLGTLTQLDICSSAPEDCTSFSINASPGVVVDIt<   iiiiiiiiiiimmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmms<   -----------GTLIRVTPEQPTHAVCVLGTLTQLDICSSAPXXXTSFSINASPGVVVDIt   OK(   t   libtbx.test_utilsRŸ   R   R9   R;   RT   RE   R4   R^   RB   t   lowerR	   R_   Re   R   R
   R]   Ry   R   R   (   RŸ   R$   R%   t   objRH   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/alignment.pyt   exercise  s�    
''''	t   pairwise_globalc           B   s   e  Z d  „  Z RS(   c         C   s2   | j  ƒ  } | j  ƒ  } t j j |  | | ƒ d  S(   N(   R   t   extR®   R(   (   R   t   seq1t   seq2(    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/alignment.pyR(   f  s    (   RU   RV   R(   (    (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/alignment.pyR®   e  s   t   pairwise_global_wrapperc           B   s   e  Z d  „  Z d d „ Z RS(   c   	      C   sL  |  j  } |  j } t | ƒ t | ƒ k s0 t ‚ d } d } d } t } g  } g  } xë | d 7} | t | ƒ k rw Pn  | | d k r” | d 7} n  | | d k r± | d 7} n  | | d k r9| | d k r9| s| j | | d g ƒ | j | | d g ƒ t } q?| d d c d 7<| d d c d 7<qW t } qW | | f S(   Niÿÿÿÿi   RA   (   t   result1t   result2R   R   Rh   R+   Ri   (	   R   t   a1t   a2t   ptr0t   ptr1t   ptr2t   in_an_aligned_ranget   overall_ranges1t   overall_ranges2(    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/alignment.pyt$   range_matches_from_aligned_sequencesm  s4    		  
    		c         C   sð   |  j  } |  j } t | ƒ t | ƒ k s0 t ‚ d } d } t | ƒ } | j d ƒ xh t t | ƒ ƒ D]T } | | | k rh | | | k rh | d 7} | | | | k r¼ | d 7} q¼ qh qh W| d k sØ | d k rÜ d St | ƒ t | ƒ S(   Ni    RA   i   (   R³   R´   R   R   Ra   R+   R   t   float(   R   Rb   Rµ   R¶   t   n_aligned_residuest
   n_matchingR&   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/alignment.pyRe   �  s    		 
(    (   RU   RV   R½   Re   (    (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/alignment.pyR²   k  s   	 c          C   sà   d }  d } t  |  | j ƒ  ƒ } | j d k s6 t ‚ | j d k sK t ‚ t |  | ƒ } | j ƒ  d d g d d g d	 d
 g d
 d g g d d g d d g d d g d d g g f k sÀ t ‚ d | j ƒ  d k sÜ t ‚ d  S(   Nt   THEQUICKBOWNFOXJUMPSOVETHELAZYt   QUICKBRWNFXJUMPSVERTH3LAZYDOGs"   THEQUICKBOWNFOXJUMPSOVE-THELAZY---s"   ---QUICKBRWNF-XJUMPS-VERTH3LAZYDOGi   i   i   i   i   i   i   i    i
   i   i   i   i   s   %.2fs   0.92(   R®   R«   R³   R   R´   R²   R½   Re   (   R°   R±   t   pg(    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/alignment.pyt   exercise_extž  s    	]t   __main__(    t
   __future__R    t   scitbx.array_family.flext   scitbxR›   R   t   boost.pythont   boostt   pythont
   import_extR¯   t   libtbxR   R.   t   objectR   RH   R�   R�   R‘   R”   t   gap_penaltyR   R	   R
   R™   Rž   R­   R®   R²   RÄ   RU   (    (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/alignment.pyt   <module>   sÒ    ´’???????????????????EHHHHHHHHHHHHHHHHHHHHHHN	???????????????????E						a3	