3
bDW                 @   s8  d dl mZ d dlZd dlZd dlZd dlmZmZmZm	Z	 d dl
mZ d dlmZmZmZmZ d dlmZ d dlmZ d dlmZ d d	lmZ eejZd
d ZdddddddddddddgZdZejd ZedZ dZ!ee!Z"ej#Z$dddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.gZ%d/d0d1d2gZ&d3d4d5d6gZ'd7d8d9d:d;d<d=d>gZ(d?d@ Z)dAdB Z*d|dCdDZ+dEdF Z,dGdH Z-dIdJ Z.dKdL Z/dMdN Z0d}dOdPZ1dQdR Z2dSdT Z3dUdV Z4dWdX Z5dYdZ Z6d[d\ Z7d]d^ Z8d_d` Z9d~dadbZ:dcdd Z;dedf Z<dgdh Z=didj Z>dkdl Z?dmdn Z@dodp ZAdqdr ZBdsdt ZCdudv ZDdwdx ZEddzd{ZFdS )    )with_statementN)existsabspathbasenamejoin)defaultdict)	reportingqconfigqutilsplotter_data)
json_saver)secondary_line_style)jsontemplate)
get_loggerc             C   s   t jjtjd| S )N
html_saver)ospathr   r	   LIBS_LOCATION)Zrelpath_in_html_saver r   J/home/psgendb/BIRCHDEV/pkg/quast-5.2.0/quast_libs/html_saver/html_saver.pyget_real_path   s    r   z#FF0000z#0000FFz#008000z#A22DCCz#FFA500z#800000z#00CCCCz#B2DF8Az#333300z#CCCC00z#000080z#008080z#00FF00Fz.htmlztemplate.htmlZstaticzstatic/jquery-1.8.2.min.jszstatic/flot/jquery.flot.min.jszstatic/flot/excanvas.min.jsz!static/flot/jquery.flot.dashes.jsz&static/scripts/draw_cumulative_plot.jszstatic/scripts/draw_nx_plot.jszstatic/scripts/draw_gc_plot.jszstatic/scripts/draw_frc_plot.jszstatic/scripts/utils.jszstatic/scripts/hsvToRgb.jsz!static/scripts/draw_genes_plot.jszstatic/dragtable.jszstatic/ie_html5.jsz3static/bootstrap/bootstrap-tooltip-5px-lower.min.jsz!static/bootstrap/bootstrap.min.jsz*static/bootstrap/bootstrap-tooltip-vlad.jsz%static/scripts/build_report_common.jsz+static/scripts/build_total_report_common.jsz$static/flot/jquery.flot.tickrotor.jsz static/flot/jquery.flot.stack.jsz'static/scripts/draw_metasummary_plot.jsz+static/scripts/draw_meta_misassembl_plot.jszbootstrap/bootstrap.cssz
common.cssz
icarus.cssz
jquery.csszd3.jszjquery-1.8.2.min.jszjquery-ui.jszbootstrap/bootstrap.min.jszscripts/build_icarus.jszscripts/display_icarus.jszscripts/icarus_interface.jszscripts/icarus_utils.jsc             C   s2   t jrdtt| j  d S dt|  d S d S )Nz <script type="text/javascript">
z
</script>
z$<script type="text/javascript" src="z"/></script>
)r	   portable_htmlopenr   read)Zscript_rel_pathr   r   r   js_html]   s    r   c             C   s2   t jrdtt| j  d S dt|  d S d S )Nz<style rel="stylesheet">
z

</style>
z<link rel="stylesheet" href="z"/>
)r	   r   r   r   r   )Zcss_rel_pathr   r   r   css_htmld   s    r   c             C   sR  t t>}|j }g }x*tD ]"}tjr2d|kr2q|jt| qW |jddj	|}|r|jdtd}|jdtd}|jddj	d	d
 t
D }n,|jdtd}|jdtd}|jdd}|jdtd}|jdtd}|jdtd}|jdt tdj }tjj| r$tj|  t | d}|j| W d Q R X W d Q R X d S )NZdraw_gc_plotz{{ allscripts }}
z{{ buildreport }}z#static/scripts/build_report_meta.jsz{{ buildtotalreport }}z)static/scripts/build_total_report_meta.jsz{{ metascripts }}c             S   s   g | ]}t |qS r   )r   ).0Zaux_meta_filer   r   r   
<listcomp>x   s    zinit.<locals>.<listcomp>zstatic/scripts/build_report.jsz$static/scripts/build_total_report.js z{{ bootstrap }}z"static/bootstrap/bootstrap.min.cssz{{ common }}zstatic/common.cssz{{ report }}zstatic/report.cssz{{ glossary }}zglossary.jsonw)r   template_fpathr   	aux_filesr	   no_gcappendr   replacer   aux_meta_filesr   r   r   r   r   removewrite)
html_fpathis_metaZtemplate_filehtmlZscript_textsZaux_f_rel_pathf_htmlr   r   r   initk   s.    

