B
    hÇ}\Œ‚  ã               @   sê   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	m
Z
mZ ddlmZ ddlmZ dd	lmZmZmZmZmZmZmZmZmZmZmZmZmZ dd
lmZmZ ddl m!Z!m"Z" dd„ Z#ddd„Z$dd„ Z%dd„ Z&dd„ Z'dS )é    N)ÚOptionGroup)ÚStringIOé   )Úseq_io)ÚSeqÚSeqListÚnucleic_alphabet)Úresource_filename)ÚDeOptionParser)ÚLogoOptionsÚLogoDataÚ
LogoFormatÚparse_priorÚdescriptionÚrelease_descriptionÚ
formattersÚdefault_formatterÚstd_alphabetsÚ	std_unitsÚ	std_sizesÚstd_color_schemesÚread_seq_data)Ú
_seq_namesÚ_seq_formats)ÚColorSchemeÚSymbolColorc           
   C   sÜ   t ƒ } |  tjdd… ¡\}}|r0|  d| ¡ |jrJt|jƒ t d¡ y4t	|ƒ}t
||ƒ}|j}|||ƒ}|jj |¡ W nX tk
rº } ztd|tjd t d¡ W dd}~X Y n tk
rÖ   t d¡ Y nX dS )zWebLogo command line interface r   NzUnparsable arguments: %s r   zError:)Úfileé   )Ú_build_option_parserÚ
parse_argsÚsysÚargvÚerrorÚserveÚhttpd_serve_foreverÚportÚexitÚ_build_logodataÚ_build_logoformatÚ	formatterÚfoutÚbufferÚwriteÚ
ValueErrorÚprintÚstderrÚKeyboardInterrupt)ÚparserÚoptsÚargsÚdataÚformatr)   ÚlogoÚerr© r8   úV/home/fristb/BIRCH/lib-linux-x86_64/python/lib/python3.7/site-packages/weblogo/_cli.pyÚmain?   s$    



r:   é  c       	      C   sÆ   ddl m} ddl m} G dd„ d|jƒ}t dd¡}|tjtj tjd ¡ 7 }|tj	d< t
tdtƒ}t |¡ |}|j}|d| f|ƒ}td|  ƒ y| ¡  W n tk
rÀ   t d¡ Y nX dS )	z# Start a webserver on a local port.r   Nc               @   s   e Zd Zdd„ Zdd„ ZdS )z1httpd_serve_forever.<locals>.__HTTPRequestHandlerc             S   s   d| _ | jdkrd| _dS dS )NFz/create.cgi)Ú z
create.cgiT)Z	have_forkÚpathZcgi_info)Úselfr8   r8   r9   Úis_cgik   s
    
