ó
£žbc           @   s  d  d l  m Z d  d l m Z y d  d l m Z Wn! e k
 rW d  d l m Z n Xd  d l m Z m	 Z	 m
 Z
 d  d l m Z d  d l m Z m Z m Z m Z m Z d „  Z d „  Z d	 „  Z d d d d d d d
 „ Z e e d „ Z d „  Z d d d d d d „ Z d „  Z d S(   iÿÿÿÿ(   t   join(   t   defaultdict(   t   OrderedDict(   t   qconfigt   qutilst	   reporting(   t
   html_saver(   t	   Alignmentt   get_html_namet   format_long_numberst   get_misassembly_for_alignmentt   parse_misassembly_infoc         C   s™  t  t ƒ } d } | d 7} | d 7} | d 7} | d 7} | d 7} d } x?|  D]7} t j | ƒ } t j | ƒ }	 |	 j t j j ƒ }
 |	 j t j j	 ƒ } |	 j t j j
 ƒ } | r | t j | ƒ d } t j | | ƒ } | d | d	 | d
 7} n  | d | d t |
 ƒ d 7} | d | d t | ƒ d 7} | d | d	 t | ƒ d
 7} x% | D] } |	 j | ƒ | | | <qgWqQ W| | | f S(   Nt    s   var assemblies_links = {};
s   var assemblies_len = {};
s   var assemblies_contigs = {};
s#   var assemblies_misassemblies = {};
s   var assemblies_n50 = {};
s   .stdouts   assemblies_links["s   "] = "s   ";
s   assemblies_len["s   "] = s   ;
s   assemblies_contigs["s   assemblies_n50["(   R   t   dictR   t   label_from_fpathR   t   gett	   get_fieldt   Fieldst   TOTALLENt   CONTIGSt   N50t   label_from_fpath_for_fnamet   relpatht   str(   t   contigs_fpathst   icarus_dirpatht   stdout_patternt   nx_markst   assemblies_n50t   assemblies_datat   assemblies_contig_size_datat   contigs_fpatht   assembly_labelt   reportt   lt   contigst   n50t   contig_stdout_fpatht   nx(    (    sG   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_builder.pyt   get_assemblies_data   s0    




   c         C   s‰  x‚| D]z} t  | t ƒ r=| j | k r@ | j | j ƒ }	 na | j | k r¡ | j | j ƒ | r¡ | | j }
 | j d | j d t |
 | ƒ d ƒ q¡ n  | j } | j } |  j d t | ƒ d t | ƒ d t | j	 ƒ d t | j
 ƒ d t | j ƒ d	 t | j ƒ d
 | j d | | j d ƒ q t | ƒ t k r t | ƒ \ } } |  j d | d | d ƒ q q W|  S(   Ns   links_to_chromosomes["s   "] = "s   ";s   {corr_start: s   ,corr_end: s   ,start:s   ,end:s   ,start_in_contig:s   ,end_in_contig:s   ,IDY:s   ,chr: "s   "},s   {contig_type: "M", mstype: "s	   ", msg: "(   t
   isinstanceR   t   ref_namet   indext   appendR   t   startt   endR   t   unshifted_startt   unshifted_endt   start_in_contigt   end_in_contigt   idyt   typeR   (   t   data_strt	   structuret   ref_contigst   chr_full_namest   contig_names_by_refst   used_chromosomest   links_to_chromosomest   chr_names_by_idt   elt   num_chrt   other_ref_namet   corr_el_startt   corr_el_endt   ms_descriptiont   ms_type(    (    sG   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_builder.pyt   add_contig_structure_data0   s$    )		„$c
         C   sA  g  }
 |
 j  d ƒ |
 j  d ƒ x| j ƒ  D]ý } |
 j  d | d ƒ |
 j  d | d ƒ |  | } xÀ | | D]´ } | j | k r qr n  |
 j  d | d | j d t | j ƒ d ƒ d | d | j d	 g } | | | j } t | | | | | | | |	 ƒ } | j  d
 ƒ |
 j | ƒ qr Wq- Wd j |
 ƒ }
 |
 S(   Ns   var contig_lengths = {};s   var contig_structures = {};s   contig_lengths["s   "] = {};s   contig_structures["s   "]["s   "] = t   ;s   "] = [ s   ];s   
(   R+   t   keyst   nameR   t   sizeRC   t   extendR    (   t   assemblies_contigst   chr_to_aligned_blockst   contigs_by_assembliesR6   R7   R8   t   structures_by_labelsR9   R:   R;   t   contigs_data_strt   assemblyt   used_contigst   contigR4   t   contig_structure(    (    sG   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_builder.pyt   get_contigs_structureK   s&    
1c   9         s8
  t  |  | ƒ } t |
 | d ƒ } d } | j d ƒ g  } g  } |	 rW | j d ƒ n  d } t ƒ  } t | ƒ d k } | j d t | ƒ j ƒ  d ƒ | j d	 ƒ | j d
 |  d ƒ t t ƒ } t t ƒ } t	 ƒ  ‰ xc| j
 ƒ  D]U} | j d
 |  d | d ƒ t t ƒ ˆ | <t	 d „  | | Dƒ ƒ } xt | ƒ D]\ } } | | | k rCt t ƒ } t | | | d d „  ƒ} d } g  } t j sIx©| D]ž}  | |  j k r'x[| D]S}! |  j |! j k rÀ|! j |  j d k rÀ| |! j d |  j d t |  j ƒ d t |  j ƒ d t |  j ƒ d t |  j ƒ d t |  j ƒ d t |  j ƒ d | |  j d ƒ | |  j d |! j d t |! j ƒ d t |! j ƒ d t |! j ƒ d t |! j ƒ d t |! j ƒ d t |! j ƒ d | |! j d ƒ qÀqÀW| j |  ƒ n	 |  g } t | |  j ƒ } q¤Wn  x| D]ý}  | | c t |  j |  j ƒ d 7<| | j |  j ƒ | |  j }" t }# |  j r7| d 7} t |" |  j |  ƒ \ }$ }% d |$ k rôd |  _ d }% t  }# n. x+ |$ D]# }& |& rûˆ | |& c d 7<qûqûWd j |$ ƒ |  _ n% | |  j j! d k rVt  }# n  d }% g  }' t" |  j |  j ƒ t |  j |  j ƒ }( }) xê | |  j j# D]Ø }* |( |* j k  o¾|) k  n sâ|( |* j k  oÝ|) k  n ržt |  j |  j |* j |( ƒ }+ t" |  j |  j |* j |) ƒ }, d t |* j ƒ d t |* j ƒ d t |+ ƒ d t |, ƒ d  }- |' j |- ƒ qžqžW| j d! |  j d" t |  j ƒ d t |  j ƒ d t |  j ƒ d t |  j ƒ d# |  j d$ |% d% ƒ |  j$ r| d& c d' 7<n  |  j% r!| d& c d( 7<n  |  j& r=| d& c d) 7<n  |# rV| d& c d* 7<n  | j |  j ƒ | |  r§| j d+ ƒ | j d, j | |  ƒ ƒ | j d- ƒ n  t j' rÑ| j d. d, j |' ƒ d- ƒ n  | r;t j( d/ k r;| j d0 ƒ t) | | |  j |  j | | |	 | | | ƒ } | d& d&  d1 | d& <n  | d& d2 | d& <qPWqCqCW| d& d&  d3 | d& <| | }. t | | ƒ }/ ˆ | d4 d5 }0 t* ˆ | j+ ƒ  ƒ ˆ | d6 d5 |0 ˆ | d6 }1 | d7 | d8 t |. ƒ d9 7} | d: | d8 t |/ ƒ d9 7} | d; | d< t |1 ƒ d= t |0 ƒ d> 7} qé W| rX| j, | ƒ n  | rn| j, | ƒ n  | rº| j d? t j r•t t j- ƒ n t t j. ƒ d ƒ | j, | ƒ n  d@ dA dB d6 d4 g }2 t j/ sè|2 j0 d6 ƒ n  t1 ƒ  }3 xR |2 D]J ‰ ˆ d6 k r	d n d5 ‰  t* ‡  ‡ ‡ f dC †  | j
 ƒ  Dƒ ƒ |3 ˆ <qøWt* |3 j+ ƒ  ƒ |3 d4 }4 g  }5 xa |3 j2 ƒ  D]S \ ‰ }6 ˆ }7 |6 d k rª	ˆ d4 k rª	|7 dD 7}7 n  |5 j ˆ |7 t |6 ƒ f ƒ qs	Wt3 | | | | | |	 | | | | ƒ
 }8 |	 r
