| Previous changeset 4:8cdffc02d2e2 (2018-04-25) Next changeset 6:9fb9fed71486 (2018-10-12) |
|
Commit message:
planemo upload for repository https://github.com/phac-nml/quasitools commit e30c0687f755a46c5b3bd265a1478a1abf5dc9f1 |
|
modified:
aacoverage.xml callaavar.xml callcodonvar.xml callntvar.xml consensus.xml distance.xml dnds.xml drmutations.xml hydra.xml |
|
added:
quality.xml |
| b |
| diff -r 8cdffc02d2e2 -r b69e898b8109 aacoverage.xml --- a/aacoverage.xml Wed Apr 25 10:38:00 2018 -0400 +++ b/aacoverage.xml Fri Aug 24 16:50:28 2018 -0400 |
| [ |
| @@ -1,7 +1,7 @@ -<tool id="aacoverage" name="Amino Acid Coverage" version="0.1.0"> +<tool id="aacoverage" name="Amino Acid Coverage" version="0.4.2"> <description>Builds an aa census and returns its coverage</description> <requirements> - <requirement type="package" version="0.3.1">quasitools</requirement> + <requirement type="package" version="0.4.2">quasitools</requirement> </requirements> <command detect_errors="exit_code"><![CDATA[ |
| b |
| diff -r 8cdffc02d2e2 -r b69e898b8109 callaavar.xml --- a/callaavar.xml Wed Apr 25 10:38:00 2018 -0400 +++ b/callaavar.xml Fri Aug 24 16:50:28 2018 -0400 |
| [ |
| @@ -1,15 +1,15 @@ -<tool id="aavariants" name="Amino Acid Variants" version="0.1.0"> +<tool id="aavariants" name="Amino Acid Variants" version="0.4.2"> <description>Identifies amino acid mutations</description> <requirements> - <requirement type="package" version="0.3.1">quasitools</requirement> + <requirement type="package" version="0.4.2">quasitools</requirement> </requirements> <command detect_errors="exit_code"><![CDATA[ ln -f -s ${input_bam.metadata.bam_index} ${input_bam}.bai && - quasitools call aavar $input_bam $ref_file $var_file $input_genes + quasitools call aavar $input_bam $ref_file $var_file $input_genes #if $mutation_db: - $mutation_db + $mutation_db #end if -o output.vcf |
| b |
| diff -r 8cdffc02d2e2 -r b69e898b8109 callcodonvar.xml --- a/callcodonvar.xml Wed Apr 25 10:38:00 2018 -0400 +++ b/callcodonvar.xml Fri Aug 24 16:50:28 2018 -0400 |
| [ |
| @@ -1,17 +1,17 @@ -<tool id="callcodonvar" name="Codon Variants" version="0.1.0"> +<tool id="callcodonvar" name="Codon Variants" version="0.4.2"> <description>Identifies codon variants and non-synonymous/synonymous mutations</description> <requirements> - <requirement type="package" version="0.3.1">quasitools</requirement> + <requirement type="package" version="0.4.2">quasitools</requirement> </requirements> <command detect_errors="exit_code"><![CDATA[ - cat $input_genes && + cat $input_genes && ln -f -s ${input_bam.metadata.bam_index} ${input_bam}.bai && - quasitools call codonvar $input_bam $ref_file $offset $input_genes + quasitools call codonvar $input_bam $ref_file $offset $input_genes #if $error_rate: - -e $error_rate + -e $error_rate #end if -o output.csv @@ -46,7 +46,7 @@ Codon Variants ============== -Call codon variants for a given BAM. A report is generated that details nucleotide variants within a +Call codon variants for a given BAM. A report is generated that details nucleotide variants within a codon and the resulting AA variants. The report indicates whether the nucleotide variants correspond to a synonymous or non-synonymous mutation. |
| b |
| diff -r 8cdffc02d2e2 -r b69e898b8109 callntvar.xml --- a/callntvar.xml Wed Apr 25 10:38:00 2018 -0400 +++ b/callntvar.xml Fri Aug 24 16:50:28 2018 -0400 |
| [ |
| @@ -1,15 +1,15 @@ -<tool id="callntvar" name="Nucleotide Variants" version="0.1.0"> +<tool id="callntvar" name="Nucleotide Variants" version="0.4.2"> <description>Identifies nucleotide variants</description> <requirements> - <requirement type="package" version="0.3.1">quasitools</requirement> + <requirement type="package" version="0.4.2">quasitools</requirement> </requirements> <command detect_errors="exit_code"><![CDATA[ - + ln -f -s ${input_bam.metadata.bam_index} ${input_bam}.bai && - quasitools call ntvar $input_bam $ref_file + quasitools call ntvar $input_bam $ref_file #if $error_rate: - -e $error_rate + -e $error_rate #end if -o output.vcf @@ -36,7 +36,7 @@ </test> </tests> <help><![CDATA[ - + Nucleotide Variants =================== |
| b |
| diff -r 8cdffc02d2e2 -r b69e898b8109 consensus.xml --- a/consensus.xml Wed Apr 25 10:38:00 2018 -0400 +++ b/consensus.xml Fri Aug 24 16:50:28 2018 -0400 |
| [ |
| @@ -1,21 +1,21 @@ -<tool id="consensus" name="Consensus Sequence" version="0.2.0"> +<tool id="consensus" name="Consensus Sequence" version="0.4.2"> <description>Generate a consensus sequence from a BAM file</description> <requirements> - <requirement type="package" version="0.3.1">quasitools</requirement> + <requirement type="package" version="0.4.2">quasitools</requirement> </requirements> <command detect_errors="exit_code"><![CDATA[ ln -f -s ${input_bam.metadata.bam_index} ${input_bam}.bai && - quasitools consensus $input_bam $ref_file + quasitools consensus $input_bam $ref_file #if $fasta_id.type == 'default': - -i '${input_bam.element_identifier}' + -i '${input_bam.element_identifier}' #elif $fasta_id.type == 'custom': -i '${fasta_id.custom_id}' #end if #if $base_type.type == 'mixed': - -p $base_type.percentage + -p $base_type.percentage #end if -o output.fasta |
| b |
| diff -r 8cdffc02d2e2 -r b69e898b8109 distance.xml --- a/distance.xml Wed Apr 25 10:38:00 2018 -0400 +++ b/distance.xml Fri Aug 24 16:50:28 2018 -0400 |
| [ |
| @@ -1,7 +1,7 @@ -<tool id="distance" name="Quasispecies Distance" version="0.1.0"> +<tool id="distance" name="Quasispecies Distance" version="0.4.2"> <description>Calculate the evolutionary distance between viral quasispecies.</description> <requirements> - <requirement type="package" version="0.3.1">quasitools</requirement> + <requirement type="package" version="0.4.2">quasitools</requirement> </requirements> <command detect_errors="exit_code"><![CDATA[ |
| b |
| diff -r 8cdffc02d2e2 -r b69e898b8109 dnds.xml --- a/dnds.xml Wed Apr 25 10:38:00 2018 -0400 +++ b/dnds.xml Fri Aug 24 16:50:28 2018 -0400 |
| [ |
| @@ -1,7 +1,7 @@ -<tool id="dnds" name="dNdS Report" version="0.1.0"> +<tool id="dnds" name="dNdS Report" version="0.4.2"> <description>Calculate the dN/dS value for each region in a bed file</description> <requirements> - <requirement type="package" version="0.3.1">quasitools</requirement> + <requirement type="package" version="0.4.2">quasitools</requirement> </requirements> <command detect_errors="exit_code"><![CDATA[ |
| b |
| diff -r 8cdffc02d2e2 -r b69e898b8109 drmutations.xml --- a/drmutations.xml Wed Apr 25 10:38:00 2018 -0400 +++ b/drmutations.xml Fri Aug 24 16:50:28 2018 -0400 |
| [ |
| @@ -1,15 +1,15 @@ -<tool id="drmutations" name="Drug Resistance Mutations" version="0.1.0"> +<tool id="drmutations" name="Drug Resistance Mutations" version="0.4.2"> <description></description> <requirements> - <requirement type="package" version="0.3.1">quasitools</requirement> + <requirement type="package" version="0.4.2">quasitools</requirement> </requirements> <command detect_errors="exit_code"><![CDATA[ ln -f -s ${input_bam.metadata.bam_index} ${input_bam}.bai && - quasitools drmutations $input_bam $ref_file $var_file $input_genes - + quasitools drmutations $input_bam $ref_file $var_file $input_genes + #if $mutation_db: - $mutation_db + $mutation_db #end if #if $min_freq: @@ -17,11 +17,11 @@ #end if #if $reporting_thres: - -t $reporting_thres + -t $reporting_thres #end if -o output.csv - + ]]></command> <inputs> <param name="input_bam" type="data" format="bam" optional="false" label="Bam file" /> |
| b |
| diff -r 8cdffc02d2e2 -r b69e898b8109 hydra.xml --- a/hydra.xml Wed Apr 25 10:38:00 2018 -0400 +++ b/hydra.xml Fri Aug 24 16:50:28 2018 -0400 |
| [ |
| b'@@ -1,88 +1,102 @@\n-<tool id="hydra" name="Hydra pipeline" version="0.2.0">\n+<tool id="hydra" name="Hydra pipeline" version="0.4.2">\n <description>Identifies drug resistance within an NGS dataset</description>\n <requirements>\n- <requirement type="package" version="0.3.1">quasitools</requirement>\n+ <requirement type="package" version="0.4.2">quasitools</requirement>\n </requirements>\n <command detect_errors="exit_code"><![CDATA[\n \n- quasitools hydra \n+ quasitools hydra\n \n ## Preparing file input.\n #if $data_type.type == "paired":\n \n- \'$data_type.fastq_input1\' \n- \'$data_type.fastq_input2\' \n+ \'$data_type.fastq_input1\'\n+ \'$data_type.fastq_input2\'\n \n #elif $data_type.type == "collection":\n \n- \'$data_type.fastq_input1.forward\' \n- \'$data_type.fastq_input1.reverse\' \n+ \'$data_type.fastq_input1.forward\'\n+ \'$data_type.fastq_input1.reverse\'\n \n #elif $data_type.type == "single":\n \n- \'$data_type.fastq_input1\' \n+ \'$data_type.fastq_input1\'\n \n #end if\n \n #if $mutation_db:\n- -m \'$mutation_db\' \n+ -m \'$mutation_db\'\n #end if\n \n #if $reporting_threshold:\n- -rt \'$reporting_threshold\' \n+ -rt \'$reporting_threshold\'\n #end if\n \n #if $consensus_pct:\n- -cp \'$consensus_pct\' \n+ -cp \'$consensus_pct\'\n #end if\n \n #if $length_cutoff:\n- -lc \'$length_cutoff\' \n+ -lc \'$length_cutoff\'\n #end if\n \n #if $score_cutoff:\n- -sc \'$score_cutoff\' \n+ -sc \'$score_cutoff\'\n #end if\n \n #if $error_rate:\n- -e \'$error_rate\' \n+ -e \'$error_rate\'\n #end if\n \n- #if $min_qual:\n- -mq \'$min_qual\' \n+ #if $min_read_qual:\n+ -rq \'$min_read_qual\'\n+ #end if\n+\n+ #if $min_variant_qual:\n+ -vq \'$min_variant_qual\'\n #end if\n \n #if $min_depth:\n- -md \'$min_depth\' \n+ -md \'$min_depth\'\n #end if\n \n #if $min_ac:\n- -ma \'$min_ac\' \n+ -ma \'$min_ac\'\n #end if\n \n #if $min_freq:\n- -mf \'$min_freq\' \n+ -mf \'$min_freq\'\n #end if\n \n #if $consensus.consensus_bool == "true_consensus":\n- --generate_consensus \n+ --generate_consensus\n \n #if $consensus.fasta_id.type == "default":\n- --id \n+ --id\n #if $data_type.type == "paired":\n \'${fastq_input1.element_identifier}\'_\'${fastq_input2.element_identifier}\'\n #elif $data_type.type == "single":\n \'${fastq_input1.element_identifier}\'\n #end if\n #elif $consensus.fasta_id.type == "custom":\n- --id \'$consensus.fasta_id.custom_id\' \n+ --id \'$consensus.fasta_id.custom_id\'\n #end if\n #end if\n \n- #if $filter_ns:\n- --ns \n+ #if $low_quality.qual_selector == "filter_ns":\n+ --ns\n+ #elif $low_quality.qual_selector == "mask_reads":\n+ --mask_reads\n #end if\n \n+ #if $score_type.score_selector == "median":\n+ --median\n+ #elif $score_type.score_selector == "mean":\n+ --mean\n+ #end if\n+\n+ $trim_reads\n+\n -o output\n \n ]]></command>\n@@ -107,19 +121,21 @@\n <param name="mutation_db" type="data" format="tsv" optional="true" label="Mutation DB" help="Defaults to HIV mutation database." />\n <param name="reporting_threshold" type="integer" optional="true" min="1" max="100" value="1" label="Reporting threshold. Defaults to 1." help="Minimum mutation frequency to report." />\n <param name="consensus_pct" type="integer" optional="true" min="1" max="20" value="20" lab'..b'true" value="false_consensus">False</option>\n </param>\n- <when value="true_consensus"> \n+ <when value="true_consensus">\n <conditional name="fasta_id">\n <param name="type" type="select" label="Specify consensus fasta identifier" multiple="false" display="radio">\n <option value="default" >Use fasta dataset name</option>\n@@ -130,16 +146,37 @@\n <when value="custom">\n <param name="custom_id" type="text" optional="false" value="custom_id" label="Fasta identifier" help="Type in a fasta identifier."/>\n </when>\n- </conditional> \n+ </conditional>\n </when>\n- <when value="false_consensus"> \n+ <when value="false_consensus">\n </when>\n </conditional>\n- <param name="filter_ns" type="boolean" truevalue="--ns" falsevalue="" checked="False" label="Filter out n\'s" />\n+ <conditional name="low_quality">\n+ <param name="qual_selector" type="select" label="Filter out regions masked, or mask low coverage regions with n\'s." multiple="false" display="radio">\n+ <option value="filter_ns">Filter out regions with n\'s</option>\n+ <option value="mask_reads">Mask low coverage regions with n\'s</option>\n+ <option value="neither" selected="true">Do not filter or mask low coverage regions.</option>\n+ </param>\n+ <when value="filter_ns">\n+ </when>\n+ <when value="mask_reads">\n+ </when>\n+ <when value="neither">\n+ </when>\n+ </conditional>\n+ <conditional name="score_type">\n+ <param name="score_selector" type="select" label="Use either median score (default) or mean score for the score cutoff value." multiple="false" display="radio">\n+ <option value="median" selected="true">Use median score</option>\n+ <option value="mean">Use mean score</option>\n+ </param>\n+ <when value="median">\n+ </when>\n+ <when value="mean">\n+ </when>\n+ </conditional>\n </inputs>\n <outputs>\n <data format="bam" label="HyDRA: alignment bam output" name="output_bam" from_work_dir="output/align.bam" />\n- <data format="bam" label="HyDRA: bam.bai output" name="output_bam_bai" from_work_dir="output/align.bam.bai" />\n <data format="csv" label="HyDRA: coverage output" name="output_coverage" from_work_dir="output/coverage_file.csv" />\n <data format="csv" label="HyDRA: drug resistance output" name="output_dr" from_work_dir="output/dr_report.csv" />\n <data format="fastq" label="HyDRA: filtered reads output" name="output_filtered" from_work_dir="output/filtered.fastq" />\n@@ -154,6 +191,7 @@\n <test>\n <param name="type" value="single"/>\n <param name="fastq_input1" value="forward.fastq" />\n+ <param name="score_selector" value="mean" />\n <output name="output_coverage">\n <assert_contents>\n <has_text text="frame: 0" />\n@@ -237,7 +275,6 @@\n \n /tmp/hydra_out/\n * align.bam\n- * align.bam.bai\n * coverage_file.csv\n * dr_report.csv\n * filtered.fastq\n@@ -250,7 +287,6 @@\n * __run.conf__: The configuration used when this output was produced.\n * __reads_w_K103N/__: The results directory for the input file reads_w_K103N.fastq\n * __align.bam__: The alignment file in bam format.\n- * __align.bam.bai__: The index to the alignment file.\n * __coverage_file.csv__: A file with one entry per line with the AA position and the coverage at the position.\n * __dr_report.csv__: A report detailing the drug resistant mutations found, above the reporting threshold (default: 1%).\n * __filtered.fastq__: The reads remaining after the filtering stage.\n' |
| b |
| diff -r 8cdffc02d2e2 -r b69e898b8109 quality.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/quality.xml Fri Aug 24 16:50:28 2018 -0400 |
| [ |
| b'@@ -0,0 +1,172 @@\n+<tool id="quality" name="Quality control" version="0.4.2">\n+ <description>Performs quality control on FASTQ reads.</description>\n+ <requirements>\n+ <requirement type="package" version="0.4.2">quasitools</requirement>\n+ </requirements>\n+ <command detect_errors="exit_code"><![CDATA[\n+\n+ quasitools quality\n+\n+ ## Preparing file input.\n+ #if $data_type.type == "paired":\n+\n+ \'$data_type.fastq_input1\'\n+ \'$data_type.fastq_input2\'\n+\n+ #elif $data_type.type == "collection":\n+\n+ \'$data_type.fastq_input1.forward\'\n+ \'$data_type.fastq_input1.reverse\'\n+\n+ #elif $data_type.type == "single":\n+\n+ \'$data_type.fastq_input1\'\n+\n+ #end if\n+\n+ #if $length_cutoff:\n+ -lc \'$length_cutoff\'\n+ #end if\n+\n+ #if $score_cutoff:\n+ -sc \'$score_cutoff\'\n+ #end if\n+\n+ #if $min_read_qual:\n+ -rq \'$min_read_qual\'\n+ #end if\n+\n+ #if $low_quality.qual_selector == "filter_ns":\n+ --ns\n+ #elif $low_quality.qual_selector == "mask_reads":\n+ --mask_reads\n+ #end if\n+\n+ #if $score_type.score_selector == "median":\n+ --median\n+ #elif $score_type.score_selector == "mean":\n+ --mean\n+ #end if\n+\n+ $trim_reads\n+\n+ -o output\n+\n+ ]]></command>\n+ <inputs>\n+ <conditional name="data_type">\n+ <param name="type" type="select" label="Specify the read type.">\n+ <option value="single">Single-end Data</option>\n+ <option value="paired">Paired-end Data</option>\n+ <option value="collection">Collection Paired-end Data</option>\n+ </param>\n+ <when value="single">\n+ <param name="fastq_input1" type="data" format="fastq" label="Single end read file(s)"/>\n+ </when>\n+ <when value="paired">\n+ <param name="fastq_input1" type="data" format="fastq" label="Forward paired-end read file"/>\n+ <param name="fastq_input2" type="data" format="fastq" label="Reverse paired-end read file"/>\n+ </when>\n+ <when value="collection">\n+ <param name="fastq_input1" type="data_collection" label="Paired-end reads collection" optional="false" format="fastq" collection_type="paired" />\n+ </when>\n+ </conditional>\n+ <param name="length_cutoff" type="integer" optional="true" min="1" max="1000" label="Length cutoff" value="100" help="Reads which fall short of the specified length will be filtered out. Defaults to 100." />\n+ <param name="score_cutoff" type="integer" optional="true" min="0" max="40" label="Score cutoff" value="30" help="Reads whose median or mean quality score (depending on the score type specified) is less than the specified score cutoff value will be filtered out. Defaults to 30." />\n+ <param name="min_read_qual" type="integer" optional="true" min="1" max="100" label="Minimum quality" value="30" help="Minimum required quality for a position in a read not to be masked, is masking is enabled. Defaults to 30." />\n+ <param name="trim_reads" type="boolean" optional="true" checked="false" truevalue="-tr" falsevalue="" label="Trim reads" help="Iteratively trim reads based on filter values if enabled." />\n+ <conditional name="low_quality">\n+ <param name="qual_selector" type="select" label="Filter out regions masked, or mask low coverage regions with n\'s." multiple="false" display="radio">\n+ <option value="filter_ns">Filter out regions with n\'s</option>\n+ <option value="mask_reads">Mask low coverage regions with n\'s</option>\n+ <option value="neither" selected="true">Do not filter or mask low coverage regions.</option>\n+ </param>\n+ <when value="filter_ns">\n+ </when>\n+ <when value="m'..b'elect" label="Use either median score (default) or mean score for the score cutoff value." multiple="false" display="radio">\n+ <option value="median" selected="true">Use median score</option>\n+ <option value="mean">Use mean score</option>\n+ </param>\n+ <when value="median">\n+ </when>\n+ <when value="mean">\n+ </when>\n+ </conditional>\n+ </inputs>\n+ <outputs>\n+ <data format="fastq" label="Quality control output" name="output_filtered" from_work_dir="output/filtered.fastq" />\n+ </outputs>\n+ <tests>\n+ <test>\n+ <param name="type" value="single"/>\n+ <param name="fastq_input1" value="forward.fastq" />\n+ <param name="score_selector" value="median" />\n+ <output name="output_filtered">\n+ <assert_contents>\n+ <has_text text="@M01647:10:000000000-ACPHB:1:1101:18589:1580 1:N:0:86" />\n+ <has_text text="CCCCCGG@FFGGGGGGGGGGGGCGGGGGGGGDGFFFGGGGGDEGCFGCFFFGGGGGGGGGGGGGGGGFGGGGGGGGGGFCFCGGGGCGFGGGGFGEGGGGGGGGGGGGGGGGGGGGGFEFGGGGGGF" />\n+ </assert_contents>\n+ </output>\n+ </test>\n+ <test>\n+ <param name="type" value="single"/>\n+ <param name="fastq_input1" value="forward.fastq" />\n+ <param name="score_selector" value="median" />\n+ <param name="qual_selector" value="filter_ns" />\n+ <output name="output_filtered">\n+ <assert_contents>\n+ <has_text text="@M01647:10:000000000-ACPHB:1:1101:18589:1580 1:N:0:86" />\n+ <has_text text="CCCCCGG@FFGGGGGGGGGGGGCGGGGGGGGDGFFFGGGGGDEGCFGCFFFGGGGGGGGGGGGGGGGFGGGGGGGGGGFCFCGGGGCGFGGGGFGEGGGGGGGGGGGGGGGGGGGGGFEFGGGGGGF" />\n+ </assert_contents>\n+ </output>\n+ </test>\n+ <test>\n+ <param name="type" value="single"/>\n+ <param name="fastq_input1" value="forward.fastq" />\n+ <param name="score_selector" value="median" />\n+ <param name="trim_reads" value="-tr" />\n+ <output name="output_filtered">\n+ <assert_contents>\n+ <has_text text="@M01647:10:000000000-ACPHB:1:1101:18589:1580 1:N:0:86" />\n+ <has_text text="CCCCCGG@FFGGGGGGGGGGGGCGGGGGGGGDGFFFGGGGGDEGCFGCFFFGGGGGGGGGGGGGGGGFGGGGGGGGGGFCFCGGGGCGFGGGGFGEGGGGGGGGGGGGGGGGGGGGGFEFGGGGGGF" />\n+ </assert_contents>\n+ </output>\n+ </test>\n+ <test>\n+ <param name="type" value="single"/>\n+ <param name="fastq_input1" value="forward.fastq" />\n+ <param name="score_selector" value="median" />\n+ <param name="qual_selector" value="mask_reads" />\n+ <output name="output_filtered">\n+ <assert_contents>\n+ <has_text text="@M01647:10:000000000-ACPHB:1:1101:18589:1580 1:N:0:86" />\n+ <has_text text="NNNNNNTACCACATCCCNCNNNNTTNNNNNNNNNNANNTCNNTNNCNNTNCTNNNTNTNNNTGNTGCNTNTTTTTCAGTTCCCTTNGNTGNNGNCTTCAGNNNNTATACTGCATTTACCNTNCNT" />\n+ </assert_contents>\n+ </output>\n+ </test>\n+ <test>\n+ <param name="type" value="single"/>\n+ <param name="fastq_input1" value="forward.fastq" />\n+ <param name="score_selector" value="mean" />\n+ <output name="output_filtered">\n+ <assert_contents>\n+ <has_text text="@M01647:10:000000000-ACPHB:1:1101:10485:1674 1:N:0:86" />\n+ <has_text text="CCCCCGG@FFGGGGGGGGGGGGCGGGGGGGGDGFFFGGGGGDEGCFGCFFFGGGGGGGGGGGGGGGGFGGGGGGGGGGFCFCGGGGCGFGGGGFGEGGGGGGGGGGGGGGGGGGGGGFEFGGGGGGF" />\n+ </assert_contents>\n+ </output>\n+ </test>\n+ </tests>\n+ <help><![CDATA[\n+Quality Control\n+===============\n+\n+Perform quality control on FASTQ reads.]]></help>\n+ <citations>\n+ </citations>\n+</tool>\n' |