ó
£žbc           @€  s   d  d l  m Z d  d l Z d  d l m Z m Z d  d l m Z d d d „  ƒ  YZ d d d „  ƒ  YZ	 d	 d d
 „  ƒ  YZ
 d d d „  ƒ  YZ d d d „  ƒ  YZ d „  Z d „  Z d e d „ Z d „  Z d „  Z d „  Z e d „ Z d „  Z e d „ Z d „  Z d „  Z e d „ Z d S(    iÿÿÿÿ(   t   with_statementN(   t   qconfigt   qutils(   t   trim_ref_namet	   Alignmentc        
   B€  sY   e  Z d d d d d d d d d d  „	 Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C€  s¯   | |  _  | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ |	 |  _	 |
 |  _
 | |  _ d |  _ t |  _ t |  _ d |  _ d |  _ d |  _ t |  _ d  S(   Ni    t    s   #000000(   t   namet   startt   endt   unshifted_startt   unshifted_endt   is_rct   idyt   start_in_contigt   end_in_contigt   position_in_reft   ref_namet   is_best_sett   ordert   Falset   similart   misassembledt   misassembliest   colort   vPositionDeltat	   ambiguous(   t   selfR   R   R   R	   R
   R   R   R   R   R   R   R   (    (    sE   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_utils.pyt   __init__   s&    																		c         C€  s   |  j  |  j S(   N(   R   R   (   R   (    (    sE   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_utils.pyt   length*   s    c         C€  s)   |  j  d t |  j ƒ d t |  j ƒ S(   Ns   
t   -(   R   t   strR   R   (   R   (    (    sE   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_utils.pyt
   annotation-   s    c         C€  s   |  j  |  j d S(   Ni   (   R   R   (   R   (    (    sE   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_utils.pyt   center0   s    c         C€  sp   | j  |  j  k r t St |  j |  j ƒ } t | j |  j ƒ t j | k oo t | j |  j ƒ t j | k S(   N(   R   R   t   absR   R   R   t   contig_len_delta(   R   t	   alignmentt
   contig_len(    (    sE   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_utils.pyt   compare_inexact3   s
    #c         C€  s(   t  |  j |  j |  j |  j |  j f ƒ S(   N(   t   hashR   R   R   R   R   (   R   (    (    sE   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_utils.pyt   __hash__:   s    N(	   t   __name__t
   __module__t   NoneR   R   R   R    R%   R'   (    (    (    sE   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_utils.pyR      s   					t   Arcc           B€  s   e  Z d  „  Z RS(   c         C€  s   | |  _  | |  _ d  S(   N(   t   c1t   c2(   R   R,   R-   (    (    sE   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_utils.pyR   ?   s    	(   R(   R)   R   (    (    (    sE   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_utils.pyR+   >   s   t   Assemblyc           B€  s/   e  Z d  d „ Z d „  Z d „  Z d „  Z RS(   i    c         C€  s   | |  _  t j | |  _ g  |  _ g  |  _ i  |  _ d } x¿ | D]· } | j | j | k  rc qA n  | d | _	 | d 7} | j
 } | |  j k r¨ t | ƒ |  j | <n  | j rÄ |  j j | ƒ n  |  j j | ƒ |  j | j j t |  j ƒ d ƒ qA Wd  S(   Ni    i   i   (   t   fpathR   t   assembly_labels_by_fpatht   labelt
   alignmentst   misassembled_contig_idst   contigs_by_idsR   R   R   R   t   ContigR   t   appendt   len(   R   t   contigs_fpatht   aligned_blockst   min_visualizer_lengtht   it   blockt   c_id(    (    sE   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_utils.pyR   E   s$    				
		c         C€  s}   | j  ƒ  t j k  r d Sd } x: | t |  j ƒ k  r[ | j |  j | ƒ r[ | d 7} q" W| t |  j ƒ k ru d S| Sd  S(   Niÿÿÿÿi    i   (   R   R   t   min_similar_contig_sizeR7   R2   R%   (   R   R#   R;   (    (    sE   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_utils.pyt   find^   s    /c         C€  s³   x¬ |  j  D]¡ } | j | j | j 7_ | j rg | j sQ | j | j | _ q« | j | j | _ q
 | j | j	 7_ | j s˜ | j
 | j | _ q
 | j | j | _ q
 Wd  S(   N(   R2   R   t   oddStepR   R   R   t   color_misassembledR   t   color_misassembled_similart   goodStept   color_correctt   color_correct_similar(   R   t   settingsR<   (    (    sE   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_utils.pyt   apply_colork   s    			c   
      €  sK  xDˆ  j  D]9} | ˆ  j k r% q
 n  ˆ  j | } t | j d ‡  f d †  ƒ} g  } d } d } d } xz| t | ƒ k  rä| | }	 ˆ  j |	 j } t ˆ  j |	 j ˆ  j |	 j ƒ } x‰ | t | ƒ d k  rEt	 ˆ  j | | j
 ˆ  j | | d j ƒ | j k  rEˆ  j | | j ˆ  j | | d j k rE| d 7} q½ Wˆ  j | | j
 | | j k  rw| d 7} qk n  | j t d | ˆ  j | | j
 | ˆ  j | | j
 ˆ  j | | j | ˆ  j | | j ƒ ƒ | d 7} qk Wd } xU | t | ƒ d k  rB| j j t | | j ƒ  | | d j ƒ  ƒ ƒ | d 7} qîWq
 Wd  S(   Nt   keyc         €  s!   t  ˆ  j |  j ˆ  j |  j ƒ S(   N(   t   minR2   R   R   (   t   x(   R   (    sE   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_utils.pyt   <lambda>‚   s    i    i   R   (   R3   R4   t   sortedR2   R7   R   RI   R   R   R!   R   t   maxBlockGapR   t   minConnectedBlockR6   R   R   t   arcsR+   R    (
   R   RF   R=   t   contigt   sortedBlockst   joinedAlignmentst   currentStartt   currentCStartR;   R<   (    (   R   sE   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_utils.pyt	   draw_arcsz   s8    
#30!
.,1(   R(   R)   R   R?   RG   RU   (    (    (    sE   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_utils.pyR.   D   s   		t
   Assembliesc           B€  s8   e  Z d  d „ Z d „  Z d „  Z d „  Z d „  Z RS(   i    c         C€  sS   g  |  _  | |  _ x: t | ƒ D], \ } } |  j  j t | | | | ƒ ƒ q Wd  S(   N(   t
   assembliest   max_post	   enumerateR6   R.   (   R   t   contigs_fpathst   lists_of_aligned_blocksRX   t   min_visualized_lengthR;   t   c_fpath(    (    sE   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_utils.pyR   ¤   s    			c   
      C€  sÿ  xøt  d t |  j ƒ ƒ D]Þ} d } xÏt  d t |  j | j ƒ ƒ D]®} |  j | j | } | j sn qE n  | j rŽ | j d d } qE n  d } g  t  d t |  j ƒ ƒ D] } d ^ q­ } | | | <x‹ t  d t |  j ƒ ƒ D]q } | | k rú qâ n  |  j | j | ƒ }	 |	 d k râ | j |  j | j |	 j k râ |	 | | <| d 7} qâ qâ W| t	 t |  j ƒ ƒ k  rxqE n  xj t  d t |  j ƒ ƒ D]P } | | }	 |	 d k r³q‘n  t
 |  j | j |	 _ | |  j | j |	 _ q‘W| d d } qE Wq Wd  S(   Ni    i   i   iÿÿÿÿ(   t   rangeR7   RW   R2   R   R   R   R?   R   t   get_similar_thresholdt   True(
   R   R;   R   t	   block_numR<   t   totalt   jjt   sim_block_ids_within_asmt   jt   block_id(    (    sE   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_utils.pyt   find_similar¯   s<    &		+


c         C€  s%   x |  j  D] } | j | ƒ q
 Wd  S(   N(   RW   RU   (   R   RF   t   a(    (    sE   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_utils.pyRU   Ö   s    c         C€  s%   x |  j  D] } | j | ƒ q
 Wd  S(   N(   RW   RG   (   R   RF   Rh   (    (    sE   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_utils.pyt   apply_colorsÚ   s    c         C€  sY   d } xC |  j  D]8 } | j t | j ƒ d j } | | k  r | } q q W| |  _ | S(   Ni    i   (   RW   R2   R7   R   RX   (   R   RX   t   asmt   asm_max_pos(    (    sE   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_utils.pyt   find_max_posÞ   s    	(   R(   R)   R   Rg   RU   Ri   Rl   (    (    (    sE   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_utils.pyRV   £   s
   		'		R5   c           B€  s   e  Z d d  d „ Z RS(   R   c         C€  s:   | |  _  | |  _ g  |  _ | |  _ g  |  _ g  |  _ d  S(   N(   R   t   sizeR2   t   contig_typeRO   t   genes(   R   R   Rm   Rn   (    (    sE   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_utils.pyR   é   s    					N(   R(   R)   R*   R   (    (    (    sE   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_utils.pyR5   è   s   c         C€  s   |  d k r d S|  d S(   Ni   i   (    (   Rb   (    (    sE   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_utils.pyR_   ò   s    c         C€  sY   d j  t g  t t t |  ƒ ƒ ƒ D]- \ } } | | rH | d rH d n d ^ q" ƒ ƒ S(   NR   i   t    (   t   joint   reversedRY   R   (   t   numberR;   RJ   (    (    sE   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_utils.pyt   format_long_numbers÷   s    c         C€  s>   d } t  |  | | | ƒ } | r: | d  k	 r: | j ƒ  n  | S(   Ni    (   RV   R*   Rg   (   RZ   R[   t   virtual_genome_sizeRg   R:   RW   (    (    sE   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_utils.pyt   get_assembliesû   s    	c         C€  s&   t  j j |  ƒ s" t  j |  ƒ n  d  S(   N(   t   ost   patht   existst   makedirs(   t   output_dir_path(    (    sE   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_utils.pyt   make_output_dir
  s    c   
      C€  s$  g  } | j  d | d ƒ | j  d | d ƒ | |  r t | t ƒ rS | |  n | } | j  | d |  d t | ƒ d ƒ | j  | d |  d ƒ d } xX t | |  ƒ D]F \ } }	 | d d	 k râ | j  | ƒ d } n  | t |	 ƒ d
 7} q° W| j  | ƒ | d d  d | d <n  | S(   Ns   var s    = {};s   ["s   "] = t   ;s   "] = [ R   id   i    t   ,iÿÿÿÿs   ];(   R6   t
   isinstancet   dictR   RY   (
   t   chrt   cov_datat   cov_data_namet	   max_deptht   max_depth_namet   datat   chr_max_deptht   lineR;   t   e(    (    sE   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_utils.pyt   format_cov_data  s     
'	c         C€  s#   t  | ƒ d k r t j St |  ƒ S(   Ni   (   R7   R   t   one_alignment_viewer_nameR   (   R   t   chr_full_names(    (    sE   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_utils.pyt   get_html_name"  s    c         C€  sÿ   | r. t  j } t j j t  j | d ƒ } n" t j j t  j t |  ƒ d ƒ } |  j d d ƒ } d }	 t | ƒ d k r— |  d  }
 | }	 |
 d } n  g  | |  D] } | d  k	 r¢ | ^ q¢ } t
 | ƒ d | |  t | ƒ } | |  } | | | | |	 f S(   Ns   .htmlt   _Rp   R   iF   s   ...g      Y@(   R   R‹   Rw   Rx   Rq   t   icarus_dirnameR   t   replaceR7   R*   t   sum(   R   t   aligned_bases_by_chrt	   chr_sizesRZ   t   contig_names_by_refst   one_chromosomet	   html_namet   chr_linkt   chr_namet   tooltipt
   short_namet   aligned_lent   aligned_lengthst
   chr_genomet   chr_size(    (    sE   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_utils.pyt   get_info_by_chr(  s    	"
)"
c   	      C€  sç   | r] t  ƒ  } g  g  |  D] } | | ^ q D]' } | | k r- | j | ƒ pQ | ^ q- } n€ t | j ƒ  ƒ t j k  rŸ t |  ƒ d k rŸ t j | ƒ g } n> t	 ƒ  } |  } x, t
 t |  ƒ ƒ D] } | | | |  | <qÁ W| | f S(   Ni   (   t   sett   addR‘   t   valuesR   t   MAX_SIZE_FOR_COMB_PLOTR7   R   t   name_from_fpathR€   R^   (	   t	   chr_namesR”   t   chromosomes_lengtht	   ref_fpatht
   added_refsRP   t   refRŒ   R;   (    (    sE   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_utils.pyt   group_references:  s    	$*-	c   	      C€  sY  xR|  D]J} | j  s q n  | | j } xT t | ƒ D]F \ } } t | t ƒ r6 | j | j k r| | j | j k r| Pq| q6 q6 Wt } t | | d ƒ t	 k rÜ | | d j
 d ƒ d j ƒ  } t | | ƒ rÜ t } qÜ n  | d t | ƒ k  rHt | | d ƒ t	 k rH| | d j
 d ƒ d j ƒ  } t | | ƒ rHt } qHn  | | _ q W|  S(   Ni   R~   i    (   R   R   RY   R   R   R   R   R   t   typeR   t   splitt   stript   is_misassembly_realR`   R7   R   (	   R9   t   misassembled_id_to_structuret   filter_localR#   t   contig_structuret   num_alignmentt   elR   t   misassembly_type(    (    sE   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_utils.pyt   check_misassembled_blocksI  s(    	$!!c         C€  s¨   |  } d } t  j rB d | k s9 d | k s9 d | k rB d } n\ t | ƒ sž d | k r^ d	 Sd | k rs d } n d | k rˆ d } n  | j d ƒ d } n  | | f S(
   Nt   realt   localt   faket   indelt   skipt   unknownt   :i   (   s   unknowns   unknown(   R   t   large_genomeR®   R¬   (   t   misassemblyt   ms_descriptiont   ms_type(    (    sE   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_utils.pyt   parse_misassembly_info`  s    -			c         C€  s	  d } g  } xf t  |  ƒ D]X \ } } t | t ƒ r | j | j k rq | j | j k rq | j | j k rq Pqq q q Wt } t |  | d ƒ t k r|  | d j	 d ƒ d j
 ƒ  } t | ƒ } | rd | k rÝ d } n  | j | ƒ | j | j k  r	| d 7} q| d 7} qn  | s/| j d ƒ n  t } | d t |  ƒ k  rét |  | d ƒ t k ré|  | d j	 d ƒ d j
 ƒ  } t | ƒ } | réd | k r­d } n  | j | ƒ | j | j k  rÙ| d	 7} qæ| d
 7} qén  | sÿ| j d ƒ n  | | f S(   NR   i   R~   i    R·   t   Lt   RR}   s   ;Rs   ;L(   RY   R   R   R   R   R   R   R«   R   R¬   R­   R®   R6   R   R7   (   R±   R#   t   misassembled_endsR   R²   R³   t   is_misassemblyR´   (    (    sE   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_utils.pyt   get_misassembly_for_alignmentp  sD    6!	!	c         C€  s,   | r d |  k r t  Sd |  k o+ d |  k S(   NR·   R¸   R¹   (   R   (   R´   R°   (    (    sE   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_utils.pyR®   —  s    (    (    (    (    (    (   t
   __future__R    Rw   t
   quast_libsR   R   t    quast_libs.html_saver.html_saverR   R   R+   R.   RV   R5   R_   Rt   R*   R`   Rv   R|   RŠ   R   R   RŸ   Rª   Rµ   RÁ   RÆ   R®   (    (    (    sE   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_utils.pyt   <module>
   s(   ,_E
								'