| j d j | ƒ ƒ n  dE j | ƒ } | | |8 | |5 | | f S(F   Ns   .htmlR   s   var links_to_chromosomes;s   links_to_chromosomes = {};i    i   s   var oneHtml = RD   s   var contig_data = {};s   contig_data["s   "] = {};s   "]["s   "] = [ c         s   s   |  ] } | j  | f Vq d  S(   N(   RF   (   t   .0RP   (    (    sG   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_builder.pys	   <genexpr>}   s    t   keyc         S   s   |  j  S(   N(   R,   (   t   x(    (    sG   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_builder.pyt   <lambda>   s    id   s	   {contig:"s   ",corr_start: s   ,corr_end: s   ,start:s   ,end:s   ,start_in_contig:s   ,end_in_contig:s   ,chr: "s   "}t   unknownt   correct_unaligneds   {start:s   ,corr_start:s
   ,corr_end:t   }s   {name:"s   ",corr_start:s   ,misassemblies:"s   ",mis_ends:"t   "iÿÿÿÿs   ,similar:"True"s   ,ambiguous:"True"s   ,is_best:"True"s   ,more_unaligned:"True"s   ,overlaps:[ t   ,t   ]s   ,genes:[t   alls   ,ambiguous_alignments:[ s   ],s   },s   ];t   locali   s   interspecies translocations   assemblies_len["s   "] = s   ;
