ó
ÍŽºZc           @   s  d  Z  d d l Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l m Z d d l m	 Z	 d d l m
 Z
 d d l m Z d „  Z d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d d „ Z d „  Z d S(   t
   letovesnoiiÿÿÿÿN(   t   rqconfig(   t   UtilsGeneral(   t   UtilsPipeline(   t   parallel_blat_runc         C   s~  t  j j t j d d ƒ } t  j j | ƒ s6 d } n  t j | ƒ d  k r[ | j	 d ƒ n|  d  k r” t  j j
 | ƒ d k r” t | | | ƒ }  n  t  j j
 | ƒ d k  rÍ t j | | | ƒ } | g }	 n t |  | | ƒ }  |  }	 g  }
 xˆ t t | ƒ ƒ D]t } t j j ƒ  } |
 j t j | | |	 | | | | | | ƒ ƒ t j j ƒ  } | | } | j d j | ƒ ƒ qþ W|
 Sd  S(   Nt   .t   blats>   BLAT not found! Please add BLAT to PATH for ALIGNMENT metrics.I       s   
BLAT TIME: {}

(   t   ost   patht   joinR   t   rnaOUAST_LOCATIONt   isfileR   t   whicht   Nonet   errort   getsizet   get_database_split_chrt   get_upper_case_fastat!   get_upper_case_database_split_chrt   ranget   lent   datetimet   nowt   appendR   t   infot   format(   t   args_databaset   args_referencet   transcripts_dictst   args_labelst   args_threadst   tmp_dirt   loggert   log_dirt   blat_runt   reference_pathest   args_alignmentt   i_transcriptst
   start_timet   end_timet
   spent_time(    (    sQ   /data/home/pitagoras/public_html/gigas/quast/rnaQUAST-1.5.1/general/UtilsTools.pyt   run_blat   s,    	$
c         C   sw  t  j j |  d ƒ } d j | ƒ } t j | d t ƒt  j j |  d ƒ } g  } | j ƒ  | j d ƒ t	 | d ƒ } t	 | d ƒ Ô } d  }	 d  }
 x´ | D]¬ } | d d	 k r2| j ƒ  j d
 ƒ d d d }	 |
 d  k	 rí |
 j ƒ  n  t  j j | |	 ƒ } t	 | d ƒ }
 | j | d ƒ | j | ƒ n  |
 j | j ƒ  d ƒ q W| j ƒ  Wd  QX| j d j | ƒ ƒ | S(   Nt   database_dirs   mkdir {}t   shells   scaffolds.databases#   Getting split scaffolds database...t   wt   ri    t   >t    i   s   .fat   as   
s     saved to {}(   R   R   R	   R   t
   subprocesst   callt   Truet   print_timestampR   t   openR   t   stript   splitt   closet   writeR   (   t
   output_dirt   reference_pathR    R*   t   commandt   chrs_database_patht   database_pathest   fout1t   fint   file_chr_namet   fout2t   linet   chrs_file_path(    (    sQ   /data/home/pitagoras/public_html/gigas/quast/rnaQUAST-1.5.1/general/UtilsTools.pyR   =   s0    
!c         C   sg  t  j j | d ƒ } d j | ƒ } t j | d t ƒt  j j | d ƒ } g  } | j ƒ  | j d ƒ t	 | d ƒ } xÈ |  D]À } t  j j
 | ƒ \ }	 }
 t  j j | |
 ƒ } | j | ƒ t	 | d ƒ } t	 | d ƒ } | j | d ƒ x: | D]2 } | d	 d
 k r| j ƒ  } n  | j | ƒ qõ W| j ƒ  | j ƒ  q W| j ƒ  | j d j | ƒ ƒ | S(   Nt   database_upper_dirs   mkdir {}R+   s   scaffolds.upper.databases.   Getting upper case split scaffolds database...R,   R-   s   
i    R.   s     saved to {}(   R   R   R	   R   R1   R2   R3   R4   R   R5   R7   R   R9   t   upperR8   (   t   databaseR   R    R*   R<   R=   R#   t   fout0t
   in_name_fat   tmp_dir_namet   tmp_file_namet   out_name_fat   fin1R?   t   line1(    (    sQ   /data/home/pitagoras/public_html/gigas/quast/rnaQUAST-1.5.1/general/UtilsTools.pyR   c   s0    


c   
      C   så   d } t  j j | | d ƒ } | j ƒ  | j d j |  ƒ ƒ t  j j | d j | ƒ ƒ } d j | |  | | ƒ } t j | d t ƒ}	 |	 d k rË | j	 d d	 j | ƒ d
 |	 d t ƒ t
 j |	 ƒ n  | j d j | ƒ ƒ | S(   Nt   makeblastdbs   .logs   Getting blast database for {}s   {}.isoformss$   {} -in {} -dbtype nucl -out {} >> {}R+   i    t   messages
   {} failed!t   exit_with_codet	   to_stderrs     saved to {}(   R   R   R	   R4   R   R   R1   R2   R3   R   t   syst   exit(
   t   isoforms_fa_patht	   gtf_labelR   R    R!   t   program_namet   log_outt   isoforms_blast_dbR<   t	   exit_code(    (    sQ   /data/home/pitagoras/public_html/gigas/quast/rnaQUAST-1.5.1/general/UtilsTools.pyt   get_blast_dbŠ   s    
%c         C   s  d } t  j j | | d | d ƒ } | j d ƒ | j d j |  | ƒ ƒ d j t  j j | | ƒ ƒ } d j | |  | | | ƒ }	 t j |	 d t ƒ}
 |
 d	 k rß | j	 d
 d j | | ƒ d |
 d t ƒ t
 j |
 ƒ n  | j d j | ƒ ƒ | j d j | ƒ ƒ | S(   Nt   blastnR   s   .logs     s      Aligning {} to {} by blastn...s	   {}.blast6s«   {} -query {} -out {} -db {} -num_alignments 10 -evalue 0.01 -outfmt "6 qseqid sseqid pident length mismatch gapopen qstart qend sstart send evalue bitscore sstrand" 1>> {}R+   i    RP   s   {} failed for {}!RQ   RR   s       saved to {}s       log can be found in {}.(   R   R   R	   R4   R   R   R1   R2   R3   R   RS   RT   (   t   transcripts_pathRY   R   t   labelR    R!   RW   RX   t   alignment_isoforms_pathR<   RZ   (    (    sQ   /data/home/pitagoras/public_html/gigas/quast/rnaQUAST-1.5.1/general/UtilsTools.pyt'   align_transcripts_to_isoforms_by_blastnŸ   s    !(c	         C   s„  g  }	 | d% k  r d }
 n d }
 d } t  j j | | d ƒ } t  j j | | d ƒ } t j |  | | ƒ }  t  j j |  ƒ d t  j j |  ƒ d j d	 ƒ  } | d  k rÅ| j ƒ  | j	 d
 j
 | ƒ ƒ t j j ƒ  } d j
 d | d | d | d |  d | d | ƒ } t j | d t ƒ} | j	 d j
 | | ƒ ƒ | d k rn| j d d j
 | ƒ d | d t ƒ n  t j j ƒ  } | | } | j	 d j
 t  j j | | ƒ ƒ ƒ | j	 d j
 | ƒ ƒ n4 d j
 | t  j j | | ƒ ƒ } t j | d t ƒx„t t | ƒ ƒ D]p} t  j j | |
 d | | d ƒ } | j ƒ  | j	 d j
 | | | ƒ ƒ t  j j | | | d ƒ } t j j ƒ  } d j
 d |
 d | d | d | | d  | d! | d | ƒ } t j | d t ƒ} | j	 d" j
 | ƒ ƒ | d k r*| j d d# j
 |
 | | ƒ d | d t ƒ n  t j j ƒ  } | | } |	 j | ƒ | j	 d j
 | ƒ ƒ | j	 d$ j
 | ƒ ƒ qW|	 S(&   Ni   i    t   gmapt   gmaplt
   gmap_builds   .out.logs   .err.logiÿÿÿÿs   .fs   Creating genome index by {}...sY   {gmap_build} -D {tmp_dir} -d {ref_index_name} {reference} 1>> {log_out_1} 2>> {log_out_2}R   t   ref_index_namet	   referencet	   log_out_1t	   log_out_2R+   s!     logs can be found in {} and {}.i    RP   s
   {} failed!RQ   RR   s     saved to {}s   
GMAP_BUILD TIME: {}

s   ln -s {} {}R   s   Aligning {} to {}...s   .pslsr   {gmap} -D {tmp_dir} -d {ref_index_name} {transcripts} --format=1 -t {threads} -O > {alignment_out} 2>> {log_out_2}t   transcriptst   threadst   alignment_outs     log can be found in {}.s   {} failed for {}!s   
GMAP TIME: {}

I       (   R   R   R	   R   R   R7   t   rfindR   R4   R   R   R   R   R1   R2   R3   R   R   R   R   (   R   t
   genome_lent   args_transcriptsR   R   t   args_gmap_indexR   R    R!   R$   t   gmap_runRc   t   gmap_build_logger_out_patht   gmap_build_logger_err_patht	   ref_labelR&   R<   RZ   R'   R(   R%   t   gmap_run_logger_err_patht   alignment_psl_path(    (    sQ   /data/home/pitagoras/public_html/gigas/quast/rnaQUAST-1.5.1/general/UtilsTools.pyt   run_gmap¸   s\    	3
	(
%!%
	
c         C   s‚  d } t  j j | | d ƒ } t  j j | | d ƒ } |
 j ƒ  |
 j d j | ƒ ƒ t j t  j j | d ƒ ƒ } t  j j | d ƒ } t  j j | ƒ s&d } t j	 t  j j | d ƒ ƒ } t j	 t  j j | d ƒ ƒ } t
 d	 t j |	 d
 ƒ d
 d ƒ } d j d | d | d |  d | d | d | ƒ } | d  k	 rc| d j d | d | d | ƒ 7} n  | d j d | d | ƒ 7} |
 j ƒ  |
 j d | ƒ t j | d t ƒ} |
 j d j | | ƒ ƒ | d k rþ|
 j d j d | d  | d | ƒ ƒ q&d! j | | ƒ } t j | d t ƒn  d" } | rC| | d  7} n  | rd| rd| | d  | 7} n  d# j d | d |  d | d$ | d% | d& ƒ } | r¤d' | k sÈ| rÕd' | k rÕ| rÕd' | k rÕ| d( 7} n  | d j d | d | ƒ 7} |
 j ƒ  |
 j d | ƒ t j | d t ƒ} | d k rOd  } |
 j d) j d | ƒ ƒ n |
 j d* j | ƒ ƒ |
 j d+ j | | ƒ ƒ | S(,   Nt   STARs   .out.logs   .err.logs   Running {}...t   star_outt
   genome_dirs	   --runModeR   i   i   i   s£   {program_name} {mode} genomeGenerate --runThreadN {threads} --genomeDir {tmp_genome_dir} --genomeFastaFiles {reference} --genomeSAindexNbases {genomeSAindexNbases}RW   t   modeRi   t   tmp_genome_dirRe   t   genomeSAindexNbasessr    --sjdbGTFfile {gtf} --sjdbGTFtagExonParentTranscript {parent_transcript} --sjdbGTFtagExonParentGene {parent_gene}t   gtft   parent_transcriptt   parent_genes     1>> {log_out_1} 2>> {log_out_2}Rf   Rg   s     R+   s#       logs can be found in {} and {}.i    s   {program_name_mode} failed!t   program_name_modeR/   s   mv {} {}t    s³   {program_name} --runThreadN {threads} --genomeDir {genome_dir} --readFilesIn {readFilesIn} --outFileNamePrefix {out_file_name_prefix} --outSAMtype SAM --limitBAMsortRAM 1000706316t   readFilesInt   out_file_name_prefixt   /s   .gzs    --readFilesCommand zcats   {program_name} failed!s     saved to {}.s!     logs can be found in {} and {}.(   R   R   R	   R4   R   R   R   t   create_foldert   existst   create_empty_foldert   mint   matht   logR   R1   R2   R3   R   (   Ri   R;   t   gtf_patht   single_readst
   left_readst   right_readsR:   t   sjdbGTFtagExonParentTranscriptt   sjdbGTFtagExonParentGeneRl   R    R!   RW   t   star_logger_out_patht   star_logger_err_patht   star_outdirRx   Ry   R   Rz   R{   R<   RZ   R   (    (    sQ   /data/home/pitagoras/public_html/gigas/quast/rnaQUAST-1.5.1/general/UtilsTools.pyt   run_STAR  s`    
#	
	6
c         C   s[   t  |  | | | | | | | | |	 |
 | ƒ } | d  k	 rQ t j j | d ƒ } n d  } | S(   Ns   Aligned.out.sam(   R“   R   R   R   R	   (   Ri   R;   RŠ   R‹   RŒ   R   R:   RŽ   R   Rl   R    R!   R’   t   out_sam_path(    (    sQ   /data/home/pitagoras/public_html/gigas/quast/rnaQUAST-1.5.1/general/UtilsTools.pyt   get_sam_by_STARg  s    c	         C   s   d }	 t  j j | ƒ d d k rŽ t  j j | t  j j | ƒ t  j j | ƒ j d ƒ  d ƒ }
 d j | |
 ƒ } t j | d t	 ƒ|
 } n  t  j j | |	 d ƒ } t
 j t  j j | |	 d ƒ ƒ } |  d  k rê t | | | ƒ }  n  | j ƒ  | j d	 j |	 ƒ ƒ d
 } | r1| r1| | d | 7} n  | r]| rP| rP| d 7} n  | | 7} n  d j d |	 d | d |  d | d | d | ƒ } t j | d t	 ƒ} | d k rÐd  } | j d j d |	 ƒ ƒ n | j d j | ƒ ƒ | j d j | ƒ ƒ | S(   Nt   tophati   s   .fas   .fs   ln -s {} {}R+   s   .err.logt   _outs   Running {}...R€   R/   t   ,sK   {program_name} -o {output_dir} {index} {reads} -p {threads} 2>> {log_out_2}RW   R:   t   indext   readsRi   Rg   i    s   {program_name} failed!s     saved to {}.s     log can be found in {}.(   R   R   t   splitextR	   t   basenameRk   R   R1   R2   R3   R   R„   R   t   get_genome_bowtie2_indexR4   R   R   (   t   bowtie2_index_pathR;   R‹   t   reads_1_patht   reads_2_pathR:   Ri   R    R!   RW   t   new_ref_pathR<   t   tophat_logger_err_patht   tophat_outdirRš   RZ   (    (    sQ   /data/home/pitagoras/public_html/gigas/quast/rnaQUAST-1.5.1/general/UtilsTools.pyt
   run_tophatu  s:    >	"
	c	      
   C   sd   t  |  | | | | | | | | ƒ	 }	 |	 d  k	 rZ t j j |	 d ƒ }
 t |
 |	 | ƒ } n d  } | S(   Ns   accepted_hits.bam(   R¤   R   R   R   R	   t   bam2sam(   Rž   R;   R‹   RŸ   R    R:   Ri   R    R!   R£   t   out_bam_pathR”   (    (    sQ   /data/home/pitagoras/public_html/gigas/quast/rnaQUAST-1.5.1/general/UtilsTools.pyt   get_sam_by_tophat¤  s    c         C   sä   d } | j  ƒ  | j d j | ƒ ƒ t j j |  ƒ d } t j j | | | j d ƒ  d ƒ } d j d | d | d	 |  ƒ } t j	 | d
 t
 ƒ} | d k rÊ | j d j d | ƒ ƒ t j d ƒ n  | j d j | ƒ ƒ | S(   Ns   samtools views   Running {}...iÿÿÿÿs   .bams   .sams    {program_name} -h -o {sam} {bam}RW   t   samt   bamR+   i    s>   {program_name} failed! Please add {program_name} in your PATH.i   s     saved to {}.(   R4   R   R   R   R   R7   R	   Rk   R1   R2   R3   R   RS   RT   (   t   in_bam_pathR:   R    RW   t   in_bam_nameR”   R<   RZ   (    (    sQ   /data/home/pitagoras/public_html/gigas/quast/rnaQUAST-1.5.1/general/UtilsTools.pyR¥   µ  s    
&c         C   s·   | j  d ƒ t |  d ƒ } t | d ƒ } x[ | D]S } | d d k rr | j ƒ  j ƒ  d d } | j | ƒ n | } | j | ƒ q2 W| j ƒ  | j ƒ  | j  d j | ƒ ƒ | S(   Ns˜   Modify the names of the reference sequences for exactly matching GTF/GFF column which indicates the chromosome or contig on which the feature is locatedR-   R,   i    R.   s   
s     saved to {}(   R   R5   R6   R7   t   debugR9   R8   R   (   t   in_ref_patht   out_ref_pathR    R@   t   foutt   in_linet   out_line(    (    sQ   /data/home/pitagoras/public_html/gigas/quast/rnaQUAST-1.5.1/general/UtilsTools.pyt   chg_ref_names_for_tophat_GTFÉ  s    

t   namec   	      C   s  t  j j |  ƒ d } t  j j | | | j d ƒ  d ƒ } d } | j ƒ  | j d j d |  d | ƒ ƒ | d k r˜ d	 j d | d |  d
 | ƒ } n" d j d | d |  d
 | d  ƒ } t j	 | d t
 ƒ} | d k rý | j d j d | ƒ d | ƒn  | j d j | ƒ ƒ | S(   NiÿÿÿÿR   s   .sorted.bams   samtools sorts"   Sorting {in_bam} by {program_name}t   in_bamRW   R³   s%   {program_name} -no {in_bam} {out_bam}t   out_bams!   {program_name} {in_bam} {out_bam}iüÿÿÿR+   i    s>   {program_name} failed! Please add {program_name} in your PATH.RQ   s     saved to {}.(   R   R   R7   R	   Rk   R4   R   R   R1   R2   R3   R   (	   Rª   R:   R    t   typet   in_bam_file_nameR¦   RW   R<   RZ   (    (    sQ   /data/home/pitagoras/public_html/gigas/quast/rnaQUAST-1.5.1/general/UtilsTools.pyt   get_sort_bamä  s     &

c   	      C   s  d } t  j j | | d ƒ } t  j j | | d ƒ } | j ƒ  | j d j d |  d | ƒ ƒ |  |  j d ƒ  } d j d | d |  d	 | d
 | d | ƒ } t j | d t	 ƒ} | d k rá d  } | j d j d | ƒ ƒ n | j d j | ƒ ƒ | j d j | | ƒ ƒ | S(   Ns   bowtie2-builds   .out.logs   .err.logs)   Indexing {reference} by {program_name}...Re   RW   s   .fsB   {program_name} {reference} {index} 1>> {log_out_1} 2>> {log_out_2}R™   Rf   Rg   R+   i    s   {program_name} failed!s     saved to {}.*.s!     logs can be found in {} and {}.(   R   R   R	   R4   R   R   Rk   R1   R2   R3   R   R   (	   R;   R    R!   RW   t   bowtie_logger_out_patht   bowtie_logger_err_patht   out_bowtie2_index_pathR<   RZ   (    (    sQ   /data/home/pitagoras/public_html/gigas/quast/rnaQUAST-1.5.1/general/UtilsTools.pyR      s     
	(   t
   __author__R   RS   R1   t   shutilRˆ   R   t   generalR   R   R   R   R)   R   R   R[   R`   Ru   R“   R•   R¤   R§   R¥   R²   R¸   R   (    (    (    sQ   /data/home/pitagoras/public_html/gigas/quast/rnaQUAST-1.5.1/general/UtilsTools.pyt   <module>   s0   	+	&	'			U	Z		/			