comparison macros.xml @ 0:d3a6bc607825 draft

"planemo upload for repository https://github.com/galaxyproteomics/tools-galaxyp/tree/encyclopedia/tools/encyclopedia commit d0ac7888263b785e5aa039be6454d665b239e808-dirty"
author jjohnson
date Tue, 30 Jun 2020 11:34:57 -0400
parents
children acf6acfc8632
comparison
equal deleted inserted replaced
-1:000000000000 0:d3a6bc607825
1 <macros>
2 <!--
3 # generate a Walnut CLIB from GPF-DIA and a FASTA
4 for i in library/*.mzML; do
5 java -Xmx20g -jar encyclopedia-0.9.0-executable.jar -walnut -i $i -f uniprot_yeast_25jan2019.fasta;
6 done
7 java -Xmx20g -jar encyclopedia-0.9.0-executable.jar -libexport -walnut -o chromatogram_library.elib -i library -f uniprot_yeast_25jan2019.fasta -a false;
8
9 # process single-injection DIA with the CLIB
10 for i in quant/*.mzML; do
11 java -Xmx20g -jar encyclopedia-0.9.0-executable.jar -i $i -l chromatogram_library.elib -f uniprot_yeast_25jan2019.fasta;
12 done
13
14 Next for Prosit:
15 # generate an EncyclopeDIA CLIB from GPF-DIA and a Prosit Library
16 for i in library/*.mzML; do
17 java -Xmx20g -jar encyclopedia-0.9.0-executable.jar -i $i -l prosit_library.dlib -f uniprot_yeast_25jan2019.fasta;
18 done
19 java -Xmx20g -jar encyclopedia-0.9.0-executable.jar -libexport -o chromatogram_library.elib -i library -f uniprot_yeast_25jan2019.fasta -a false;
20
21 # process single-injection DIA with the CLIB (exactly the same as with Walnut)
22 for i in quant/*.mzML; do
23 java -Xmx20g -jar encyclopedia-0.9.0-executable.jar -i $i -l chromatogram_library.elib -f uniprot_yeast_25jan2019.fasta;
24 done
25 -->
26 <token name="@VERSION@">0.9.5</token>
27 <xml name="requirements">
28 <requirements>
29 <requirement type="package" version="@VERSION@">encyclopedia</requirement>
30 <yield/>
31 </requirements>
32 </xml>
33 <token name="@ENCYCLOPEDIA_WIKI@">
34 EncyclopeDIA_ is library search engine comprised of several algorithms for DIA data analysis and can search for peptides using either DDA-based spectrum libraries or DIA-based chromatogram libraries.
35
36 .. _EncyclopeDIA: https://bitbucket.org/searleb/encyclopedia/wiki/Home
37 </token>
38 <xml name="citations">
39 <citations>
40 <citation type="doi">10.1038/s41467-018-07454-w</citation>
41 <citation type="doi">10.1038/s41467-020-15346-1</citation>
42 <citation type="doi">10.1074/mcp.P119.001913</citation>
43 <yield/>
44 </citations>
45 </xml>
46 <token name="@CMD_IMPORTS@">
47 #import re
48 #def identifier_or_name($input1)
49 #if hasattr($input1, 'element_identifier')
50 #return $input1.element_identifier
51 #else
52 #return $input1.name
53 #end if
54 #end def
55 #def clean($name1)
56 ## #set $name_clean = $re.sub('[^\w\-_\.]', '_', $re.sub('(?i[.](fa|fasta|imzml|mzml)$)','', $re.sub('.*/','', $name1.rstrip('.gz'))))
57 ## #set $name_clean = $re.sub('[^\w\-_\.]', '_', $re.sub('.*/','', $name1.rstrip('.gz')))
58 #set $name_clean = $re.sub('[^\w\-_\.]', '_', $re.sub('(?i)[.](fa|fasta|imzml|mzml)$','', $re.sub('.*/','', $name1.rstrip('.gz'))))
59 #return $name_clean
60 #end def
61 #def ln_name($ds)
62 #set $ext = ''
63 #if $ds.is_of_type('mzml')
64 #set $ext = ".mzML"
65 #else if $ds.is_of_type('elib')
66 #set $ext = ".elib"
67 #else if $ds.is_of_type('dlib')
68 #set $ext = ".dlib"
69 #else if $ds.is_of_type('blib')
70 #set $ext = ".blib"
71 #else if $ds.is_of_type('fasta')
72 #set $ext = ".fasta"
73 #else if $ds.is_of_type('fasta.gz')
74 #set $ext = ".fasta.gz"
75 #end if
76 #set $name = "%s%s" % ($clean($identifier_or_name($ds)),$ext)
77 #return $name
78 #end def
79 #set $i_name = None
80 #set $f_name = None
81 #set $l_name = None
82 #set $t_name = None
83 </token>
84
85 <xml name="scan_input">
86 <param argument="-i" type="data" format="imzml,mzml" label="Spectrum file in mzML format">
87 <help>@MSCONVERT_RAW@</help>
88 </param>
89 </xml>
90 <token name="@LINK_SCAN_INPUT@"><![CDATA[
91 #set $i_name = $ln_name($i)
92 ln -s '$i' '$i_name' &&
93 ]]></token>
94 <token name="@SCAN_INPUT@">
95 -i '$i_name'
96 </token>
97
98 <xml name="scan_inputs">
99 <param argument="-i" type="data" format="imzml,mzml" multiple="true" label="Spectrum files in mzML format">
100 <help>@MSCONVERT_RAW@</help>
101 </param>
102 </xml>
103 <token name="@LINK_SCAN_INPUTS@"><![CDATA[
104 #set $inputs_dir = 'inputs'
105 mkdir -p $inputs_dir &&
106 #for $sf in $i
107 #set $i_name = $ln_name($sf)
108 ln -s '$sf' '${inputs_dir}/${i_name}' &&
109 #end for
110 ]]></token>
111 <token name="@SCAN_INPUTS@">
112 -i '$inputs_dir'
113 </token>
114
115 <xml name="fasta_input">
116 <param argument="-f" type="data" format="fasta" label="Background proteome protein fasta database">
117 <help>provides the necessary peptide-to-protein links not specified in the spectrum library</help>
118 </param>
119 </xml>
120 <token name="@LINK_FASTA_INPUT@"><![CDATA[
121 #set $f_name = $ln_name($f)
122 ln -s '$f' '$f_name' &&
123 ]]></token>
124 <token name="@FASTA_INPUT@">
125 -f '$f_name'
126 </token>
127
128 <xml name="target_fasta">
129 <param argument="-t" type="data" format="fasta" label="Target fasta database" optional="true"/>
130 <param argument="-tp" type="boolean" truevalue="true" falsevalue="false" checked="false" label="target FASTA file contains peptides"/>
131 </xml>
132 <token name="@LINK_TARGET_FASTA@"><![CDATA[
133 #if $t
134 #set $t_name = $ln_name($t)
135 ln -s '$t' '$t_name' &&
136 #else
137 #set $t_name = None
138 #end if
139 ]]></token>
140 <token name="@TARGET_FASTA@">
141 #if $t_name
142 -t '$t_name'
143 -tp $tp
144 #end if
145 </token>
146
147 <xml name="lib_input" token_optional="true" token_libhelp="">
148 <param argument="-l" type="data" format="elib,dlib" optional="@OPTIONAL@" label="Library: Chromatagram .ELIB or Spectrum .DLIB">
149 <help>@LIBHELP@</help>
150 </param>
151 </xml>
152 <token name="@LINK_LIB_INPUT@"><![CDATA[
153 #if $l
154 #set $l_name = $ln_name($l)
155 cp '$l' $l_name &&
156 #else
157 #set $l_name = None
158 #end if
159 ]]></token>
160 <token name="@LIB_INPUT@">
161 #if $l_name
162 -l '$l_name'
163 #end if
164 </token>
165
166 <xml name="common_options" token_overlapping_selected="false" token_nonoverlapping_selected="false"
167 token_cid_selected="false" token_hcd_selected="false">
168 <conditional name="acquisition">
169 <param name="set_acquisition" type="select" label="Set Acquisition Options">
170 <option value="no">No - use default options</option>
171 <option value="yes">Yes</option>
172 </param>
173 <when value="no"/>
174 <when value="yes">
175 <param argument="-numberOfExtraDecoyLibrariesSearched" type="float" value="0.0" min="0.0" max="1.0" label="numberOfExtraDecoyLibrariesSearched"/>
176 <param argument="-acquisition" type="select" optional="true" label="Data Acquization Type">
177 <option value="Overlapping DIA" selected="@OVERLAPPING_SELECTED@">Overlapping DIA</option>
178 <option value="Non-Overlapping DIA" selected="@NONOVERLAPPING_SELECTED@">Non-Overlapping DIA</option>
179 </param>
180 <param argument="-enzyme" type="select" optional="true" label="Digestion Enzyme">
181 <option value="Trypsin">Trypsin</option>
182 <option value="Trypsin/p">Trypsin/p</option>
183 <option value="Lys-C">Lys-C</option>
184 <option value="Lys-N">Lys-N</option>
185 <option value="Arg-C">Arg-C</option>
186 <option value="Glu-C">Glu-C</option>
187 <option value="Chymotrypsin">Chymotrypsin</option>
188 <option value="Pepsin A">Pepsin A</option>
189 <option value="Elastase">Elastase</option>
190 <option value="Thermolysin">Thermolysin</option>
191 <option value="No Enzyme">No Enzyme</option>
192 </param>
193 <param argument="-frag" type="select" optional="true" label="Fragmentation">
194 <option value="CID" selected="@CID_SELECTED@">CID/HCD (B/Y)</option>
195 <option value="HCD" selected="@HCD_SELECTED@">HCD (Y-Only)</option>
196 <option value="ETD">ETD (C/Z/Z+1)</option>
197 </param>
198 </when>
199 </conditional>
200 </xml>
201 <xml name="encyclopedia_common_options">
202 <expand macro="common_options" token_overlapping_selected="true" token_nonoverlapping_selected="false"
203 token_cid_selected="true" token_hcd_selected="false"/>
204 </xml>
205 <xml name="walnut_common_options">
206 <expand macro="common_options" token_overlapping_selected="false" token_nonoverlapping_selected="true"
207 token_cid_selected="false" token_hcd_selected="true"/>
208 </xml>
209 <token name="@COMMON_OPTIONS@">
210 #if $acquisition.set_acquisition == 'yes'
211 -numberOfExtraDecoyLibrariesSearched $acquisition.numberOfExtraDecoyLibrariesSearched
212 #if $acquisition.acquisition
213 -acquisition '$acquisition.acquisition'
214 #end if
215 #if $acquisition.enzyme:
216 -enzyme '$acquisition.enzyme'
217 #end if
218 #if $acquisition.frag:
219 -frag '$acquisition.frag'
220 #end if
221 #end if
222 </token>
223
224 <xml name="mass_tolerance">
225 <conditional name="tolerance">
226 <param name="set_tolerance" type="select" label="Set Tolerance Options">
227 <option value="no">No - use default options</option>
228 <option value="yes">Yes</option>
229 </param>
230 <when value="no"/>
231 <when value="yes">
232 <conditional name="precursor_tolerance">
233 <param argument="-ptolunits" type="select" label="Precursor Mass Tolerance">
234 <option value="PPM">PPM</option>
235 <option value="AMU">AMU</option>
236 <option value="Resolution">Resolution</option>
237 </param>
238 <when value="PPM">
239 <param argument="-ptol" type="float" value="10" min="1.0" max="200.0" label="Precursor Mass Tolerance (PPM)"/>
240 </when>
241 <when value="AMU">
242 <param argument="-ptol" type="float" value=".4" min="1.0" max="1.0" label="Precursor Mass Tolerance (AMU)"/>
243 </when>
244 <when value="Resolution">
245 <param argument="-ptol" type="integer" value="15000" min="5000" max="300000" label="Precursor Mass Tolerance (Resolution)"/>
246 </when>
247 </conditional>
248 <conditional name="fragment_tolerance">
249 <param argument="-ftolunits" type="select" label="Fragment Mass Tolerance">
250 <option value="PPM">PPM</option>
251 <option value="AMU">AMU</option>
252 <option value="Resolution">Resolution</option>
253 </param>
254 <when value="PPM">
255 <param argument="-ftol" type="float" value="10" min="1.0" max="200.0" label="Fragment Mass Tolerance (PPM)"/>
256 </when>
257 <when value="AMU">
258 <param argument="-ftol" type="float" value=".4" min="1.0" max="1.0" label="Fragment Mass Tolerance (AMU)"/>
259 </when>
260 <when value="Resolution">
261 <param argument="-ftol" type="integer" value="15000" min="5000" max="300000" label="Fragment Mass Tolerance (Resolution)"/>
262 </when>
263 </conditional>
264 <yield/>
265 </when>
266 </conditional>
267 </xml>
268 <token name="@MASS_TOLERANCE@">
269 #if $tolerance.set_tolerance == 'yes'
270 -ptolunits $tolerance.precursor_tolerance.ptolunits
271 -ptol $tolerance.precursor_tolerance.ptol
272 -ftolunits $tolerance.fragment_tolerance.ftolunits
273 -ftol $tolerance.fragment_tolerance.ftol
274 #end if
275 </token>
276
277 <xml name="mass_library_tolerance">
278 <expand macro="mass_tolerance">
279 <conditional name="library_tolerance">
280 <param argument="-ltolunits" type="select" label="Library Mass Tolerance">
281 <option value="defaults">Use defaults</option>
282 <option value="PPM">PPM</option>
283 <option value="AMU">AMU</option>
284 <option value="Resolution">Resolution</option>
285 </param>
286 <when value="defaults"/>
287 <when value="PPM">
288 <param argument="-ltol" type="float" value="10" min="1.0" max="200.0" label="Library Mass Tolerance (PPM)"/>
289 </when>
290 <when value="AMU">
291 <param argument="-ltol" type="float" value=".4" min="1.0" max="1.0" label="Library Mass Tolerance (AMU)"/>
292 </when>
293 <when value="Resolution">
294 <param argument="-ltol" type="integer" value="15000" min="5000" max="300000" label="Library Mass Tolerance (Resolution)"/>
295 </when>
296 </conditional>
297 </expand>
298 </xml>
299 <token name="@MASS_LIBRARY_TOLERANCE@">
300 @MASS_TOLERANCE@
301 #if $tolerance.set_tolerance == 'yes' and $tolerance.library_tolerance.ltolunits != 'defaults'
302 -ltolunits $tolerance.library_tolerance.ltolunits
303 -ltol $tolerance.library_tolerance.ltol
304 #end if
305 </token>
306
307 <xml name="percolator_options">
308 <conditional name="percolator">
309 <param name="set_percolator" type="select" label="Set Percolator Options">
310 <option value="no">No - use default options</option>
311 <option value="yes">Yes</option>
312 </param>
313 <when value="no"/>
314 <when value="yes">
315 <param argument="-percolatorVersionNumber" type="integer" value="3" min="2" max="3" label="percolatorVersionNumber"/>
316 <param argument="-percolatorProteinThreshold" type="float" value="0.01" label="percolatorProteinThreshold"/>
317 <param argument="-percolatorThreshold" type="float" value="0.01" label="percolatorThreshold"/>
318 </when>
319 </conditional>
320 </xml>
321 <token name="@PERCOLATOR_OPTIONS@">
322 #if $percolator.set_percolator == 'yes'
323 #if str($percolator.percolatorVersionNumber)
324 -percolatorVersionNumber $percolator.percolatorVersionNumber
325 #end if
326 #if str($percolator.percolatorProteinThreshold)
327 -percolatorProteinThreshold $percolator.percolatorProteinThreshold
328 #end if
329 #if str($percolator.percolatorThreshold)
330 -percolatorThreshold $percolator.percolatorThreshold
331 #end if
332 #end if
333 </token>
334
335 <xml name="peak_options">
336 <conditional name="peak">
337 <param name="set_peak" type="select" label="Set Peak Options">
338 <option value="no">No - use default options</option>
339 <option value="yes">Yes</option>
340 </param>
341 <when value="no"/>
342 <when value="yes">
343 <param argument="-numberOfQuantitativePeaks" type="integer" value="" min="1" max="100" optional="true" label="Number of Quantitative Peaks" help="(default 5)"/>
344 <param argument="-minNumOfQuantitativePeaks" type="integer" value="" min="0" max="100" optional="true" label="Minimum Number of Quantitative Peaks" help="(default 3)"/>
345 <param argument="-minQuantitativeIonNumber" type="integer" value="" min="0" max="100" optional="true" label="Minimum Number of Quantitative Ions" help="(default 3)"/>
346 <param argument="-minIntensity" type="float" value="-1.0" optional="true" label="minIntensity"/>
347 <param argument="-expectedPeakWidth" type="float" value="25.0" min="1" max="100.0" optional="true" label="Expected Peak Width" help="(default 5)"/>
348 <param argument="-filterPeaklists" type="select" optional="true" label="Filter Peak Lists">
349 <option value="false">No</option>
350 <option value="true">Yes</option>
351 </param>
352 </when>
353 </conditional>
354 </xml>
355 <token name="@PEAK_OPTIONS@">
356 #if $peak.set_peak == 'yes'
357 #if str($peak.numberOfQuantitativePeaks)
358 -numberOfQuantitativePeaks $peak.numberOfQuantitativePeaks
359 #end if
360 #if str($peak.minNumOfQuantitativePeaks)
361 -minNumOfQuantitativePeaks $peak.minNumOfQuantitativePeaks
362 #end if
363 #if str($peak.minQuantitativeIonNumber)
364 -minQuantitativeIonNumber $peak.minQuantitativeIonNumber
365 #end if
366 #if str($peak.minIntensity)
367 -minIntensity $peak.minIntensity
368 #end if
369 #if str($peak.expectedPeakWidth)
370 -expectedPeakWidth $peak.expectedPeakWidth
371 #end if
372 #if $peak.filterPeaklists
373 -filterPeaklists $peak.filterPeaklists
374 #end if
375 #end if
376 </token>
377
378 <xml name="window_options">
379 <conditional name="window">
380 <param name="set_window" type="select" label="Set Window Options">
381 <option value="no">No - use default options</option>
382 <option value="yes">Yes</option>
383 </param>
384 <when value="no"/>
385 <when value="yes">
386 <param argument="-foffset" type="integer" value="" optional="true" label="fragmentOffsetPPM"/>
387 <param argument="-poffset" type="integer" value="" optional="true" label="Precursor Offset PPM" help="-poffset"/>
388 <param argument="-precursorIsolationMargin" type="integer" value="" optional="true" label="precursorIsolationMargin"/>
389 <param argument="-precursorWindowSize" type="integer" value="" optional="true" label="precursorWindowSize"/>
390 <param argument="-rtWindowInMin" type="float" value="" optional="true" label="rtWindowInMin"/>
391 <param argument="-scoringBreadthType" type="select" optional="true" label="scoringBreadthType">
392 <option value="window">Across entire window</option>
393 <option value="recal20">Recalibrated (20% gradient)</option>
394 <option value="recal">Recalibrated (peak width only)</option>
395 <option value="uncal20">Uncalibrated (20% gradient)</option>
396 <option value="uncal">Uncalibrated (peak width only)</option>
397 </param>
398 </when>
399 </conditional>
400 </xml>
401 <token name="@WINDOW_OPTIONS@">
402 #if $window.set_window == 'yes'
403 #if str($window.foffset)
404 -foffset $window.foffset
405 #end if
406 #if str($window.poffset)
407 -poffset $window.poffset
408 #end if
409 #if str($window.precursorIsolationMargin)
410 -precursorIsolationMargin $window.precursorIsolationMargin
411 #end if
412 #if str($window.precursorWindowSize)
413 -precursorWindowSize $window.precursorWindowSize
414 #end if
415 #if str($window.rtWindowInMin)
416 -rtWindowInMin $window.rtWindowInMin
417 #end if
418 #if $window.scoringBreadthType
419 -scoringBreadthType $window.scoringBreadthType
420 #end if
421 #end if
422 </token>
423
424 <xml name="modification_options">
425 <conditional name="modifications">
426 <param name="set_modifications" type="select" label="Set Modifications Options">
427 <option value="no">No - use default options</option>
428 <option value="yes">Yes</option>
429 </param>
430 <when value="no"/>
431 <when value="yes">
432 <param argument="-fixed" type="select" optional="true" label="Fixed Modification">
433 <option value="C=57.0214635">C+57 (Carbamidomethyl) C=57.0214635</option>
434 <option value="C=58.005479">C+58 (Carboxymethyl) C=58.005479</option>
435 <option value="C=45.987721">C+46 (MMTS) C=45.987721</option>
436 <option value="C=125.047679">C+125 (NEM) C=125.047679</option>
437 </param>
438 <yield/>
439 <!--
440 <param argument="-localizationModification" type="select" optional="true" label="localizationModification">
441 </param>
442 -->
443 <param argument="-verifyModificationIons" type="boolean" truevalue="true" falsevalue="false" checked="true" label="verifyModificationIons"/>
444 </when>
445 </conditional>
446 </xml>
447 <token name="@MODIFICATION_OPTIONS@">
448 #if $modifications.set_modifications == 'yes'
449 #if $modifications.fixed
450 -fixed $modifications.fixed
451 #end if
452 -verifyModificationIons $modifications.verifyModificationIons
453 #end if
454 </token>
455
456 <xml name="search_options">
457 <conditional name="search">
458 <param name="set_search" type="select" label="Set Search Options">
459 <option value="no">No - use default options</option>
460 <option value="yes">Yes</option>
461 </param>
462 <when value="no"/>
463 <when value="yes">
464 <param argument="-minCharge" type="integer" value="2" min="1" max="10" label="minCharge" optional="true"/>
465 <param argument="-maxCharge" type="integer" value="3" min="1" max="10" label="maxCharge" optional="true"/>
466 <param argument="-minLength" type="integer" value="5" min="1" max="100" label="minLength" optional="true"/>
467 <param argument="-maxLength" type="integer" value="100" min="10" max="200" label="maxLength" optional="true"/>
468 <param argument="-minEluteTime" type="integer" value="12" min="1" max="69" label="minEluteTime" optional="true"/>
469 <param argument="-maxMissedCleavage" type="integer" value="1" min="0" max="5" label="maxMissedCleavage" optional="true"/>
470 <param argument="-minQuantitativeIonNumber" type="integer" value="3" min="1" max="10" label="minQuantitativeIonNumber" optional="true"/>
471 <param argument="-minNumOfQuantitativePeaks" type="integer" value="3" min="1" max="10" label="minNumOfQuantitativePeaks" optional="true"/>
472 <param argument="-numberOfQuantitativePeaks" type="integer" value="3" min="1" max="10" label="numberOfQuantitativePeaks" optional="true"/>
473 <!--
474 <param argument="-alpha" type="float" value="1.8" min="0.0" max="5.0" label="alpha"/>
475 <param argument="-beta" type="float" value="0.4" min="0.0" max="5.0" label="beta"/>
476 <param argument="-addDecoysToBackground" type="boolean" truevalue="true" falsevalue="false" checked="false" label="addDecoysToBackground"/>
477 <param argument="-dontRunDecoys" type="boolean" truevalue="true" falsevalue="false" checked="false" label="dontRunDecoys"/>
478 -->
479 </when>
480 </conditional>
481 </xml>
482 <token name="@SEARCH_OPTIONS@">
483 #if $search.set_search == 'yes'
484 -minCharge $search.minCharge
485 -maxCharge $search.maxCharge
486 -minLength $search.minLength
487 -maxLength $search.maxLength
488 -minEluteTime $search.minEluteTime
489 -maxMissedCleavage $search.maxMissedCleavage
490 -minQuantitativeIonNumber $search.minQuantitativeIonNumber
491 -minNumOfQuantitativePeaks $search.minNumOfQuantitativePeaks
492 -numberOfQuantitativePeaks $search.numberOfQuantitativePeaks
493 ## -alpha $search.alpha
494 ## -beta $search.beta
495 ## -addDecoysToBackground $search.addDecoysToBackground
496 ## -dontRunDecoys $search.dontRunDecoys
497 #end if
498 </token>
499 <xml name="libexport">
500 <param argument="-a" type="boolean" truevalue="true" falsevalue="false" checked="false" label="align between files"/>
501 </xml>
502 <token name="@MSCONVERT_CMD@"><![CDATA[
503 msconvert --zlib --64 --mzML --simAsSpectra --filter "peakPicking true 1-" --filter "demultiplex optimization=overlap_only" *.raw
504 ]]>
505 </token>
506 <token name="@MSCONVERT_RAW@"><![CDATA[
507 mzML conversion from RAW requires special options: @MSCONVERT_CMD@
508 ]]>
509 </token>
510 <token name="@MSCONVERT_HELP@"><![CDATA[
511
512 The MSConvert command can be used to deconvolute DIA raw files. You need to use these options
513
514 ::
515
516 @MSCONVERT_CMD@
517
518 ]]>
519 </token>
520 </macros>