ó
jæP_c           @  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	 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 d  d	 l m Z e Z e Z e j Z e Z  d
 „  Z! d „  Z" d „  Z# d  d „ Z$ d „  Z% d „  Z& d „  Z' d „  Z( d  d „ Z) d „  Z* d „  Z+ d „  Z, d „  Z- d „  Z. d „  Z/ d „  Z0 d „  Z1 e2 d k r¤e1 ƒ  n  d S(   iÿÿÿÿ(   t   print_functionN(   t   sleep(   t   ArgumentParsert   ArgumentDefaultsHelpFormattert   SUPPRESS(   t   basename(   t   Parallelt   delayed(   t   tcountert   mappert   filtert   deduplicatort   snps(   t   replaceExtensiont   estimateMaxReadLength(   t   __version__c         C  s!   t  r
 t St |  d ƒ } | Sd  S(   Nt   a(   t   logToMainOutputt
   mainOutputt   open(   t   patht   log(    (    sB   /home/users/marinovg/programs/slamdunk-master/slamdunk/slamdunk.pyt
   getLogFile5   s    c         C  s   t  s |  j ƒ  n  d  S(   N(   R   t   close(   R   (    (    sB   /home/users/marinovg/programs/slamdunk-master/slamdunk/slamdunk.pyt   closeLogFile<   s    c         C  s   t  |  d t ƒd  S(   Nt   file(   t   printR   (   t   msg(    (    sB   /home/users/marinovg/programs/slamdunk-master/slamdunk/slamdunk.pyt   message@   s    c         C  s!   t  |  d t ƒt j | ƒ d  S(   NR   (   R   R   t   syst   exit(   R   t   code(    (    sB   /home/users/marinovg/programs/slamdunk-master/slamdunk/slamdunk.pyt   errorC   s    c           C  s   t  d d d d t ƒd  S(   Nt   .t   endt    R   (   R   R   (    (    (    sB   /home/users/marinovg/programs/slamdunk-master/slamdunk/slamdunk.pyt   stepFinishedG   s    c           C  s   t  d d t ƒd  S(   NR#   R   (   R   R   (    (    (    sB   /home/users/marinovg/programs/slamdunk-master/slamdunk/slamdunk.pyt   dunkFinishedJ   s    c         C  s4   t  j j |  ƒ s0 t d |  ƒ t  j |  ƒ n  d  S(   Ns   Creating output directory: (   t   osR   t   existsR   t   makedirs(   t	   directory(    (    sB   /home/users/marinovg/programs/slamdunk-master/slamdunk/slamdunk.pyt	   createDirM   s    c      	   C  s  g  } g  } t  |  d ƒ ê } xà | D]Ø } | j ƒ  } t | ƒ d k r% |  j d ƒ rj | j d ƒ } n1 |  j d ƒ r‹ | j d ƒ } n t d |  ƒ ‚ t | ƒ d k  rÀ t d	 |  ƒ ‚ n  | j | d
 ƒ | j | d d | d d | d ƒ q% q% WWd  QX| | f S(   Nt   ri   s   .tsvs   	s   .csvt   ,s   Unknown file extension found: i   s   Invalid sample file found: i    t   :i   i   (   R   t   stript   lent   endswitht   splitt   RuntimeErrort   append(   t   fileNamet   samplest   infost   inst   linet   cols(    (    sB   /home/users/marinovg/programs/slamdunk-master/slamdunk/slamdunk.pyt   readSampleFileR   s     6c         C  s1  g  } g  } t  |  ƒ d k r] |  d j d ƒ sD |  d j d ƒ r] t |  d ƒ \ } } n |  } d g t  | ƒ } | d k rþ | t  | ƒ k rÅ t d t | ƒ d t t  | ƒ ƒ d ƒ ‚ n  t d	 t | ƒ ƒ | | d g } | | d g } n) | d k r't d
 t | ƒ d ƒ ‚ n  | | f S(   Ni   i    s   .tsvs   .csvR#   s   Sample index out of range. s    > s   . Check -i/--sample-indexs   Running only job s   Sample index (s6   ) out of range. Starts with 1. Check -i/--sample-index(   R/   R0   R:   R2   t   strR   (   t   bamst   runOnlyR5   t   samplesInfos(    (    sB   /home/users/marinovg/programs/slamdunk-master/slamdunk/slamdunk.pyt
   getSamplesg   s    81c         C  sÐ  | r0 t  j j |
 t t | ƒ d d ƒ ƒ } n' t  j j |
 t t | ƒ d d ƒ ƒ } t  j j |
 t t | ƒ d d ƒ ƒ } t t | ƒ d d ƒ } d } d } |	 d k rg|	 j d ƒ } t | ƒ d	 k rÜ | d
 } n  t | ƒ d k rEi d d 6d d 6d d 6d d 6d d 6} | d	 | k r8| | d	 } qE| d	 } n  t | ƒ d k rg| d } qgn  t j | | | t	 | ƒ | | d | d | d | d | d |  d | d | d | d t
 d t ƒ
t ƒ  d  S(   Ns   .bamt   _slamdunk_mappeds   .sams   .logR#   t   NAs   -1R-   i   i    i   t   pulset   pt   chaset   ci   t   threadst   trim5pt   maxPolyAt   topnt   sampleIdt
   sampleNamet
   sampleTypet
   sampleTimet	   printOnlyt   verbose(   R&   R   t   joinR   R   R1   R/   R	   t   MapR   RN   RO   R$   (   t   tidt   inputBAMt   referenceFileRF   RG   RH   t   quantseqMappingt   endtoendMappingRI   t   sampleDescriptiont   outputDirectoryt   skipSAMt	   outputSAMt	   outputLOGRK   RL   RM   t   sampleDescriptionst   typeDict(    (    sB   /home/users/marinovg/programs/slamdunk-master/slamdunk/slamdunk.pyt   runMap}   s(    *'')^c         C  s¥   t  j j | t t | ƒ d d ƒ ƒ } t  j j | t t | ƒ d d ƒ ƒ } t  j j | t t | ƒ d d ƒ ƒ } t j | | t | ƒ | t t	 t
 ƒ t ƒ  d  S(   Ns   .samR@   s   .bams   .log(   R&   R   RP   R   R   R	   t   sortR   t   FalseRN   RO   R$   (   RR   t   bamRF   RX   t   inputSAMt	   outputBAMR[   (    (    sB   /home/users/marinovg/programs/slamdunk-master/slamdunk/slamdunk.pyt
   runSam2Bam˜   s
    '''%c         C  s‚   t  j j | t t | ƒ d d ƒ ƒ } t  j j | t t | ƒ d d ƒ ƒ } t | ƒ } t j | | | ƒ t | ƒ t	 ƒ  d  S(   Ns   .bamt   _dedups   .log(
   R&   R   RP   R   R   R   R   t   DedupR   R$   (   RR   Ra   RX   Rc   R[   R   (    (    sB   /home/users/marinovg/programs/slamdunk-master/slamdunk/slamdunk.pyt   runDedupŸ   s    ''
c   	   
   C  s„   t  j j | t t | ƒ d d ƒ ƒ } t  j j | t t | ƒ d d ƒ ƒ } t j | | t | ƒ | | | | t t	 ƒ	 t
 ƒ  d  S(   Ns   .bamt	   _filtereds   .log(   R&   R   RP   R   R   R
   t   FilterR   RN   RO   R$   (	   RR   Ra   t   bedt   mqt   minIdentityt   maxNMRX   Rc   R[   (    (    sB   /home/users/marinovg/programs/slamdunk-master/slamdunk/slamdunk.pyt	   runFilter§   s    ''+c   	      C  s‡   t  j j | t t | ƒ d d ƒ ƒ } t  j j | t t | ƒ d d ƒ ƒ } t j | | | | | | t | ƒ t t	 t
 ƒ
 t ƒ  d  S(   Ns   .vcft   _snps   .log(   R&   R   RP   R   R   R   t   SNPsR   RN   RO   R`   R$   (	   RR   RT   t   minCovt
   minVarFreqt   minQualRS   RX   t	   outputSNPR[   (    (    sB   /home/users/marinovg/programs/slamdunk-master/slamdunk/slamdunk.pyt   runSnp­   s    ''.c
         C  sŽ  t  j j | t t | ƒ d d ƒ ƒ }
 t  j j | t t | ƒ d d ƒ ƒ } t  j j | t t | ƒ d d ƒ ƒ } t  j j | t t | ƒ d d ƒ ƒ } |	 d  k r± |	 } n< | d  k rç t  j j | t t | ƒ d d ƒ ƒ } n d  } | d  k rt | ƒ } n  | d	 k  r.t d
 ƒ t j	 d	 ƒ n  t
 | ƒ } t d t | ƒ d d | ƒt j | | | | | | |
 | | | | ƒ t ƒ  |
 S(   Ns   .tsvt   _tcounts	   .bedgrapht   _tcount_plust   _tcount_minss   .logs   .vcfRo   i    sg   Difference between minimum and maximum read length is > 10. Please specify --max-read-length parameter.s   Using s    as maximum read length.R   (   R&   R   RP   R   R   t   NoneR   R   R   R   R   R;   R   t   computeTconversionsR$   (   RR   Ra   t   refRj   t	   maxLengthRs   t   conversionThresholdRX   t   snpDirectoryt   vcfFilet	   outputCSVt   outputBedgraphPlust   outputBedgraphMinusR[   t   inputSNPR   (    (    sB   /home/users/marinovg/programs/slamdunk-master/slamdunk/slamdunk.pyt   runCount³   s&    ''''	*
+c           s‰  t  d ƒ ˆ  j d k rT t j d d ƒ d } t  d t | ƒ d ƒ t | ƒ n  ˆ  j } t | ƒ ˆ  j ‰ ˆ  j	 ‰ t
 j j | d ƒ ‰ t ˆ ƒ t ˆ  j d	 ˆ  j ƒ\ ‰ } t  d
 t t ˆ ƒ ƒ d t ˆ ƒ d ƒ x t d t ˆ ƒ ƒ D]é } ˆ | } ˆ  j s$t ˆ ƒ d k r?t t | ƒ d d ƒ } n	 ˆ  j } | | } | d k rƒ| d ˆ  j d t ˆ  j ƒ } n  | } ˆ  j d k r¤ˆ  j } n  t | | ˆ ˆ ˆ  j ˆ  j ˆ  j ˆ  j ˆ  j | ˆ ˆ  j ƒ qø Wt ƒ  ˆ  j skt  d t t ˆ ƒ ƒ d t ˆ ƒ d ƒ t d d d t ƒ ‡ ‡ ‡ f d †  t d t ˆ ƒ ƒ Dƒ ƒ }	 t ƒ  n  g  ‰ x< ˆ D]4 }
 ˆ j  t
 j j ˆ t t |
 ƒ d d ƒ ƒ ƒ qxWˆ  j! ‰ ˆ  j" r×ˆ  j" ‰ t# ˆ  _$ n  ˆ  j$ séd  ‰ n  t
 j j | d ƒ ‰ t ˆ ƒ t  d t t ˆ ƒ ƒ d t ˆ ƒ d ƒ t d ˆ d t ƒ ‡  ‡ ‡ ‡ f d †  t d t ˆ ƒ ƒ Dƒ ƒ }	 t ƒ  g  } x< ˆ D]4 }
 | j  t
 j j ˆ t t |
 ƒ d d ƒ ƒ ƒ q‹W| ‰ g  } t ƒ  d  ‰	 d  ‰ d ˆ  k rát
 j j | d ƒ ‰ t ˆ ƒ ˆ  j& ‰ ˆ  j' ‰ ˆ } | d k rDt( | d ƒ } n  ˆ  j) ‰
 t  d t t ˆ ƒ ƒ d t | ƒ d ƒ t d | d t ƒ ‡ ‡ ‡ ‡ ‡ ‡
 f d †  t d t ˆ ƒ ƒ Dƒ ƒ }	 t
 j j | d ƒ ‰	 t ƒ  n	 ˆ  j* ‰ t
 j j | d  ƒ ‰ t ˆ ƒ t  d! t t ˆ ƒ ƒ d t ˆ ƒ d ƒ t d ˆ d t ƒ ‡  ‡ ‡ ‡ ‡	 ‡ f d" †  t d t ˆ ƒ ƒ Dƒ ƒ }	 t ƒ  d  S(#   Ns   slamdunk alliÿÿÿÿiÈ   iÐ  g     @@s   Waiting s    secondst   mapR=   s   Running slamDunk map for s    files (s	    threads)i    i   R#   R-   s   Running slamDunk sam2bam for t   n_jobsRO   c         3  s.   |  ]$ } t  t ƒ | ˆ | ˆ ˆ  ƒ Vq d  S(   N(   R   Rd   (   t   .0RR   (   t   dunkPatht   nR5   (    sB   /home/users/marinovg/programs/slamdunk-master/slamdunk/slamdunk.pys	   <genexpr>û   s    s   .bamR@   R
   s   Running slamDunk filter for c      	   3  s@   |  ]6 } t  t ƒ | ˆ | ˆ ˆ  j ˆ  j ˆ  j ˆ ƒ Vq d  S(   N(   R   Rn   Rk   t   identityt   nm(   R‡   RR   (   t   argsRj   Rˆ   t   dunkbufferIn(    sB   /home/users/marinovg/programs/slamdunk-master/slamdunk/slamdunk.pys	   <genexpr>  s    Rh   R   t   snpi   s   Running slamDunk SNP for c      	   3  s7   |  ]- } t  t ƒ | ˆ ˆ ˆ ˆ ˆ | ˆ  ƒ Vq d  S(   N(   R   Ru   (   R‡   RR   (   Rˆ   R   Rq   Rr   RT   t   snpqual(    sB   /home/users/marinovg/programs/slamdunk-master/slamdunk/slamdunk.pys	   <genexpr>:  s    t   counts   Running slamDunk tcount for c         3  sL   |  ]B } t  t ƒ | ˆ | ˆ ˆ  j ˆ  j ˆ  j ˆ  j ˆ ˆ ˆ ƒ
 Vq d  S(   N(   R   R„   Rj   R|   Rs   R}   (   R‡   RR   (   RŒ   Rˆ   R   RT   R~   R   (    sB   /home/users/marinovg/programs/slamdunk-master/slamdunk/slamdunk.pys	   <genexpr>H  s    (+   R   t   sampleIndext   randomt	   randrangeR;   R   t	   outputDirR*   RF   RT   R&   R   RP   R?   t   filesR/   t   rangeRK   R   R   RL   RM   R^   t   trim5RH   t   quantseqt   endtoendRI   RY   R%   R   RO   R3   Rj   t	   filterbedt   Truet   multimapRy   t   covt   vart   intRs   R   (   RŒ   t   secRX   R>   t   iRa   RK   t
   sampleInfoRR   t   resultsR   t   dunkbufferOutt	   snpThread(    (   RŒ   Rj   Rˆ   R   Rq   Rr   R‰   RT   R5   R~   R   R   sB   /home/users/marinovg/programs/slamdunk-master/slamdunk/slamdunk.pyt   runAllÎ   sŽ    
	
		
,
	
%A	,@
2					
,C2
			,I
	
,Ic            sZ  d }  t  d |  d t ƒ } | j d d d d d t ƒ| j d d	 d
 d ƒ } | j d d d d t ƒ} | j d d d d d d d ƒ| j d d d t d t d
 d d t d d ƒ| j d d d t d t d
 d d t d d ƒ| j d d d t	 d t
 d
 d  d d! d d" ƒ| j d# d$ d t	 d t
 d
 d% d d& d d' ƒ| j d( d) d t	 d t
 d
 d* d d+ d d, ƒ| j d- d. d t	 d t
 d
 d/ d d& d d0 ƒ| j d1 d2 d
 d3 d d4 d t
 d d5 ƒ| j d6 d7 d d4 d
 d8 d d9 ƒ| j d: d; d t d
 d< d t
 d d= ƒ| j d> d? d t d
 d@ d t
 d dA d dB ƒ| j dC dD d t	 d
 dE d t
 d dF d dG ƒ| j dH dI d t	 d t
 d dJ d
 dK d dL ƒ| j dM dN d d4 d
 dO d dP ƒ| j dQ d dR ƒ} | j dS d d d dT d d ƒ| j d d d t d t d
 d d d ƒ| j dU dV d t d t
 d
 dW d dX ƒ| j dY dZ d t	 d t
 d d[ d
 d\ d d] ƒ| j d^ d_ d t d t
 d d` d
 da d db ƒ| j dc dd d t	 d t
 d dJ d
 de d df ƒ| j d- d. d t	 d t
 d
 d/ d d& d dg ƒ| j dh d di d t ƒ} | j dS d d d dT d d ƒ| j d d d t d t d
 d d t d d ƒ| j d d d t d
 dj d t d t d d ƒ| j dk dl d t
 d
 dm d t	 d dn d do ƒ| j dp dq d t
 d
 dr d t d ds d dt ƒ| j d- d. d t	 d t
 d d& d
 d/ d d0 ƒ| j du d dv ƒ} | j dS d d d dT d d ƒ| j d d d t d t d
 d d t d d ƒ| j dw dx d t d t
 d
 dy d t d dz ƒ| j d{ d| d t d t
 d
 d} d t d d~ ƒ| j d d d t d t d
 d d t d d ƒ| j dU dV d t d t d
 dW d t d d€ ƒ| j dk d d t	 d
 d‚ d t
 d d& d dƒ ƒ| j d„ d… d t	 d t
 d
 d† d d‡ ƒ| j d1 dˆ d t	 d d‰ d t
 d
 dŠ d d‹ ƒ| j d- d. d t	 d t
 d d& d
 d/ d dg ƒ| j dŒ d d ƒ} | j d d d d d d d ƒ| j d d d t d t d
 d d d ƒ| j dU dV d t d t d
 dW d dŽ ƒ| j d d d t d t
 d
 d‘ d d’ ƒ| j d{ d| d t d t
 d
 d} d t d d“ ƒ| j d d d t d t d
 d d d” ƒ| j d d d t	 d t
 d
 d  d d! d d• ƒ| j d( d) d t	 d t
 d
 d* d d+ d d– ƒ| j d# d$ d t	 d t
 d
 d% d d& d d— ƒ| j d- d. d t	 d t
 d d& d
 d/ d d˜ ƒ| j d1 d2 d
 d3 d d4 d t
 d d5 ƒ| j d6 d7 d d4 d
 d8 d d9 ƒ| j d™ dš d d4 d
 d› d dœ ƒ| j dY dZ d t	 d t
 d d[ d
 d\ d d ƒ| j d^ d_ d t d t
 d d` d
 da d db ƒ| j dc dd d t	 d t
 d dJ d
 de d dž ƒ| j dŸ dl d t
 d
 dm d t	 d d  d do ƒ| j d¡ dq d t
 d
 dr d t d d¢ d dt ƒ| j dk d d t	 d
 d‚ d t
 d d& d dƒ ƒ| j d£ d… d t	 d t
 d
 d† d d‡ ƒ| j d¤ dˆ d t	 d d‰ d t
 d
 dŠ d d‹ ƒ| j d: d; d t d
 d< d t
 d d= ƒ| j d> d? d t d
 d@ d t
 d dA d dB ƒ| j dC dD d t	 d
 dE d t
 d dF d dG ƒ| j dH dI d t	 d t
 d dJ d
 dK d dL ƒ| j dM dN d d4 d
 dO d dP ƒ| j ƒ  ‰  ˆ  j } | d k r¸t j ƒ  ˆ  j ‰ ˆ  j dJ k rÆt j dF d¥ ƒ d¦ }	 t d§ t |	 ƒ d¨ ƒ t |	 ƒ n  t ˆ ƒ ˆ  j ‰ ˆ  j }
 t ˆ  j d© ˆ  j ƒ\ ‰ } t dª t t ˆ ƒ ƒ d« t ˆ ƒ d¬ ƒ x t dF t ˆ ƒ ƒ D]é } ˆ | } ˆ  j snt ˆ ƒ d& k r‰t t | ƒ d	 d	 ƒ } n	 ˆ  j } | | } | d	 k rÍ| d­ ˆ  j  d­ t ˆ  j! ƒ } n  | } ˆ  j dJ k rîˆ  j } n  t" | | |
 ˆ ˆ  j# ˆ  j$ ˆ  j% ˆ  j& ˆ  j' | ˆ ˆ  j( ƒ qBWt) ƒ  ˆ  j( sVt d® t t ˆ ƒ ƒ d« t ˆ ƒ d¬ ƒ t* d¯ d& d° t+ ƒ ‡ ‡ ‡ f d± †  t dF t ˆ ƒ ƒ Dƒ ƒ } t) ƒ  qVnž| dQ k rYˆ  j ‰ t ˆ ƒ ˆ  j ‰ t d² t t ˆ  j, ƒ ƒ d« t ˆ ƒ d¬ ƒ t* d¯ ˆ d° t+ ƒ ‡  ‡ f d³ †  t dF t ˆ  j, ƒ ƒ Dƒ ƒ } t) ƒ  ný| dh k rFˆ  j ‰ t ˆ ƒ ˆ  j- ‰ ˆ  j. ‰ ˆ  j/ ‰ d´ ‰ ˆ  j ‰ ˆ d& k rÁt	 ˆ d[ ƒ ‰ n  t dµ t t ˆ  j, ƒ ƒ d« t ˆ ƒ d¬ ƒ t* d¯ ˆ d° t+ ƒ ‡  ‡ ‡ ‡ ‡ ‡ f d¶ †  t dF t ˆ  j, ƒ ƒ Dƒ ƒ } t) ƒ  n| du k r)ˆ  j ‰ t ˆ ƒ dy ˆ  k r}ˆ  j0 ‰ n d  ‰ d} ˆ  k r›ˆ  j2 ‰	 n d  ‰	 ˆ  j ‰ t d· t t ˆ  j, ƒ ƒ d« t ˆ ƒ d¬ ƒ t* d¯ ˆ d° t+ ƒ ‡  ‡ ‡ ‡	 f d¸ †  t dF t ˆ  j, ƒ ƒ Dƒ ƒ } t) ƒ  n- | dŒ k rIt3 ˆ  ƒ t) ƒ  n | j4 d¹ ƒ d  S(º   Ns-   SLAMdunk software for analyzing SLAM-seq datat   descriptiont   formatter_classs	   --versiont   actiont   versions	   %(prog)s t   helpR#   t   destt   commandR…   s   Map SLAM-seq read dataR•   t   storesƒ   Single csv/tsv file (recommended) containing all sample files and sample info or a list of all sample BAM/FASTA(gz)/FASTQ(gz) filest   nargst   +s   -rs   --referencet   typet   requiredRT   t   defaults   Reference fasta files   -os   --outputDirR”   s&   Output directory for mapped BAM files.s   -5s	   --trim-5pR—   i   s.   Number of bp removed from 5' end of all reads.s   -ns   --topnRI   i   s,   Max. number of alignments to report per reads   -as   --max-polyaRH   i   s)   Max number of As at the 3' end of a read.s   -ts	   --threadsRF   s   Thread numbers   -qs
   --quantseqR˜   t
   store_trues5   Run plain Quantseq alignment without SLAM-seq scorings   -es
   --endtoendR™   s1   Use a end to end alignment algorithm for mapping.s   -sns   --sampleNameRK   s-   Use this sample name for all supplied sampless   -sys   --sampleTypeRL   RB   s-   Use this sample type for all supplied sampless   -sts   --sampleTimeRM   i    s-   Use this sample time for all supplied sampless   -is   --sample-indexiÿÿÿÿR‘   si   Run analysis only for sample <i>. Use for distributing slamdunk analysis on a cluster (index is 1-based).s   -sss
   --skip-samRY   s:   Output BAM while mapping. Slower but, uses less hard disk.R
   s   Filter SLAM-seq aligned dataRa   s   Bam file(s)s   -bs   --bedRj   s"   BED file, overrides MQ filter to 0s   -mqs   --min-mqi   Rk   s.   Minimum mapping quality (default: %(default)d)s   -mis   --min-identitygffffffî?RŠ   s1   Minimum alignment identity (default: %(default)s)s   -nms   --max-nmR‹   s0   Maximum NM for alignments (default: %(default)d)s$   Thread number (default: %(default)d)RŽ   s"   Call SNPs on SLAM-seq aligned datat   fastas   -cs   --min-coverageR   s"   Minimimum coverage to call varianti
   s   -fs   --var-fractionRž   s*   Minimimum variant fraction to call variantgš™™™™™é?R   s.   Count T/C conversions in SLAM-seq aligned datas   -ss   --snp-directoryt   snpDirs   Directory containing SNP files.s   -vs   --vcfR   s(   Externally provided custom variant file.R{   s   BED files   --conversion-thresholdR}   sS   Number of T>C conversions required to count read as T>C read (default: %(default)d)s   -ls   --max-read-lengthR|   s   Max read length in BAM files   --min-base-quali   Rs   s>   Min base quality for T -> C conversions (default: %(default)d)t   alls   Run entire SLAMdunk analysiss   BED file with 3'UTR coordinatess   -fbs   --filterbedRš   sE   BED file with 3'UTR coordinates to filter multimappers (activates -m)s.   Skip SNP step and provide custom variant file.s"   Output directory for slamdunk run.sD   Number of bp removed from 5' end of all reads (default: %(default)s)s?   Max number of As at the 3' end of a read (default: %(default)s)sC   Max. number of alignments to report per read (default: %(default)s)s$   Thread number (default: %(default)s)s   -ms
   --multimapRœ   s8   Use reference to resolve multimappers (requires -n > 1).s.   Minimum mapping quality (default: %(default)s)s0   Maximum NM for alignments (default: %(default)s)s   -mcs9   Minimimum coverage to call variant (default: %(default)s)s   -mvsA   Minimimum variant fraction to call variant (default: %(default)s)s   -rls   -mbqiÐ  iè  s   Waiting s    secondsR=   s   Running slamDunk map for s    files (s	    threads)R-   s   Running slamDunk sam2bam for R†   RO   c         3  s.   |  ]$ } t  t ƒ | ˆ | ˆ  ˆ ƒ Vq d  S(   N(   R   Rd   (   R‡   RR   (   R‰   RX   R5   (    sB   /home/users/marinovg/programs/slamdunk-master/slamdunk/slamdunk.pys	   <genexpr>Ý  s    s   Running slamDunk filter for c      	   3  sF   |  ]< } t  t ƒ | ˆ  j | ˆ  j ˆ  j ˆ  j ˆ  j ˆ ƒ Vq d  S(   N(   R   Rn   Ra   Rj   Rk   RŠ   R‹   (   R‡   RR   (   RŒ   RX   (    sB   /home/users/marinovg/programs/slamdunk-master/slamdunk/slamdunk.pys	   <genexpr>å  s    i   s   Running slamDunk SNP for c      	   3  s:   |  ]0 } t  t ƒ | ˆ ˆ ˆ ˆ ˆ  j | ˆ ƒ Vq d  S(   N(   R   Ru   Ra   (   R‡   RR   (   RŒ   Rµ   Rq   Rs   Rr   RX   (    sB   /home/users/marinovg/programs/slamdunk-master/slamdunk/slamdunk.pys	   <genexpr>ô  s    s   Running slamDunk tcount for c         3  sR   |  ]H } t  t ƒ | ˆ  j | ˆ  j ˆ  j ˆ  j ˆ  j ˆ  j ˆ ˆ ˆ ƒ
 Vq d  S(   N(   R   R„   Ra   R{   Rj   R|   Rs   R}   (   R‡   RR   (   RŒ   RX   R~   R   (    sB   /home/users/marinovg/programs/slamdunk-master/slamdunk/slamdunk.pys	   <genexpr>  s    s   Too few arguments.(5   R   R   t   add_argumentR   t   add_subparserst
   add_parserR;   R›   R   RŸ   R`   t   floatt
   parse_argsR­   R	   t   checkNextGenMapVersionR”   R‘   R’   R“   R   R   R*   RF   RT   R?   R•   R/   R–   RK   R   R   RL   RM   R^   R—   RH   R˜   R™   RI   RY   R%   R   RO   Ra   Rµ   R   Rž   R¶   Ry   R   R¦   R    (   t   usaget   parsert
   subparserst	   mapparsert   filterparsert	   snpparsert   countparsert	   allparserR­   R    RT   R>   R¡   Ra   RK   R¢   RR   R£   (    (
   RŒ   Rµ   Rq   Rs   Rr   R‰   RX   R5   R~   R   sB   /home/users/marinovg/programs/slamdunk-master/slamdunk/slamdunk.pyt   runL  s   ......("(..."((...............(..(((.(....(""......(.(..."	
	
		,
	
%A	,@	
	/@
	
				/L
	
	/F


t   __main__(3   t
   __future__R    R   R&   R’   t   timeR   t   argparseR   R   R   t   os.pathR   t   joblibR   R   t   slamdunk.dunksR   R	   R
   R   R   t   slamdunk.utils.miscR   R   t   slamdunk.versionR   R`   RN   RO   t   stderrR   R   R   R   R   R    R$   R%   R*   R:   R?   R^   Rd   Rg   Rn   Ru   R„   R¦   RÆ   t   __name__(    (    (    sB   /home/users/marinovg/programs/slamdunk-master/slamdunk/slamdunk.pyt   <module>   s>   $(															~	Â