ó
£žbc           @€  s•  d  d l  m Z d  d l Z d  d l Z d  d l Z d  d l m Z d  d l m Z 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 m Z d  d	 l m Z m Z m Z m Z m Z d  d
 l m Z m Z 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* m+ Z+ e( e j, ƒ Z- d d d „  ƒ  YZ. d „  Z/ d d „ Z0 d d „ Z2 d S(   iÿÿÿÿ(   t   with_statementN(   t   defaultdict(   t   joint   dirname(   t	   reportingt   qconfigt   qutilst   fastaparser(   t   misc(   t   analyze_contigs(   t   Mappingt
   IndelsInfo(   t   ref_labels_by_chromosomest   compile_alignert   create_minimap_output_dirt   close_handlerst   parse_cs_tag(   t   align_contigst   get_aux_out_fpathst   AlignerStatus(   t   print_resultst   save_resultt   save_result_for_unalignedt   save_combined_ref_stats(   t   get_genome_stats(   t
   get_logger(   t
   is_python2t   run_parallelt   CAOutputc           B€  s   e  Z d d d d d  „ Z RS(   c         C€  s1   | |  _  | |  _ | |  _ | |  _ | |  _ d  S(   N(   t   stdout_ft   misassembly_ft   coords_filtered_ft   used_snps_ft   icarus_out_f(   t   selfR   R   R   R    R!   (    (    sI   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/contigs_analyzer.pyt   __init__-   s
    				N(   t   __name__t
   __module__t   NoneR#   (    (    (    sI   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/contigs_analyzer.pyR   ,   s   c         C€  sâ  t  ƒ  } i  } x/ | j ƒ  D]! \ } } d g | d | | <q Wt | d ƒ ]} xS|  j ƒ  D]E\ } }	 x|	 D]}
 |
 j |
 j } } |
 j |
 j k  r¤ d n d } xt |
 j ƒ D]} | j d ƒ râ t	 | d ƒ } n t
 | ƒ d } | j d ƒ r™| d j ƒ  | d j ƒ  } } | d k r~| d k r~| j d 7_ t j r~| j d	 | |
 j | | | | f ƒ q~n  | d 7} | d | 7} qº | j d
 ƒ r!| j j | ƒ | j | 7_ t j rd | d j ƒ  } } | j d	 | |
 j | | | | f ƒ n  | | | 7} qº | j d ƒ r¥| j j | ƒ | j | 7_ t j r˜| d j ƒ  d } } | j d	 | |
 j | | | | f ƒ n  | | 7} qº | | 7} | | | 7} qº W|
 j |
 j k  rx¢ t |
 j |
 j d ƒ D] } d | |
 j | <qíWqs x8 t |
 j t
 | |
 j ƒ ƒ D] } d | |
 j | <q+Wx/ t d |
 j d ƒ D] } d | |
 j | <q]Wqs Wx& | |
 j D] } d | |
 j | <qŠWq` WWd  QXt g  | D] } t | | ƒ ^ q¹ƒ } | | f S(   Ni    i   t   wiÿÿÿÿt   :t   *i   t   Ns   %s	%s	%d	%s	%s	%d
t   +t   .t   -(   R   t   itemst   opent   s1t   s2t   e2R   t   cigart
   startswitht   intt   lent   uppert
   mismatchesR   t	   show_snpst   writet   contigt   indels_listt   appendt
   insertionst	   deletionst   e1t   ranget   reft   sum(   t
   ref_alignst   reference_chromosomest   ns_by_chromosomest   used_snps_fpatht   indels_infot   genome_mappingt   chr_namet   chr_lenR    t   alignst   alignt   ref_post   ctg_post   strand_directiont   opt   n_basest   ref_nuclt   ctg_nuclt   post   it   chromt   covered_ref_bases(    (    sI   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/contigs_analyzer.pyt   analyze_coverage5   s`    	!	,
	)	)
 &)i   c
   C      C€  s–  t  | ƒ }
 t j | ƒ } t j | ƒ } t |
 | ƒ } t j d t j | ƒ | ƒ t j	 sá t | t j
 | d ƒ } t | t j
 | d ƒ } t | t j | ƒ } t | t j
 | d ƒ } t | t j
 | d ƒ } n d } d } d } d } d } t | d ƒ } d d	 d
 d d d d d d g	 } | j d j | ƒ d ƒ t | d ƒ } t j	 sžt j d t j | ƒ d | d t j j | ƒ d ƒ n t j d t j | ƒ d ƒ t | ƒ \ } } } } t | | | | | | |	 | | ƒ	 } | t j k rJt | d ƒ } | t j k rmt j d t j | ƒ d t j | ƒ d t j sbd n d ƒ nÄ | t j k rÓ| j t j | ƒ d | d | d ƒ t j d t j | ƒ d d | d  ƒ n^ | t j k r1| j t j | ƒ d! | d ƒ t j d t j | ƒ d! d | d  ƒ n  Wd  QX| i  g  g  g  f St | d ƒ } | j d" ƒ i  } t | ƒ e } x[ | D]S } t j | ƒ }  t j s¶|  j | j ƒ  k r‚| j |  j  g  ƒ j! |  ƒ q‚q‚WWd  QX| j d# ƒ i  }! i  }" d$ }# d$ }$ x^ | j" ƒ  D]P \ }% }& | j d% |% ƒ |" j |% g  ƒ j! d& |& g ƒ |$ d& 7}$ |# |& 7}# qW| j d' |$ ƒ | j d( |# ƒ t# d) | d* | d+ t | d ƒ d, | ƒ }' | j d- ƒ t$ |' | | | | |! | |  ƒ \ }( }) }* }+ }, }- }. | j d. ƒ t j% r"| j d/ | d ƒ n  t& |) | | | ƒ \ }/ }0 |* |0 7}* i |* j' d0 6|* j( d1 6|/ d2 6}1 |( j) |1 ƒ t* | | | |* |( ƒ }( t j	 sÿg  t+ j, | ƒ D]* \ }% }2 |% |, j ƒ  k r¦|% |2 f ^ q¦}3 t+ j- t | t j. | ƒ d3 ƒ |3 ƒ n  t j/ r+t | d4 | d5 ƒ }4 t | t j0 | ƒ }5 t j d t j | ƒ d6 t j1 |4 ƒ ƒ t2 ƒ  }6 t |5 d ƒ ®}7 t |4 d ƒ –}8 xŒ|) j" ƒ  D]~\ }9 } |8 j |9 ƒ t2 g  | D] }: |: j  ^ q½ƒ }; x |; D] }< |8 j d |< ƒ qÜWt j/ rt3 |9 }= t4 t5 ƒ }> x$ | D] }: |> |: j  c |: j6 7<qWxË |> j" ƒ  D]º \ }< }? |< |6 k rhqJn  |6 j7 |< ƒ t8 j9 d7 ƒ }@ |@ j: |< ƒ rJ|@ j: |< ƒ d$ d$ }A |@ j: |< ƒ d$ d& }B |? t; |A ƒ d8 k r|7 j |= d t< |? ƒ d |B d ƒ qqJqJWn  |8 j d ƒ qšWWd  QXWd  QXn  t= |' ƒ t j d t j | ƒ d9 ƒ t j d ƒ |) s|t j |( |+ |- |. f St j |( |+ |- |. f Sd  S(:   Ns     s   .stdouts   .stderrs   .mis_contigs.infos   .unaligned.infos	   /dev/nullR'   t   S1t   E1t   S2t   E2t	   Referencet   Contigt   IDYt	   Ambiguoust
   Best_groups   	s   
