a
    ŽÞd{<  ã                   @   s`   d dl mZmZmZ d dlZd dlZd dlmZ d dlm	Z	 dd„ Z
dd„ Zd	d
„ Zdd„ ZdS )é    )ÚOptionParserÚOptionGroupÚSUPPRESS_HELPN)Ú__version__)Úcheck_R_libc                 C   s@   t j | ¡rt j | ¡sdS | dkr(dS tj d|  ¡ d S d S )NTú-z Error: '%s' is not a valid file
)ÚosÚpathÚexistsÚisdirÚsysÚstderrÚwrite)Úfilename© r   ú5lib/python3.9/site-packages/mapdamage/parseoptions.pyÚ
file_exist   s    r   c                 C   s\   t j dd¡ d¡D ]B}t j t j || ¡¡rt j t j || ¡¡st j || ¡  S qd S )NÚPATHÚ ú:)r   ÚenvironÚgetÚsplitr	   r
   Újoinr   )Zprogramr	   r   r   r   Úwhereis   s    ÿr   c                  C   s:   d} t j}|| krdS t j d| d | d f ¡ d S d S )N)é   é   TzOYour Python interpreter is too old.Please consider upgrading to at least %d.%d
r   é   )r   Úversion_infor   r   )Zreq_versionZcur_versionr   r   r   Úcheck_py_version   s    ÿr   c            	   	   C   s	  t dtdd} t| dƒ}|jddddd	d
d |jdddddd |  |¡ t| dƒ}|jdddtd d |jddtd d |jddddd |jdddd td!dd" |jd#d$d%d&td'dd" |jd(d)d*d+td,dd" |jd-d.d/dd	d0d |jd1d2d3d4ddd5 |jd6d7d8ddd5 |jd9d:d;d<ddd5 |jd=d>d?d@ddd5 |jdAdBdCd dD |jdEdFtddd5 |  |¡ t| dGƒ}|jdHdIdJdKtdLdd" |jdMdNdOdPtdQdd" |jdRdSdTdUtd'dd" |jdVdWdXdYd	dZdd" |  |¡ t| d[ƒ}|jdZd\d]d^td_dd" |jdZd`dadbtdcdd" |jdZdddedftd'dd" |jdZdgdhditdjdd" |jdZdkdldmddd5 |jdZdndodpddd5 |jdZdqdrdsddd5 |jdZdtdudvddd5 |jdZdwdxdyddd5 |jdZdzd{d|ddd5 |jdZd}d~dddd5 |jdZd€dd‚ddd5 |jdZdƒd„d…ddd5 |jdZd†d‡dˆtd‰dd" |jdŠd‹dŒddd5 |jddŽddd |jddddd |  |¡ t| d‘ƒ}|jd’d“d”ddd5 |jd•d–d—ddd5 |jd˜d™dšd dd5 |jd›dœdtddž |jdŸd dtddž |  |¡ |  ¡ \}}t	ƒ s d S |j
r.tƒ rt d¡¡ ntd¢ƒ t d,¡ |jsP|jsP|jsP|  d£¡ |jsj|jsj|  d¤¡ |js–|js–t|jƒr’t|jƒs–d S |jd urÒ|jd,krº|  d¥¡ n|jd¡krÒt|jƒ|_|jrì|jsì|  d¦¡ |jr|js|  d§¡ |jr |js |  d¨¡ |jr:|js:|  d©¡ |jrT|jsT|  dª¡ |jrn|jrn|  d«¡ |jd,k r„|  d¬¡ |jd,k rš|  d­¡ |jd,ks²|jd¡kr¼|  d®¡ |jd,k rÒ|  d¯¡ |jd,k rè|  d°¡ |j|jkr|js|  d±¡ |j|jkr |  d²¡ |jd,k s8|jd³krB|  d´¡ |j r\|j!r\|  dµ¡ |j"dZkrŒ|jrŒt#j$ %t#j$ &|j¡¡d, |_"|j"dZkrÌ|jsÌ|jrÌt#j$ %t#j$ &|j¡¡d,  'd¶dZ¡|_"|jsü|jrüd¶t#j$ %t#j$ &|j¡¡d,  |_|j(sj|j)s|jrjt*|jt+ƒr6t#j$ &|jd, ¡}nt#j$ &|j¡}t#j$ %|¡d, d· }t#j$ ,|j|¡|_(t#j$ -|j¡rÒ|js˜|js˜td¸|j ƒ |jrt|jd¹ ƒrÀt|jdº ƒs|  d»|j ¡ n>t#j.|jd¼d½ |jsú|jsú|jrtj/ 0d¾|j ¡ d S |j1d u r&|j2|_1n(d,|j1  krB|j2ksNn |  d¿¡ |j3d u rd|j2|_3n(d,|j3  kr€|j2ksŒn |  dÀ¡ t4dÁƒs¤tdÂƒ dÃ|_5|j6|j7 |j8 d¡krÆ|  dÄ¡ tƒ 	rtdÅƒ dÃ|_9|jrît dÆ¡ |j)	r t dÇ¡ |j	rt dÈ¡ |S )ÉNzO%prog [options] -i BAMfile -r reference.fasta

