changeset 7:25d207f7ff83 draft

"planemo upload for repository https://github.com/jj-umn/tools-iuc/tree/arriba/tools/arriba commit e113a79cc67e0bdb168babfe964f34873b2e1303"
author jjohnson
date Mon, 11 Oct 2021 16:40:51 +0000
parents 7253b367c082
children 1a56888ddb7d
files arriba.xml arriba_draw_fusions.xml macros.xml test-data/fusions.tsv
diffstat 4 files changed, 461 insertions(+), 167 deletions(-) [+]
line wrap: on
line diff
--- a/arriba.xml	Mon Oct 11 01:47:22 2021 +0000
+++ b/arriba.xml	Mon Oct 11 16:40:51 2021 +0000
@@ -55,7 +55,7 @@
     #end if
 #end if
     -a '$genome_assembly'
-    -g '$gtf'
+    -g '$annotation'
     #if $blacklist
         -b '$blacklist'
     #else
@@ -155,57 +155,8 @@
     && samtools index Aligned.sortedByCoord.out.bam
 #end if
 #if str($visualization.do_viz) == "yes"
-&& draw_fusions.R 
-    --fusions=fusions.tsv 
-    --alignments=Aligned.sortedByCoord.out.bam 
-    --annotation='$gtf'
-    --output=fusions.pdf 
-    #if $visualization.cytobands
-    --cytobands='$visualization.cytobands'
-    #end if
-    #if $protein_domains
-    --proteinDomains='$protein_domains'
-    #end if
-    ## Visualization Options
-    #if $visualization.options.transcriptSelection
-        --transcriptSelection=$visualization.options.transcriptSelection
-    #end if
-    #if $visualization.options.minConfidenceForCircosPlot
-        --minConfidenceForCircosPlot=$visualization.options.minConfidenceForCircosPlot
-    #end if
-    #if $visualization.options.showIntergenicVicinity
-        --showIntergenicVicinity=$visualization.options.showIntergenicVicinity
-    #end if
-    #if $visualization.options.squishIntrons
-        --squishIntrons=$visualization.options.squishIntrons
-    #end if
-    #if $visualization.options.mergeDomainsOverlappingBy
-        --mergeDomainsOverlappingBy=$visualization.options.mergeDomainsOverlappingBy
-    #end if
-    #if $visualization.options.printExonLabels
-        --printExonLabels=$visualization.options.printExonLabels
-    #end if
-    #if $visualization.options.render3dEffect
-        --render3dEffect=$visualization.options.render3dEffect
-    #end if
-    #if $visualization.options.optimizeDomainColors
-        --optimizeDomainColors=$visualization.options.optimizeDomainColors
-    #end if
-    #if $visualization.options.color1
-        --color1=$visualization.options.color1
-    #end if
-    #if $visualization.options.color2
-        --color2=$visualization.options.color2
-    #end if
-    #if $visualization.options.pdfWidth
-        --pdfWidth=$visualization.options.pdfWidth
-    #end if
-    #if $visualization.options.pdfHeight
-        --pdfHeight=$visualization.options.pdfHeight
-    #end if
-    #if $visualization.options.fontSize
-        --fontSize=$visualization.options.fontSize
-    #end if
+#set $fusions = 'fusions.tsv'
+&& @DRAW_FUSIONS@
 #end if
     ]]></command>
     <inputs>
@@ -243,7 +194,7 @@
             </when>
         </conditional>
         <param name="genome_assembly" argument="-a" type="data" format="fasta" label="genome assembly fasta"/>
-        <param name="gtf" argument="-g" type="data" format="gtf" label="GTF file with gene annotation"/>
+        <param name="annotation" argument="-g" type="data" format="gtf" label="GTF file with gene annotation"/>
         <param name="blacklist" argument="-b" type="data" format="tabular,tabular.gz" optional="true" label="File containing blacklisted ranges."/>
         <param name="protein_domains" argument="-p" type="data" format="gff3" optional="true" label="File containing protein domains"/>
         <param name="known_fusions" argument="-k" type="data" format="tabular,tabular.gz"  optional="true" label="File containing known fusions">
@@ -433,120 +384,15 @@
                 <option value="no">no</option>
             </param>
             <when value="yes">
