7
|
1 <tool id="vsnp_get_snps" name="vSNP: get SNPs" version="@WRAPPER_VERSION@.0+galaxy0" profile="@PROFILE@">
|
0
|
2 <description></description>
|
3
|
3 <macros>
|
|
4 <import>macros.xml</import>
|
|
5 </macros>
|
0
|
6 <requirements>
|
7
|
7 <requirement type="package" version="3.0.7">openpyxl</requirement>
|
|
8 <requirement type="package" version="1.3.0">pandas</requirement>
|
0
|
9 <requirement type="package" version="0.6.8">pyvcf</requirement>
|
7
|
10 <requirement type="package" version="2.0.1">xlrd</requirement>
|
0
|
11 </requirements>
|
|
12 <command detect_errors="exit_code"><![CDATA[
|
3
|
13 #import re
|
|
14
|
0
|
15 #set input_vcf_dir = 'input_vcf_dir'
|
|
16 #set output_json_avg_mq_dir = 'output_json_avg_mq_dir'
|
|
17 #set output_json_snps_dir = 'output_json_snps_dir'
|
|
18 #set output_snps_dir = 'output_snps_dir'
|
3
|
19
|
0
|
20 mkdir -p $input_vcf_dir &&
|
|
21 mkdir -p $output_json_avg_mq_dir &&
|
|
22 mkdir -p $output_json_snps_dir &&
|
|
23 mkdir -p $output_snps_dir &&
|
3
|
24
|
|
25 #set dbkey = '?'
|
0
|
26 #for $i in $input_vcf_collection:
|
3
|
27 #if str($dbkey) == '?':
|
|
28 #set dbkey = $i.metadata.dbkey
|
|
29 #else if str($dbkey) != $i.metadata.dbkey:
|
|
30 >&2 echo "The dbkeys associated with the zero coverage VCF files with SNPs found in closely related isolate groups are not unique" &&
|
|
31 exit 1
|
|
32 #end if
|
|
33 #set vcf_identifier = re.sub('[^\s\w\-]', '_', str($i.element_identifier))
|
|
34 ln -s '${i}' '$input_vcf_dir/${vcf_identifier}' &&
|
0
|
35 #end for
|
3
|
36 #if str($dbkey) == '?':
|
|
37 >&2 echo "The dbkey must be set for the zero coverage VCF files with SNPs found in closely related isolate groups" && exit 1
|
|
38 #end if
|
|
39 #if str($input_zc_vcf_type_cond.input_zc_vcf_type) == "single":
|
|
40 #set zc_vcf_identifier = re.sub('[^\s\w\-]', '_', str($input_zc_vcf.element_identifier))
|
|
41 ln -s '${input_zc_vcf}' '$input_vcf_dir/${zc_vcf_identifier}' &&
|
0
|
42 #else
|
|
43 #for $i in $input_zc_vcf_type_cond.input_zc_vcf_collection:
|
3
|
44 #set zc_vcf_identifier = re.sub('[^\s\w\-]', '_', str($i.element_identifier))
|
|
45 ln -s '${i}' '$input_vcf_dir/${zc_vcf_identifier}' &&
|
0
|
46 #end for
|
|
47 #end if
|
3
|
48 #if str($input_excel_cond.input_excel_param) == 'yes':
|
|
49 #if str($input_excel_cond.excel_source_cond.excel_source) == 'cached':
|
|
50 #set excel_file = 'No genome specified for input VCF (database) file(s)'
|
0
|
51 #set excel_fields = $__app__.tool_data_tables['vsnp_excel'].get_fields()
|
3
|
52 ## The value of excel_fields is a nested list that looks like this.
|
|
53 ## [['AF2122', 'Mbovis_define_filter.xlsx', '~/tool-data/vsnp/AF2122/excel/Mbovis_define_filter.xlsx', 'Excel file for AF2122'],...]
|
0
|
54 #for $i in $excel_fields:
|
3
|
55 #if str($i[0]) == $dbkey:
|
0
|
56 #set excel_file = $i[2]
|
|
57 #break
|
|
58 #end if
|
|
59 #end for
|
|
60 #else:
|
3
|
61 #set excel_file = $input_excel_cond.excel_source_cond.input_excel
|
0
|
62 #end if
|
|
63 #end if
|
|
64 python '$__tool_directory__/vsnp_get_snps.py'
|
3
|
65 --ac $ac
|
|
66 #if str($input_excel_cond.input_excel_param) == 'yes':
|
|
67 --input_excel '$excel_file'
|
0
|
68 #end if
|
3
|
69 $all_isolates
|
|
70 --input_vcf_dir '$input_vcf_dir'
|
|
71 --min_mq $min_mq
|
|
72 --min_quality_score $min_quality_score
|
|
73 --output_json_avg_mq_dir '$output_json_avg_mq_dir'
|
|
74 --output_json_snps_dir '$output_json_snps_dir'
|
|
75 --output_snps_dir '$output_snps_dir'
|
0
|
76 --output_summary '$output_summary'
|
3
|
77 --processes \${GALAXY_SLOTS:-8}
|
|
78 --quality_score_n_threshold $quality_score_n_threshold
|
|
79 --dbkey '$dbkey'
|
0
|
80 ]]></command>
|
|
81 <inputs>
|
|
82 <conditional name="input_zc_vcf_type_cond">
|
|
83 <param name="input_zc_vcf_type" type="select" label="Choose the category of the files to be analyzed">
|
3
|
84 <option value="collection" selected="true">A collection of zero coverage VCF files</option>
|
|
85 <option value="single">A single zero coverage VCF file</option>
|
0
|
86 </param>
|
|
87 <when value="single">
|
3
|
88 <param name="input_zc_vcf" type="data" format="vcf" label="Zero coverage VCF file"/>
|
0
|
89 </when>
|
|
90 <when value="collection">
|
3
|
91 <param name="input_zc_vcf_collection" format="vcf" type="data_collection" collection_type="list" label="Collection of zero coverage VCF files"/>
|
0
|
92 </when>
|
|
93 </conditional>
|
3
|
94 <param name="input_vcf_collection" format="vcf" type="data_collection" collection_type="list" label="Collection of zero coverage VCF files with SNPs found in closely related isolate groups"/>
|
|
95 <param name="ac" type="integer" min="0" value="2" label="Allele count threshold" help="At least 1 position must have this value for a SNP to be added to a group"/>
|
|
96 <param name="min_mq" type="integer" min="0" value="56" label="Map quality threshold" help="At least 1 position must have a higher MQ value for a SNP to be added to a group"/>
|
|
97 <param name="min_quality_score" type="integer" min="0" value="150" label="Quality score threshold" help="At least 1 position must have a higher quality score for a SNP to be added to a group"/>
|
|
98 <param name="quality_score_n_threshold" type="integer" min="0" value="150" label="Minimum quality score N value for alleles" help="Alleles are marked as N for quality scores between this value and the minimum quality score value above"/>
|
|
99 <conditional name="input_excel_cond">
|
|
100 <param name="input_excel_param" type="select" label="Use Excel file for grouping and filtering?">
|
0
|
101 <option value="yes" selected="true">Yes</option>
|
|
102 <option value="no">No</option>
|
|
103 </param>
|
|
104 <when value="yes">
|
3
|
105 <conditional name="excel_source_cond">
|
|
106 <param name="excel_source" type="select" label="Choose the source for the Excel file">
|
0
|
107 <option value="cached">locally cached</option>
|
|
108 <option value="history">from history</option>
|
|
109 </param>
|
|
110 <when value="cached">
|
3
|
111 <param name="input_excel" type="select" label="Excel file">
|
|
112 <options from_data_table="vsnp_excel">
|
7
|
113 <filter type="data_meta" column="0" key="dbkey" ref="input_vcf_collection"/>
|
3
|
114 <validator type="no_options" message="No built-in Excel grouping and filtering datasets are available"/>
|
|
115 </options>
|
0
|
116 </param>
|
|
117 </when>
|
|
118 <when value="history">
|
3
|
119 <param name="input_excel" type="data" format="xlsx" label="Excel file"/>
|
0
|
120 </when>
|
|
121 </conditional>
|
|
122 </when>
|
|
123 <when value="no"/>
|
|
124 </conditional>
|
3
|
125 <param argument="all_isolates" type="boolean" truevalue="--all_isolates" falsevalue="" checked="false" label="Create a group containing all isolates?"/>
|
0
|
126 </inputs>
|
|
127 <outputs>
|
3
|
128 <collection name="snps" type="list" label="${tool.name} on ${on_string} (SNPs)">
|
|
129 <discover_datasets pattern="__name_and_ext__" directory="output_snps_dir"/>
|
0
|
130 </collection>
|
3
|
131 <collection name="json_avg_mq" type="list" label="${tool.name} on ${on_string} (average mq)">
|
|
132 <discover_datasets pattern="__name_and_ext__" directory="output_json_avg_mq_dir"/>
|
0
|
133 </collection>
|
3
|
134 <collection name="json_snps" type="list" label="${tool.name} on ${on_string} (SNPs as json)">
|
|
135 <discover_datasets pattern="__name_and_ext__" directory="output_json_snps_dir"/>
|
0
|
136 </collection>
|
3
|
137 <data name="output_summary" format="html" label="${tool.name} on ${on_string} (summary)"/>
|
0
|
138 </outputs>
|
|
139 <tests>
|
3
|
140 <!--
|
|
141 Unfortunately the test files cannot be gzipped since Galaxy changes the file names
|
|
142 to be something like 00-0121_WI_Cervid_99-A_vcf_gz, and the VCF Reader requires
|
|
143 gzipped files to have a .gz extension. The exception is
|
|
144 UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte
|
|
145 -->
|
|
146 <!-- A single vcf input, no excel file, all_isolates is False -->
|
|
147 <test expect_num_outputs="4">
|
|
148 <param name="input_zc_vcf_type" value="single"/>
|
0
|
149 <param name="input_zc_vcf" value="input_zc_vcf.vcf" ftype="vcf" dbkey="89"/>
|
|
150 <param name="input_vcf_collection">
|
|
151 <collection type="list">
|
|
152 <element name="SRR8073662_zc.vcf" value="SRR8073662_zc.vcf" dbkey="89"/>
|
|
153 <element name="SRR1792272_zc.vcf" value="SRR1792272_zc.vcf" dbkey="89"/>
|
|
154 </collection>
|
|
155 </param>
|
3
|
156 <param name="input_excel_param" value="no"/>
|
|
157 <output_collection name="snps" type="list" count="1">
|
|
158 <element name="all_vcf" file="all_vcf.fasta" ftype="fasta" compare="contains"/>
|
0
|
159 </output_collection>
|
3
|
160 <output_collection name="json_avg_mq" type="list" count="1">
|
|
161 <element name="all_vcf" file="json_avg_mq_all_vcf.json" ftype="json" compare="contains"/>
|
0
|
162 </output_collection>
|
3
|
163 <output_collection name="json_snps" type="list" count="1">
|
|
164 <element name="all_vcf" file="json_all_vcf.json" ftype="json" compare="contains"/>
|
0
|
165 </output_collection>
|
|
166 <output name="output_summary" file="output_summary.html" ftype="html" compare="contains"/>
|
|
167 </test>
|
3
|
168 <!-- An input collection, no excel file, all_isolates is False -->
|
|
169 <test expect_num_outputs="4">
|
|
170 <param name="input_zc_vcf_type" value="collection"/>
|
|
171 <param name="input_zc_vcf_collection">
|
|
172 <collection type="list">
|
|
173 <element name="BCG_Pasteur_Unknown_FR_SRR8886989.vcf" value="BCG_Pasteur_Unknown_FR_SRR8886989.vcf" dbkey="89"/>
|
|
174 <element name="BCG_Tokyo_Unknown_JP_DRR029468.vcf" value="BCG_Tokyo_Unknown_JP_DRR029468.vcf" dbkey="89"/>
|
|
175 </collection>
|
|
176 </param>
|
|
177 <param name="input_vcf_collection">
|
|
178 <collection type="list">
|
|
179 <element name="01_1787_FL_Zoo_Jaguar.vcf" value="01_1787_FL_Zoo_Jaguar.vcf" dbkey="89"/>
|
|
180 <element name="02_5877_MEX_TX_Fed.vcf" value="02_5877_MEX_TX_Fed.vcf" dbkey="89"/>
|
|
181 <element name="02_0585_COA_TX_Fed.vcf" value="02_0585_COA_TX_Fed.vcf" dbkey="89"/>
|
|
182 </collection>
|
|
183 </param>
|
|
184 <param name="input_excel_param" value="no"/>
|
|
185 <output_collection name="snps" type="list" count="1">
|
|
186 <element name="all_vcf" file="all_vcf2.fasta" ftype="fasta" compare="contains"/>
|
|
187 </output_collection>
|
|
188 <output_collection name="json_avg_mq" type="list" count="1">
|
7
|
189 <element name="all_vcf" file="json_avg_mq_all_vcf.json" ftype="json" compare="contains"/>
|
3
|
190 </output_collection>
|
|
191 <output_collection name="json_snps" type="list" count="1">
|
7
|
192 <element name="all_vcf" file="json_all_vcf.json" ftype="json" compare="contains"/>
|
3
|
193 </output_collection>
|
|
194 <output name="output_summary" file="output_summary2.html" ftype="html" compare="contains"/>
|
|
195 </test>
|
|
196 <!-- An input collection, an excel file, all_isolates is False -->
|
|
197 <test expect_num_outputs="4">
|
|
198 <param name="input_zc_vcf_type" value="collection"/>
|
|
199 <param name="input_zc_vcf_collection">
|
|
200 <collection type="list">
|
|
201 <element name="BCG_Pasteur_Unknown_FR_SRR8886989.vcf" value="BCG_Pasteur_Unknown_FR_SRR8886989.vcf" dbkey="89"/>
|
|
202 <element name="BCG_Tokyo_Unknown_JP_DRR029468.vcf" value="BCG_Tokyo_Unknown_JP_DRR029468.vcf" dbkey="89"/>
|
|
203 </collection>
|
|
204 </param>
|
|
205 <param name="input_vcf_collection">
|
|
206 <collection type="list">
|
|
207 <element name="01_1787_FL_Zoo_Jaguar.vcf" value="01_1787_FL_Zoo_Jaguar.vcf" dbkey="89"/>
|
|
208 <element name="02_5877_MEX_TX_Fed.vcf" value="02_5877_MEX_TX_Fed.vcf" dbkey="89"/>
|
|
209 <element name="02_0585_COA_TX_Fed.vcf" value="02_0585_COA_TX_Fed.vcf" dbkey="89"/>
|
|
210 </collection>
|
|
211 </param>
|
|
212 <param name="input_excel_param" value="yes"/>
|
|
213 <param name="input_excel" value="89"/>
|
|
214 <output_collection name="snps" type="list" count="1">
|
|
215 <element name="Mbovis-17" file="Mbovis-17_snps.fasta" ftype="fasta"/>
|
|
216 </output_collection>
|
|
217 <output_collection name="json_avg_mq" type="list" count="1">
|
|
218 <element name="Mbovis-17" file="Mbovis-17_avg_mq_json.json" ftype="json" compare="contains"/>
|
|
219 </output_collection>
|
|
220 <output_collection name="json_snps" type="list" count="1">
|
|
221 <element name="Mbovis-17" file="Mbovis-17_snps_json.json" ftype="json" compare="contains"/>
|
|
222 </output_collection>
|
|
223 <output name="output_summary" file="output_summary3.html" ftype="html" compare="contains"/>
|
|
224 </test>
|
|
225 <!-- An input collection, an excel file, all_isolates is True -->
|
|
226 <test expect_num_outputs="4">
|
|
227 <param name="input_zc_vcf_type" value="collection"/>
|
|
228 <param name="input_zc_vcf_collection">
|
|
229 <collection type="list">
|
|
230 <element name="BCG_Pasteur_Unknown_FR_SRR8886989.vcf" value="BCG_Pasteur_Unknown_FR_SRR8886989.vcf" dbkey="89"/>
|
|
231 <element name="BCG_Tokyo_Unknown_JP_DRR029468.vcf" value="BCG_Tokyo_Unknown_JP_DRR029468.vcf" dbkey="89"/>
|
|
232 </collection>
|
|
233 </param>
|
|
234 <param name="input_vcf_collection">
|
|
235 <collection type="list">
|
|
236 <element name="01_1787_FL_Zoo_Jaguar.vcf" value="01_1787_FL_Zoo_Jaguar.vcf" dbkey="89"/>
|
|
237 <element name="02_5877_MEX_TX_Fed.vcf" value="02_5877_MEX_TX_Fed.vcf" dbkey="89"/>
|
|
238 <element name="02_0585_COA_TX_Fed.vcf" value="02_0585_COA_TX_Fed.vcf" dbkey="89"/>
|
|
239 </collection>
|
|
240 </param>
|
|
241 <param name="input_excel_param" value="yes"/>
|
|
242 <param name="input_excel" value="89"/>
|
|
243 <param name="all_isolates" value="--all_isolates"/>
|
|
244 <output_collection name="snps" type="list" count="2">
|
|
245 <element name="Mbovis-17" file="Mbovis-17_snps.fasta" ftype="fasta"/>
|
7
|
246 <element name="all_vcf" file="all_vcf2.fasta" ftype="fasta" compare="contains"/>
|
3
|
247 </output_collection>
|
|
248 <output_collection name="json_avg_mq" type="list" count="2">
|
|
249 <element name="Mbovis-17" file="Mbovis-17_avg_mq_json.json" ftype="json" compare="contains"/>
|
|
250 <element name="all_vcf" file="Mbovis-17_avg_mq_json.json" ftype="json" compare="contains"/>
|
|
251 </output_collection>
|
|
252 <output_collection name="json_snps" type="list" count="2">
|
|
253 <element name="Mbovis-17" file="Mbovis-17_snps_json.json" ftype="json" compare="contains"/>
|
|
254 <element name="all_vcf" file="Mbovis-17_snps_json.json" ftype="json" compare="contains"/>
|
|
255 </output_collection>
|
|
256 <output name="output_summary" file="output_summary4.html" ftype="html" compare="contains"/>
|
|
257 </test>
|
0
|
258 </tests>
|
|
259 <help>
|
|
260 **What it does**
|
|
261
|
3
|
262 Accepts a zero coverage VCF file produced by the **vSNP: add zero coverage** tool (or a collection of them) along with a collection
|
|
263 of zero coverage VCF files that have been aligned with the same reference and contain SNPs called between closely related isolate groups.
|
|
264 The tool produces fasta files containing SNP alignments, json files containing the SNP positions and additional json files containing
|
|
265 the average map quality values.
|
|
266
|
|
267 The SNP alignments produced by this tool are used to create phylogenetic trees, so larger input collections result in more populated
|
|
268 phylogenetic trees. Both of the json outputs are used by the **vSNP: build tables** tool to produce annotated SNP tables in the form
|
|
269 of Excel spreadsheets.
|
|
270
|
|
271 An Excel spreadsheet containing specified SNPs can optiomally be used to filter desired SNP positions by group. Users can choose a
|
|
272 locally cached Excel spreadsheet or one from their current history.
|
|
273
|
|
274 A SNP is added to a group if it has at least one position with a specified allele count value, a quality score greater than a specified
|
|
275 value, and a map quality greater than a specified value.
|
|
276
|
|
277 If the allele count equals the specified value (2) and the quality score for a SNP position is greater than the minimum quality score
|
|
278 value (150), the alternate allele is called.
|
|
279
|
|
280 However, if the allele count is 1, the position is called ambiguous. Deletions are called when the alternate allele is a gap. If the
|
|
281 quality score is less than or equal to the minimum quality score N value for alleles (150), the allele is marked "N".
|
0
|
282
|
|
283 **Required Options**
|
|
284
|
3
|
285 * **Zero coverage VCF file(s)** - Select a single or collection of zero coverage VCF files, typically produced by the **vSNP: add zero coverage** tool, from the current history.
|
|
286 * **Collection of zero coverage VCF files with SNPs found in closely related isolate groups** - Select a dataset collection of zero coverage vcf files from the current history.
|
0
|
287
|
|
288 **Additional Options**
|
|
289
|
3
|
290 * **Allele count threshold** - At least 1 position must have an allele count greater than this value for a SNP to be added to a group (2 is optimal).
|
|
291 * **Map quality threshold** - At least 1 position must have a higher MQ value for a SNP to be added to a group (56 is optimal).
|
|
292 * **Quality score threshold** -At least 1 position must have a higher quality score for a SNP to be added to a group (150 is optimal).
|
|
293 * **Minimum quality score N value for alleles** - If none of the avove 3 requirements is met and the quality score is less than or equal to the minimum quality score N value for alleles, the allele is marked "N" (150 is optimal).
|
0
|
294 * **Use Excel file for grouping and filtering?** - select Yes to filter desired SNP positions by group. A cached Excel spreadsheet provides the most widely used SNP positions for grouping, but a custom spreadhseet can be selected from the current history.
|
3
|
295 * **Create a group containing all isolates?** - select Yes to output an additional group containing of all isolates.
|
0
|
296 </help>
|
3
|
297 <expand macro="citations"/>
|
0
|
298 </tool>
|
|
299
|