ó
£ž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 Xd  d l
 m Z m Z m Z d  d l m Z d  d l m Z m Z d  d l m Z d  d l m Z d  d	 l m Z e e j ƒ Z e Z e Z d
 „  Z d „  Z d „  Z  d „  Z! d „  Z" d „  Z# d „  Z$ d „  Z% d d d „ Z' d „  Z( d „  Z) d „  Z* d S(   iÿÿÿÿ(   t   with_statementN(   t   OrderedDict(   t	   reportingt   qconfigt   qutils(   t   open_gzipsafe(   t   write_fastat   get_chr_lengths_from_fastafile(   t   Gene(   t
   get_logger(   t   run_parallelc         C€  sh   t  j |  d d d d d | d | | g
 d | d | d	 d
 t  j | ƒ ƒ} | d k og t j j | ƒ S(   s—    Run GeneMark.hmm with this heuristic model (heu_dirpath)
        prompt> gmhmmp -m heu_11_45.mod sequence
        prompt> gm -m heu_11_45.mat sequences   -ds   -as   -pt   0s   -ms   -ot   stdoutt   stderrt   indents       i    (   R   t   call_subprocesst   index_to_strt   ost   patht   isfile(   t	   tool_exect   fasta_fpatht	   heu_fpatht	   out_fpatht   err_filet   indext   return_code(    (    sA   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/genemark.pyt   gmhmm_p!   s    $c          C€  sÛ   d d l  }  t j j t j d ƒ } t j j | d d t j d k rK d n d ƒ } yw t j j d	 ƒ } t j j | ƒ s´ |  j	 | | ƒ rÇ t j j
 | ƒ t j j
 | ƒ k  rÇ t j | | ƒ n  t SWn t SXd S(
   s€   Installation instructions for GeneMark.
    Please, copy key "gm_key" into users home directory as:
    cp gm_key ~/.gm_key
    iÿÿÿÿNt   genemarkt   gm_keyst   gm_key_t   linux_32t   32t   64s	   ~/.gm_key(   t   filecmpR   R   t   joinR   t   LIBS_LOCATIONt   platform_namet
   expanduserR   t   cmpt   getmtimet   shutilt   copyfilet   Truet   False(   R"   t   base_genemark_dirt   gm_key_fpatht
   gm_key_dst(    (    sA   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/genemark.pyt   install_genemark.   s    "7c         C€  s•   t  j j |  t j | d ƒ d ƒ } t  j j | ƒ r‘ t | ƒ H } x> | D]6 } | j d ƒ d k rN t j	 ƒ  t j
 d ƒ t SqN WWd  QXn  t S(   Ni    s   _genemark.stderrs   license period has endediÿÿÿÿsx  License period for GeneMark has ended! 
To update license, please visit http://exon.gatech.edu/GeneMark/license_download.cgi page and fill in the form.
You should choose GeneMarkS tool and your operating system (note that GeneMark is free for non-commercial use).
Download the license key and replace your ~/.gm_key with the updated version. After that you can restart QUAST.
(   R   R   R#   R   t   label_from_fpath_for_fnameR   t   opent   findt   loggert	   main_infot   warningR,   R+   (   t   out_dirpatht   fasta_fpathst	   err_fpatht   err_ft   line(    (    sA   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/genemark.pyt   is_license_validA   s    &
c         C€  så  t  } t  } d } t ƒ  } d  } t |  ƒ ¦} xœ| D]”} | j d ƒ rÏ g  } | j ƒ  j d ƒ \ }	 }
 |	 j d ƒ \ } } } } } } | d } |
 d }
 d | k r· t } qËd | k rËt } qËq7 | sÛ | r7 | j ƒ  rµt	 | ƒ } t	 | ƒ } | rd j
 | ƒ } t  } n$ | rAd j
 | ƒ } g  } t  } n  | | k rW| | n t d |
 d	 | d
 | d | ƒ } | r| | _ g  } n  | r¨| | _ d  } n  | | | <qË| j | j ƒ  ƒ q7 q7 WWd  QXt | j ƒ  ƒ S(   Nt    s   >genes   	t   |i   t   ntt   aat   contigt   startt   endt   strand(   R,   R   t   NoneR2   t
   startswitht   stript   splitR+   t   isspacet   intR#   R   t   seqt   proteint   appendt   listt   values(   R   t   reading_genet   reading_proteinRL   t   genes_by_idt   gene_idt   fR;   RK   t   seq_idt	   contig_idt   _t   seq_lenRD   t
   left_indext   right_indext   gene(    (    sA   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/genemark.pyt   parse_gmhmm_outR   sN    	!

			!				 c         c€  s—   t  |  ƒ … } x{ | D]s } d | k r | j ƒ  j ƒ  } t d | d d | d d t | d ƒ d t | d	 ƒ d
 | d ƒ } | Vq q WWd  QXd  S(   Nt   CDSRA   i    RD   i   RB   i   RC   i   RK   i	   (   R2   RG   RH   R   RJ   (   R   RT   R;   t   lR[   (    (    sA   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/genemark.pyt   parse_gtf_out   s    Gc      	   C€  s„  t  | d ƒ } | r> t j r. | j d ƒ qK | j d ƒ n | j d ƒ | j d ƒ xt |  ƒ D]\ } } | j d | j | j | j | j | d f ƒ | j	 r| j d ƒ xI t
 d	 t | j	 ƒ d
 ƒ D]) } | j d | j	 | | d
 !d ƒ qÓ Wn  | j re | j d ƒ xF t
 d	 t | j ƒ d
 ƒ D]) } | j d | j | | d
 !d ƒ q5W| j d ƒ qe qe W| j ƒ  d  S(   Nt   ws   ##gff out for MetaGeneMark
s$   ##gff out for GeneMarkS PROKARYOTIC
s%   ##gff out for GeneMark-ES EUKARYOTIC
s   ##gff-version 3
s$   %s	GeneMark	gene	%d	%d	.	%s	.	ID=%d
i   s   ##Nucleotide sequence:
i    i<   s   ##s   
s   ##Protein sequence:
(   R   R   t   metagenemarkt   writet	   enumerateRA   RB   RC   RD   RK   t   ranget   lenRL   t   close(   t   genest	   gff_fpatht
   prokaryotet   gfft   idR[   t   i(    (    sA   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/genemark.pyt   add_genes_to_gffˆ   s(    		'	"*	"'c         €  s#   ‡  f d †  } t  | | ƒ  ƒ d  S(   Nc          3€  sk   xd t  ˆ  ƒ D]V \ }  } | j | j } d |  d | | j | j | j | j f } | | j f Vq Wd  S(   Ns'   >gene_%d|GeneMark.hmm|%d_nt|%s|%d|%d|%si   (   Rc   RC   RB   RD   RA   RK   (   Rl   R[   t   lengthRS   (   Rg   (    sA   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/genemark.pyt   inner£   s
    )(   R   (   Rg   R   Ro   (    (   Rg   sA   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/genemark.pyt   add_genes_to_fasta¢   s    c         C€  sS  t  j d | ƒ } t j j |  d ƒ } t | d ƒ } t j | ƒ } t j d | d | d d | | g d | d	 | d
 d t j	 | ƒ ƒ}	 |	 d k r› d  Sg  }
 t j j |  d ƒ } t j j | | ƒ } | d } t j j | | d ƒ } t | d ƒ 7 } t
 | | | | | | ƒ } | r0t | ƒ }
 n  Wd  QXt j sOt j | ƒ n  |
 S(   Nt   dirs   gmsn.plR`   t   perls   --names   --cleans   --outR   R   R   s       i    t   gmhmmps   .gmhmms   _hmm_heuristic.modt   a(   t   tempfilet   mkdtempR   R   R#   R2   R   t   name_from_fpathR   R   R   R\   R   t   debugR)   t   rmtree(   t   tool_dirpathR   R9   R   t   tmp_dirpatht   num_threadst   tool_exec_fpathR   t
   fasta_nameR   Rg   t   sub_fasta_fpathR   R   t   ok(    (    sA   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/genemark.pyt   gmhmm_p_everyGC®   s2    	
	c   
      C€  sy   t  j j |  d ƒ } t  j j |  d ƒ } | d } t | d ƒ 0 }	 t | | | | |	 | ƒ rk t | ƒ Sd  SWd  QXd  S(   NRs   s   ../MetaGeneMark_v1.mods   .gmhmmR`   (   R   R   R#   R2   R   R\   RE   (
   Rz   R   R9   R   R{   R|   R}   R   t   gmhmm_fpathR   (    (    sA   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/genemark.pyt   gmhmm_p_metagenomicÎ   s    

c         C€  sv  t  j j |  d ƒ } t  j j t j d d ƒ } t | d ƒ } | t j | ƒ 7} t  j j | ƒ st t  j	 | ƒ n  t j
 d d | | d d t | ƒ d	 | d
 | g t j r¶ d g n g  d | d | d d t j | ƒ ƒ}	 |	 d k rï d  Sg  }
 g  t  j | ƒ D]" \ } } } | D] } | ^ qq} xB | D]: } | j d ƒ r4|
 j t t  j j | | ƒ ƒ ƒ q4q4W|
 S(   Ns   gmes_petap.pls   genemark-est   libR`   Rr   s   -Is   --ESs   --coress
   --sequences   --outs   --fungusR   R   R   s       i    t   gtf(   R   R   R#   R   R$   R2   R   Rw   t   isdirt   mkdirR   t   strt	   is_fungusR   t   walkt   endswitht   extendR_   (   Rz   R   R9   R   R{   R|   R}   t   libs_dirpathR   R   Rg   R   t   dirst   filest   fnamet   fnames(    (    sA   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/genemark.pyt   gm_esÚ   s(    !"8)c	         C€  sŒ  t  j | ƒ }	 t  j | ƒ }
 t j d t  j |  ƒ |	 ƒ t j j | |
 d ƒ } | | | | |  | | ƒ } t	 | ƒ } | s— d  } d  } d  } nåx6 | D]. } | j d k oÆ | j | | j k  | _ qž Wd } t j j | |
 d | d ƒ } t | | | ƒ t r>t j j | |
 d | d ƒ } t | | ƒ n  g  | D]> } t g  | D]% } | j rU| j | j | k ^ qUƒ ^ qE} g  | D]> } t g  | D]% } | j s | j | j | k ^ q ƒ ^ q} g  | D]! } | j ró| j n | j ^ qÛ} t t | ƒ ƒ } t | ƒ } t j d t  j |  ƒ d t | ƒ d	 t | ƒ d
 ƒ t j d t  j |  ƒ d | ƒ | | | | f S(   Ns     s   _genemark.stderri   R   RW   s
   _genes.gffs   _genes.fastas
     Genes = s	    unique, s    totals     Predicted genes (GFF): (   R   t   label_from_fpathR1   R4   t   infoR   R   R   R#   R   RE   RB   RC   RA   t   is_fullRm   t   OUTPUT_FASTARp   t   sumRK   t   nameRe   t   setRˆ   (   R   t   contigs_fpatht   gene_lengthsR7   Rz   R{   t   gmhmm_p_functionRi   R|   t   assembly_labelt   corr_assembly_labelR9   Rg   t   contig_lengthst   unique_countt   full_cntt   partial_cntR[   t	   tool_namet   out_gff_fpatht   out_fasta_fpatht	   thresholdt   gene_idst   total_count(    (    sA   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/genemark.pyt   predict_genesñ   s8    	,!!HH.:"c         C€  s‰  t  j ƒ  t r! t  j d ƒ d  S| r< d } d } t } n- | rW d } d } t } n d } d } t } t  j d | ƒ t j	 j
 t j | t j ƒ } t j	 j | ƒ s¾ t  j d | ƒ nÇt ƒ  s× t  j d	 ƒ n®t j	 j | ƒ sù t j | ƒ n  t j	 j
 | d
 ƒ }	 t j	 j |	 ƒ s0t j |	 ƒ n  t t |  ƒ t j ƒ }
 t d t j |
 ƒ } g  t |  ƒ D]- \ } } | | | | | |	 | | | f	 ^ qk} t t | |
 ƒ \ } } } } t | |  ƒ sÏd  St ƒ  } xMt |  ƒ D]?\ } } t j | ƒ } t j | ƒ } | | | | <| | d  k	 rJ| j  t j! j" | | ƒ n  | | d  k	 r­g  t# | | | | ƒ D] \ } } d | | f ^ qr} | j  t j! j$ | ƒ n  | | d  k rå| | d  k råt  j% d t j& | ƒ d | d | d k rt j	 j' | ƒ d k  rd n d ƒ qåqåWt j( stx@ t) j* |	 d ƒ D]( } t j	 j | ƒ rEt+ j, | ƒ qEqEWn  t  j d ƒ | Sd  S(   Ns>   GeneMark tool can't be started because of license limitations!t   MetaGeneMarkR   t	   GeneMarkSs   GeneMark-ESs   genemark-ess   Running %s...sA     Sorry, can't use %s on this platform, skipping gene prediction.sD     Can't copy the license key to ~/.gm_key, skipping gene prediction.t   tmpi   s   %s + %s parts     s   Failed predicting genes in s   . i€„ s`   File may be too small for GeneMark-ES. Try to use GeneMarkS instead (remove --eukaryote option).R=   t   *s   Done.(-   R4   t   print_timestampt   LICENSE_LIMITATIONS_MODER6   Rƒ   R   R’   R5   R   R   R#   R   R$   R%   t   existsR0   R†   R‡   t   minRe   t   max_threadst   maxRc   R
   R©   R<   t   dictR   t   getR   R“   RE   t	   add_fieldt   Fieldst   PREDICTED_GENES_UNIQUEt   zipt   PREDICTED_GENESt   errorR   t   getsizeRx   t   globt   iglobR)   Ry   (   R8   R›   R7   Ri   t   metaR£   t   tool_dirnameRœ   Rz   R{   t   n_jobsR|   R   R   t   parallel_run_argst
   genes_listR    t
   full_genest   partial_genest   genes_by_labelsRl   t
   fasta_patht   reportt   labelR¡   R¢   Rg   t   dirpath(    (    sA   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/genemark.pyt   do  sj    
			=	: 9	(+   t
   __future__R    R   R½   R)   Ru   t   collectionsR   t   ImportErrort%   quast_libs.site_packages.ordered_dictt
   quast_libsR   R   R   t   quast_libs.ca_utils.miscR   t   quast_libs.fastaparserR   R   t   quast_libs.genes_parserR   t   quast_libs.logR	   t   quast_libs.qutilsR
   t   LOGGER_DEFAULT_NAMER4   R,   R¯   R–   R   R0   R<   R\   R_   Rm   Rp   R   RE   Rƒ   R’   R©   RË   (    (    (    sA   /home/psgendb/BIRCHDEV/install/quast-5.2.0/quast_libs/genemark.pyt   <module>   s:   				-					 		(