-                <param name="cytobands" argument="--cytobands" type="data" format="tabular" optional="true" label="Cytobands"/>
-                <section name="options" expanded="false" title="Visualization Options">
-                    <param argument="--transcriptSelection" type="select" optional="true" label="Transcript selection">
-                        <help>By default the transcript isoform with the highest coverage is drawn. 
-                             Alternatively, the transcript isoform that is provided in the columns 
-                             transcript_id1 and transcript_id2 in the given fusions file can be drawn. 
-                             Selecting the isoform with the highest coverage usually produces nicer plots, 
-                             in the sense that the coverage track is smooth and shows a visible increase in coverage after the fusion breakpoint. 
-                             However, the isoform with the highest coverage may not be the one that is involved in the fusion. 
-                             Often, genomic rearrangements lead to non-canonical isoforms being transcribed. 
-                             For this reason, it can make sense to rely on the transcript selection provided by the columns transcript_id1/2, 
-                             which reflect the actual isoforms involved in a fusion. 
-\                            As a third option, the transcripts that are annotated as canonical can be drawn. 
-                             Transcript isoforms tagged with appris_principal, appris_candidate, or CCDS are considered canonical.
-                        </help>
-                        <option value="coverage">coverage</option>
-                        <option value="provided">provided</option>
-                        <option value="canonical">canonical</option>
-                    </param>
-                    <param argument="--minConfidenceForCircosPlot" type="select" optional="true" label="Transcript selection">
-                        <help>The fusion of interest is drawn as a solid line in the circos plot. 
-                              To give an impression of the overall degree of rearrangement, 
-                              all other fusions are drawn as semi-transparent lines in the background. 
-                              This option determines which other fusions should be included in the circos plot. 
-                              Values specify the minimum confidence a fusion must have to be included. 
-                              It usually makes no sense to include low-confidence fusions in circos plots, 
-                              because they are abundant and unreliable, and would clutter up the circos plot.
-                              Default: medium
-                        </help>
-                        <option value="none">none - only the fusion of interest is drawn</option>
-                        <option value="low">low</option>
-                        <option value="medium">medium</option>
-                        <option value="high">high</option>
-                    </param>
-                    <param argument="--showIntergenicVicinity" type="integer" value="" min="0" optional="true" label="Intergenic Vicinity">
-                        <help>This option only applies to intergenic breakpoints. 
-                              If it is set to a value greater than 0, then the script draws the genes
-                              which are no more than the given distance away from an intergenic breakpoint. 
-                              Note that this option is incompatible with squishIntrons. 
-                              Default: 0
-                        </help>
-                    </param>
-                    <param argument="--squishIntrons" type="select" optional="true" label="Squish introns">
-                        <help>Exons usually make up only a small fraction of a gene. 
-                              They may be hard to see in the plot. i
-                              Since introns are in most situations of no interest in the context of gene fusions, 
-                              this switch can be used to shrink the size of introns to a fixed, negligible size. 
-                              It makes sense to disable this feature, if breakpoints in introns are of importance. 
-                              Default: TRUE
-                        </help>
-                        <option value="TRUE">True</option>
-                        <option value="FALSE">False</option>
-                    </param>
-
-                    <param argument="--mergeDomainsOverlappingBy" type="float" value="" min="0." max="1.0" optional="true" label="Merge Domains Overlapping By">
-                        <help>Occasionally, domains are annotated redundantly. 
-                              For example, tyrosine kinase domains are frequently annotated as 
-                              Protein tyrosine kinase and Protein kinase domain. 
-                              In order to simplify the visualization, such domains can be merged into one, 
-                              given that they overlap by the given fraction. 
-                              The description of the larger domain is used. 
-                              Default: 0.9
-                        </help>
-                    </param>
-                    <param argument="--printExonLabels" type="select" optional="true" label="Print Exon Labels">
-                        <help>By default the number of an exon is printed inside each exon, 
-                              which is taken from the attribute exon_number of the GTF annotation. 
-                              When a gene has many exons, the boxes may be too narrow to contain the labels, 
-                              resulting in unreadable exon labels. In these situations, i
-                              it may be better to turn off exon labels. 
-                              Default: TRUE
-                        </help>
-                        <option value="TRUE">True</option>
-                        <option value="FALSE">False</option>
-                    </param>
-                    <param argument="--render3dEffect" type="select" optional="true" label="Render 3D effect">
-                        <help>Whether light and shadow should be rendered to give objects a 3D effect. 
-                              Default: TRUE
-                        </help>
-                        <option value="TRUE">True</option>
-                        <option value="FALSE">False</option>
-                    </param>
-                    <param argument="--optimizeDomainColors" type="select" optional="true" label="Optimize Domain Colors">
-                        <help>By default, the script colorizes domains according to the colors 
-                              specified in the file given in --annotation. 
-                              This way, coloring of domains is consistent across all proteins. 
-                              But since there are more distinct domains than colors, 
-                              this can lead to different domains having the same color. 
-                              If this option is set to TRUE, the colors are recomputed for each fusion separately. 
-                              This ensures that the colors have the maximum distance for each individual fusion, 
-                              but they are no longer consistent across different fusions. 
-                              Default: FALSE
-                        </help>
-                        <option value="TRUE">True</option>
-                        <option value="FALSE">False</option>
-                    </param>
-                    <param argument="--color1" type="color" value="" optional="true"  label="Color of the 5' end of the fusion."/>
-                    <param argument="--color2" type="color" value="" optional="true"  label="Color of the 3' end of the fusion."/>
-                    <param argument="--pdfWidth" type="float" value="" min="1." optional="true" label="Width of PDF output file in inches"
-                           help="Default: 11.692"/>
-                    <param argument="--pdfHeight" type="float" value="" min="1." optional="true" label="Height of PDF output file in inches"
-                           help="Default: 8.267"/>
-                    <param argument="--fontSize" type="float" value="" min="0." optional="true" label="Scale the size of text"
-                           help="Default: 1.0"/>
-                </section>
-
+                <expand macro="visualization_options" />
             </when>
             <when value="no"/>
         </conditional>
 
     </inputs>
     <outputs>
-        <data name="fusions" format="tabular" label="${tool.name} on ${on_string}: fusions.tsv" from_work_dir="fusions.tsv"/>
-        <data name="discarded" format="tabular" label="${tool.name} on ${on_string}: fusions.discarded.tsv" from_work_dir="fusions.discarded.tsv">
+        <data name="fusions_tsv" format="tabular" label="${tool.name} on ${on_string}: fusions.tsv" from_work_dir="fusions.tsv"/>
+        <data name="discarded_fusions_tsv" format="tabular" label="${tool.name} on ${on_string}: fusions.discarded.tsv" from_work_dir="fusions.discarded.tsv">
             <filter> output_fusions_discarded == "yes"</filter>
         </data> 
         <data name="aligned_bam" format="bam" label="${tool.name} on ${on_string}: Aligned.bam" from_work_dir="Aligned.sortedByCoord.out.bam">
@@ -564,13 +410,13 @@
                 <param name="input" ftype="sam" value="Aligned.out.sam"/>
             </conditional>
             <param name="genome_assembly" ftype="fasta" value="genome.fasta"/>
-            <param name="gtf" ftype="gtf" value="genome.gtf"/>
+            <param name="annotation" ftype="gtf" value="genome.gtf"/>
             <param name="protein_domains" ftype="gff3" value="protein_domains.gff3"/>
             <conditional name="visualization">
                 <param name="do_viz" value="no"/>
                 <param name="cytobands" ftype="tabular" value="cytobands.tsv"/>
             </conditional>
-            <output name="fusions">
+            <output name="fusions_tsv">
                 <assert_contents>
                     <has_text_matching expression="BCR\tABL1"/>
                 </assert_contents>
@@ -583,15 +429,22 @@
                 <param name="input" ftype="sam" value="Aligned.out.sam"/>
             </conditional>
             <param name="genome_assembly" ftype="fasta" value="genome.fasta"/>
-            <param name="gtf" ftype="gtf" value="genome.gtf"/>
+            <param name="annotation" ftype="gtf" value="genome.gtf"/>
+            <param name="protein_domains" ftype="gff3" value="protein_domains.gff3"/>
             <conditional name="visualization">
                 <param name="do_viz" value="yes"/>
+                <param name="cytobands" ftype="tabular" value="cytobands.tsv"/>
             </conditional>
-            <output name="fusions">
+            <output name="fusions_tsv">
                 <assert_contents>
                     <has_text_matching expression="BCR\tABL1"/>
                 </assert_contents>
             </output>
+            <output name="fusions_pdf">
+                <assert_contents>
+                    <has_size value= "64000" delta="5000" />
+                </assert_contents>
+            </output>
         </test>
 
     </tests>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/arriba_draw_fusions.xml	Mon Oct 11 16:40:51 2021 +0000
