comparison FeatureLinkerUnlabeled.xml @ 15:b46263c3ee99 draft

planemo upload for repository https://github.com/galaxyproteomics/tools-galaxyp/tree/master/tools/openms commit 3d1e5f37fd16524a415f707772eeb7ead848c5e3
author galaxyp
date Thu, 01 Dec 2022 19:06:59 +0000
parents a6e006df7659
children fbe41f0cc71e
comparison
equal deleted inserted replaced
14:b0db3468e380 15:b46263c3ee99
1 <?xml version='1.0' encoding='UTF-8'?> 1 <?xml version='1.0' encoding='UTF-8'?>
2 <!--This is a configuration file for the integration of a tools into Galaxy (https://galaxyproject.org/). This file was automatically generated using CTDConverter.--> 2 <!--This is a configuration file for the integration of a tools into Galaxy (https://galaxyproject.org/). This file was automatically generated using CTDConverter.-->
3 <!--Proposed Tool Section: [Map Alignment]--> 3 <!--Proposed Tool Section: [Map Alignment]-->
4 <tool id="FeatureLinkerUnlabeled" name="FeatureLinkerUnlabeled" version="@TOOL_VERSION@+galaxy@GALAXY_VERSION@" profile="20.05"> 4 <tool id="FeatureLinkerUnlabeled" name="FeatureLinkerUnlabeled" version="@TOOL_VERSION@+galaxy@VERSION_SUFFIX@" profile="21.05">
5 <description>Groups corresponding features from multiple maps.</description> 5 <description>Groups corresponding features from multiple maps.</description>
6 <macros> 6 <macros>
7 <token name="@EXECUTABLE@">FeatureLinkerUnlabeled</token> 7 <token name="@EXECUTABLE@">FeatureLinkerUnlabeled</token>
8 <import>macros.xml</import> 8 <import>macros.xml</import>
9 <import>macros_autotest.xml</import>
10 <import>macros_test.xml</import>
11 </macros> 9 </macros>
12 <expand macro="requirements"/> 10 <expand macro="requirements"/>
13 <expand macro="stdio"/> 11 <expand macro="stdio"/>
14 <command detect_errors="exit_code"><![CDATA[@QUOTE_FOO@ 12 <command detect_errors="exit_code"><![CDATA[@QUOTE_FOO@
15 @EXT_FOO@ 13 @EXT_FOO@
16 #import re 14 #import re
17 15
18 ## Preprocessing 16 ## Preprocessing
19 mkdir in && 17 mkdir in_cond.in &&
20 ${ ' '.join(["ln -s '%s' 'in/%s.%s' &&" % (_, re.sub('[^\w\-_]', '_', _.element_identifier), $gxy2omsext(_.ext)) for _ in $in if _]) } 18 #if $in_cond.in_select == "no"
19 mkdir ${' '.join(["'in_cond.in/%s'" % (i) for i, f in enumerate($in_cond.in) if f])} &&
20 ${' '.join(["ln -s '%s' 'in_cond.in/%s/%s.%s' && " % (f, i, re.sub('[^\w\-_]', '_', f.element_identifier), $gxy2omsext(f.ext)) for i, f in enumerate($in_cond.in) if f])}
21 #else
22 ln -s '$in_cond.in' 'in_cond.in/${re.sub("[^\w\-_]", "_", $in_cond.in.element_identifier)}.$gxy2omsext($in_cond.in.ext)' &&
23 #end if
21 mkdir out && 24 mkdir out &&
22 #if $design: 25 #if $design:
23 mkdir design && 26 mkdir design &&
24 ln -s '$design' 'design/${re.sub("[^\w\-_]", "_", $design.element_identifier)}.$gxy2omsext($design.ext)' && 27 ln -s '$design' 'design/${re.sub("[^\w\-_]", "_", $design.element_identifier)}.$gxy2omsext($design.ext)' &&
25 #end if 28 #end if
29 set -o pipefail && 32 set -o pipefail &&
30 @EXECUTABLE@ -write_ctd ./ && 33 @EXECUTABLE@ -write_ctd ./ &&
31 python3 '$__tool_directory__/fill_ctd.py' '@EXECUTABLE@.ctd' '$args_json' '$hardcoded_json' && 34 python3 '$__tool_directory__/fill_ctd.py' '@EXECUTABLE@.ctd' '$args_json' '$hardcoded_json' &&
32 @EXECUTABLE@ -ini @EXECUTABLE@.ctd 35 @EXECUTABLE@ -ini @EXECUTABLE@.ctd
33 -in 36 -in
34 ${' '.join(["'in/%s.%s'"%(re.sub('[^\w\-_]', '_', _.element_identifier), $gxy2omsext(_.ext)) for _ in $in if _])} 37 #if $in_cond.in_select == "no"
38 ${' '.join(["'in_cond.in/%s/%s.%s'"%(i, re.sub('[^\w\-_]', '_', f.element_identifier), $gxy2omsext(f.ext)) for i, f in enumerate($in_cond.in) if f])}
39 #else
40 'in_cond.in/${re.sub("[^\w\-_]", "_", $in_cond.in.element_identifier)}.$gxy2omsext($in_cond.in.ext)'
41 #end if
35 -out 42 -out
36 'out/output.${gxy2omsext("consensusxml")}' 43 'out/output.${gxy2omsext("consensusxml")}'
37 #if $design: 44 #if $design:
38 -design 45 -design
39 'design/${re.sub("[^\w\-_]", "_", $design.element_identifier)}.$gxy2omsext($design.ext)' 46 'design/${re.sub("[^\w\-_]", "_", $design.element_identifier)}.$gxy2omsext($design.ext)'
47 <configfiles> 54 <configfiles>
48 <inputs name="args_json" data_style="paths"/> 55 <inputs name="args_json" data_style="paths"/>
49 <configfile name="hardcoded_json"><![CDATA[{"log": "log.txt", "threads": "\${GALAXY_SLOTS:-1}", "no_progress": true}]]></configfile> 56 <configfile name="hardcoded_json"><![CDATA[{"log": "log.txt", "threads": "\${GALAXY_SLOTS:-1}", "no_progress": true}]]></configfile>
50 </configfiles> 57 </configfiles>
51 <inputs> 58 <inputs>
52 <param name="in" argument="-in" type="data" format="consensusxml,featurexml" multiple="true" optional="false" label="input files separated by blanks" help=" select consensusxml,featurexml data sets(s)"/> 59 <conditional name="in_cond">
53 <param name="design" argument="-design" type="data" format="tabular" optional="true" label="input file containing the experimental design" help=" select tabular data sets(s)"/> 60 <param name="in_select" type="select" label="Run tool in batch mode for -in">
54 <param name="keep_subelements" argument="-keep_subelements" type="boolean" truevalue="true" falsevalue="false" checked="false" label="For consensusXML input only: If set, the sub-features of the inputs are transferred to the output" help=""/> 61 <option value="no">No: process all datasets jointly</option>
62 <option value="yes">Yes: process each dataset in an independent job</option>
63 </param>
64 <when value="no">
65 <param argument="-in" type="data" format="consensusxml,featurexml" multiple="true" optional="false" label="input files separated by blanks" help=" select consensusxml,featurexml data sets(s)"/>
66 </when>
67 <when value="yes">
68 <param argument="-in" type="data" format="consensusxml,featurexml" multiple="false" optional="false" label="input files separated by blanks" help=" select consensusxml,featurexml data sets(s)"/>
69 </when>
70 </conditional>
71 <param argument="-design" type="data" format="tabular" optional="true" label="input file containing the experimental design" help=" select tabular data sets(s)"/>
72 <param argument="-keep_subelements" type="boolean" truevalue="true" falsevalue="false" checked="false" label="For consensusXML input only: If set, the sub-features of the inputs are transferred to the output" help=""/>
55 <section name="algorithm" title="Algorithm parameters section" help="" expanded="false"> 73 <section name="algorithm" title="Algorithm parameters section" help="" expanded="false">
56 <param name="second_nearest_gap" argument="-algorithm:second_nearest_gap" type="float" optional="true" min="1.0" value="2.0" label="Only link features whose distance to the second nearest neighbors (for both sides) is larger by 'second_nearest_gap' than the distance between the matched pair itself" help=""/> 74 <param name="second_nearest_gap" argument="-algorithm:second_nearest_gap" type="float" optional="true" min="1.0" value="2.0" label="Only link features whose distance to the second nearest neighbors (for both sides) is larger by 'second_nearest_gap' than the distance between the matched pair itself" help=""/>
57 <param name="use_identifications" argument="-algorithm:use_identifications" type="boolean" truevalue="true" falsevalue="false" checked="false" label="Never link features that are annotated with different peptides (features without ID's always match; only the best hit per peptide identification is considered)" help=""/> 75 <param name="use_identifications" argument="-algorithm:use_identifications" type="boolean" truevalue="true" falsevalue="false" checked="false" label="Never link features that are annotated with different peptides (features without ID's always match; only the best hit per peptide identification is considered)" help=""/>
58 <param name="ignore_charge" argument="-algorithm:ignore_charge" type="boolean" truevalue="true" falsevalue="false" checked="false" label="false [default]: pairing requires equal charge state (or at least one unknown charge '0'); true: Pairing irrespective of charge state" help=""/> 76 <param name="ignore_charge" argument="-algorithm:ignore_charge" type="boolean" truevalue="true" falsevalue="false" checked="false" label="false [default]: pairing requires equal charge state (or at least one unknown charge '0'); true: Pairing irrespective of charge state" help=""/>
59 <param name="ignore_adduct" argument="-algorithm:ignore_adduct" type="boolean" truevalue="true" falsevalue="false" checked="true" label="true [default]: pairing requires equal adducts (or at least one without adduct annotation); true: Pairing irrespective of adducts" help=""/> 77 <param name="ignore_adduct" argument="-algorithm:ignore_adduct" type="boolean" truevalue="true" falsevalue="false" checked="true" label="true [default]: pairing requires equal adducts (or at least one without adduct annotation); true: Pairing irrespective of adducts" help=""/>
62 <param name="exponent" argument="-algorithm:distance_RT:exponent" type="float" optional="true" min="0.0" value="1.0" label="Normalized RT differences ([0-1], relative to 'max_difference') are raised to this power (using 1 or 2 will be fast, everything else is REALLY slow)" help=""/> 80 <param name="exponent" argument="-algorithm:distance_RT:exponent" type="float" optional="true" min="0.0" value="1.0" label="Normalized RT differences ([0-1], relative to 'max_difference') are raised to this power (using 1 or 2 will be fast, everything else is REALLY slow)" help=""/>
63 <param name="weight" argument="-algorithm:distance_RT:weight" type="float" optional="true" min="0.0" value="1.0" label="Final RT distances are weighted by this facto" help=""/> 81 <param name="weight" argument="-algorithm:distance_RT:weight" type="float" optional="true" min="0.0" value="1.0" label="Final RT distances are weighted by this facto" help=""/>
64 </section> 82 </section>
65 <section name="distance_MZ" title="Distance component based on m/z differences" help="" expanded="false"> 83 <section name="distance_MZ" title="Distance component based on m/z differences" help="" expanded="false">
66 <param name="max_difference" argument="-algorithm:distance_MZ:max_difference" type="float" optional="true" min="0.0" value="0.3" label="Never pair features with larger m/z distance (unit defined by 'unit')" help=""/> 84 <param name="max_difference" argument="-algorithm:distance_MZ:max_difference" type="float" optional="true" min="0.0" value="0.3" label="Never pair features with larger m/z distance (unit defined by 'unit')" help=""/>
67 <param name="unit" argument="-algorithm:distance_MZ:unit" display="radio" type="select" optional="false" label="Unit of the 'max_difference' paramete" help=""> 85 <param name="unit" argument="-algorithm:distance_MZ:unit" type="select" optional="true" label="Unit of the 'max_difference' paramete" help="">
68 <option value="Da" selected="true">Da</option> 86 <option value="Da" selected="true">Da</option>
69 <option value="ppm">ppm</option> 87 <option value="ppm">ppm</option>
70 <expand macro="list_string_san"/> 88 <expand macro="list_string_san" name="unit"/>
71 </param> 89 </param>
72 <param name="exponent" argument="-algorithm:distance_MZ:exponent" type="float" optional="true" min="0.0" value="2.0" label="Normalized ([0-1], relative to 'max_difference') m/z differences are raised to this power (using 1 or 2 will be fast, everything else is REALLY slow)" help=""/> 90 <param name="exponent" argument="-algorithm:distance_MZ:exponent" type="float" optional="true" min="0.0" value="2.0" label="Normalized ([0-1], relative to 'max_difference') m/z differences are raised to this power (using 1 or 2 will be fast, everything else is REALLY slow)" help=""/>
73 <param name="weight" argument="-algorithm:distance_MZ:weight" type="float" optional="true" min="0.0" value="1.0" label="Final m/z distances are weighted by this facto" help=""/> 91 <param name="weight" argument="-algorithm:distance_MZ:weight" type="float" optional="true" min="0.0" value="1.0" label="Final m/z distances are weighted by this facto" help=""/>
74 </section> 92 </section>
75 <section name="distance_intensity" title="Distance component based on differences in relative intensity (usually relative to highest peak in the whole data set)" help="" expanded="false"> 93 <section name="distance_intensity" title="Distance component based on differences in relative intensity (usually relative to highest peak in the whole data set)" help="" expanded="false">
76 <param name="exponent" argument="-algorithm:distance_intensity:exponent" type="float" optional="true" min="0.0" value="1.0" label="Differences in relative intensity ([0-1]) are raised to this power (using 1 or 2 will be fast, everything else is REALLY slow)" help=""/> 94 <param name="exponent" argument="-algorithm:distance_intensity:exponent" type="float" optional="true" min="0.0" value="1.0" label="Differences in relative intensity ([0-1]) are raised to this power (using 1 or 2 will be fast, everything else is REALLY slow)" help=""/>
77 <param name="weight" argument="-algorithm:distance_intensity:weight" type="float" optional="true" min="0.0" value="0.0" label="Final intensity distances are weighted by this facto" help=""/> 95 <param name="weight" argument="-algorithm:distance_intensity:weight" type="float" optional="true" min="0.0" value="0.0" label="Final intensity distances are weighted by this facto" help=""/>
78 <param name="log_transform" argument="-algorithm:distance_intensity:log_transform" display="radio" type="select" optional="false" label="Log-transform intensities" help="If disabled, d = |int_f2 - int_f1| / int_max. If enabled, d = |log(int_f2 + 1) - log(int_f1 + 1)| / log(int_max + 1))"> 96 <param name="log_transform" argument="-algorithm:distance_intensity:log_transform" type="select" optional="true" label="Log-transform intensities" help="If disabled, d = |int_f2 - int_f1| / int_max. If enabled, d = |log(int_f2 + 1) - log(int_f1 + 1)| / log(int_max + 1))">
79 <option value="enabled">enabled</option> 97 <option value="enabled">enabled</option>
80 <option value="disabled" selected="true">disabled</option> 98 <option value="disabled" selected="true">disabled</option>
81 <expand macro="list_string_san"/> 99 <expand macro="list_string_san" name="log_transform"/>
82 </param> 100 </param>
83 </section> 101 </section>
84 </section> 102 </section>
85 <expand macro="adv_opts_macro"> 103 <expand macro="adv_opts_macro">
86 <param name="force" argument="-force" type="boolean" truevalue="true" falsevalue="false" checked="false" label="Overrides tool-specific checks" help=""/> 104 <param argument="-force" type="boolean" truevalue="true" falsevalue="false" checked="false" label="Overrides tool-specific checks" help=""/>
87 <param name="test" argument="-test" type="hidden" optional="true" value="False" label="Enables the test mode (needed for internal use only)" help=""> 105 <param argument="-test" type="hidden" optional="true" value="False" label="Enables the test mode (needed for internal use only)" help="">
88 <expand macro="list_string_san"/> 106 <expand macro="list_string_san" name="test"/>
89 </param> 107 </param>
90 </expand> 108 </expand>
91 <param name="OPTIONAL_OUTPUTS" type="select" optional="true" multiple="true" label="Optional outputs"> 109 <param name="OPTIONAL_OUTPUTS" type="select" optional="true" multiple="true" label="Optional outputs">
92 <option value="ctd_out_FLAG">Output used ctd (ini) configuration file</option> 110 <option value="ctd_out_FLAG">Output used ctd (ini) configuration file</option>
93 </param> 111 </param>
96 <data name="out" label="${tool.name} on ${on_string}: out" format="consensusxml"/> 114 <data name="out" label="${tool.name} on ${on_string}: out" format="consensusxml"/>
97 <data name="ctd_out" format="xml" label="${tool.name} on ${on_string}: ctd"> 115 <data name="ctd_out" format="xml" label="${tool.name} on ${on_string}: ctd">
98 <filter>OPTIONAL_OUTPUTS is not None and "ctd_out_FLAG" in OPTIONAL_OUTPUTS</filter> 116 <filter>OPTIONAL_OUTPUTS is not None and "ctd_out_FLAG" in OPTIONAL_OUTPUTS</filter>
99 </data> 117 </data>
100 </outputs> 118 </outputs>
101 <tests> 119 <tests><!-- TOPP_FeatureLinkerUnlabeled_1 -->
102 <expand macro="autotest_FeatureLinkerUnlabeled"/> 120 <test expect_num_outputs="2">
103 <expand macro="manutest_FeatureLinkerUnlabeled"/> 121 <section name="adv_opts">
122 <param name="force" value="false"/>
123 <param name="test" value="true"/>
124 </section>
125 <conditional name="in_cond">
126 <param name="in" value="FeatureLinkerUnlabeled_1_input1.featureXML,FeatureLinkerUnlabeled_1_input2.featureXML,FeatureLinkerUnlabeled_1_input3.featureXML"/>
127 </conditional>
128 <output name="out" file="FeatureLinkerUnlabeled_1_output.consensusXML" compare="sim_size" delta_frac="0.7" ftype="consensusxml"/>
129 <param name="keep_subelements" value="false"/>
130 <section name="algorithm">
131 <param name="second_nearest_gap" value="2.0"/>
132 <param name="use_identifications" value="false"/>
133 <param name="ignore_charge" value="true"/>
134 <param name="ignore_adduct" value="true"/>
135 <section name="distance_RT">
136 <param name="max_difference" value="200.0"/>
137 <param name="exponent" value="1.0"/>
138 <param name="weight" value="1.0"/>
139 </section>
140 <section name="distance_MZ">
141 <param name="max_difference" value="0.5"/>
142 <param name="unit" value="Da"/>
143 <param name="exponent" value="1.0"/>
144 <param name="weight" value="1.0"/>
145 </section>
146 <section name="distance_intensity">
147 <param name="exponent" value="1.0"/>
148 <param name="weight" value="0.0"/>
149 <param name="log_transform" value="disabled"/>
150 </section>
151 </section>
152 <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
153 <output name="ctd_out" ftype="xml">
154 <assert_contents>
155 <is_valid_xml/>
156 </assert_contents>
157 </output>
158 </test>
159 <!-- TOPP_FeatureLinkerUnlabeled_2 -->
160 <test expect_num_outputs="2">
161 <section name="adv_opts">
162 <param name="force" value="false"/>
163 <param name="test" value="true"/>
164 </section>
165 <conditional name="in_cond">
166 <param name="in" value="FeatureLinkerUnlabeled_2_input1.featureXML,FeatureLinkerUnlabeled_2_input2.featureXML,FeatureLinkerUnlabeled_2_input3.featureXML"/>
167 </conditional>
168 <output name="out" file="FeatureLinkerUnlabeled_2_output.consensusXML" compare="sim_size" delta_frac="0.7" ftype="consensusxml"/>
169 <param name="keep_subelements" value="false"/>
170 <section name="algorithm">
171 <param name="second_nearest_gap" value="2.0"/>
172 <param name="use_identifications" value="false"/>
173 <param name="ignore_charge" value="false"/>
174 <param name="ignore_adduct" value="true"/>
175 <section name="distance_RT">
176 <param name="max_difference" value="100.0"/>
177 <param name="exponent" value="1.0"/>
178 <param name="weight" value="1.0"/>
179 </section>
180 <section name="distance_MZ">
181 <param name="max_difference" value="0.3"/>
182 <param name="unit" value="Da"/>
183 <param name="exponent" value="2.0"/>
184 <param name="weight" value="1.0"/>
185 </section>
186 <section name="distance_intensity">
187 <param name="exponent" value="1.0"/>
188 <param name="weight" value="0.5"/>
189 <param name="log_transform" value="disabled"/>
190 </section>
191 </section>
192 <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
193 <output name="ctd_out" ftype="xml">
194 <assert_contents>
195 <is_valid_xml/>
196 </assert_contents>
197 </output>
198 </test>
199 <!-- TOPP_FeatureLinkerUnlabeled_3 -->
200 <test expect_num_outputs="2">
201 <section name="adv_opts">
202 <param name="force" value="false"/>
203 <param name="test" value="true"/>
204 </section>
205 <conditional name="in_cond">
206 <param name="in" value="FeatureLinkerUnlabeled_3_input1.featureXML,FeatureLinkerUnlabeled_3_input2.featureXML"/>
207 </conditional>
208 <output name="out" file="FeatureLinkerUnlabeled_3_output.consensusXML" compare="sim_size" delta_frac="0.7" ftype="consensusxml"/>
209 <param name="keep_subelements" value="false"/>
210 <section name="algorithm">
211 <param name="second_nearest_gap" value="1.5"/>
212 <param name="use_identifications" value="false"/>
213 <param name="ignore_charge" value="true"/>
214 <param name="ignore_adduct" value="true"/>
215 <section name="distance_RT">
216 <param name="max_difference" value="30.0"/>
217 <param name="exponent" value="1.0"/>
218 <param name="weight" value="1.0"/>
219 </section>
220 <section name="distance_MZ">
221 <param name="max_difference" value="0.3"/>
222 <param name="unit" value="Da"/>
223 <param name="exponent" value="2.0"/>
224 <param name="weight" value="1.0"/>
225 </section>
226 <section name="distance_intensity">
227 <param name="exponent" value="1.0"/>
228 <param name="weight" value="0.0"/>
229 <param name="log_transform" value="disabled"/>
230 </section>
231 </section>
232 <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
233 <output name="ctd_out" ftype="xml">
234 <assert_contents>
235 <is_valid_xml/>
236 </assert_contents>
237 </output>
238 </test>
239 <!-- TOPP_FeatureLinkerUnlabeled_4 -->
240 <test expect_num_outputs="2">
241 <section name="adv_opts">
242 <param name="force" value="false"/>
243 <param name="test" value="true"/>
244 </section>
245 <conditional name="in_cond">
246 <param name="in" value="FeatureLinkerUnlabeled_1_input1.featureXML,FeatureLinkerUnlabeled_1_input2.featureXML,FeatureLinkerUnlabeled_1_input3.featureXML"/>
247 </conditional>
248 <output name="out" file="FeatureLinkerUnlabeled_4_output.consensusXML" compare="sim_size" delta_frac="0.7" ftype="consensusxml"/>
249 <param name="keep_subelements" value="false"/>
250 <section name="algorithm">
251 <param name="second_nearest_gap" value="2.0"/>
252 <param name="use_identifications" value="true"/>
253 <param name="ignore_charge" value="true"/>
254 <param name="ignore_adduct" value="true"/>
255 <section name="distance_RT">
256 <param name="max_difference" value="200.0"/>
257 <param name="exponent" value="2.0"/>
258 <param name="weight" value="1.0"/>
259 </section>
260 <section name="distance_MZ">
261 <param name="max_difference" value="0.5"/>
262 <param name="unit" value="Da"/>
263 <param name="exponent" value="2.0"/>
264 <param name="weight" value="1.0"/>
265 </section>
266 <section name="distance_intensity">
267 <param name="exponent" value="1.0"/>
268 <param name="weight" value="0.0"/>
269 <param name="log_transform" value="disabled"/>
270 </section>
271 </section>
272 <param name="OPTIONAL_OUTPUTS" value="ctd_out_FLAG"/>
273 <output name="ctd_out" ftype="xml">
274 <assert_contents>
275 <is_valid_xml/>
276 </assert_contents>
277 </output>
278 </test>
104 </tests> 279 </tests>
105 <help><![CDATA[Groups corresponding features from multiple maps. 280 <help><![CDATA[Groups corresponding features from multiple maps.
106 281
107 282
108 For more information, visit http://www.openms.de/doxygen/release/2.6.0/html/TOPP_FeatureLinkerUnlabeled.html]]></help> 283 For more information, visit http://www.openms.de/doxygen/release/2.8.0/html/TOPP_FeatureLinkerUnlabeled.html]]></help>
109 <expand macro="references"/> 284 <expand macro="references"/>
110 </tool> 285 </tool>