CTAT-LR-fusion on Biowulf

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.

Documentation
Important Notes

Interactive job
Interactive jobs should be used for debugging, graphics, or applications that cannot be run as batch jobs.

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 ~]$

Batch job
Most jobs should be run as batch jobs.

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
Swarm of Jobs
A swarm of jobs is an easy way to submit a set of independent commands requiring identical resources.

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.swarm
where
-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