ó
£žbc           @€  sì  d  d l  m Z d  d l Z d  d l Z d  d l Z d  d l Z y d  d l m Z Wn! e k
 rw d  d l	 m Z n Xy d  d l
 m Z Wn d  d l m Z n Xd  d l m Z m Z m Z m Z m Z d  d l m Z m Z d  d l m Z d  d l m Z d  d	 l m Z m Z m Z m Z m Z m  Z  m! Z! m" Z" m# Z# e e j$ d
 ƒ Z% e e j$ d ƒ Z& e e j$ d d ƒ Z' e e j$ d ƒ Z( d a* d Z+ d e+ d Z, e e j- d e, ƒ Z. e j/ e e. e j- ƒ Z0 d „  Z1 d „  Z2 d „  Z3 d „  Z4 d d „ Z5 d d „ Z6 e7 d „ Z8 e7 d „ Z9 d e7 d „ Z: e7 d „ Z; d „  Z< d „  Z= d  „  Z> e7 d! „ Z? d" „  Z@ d# „  ZA d d d$ „ ZB d% „  ZC d& „  ZD d' „  ZE d( „  ZF e7 d) „ ZG d* „  ZH eI d+ „ ZJ d d, „ ZK d- „  ZL d S(.   iÿÿÿÿ(   t   with_statementN(   t   OrderedDict(   t   urlopen(   t   joint   isfilet   basenamet   dirnamet   getsize(   t   qconfigt   qutils(   t   compile_minimap(   t   get_chr_lengths_from_fastafile(	   t   compile_toolt   get_dir_for_downloadt   relpatht   get_path_to_programt   download_filet   download_external_toolt   is_non_empty_filet   correct_namet   get_free_memoryt   bwat   bedtoolst   bint   sambambas   1.4.1s   gridss-s   .jars   external_tools/gridssc         C€  s   t  |  t ƒ S(   N(   R   t   bwa_dirpath(   t   fname(    (    sF   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/ra_utils/misc.pyt	   bwa_fpath-   s    c         C€  s,   t  j d k r d n d } t t |  | ƒ S(   Nt   macosxt   _osxt   _linux(   R   t   platform_nameR   t   sambamba_dirpath(   R   t   platform_suffix(    (    sF   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/ra_utils/misc.pyt   sambamba_fpath1   s    c         C€  s   t  |  t ƒ S(   N(   R   t   bedtools_bin_dirpath(   R   (    (    sF   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/ra_utils/misc.pyt   bedtools_fpath6   s    c           C€  s   t  s
 d  St t  t ƒ S(   N(   t   gridss_dirpatht   NoneR   t   gridss_fname(    (    (    sF   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/ra_utils/misc.pyt   get_gridss_fpath:   s    t   gzc         C€  s@   t  | | |  d t ƒr< t | | d | ƒ| j d ƒ t St S(   Nt	   move_filet   exts     Done(   R   t   Truet
   unpack_tart	   main_infot   False(   t   namet   download_urlt   downloaded_fpatht   final_dirpatht   loggerR+   (    (    sF   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/ra_utils/misc.pyt   download_unpack_compressed_tar@   s
    t   bz2c         C€  s   d d  l  } | j |  d | ƒ } | j | ƒ | j ƒ  t | | j d j ƒ } d d l m } | | | ƒ t	 j
 | ƒ t j |  ƒ t S(   Niÿÿÿÿs   r:i    (   t	   copy_tree(   t   tarfilet   opent
   extractallt   closeR   t   membersR0   t   distutils.dir_utilR7   t   shutilt   rmtreet   ost   removeR,   (   t   fpatht   dst_dirpathR+   R8   t   tart   temp_dirpathR7   (    (    sF   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/ra_utils/misc.pyR-   H   s    
c      	   C€  s+   t  d ƒ p* t d t d g d | d |  ƒS(   NR   t   BWAt
   only_cleanR4   (   R   R   R   (   R4   RG   (    (    sF   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/ra_utils/misc.pyt   compile_bwaU   s    c      	   C€  s4   t  d ƒ p3 t d t t d d ƒ g d | d |  ƒS(   NR   t   BEDtoolsR   RG   R4   (   R$   R   t   bedtools_dirpathR   (   R4   RG   (    (    sF   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/ra_utils/misc.pyt   compile_bedtoolsY   s    c         C€  s´   t  d d t g |  d | ƒa t s( t S| rZ t j j t ƒ rV t j t d t	 ƒn  t	 St
 ƒ  } t j r° | d  k r° t | ƒ r° t t t d ƒ s° |  j d t ƒ t Sn  t	 S(   Nt   gridsst   GRIDSSRG   t   ignore_errorss  Failed to download binary distribution from https://github.com/ablab/quast/tree/master/external_tools/gridss. QUAST SV module will be able to search trivial deletions only. You can try to download it manually, save the jar archive under %s, and restart QUAST.(   R   R'   R%   R/   R@   t   patht   isdirR>   R?   R,   R(   R   t   no_svR&   R   R   t   warning(   R4   t	   bed_fpathRG   t   gridss_fpath(    (    sF   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/ra_utils/misc.pyt   download_gridss^   s    	#	c         C€  s5   t  |  | ƒ r1 t |  | ƒ r1 t |  | ƒ r1 t St S(   N(   RH   RK   R
   R,   R/   (   R4   RG   (    (    sF   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/ra_utils/misc.pyt   compile_reads_analyzer_toolsr   s    -c         C€  s#   t  | ƒ s t |  t | ƒ ƒ S| S(   N(   R   R   R   (   t   output_dirpathRB   (    (    sF   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/ra_utils/misc.pyt   get_safe_fpathx   s    c         C€  sY  t  j j |  ƒ \ } } y^ | d k rT t j |  d d ƒ} t | t | ƒ ƒ } n! t |  ƒ } t | t |  ƒ ƒ } Wn t k
 rŠ t SXt	 | ƒ r¬ | j
 d | ƒ | S| ¡ } t | d ƒ ‰ }	 x t | ƒ D]q \ }
 } |
 d d k r| j ƒ  d | } |	 j | d	 ƒ qÔ |
 d
 d k r8|	 j d ƒ qÔ |	 j | ƒ qÔ WWd  QXWd  QX| S(   Ns   .gzs   .gzipt   modet   rts   Using existing FASTQ file t   wi   i    s   
i   s   +
(   s   .gzs   .gzip(   R@   RO   t   splitextt   gzipR9   R   R   t   IOErrorR/   R   t   infot	   enumeratet   splitt   write(   RB   t   name_endingt
   output_dirR4   R0   R+   t   handlert   corrected_fpatht   ft   out_ft   it   linet   full_read_name(    (    sF   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/ra_utils/misc.pyt   correct_paired_reads_names~   s,    	c         C€  s"  g  } x»t  |  ƒ D]­\ } } d | d } d } | rB d } n  t j j | ƒ \ } }	 y4 |	 d k r t j | d d ƒ}
 n t | ƒ }
 Wn t k
 r¯ | j d	 ƒ t SX|
 j	 ƒ  } |
 j
 ƒ  | j ƒ  j ƒ  d
 } t | ƒ d k  sþ | j | ƒ r¬| j ƒ  | j d | d | d | d ƒ t | | | | ƒ } | sY| j d ƒ t S| d k r| t j t j j | ƒ <q¬| d k r¬| t j t j j | ƒ <q¬n  | j | d d !ƒ q Wt | ƒ d k rç| j d ƒ t S| d
 | d k r| j d | d
 | d f ƒ t St S(   Ns   /%di   t   forwardt   reverses   .gzs   .gzipRY   RZ   sT   Cannot check equivalence of paired reads names, BWA may fail if reads are discordanti    i   s   Improper read names in s    (sT    reads)! Names should end with /1 (for forward reads) or /2 (for reverse reads) but s1    was found!
QUAST will attempt to fix read names.s   Failed correcting read names. iþÿÿÿi   sA   Something bad happened and we failed to check paired reads names!s0   Paired read names do not match! Check %s and %s!(   s   .gzs   .gzip(   R`   R@   RO   R\   R]   R9   R^   t   noticeR,   t   readlineR;   t   stripRa   t   lent   endswithR_   Rl   RR   R/   R   t   forward_readst   indext   reverse_readst   append(   t   reads_fpathst   temp_output_dirR4   t   first_read_namest   idxRB   Rc   t
   reads_typet   _R+   Re   t
   first_lineRk   Rf   (    (    sF   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/ra_utils/misc.pyt   paired_reads_names_are_equal™   sJ    	
"
c      	   C€  s»  t  ƒ  } t | ƒ } t ƒ  }	 t t |  ƒ t | ƒ d ƒ }
 t | ƒ r[ t |
 ƒ r[ d  St | ƒ r| j d ƒ r¿ t	 j
 t d ƒ d d d | g d t |
 d ƒ d	 t | d
 ƒ d | ƒqt	 j
 t d ƒ d d | g d t |
 d ƒ d	 t | d
 ƒ d | ƒn  d } d } t |
 ƒ f } x\ | D]T } | j d ƒ r't j | | ƒ d } t j | | ƒ d } t | ƒ |	 | <q'q'WWd  QXd } t | ƒ t |	 ƒ k r¬d } nŽ x‹ t | j ƒ  |	 j ƒ  ƒ D]n \ } } t | ƒ | t | ƒ  k r|	 | | | k r| | | <qÈ|	 | | | k r/d } PqÈd } PqÈW| r·| r~| j | d | d | d d | rsd n | ƒ n5 | j | d | d | d d | r«d n | ƒ d  S| S(   Ns   .headers   .samR   t   views   -Hs   -St   stdoutR[   t   stderrt   aR4   s   SN:(\S+)s   LN:(\d+)s   @SQi    t    s   Number of chromosomess   Chromosome lengthss   Chromosome namess    in s    and corresponding file s    do not match. s#   QUAST will try to realign reads to s   the reference genomes+   Use SAM file obtained by aligning reads to (   t   dictR   R   R   R   R   R   R&   Rs   R	   t   call_subprocessR"   R9   t
   startswitht   ret   findallt   intRr   t   zipt   keysR   RR   t   error(   RW   t   fasta_fpatht   alignment_fpatht   err_pathRx   R4   t   is_referencet   correct_chr_namest   fasta_chr_lengthst   alignment_chr_lengthst   header_fpatht   chr_name_patternt   chr_len_patternRg   t   lt   chr_namet   chr_lent   inconsistencyt	   fasta_chrt   sam_chr(    (    sF   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/ra_utils/misc.pyt   get_correct_names_for_chromsÅ   sN    		!((	(02/c         C€  s   t  |  ƒ } } xs t | ƒ D]e \ } } | d k r8 t S| sD q n  | j d ƒ } | d } | d d k s} | d d k r t Sq WWd  QXt S(   Ni@B s   	i    iþÿÿÿs   /1s   /2(   R9   R`   R,   Ra   R/   (   t	   sam_fpatht   sam_inRi   R˜   t   fst	   read_name(    (    sF   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/ra_utils/misc.pyt   all_read_names_correctõ   s    
 c         C€  s´   t  |  ƒ ¢ } t  | d ƒ Š } x€ | D]x } | s: q( n  | j d ƒ } | d } | d d k ss | d d k r“ | d  | d <d j | ƒ } n  | j | ƒ q( WWd  QXWd  QX| S(   NR[   s   	i    iþÿÿÿs   /1s   /2(   R9   Ra   R   Rb   (   RŸ   t   correct_sam_fpathR    t   sam_outR˜   R¡   R¢   (    (    sF   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/ra_utils/misc.pyt   clean_read_names  s    
 c         C€  s¦   | s t  j } n  d t d t d t ƒ  ƒ ƒ } t d ƒ d d t | ƒ d t | ƒ d | d	 | |  g } | r€ | | g 7} n  t j	 | d
 t
 | d ƒ d | ƒd  S(   Ns   %dGBid   i   R   t   sorts   -ts   --tmpdirs   -ms   -oR‚   Rƒ   R4   (   R   t   max_threadst   mint   maxR   R"   t   strR   R	   R†   R9   (   t	   bam_fpatht   sorted_bam_fpathR   R4   t   threadst	   sort_rulet   memt   cmd(    (    sF   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/ra_utils/misc.pyt   sort_bam  s    *c         C€  sŒ   t  d ƒ d d |  |  g } t |  ƒ d d k rD | d d g 7} n  t |  d	 ƒ sˆ t j | d
 t | d ƒ d t | d ƒ d | ƒn  d  S(   NR   Ru   s   -pi   i   i   s   -at   bwtsws   .bwtR   Rƒ   R‚   R4   i   @(   R   R   R   R	   R†   R9   (   t	   ref_fpathR   R4   R±   (    (    sF   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/ra_utils/misc.pyt	   bwa_index  s
    c          C€  s=   t  ƒ  }  |  d k r d S|  d k r) d S|  d k r9 d Sd S(   Ni@   i   i    i   i   i   (   R   (   t   free_mem(    (    sF   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/ra_utils/misc.pyt   get_gridss_memory%  s    	c   
      C€  s\  d  } t |  ƒ D} t | d ƒ ,} | j d j d d d d d d d	 g ƒ ƒ x÷ t | ƒ D]é \ } } | d
 k r | d j d ƒ } q_ n  | j d ƒ s_ | j d ƒ } yƒ t t | | ƒ ƒ } d }	 | d | d k ré d }	 n  | j d j | d | d | d | d | d | d |	 g ƒ d ƒ WqHt	 k
 rDqHXq_ q_ WWd  QXWd  QXd  S(   NR[   s   	t   CHROM_At   START_At   END_At   CHROM_Bt   START_Bt   END_Bs   TYPE
i    i   t   #t   BNDt   strand1t   strand2t   INVt   chrom1t   start1t   end1t   chrom2t   start2t   end2s   
(
   R&   R9   Rb   R   R`   Ra   R‡   R…   R‹   t
   ValueError(
   t   raw_bed_fpathRS   t   headerRg   Rh   Ri   Rj   R¡   t   svt   sv_type(    (    sF   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/ra_utils/misc.pyt   reformat_bedpe0  s&    +	!*c         C€  st   |  d } t  |  d ƒ U } xK | D]C } t | j ƒ  ƒ d k rb t j |  | ƒ t j |  ƒ t St Sq# WWd  QXd  S(   Nt   _rawt   ri   (	   R9   Rr   Ra   R>   t   copyR@   RA   R/   R,   (   t	   cov_fpatht   raw_cov_fpatht   coverageRj   (    (    sF   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/ra_utils/misc.pyt   check_cov_fileG  s    
c         C€  sÐ  t  |  | d ƒ } | rt  |  | d ƒ } t | ƒ rmt | ƒ rmt j t d ƒ d d | d g d t | d ƒ d	 t | d
 ƒ d | ƒt | d ƒ x } t | d ƒ ` } xV | D]N }	 |	 j ƒ  }
 |
 d |
 d } } | j d j  |
 d | | d g ƒ ƒ q· WWd  QXWd  QXqmnR t | ƒ smt j t d ƒ d d | g d t | d ƒ d	 t | d
 ƒ d | ƒn  t  |  | d ƒ } t | ƒ sÌt j d d d | g d t | d ƒ d	 t | d
 ƒ d | ƒn  | S(   Ns   .beds   .bedpeR   t   bamtobeds   -is   -bedpeR   R[   R‚   Rƒ   R4   RÐ   i   i   s   	i    s   
s   .sorted.bedR§   s   -k1,1s   -k2,2n(   R   R   R	   R†   R$   R9   Ra   Rb   (   RW   R0   R¬   R   R4   t   bedpeRÊ   t   bedpe_fpatht   bed_fileRj   R¡   t   startt   endt   sorted_bed_fpath(    (    sF   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/ra_utils/misc.pyt
   bam_to_bedS  s(    !%=((c      	   C€  sÉ   g  } d d d d g } t  |  ƒ ‹ } x t | ƒ D]s \ } } | d k rP Pn  | j d ƒ re q4 n  | j d ƒ } | d } | | k r q4 n  | j t | d	 ƒ ƒ q4 WWd  QXt | ƒ d
 t | ƒ S(   Nt   99t   147t   83t   163i@B t   @s   	i   i	   g      ð?(   R9   R`   R‡   Ra   Rw   Rr   t   sum(   RŸ   t   read_lengthst   mapped_flagsR    Ri   R˜   R¡   t   flag(    (    sF   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/ra_utils/misc.pyt   calculate_read_lenl  s    
!c         C€  s~   t  d ƒ d |  j d ƒ r! d n d |  d | g } | rI | d g 7} n  t j | d t | d	 ƒ d
 t | d ƒ d | ƒd  S(   NR   t	   genomecovs   .bams   -ibams   -is   -gs   -bgaR   R[   R‚   Rƒ   R4   (   R$   Rs   R	   R†   R9   (   t   in_fpatht	   out_fpatht   chr_len_fpatht	   err_fpathR4   t   print_all_positionsR±   (    (    sF   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/ra_utils/misc.pyt   calculate_genome_cov}  s    3c         C€  s½   t  d ƒ d d t | ƒ d g } |  j d ƒ r@ | d g 7} n  | j d ƒ rb | d d	 g 7} n  | r{ | d
 | g 7} n  | j |  ƒ t j | d t | d ƒ d t | d ƒ d | ƒd  S(   NR   R€   s   -ts   -hs   .sams   -Ss   .bams   -ft   bams   -FR   R[   R‚   Rƒ   R4   (   R"   R«   Rs   Rw   R	   R†   R9   (   Ré   Rê   R¨   Rì   R4   t   filter_ruleR±   (    (    sF   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/ra_utils/misc.pyt   sambamba_view„  s    !c   	   	   C€  sY  t  |  d ƒ ‘ } g  } d } d } xk t | ƒ d k  r‘ y | j | | t j ƒ Wn+ t k
 r | j d ƒ | j ƒ  } Pn X| j ƒ  } q' W| d 8} Wd  QXx° | D]¨ } | j d ƒ s© | j d ƒ } yl t	 | d ƒ t	 | d	 ƒ t
 | d ƒ | d
 f } t	 | d ƒ t	 | d ƒ t
 | d ƒ | d
 f } WqQt k
 rMt SXq© q© Wt S(   NRÐ   iÿÿÿÿi   i
   i    i   R¾   s   	i   i   i   i   i   (   R9   Rr   t   seekR@   t   SEEK_ENDR^   t	   readlinesR‡   Ra   RŠ   R   t
   IndexErrorR/   R,   (	   RS   Rg   t   lines_foundt   block_countert   _bufferRj   R¡   t   align1t   align2(    (    sF   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/ra_utils/misc.pyt   is_valid_bed  s,    48(M   t
   __future__R    R]   R@   Rˆ   R>   t   collectionsR   t   ImportErrort%   quast_libs.site_packages.ordered_dictt   urllib2R   t   urllib.requestt   os.pathR   R   R   R   R   t
   quast_libsR   R	   t   quast_libs.ca_utils.miscR
   t   quast_libs.fastaparserR   t   quast_libs.qutilsR   R   R   R   R   R   R   R   R   t   LIBS_LOCATIONR   RJ   R#   R    R&   R%   t   gridss_versionR'   t
   QUAST_HOMEt   gridss_external_fpatht   GIT_ROOT_URLt
   gridss_urlR   R"   R$   R(   R5   R-   R/   RH   RK   RU   RV   RX   Rl   R   Rž   R£   R¦   R²   Rµ   R·   RÎ   RÕ   RÝ   Rç   R,   Rî   Rñ   Rû   (    (    (    sF   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/ra_utils/misc.pyt   <module>   sh   (@							,0							