CTAT-LR-fusion is an open-source tool for detecting fusion transcripts in long-read RNA sequencing data, including PacBio Iso-Seq and Oxford Nanopore data. It identifies reads that support gene fusions and can use matching Illumina RNA-seq data to provide additional evidence and quantify detected fusions. It supports both bulk and single-cell long-read transcriptome analysis and uses CTAT reference resources containing genome and annotation information.
Allocate an interactive session and run the program.
In the sample session below we will create a writable local view of the fdb library using symbolic links (user input in bold). Then we will build the files, including ref_annot.gtf, ref_genome.fa, and the minimap2 index, using ctat-LR-fusion. Note that the --prep_reference option creates the minimap2 index and splice-site BED file before continuing with the analysis. Future runs can omit that option.
[user@biowulf]$ sinteractive --mem=20g --cpus-per-task=4
salloc.exe: Pending job allocation 46116226
salloc.exe: job 46116226 queued and waiting for resources
salloc.exe: job 46116226 has been allocated resources
salloc.exe: Granted job allocation 46116226
salloc.exe: Waiting for resource configuration
salloc.exe: Nodes cn3144 are ready for job
[user@cn3144 ~]$ module load ctat_lr_fusion
[+] Loading ctat_lr_fusion 1.1.0 on cn3144
[+] Loading singularity 4.3.7 on cn3144
[user@cn3144 ~]$ cd /data/$USER
[user@cn3144 ~]$ mkdir CTAT-LR-FUSION_TEST
[user@cn3144 ~]$ cd CTAT-LR-FUSION_TEST
[user@cn3144 ~]$ wget https://raw.githubusercontent.com/TrinityCTAT/CTAT-LR-fusion/main/testing/transcripts.fa
--2026-08-19 10:17:54-- https://raw.githubusercontent.com/TrinityCTAT/CTAT-LR-fusion/main/testing/transcripts.fa
Resolving dtn26-e0 (dtn26-e0)... 10.1.200.80
Connecting to dtn26-e0 (dtn26-e0)|10.1.200.80|:3128... connected.
Proxy request sent, awaiting response... 200 OK
Length: 13597 (13K) [text/plain]
Saving to: ‘transcripts.fa’
transcripts.fa 100%[============================================>] 13.28K --.-KB/s in 0s
2026-08-19 10:17:54 (159 MB/s) - ‘transcripts.fa’ saved [13597/13597]
[user@cn3144 ~]$ ls
transcripts.fa
[user@cn3144 ~]$ mkdir ctat_genome_lib_build_dir
[user@cn3144 ~]$ cd ctat_genome_lib_build_dir
[user@cn3144 ~]$ ln -s /fdb/CTAT/GRCh38_gencode_v33_CTAT_lib_Apr062020.plug-n-play/ctat_genome_lib_build_dir/* .
[user@cn3144 ~]$ ls ctat_genome_lib_build_dir/
AnnotFilterRule.pm pfam_domains.dbm ref_annot.cdsplus.fa.idx ref_genome.fa trans.blast.align_coords.align_coords.dat
blast_pairs.dat.gz PFAM.domtblout.dat.gz ref_annot.gtf ref_genome.fa.fai trans.blast.align_coords.align_coords.dbm
blast_pairs.idx ref_annot.cdna.fa ref_annot.gtf.gene_spans ref_genome.fa.nhr trans.blast.dat.gz
__chkpts ref_annot.cdna.fa.idx ref_annot.gtf.mini.sortu ref_genome.fa.nin
fusion_annot_lib.gz ref_annot.cds ref_annot.pep ref_genome.fa.nsq
fusion_annot_lib.idx ref_annot.cdsplus.fa ref_annot.prot_info.dbm ref_genome.fa.star.idx
[user@cn3144 ~]$ ctat-LR-fusion \
-T transcripts.fa \
--genome_lib_dir ctat_genome_lib_build_dir \
--prep_reference \
--CPU 4 \
-o ctat_LR_fusion_outdir
* [Wed Aug 19 10:28:24 2026] Running CMD: /usr/local/bin/ctat-minimap2/ctat-minimap2 -d CTAT-LR-FUSION_TEST/ctat_genome_lib_build_dir/ref_genome.fa.mm2 CTAT-LR-FUSION_TEST/ctat_genome_lib_build_dir/ref_genome.fa
[M::mm_idx_gen::32.948*1.49] collected minimizers
[M::mm_idx_gen::42.409*1.82] sorted minimizers
[M::main::45.912*1.76] loaded/built the index for 194 target sequence(s)
[M::mm_idx_stat] kmer size: 15; skip: 10; is_hpc: 0; #seq: 194
[M::mm_idx_stat::46.537*1.75] distinct minimizers: 100159079 (38.75% are singletons); average occurrences: 5.545; average spacing: 5.581; total length: 3099750718
[M::main] Version: 2.28-r1221-dirty
[M::main] CMD: /usr/local/bin/ctat-minimap2/ctat-minimap2 -d CTAT-LR-FUSION_TEST/ctat_genome_lib_build_dir/ref_genome.fa.mm2 CTAT-LR-FUSION_TEST/ctat_genome_lib_build_dir/ref_genome.fa
[M::main] Real time: 50.834 sec; CPU: 82.326 sec; Peak RSS: 11.376 GB
[...]
* [Wed Aug 19 10:29:54 2026] Running CMD: cp CTAT-LR-FUSION_TEST/ctat_LR_fusion_outdir/fusion_intermediates_dir/LR-FI.mm2.fusion_transcripts.breakpoint_info.tsv.w_LR_FFPM.wAnnot.post_blast_and_promiscuity_filter.filt_by_min_reads.filt_by_min_dom_iso_frac CTAT-LR-FUSION_TEST/ctat_LR_fusion_outdir/ctat-LR-fusion.fusion_predictions.tsv
* [Wed Aug 19 10:29:54 2026] Running CMD: /usr/local/bin/FusionInspector/util/column_exclusions.pl CTAT-LR-FUSION_TEST/ctat_LR_fusion_outdir/ctat-LR-fusion.fusion_predictions.tsv LR_accessions,JunctionReads,SpanningFrags,CounterFusionLeftReads,CounterFusionRightReads > CTAT-LR-FUSION_TEST/ctat_LR_fusion_outdir/ctat-LR-fusion.fusion_predictions.abridged.tsv
Done. See fusion predictions at: CTAT-LR-FUSION_TEST/ctat_LR_fusion_outdir/ctat-LR-fusion.fusion_predictions.tsv
[user@cn3144 ~]$
[user@cn3144 ~]$ exit
salloc.exe: Relinquishing job allocation 46116226
[user@biowulf ~]$
Create a batch input file (e.g. ctat_lr_fusion.sh). For example:
#!/bin/bash
module load ctat_lr_fusion
cd /data/$USER/CTAT-LR-FUSION_TEST
ctat-LR-fusion \
-T transcripts.fa \
--genome_lib_dir ctat_genome_lib_build_dir \
--CPU 4 \
-o ctat_LR_fusion_outdir
Submit this job using the Slurm sbatch command.
sbatch [--cpus-per-task=#] [--mem=#] ctat_lr_fusion.sh
Create a swarmfile (e.g. ctat_lr_fusion.swarm). For example:
ctat-LR-fusion \ -T /data/$USER/CTAT-LR-FUSION_TEST/transcripts1.fa \ --genome_lib_dir /data/$USER/CTAT-LR-FUSION_TEST/ctat_genome_lib_build_dir \ --CPU 4 \ -o /data/$USER/CTAT-LR-FUSION_TEST/output1 ctat-LR-fusion \ -T /data/$USER/CTAT-LR-FUSION_TEST/transcripts2.fa \ --genome_lib_dir /data/$USER/CTAT-LR-FUSION_TEST/ctat_genome_lib_build_dir \ --CPU 4 \ -o /data/$USER/CTAT-LR-FUSION_TEST/output2 ctat-LR-fusion \ -T /data/$USER/CTAT-LR-FUSION_TEST/transcripts3.fa \ --genome_lib_dir /data/$USER/CTAT-LR-FUSION_TEST/ctat_genome_lib_build_dir \ --CPU 4 \ -o /data/$USER/CTAT-LR-FUSION_TEST/output3
Submit this job using the swarm command.
swarm [-g #] [-t #] --module ctat_lr_fusion ctat_lr_fusion.swarmwhere
| -g # | Number of Gigabytes of memory required for each process (1 line in the swarm command file) |
| -t # | Number of threads/CPUs required for each process (1 line in the swarm command file). |
| --module ctat_lr_fusion | Loads the ctat_lr_fusion module for each subjob in the swarm |