z8httpd_serve_forever.<locals>.__HTTPRequestHandler.is_cgic             S   s   dS )NTr8   )r>   r=   r8   r8   r9   Ú	is_pythonr   s    z;httpd_serve_forever.<locals>.__HTTPRequestHandler.is_pythonN)Ú__name__Ú
__module__Ú__qualname__r?   r@   r8   r8   r8   r9   Ú__HTTPRequestHandlerf   s   rD   Ú
PYTHONPATHr<   Úhtdocsz.WebLogo server running at http://localhost:%d/)Zhttp.serverÚserverÚCGIHTTPRequestHandlerÚosÚgetenvÚpathsepr=   Úabspathr    Úenvironr	   rA   Ú__file__ÚchdirZ
HTTPServerr.   Zserve_foreverr0   r&   )	r%   rG   Z	cgiserverrD   Z
pythonpathrF   ZHandlerClassZServerClassZhttpdr8   r8   r9   r$   `   s     

r$   c       
   
      s¼  d}| j }| jd kr,|d krTttj ¡ ƒ}n(|d krLddlm} || jƒ}ntdƒ‚y$ddl	m
} |j|| jd}d}W nH tk
rÀ } z*| jdkr˜|‚t|| jj| j| jd	‰ W d d }~X Y nX |r"| jrÖtd
ƒ‚| jsâ| jrê| ¡  | jsö| jrþ| ¡  t| j|j| jƒ}t |j||¡}n–| js2| jrHtdd„ ˆ D ƒˆ jƒ‰ | jsX| jršt ˆ j¡sntdƒ‚ˆ j}	tˆ _t‡ fdd„ˆ D ƒˆ jƒ‰ |	ˆ _t| jˆ j| jƒ}t ˆ |¡}|S )NFr   )Ú_from_URL_fileopenz2error: options --fin and --upload are incompatible)ÚMotif)ÚalphabetTZtransfac)rR   Úignore_lower_casez@error: option --ignore-lower-case incompatible with matrix inputc             S   s   g | ]}|  ¡ ‘qS r8   )Úreverse)Ú.0Úsr8   r8   r9   ú
<listcomp>µ   s    z#_build_logodata.<locals>.<listcomp>z+non-nucleic sequence cannot be complementedc                s   g | ]}t |ˆ jƒ ¡ ‘qS r8   )r   rR   Ú
complement)rU   rV   )Úseqsr8   r9   rW   ¼   s    )ÚfinÚuploadr   r    ÚstdinÚreadr<   rP   r-   ZmatrixrQ   Zread_transfacrR   Úinput_parserr   rS   rT   ÚrevcomprX   r   ÚcompositionÚweightr   Zfrom_countsr   r   Z
alphabeticZ	from_seqs)
ÚoptionsZ
motif_flagrZ   rP   rQ   ZmotifZ	motif_errZpriorr4   Zaaar8   )rY   r9   r'   Œ   sR    

r'   c          '   C   s"  i }ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'g'}x|D ]}|j | ||< q\W |jrÖtƒ }xN|jD ]D\}}}y|j t|||ƒ¡ W q† tk
rÈ   td(| ƒ‚Y q†X q†W ||d< |jrì|j d)¡|d< t	ƒ }	x | 
¡ D ]\}
}t|	|
|ƒ qüW t| |	ƒ}|S )*zO Extract and process relevant option values and return a
    LogoFormat object.rR   Ú	unit_nameÚfirst_indexÚ
logo_startÚlogo_endÚstack_widthÚstacks_per_lineÚ
logo_titleÚ
logo_labelÚ
show_xaxisÚxaxis_labelÚannotateÚrotate_numbersÚnumber_intervalÚyaxis_scaleÚ
show_yaxisÚyaxis_labelÚ	show_endsÚ	fineprintÚyaxis_tic_intervalÚshow_errorbarsÚreverse_stacksÚcolor_schemeÚdefault_colorÚfontsizeÚtitle_fontsizeÚsmall_fontsizeÚnumber_fontsizeÚ	text_fontÚ	logo_fontÚ
title_fontÚstack_aspect_ratioÚ
show_boxesÚ
resolutionÚscale_widthÚdebugÚerrorbar_fractionÚerrorbar_width_fractionÚerrorbar_grayz*error: option --color: invalid value: '%s'ú,)Ú__dict__Úcolorsr   ZrulesÚappendr   r-   rm   Úsplitr   ÚitemsÚsetattrr   )Zlogodatar2   r3   Zdirect_from_optsÚkrx   ZcolorÚsymbolsÚdescZlogooptionsÚaÚvZ	theformatr8   r8   r9   r(   Å   st    


r(   c              C   sö  t ƒ } tdttdd}t|dƒ}t|dƒ}t|ddƒ}t|dd	ƒ}t|d
dƒ}t|ddƒ}t|ddƒ}t|ddƒ}	| |¡ | |¡ | |¡ | |¡ | |¡ | |¡ | |¡ | |	¡ |jdddddd ddd |jddddd ddd |jd d!d"dd#ttƒ d$d% 	t
ƒ ¡ d&d'	 |jd(d)d*d+tjd,dd- |jd.d/d0dd#td&d1td2	 |jd3d4d5dd#td6d7d8 |jd9d:d5dd;d< |jd=d>d?dtt ¡ ƒd@| jdAdBdC	 |jddDdEddFdGdHdId |jddJdKddLd dMdNd |jdOdPdQddRdSdTdUd |jdVdWdXddRdYdUdZ |jd[d\d]ddRd^dUdZ |jdd_d`daddbdc |jddddedaddfdc |jddgdhdaddidc |jddjdkdaddldc |jdmdndodd#tdp| jdqdr	 |jdsdtduddRdv| jdwdx |jdydzd{ddFd|| jd}dx |jdd~dddFd€| jd}dx |jdd‚ddƒ| jd„d…d† |jd‡dˆd‰ddF| jdŠd}d |jdd‹dŒddFd dd}d |jddŽdddƒ| jdd„d |jdd‘d’ddL| jd“| j dNd |jd”d•d–ddLd—dNdZ |jd˜d™ddƒdš| jd„d›dœ |jddždŸddFd d}dZ |jd¡d¢ddƒ| jd„d£d† |jd¤d¥d¦ddF| jd§d}d |jdd¨d©ddL| j dªdNd |jdd«d¬ddƒ| j!d„d­d® |jdd¯d°ddƒ| j!d„d±d® tt" ¡ ƒ}
|
 #¡  |jd²d³d´dd#t"dµd d¶d% 	|