s   assemblies_contigs["s   assemblies_misassemblies["s   "] = "t   +s   ";
s   var gc_window_size = t
   relocationt   translocationt	   inversionc         3   s!   |  ] } ˆ | ˆ ˆ  Vq d  S(   N(    (   RS   RN   (   t   factorRB   t   ms_types(    sG   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_builder.pys	   <genexpr>í   s    t   ss   
(4   R   R    R+   t   sett   lenR   t   lowerR   t   intR   RE   t	   enumeratet   listt   sortedR   t   large_genomeR,   RF   R-   R.   R/   R0   R1   R)   t   maxt   abst   addt   labelt   Falset   misassembledR
   t   misassembliest   Truet   contig_typet   mint   genest   similart	   ambiguoust   is_best_sett   gene_findingt   ambiguity_usageRC   t   sumt   valuesRH   t   GC_window_size_larget   GC_window_sizet   is_combined_reft   removeR   t   itemsRR   (9   t   chrR7   R;   R6   R4   RJ   RL   RK   t   ambiguity_alignments_by_labelsR8   t   output_dir_patht   cov_data_strt   physical_cov_data_strt   gc_data_strt	   html_namet   alignment_viewer_fpatht   additional_assemblies_dataR:   R9   t   num_misassembliest   aligned_assembliest   is_one_htmlt   assemblies_lenRI   RN   R#   t
   num_contigt
   ref_contigt   overlapped_contigst
   alignmentst   prev_endt   prev_alignmentst	   alignmentt
   prev_alignRQ   t   contig_more_unalignedRt   t   misassembled_endst   misassemblyRx   R0   R1   t   genet
   corr_startt   corr_endt	   gene_infot   assembly_lent   assembly_contigst   local_misassembliest   ext_misassembliest   misassemblies_typest   ms_counts_by_typet   total_ms_countt   ms_selectorst   ms_countt   ms_namet   contigs_structure_str(    (   Rc   RB   Rd   sG   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_builder.pyt"   prepare_alignment_data_for_one_refb   s    	!		(
‡
Ž	$	
			>  Di			
	!	
6  /0		0 c         C   sô  |  | j  } g  } d  } xe | D]] } | | | | j  k r  | d t | ƒ k sm | | d j  | j  k r  | j | ƒ q  q  Wd j | ƒ } g  | j D]. } d t | j ƒ d t | j ƒ d ^ qš } | rü g  | D] } | | k rÛ | ^ qÛ } n  | rd | d n d } |	 s#| räg  } | r[| | k r[| | } x| | j	 D]} t
 | t ƒ r| j d	 | j	 d
 t | j ƒ d t | j ƒ d t | j ƒ d t | j ƒ d t | j ƒ d t | j ƒ d t | j  ƒ d | j d | j d ƒ qSt | ƒ t k rSt | ƒ \ } } | j d | d | d ƒ qSqSWn  |
 rw| j rwd | _ n  d | j	 d t | j  ƒ | d | j d d j | ƒ d t j rÖd d j | ƒ d n d d } n  | | | | f S(   Ni   s   , s   {start:s   ,end:RY   s
   , marks: "RZ   R   s	   {contig:"s   ",corr_start: s   ,corr_end: s   ,start:s   ,start_in_contig:s   ,end_in_contig:s   ,size:s   ,IDY:s   ,chr:"s   "},s   {contig_type: "M", mstype: "s	   ", msg: "t	   unaligneds   {name:"s   ",size:s   ,contig_type: "s   ",structure:[R\   s   ,genes:[R[   s   },(   RG   t   NoneRg   R+   R    Rx   R   R,   R-   RF   R(   R   R.   R/   R0   R1   R2   R)   R3   R   Rv   R   R|   (   t
   cum_lengthRP   t   not_used_nxR   RN   R#   t   contig_size_linest   numRL   t   only_nxt   has_aligned_contigst
   end_contigt   markst   alignR&   R   Rx   R5   t   assembly_structureR<   RA   RB   (    (    sG   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_builder.pyt
   add_contigÿ   s6    0>(
¢'mc   "      C   s  g  } | j  d ƒ t | ƒ d k } | s | j  d ƒ xb | D]W }	 |	 }
 | rj |	 | k rj | |	 }
 n  t |
 | ƒ }
 | j  d |	 d |
 d ƒ q? Wn  d g } | j  d ƒ g  } d	 } t j } t } | j ƒ  } xË|  D]Ã} | j  d
 | d ƒ d	 } t |  | d d „  d t ƒ} t	 t | ƒ t j
 ƒ } | | d j } g  | D] } | ^ qQ} t | ƒ t j
 k rt } n  xm t | ƒ D]_ \ } } | | k rªPn  t | | | | | | | | | d | ƒ	\ } } } } | j  | ƒ qŽWt | ƒ t j
 k rÿ| } t d „  | | Dƒ ƒ } | | 7} g  | | D]> } | j D]. } d t | j ƒ d t | j ƒ d ^ qHq;} t t | ƒ | ƒ d t | ƒ d t | ƒ d }  | j  d |  d t | ƒ d t j rôd d j | ƒ d n d ƒ n  | r| t | ƒ k  rxe t | | ƒ D]P \ } } | s>Pn  t | | | | | | | | | | d t ƒ	\ } } } } q(Wn  t | | ƒ } | d d  d  | d <qá Wd! j | ƒ } | d" d j | ƒ d  7} | d# t | ƒ d$ 7} | d% t | ƒ d& 7} | d! j | ƒ }! |! | f S('   Ns   var links_to_chromosomes;i   s   links_to_chromosomes = {};s   links_to_chromosomes["s   "] = "s   ";s   var contig_data = {};s   var chromosome;i    s   contig_data["s   "] = [ RT   c         S   s   |  j  S(   N(   RG   (   RU   (    (    sG   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_builder.pyRV   8  s    t   reverseR´   c         s   s   |  ] } | j  Vq d  S(   N(   RG   (   RS   R˜   (    (    sG   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_builder.pys	   <genexpr>H  s    s   {start:s   ,end:RY   s    hidden contigs shorter than s    bp (total length: s    bp)s   {name:"s   ", size:s   , contig_type:"short_contigs"s   ,genes:[R[   s   ]},s   },R³   iÿÿÿÿs   ];