Use option -h or --help for helpzRreport bugs to aginolhac@snm.ku.dk, MSchubert@snm.ku.dk or jonsson.hakon@gmail.com)ÚversionÚepilogzInput filesz-iz--inputzOSAM/BAM file, must contain a valid header, use '-' for reading a BAM from stdinÚstoreÚstringr   )ÚhelpÚactionÚtypeÚdestz-rz--referencezReference file in FASTA formatÚref)r$   r%   r'   zGeneral optionsz-nz--downsamplez½Downsample to a randomly selected fraction of the reads (if 0 < DOWNSAMPLE < 1), or a fixed number of randomly selected reads (if DOWNSAMPLE >= 1). By default, no downsampling is performed.)r$   r&   Údefaultz--downsample-seedzbSeed value to use for downsampling. See documentation for py module 'random' for default behavior.z--merge-reference-sequenceszîIgnore referece sequence names when tabulating reads (using '*' instead). Useful for alignments with a large number of reference sequnces, which may otherwise result in excessive memory or disk usage due to the number of tables generated.FÚ
store_true)r$   r)   r%   z-lz--lengthÚlengthz2read length, in nucleotides to consider [%default]éF   )r'   r$   r&   r)   r%   z-az--aroundÚaroundz5nucleotides to retrieve before/after reads [%default]é
   z-Qz--min-basequalÚminqualzHminimun base quality Phred score considered, Phred-33 assumed [%default]r   z-dz--folderz/folder name to store results [results_FILENAME]Úfolderz-fz--fastaZfastaz Write alignments in a FASTA file)r'   r$   r)   r%   z--plot-onlyÚ	plot_onlyz,Run only plotting from a valid result folderz-qz--quietÚquietzDisable any output to stdoutz-vz	--verboseÚverbosez.Display progression information during parsingz--mapdamage-modulesZmapdamage_modulesz3Override the system wide installed mapDamage module)r'   r$   r)   z	--no-plotÚno_rzOptions for graphicsz-yz--ymaxÚymaxzMgraphical y-axis limit for nucleotide misincorporation frequencies [%default]g333333Ó?z-mz
