annotate plotly_blast_tool/plotlyblast.xml @ 0:61cc57e069c0 draft

Initial commit
author fubar
date Tue, 25 Jul 2023 05:36:54 +0000
parents
children 6fbd48e9c950
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
1 <tool name="plotlyblast" id="plotlyblast" version="3.0">
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
2 <!--Source in git at: https://github.com/fubar2/galaxy-->
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
3 <!--Created by toolfactory@galaxy.org at 25/07/2023 14:13:15 using the Galaxy Tool Factory.-->
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
4 <description>Plotly plot generator</description>
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
5 <requirements>
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
6 <requirement type="package" version="1.5.3">pandas</requirement>
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
7 <requirement type="package" version="5.9.0">plotly</requirement>
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
8 </requirements>
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
9 <stdio>
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
10 <exit_code range="1:" level="fatal"/>
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
11 </stdio>
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
12 <version_command><![CDATA[echo "3.0"]]></version_command>
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
13 <command><![CDATA[python
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
14 $runme
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
15 --input_tab
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
16 $input_tab
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
17 --htmlout
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
18 $htmlout
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
19 --xcol
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
20 "$xcol"
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
21 --ycol
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
22 "$ycol"
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
23 --colourcol
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
24 "$colourcol"
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
25 --hovercol
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
26 "$hovercol"
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
27 --title
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
28 "$title"
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
29 --header
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
30 "$header"]]></command>
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
31 <configfiles>
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
32 <configfile name="runme"><![CDATA[#raw
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
33
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
34 import argparse
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
35 import sys
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
36 import math
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
37 import plotly.express as px
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
38 import pandas as pd
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
39 # Ross Lazarus July 2023
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
40 # based on various plotly tutorials
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
41 # Expects a blastn search result passed in as the first command line parameter.
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
42 parser = argparse.ArgumentParser()
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
43 a = parser.add_argument
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
44 a('--input_tab',default='')
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
45 a('--header',default='qaccver,saccver,piden,length,mismatch,gapopen,qstart,qend,sstart,send,evalue,bitscore,sallseqid,score,nident,positive,gaps,ppos,qframe,sframe,qseq,sseq,qlen,slen,salltitles')
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
46 a('--htmlout',default="test_run.html")
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
47 a('--xcol',default='gaps')
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
48 a('--ycol',default='qseq')
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
49 a('--colourcol',default='qaccver')
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
50 a('--hovercol',default='qseq')
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
51 a('--title',default='test blast plot of mismatch by bitscore coloured by qaccver ')
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
52 args = parser.parse_args()
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
53 df = pd.read_csv(args.input_tab, sep='\t')
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
54 NCOLS = df.columns.size
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
55 MAXLEN = 40 # tricky way to truncate long axis tickmarks
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
56 defaultcols = ['col%d' % (x+1) for x in range(NCOLS)]
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
57 if len(args.header.strip()) > 0:
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
58 newcols = args.header.split(',')
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
59 if len(newcols) == NCOLS:
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
60 df.columns = newcols
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
61 else:
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
62 sys.stderr.write('#### Supplied header %s has %d comma delimited header names - does not match the input tabular file %d columns - using col1,...coln' % (args.header, len(newcols), NCOLS))
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
63 df.columns = defaultcols
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
64 else:
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
65 df.columns = defaultcols
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
66 df['evalue'] = [-math.log(x) for x in df['evalue']] # convert so large values reflect statistical surprise
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
67 if len(args.colourcol.strip()) == 0:
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
68 fig = px.scatter(df, x=args.xcol, y=args.ycol, hover_name=args.hovercol)
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
69 else:
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
70 fig = px.scatter(df, x=args.xcol, y=args.ycol, color=args.colourcol, hover_name=args.hovercol)
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
71 if args.title:
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
72 ftitle=dict(text=args.title, font=dict(size=50))
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
73 fig.update_layout(title=ftitle)
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
74 for scatter in fig.data:
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
75 scatter['x'] = [str(x)[:MAXLEN] + '..' if len(str(x)) > MAXLEN else x for x in scatter['x']]
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
76 scatter['y'] = [str(x)[:MAXLEN] + '..' if len(str(x)) > MAXLEN else x for x in scatter['y']]
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
77 fig.write_html(args.htmlout)
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
78
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
79 #end raw]]></configfile>
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
80 </configfiles>
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
81 <inputs>
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
82 <param name="input_tab" type="data" optional="false" label="Tabular input file to plot" help="" format="tabular" multiple="false"/>
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
83 <param name="xcol" type="text" value="mismatch" label="x axis for plat" help=""/>
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
84 <param name="ycol" type="text" value="bitscore" label="y axis for plot" help=""/>
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
85 <param name="colourcol" type="text" value="qaccver" label="column containing a groupable variable for colour. Default none." help="Adds a legend so choose wisely "/>
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
86 <param name="hovercol" type="text" value="qseq" label="columname for hover string" help=""/>
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
87 <param name="title" type="text" value="Test title default" label="Title for the plot" help=""/>
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
88 <param name="header" type="text" value="qaccver,saccver,piden,length,mismatch,gapopen,qstart,qend,sstart,send,evalue,bitscore,sallseqid,score,nident,positive,gaps,ppos,qframe,sframe,qseq,sseq,qlen,slen,salltitles" label="Use this comma delimited list of column header names for this tabular file__sq__s columns" help="Default for Galaxy blast outputs with 25 columns."/>
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
89 </inputs>
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
90 <outputs>
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
91 <data name="htmlout" format="html" label="htmlout" hidden="false"/>
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
92 </outputs>
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
93 <tests>
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
94 <test>
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
95 <output name="htmlout" value="htmlout_sample" compare="sim_size" delta="5000"/>
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
96 <param name="input_tab" value="input_tab_sample"/>
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
97 <param name="xcol" value="mismatch"/>
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
98 <param name="ycol" value="bitscore"/>
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
99 <param name="colourcol" value="qaccver"/>
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
100 <param name="hovercol" value="qseq"/>
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
101 <param name="title" value="Test title default"/>
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
102 <param name="header" value="qaccver,saccver,piden,length,mismatch,gapopen,qstart,qend,sstart,send,evalue,bitscore,sallseqid,score,nident,positive,gaps,ppos,qframe,sframe,qseq,sseq,qlen,slen,salltitles"/>
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
103 </test>
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
104 </tests>
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
105 <help><![CDATA[
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
106
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
107 This is a specialised version of a generic tabular file plotter tool plotlytabular
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
108
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
109
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
110
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
111 .. class:: warningmark
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
112
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
113
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
114
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
115 Long strings in x and y tickmarks WILL BE TRUNCATED if they are too long - ".." is added to indicate truncation - otherwise some plots are squished.
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
116
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
117 The evalues WILL BE CONVERTED as -log10(evalue) so they are scaled in a way that doesn't confuse plotly.express with the tiny values.
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
118
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
119
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
120
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
121 ----
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
122
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
123
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
124
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
125 The main reason to run this tool is to have an interactive hover text specified so it appears when hovering over each data point to supply useful information.
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
126
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
127
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
128
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
129 Assumes you want a hover display for an interactive plot to be informative
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
130
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
131
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
132
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
133 Column names are auto-generated as col1,...coln unless a comma separated list of column names is supplied as the header parameter.
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
134
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
135
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
136
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
137 For example, using a Galaxy blastn output with 25 columns, the following comma delimited string supplied as the "header" parameter will match the names of each column.
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
138
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
139 qaccver,saccver,piden,length,mismatch,gapopen,qstart,qend,sstart,send,evalue,bitscore,sallseqid,score,nident,positive,gaps,ppos,qframe,sframe,qseq,sseq,qlen,slen,salltitles
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
140
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
141
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
142
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
143 When a header is supplied, the xcol and other column names must match one of those supplied column names.
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
144
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
145 So for example, xcol = "qaccver" for the blastn header example rather than xcol = "col1" when no header is supplied.
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
146
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
147
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
148
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
149 Relies on Plotly python code released under the MIT licence: https://github.com/plotly/plotly.py/blob/master/LICENSE.txt
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
150
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
151
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
152
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
153 ------
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
154
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
155
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
156 Script::
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
157
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
158 import argparse
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
159 import sys
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
160 import math
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
161 import plotly.express as px
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
162 import pandas as pd
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
163 # Ross Lazarus July 2023
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
164 # based on various plotly tutorials
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
165 # Expects a blastn search result passed in as the first command line parameter.
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
166 parser = argparse.ArgumentParser()
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
167 a = parser.add_argument
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
168 a('--input_tab',default='')
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
169 a('--header',default='qaccver,saccver,piden,length,mismatch,gapopen,qstart,qend,sstart,send,evalue,bitscore,sallseqid,score,nident,positive,gaps,ppos,qframe,sframe,qseq,sseq,qlen,slen,salltitles')
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
170 a('--htmlout',default="test_run.html")
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
171 a('--xcol',default='gaps')
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
172 a('--ycol',default='qseq')
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
173 a('--colourcol',default='qaccver')
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
174 a('--hovercol',default='qseq')
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
175 a('--title',default='test blast plot of mismatch by bitscore coloured by qaccver ')
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
176 args = parser.parse_args()
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
177 df = pd.read_csv(args.input_tab, sep='\t')
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
178 NCOLS = df.columns.size
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
179 MAXLEN = 40 # tricky way to truncate long axis tickmarks
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
180 defaultcols = ['col%d' % (x+1) for x in range(NCOLS)]
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
181 if len(args.header.strip()) > 0:
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
182 newcols = args.header.split(',')
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
183 if len(newcols) == NCOLS:
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
184 df.columns = newcols
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
185 else:
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
186 sys.stderr.write('#### Supplied header %s has %d comma delimited header names - does not match the input tabular file %d columns - using col1,...coln' % (args.header, len(newcols), NCOLS))
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
187 df.columns = defaultcols
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
188 else:
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
189 df.columns = defaultcols
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
190 df['evalue'] = [-math.log(x) for x in df['evalue']] # convert so large values reflect statistical surprise
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
191 if len(args.colourcol.strip()) == 0:
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
192 fig = px.scatter(df, x=args.xcol, y=args.ycol, hover_name=args.hovercol)
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
193 else:
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
194 fig = px.scatter(df, x=args.xcol, y=args.ycol, color=args.colourcol, hover_name=args.hovercol)
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
195 if args.title:
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
196 ftitle=dict(text=args.title, font=dict(size=50), automargin=True)
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
197 fig.update_layout(title=ftitle)
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
198 for scatter in fig.data:
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
199 scatter['x'] = [str(x)[:MAXLEN] + '..' if len(str(x)) > MAXLEN else x for x in scatter['x']]
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
200 scatter['y'] = [str(x)[:MAXLEN] + '..' if len(str(x)) > MAXLEN else x for x in scatter['y']]
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
201 fig.write_html(args.htmlout)
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
202 fig.show()
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
203
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
204 ]]></help>
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
205 <citations>
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
206 <citation type="doi">10.1093/bioinformatics/bts573</citation>
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
207 </citations>
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
208 </tool>
61cc57e069c0 Initial commit
fubar
parents:
diff changeset
209