r-   c             C   s`   t | }|j }W d Q R X tj||ddd id}t|}t |d}|j| W d Q R X d S )Nr   c             S   s
   dj | S )Nz, )r   )vr   r   r   <lambda>   s    z"save_icarus_html.<locals>.<lambda>)Zmore_formattersr    )r   r   r   expand_embed_css_and_scriptsr(   )r!   r)   Z	data_dictfr+   r,   r   r   r   save_icarus_html   s    
 r3   c             C   s  d}d}d}d}d}d}x|t ||f|t||fgD ]\}}}	}
x|D ]}t|rbt|}t|}nttt|jd }t|sqD|| }|	| }tj	rt
|D}|j }djd	d
 |jdD }| j||d | d |
 } W d Q R X qD|j||}| j||} qDW q2W | S )Nz1<script type="text/javascript" src="%s"></script>z)<script type="text/javascript" name="%s">z    </script>z3<link rel="stylesheet" type="text/css" href="%s" />z2<style type="text/css" rel="stylesheet" name="%s">z    </style>/r   c             s   s   | ]}d| V  qdS )    Nz        r   )r   lr   r   r   	<genexpr>   s    z)_embed_css_and_scripts.<locals>.<genexpr>)icarus_js_filesicarus_css_filesr   r   r   r   static_dirpathsplitr	   r   r   r   r%   )r+   Zjs_line_tmplZjs_l_tagZjs_r_tagZcss_line_tmplZ	css_l_tagZ	css_r_tagZ	line_tmplfilesZl_tagZr_tagZ	rel_fpathfpathlineZl_tag_formattedr2   contentsZline_formattedr   r   r   r1      s4    



(r1   c             C   sf   t jj|sd S t|}|j }W d Q R X tjd| d | |}t|d}|j| W d Q R X d S )Nz{{ z }}r    )r   r   isfiler   r   resubr(   )Ztext_to_insertkeywordr)   r,   	html_textr   r   r   insert_text_icarus   s    
rF   c             C   s4   t | dkr0t| d@ }| d d d t| } | S )N2   l    _)lenhashstr)ref_nameZref_hashr   r   r   trim_ref_name   s    rM   c             C   sN   t | }|j }W d Q R X tjdd|}t | d}|j| W d Q R X d S )Nz{{(\s+\S+\s+)}}r   r    )r   r   rB   rC   r(   )r)   r,   rE   r   r   r   
clean_html   s
    
rN   c             C   s   |d krt jj| t}t jj|s*t| t|}|j }W d Q R X tj	rZt
j|tj t j| t|}|j }W d Q R X tjd| d ||}t|d}|j| W d Q R X |S )Nz{{ z }}r    )r   r   r   report_fnamerA   r-   r   r   r	   	save_jsonshutilcopyjson_output_dirpathr'   rB   rC   r(   )results_dirpath
json_fpathrD   r)   Zf_json	json_textr,   rE   r   r   r   r$      s    


r$   c             C   s   t jj| t}t|dd |S )NT)r*   )r   r   r   rO   r-   )rT   r)   r   r   r   init_meta_report   s    rW   c       	      C   s   t jj| t}t jj|s&t|dd ddlm} |j}t	t
j}|rTt||| | t|}|j }W d Q R X d}tjd| d dd	j| d
 |}tjdd|}t|d}|j| W d Q R X |jd|  d S )NT)r*   r   )search_references_metatotalReportz{{ z }}[,]z{{(\s+\S+\s+)}}z{}r    zR  Extended version of HTML-report (for all references and assemblies) is saved to )r   r   r   rO   rA   r-   
quast_libsrX   taxons_for_kronar   r	   LOGGER_META_NAMEcreate_krona_chartsr   r   rB   rC   r(   	main_info)	rT   
json_textsr)   rX   r^   meta_logr,   rE   rD   r   r   r   create_meta_report   s     

$rd   c             C   s$   t j| ||}|r t| |dt _d S )NrY   )r   save_empty_reportr$   rV   )rT   
min_contig	ref_fpathrU   r   r   r   re     s    re   c             C   s<   t j| ||}|r8t| |dt _tjdtjj| t	  d S )NrY   z:  HTML version (interactive tables and plots) is saved to )
r   save_total_reportr$   rV   loginfor   r   r   rO   )rT   rf   rg   rU   r   r   r   rh     s    rh   c             C   sn   t | dZ}t |dD}x<|D ]4}|jddkrHtjddtj d |}|j| qW W d Q R X W d Q R X d S )	Nrr    Zassemblies_links   z../contigs_reports/z../z/contigs_reports/)r   findrB   rC   r	   combined_output_namer(   )r)   Zhtml_top_fpathtemplateresultr?   r   r   r   copy_meta_alignment_viewers  s    
rr   c             C   s"  t jj| tjtj}t jj| tj}tt}t jj|sBt j	| |d j
tj |d j
tj t jj|tj}t jj|tj}tj|| x|t|D ]p\}}t|}	t|dkrt jj|tjd }
t jj|
rtj}	t jj||	d }t jj||	d }t|| qW t jj| tjtj}t jj| tj}t|d}t|d}d}x|D ]}|jddkrjd}|jd	dkrd
|krd|krd|krtjd|d }d|krtjd|rtjd|d }|jdd}||krd}|sR|j| qRW W d Q R X W d Q R X t| | |S )NlinksZlinks_namesrl   z.htmlrk   r    Fz</tr>z<a href="icarus_viewerszQUAST reportzContig sizezContig alignmentz<a.*>(.*)<\/a>r   tooltipztitle="(.+)"r5   rH   Trm   rm   )r   r   r   r	   ro   icarus_dirnamer   listisdirmkdirr$   icarus_html_fnameicarus_linkcontig_size_viewer_fnamerQ   rR   	enumeraterM   rI   one_alignment_viewer_namer   rr   r   rn   rB   findallr%   r(   save_icarus_links)rT   	ref_namesZcombined_ref_icarus_dirpathZicarus_dirpathicarus_linksZcontig_size_fpathZcontig_size_top_fpathindexref	html_nameZone_alignment_viewer_fpathZicarus_ref_fpathZicarus_top_ref_fpathZicarus_menu_fpathZicarus_menu_top_fpathrp   rq   Zskipping_trr?   rL   r   r   r   create_meta_icarus%  sL    

.
$
r   c             C   sH  |j d tjjtjd}tjj|tj}ydd l}W n@ tk
rv   ydd l	}W n tk
rp   |j
d d S X Y nX tjj|stj| |j|d }|d }d}	tjj|d|	 }
t|
d}x4t|D ](\}}ttjj|||	 d}|j  qW xz|d	d  D ]h}|j|}|d
 }|s,q
g }|d }xF|D ]>}|rJP x.|d	 D ]"}|d tjjkrT|d }P qTW q>W |sq
d |krdd |D }|d }xt|D ]v\}}tjj|||	 }t|dJ}|| kr|jt|| d | |  d  n|jt|| d  W d Q R X qW || kr\|jtt|d | |  d  n|jtt|d  q
W |j  g }tjj|d}tjj|d}t|dj  t|dj  xt|D ]\}}tjj||d }tjj|||	 }tjdd|d |d |d|gt|dt|dd}|dkrF|j
d| d|   n0|jtjjtj|d  |jd| d |  tjstj| qW t|d	kr&d }tjj||d }tjdd|d |d |
d|gt|dt|dd}|dkr|j
d!|  n(|jd"|  |jtjjtj|d  tjs8tj|
 t||| d S )#Nz$  Drawing interactive Krona plots...Z
kronatoolsr   z:Can't draw Krona charts - please install python-simplejsonZassembliesNamesz_taxonomy.txtZoverallr    rl   ZreferenceNamereport
metricNamevaluesc             S   s   g | ]}|d k	r|ndqS )Nr   r   )r   r7   r   r   r   r   u  s    z'create_krona_charts.<locals>.<listcomp>a	r   z	krona.logz	krona.errz_taxonomy_chart.htmlZperlz-Iz/libz/scripts/ImportText.plz-o)stdoutstderrz3Error occurred while Krona was processing assembly z%. See Krona error log for details: %sz  Krona chart for z is saved to summaryzZError occurred while Krona was building summary chart. See Krona error log for details: %sz"  Summary Krona chart is saved to )rj   r   r   r   r	   r   krona_dirnamejsonImportErrorZ
simplejsonwarningrw   rx   loadsr   r|   closer   FieldsTOTAL_ALIGNED_LENr(   rK   sumr
   call_subprocessr$   ra   debugr'   rI   save_krona_paths)r^   rc   rT   rb   Zkrona_dirpathZkrona_res_dirpathr   Z	json_data
assembliesZkrona_txt_extZkrona_common_fpathZkrona_common_filer   nameZ
krona_filerV   rL   lengthsr   sectionmetricZcur_assembliesZkrona_fpathZf_kronakrona_fpathsZkrona_log_fpathZkrona_err_fpathZkrona_txt_fpathreturn_coder   r   r   r`   N  s    







