ó
šxTc           @   s  d  d l  m Z d  d l Z d  d l Z d  d l m Z d  d l m Z d e f d „  ƒ  YZ	 d e f d „  ƒ  YZ
 d	 e f d
 „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d d d „ Z d „  Z d „  Z d „  Z e j j d ƒ Z d Z d Z d „  Z d „  Z d S(   iÿÿÿÿ(   t   divisionN(   t   rsam(   t   outputt   SequenceModelCorrespondencec           B   s;   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s*   
    Keep together sequence and model
    c         C   sÉ   | j  ƒ  |  _  t g  t |  j  ƒ D]! \ } } | j j ƒ  | f ^ q" ƒ |  _ d d l m } | j d | ƒ |  _ | |  _	 t
 j d |  j  d |  j	 d |  j j d |  j j ƒ  d |  j j ƒ |  _ d  S(	   Niÿÿÿÿ(   t   mmtt   chaint   residuest   sequencet   consecutivityt   one_letter_fort   unknown(   t   residue_groupst   dictt	   enumeratet   resseqt   stript   rg_index_fort   phaserR   t	   determineR   R   t   align_residues_to_sequenceR   R	   t   unknown_one_lettert	   alignment(   t   selfR   R   t   indext   rgR   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyt   __init__   s    :				c         C   s   |  j  | S(   N(   R   (   R   R   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyt   residue_group_identified_with!   s    c         C   s*   |  j  |  j d | ƒ |  j d | ƒ d !S(   NR   i   (   R   R   (   R   t   startt   stop(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyt   residue_group_segment&   s    c         C   s4   y |  j  j | ƒ } Wn t k
 r/ d  } n X| S(   N(   R   R   t
   ValueErrort   None(   R   t   residue_groupR   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyt   sequence_position_for/   s
    
c         C   sƒ   g  |  j  d | d | ƒ D] } |  j d | ƒ ^ q } g  | D] } | d  k	 r> | ^ q> } | sf g  St t | ƒ t | ƒ d ƒ S(   NR   R   R    i   (   R   R!   R   t   ranget   mint   max(   R   R   R   R   t   posist   pt   known_posis(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyt   sequence_segment:   s    4%(   t   __name__t
   __module__t   __doc__R   R   R   R!   R(   (    (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyR   	   s   					t   SequenceRemapInfoc           B   s&   e  Z d  Z d „  Z e d „  ƒ Z RS(   sK   
    Contains data to remap ChainSequenceSelections to other sequences
    c         C   s®   t  | ƒ t  | ƒ k r$ t d ‚ n  |  j d | d | ƒ } |  j d | d | ƒ } t | ƒ d |  _ t g  t | | ƒ D]$ \ } } | d  k	 rz | | f ^ qz ƒ |  _ d  S(   Ns   Unequal sequence lengthsR   t   gap_chari   (	   t   lenR   t   number_sequenceR$   t   other_lengthR   t   zipR   t   other_resseq_for(   R   t   seq_fromt   seq_tot   gapt
   n_seq_fromt   n_seq_tot   ft   t(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyR   K   s    c         C   sG   d d  l  } | j ƒ  } g  |  D]$ } | | k r= | j ƒ  n d  ^ q S(   Niÿÿÿÿ(   t	   itertoolst   countt   nextR   (   R   R-   R:   t   counterR&   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyR/   Y   s    (   R)   R*   R+   R   t   staticmethodR/   (    (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyR,   F   s   	t   SegmentedSequencec           B   sƒ   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z d
 „  Z d „  Z d „  Z d „  Z RS(   s1   
    A sequence that is in multiple segments
    c         C   s"   | s t  ‚ | |  _ d |  _ d  S(   Ni    (   t   AssertionErrort   segmentst	   i_current(   R   RA   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyR   f   s    	c         C   s   |  j  |  j S(   N(   RA   RB   (   R   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyt   currentm   s    c            sC   t  ‡  f d †  t ˆ  j ƒ Dƒ ƒ } | | t ˆ  j ˆ  j ƒ f S(   Nc         3   s"   |  ] } t  ˆ  j | ƒ Vq d  S(   N(   R.   RA   (   t   .0t   i(   R   (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pys	   <genexpr>t   s    (   t   sumR"   RB   R.   RA   (   R   t   edge(    (   R   sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyt   current_statsr   s    %c         C   s,   |  j  d } | d k  r g  S|  j | Sd  S(   Ni   i    (   RB   RA   (   R   R   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyt   leftx   s    c         C   s5   |  j  d } t |  j ƒ | k r& g  S|  j | Sd  S(   Ni   (   RB   R.   RA   (   R   R   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyt   rightƒ   s    c         C   s   t  t j |  j ƒ S(   N(   t   reducet   operatort   addRA   (   R   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyt   mergedŽ   s    c         C   s   |  j  d k S(   Ni    (   RB   (   R   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyt   at_left_edge“   s    c         C   s   |  j  t |  j ƒ d k S(   Ni   (   RB   R.   RA   (   R   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyt   at_right_edge˜   s    c         C   s"   |  j  ƒ  s |  j d 7_ n  d  S(   Ni   (   RP   RB   (   R   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyt   forward�   s    c         C   s"   |  j  ƒ  s |  j d 8_ n  d  S(   Ni   (   RO   RB   (   R   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyt   backward£   s    c         C   sC   |  j  ƒ  s? |  j ƒ  j |  j ƒ  ƒ |  j |  j =|  j ƒ  n  d  S(   N(   RO   RI   t   extendRC   RA   RB   RR   (   R   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyt
   merge_left©   s    c         C   s=   |  j  ƒ  s9 |  j ƒ  j |  j ƒ  ƒ |  j |  j d =n  d  S(   Ni   (   RP   RC   RS   RJ   RA   RB   (   R   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyt   merge_right±   s    c         C   s=   |  j  ƒ  } x* t | ƒ D] \ } } | | ƒ | | <q Wd  S(   N(   RC   R   (   R   t   transformationRC   R   t   value(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyt	   transform¸   s    (   R)   R*   R+   R   RC   RH   RI   RJ   RN   RO   RP   RQ   RR   RT   RU   RX   (    (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyR?   a   s   												t   ChainSequenceSelectionc           B   sû   e  Z d  Z d „  Z e d „  ƒ Z e d „  ƒ Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z RS(   sB   
    Allows selecting sequence stretches based on residue ids
    c         C   s   | |  _  t ƒ  |  _ d  S(   N(   R;   t   sett
   iselection(   R   R;   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyR   Å   s    	c         C   s5   g  t  |  j ƒ D]! } | |  j k r+ t n t ^ q S(   N(   R"   R;   R[   t   Truet   False(   R   RE   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyt	   selectionË   s    c         C   s   |  j  S(   N(   R;   (   R   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyt   chain_lengthÑ   s    c         C   s   |  j  d |  j d |  j ƒ S(   NR;   R[   (   t   from_iselectionR;   R[   (   R   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyt   copy×   s    c         C   s   |  j  j | ƒ d  S(   N(   R[   RM   (   R   t   position(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyt   insertÜ   s    c         C   s   |  j  j | ƒ d  S(   N(   R[   t   remove(   R   Rb   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyRd   á   s    c         C   s%   x | D] } |  j  d | ƒ q Wd  S(   NRb   (   Rc   (   R   t   segmentR   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyRM   æ   s    c         C   s%   x | D] } |  j  d | ƒ q Wd  S(   NRb   (   Rd   (   R   Re   R   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyt   deleteì   s    c         C   s[   g  |  j  D] } | j | ^ q
 } |  j d | j d g  | D] } | d  k	 r< | ^ q< ƒ S(   NR;   R[   (   R[   R2   R`   R0   R   (   R   t
   remap_infoRE   t   raw(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyt   remapò   s    #		c         C   s(   |  j  d |  j d |  j j | j ƒ ƒ S(   NR;   R[   (   R`   R;   R[   t   intersection(   R   t   other(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyt   overlap_withü   s    		c         C   s(   |  j  d |  j d |  j j | j ƒ ƒ S(   NR;   R[   (   R`   R;   R[   t
   difference(   R   Rk   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyt   difference_from  s    		c         C   sM   t  j d t |  j ƒ d d „  ƒ } g  | D] } t | ƒ t | ƒ f ^ q+ S(   NR   R   c         S   s   |  | d k S(   Ni   (    (   RI   RJ   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyt   <lambda>  s    (   R   t   splitt   sortedR[   R#   R$   (   R   RA   t   s(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyRA     s    	c         C   s4   |  j  d |  j d t t |  j ƒ ƒ j |  j ƒ ƒ S(   NR;   R[   (   R`   R;   RZ   R"   Rm   R[   (   R   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyt
   complement  s    		c         C   s   t  |  j ƒ S(   N(   R.   R[   (   R   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyt   __len__  s    c         C   sb   |  j  ƒ  } g  } x@ t | d d ƒD], \ } \ } } | j d | | | f ƒ q% Wd j | ƒ S(   NR   i   s   Segment %s: %s - %ss   
(   RA   R   t   appendt   join(   R   RA   t   linest   i_segt   lowert   upper(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyt   __str__#  s
    %c         C   sU   |  d t  | j ƒ ƒ } x6 | D]. } | j d | j d | j d | j ƒ ƒ q W| S(   NR;   Re   R   R   (   R.   R   RM   R(   t	   pdb_startt   pdb_stop(   t   clst   smcRA   t   cssRe   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyt   from_segments.  s    			c         C   s4   |  d | ƒ } x | D] } | j  d | ƒ q W| S(   NR;   Rb   (   Rc   (   R~   R;   R[   R€   t   posi(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyR`   >  s    c         C   sO   |  d t  | ƒ ƒ } x3 t | ƒ D]% \ } } | r" | j d | ƒ q" q" W| S(   NR;   Rb   (   R.   R   Rc   (   R~   R^   R€   R‚   t   is_selected(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyt   from_selectionI  s
    c             sO   |  s t  d ‚ n  |  d j ‰  t ‡  f d †  |  d Dƒ ƒ rK t  d ‚ n  ˆ  S(   Ns   No selections for mergingi    c         3   s   |  ] } ˆ  | j  k Vq d  S(   N(   R;   (   RD   Rr   (   R;   (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pys	   <genexpr>]  s    i   s   Incompatible selections(   R   R;   t   any(   t
   selections(    (   R;   sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyt   commonU  s     c         G   sI   |  j  d |  j | Œ  d | d j j g  | d D] } | j ^ q0 Œ  ƒ S(   NR;   R[   i    i   (   R`   R‡   R[   t   union(   R~   R†   Rr   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyRˆ   c  s    	c         G   sI   |  j  d |  j | Œ  d | d j j g  | d D] } | j ^ q0 Œ  ƒ S(   NR;   R[   i    i   (   R`   R‡   R[   Rj   (   R~   R†   Rr   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyt   overlapn  s    	(   R)   R*   R+   R   t   propertyR^   R_   Ra   Rc   Rd   RM   Rf   Ri   Rl   Rn   RA   Rs   Rt   R{   t   classmethodR�   R`   R„   R>   R‡   Rˆ   R‰   (    (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyRY   À   s,   							
			
			t   MergingStatisticsc           B   s    e  Z d  Z d „  Z d „  Z RS(   sE   
    Simple statistics on how many times a position was selected
    c         C   sR   i  |  _  xB | D]: } x1 | j D]& } |  j  j | d ƒ d |  j  | <q  Wq Wd  S(   Ni    i   (   t	   stats_forR[   t
   setdefault(   R   R†   Rr   R   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyR   ~  s    	c         C   s  | |  j  k r |  j  | St g  |  j  D] } | | k  r' | ^ q' d g ƒ } t g  |  j  D] } | | k  r\ | ^ q\ d g ƒ } | d k r  | d k r  d S| d k r· |  j  | S| d k rÎ |  j  | Sd | | | | |  j  | | | |  j  | Sd  S(   Ni    g      ð?(   R�   R$   R#   (   R   t   keyt   kt   belowt   above(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyt   __getitem__‡  s    55(   R)   R*   R+   R   R“   (    (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyRŒ   y  s   		i   i   c         C   s|  t  d t t j d |  j d d „  ƒ ƒ ƒ } x6| j ƒ  se| t | j ƒ  ƒ k rd | j ƒ  q0 n  | j	 ƒ  } | j
 ƒ  } | j ƒ  } t | ƒ d k r¬ | t | ƒ k sÐ t | ƒ d k rý | t | ƒ k rý | j d d „  ƒ | j ƒ  | j ƒ  q0 n  t | ƒ | k  rX| t | ƒ t | ƒ k rX| j d d „  ƒ | j ƒ  | j ƒ  q0 n  | j ƒ  q0 Wt j d	 | j ƒ  ƒ S(
   NRA   R   R   c         S   s
   |  | k S(   N(    (   RI   RJ   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyRo   ¥  s    i    RV   c         S   s   |  S(   N(    (   Rr   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyRo   µ  s    c         S   s   |  S(   N(    (   Rr   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyRo   ¼  s    R^   (   R?   t   listR   Rp   R^   RP   R.   RC   RQ   RI   RJ   RX   RT   RU   RY   R„   RN   (   t   domaint   shortt   longRA   RI   RJ   RC   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyt   polishŸ  s0    		
H

.

c         C   sì   t  d | j ƒ  d d | ƒ } t d | j d d | j d d | j ƒ } g  } x” g  |  j j j D]$ } | j j	 ƒ  | j
 k rd | ^ qd D]X } t j d | d	 | j ƒ }	 |	 j d
 | ƒ }
 t |
 ƒ | k  r× qŒ n  | j |
 ƒ qŒ W| S(   NR   i   R   R3   R4   i    R5   R   RA   Rg   (   R   t   sequence_stringsR,   t
   alignmentsR5   t   roott   queryt   domainst
   chain_codeR   t   idRY   R�   RA   Ri   R.   Ru   (   t
   annotationR   R   t   min_domain_lengthR   t   sriR�   t   dt   domR€   R^   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyt   map_domains_on_targetÆ  s    	Ac      	      s]  |  s t  ‚ t t j |  g  ƒ } t | ƒ d k r? | g } n7 d d l m } | j d | d t ƒ } | j	 | ƒ } g  | D] } | d t
 j | Œ  ƒ ^ q} } t t t j g  t | | ƒ D]+ \ } }	 g  | D] }
 |
 |	 f ^ qÐ ^ q½ ƒ ƒ } t ƒ  } x8 |  D]0 } | j t g  | D] }
 | |
 ^ qƒ ƒ qWt g  t | | ƒ D]! \ }	 } |	 t d | ƒ f ^ qKƒ } g  } xÛ | D]Ó } t
 j | Œ  } g  | D] }
 |
 | |
 f ^ qž} xp | j D]e ‰  t | d ‡  f d	 †  ƒd
 } x= g  | D] }
 |
 | k ró|
 ^ qóD] } | j d ˆ  ƒ qWqÄWt
 j | Œ  j ƒ  } | j | | f ƒ q‚W| S(   Ni   iÿÿÿÿ(   t   clustert   datat   distance_functionR•   R†   R�   c            s   |  d ˆ  S(   Ni   (    (   R&   (   t   pos(    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyRo     s    i    Rb   (   R@   RK   RL   RM   R.   t   libtbxR¦   t   HierarchicalClusteringt   domain_clustering_distancet   getlevelRY   Rˆ   R   R1   RZ   t	   frozensetRŒ   R‰   R[   R$   Rd   Rs   Ru   (   t   assignmentst   cluster_radiust   polish_functiont   singlest   levelsR¦   t   clt   lt	   polishedst   mR£   t
   domain_fort   alternativesR�   R�   t   resultsR‰   t   statst   bestR•   t   missing(    (   R©   sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyt   average_domain_definitionsß  s@    		(G	.7#,c         C   sO   d t  |  j d | ƒ ƒ d t t  |  j d | ƒ ƒ t  | j d |  ƒ ƒ ƒ S(   Ng      ð?Rk   i   (   R.   Rl   R#   Rn   (   RI   RJ   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyR¬     s     s­  
    input
        .help = "Input files"
    {
        sequence = None
            .help = "Target sequence"
            .type = path
            
        homology = None
            .help = "Homology search performed with target sequence"
            .type = path
            .multiple = True
            
        max_hits = 3
            .help = "Number of hits to extract from homology search"
            .type = int
            .optional = False
    }
    
    configuration
        .help = "Calculation parameters"
    {
        min_domain_length = 10
            .help = "Minimum number of residues in a domain to include in calculations"
            .type = int
            .optional = False
            
        cluster_radius = 0.2
            .help = "Distance between domains to be identified as equivalent"
            .type = float
            .optional = False
            
        polish_short = 5
            .help = "Short segment length for polish algorithm"
            .type = int
            .optional = False
            
        polish_long = 15
            .help = "Long segment length for polish algorithm"
            .type = int
            .optional = False
    }
    t   domain_analysiss   0.0.1c         C   s  d d l  m } | j d t j d d ƒ ƒ g  } d d l m } d d l m } y | j	 ƒ  Wn  t
 k
 r‚ } | d | ‚ n Xxž | D]– }	 | j d	 | j d
 |	 j ƒ j ƒ }
 |
 sÇ |
 j ƒ  rí | j d d |	 j |	 j f ƒ qŠ n  | j d d |	 j |	 j f ƒ | j |	 |
 f ƒ qŠ W| j d d t | ƒ ƒ | sP| d ‚ n  | j d t j d d ƒ ƒ d d l m } d d l m } m } y | j	 ƒ  Wn  t
 k
 rÂ} | d | ‚ n X| j d | d | d | j j d d ƒ ƒ ƒ } | j ƒ  } d d l m } g  } xL| D]D\ }	 }
 y+ | j d |	 d | d | d | j ƒ } Wn9 t
 k
 rŽ} | j d d |	 j |	 j | f ƒ qn X|	 j j ƒ  } t  j! d |  d | d d ƒ t" d |
 d | d  | j# ƒ  d j$ ƒ  d d! | j% ƒ } t | ƒ d k r*| j d d" |	 j |	 j f ƒ qn  | j d d# |	 j |	 j t | ƒ f ƒ | j | ƒ qW| sv| d$ ‚ n  | j d t j d d% ƒ ƒ d d  l& } t' d& | d' | j( d( | j) t* d) | j+ d* | j, ƒƒ } | j d d+ t | ƒ ƒ | j t j- ƒ  ƒ xt. | d, d- ƒD]í \ } \ } } | j d t j/ d d. | t | ƒ f ƒ ƒ | j0 ƒ  x^ t. | d, d- ƒD]J \ } } | j d d/ | ƒ | j0 ƒ  | j d t1 | ƒ ƒ | j2 ƒ  qrW| j d d0 ƒ | j0 ƒ  | j d t1 | ƒ ƒ | j2 ƒ  | j2 ƒ  qW| S(1   Niÿÿÿÿ(   t   Sorryt   msgt   texts(   Downloading domain annotations from CATH(   t   homology(   t   caths	   Error: %sR§   t
   identifiers%   No annotation available for hit %s_%ss   Downloaded annotation for %s_%ss"   There are %s annotations availables   No domain annotations availables-   Mapping domain annotations to target sequence(   t   proxy(   t   ParameterizedProxyt   dbfetchRÆ   t   paramst   formatt   pdb(   t   expertt   hitt   redirectionst   streams   Could not fetch %s_%s: %sR   R   R   i    R    R   R¡   s(   %s_%s: no domains map on target sequences   %s_%s: %s domains mappeds-   No domain annotations map on target structures   Domain analysisR¯   R°   R±   R–   R—   s+   Alternative domain decompositions found: %sR   i   s   %s. possibility: %s domainss
   Domain %s:s   Not annotated:(3   t   libtbx.utilsRÀ   t   infoR   t
   underlinedt   phaser.pipelineRÃ   t   phaser.pipeline.proxyRÄ   t   checkt   RuntimeErrort   parse_cath_xmlt   fetchRÅ   R§   t   emptyR   Ru   R.   R   RÆ   RÇ   RÈ   t   PDBFetcht   QueryParamst   PDBt   get_pdb_redirectionsRÌ   t   download_homology_hit_modelt   verboseR   Ra   R   t   alignment_stichR¥   t   modelst   chainsR¡   t	   functoolsR¾   R°   t   partialR˜   t   polish_shortt   polish_longt   blankR   t   headingt   indentt   strt   dedent(   R   t   hitsRÉ   t   loggerRÀ   R¯   RÃ   RÄ   t   eRÍ   t   annRÆ   RÇ   RÈ   RË   t   pdb_redirectionsRÌ   R�   R›   R   t	   acceptedsRã   t   decompositionsR   R½   t   i_domR¤   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyt   processP  sÈ    													%		



c      	   C   sÔ  t  j d | d | ƒ } | j d t  j d d t t f ƒ ƒ d d l m } | j d t	 ƒ } d d	 l
 m } | j d
 | j d d d g d d ƒ ƒ | j d
 | j d | j ƒ  d d ƒ ƒ x |  D] } | j d | ƒ qÇ Wd d l m } y | j ƒ  }	 Wn t k
 r}
 | |
 ‚ n X| j d t  j d d ƒ ƒ | j d |	 j ƒ  ƒ y |	 j ƒ  } Wn t k
 r€}
 | |
 ‚ n X| j j d  k rŸ| d ‚ n  | j j s·| d ‚ n  g  } xu | j j D]g } | j j d | ƒ } t | j j ƒ  ƒ | j j   } | j d d t! | ƒ | f ƒ | j" | ƒ qÊW| j# j d | j j ƒ } t! | j ƒ d k rx| d | j$ ‚ n/ d t! | j ƒ k  r§| j% d d | j$ ƒ n  t d | j d d | d | j& d | ƒ d  S(    NRÏ   t   levelRÁ   RÂ   s   %s version %siÿÿÿÿ(   t	   tbx_utilst   master_phil(   t   bioinformaticst   handlert
   extensionss   .xmls   .hhrt   templates   input.homology=%ss   input.sequence=%st   accumulator(   RÀ   s   All configuration options:s   No target sequence defineds   No homology searches definedt	   file_names   Extracted %s hits from %si    s   No sequences found in %si   s+   Multiple sequences found in %s, using firstR   Rì   RÉ   Rí   ('   R   t   SingleStreamRÑ   t   bannert   PROGRAMt   VERSIONR   Rö   t   PhilAccumulatort   master_paramst   iotbxRø   t   register_file_handlert   ExtensionFileHandlert   known_sequence_formatsRô   RÐ   RÀ   t   mergeRÖ   RÒ   t   as_strt   extractt   inputR   R   RÃ   t   HomologySearchObjectt	   from_fileR”   t   objectRì   t   max_hitsR.   RS   t   SequenceObjectt   namet   warningt   configuration(   t   argst   outt	   verbosityRí   Rö   Rü   Rø   t   argumentRÀ   t   merged_philRî   RÉ   Rì   t   fnamet   fobjectt   foundt   sobject(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyt   runé  s`    			
		
 		(   t
   __future__R    RL   t   libtbx.philRª   R   R   R   R  R   R,   R?   RY   RŒ   R˜   R¥   R¾   R¬   t   philt   parseR  R   R  Rô   R  (    (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/domain_analysis.pyt   <module>   s&   =_¹&'		7		+		™