ó
›¢yZc           @€  s=  d  d l  m Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l 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 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	   reportingt   qconfigt   qutils(   t   open_gzipsafe(   t   write_fasta(   t   Gene(   t
   get_logger(   t
   is_python2c         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(    (    sB   /home/birch/BIRCH/local/install/quast-4.6.3/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(    (    sB   /home/birch/BIRCH/local/install/quast-4.6.3/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(    (    sB   /home/birch/BIRCH/local/install/quast-4.6.3/quast_libs/genemark.pyt   is_license_valid<   s    &
c         c€  sŠ  t  } t  } d } t |  ƒ f} x\| D]T} | j d ƒ r¶ g  } | j ƒ  j d ƒ \ } } | j d ƒ \ }	 }	 }
 } } } | d } d |
 k rž t } q|d |
 k r|t } q|q( | sÂ | r( | j ƒ  rft | ƒ } t | ƒ } | rd j | ƒ } t  } n$ | r(d j | ƒ } g  } t  } n  | ryt	 d | d	 | d
 | d | d | d | ƒ } | Vqyq|| j
 | j ƒ  ƒ q( q( WWd  QXd  S(   Nt    s   >genes   	t   |i   t   ntt   aat   contigt   startt   endt   strandt   seqt   protein(   R*   R0   t
   startswitht   stript   splitR)   t   isspacet   intR!   R   t   append(   R   t   reading_genet   reading_proteinRD   t   fR9   RC   t   seq_idt	   contig_idt   _t   seq_lenRB   t
   left_indext   right_indext   gene(    (    sB   /home/birch/BIRCH/local/install/quast-4.6.3/quast_libs/genemark.pyt   parse_gmhmm_outM   s:    !
			-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   CDSR?   i    RB   i   R@   i   RA   i   RC   i	   (   R0   RF   RG   R   RI   (   R   RM   R9   t   lRT   (    (    sB   /home/birch/BIRCH/local/install/quast-4.6.3/quast_libs/genemark.pyt   parse_gtf_outp   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	   enumerateR?   R@   RA   RB   RC   t   ranget   lenRD   t   close(   t   genest	   gff_fpatht
   prokaryotet   gfft   idRT   t   i(    (    sB   /home/birch/BIRCH/local/install/quast-4.6.3/quast_libs/genemark.pyt   add_genes_to_gffy   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   (   R\   RA   R@   RB   R?   RC   (   Re   RT   t   lengtht   gene_id(   R`   (    sB   /home/birch/BIRCH/local/install/quast-4.6.3/quast_libs/genemark.pyt   inner”   s
    )(   R   (   R`   R   Ri   (    (   R`   sB   /home/birch/BIRCH/local/install/quast-4.6.3/quast_libs/genemark.pyt   add_genes_to_fasta“   s    c         C€  sZ  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 ƒ > } t
 | | | | | | ƒ } | r7|
 j t | ƒ ƒ n  Wd  QXt j sVt j | ƒ n  |
 S(   Nt   dirs   gmsn.plRY   t   perls   --names   --cleans   --outR
   R   R   s       i    t   gmhmmps   .gmhmms   _hmm_heuristic.modt   a(   t   tempfilet   mkdtempR   R   R!   R0   R   t   name_from_fpathR   R   R   t   extendRU   R   t   debugR'   t   rmtree(   t   tool_dirpathR   R7   R   t   tmp_dirpatht   num_threadst   tool_exec_fpathR   t
   fasta_nameR   R`   t   sub_fasta_fpathR   R   t   ok(    (    sB   /home/birch/BIRCH/local/install/quast-4.6.3/quast_libs/genemark.pyt   gmhmm_p_everyGCŸ   s2    	
	c   
      C€  s   t  j j |  d ƒ } t  j j |  d ƒ } | d } t | d ƒ 6 }	 t | | | | |	 | ƒ rq t t | ƒ ƒ Sd  SWd  QXd  S(   NRm   s   ../MetaGeneMark_v1.mods   .gmhmmRY   (   R   R   R!   R0   R   t   listRU   t   None(
   Ru   R   R7   R   Rv   Rw   Rx   R   t   gmhmm_fpathR   (    (    sB   /home/birch/BIRCH/local/install/quast-4.6.3/quast_libs/genemark.pyt   gmhmm_p_metagenomic¿   s    
c         C€  s`  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 d | d | d d t j | ƒ ƒ}	 |	 d k rÙ d  Sg  }
 g  t  j | ƒ D]" \ } } } | D] } | ^ qqï } xB | D]: } | j d ƒ r|
 j t t  j j | | ƒ ƒ ƒ qqW|
 S(   Ns   gmes_petap.pls   genemark-est   libRY   Rl   s   -Is   --ESs   --coress
   --sequences   --outR
   R   R   s       i    t   gtf(   R   R   R!   R   R"   R0   R   Rq   t   isdirt   mkdirR   t   strR   t   walkt   endswithRr   RX   (   Ru   R   R7   R   Rv   Rw   Rx   t   libs_dirpathR   R   R`   R   t   dirst   filest   fnamet   fnames(    (    sB   /home/birch/BIRCH/local/install/quast-4.6.3/quast_libs/genemark.pyt   gm_esË   s(    !8)c	         C€  sý  t  j | ƒ }	 t  j | ƒ }
 t j d t  j |  ƒ |	 ƒ t j j | |
 d ƒ } | | | | |  | | ƒ } | s… d  } d  } nkd } t j j | |
 d | d t
 j sµ d n d ƒ } t | | | ƒ t rt j j | |
 d | d ƒ } t | | ƒ n  g  | D]5 } t g  | D] } | j | j | k ^ qƒ ^ q} g  | D]! } | j rg| j n | j ^ qO} t t | ƒ ƒ } t | ƒ } t j d t  j |  ƒ d	 t | ƒ d
 t | ƒ d ƒ t j d t  j |  ƒ d | ƒ | | | f S(   Ns     s   _genemark.stderrR   RP   s
   _genes.gffs   .gzR;   s   _genes.fastas
     Genes = s	    unique, s    totals     Predicted genes (GFF): (   R   t   label_from_fpathR/   R2   t   infoR   R   R   R!   R~   R   t   no_gzipRf   t   OUTPUT_FASTARj   t   sumRA   R@   RC   t   nameR^   t   setR…   (   R   t   contigs_fpatht   gene_lengthsR5   Ru   Rv   t   gmhmm_p_functionRb   Rw   t   assembly_labelt   corr_assembly_labelR7   R`   t   unique_countt   countt	   tool_namet   out_gff_fpatht   out_fasta_fpatht   xRT   t   gene_idst   total_count(    (    sB   /home/birch/BIRCH/local/install/quast-4.6.3/quast_libs/genemark.pyt   predict_genesâ   s*    	4!B.:"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 | ƒ ‰ t ƒ  r€d d l m } m ‰  n d d l m } m ‰  t j sâ| d | ƒ ‡  ‡ ‡ ‡ ‡ ‡ ‡ ‡ f d †  t |  ƒ Dƒ ƒ }	 nC g  t |  ƒ D]0 \ }
 } t |
 | ˆ ˆ ˆ ˆ ˆ ˆ ˆ ƒ	 ^ qï}	 t j rBt ˆ |  ƒ rBd  St  ƒ  } xt |  ƒ D]ú \ } } t! j" | ƒ } t# j$ | ƒ } |	 | \ | | <} } | d  k	 r¾| j& t! j' j( | ƒ n  | d  k	 rã| j& t! j' j) | ƒ n  | d  k rX| d  k rXt  j* d t# j+ | ƒ d | d | d k rGt j	 j, | ƒ d k  rGd n d ƒ qXqXWt j- s¢x@ t. j/ ˆ d ƒ D]( } t j	 j | ƒ rst0 j1 | ƒ qsqs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   iÿÿÿÿ(   t   Parallelt   delayedt   n_jobsc         3€  s?   |  ]5 \ } } ˆ  t  ƒ | | ˆ ˆ ˆ ˆ ˆ ˆ ˆ ƒ	 Vq d  S(   N(   R¢   (   t   .0R   R   (   R§   R–   R—   Rw   R5   Rb   Rv   Ru   (    sB   /home/birch/BIRCH/local/install/quast-4.6.3/quast_libs/genemark.pys	   <genexpr>+  s   s     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.(2   R2   t   print_timestampt   LICENSE_LIMITATIONS_MODER4   R€   R|   R   R3   R   R   R!   R   R"   R#   t   existsR.   Rƒ   R„   t   minR^   t   max_threadst   maxR   t   joblibR¦   R§   t   joblib3t   memory_efficientR\   R¢   t   testR:   t   dictR   t   getR   RŽ   R~   t	   add_fieldt   Fieldst   PREDICTED_GENES_UNIQUEt   PREDICTED_GENESt   errorR   t   getsizeRs   t   globt   iglobR'   Rt   (   R6   R–   R5   Rb   t   metaRœ   t   tool_dirnameR¨   R¦   t   resultsR   R   t   genes_by_labelsRe   t
   fasta_patht   reportt   labelRš   R›   t   dirpath(    (   R§   R–   R—   Rw   R5   Rb   Rv   Ru   sB   /home/birch/BIRCH/local/install/quast-4.6.3/quast_libs/genemark.pyt   do  sr    
					-@	9	(&   t
   __future__R    R   R½   R'   Ro   t
   quast_libsR   R   R   t   quast_libs.ca_utils.miscR   t   quast_libs.fastaparserR   t   quast_libs.genes_parserR   t   quast_libs.logR   t   quast_libs.qutilsR   t   LOGGER_DEFAULT_NAMER2   R*   R¬   R‘   R   R.   R:   RU   RX   Rf   Rj   R|   R~   R€   R   R¢   RÇ   (    (    (    sB   /home/birch/BIRCH/local/install/quast-4.6.3/quast_libs/genemark.pyt   <module>   s2   				#					 		!