s   
s   var contigLines = [s   var contigs_total_len = s   ;
s   var minContigSize = RD   (   R+   Rg   R   R   t
   min_contigRr   R   Rl   Ru   Rw   t   max_contigs_num_for_size_viewerRG   Rj   R¹   R~   Rx   R   R,   R-   R	   R|   R    Rn   ("   RK   R   R   RL   R8   t	   ref_namesR7   t   additional_datat   one_htmlR)   t   chr_namet   contigs_sizes_strt   contigs_sizes_linest	   total_lent   min_contig_sizet   too_many_contigsR´   RN   R¯   R#   t   last_contig_numt   contig_thresholdR&   R°   t   iR˜   R·   R¡   t   remained_lenRP   R   t   remained_genest   remained_contigs_namet   contig_viewer_data(    (    sG   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_builder.pyt   get_contigs_data!  st    $			
>6+2R   c         C   s³  t  j t j ƒ } t ƒ  } d |  d } d j | ƒ } | d | d 7} t j |  k r˜ | }  |  d t t | ƒ ƒ t | ƒ d k r d n d	 7}  n  |  j	 d
 d ƒ }  | |	 | | | | |
 } d | d <|  | d <d | d | d <g  | d <xC | D]; \ } } } i | d 6| d 6| d 6} | d j
 | ƒ qÿ Wt  j | | | ƒ t  j | |  d ƒ t  j | | d d ƒ t  j | | d d ƒ t  j | | d d d t ƒd  S(   Ns   chromosome = "s   ";
s   ","s   var chrContigs = ["s   "];
s    (i   s	    entries)s    entry)t   _t    s   Contig alignment viewert   titlet	   references   <script type="text/javascript">s	   </script>t   datat   misassemblies_checkboxesRB   Rª   R©   R)   t   data_alignmentst   ms_selectort   as_text(   R   t   get_real_pathR   t   icarus_viewers_template_fnameR   R    t   alignment_viewer_part_nameR   Rg   t   replaceR+   t   save_icarus_htmlt   save_icarus_dataRr   (   RÀ   R6   R)   t   json_output_dirRŒ   R4   R¨   t   ref_datat   features_dataR   R«   R   t   alignment_viewer_template_fpatht	   data_dictt   chr_datat   chromosomest   all_dataRB   Rª   R©   t   checkbox(    (    sG   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_builder.pyt   save_alignment_data_for_one_refa  s,    	9


c         C   s´   t  j t j ƒ } t |  t j ƒ } t ƒ  } d | d <t | d <| rt t t j	 ƒ | d <t  j
 | | d d ƒ n  d | d | d <t  j
 | | d d ƒ t  j | | | ƒ d  S(	   Ns   Contig size viewerRÐ   t   size_viewert   num_contigs_warnings   <script type="text/javascript">s	   </script>RÒ   t
   data_sizes(   R   R×   R   RØ   R    t   contig_size_viewer_fnameR   Ru   R   R¼   RÜ   RÛ   (   t   output_all_files_dir_pathRÝ   RÅ   Rä   t   contig_size_template_fpatht   contig_size_viewer_fpathRá   (    (    sG   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_builder.pyt   save_contig_size_html{  s    	

N(   t   os.pathR    t   collectionsR   R   t   ImportErrort%   quast_libs.site_packages.ordered_dictt
   quast_libsR   R   R   t   quast_libs.html_saverR   t   quast_libs.icarus_utilsR   R   R	   R
   R   R'   RC   RR   R®   R¬   Rr   Ru   R¹   RÍ   Ræ   Rî   (    (    (    sG   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/icarus_builder.pyt   <module>	   s$   (			›!	A