s   Logging to files s    and s   ...s   Logging is disabled.t   as   Failed aligning contigs s(    to the reference (non-zero exit code). s8   Run with the --debug flag to see additional information.t    s   Alignment failed for R(   s   doesn't exist.
s   's   '.s   Nothing aligned for s   Parsing coords...
s   Loading reference...
i    s   	Loaded [%s]
i   s   	Total Regions: %d
s   	Total Region Length: %d
R   R   R   R!   s   Analyzing contigs...
s   Analyzing coverage...
s   Writing SNPs into t   SNPsR<   t   aligned_ref_basess   .mis_contigs.fat   alignments_s   .tsvs   Alignments: s   _length_([\d\.]+)_cov_([\d\.]+)gÍÌÌÌÌÌì?s   Analysis is finished.(>   R   R   t   label_from_fpatht   label_from_fpath_for_fnameR   t   loggert   infot   index_to_strR   t   space_efficientt   contig_report_fname_patternt   icarus_report_fname_patternR/   R:   t   ost   patht   basenameR   R   R   t   OKt   ERRORt   errort   debugt   FAILEDt   NOT_ALIGNEDR
   t	   from_linet   alignments_for_reuse_dirpathRB   t   keyst
   setdefaultR;   R=   R.   R   R	   R9   RY   R8   R<   t   updateR   R   t
   read_fastat   write_fastat   name_from_fpatht   is_combined_reft   unique_contigs_fname_patternt   relpatht   setR   R   R5   t   len2t   addt   ret   compilet   findallt   floatt   strR   (C   t	   is_cyclict   indext   contigs_fpatht   output_dirpatht	   ref_fpathRE   RF   t   old_contigs_fpatht	   bed_fpatht   threadst   tmp_output_dirpatht   assembly_labelt   corr_assembly_labelt   out_basenamet   log_out_fpatht   log_err_fpatht   icarus_out_fpatht   misassembly_fpatht   unaligned_info_fpathR!   t   icarus_header_colsR   t   coords_fpatht   coords_filtered_fpatht   unaligned_fpathRG   t   statust	   log_err_ft	   log_out_fRL   t   coords_filet   linet   mappingt   ref_featurest   regionst   total_reg_lent   total_regionst   namet   seq_lent	   ca_outputt   resultRD   t   total_indels_infot   aligned_lengthst   misassembled_contigst   misassemblies_in_contigst   aligned_lengths_by_contigsRf   RH   t	   cov_statst   seqt   fastat   alignment_tsv_fpatht   unique_contigs_fpatht   used_contigst   unique_contigs_ft   alignment_tsv_fRJ   RM   t   contigsR;   t   ref_namet   align_by_contigst   aligned_lent   len_cov_patternt
   contig_lent
   contig_cov(    (    sI   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/contigs_analyzer.pyt   align_and_analyzem   sÜ    	!	7%*-"3)
!	6	
!	$)	+	"	
4 
c   "      €  sz  t  j j | ƒ s" t  j | ƒ n  t j ƒ  t j d ƒ t t ƒ } | s t j d ƒ t t	 ˆ  t
 j g t ˆ  ƒ ƒ ƒ d  f St j } t | ƒ t t ˆ  ƒ t j ƒ } t d t j | ƒ }	 t |  d t ƒ\ }
 } } t j rï t j n |	 }	 g  t t	 ˆ  | ƒ ƒ D]6 \ } \ } } | | | | |  | | | | |	 f
 ^ q} t t | | ƒ \ } } } ‰ } g  } t t	 ˆ  | ƒ ƒ } t t	 ˆ  | ƒ ƒ } t t	 ˆ  | ƒ ƒ t _ t
 j | j ƒ  k rêt j rêt | ˆ  t  | t ƒ qên  x‰ t ˆ  ƒ D]{ \ } } t! j" | ƒ } | | t
 j k rK| j# t$ | | | | |  |
 ƒ ƒ q÷| | t
 j% k r÷t& | | | ƒ q÷q÷Wt
 j | j ƒ  k rQt! j' | ƒ t! j( | ƒ d d l) m* } t j+ rÝ| j, | t- | d ƒ d ƒ n  t j+ sït j. rQt ‡  ‡ f d †  t/ t ˆ  ƒ ƒ Dƒ ƒ ‰ | j0 t1 | ƒ |  ˆ  t j ˆ t- | d	 ƒ d
 ƒ qQn  t2 | j ƒ  ƒ j3 t
 j ƒ } t2 | j ƒ  ƒ j3 t
 j% ƒ } t2 | j ƒ  ƒ j3 t
 j ƒ } t2 | j ƒ  ƒ j3 t
 j4 ƒ } | | | }  t | ƒ }! | | t _ | |! k rt j d ƒ n  | |! k  rT|  |! k  rTt j d t5 |! |  ƒ d t5 |! ƒ d ƒ n  |  |! k rpt j d ƒ n  | | f S(   Ns   Running Contig analyzer...s_   Failed aligning the contigs for all the assemblies. Only basic stats are going to be evaluated.i   t   skip_ns(   t   plottert   misassemblies_plott   Misassembliesc         3€  s#   |  ] } ˆ  | ˆ | f Vq d  S(   N(    (   t   .0RV   (   t   contigs_fpathsR²   (    sI   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/contigs_analyzer.pys	   <genexpr>(  s    t   misassemblies_frcurve_plott   misassembliess   Done.s	   Done for s    out of s;   . For the rest, only basic stats are going to be evaluated.(6   Rp   Rq   t   isdirt   mkdirRj   t   print_timestampt	   main_infoR   t   dictt   zipR   Rw   R6   R&   t   _num_nf_errorsR   t   minR   t   max_threadst   maxR   t   Truet   memory_efficientt	   enumerateR   RÃ   R   t   contigs_aligned_lengthsRs   t   valuesR   R   R   R   t   getR=   R   Rx   R   t   save_misassembliest   save_unalignedRd   RÅ   t
   draw_plotst   draw_misassemblies_plotR   t   html_reportRA   t   frc_plotR   t   listt   countRt   R‹   ("   t	   referenceRÉ   RŒ   t
   output_dirt   old_contigs_fpathsR’   t   success_compilationt   num_nf_errorst   n_jobsR“   t   genome_sizeRE   RF   RV   RŽ   R‘   t   argst   statusest   resultsR°   R³   t   reportst   aligner_statusest   aligned_lengths_per_fpathR   t   fnamet   reportRÅ   t   okst   not_alignedt   failedt   errorst   problemst   all(    (   RÉ   R²   sI   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/contigs_analyzer.pyt   doú   sl    
)	
O!	&	+0(    (3   t
   __future__R    Rp   t   sysR‡   t   collectionsR   t   os.pathR   R   t
   quast_libsR   R   R   R   t   quast_libs.ca_utilsR   t#   quast_libs.ca_utils.analyze_contigsR	   t)   quast_libs.ca_utils.analyze_misassembliesR
   R   t   quast_libs.ca_utils.miscR   R   R   R   R   t!   quast_libs.ca_utils.align_contigsR   R   R   t    quast_libs.ca_utils.save_resultsR   R   R   R   t   quast_libs.fastaparserR   t   quast_libs.logR   t   quast_libs.qutilsR   R   t   LOGGER_DEFAULT_NAMERj   R   RY   RÃ   R&   Rù   (    (    (    sI   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/contigs_analyzer.pyt   <module>   s(   "("		9Œ