¡ dr	 |jd·d¸d¹dºd»d¼g d½d¾ |jdd¿dÀddÁ| j$dÂdÃ |jddÄdÅddL| j%dÆ| j% dÇd |jddÈdÉddL| j&dÊ| j& dÇd |jddËdÌddL| j'dÍ| j' dÇd |jddÎdÏddL| j(dÐ| j( dÇd |jddÑdÒddF| j)dÓ| j) dÔd |jddÕdÖddF| j)d×| j* dÔd |jddØdÙddF| j+dÚ| j+ dÔd |jdÛdÜdoddL| jdÝ| j dÇd |jddÞdßddL| j,dà| j, dÇd |jddádâddƒdd„dãd® |jddädåddLdædçdèd |jddédêddƒdëd„dìd® |jddíddƒ| j-d„dîd† |jddïdðddL| j.dñ| j. dNd |jddòdóddL| j/dô| j/ dNd |jddõdöddL| j0d÷| j0 dNd |	jddødùdaddúdc |	jddûdüddRdýdþdÿd |S (   Nz7%prog [options]  < sequence_data.fa > sequence_logo.epsF)Úusager   ÚversionZadd_verbose_optionszInput/Output OptionszLogo Data OptionsZTransformationsz.Optional transformations of the sequence data.zLogo Format Optionsz9These options control the format and display of the logo.zColor OptionszEColors can be specified using CSS2 syntax. e.g. 'red', '#FF0000', etczFont Format Optionsz<These options provide control over the font sizes and types.zAdvanced Format Optionsz@These options provide fine control over the display of the logo.zWebLogo Serverz+Run a standalone webserver on a local port.z-fz--finrZ   ÚstoreZfile_inz$Sequence input file (default: stdin)ZFILENAME)ÚdestÚactionÚtypeÚdefaultÚhelpÚmetavarr<   z--uploadr[   zUpload input file from URLÚURL)r˜   r™   r›   rœ   r   z-Dz
--datatyper^   ÚdictzHType of multiple sequence alignment or position weight matrix file: (%s)z, ZFORMAT)r˜   r™   rš   r›   Úchoicesrœ   r   z-oz--foutr*   Zfile_outzOutput file (default: stdout))r˜   rš   r›   rœ   r   z-Fz--formatr)   zIFormat of output: eps (default), png, png_print, pdf, jpeg, svg, logodata)r˜   r™   rš   r    r   rœ   r›   z-Az--sequence-typerR   z5The type of sequence data: 'protein', 'rna' or 'dna'.ZTYPE)r˜   r™   rš   r    rœ   r   z-az
--alphabeta  The set of symbols to count, e.g. 'AGTC'. All characters not in the alphabet are ignored. If neither the alphabet nor sequence-type are specified then weblogo will examine the input data and make an educated guess. See also --sequence-type, --ignore-lower-case)r˜   r™   rœ   z-Uz--unitsrc   ÚchoicezA unit of entropy ('bits' (default), 'nats', 'digits'), or a unit offree energy ('kT', 'kJ/mol', 'kcal/mol'), or 'probability' for probabilitiesZUNIT)r˜   r™   r    rš   r›   rœ   r   z--compositionr`   ÚstringÚautoa{  The expected composition of the sequences: 'auto' (default), 'equiprobable', 'none' (do not perform any compositional adjustment), a CG percentage, a species name (e.g. 'E. coli', 'H. sapiens'), or an explicit distribution (e.g. "{'A':10, 'C':40, 'G':40, 'T':10}"). The automatic option uses a typical distribution for proteins and equiprobable distribution for everything else. zCOMP.z--weightra   Úfloatz=The weight of prior data.  Default depends on alphabet lengthÚNUMBERz-iz--first-indexrd   Úintr   z5Index of first position in sequence data (default: 1)ZINDEXz-lz--lowerre   z"Lower bound of sequence to display)r˜   r™   rš   rœ   r   z-uz--upperrf   z"Upper bound of sequence to displayz--ignore-lower-caserS   Ú
store_truezLDisregard lower case letters and only count upper case letters in sequences.)r˜   r™   r›   rœ   z	--reverserT   zreverse sequencesz--complementrX   zcomplement nucleic sequencesz	--revcompr_   z$reverse complement nucleic sequencesz-sz--sizerg   ZLOGOSIZEz=Specify a standard logo size (small, medium (default), large))r˜   r™   rš   r    r   r›   rœ   z-nz--stacks-per-linerh   z@Maximum number of logo stacks per logo line. (default: %default)ZCOUNT)r˜   r™   rš   rœ   r›   r   z-tz--titleri   zLogo title text.ZTEXTz--labelrj   zA figure label, e.g. '2a'z-Xz--show-xaxisZbooleanzYES/NOz:Display sequence numbers along x-axis? (default: %default))r™   rš   r›   r   rœ   z-xz--xlabelrl   zX-axis labelz
--annotaterm   zzA comma separated list of custom stack annotations, e.g. '1,3,4,5,6,7'.  Annotation list must be same length as sequences.z--rotate-numbersrn   zBDraw X-axis numbers with vertical orientation (default: %default).z--number-intervalro   z0Distance between numbers on X-axis (default: %s)z-Sz--yaxisrp   zLHeight of yaxis in units. (Default: Maximum value with uninformative prior.)z-Yz--show-yaxisrq   z7Display entropy scale along y-axis? (default: %default))r™   rš   r˜   r›   r   rœ   z-yz--ylabelrr   z5Y-axis label (default depends on plot type and units)z-Ez--show-endsz3Label the ends of the sequence? (default: %default)z-Pz--fineprintrt   z)The fine print (default: weblogo version)z
--ticmarksru   z-Distance between ticmarks (default: %default)z--errorbarsrv   z'Display error bars? (default: %default))r˜   r™   rš   r›   r   rœ   z--reverse-stacksrw   z<Draw stacks with largest letters on top? (default: %default)z-cz--color-schemerx   ZSCHEMEz$Specify a standard color scheme (%s)z-Cz--colorr‹   rŒ   zCOLOR SYMBOLS DESCRIPTION é   zRSpecify symbol colors, e.g. --color black AG 'Purine' --color red TC 'Pyrimidine' )r˜   r™   r   Únargsr›   rœ   z--default-colorry   ZCOLORz(Symbol color if not otherwise specified.)r˜   r™   r   r›   rœ   z
--fontsizerz   z.Regular text font size in points (default: %s)ZPOINTSz--title-fontsizer{   z,Title text font size in points (default: %s)z--small-fontsizer|   z,Small text font size in points (default: %s)z--number-fontsizer}   z.Axis numbers font size in points (default: %s)z--text-fontr~   z%Specify font for labels (default: %s)ZFONTz--logo-fontr   z#Specify font for logo (default: %s)z--title-fontr€   z$Specify font for title (default: %s)z-Wz--stack-widthz#Width of a logo stack (default: %s)z--aspect-ratior   z,Ratio of stack height to width (default: %s)z--boxr‚   z(Draw boxes around symbols? (default: no)z--resolutionrƒ   é`   z‰Bitmap resolution in dots per inch (DPI).  (Default: 96 DPI, except png_print, 600 DPI) Low resolution bitmaps (DPI<300) are antialiased.ZDPIz--scale-widthr„   TzŽScale the visible stack width by the fraction of symbols in the column?  (I.e. columns with many gaps of unknowns are narrow.)  (Default: yes)z--debugz=Output additional diagnostic information. (Default: %default)z--errorbar-fractionr†   z0Sets error bars display proportion (default: %s)z--errorbar-width-fractionr‡   z6Sets error bars width display proportion (default: %s)z--errorbar-grayrˆ   z4Sets error bars' gray scale percentage (default: %s)z--server#   z>Start a standalone WebLogo server for creating sequence logos.z--portr%   i  z.Listen to this local port. (Default: %default)ZPORT)1r   r
   r   r   r   Zadd_option_groupÚ
add_optionr   r   Újoinr   r    Ústdoutr   r   r   Úlistr   Úkeysrc   r   rg   rh   ri   rj   rk   rl   rn   ro   rq   rs   rt   ru   rv   r   Úsortry   rz   r{   r|   r}   r~   r   r€   r   r…   r†   r‡   rˆ   )Údefaultsr1   Zio_grpZdata_grpZ	trans_grpZ
format_grpZ	color_grpZfont_grpZadvanced_grpZ
server_grpZcolor_scheme_choicesr8   r8   r9   r     s4   











r   )r;   )(rI   r    Úoptparser   Úior   r<   r   Úseqr   r   r   Úutilsr	   Zutils.deoptparser
   r   r   r   r   r   r   r   r   r   r   r   r   r   r6   r   r   Zcolorschemer   r   r:   r$   r'   r(   r   r8   r8   r8   r9   Ú<module>,   s   <!
,9W