@@ -0,0 +1,282 @@
+<tool id="arriba_draw_fusions" name="Arriba Draw Fusions" version="@TOOL_VERSION@+galaxy@VERSION_SUFFIX@" python_template_version="3.5">
+    <description></description>
+    <macros>
+        <import>macros.xml</import>
+    </macros>
+    <expand macro="requirements" />
+    <expand macro="version_command" />
+    <command detect_errors="exit_code"><![CDATA[
+    #if $alignments.extension == 'sam'
+        ln -sf '$assembly' input.fa &&
+        samtools faidx input.fa &&
+        samtools view -b -@ \${GALAXY_SLOTS:-1} -t input.fa.fai '$alignments' | 
+        samtools sort -O bam -@ \${GALAXY_SLOTS:-1} -T "\${TMPDIR:-.}" -o Aligned.sortedByCoord.out.bam &&
+        samtools index Aligned.sortedByCoord.out.bam &&
+    #else
+        ln -sf '${alignments}' 'Aligned.sortedByCoord.out.bam' &&
+        ln -sf '$alignments.metadata.bam_index' 'Aligned.sortedByCoord.out.bam.bai' &&
+    #end if
+    @DRAW_FUSIONS@
+    ]]></command>
+    <inputs>
+        <param argument="--fusions" type="data" format="tabular" label="Arriba fusions.tsv"/>
+        <param argument="--alignments" type="data" format="sam,bam" label="STAR Aligned.out.bam"/>
+        <param name="assembly" type="data" format="fasta" optional="true" label="Genome assembly fasta (required when alignments are not sorted bam format)"/>
+        <param argument="--annotation" type="data" format="gtf" label="GTF file with gene annotation"/>
+        <param name="protein_domains" argument="-p" type="data" format="gff3" optional="true" label="File containing protein domains"/>
+        <section name="visualization" expanded="true" title="Visualization Options">
+             <expand macro="visualization_options" />
+        </section>
+    </inputs>
+    <outputs>
+        <data name="fusions_pdf" format="pdf" label="${tool.name} on ${on_string}: fusions.pdf" from_work_dir="fusions.pdf">
+            <filter>visualization['do_viz'] == "yes"</filter>
+        </data> 
+    </outputs>
+    <tests>
+        <!-- Test 1 - From exisitng BAM -->
+        <test> 
+            <param name="fusions" ftype="tabular" value="fusions.tsv"/>
+            <param name="alignments" ftype="sam" value="Aligned.out.sam"/>
+            <param name="assembly" ftype="fasta" value="genome.fasta"/>
+            <param name="annotation" ftype="gtf" value="genome.gtf"/>
+            <param name="protein_domains" ftype="gff3" value="protein_domains.gff3"/>
+            <section name="visualization">
+                <param name="cytobands" ftype="tabular" value="cytobands.tsv"/>
+            </section>
+            <output name="fusions_pdf">
+                <assert_contents>
+                    <has_size value="64000" delta="5000" />
+                </assert_contents>
+            </output>
+        </test>
+    </tests>
+    <help><![CDATA[
+**Arriba**
+
+
+Arriba_ is a fast tool to search for aberrant transcripts such as gene fusions.
+It is based on chimeric alignments found by the STAR RNA-Seq aligner.
+
+
+**INPUTS**
+
+See:  https://arriba.readthedocs.io/en/latest/input-files/
+
+  - Alignments
+
+    Arriba takes the main output file of STAR (Aligned.out.bam) as input (parameter -x). If STAR was run with the parameter --chimOutType WithinBAM, then this file contains all the information needed by Arriba to find fusions. When STAR was run with the parameter --chimOutType SeparateSAMold, the main output file lacks chimeric alignments. Instead, STAR writes them to a separate output file named Chimeric.out.sam. In this case, the file needs to be passed to Arriba via the parameter -c in addition to the main output file Aligned.out.bam.
+
+    Arriba extracts three types of reads from the alignment file(s):
+
+      * Split-reads, i.e., reads composed of segments which map in a non-linear way. STAR stores such reads as supplementary alignments.
+      * Discordant mates, i.e., paired-end reads which originate from the same fragment but which align in a non-linear way.
+      * Alignments which cross the boundaries of annotated genes, because these alignments might arise from focal deletions. In RNA-Seq data deletions of up to several hundred kb are hard to distinguish from splicing. They are represented identically as gapped alignments, because the sizes of many introns are in fact of this order of magnitude. STAR applies a rather arbitrary measure to decide whether a gapped alignment arises from splicing or from a genomic deletion: The parameter --alignIntronMax determines what gap size is still assumed to be a splicing event and introns are used to represent these gaps. Only gaps larger than this limit are classified as potential evidence for genomic deletions and are stored as chimeric alignments. Most STAR-based fusion detection tools only consider chimeric alignments as evidence for gene fusions and are blind to focal deletions, hence. As a workaround, these tools recommend reducing the value of the parameter --alignIntronMax. But this impairs the quality of alignment, because it reduces the scope that STAR searches to find a spliced alignment. To avoid compromising the quality of alignment for the sake of fusion detection, the only solution would be to run STAR twice - once with settings optimized for regular alignment and once for fusion detection. This would double the runtime. In contrast, Arriba does not require to reduce the maximum intron size. It employs a more sensible criterion to distinguish splicing from deletions: Arriba considers all those reads as potential evidence for deletions that span the boundary of annotated genes.
+
+    The alignment files can be in SAM, BAM, and CRAM format. They need not be sorted for Arriba to accept them, but doing so comes with benefits: Often, this reduces the file size. And more importantly, the supporting reads of a fusion can be inspected visually using a genome browser like IGV, which typically requires BAM files to be sorted by coordinate.
+
+    Single-end and paired-end data and even mixtures are supported. Arriba automatically determines the data type on a read-by-read basis using the flag BAM_FPAIRED.
+
+
+  - Assembly
+
+    Arriba takes the assembly as input (parameter -a) to find mismatches between the chimeric reads and the reference genome, as well as to find alignment artifacts and homologous genes.
+
+    The script download_references.sh can be used to download the assembly. The available assemblies are listed when the script is run without parameters. The user is not restricted to these assemblies, however. Any assembly can be used as long as its coordinates are compatible with one of the supported assemblies (hg19/hs37d5/GRCh37 or hg38/GRCh38 or mm10/GRCm38).
+
+    The assembly must be provided in FastA format and may be gzip-compressed. An index with the file extension .fai must exist only if CRAM files are processed.
+
+  - Annotation
+
+    The gene annotation (parameter -g) is used for multiple purposes:
+
+    annotation of breakpoints with genes
+    increased sensitivity for breakpoints at splice-sites
+    calculation of transcriptomic distances
+    determining the putative orientation of fused genes (i.e., 5' and 3' end)
+    GENCODE annotation is recommended over RefSeq annotation, because the former has a more comprehensive annotation of transcripts and splice-sites, which boosts the sensitivity. The file must be provided in GTF format and may be gzip-compressed. It does not need to be sorted.
+
+    The script download_references.sh can be used to download the annotation. The available annotation files are listed when the script is run without parameters. The user is not restricted to these annotation files, however. Any annotation can be used as long as its coordinates are compatible with one of the supported assemblies (hg19/hs37d5/GRCh37 or hg38/GRCh38 or mm10/GRCm38).
+
+
+  - Blacklist
+
+    It is strongly advised to run Arriba with a blacklist (parameter -b). Otherwise, the false positive rate increases by an order of magnitude. For this reason, using Arriba with assemblies or organisms which are not officially supported is not recommended. At the moment, the supported assemblies are: hg19/hs37d5/GRCh37, hg38/GRCh38, and mm10/GRCm38 (as well as any other assemblies that have compatible coordinates). The blacklists are contained in the release tarballs of Arriba.
+
+    The blacklist removes recurrent alignment artifacts and transcripts which are present in healthy tissue. This helps eliminate frequently observed transcripts, such as read-through fusions between neighboring genes, circular RNAs and other non-canonically spliced transcripts. It was trained on RNA-Seq samples from the Human Protein Atlas, the Illumina Human BodyMap2 , the ENCODE project , the Roadmap Epigenomics project, and the NCT MASTER cohort, a heterogeneous cohort of cancer samples, from which highly recurrent artifacts were identified.
+
+    Blacklists for all supported assemblies are shipped with the download package of Arriba. They can be found in the package as database/blacklist_*.
+
+    The blacklist is a tab-separated file with two columns and may optionally be gzip-compressed. Lines starting with a hash (#) are treated as comments. Each line represents a pair of regions between which events are ignored. A region can be:
+      * a 1-based coordinate in the format CONTIG:POSITION, optionally prefixed with the strand (example: +9:56743754). If CONTIG ends on an asterisk (*), the contig with the closest matching name is chosen. 
+      * a range in the format CONTIG:START-END, optionally prefixed with a strand (example: 9:1000000-1100000). 
+      * the name of a gene given in the provided annotation.  
+
+    In addition, special keywords are allowed for the second column:
+      * any: Discard all events if one of the breakpoints matches the given region.
+      * split_read_donor: Discard fusions only supported by split reads, if all of them have their anchor in the gene given in the first column. This filter is useful for highly mutable loci, which frequently trigger clipped alignments, such as the immunoglobulin loci or the T-cell receptor loci.
+      * split_read_acceptor: Discard events only supported by split reads, if all of them have their clipped segment in the given region.
+      * split_read_any: Discard events only supported by split reads, regardless of where the anchor is.
+      * discordant_mates: Discard fusions, if they are only supported by discordant mates (no split reads).
+      * low_support: Discard events, which have few supporting reads relative to expression (as determined by the filter relative_support), even if there is other evidence that the fusion might be a true positive, nonetheless. This keyword effectively prevents recovery of speculative events by filters such as spliced or many_spliced.
+      * filter_spliced: This keyword prevents the filter spliced from being applied to a given region. It is triggered under the same circumstances as the keyword low_support, but additionally requires that the breakpoints be at splice-sites for the event to be discarded. Some breakpoints produce recurrent artifacts, but the second breakpoint is always a different one, such that the pair of breakpoints is not recurrent and cannot be blacklisted. Often, such breakpoints are at splice-sites and the filter spliced tends to recover them. This keyword prevents the filter from doing so.
+      * not_both_spliced: This keyword discards events, unless both breakpoints are at splice-sites. This is a strict blacklist criterion, which makes sense to apply to genes which are prone to produce artifacts, because they are highly expressed, for example hemoglobins, collagens, or ribosomal genes.
+      * read_through: This keyword discards events, if they could arise from read-through transcription, i.e., the supporting reads are oriented like a deletion and are at most 400 kb apart.
+
+
+  - Known fusions
+
+    Arriba can be instructed to be particularly sensitive towards events between certain gene pairs by supplying a list of gene pairs (parameter -k). A number of filters are not applied to these gene pairs. This is useful to improve the detection rate of expected or highly relevant events, such as recurrent fusions. Occassionally, this leads to false positive calls. But if high sensitivity is more important than specificity, this might be acceptable. Events which would be discarded by a filter and were recovered due to being listed in the known fusions list are usually assigned a low confidence.
+
+    Known fusions files for all supported assemblies are shipped with the download package of Arriba. They can be found in the package as database/known_fusions_*.
+
+    The file has two columns separated by a tab and may optionally be gzip-compressed. Lines starting with a hash (#) are treated as comments. Each line represents a pair of regions to which very sensitive filtering thresholds are applied. A region can be:
+
+       * a 1-based coordinate in the format CONTIG:POSITION, optionally prefixed with the strand (example: +9:56743754). If CONTIG ends on an asterisk (*), the contig with the closest matching name is chosen.
+       * a range in the format CONTIG:START-END, optionally prefixed with a strand (example: 9:1000000-1100000).
+       * the name of a gene given in the provided annotation.
+
+    The order of the given regions is important. The region given in the first column is assumed to denote the 5' end of the fusion and the region in the second column to be the 3' end. If Arriba cannot determine with confidence which gene constitutes the 5' and which the 3' end of a fusion prediction, then the order is ignored and the prediction is rescued in both cases.
+
+
+  - Tags
+
+    Arriba can be supplied with a list of user-defined tags using the parameter -t. Whenever a fusion prediction matches the selection criteria for a tag, the column tags is populated with the respective tag. This feature is useful to annotate known oncogenic fusions, for example.
+
+    The known fusions file shipped with the download package of Arriba can be used for both known fusions and tags. It is constructed in a way that it can be passed as arguments to the parameters -k and -t alike. The former only uses the first two columns, the latter uses all three columns. If a user wants to separate filtering of known fusions and tagging of interesting fusions, different files may be used, however.
+
+    The file has three columns separated by a tab and may optionally be gzip-compressed. Lines starting with a hash (#) are treated as comments. Each line represents a pair of regions to be annotated. The first two columns specify the regions to be annotated; the third column the tag that is used for annotation. Some special characters in the tag are replaced with underscores (_) in Arriba's output file. A region can be:
+
+      * a 1-based coordinate in the format CONTIG:POSITION, optionally prefixed with the strand (example: +9:56743754).
+      * a range in the format CONTIG:START-END, optionally prefixed with a strand (example: 9:1000000-1100000).
+      * the name of a gene given in the provided annotation.
+
+    The order of the given regions is important. The region given in the first column is assumed to denote the 5' end of the fusion and the region in the second column to be the 3' end.
+
+  - Protein domains
+
+    Protein domain annotation can be passed to Arriba via the parameter -p. The column retained_protein_domains of Arriba's output file is then populated accordingly.
+
+    Protein domain annotation files for all supported assemblies are shipped with the download package of Arriba. They can be found in the package as database/protein_domains_*.
+
+    The file must be in GFF3 format and may optionally be gzip-compressed. The ninth column must at least contain the following attributes:
+      * Name=PROTEIN_DOMAIN_NAME;
+      * gene_id=GENE_ID;
+      * gene_name=GENE_NAME
+
+    The attribute Name is reported in the column retained_protein_domains of Arriba's output file. Some special characters in the name are replaced with underscores (_). The columns gene_id and gene_name are used to match the protein domains to the genes given in the gene annotation. If a match cannot be found, Arriba cannot determine the retained protein domains of the respective gene and a warning is issued. There may be many warnings if RefSeq annotation is used, because the protein domains file distributed with Arriba uses ENSEMBL gene names/IDs.
+
+  - Structural variant calls from WGS
+
+    If whole-genome sequencing (WGS) data is available, the sensitivity and specificity of Arriba can be improved by passing a list of structural variants detected from WGS to Arriba via the parameter -d. This has the following effects:
+
+    Certain filters are overruled or run with extra sensitive settings, when an event is confirmed by WGS data.
+    To reduce the false positive rate, Arriba does not report low-confidence events unless they can be matched with a structural variant found in the WGS data.
+    Both of these behaviors can be disabled by disabling the filters genomic_support and no_genomic_support, respectively. Providing Arriba with a list of structural variant calls then does not influence the calls, but it still has the benefit of filling the columns closest_genomic_breakpoint1 and closest_genomic_breakpoint2 with the breakpoints of the structural variant which is closest to a fusion. If the structural variant calls were obtained from whole-exome sequencing (WES) data rather than WGS data, the filter no_genomic_support should be disabled, since WES has poor coverage in most regions of the genome, such that many structural variants are missed.
+
+    Two file formats are accepted: a simple four-column format and the standard Variant Call Format (VCF). The format is detected automatically.
+
+      * In case of the simple format, the file must contain four columns separated by tabs. The first two columns contain the breakpoints of the structural variants in the format CONTIG:POSITION. The last two columns contain the orientation of the breakpoints. The accepted values are:
+
+        + downstream or +: the fusion partner is fused downstream of the breakpoint, i.e., at a coordinate higher than the breakpoint
+        + upstream or -: the fusion partner is fused at a coordinate lower than the breakpoint
+    
+        Example:
+
+        ::
+
+          =========== =========== =========== ===========
+          5-prime     3-prime     orientation orientation
+          =========== =========== =========== ===========
+          1:54420491  6:9248349   +           -
+          20:46703288 20:46734546 -           +
+          17:61499820 20:45133874 +           +
+          3:190967119 7:77868317  -           -
+          =========== =========== =========== ===========
+
+
+      * In case of the Variant Call Format, the file must comply with the VCF specification for structural variants. In particular, Arriba requires that the SVTYPE field be present in the INFO column and specify one of the four values BND, DEL, DUP, INV. In addition, for all SVTYPEs other than BND, the END field must be present and specify the second breakpoint of the structural variant. Structural variants with single breakends are silently ignored.
+
+        Arriba checks if the orientation of the structural variant matches that of a fusion detected in the RNA-Seq data. If, for example, Arriba predicts the 5' end of a gene to be retained in a fusion, then a structural variant is expected to confirm this, or else the variant is not considered to be related.
+
+    NOTE: Arriba was designed for alignments from RNA-Seq data. It should not be run on WGS data directly. Many assumptions made by Arriba about the data (statistical models, blacklist, etc.) only apply to RNA-Seq data and are not valid for DNA-Seq data. For such data, a structural variant calling algorithm should be used and the results should be passed to Arriba.
+
+
+**OUTPUTS**
+
+See:  https://arriba.readthedocs.io/en/latest/output-files/
+
+  - fusions.tsv
+
+    The file fusions.tsv (as specified by the parameter -o) contains fusions which pass all of Arriba's filters. It should be highly enriched for true predictions. The predictions are listed from highest to lowest confidence. The following paragraphs describe the columns in detail:
+
+      * gene1 and gene2 : gene1 contains the gene which makes up the 5' end of the transcript and gene2 the gene which makes up the 3' end. The order is predicted on the basis of the strands that the supporting reads map to, how the reads are oriented, and splice patterns. Both columns may contain the same gene, if the event is intragenic. If a breakpoint is in an intergenic region, Arriba lists the closest genes upstream and downstream from the breakpoint, separated by a comma. The numbers in parentheses after the closest genes state the distance to the genes. If no genes are annotated for a contig (e.g., for viral genomes), the column contains a dot (.).
+
+      * strand1(gene/fusion) and strand2(gene/fusion) : Each of these columns contains two values seperated by a slash. The strand before the slash reflects the strand of the gene according to the gene annotation supplied to Arriba via the parameter -g. If the breakpoint is in an intergenic region, the value is .. The value after the slash reflects the strand that is transcribed. This does not necessarily match the strand of the gene, namely when the sense strand of a gene serves as the template for transcription. Occassionally, the strand that is transcribed cannot be predicted reliably. In this case, Arriba indicates the lack of information as a dot (.). Arriba uses splice-patterns of the alignments to assign a read to the appropriate originating gene. If a strand-specific library was used, Arriba also evaluates the strandedness in ambiguous situations, for example, when none of the supporting reads overlaps a splice-site.
+
+      * breakpoint1 and breakpoint2 : The columns contain the coordinates of the breakpoints in gene1 and gene2, respectively. If an event is not supported by any split reads but only by discordant mates, the coordinates given here are those of the discordant mates which are closest to the true but unknown breakpoint.
+
+      * site1 and site2 : These columns add information about the location of the breakpoints. Possible values are: 5' UTR, 3' UTR, UTR (overlapping with a 5' UTR as well as a 3' UTR), CDS (coding sequence), exon, intron, and intergenic. The keyword exon is used for non-coding genes or for ambiguous situations where the breakpoint overlaps with both a coding exon and a UTR. If the breakpoint coincides with an exon boundary, the additional keyword splice-site is appended.
+
+      * type : Based on the orientation of the supporting reads and the coordinates of breakpoints, the type of event can be inferred. Possible values are: translocation (between different chromosomes), duplication, inversion, and deletion. If genes are fused head-to-head or tail-to-tail, this is indicated as 5'-5' or 3'-3' respectively. Genes fused in such an orientation cannot yield a chimeric protein, since one of the genes is transcribed from the wrong strand. This type of event is equivalent to the truncation of the genes. The following types of events are flagged with an extra keyword, because they are frequent types of false positives and/or it is not clear if they are somatic or germline variants: Deletions with a size in the range of introns (<400kb) are flagged as read-through, because there is a high chance that the fusion arises from read-through transcription rather than an underlying genomic deletion. Intragenic duplications with both breakpoints at splice-sites are flagged as non-canonical-splicing, because the supporting reads might originate from circular RNAs, which are very abundant even in normal tissue, but manifest as duplications in RNA-Seq data. Internal tandem duplications are flagged as ITD. It is not always clear whether the ITDs observable in RNA-Seq data are somatic or germline variants, because ITDs are abundant in the germline and germline variants cannot be filtered effectively due to lack of a normal control.
+
+      * split_reads1 and split_reads2 : The number of supporting split fragments with an anchor in gene1 or gene2, respectively, is given in these columns. The gene to which the longer segment of the split read aligns is defined as the anchor.
+
+      * discordant_mates : This column contains the number of pairs (fragments) of discordant mates (a.k.a. spanning reads or bridge reads) supporting the fusion.
+
+      * coverage1 and coverage2 : These two columns show the coverage near breakpoint1 and breakpoint2, respectively. The coverage is calculated as the number of fragments near the breakpoint on the side of the breakpoint that is retained in the fusion transcript. Note that the coverage calculation counts all fragments (even duplicates), whereas the columns split_reads1, split_reads2, and discordant_mates only count non-discarded reads. Fragments discarded due to being duplicates or other types of artifacts can be found in the column filters.
+
+      * confidence : Each prediction is assigned one of the confidences low, medium, or high. Several characteristics are taken into account, including: the number of supporting reads, the balance of split reads and discordant mates, the distance between the breakpoints, the type of event, whether the breakpoints are intragenic or not, and whether there are other events which corroborate the prediction, e.g. multiple isoforms or balanced translocations. See section Interpretation of results for further advice on judging the credibility of predictions.
+
+      * reading_frame : This column states whether the gene at the 3' end of the fusion is fused in-frame or out-of-frame. The value stop-codon indicates that there is a stop codon prior to the fusion junction, such that the 3' end is not translated, even if the reading frame is preserved across the junction. The prediction of the reading frame builds on the prediction of the peptide sequence. A dot (.) indicates that the peptide sequence cannot be predicted, for example, because the transcript sequence could not be determined or because the breakpoint of the 5' gene does not overlap a coding region.
+
+      * tags : When a user-defined list of tags is provided via the parameter -t, this column is populated with the provided tag whenever a fusion matches the coordinates specified for the respective tag. When multiple tags match, they are separated by a comma.
+
+      * retained_protein_domains : If Arriba is provided with protein domain annotation using the parameter -p, then this column is populated with protein domains retained in the fusion. Multiple protein domains are separated by a comma. Redundant protein domains are only listed once. After every domain the fraction that is retained is stated as a percentage value in parentheses. The protein domains of the 5' and 3' genes are separated by a pipe symbol (|).
+
+      * closest_genomic_breakpoint1 and closest_genomic_breakpoint2 : When a matched whole-genome sequencing sample is available, one can feed structural variant calls obtained therefrom into Arriba (see parameter -d). Arriba then considers this information during fusion calling, which improves the overall accuracy. These two columns contain the coordinates of the genomic breakpoints which are closest to the transcriptomic breakpoints given in the columns breakpoint1 and breakpoint2. The values in parentheses are the distances between transcriptomic and genomic breakpoints.
+
+      * gene_id1 and gene_id2 : These two columns state the identifiers of the fused genes as given in the gene_id attribute in the GTF file.
+
+      * transcript_id1 and transcript_id2 : For both fused genes, Arriba determines the best matching isoform that is transcribed as part of the fusion. The isoform is selected by how well its annotated exons match the splice pattern of the supporting reads of a fusion.
+
+      * direction1 and direction2 : These columns indicate the orientation of the fusion. A value of downstream means that the partner is fused downstream of the breakpoint, i.e. at a coordinate higher than the breakpoint. A value of upstream means the partner is fused at a coordinate lower than the breakpoint. When the prediction of the strands or of the 5' gene fails, this information gives insight into which parts of the fused genes are retained in the fusion.
+
+      * filters : This column lists the filters which removed one or more of the supporting reads. The section Internal algorithm describes all filters in detail. The number of filtered reads is given in parentheses after the name of the filter. The total number of supporting reads can be obtained by summing up the reads given in the columns split_reads1, split_reads2, discordant_mates, and filters. If a filter discarded the event as a whole (all reads), the number of filtered reads is not stated.
+
+      * fusion_transcript : This column contains the fusion transcript sequence. The sequence is assembled from the supporting reads of the most highly expressed transcript. It represents the transcript isoform that is most likely expressed according to the splice patterns of the supporting reads. The column contains a dot (.), when the sequence could not be predicted. This is the case when the strands or the 5' end of the transcript could not be predicted reliably. The breakpoint is represented as a pipe symbol (|). When non-template bases are inserted between the fused genes, these bases are represented as lowercase letters between two pipes. Reference mismatches (SNPs or SNVs) are indicated as lowercase letters, insertions as bases between brackets ([ and ]), deleted bases as one or more dashes (-), introns as three underscores (___), and ambiguous positions, such as positions with diverse reference mismatches, are represented as ?. Missing information due to insufficient coverage is denoted as an ellipsis (...). If the switch -I is used, then an attempt is made to fill missing information with the assembly sequence. A sequence stretch that was taken from the assembly sequence rather than the supporting reads is wrapped in parentheses (( and )). In addition, when -I is used, the sequence is trimmed to the boundaries of the fused transcripts. The coordinate of the fusion breakpoint relative to the start of the transcript can thus easily be inferred by counting the bases from the beginning of the fusion transcript to the breakpoint character (|). In case the full sequence could be constructed from the combined information of supporting reads and assembly sequence, the start of the fusion transcript is marked by a caret sign (^) and the end by a dollar sign ($). If the full sequence could not be constructed, these signs are missing.
+
+      * peptide_sequence : This column contains the fusion peptide sequence. The sequence is translated from the fusion transcript given in the column fusion_transcript and determines the reading frame of the fused genes according to the transcript isoforms given in the columns transcript_id1 and transcript_id2. Translation starts at the start of the assembled fusion transcript or when the start codon is encountered in the 5' gene. Translation ends when either the end of the assembled fusion transcript is reached or when a stop codon is encountered. If the fusion transcript contains an ellipsis (...), the sequence beyond the ellipsis is trimmed before translation, because the reading frame cannot be determined reliably. The column contains a dot (.), when the transcript sequence could not be predicted or when the precise breakpoints are unknown due to lack of split reads or when the fusion transcript does not overlap any coding exons in the 5' gene or when no start codon could be found in the 5' gene or when there is a stop codon prior to the fusion junction (in which case the column reading_frame contains the value stop-codon). The breakpoint is represented as a pipe symbol (|). If a codon spans the breakpoint, the amino acid is placed on the side of the breakpoint where two of the three bases reside. Codons resulting from non-template bases are flanked by two pipes. Amino acids are written as lowercase characters in the following situations: non-silent SNVs/SNPs, insertions, frameshifts, codons spanning the breakpoint, non-coding regions (introns/intergenic regions/UTRs), and non-template bases. Codons which cannot be translated to amino acids, such as those having invalid characters, are represented as ?.
+
+      * read_identifiers : This column contains the names of the supporting reads separated by commas.
+
+  - fusions.discarded.tsv
+
+    The file fusions.discarded.tsv (as specified by the parameter -O) contains all events that Arriba classified as an artifact or that are also observed in healthy tissue. It has the same format as the file fusions.tsv. 
+
+
+**VISUALIZATION**
+
+See: https://arriba.readthedocs.io/en/latest/visualization/
+
+  - fusions.pdf
+
+    A PDF file with one page for each predicted fusion. Each page depicts the fusion partners, their orientation, the retained exons in the fusion transcript, statistics about the number of supporting reads, and if the column fusion_transcript has a value an excerpt of the sequence around the breakpoint.
+
+
+**OPTIONS**
+
+  - Arriba: https://arriba.readthedocs.io/en/latest/command-line-options/#arriba
+  - Visualization: https://arriba.readthedocs.io/en/latest/command-line-options/#draw_fusionsr
+  - RNA STAR: https://arriba.readthedocs.io/en/latest/workflow/
+
+
+.. _Arriba: https://arriba.readthedocs.io/en/latest/
+.. _INPUTS: https://arriba.readthedocs.io/en/latest/input-files/
+.. _OUTPUTS: https://arriba.readthedocs.io/en/latest/output-files/
+.. _VISUALIZATION: https://arriba.readthedocs.io/en/latest/visualization/
+.. _OPTIONS: https://arriba.readthedocs.io/en/latest/command-line-options/
+
+    ]]></help>
+    <expand macro="citations" />
+</tool>
--- a/macros.xml	Mon Oct 11 01:47:22 2021 +0000
+++ b/macros.xml	Mon Oct 11 16:40:51 2021 +0000
@@ -1,7 +1,6 @@
 <macros>
     <token name="@TOOL_VERSION@">2.1.0</token>
     <token name="@VERSION_SUFFIX@">0</token>
-dd
     <xml name="requirements">
         <requirements>
         <requirement type="package" version="@TOOL_VERSION@">arriba</requirement>
@@ -17,4 +16,164 @@
     <xml name="version_command">
         <version_command>arriba -h | grep Version | sed 's/^.* //'</version_command>
     </xml>
+    <xml name="visualization_options">
+                <param name="cytobands" argument="--cytobands" type="data" format="tabular" optional="true" label="Cytobands"/>
+                <section name="options" expanded="false" title="Draw Fusion Options">
+                    <param argument="--transcriptSelection" type="select" optional="true" label="Transcript selection">
+                        <help>By default the transcript isoform with the highest coverage is drawn.
+                             Alternatively, the transcript isoform that is provided in the columns
+                             transcript_id1 and transcript_id2 in the given fusions file can be drawn.
+                             Selecting the isoform with the highest coverage usually produces nicer plots,
+                             in the sense that the coverage track is smooth and shows a visible increase in coverage after the fusion breakpoint.
+                             However, the isoform with the highest coverage may not be the one that is involved in the fusion.
+                             Often, genomic rearrangements lead to non-canonical isoforms being transcribed.
+                             For this reason, it can make sense to rely on the transcript selection provided by the columns transcript_id1/2,
+                             which reflect the actual isoforms involved in a fusion.
+\                            As a third option, the transcripts that are annotated as canonical can be drawn.
+                             Transcript isoforms tagged with appris_principal, appris_candidate, or CCDS are considered canonical.
+                        </help>
+                        <option value="coverage">coverage</option>
+                        <option value="provided">provided</option>
+                        <option value="canonical">canonical</option>
+                    </param>
+                    <param argument="--minConfidenceForCircosPlot" type="select" optional="true" label="Transcript selection">
+                        <help>The fusion of interest is drawn as a solid line in the circos plot.
+                              To give an impression of the overall degree of rearrangement,
+                              all other fusions are drawn as semi-transparent lines in the background.
+                              This option determines which other fusions should be included in the circos plot.
+                              Values specify the minimum confidence a fusion must have to be included.
+                              It usually makes no sense to include low-confidence fusions in circos plots,
+                              because they are abundant and unreliable, and would clutter up the circos plot.
+                              Default: medium
+                        </help>
+                        <option value="none">none - only the fusion of interest is drawn</option>
+                        <option value="low">low</option>
+                        <option value="medium">medium</option>
+                        <option value="high">high</option>
+                    </param>
+                    <param argument="--showIntergenicVicinity" type="integer" value="" min="0" optional="true" label="Intergenic Vicinity">
+                        <help>This option only applies to intergenic breakpoints.
+                              If it is set to a value greater than 0, then the script draws the genes
+                              which are no more than the given distance away from an intergenic breakpoint.
+                              Note that this option is incompatible with squishIntrons.
+                              Default: 0
+                        </help>
+                    </param>
+                    <param argument="--squishIntrons" type="select" optional="true" label="Squish introns">
+                        <help>Exons usually make up only a small fraction of a gene.
+                              They may be hard to see in the plot. i
+                              Since introns are in most situations of no interest in the context of gene fusions,
+                              this switch can be used to shrink the size of introns to a fixed, negligible size.
+                              It makes sense to disable this feature, if breakpoints in introns are of importance.
+                              Default: TRUE
+                        </help>
+                        <option value="TRUE">True</option>
+                        <option value="FALSE">False</option>
+                    </param>
+
+                    <param argument="--mergeDomainsOverlappingBy" type="float" value="" min="0." max="1.0" optional="true" label="Merge Domains Overlapping By">
+                        <help>Occasionally, domains are annotated redundantly.
+                              For example, tyrosine kinase domains are frequently annotated as
+                              Protein tyrosine kinase and Protein kinase domain.
+                              In order to simplify the visualization, such domains can be merged into one,
+                              given that they overlap by the given fraction.
+                              The description of the larger domain is used.
+                              Default: 0.9
+                        </help>
+                    </param>
+                    <param argument="--printExonLabels" type="select" optional="true" label="Print Exon Labels">
+                        <help>By default the number of an exon is printed inside each exon,
+                              which is taken from the attribute exon_number of the GTF annotation.
+                              When a gene has many exons, the boxes may be too narrow to contain the labels,
+                              resulting in unreadable exon labels. In these situations, i
+                              it may be better to turn off exon labels.
+                              Default: TRUE
+                        </help>
+                        <option value="TRUE">True</option>
+                        <option value="FALSE">False</option>
+                    </param>
+                    <param argument="--render3dEffect" type="select" optional="true" label="Render 3D effect">
+                        <help>Whether light and shadow should be rendered to give objects a 3D effect.
+                              Default: TRUE
+                        </help>
+                        <option value="TRUE">True</option>
+                        <option value="FALSE">False</option>
+                    </param>
+                    <param argument="--optimizeDomainColors" type="select" optional="true" label="Optimize Domain Colors">
+                        <help>By default, the script colorizes domains according to the colors
+                              specified in the file given in --annotation.
+                              This way, coloring of domains is consistent across all proteins.
+                              But since there are more distinct domains than colors,
+                              this can lead to different domains having the same color.
+                              If this option is set to TRUE, the colors are recomputed for each fusion separately.
+                              This ensures that the colors have the maximum distance for each individual fusion,
+                              but they are no longer consistent across different fusions.
+                              Default: FALSE
+                        </help>
+                        <option value="TRUE">True</option>
+                        <option value="FALSE">False</option>
+                    </param>
+                    <param argument="--color1" type="color" value="" optional="true"  label="Color of the 5' end of the fusion."/>
+                    <param argument="--color2" type="color" value="" optional="true"  label="Color of the 3' end of the fusion."/>
+                    <param argument="--pdfWidth" type="float" value="" min="1." optional="true" label="Width of PDF output file in inches"
+                           help="Default: 11.692"/>
+                    <param argument="--pdfHeight" type="float" value="" min="1." optional="true" label="Height of PDF output file in inches"
+                           help="Default: 8.267"/>
+                    <param argument="--fontSize" type="float" value="" min="0." optional="true" label="Scale the size of text"
+                           help="Default: 1.0"/>
+                </section>
+    </xml>
+    <token name="@DRAW_FUSIONS@">
+draw_fusions.R
+    --fusions='$fusions'
+    --alignments='Aligned.sortedByCoord.out.bam'
+    --annotation='$annotation'
+    --output=fusions.pdf
+    #if $visualization.cytobands
+    --cytobands='$visualization.cytobands'
+    #end if
+    #if $protein_domains
+    --proteinDomains='$protein_domains'
+    #end if
+    ## Visualization Options
+    #if $visualization.options.transcriptSelection
+        --transcriptSelection=$visualization.options.transcriptSelection
+    #end if
+    #if $visualization.options.minConfidenceForCircosPlot
+        --minConfidenceForCircosPlot=$visualization.options.minConfidenceForCircosPlot
+    #end if
+    #if $visualization.options.showIntergenicVicinity
+        --showIntergenicVicinity=$visualization.options.showIntergenicVicinity
+    #end if
+    #if $visualization.options.squishIntrons
+        --squishIntrons=$visualization.options.squishIntrons
+    #end if
+    #if $visualization.options.mergeDomainsOverlappingBy
+        --mergeDomainsOverlappingBy=$visualization.options.mergeDomainsOverlappingBy
+    #end if
+    #if $visualization.options.printExonLabels
+        --printExonLabels=$visualization.options.printExonLabels
+    #end if
+    #if $visualization.options.render3dEffect
+        --render3dEffect=$visualization.options.render3dEffect
+    #end if
+    #if $visualization.options.optimizeDomainColors
+        --optimizeDomainColors=$visualization.options.optimizeDomainColors
+    #end if
+    #if $visualization.options.color1
+        --color1=$visualization.options.color1
+    #end if
+    #if $visualization.options.color2
+        --color2=$visualization.options.color2
+    #end if
+    #if $visualization.options.pdfWidth
+        --pdfWidth=$visualization.options.pdfWidth
+    #end if
+    #if $visualization.options.pdfHeight
+        --pdfHeight=$visualization.options.pdfHeight
+    #end if
+    #if $visualization.options.fontSize
+        --fontSize=$visualization.options.fontSize
+    #end if
+</token>
 </macros>
--- a/test-data/fusions.tsv	Mon Oct 11 01:47:22 2021 +0000
+++ b/test-data/fusions.tsv	Mon Oct 11 16:40:51 2021 +0000
@@ -1,2 +1,2 @@
 #gene1	gene2	strand1(gene/fusion)	strand2(gene/fusion)	breakpoint1	breakpoint2	site1	site2	type	split_reads1	split_reads2	discordant_mates	coverage1	coverage2	confidence	reading_frame	tags	retained_protein_domains	closest_genomic_breakpoint1	closest_genomic_breakpoint2	gene_id1	gene_id2	transcript_id1	transcript_id2	direction1	direction2	filters	fusion_transcript	peptide_sequence	read_identifiers
-BCR	ABL1	+/+	+/+	22:23632600	9:133729451	CDS/splice-site	CDS/splice-site	translocation	4	7	0	4	12	high	in-frame	Mitelman	Bcr-Abl_oncoprotein_oligomerisation_domain(100%),C2_domain(100%),PH_domain(100%),RhoGEF_domain(100%)|F-actin_binding(100%),Protein_kinase_domain(100%),SH2_domain(100%),SH3_domain(100%),Variant_SH3_domain(100%)	.	.	ENSG00000186716.15	ENSG00000097007.13	ENST00000305877.8	ENST00000372348.2	downstream	upstream	.	AGCTTCTCCCTGACATCCGTGGAGCTGCAGATGCTGACCAACTCGTGTGTGAAACTCCAGACTGTCCACAGCATTCCGCTGACCATCAATAAGGAAG___ATGATGAGTCTCCGGGGCTCTATGGGTTTCTGAATGTCATCGTCCACTCAGCCACTGGATTTAAGCAGAGTTCAA|AAGCCCTTCAGCGGCCAGTAGCATCTGACTTTGAGCCTCAGGGTCTGAGTGAAGCCGCTCGTTGGAACTCCAAGGAAAACCTTCTCGCTGGACCCAGTGAAAATGACCCCAACCTTTTCGTTGCACTGTATGATTTTGTGGCCAGTGGAGATAACACTCTAAGCATAACTAAAG___GTGAAAAGCTCCGGG	SFSLTSVELQMLTNSCVKLQTVHSIPLTINKEDDESPGLYGFLNVIVHSATGFKQSS|kALQRPVASDFEPQGLSEAARWNSKENLLAGPSENDPNLFVALYDFVASGDNTLSITKGEKLR	BCR-ABL1-10,BCR-ABL1-2,BCR-ABL1-24,BCR-ABL1-28,BCR-ABL1-58,BCR-ABL1-60,BCR-ABL1-76,BCR-ABL1-12,BCR-ABL1-18,BCR-ABL1-4,BCR-ABL1-66
+BCR	ABL1	+/+	+/+	22:230999	9:275100	CDS/splice-site	CDS/splice-site	translocation	1	3	0	3	8	low	in-frame	.	Bcr-Abl_oncoprotein_oligomerisation_domain(100%),C2_domain(100%),RhoGEF_domain(100%)|F-actin_binding(100%),Protein_kinase_domain(100%),SH2_domain(100%),SH3_domain(100%)	.	.	ENSG00000186716	ENSG00000097007	ENST00000305877	ENST00000372348	downstream	upstream	.	AGCTTCTCCCTGACATCCGTGGAGCTGCAGATGCTGACCAACTCGTGTGTGAAACTCCAGACTGTCCACAGCATTCCGCTGACCATCAATAAGGAAG___ATGATGAGTCTCCGGGGCTCTATGGGTTTCTGAATGTCATCGTCCACTCAGCCACTGGATTTAAGCAGAGTTCAA|AAGCCCTTCAGCGGCCAGTAGCATCTGACTTTGAGCCTCAGGGTCTGAGTGAAGCCGCTCGTTGGAACTCCAAGGAAAACCTTCTCGCTGGACCCAGTGAAAATGACCCCAACCTTTTCGTTGCACTGTATGATTTTGTGGCCAGTGGAGATAACACTCTAAGCATAACTAAAG___GTGAAAAGCTCCGGG	SFSLTSVELQMLTNSCVKLQTVHSIPLTINKEDDESPGLYGFLNVIVHSATGFKQSS|kALQRPVASDFEPQGLSEAARWNSKENLLAGPSENDPNLFVALYDFVASGDNTLSITKGEKLR	BCR-ABL1-4,BCR-ABL1-28,BCR-ABL1-60,BCR-ABL1-76