$&
$




r`   c             C   s&   t j| ||||}|r"t| || d S )N)r   
save_coordr$   )rT   coord_xcoord_y
name_coordcontigs_fpathsrU   r   r   r   r     s    r   c                s   |rlt jj| t}t|}|j }W d Q R X tjdd|}tjdd|}t|d}|j| W d Q R X njdd	 |D }fd
d	|D  dd	  D }dd	 |D }	t	| d|	  fdd	t
|D }
t	| d|
 d S )Nz{{ colorsz }}Zstandard_colorsZbroken_scaffoldsz[]r    c             S   s   g | ]}t j|qS r   )r
   label_from_fpath)r   contigs_fpathr   r   r   r     s    zsave_colors.<locals>.<listcomp>c                s   g | ]} | qS r   r   )r   Zcontig_label)dict_colorsr   r   r     s    c             S   s   g | ]}|d  qS )r   r   )r   Zcolor_and_lsr   r   r   r     s    c             S   s   g | ]}t tjj| qS r   )html_colorsr   r   r   )r   colorr   r   r   r     s    c                s$   g | ]\}} | d  t kr|qS )rl   )r   )r   ilabel)colors_and_lsr   r   r     s    z	{{ colorsz{{ colors }}z{{ broken_scaffoldsz{{ broken_scaffolds }})r   r   r   rO   r   r   rB   rC   r(   save_recordr|   )rT   r   r   metar)   r,   rE   Zcontig_labelsr   Zcolors_for_htmlZbroken_contig_namesr   )r   r   r   save_colors  s    
r   c             C   sB   |j dd}|j dd}tj||||||}|r>t||||  d S )Nz_(%)r   #num)r%   r   save_meta_summaryr$   )r)   rT   r   r   r   labelsrefsrU   r   r   r   r     s
    r   c       	      C   sJ   d}dd |D }dd |D }t j||||||}|rFt||||  d S )NZallMisassembliesc             S   s   g | ]}|r|d  ndqS )r   Nr   )r   coordr   r   r   r     s    z+save_meta_misassemblies.<locals>.<listcomp>c             S   s   g | ]}|r|d  ndqS )rl   Nr   )r   r   r   r   r   r     s    )r   save_meta_misassembliesr$   )	r)   rT   Zcoordsr   r   r   Zcoords_xZcoords_yrU   r   r   r   r     s    r   c             C   s"   t j| ||}|rt| || d S )N)r   r   r$   )rT   filenamerecordrU   r   r   r   r     s    r   c             C   s    t j| |}|rt| |d d S )NZreferenceLength)r   save_reference_lengthsr$   )rT   reference_lengthsrU   r   r   r   r     s    r   c             C   s    t j| |}|rt| |d d S )NZtickX)r   save_tick_xr$   )rT   Ztick_xrU   r   r   r   r     s    r   c             C   s"   t j| ||}|rt| |d d S )NZcontigsLengths)r   save_contigs_lengthsr$   )rT   r   lists_of_lengthsrU   r   r   r   r     s    r   c             C   s"   t j| ||}|rt| |d d S )NZassembliesLengths)r   save_assembly_lengthsr$   )rT   r   Zassemblies_lengthsrU   r   r   r   r     s    r   c             C   s*   t j| ||||}|r&t| ||d  d S )NZ	InContigs)r   save_features_in_contigsr$   )rT   r   Zfeature_namefeature_in_contigsZref_feature_numrU   r   r   r   r     s    r   c             C   s&   t j| ||||}|r"t| |d d S )NZgcInfos)r   save_GC_infor$   )rT   r   list_of_GC_distributions list_of_GC_contigs_distributionsreference_indexrU   r   r   r   r     s    r   c             C   s"   t j| ||}|rt| |d d S )NZkrona)r   r   r$   )rT   r   r   rU   r   r   r   r     s    r   c             C   s    t j| |}|rt| |d d S )Nicarus)r   r   r$   )rT   r   rU   r   r   r   r     s    r   Tc             C   s   | rt j| ||| d S )N)r   save_icarus_data)rT   Zicarus_datarD   Zas_textr   r   r   r     s    r   )F)N)F)T)G
__future__r   r   rQ   rB   os.pathr   r   r   r   collectionsr   r]   r   r	   r
   r   quast_libs.html_saverr   Zquast_libs.plotterr   Z%quast_libs.site_packages.jsontemplater   quast_libs.logr   LOGGER_DEFAULT_NAMEri   r   r   Zscripts_insertedreport_prefixrO   r!   Zstatic_dirnamer;   html_aux_dirZaux_dirnamer"   r&   r:   r9   r   r   r-   r3   r1   rF   rM   rN   r$   rW   rd   re   rh   rr   r   r`   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s   


%
	)Y
	