--readplotÚreadplotz\read length, in nucleotides, considered for plotting nucleotide misincorporations [%default]é   z-bz	--refplotÚrefplotz“the number of reference nucleotides to consider for ploting base composition in the region located upstream and downstream of every read [%default]z-tz--titleÚtitleztitle used for plots [%default]r   z&Options for the statistical estimationz--randZrandzLNumber of random starting points for the likelihood optimization  [%default]é   z--burnZburnz'Number of burnin iterations  [%default]i'  z--adjustZadjustzDNumber of adjust proposal variance parameters iterations  [%default]z--iterÚiterz+Number of final MCMC iterations  [%default]iPÃ  z	--forwardÚforwardz-Using only the 5' end of the seqs  [%default]z	--reverseÚreversez-Using only the 3' end of the seqs  [%default]z
--var-dispZvar_dispz0Variable dispersion in the overhangs  [%default]z--jukes-cantorZjukes_cantorz-Use Jukes Cantor instead of HKY85  [%default]z--diff-hangsZ
diff_hangsz5The overhangs are different for 5' and 3'  [%default]z--fix-nicksÚ	fix_nicksz\Fix the nick frequency vector (Only C.T from the 5' end and G.A from the 3' end)  [%default]z--use-raw-nick-freqÚuse_raw_nick_freqz?Use the raw nick frequency vector without smoothing  [%default]z--single-strandedÚsingle_strandedz#Single stranded protocol [%default]z
--theme-bwZtheme_bwz8Use black and white theme in post. pred. plot [%default]z--seq-lengthÚ
seq_lengthz2How long sequence to use from each side [%default]é   z--stats-onlyÚ
stats_onlyz:Run only statistical estimation from a valid result folderz
--no-statsz2Disabled statistical estimation, active by defaultz--check-R-packagesz"Check if the R modules are workingz"Options for rescaling of BAM filesz	--rescaleÚrescalez[Rescale the quality scores in the BAM file using the output from the statistical estimationz--rescale-onlyÚrescale_onlyz-Run only rescaling from a valid result folderz--rescale-outÚrescale_outz#Write the rescaled BAM to this filez--rescale-length-5pÚrescale_length_5pzFHow many bases to rescale at the 5' termini; defaults to --seq-length.)r'   r$   r&   r%   z--rescale-length-3pÚrescale_length_3pr   zAll R packages are presentzSAM/BAM file not given (-i)zReference file not given (-r)z(-n/--downsample must be a positive valuez.Folder not provided, required with --plot-onlyz/Folder not provided, required with --stats-onlyz1Folder not provided, required with --rescale-onlyz4Input bam not provided, required with --rescale-onlyz4Reference not provided, required with --rescale-onlyz4Cannot use verbose and quiet option at the same timez'length (-l) must be a positive integrerz'around (-a) must be a positive integrerz1ymax (-b) must be an real number beetween 0 and 1z)readplot (-m) must be a positive integrerz(refplot (-b) must be a positive integrerz,refplot (-b) must be inferior to around (-a)z-readplot (-m) must be inferior to length (-l)é)   zDminimal base quality, Phred score, must be within this range: 0 - 41zCCannot use only forward end and only reverse end for the statisticsZresults_z.rescaled.bamzWarning, %s already existsz/dnacomp.txtz/misincorporation.txtz&folder %s is not a valid result folderiè  )Úmodez@Error, %s does not exist while plot/stats/rescale only was used
zT--rescale-length-3p must be less than or equal to --seq-length and greater than zerozT--rescale-length-5p must be less than or equal to --seq-length and greater than zeroZRscriptz:Warning, Rscript is not in your PATH, plotting is disabledTzZThe options --use-raw-nick-freq, --fix-nicks and --single-stranded are mutually exclusive.z*The Bayesian estimation has been disabled
z0Cannot use --stats-only with missing R librariesz-Cannot use --rescale with missing R librariesz2Cannot use --rescale-only with missing R libraries):r   r   r   Z
add_optionZadd_option_groupÚfloatÚintr   Ú
parse_argsr   Zcheck_R_packagesr   r   ÚexitÚprintr1   rC   r   Úerrorr(   r   Z
downsampler0   rE   r3   r2   r+   r-   r5   r6   r8   r/   r<   r=   r9   r   r	   ÚsplitextÚbasenameÚreplacerF   rD   Ú
isinstanceÚlistr   r   Úmakedirsr   r   rH   rA   rG   r   r4   r?   r>   r@   Zno_stats)	ÚparserÚargsÚgroupZgroup2Zgroup3Zgroup4ÚoptionsrR   Zwith_extr   r   r   rZ   '   sÊ   ÿ

ÿ
ÿ


þÿýÿÿÿ
ÿÿ
ÿÿÿ
ÿ


þ
þ
þ
þ


ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ


ÿ
ÿ
ÿÿÿ


















$  








rZ   )Zoptparser   r   r   r   r   Zmapdamage.versionr   Zmapdamage.rscriptr   r   r   r   rZ   r   r   r   r   Ú<module>   s   
	