star-fusion流程需要调用star这个非常出名的转录组比对工具,然后是star-fusion流程内部的一个perl脚本去解析star比对过程中输出的Chimeric.out.junction文件。
其中star比对过程已经是超级简单了,但是perl脚本就比较麻烦,因为perl本身是上古语言,STAR-Fusion 这个perl脚本依赖的环境会难倒很多人,如下所示的代码架构:
代码语言:javascript复制$ head STAR-Fusion
#!/usr/bin/env perl
use strict;
use warnings;
use Carp;
use Cwd;
use FindBin;
use lib ("$FindBin::Bin/PerlLib");
use Pipeliner;
use File::Basename;
这个时候,使用conda来管理是一个比较简单的解决方案,安装自己的conda,每个用户独立操作,安装方法代码如下:
代码语言:javascript复制# 首先下载文件,20M/S的话需要几秒钟即可
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
# 接下来使用bash命令来运行我们下载的文件,记得是一路yes下去
bash Miniconda3-latest-Linux-x86_64.sh
# 安装成功后需要更新系统环境变量文件
source ~/.bashrc
使用安装好的conda来 安装软件的代码如下所示:
代码语言:javascript复制# trim,star 两个软件即可
conda create -n starFusion
conda activate starFusion
conda install -c bioconda trim-galore
conda install -c bioconda star-fusion
可以看到目前两个软件版本是:
代码语言:javascript复制STAR --version
2.7.10a
STAR-Fusion --version
STAR-Fusion version: 1.6.0
perl --version
This is perl 5, version 26, subversion 2 (v5.26.2) built for x86_64-linux-thread-multi
然后运行star-fusion流程需要需要下载配套数据库:
代码语言:javascript复制 nohup wget https://data.broadinstitute.org/Trinity/CTAT_RESOURCE_LIB/__genome_libs_StarFv1.10/GRCh38_gencode_v37_CTAT_lib_Mar012021.plug-n-play.tar.gz &
# 这个文件有点大,
# 32G 3月 6 2021 GRCh38_gencode_v37_CTAT_lib_Mar012021.plug-n-play.tar.gz
有了软件和配套数据库,运行star-fusion流程就很容易了。
STAR的比对过程非常顺利
每个样品的比对日志如下所示:
代码语言:javascript复制 STAR version: 2.7.10a compiled: 2022-01-14
Jan 31 11:56:48 ..... started STAR run
Jan 31 11:56:48 ..... loading genome
Jan 31 11:57:58 ..... started 1st pass mapping
Jan 31 12:10:13 ..... finished 1st pass mapping
Jan 31 12:10:14 ..... inserting junctions into the genome indices
Jan 31 12:12:12 ..... started mapping
Jan 31 12:26:04 ..... finished mapping
Jan 31 12:26:07 ..... finished successfully
队列里面的所有样品都有bam文件输出, 如下所示
代码语言:javascript复制 ls -lh */Aligned.out.bam|cut -d" " -f 5- |head
2.3G 1月 31 12:26 K001391N_HLMGGDSXY-L2_outdir/Aligned.out.bam
2.7G 1月 31 12:32 K001392N_HLMGGDSXY-L2_outdir/Aligned.out.bam
2.2G 1月 31 12:24 K001394N_HLMGGDSXY-L2_outdir/Aligned.out.bam
18G 1月 31 15:09 K001450T_HLMGGDSXY-L4_outdir/Aligned.out.bam
17G 1月 31 14:56 K001451T_HLMGGDSXY-L4_outdir/Aligned.out.bam
11G 1月 31 14:20 K002029T_HJWC7DSXY-L2_outdir/Aligned.out.bam
8.8G 1月 31 14:13 K002380T_HLWKVDSXY-L4_outdir/Aligned.out.bam
8.8G 1月 31 13:55 K003021N_HLW7YDSXY-L4_outdir/Aligned.out.bam
26G 1月 31 19:11 K003038T_HLW7YDSXY-L4_outdir/Aligned.out.bam
11G 1月 31 16:50 K003450N_HLWHCDSXY-L3_outdir/Aligned.out.bam
而且每个样品也有Chimeric.out.junction文件输出,如下所示:
代码语言:javascript复制ls -lh */Chimeric.out.junction |cut -d" " -f 5- |head
78M 1月 31 12:26 K001391N_HLMGGDSXY-L2_outdir/Chimeric.out.junction
106M 1月 31 12:32 K001392N_HLMGGDSXY-L2_outdir/Chimeric.out.junction
68M 1月 31 12:24 K001394N_HLMGGDSXY-L2_outdir/Chimeric.out.junction
270M 1月 31 15:09 K001450T_HLMGGDSXY-L4_outdir/Chimeric.out.junction
342M 1月 31 14:56 K001451T_HLMGGDSXY-L4_outdir/Chimeric.out.junction
151M 1月 31 14:20 K002029T_HJWC7DSXY-L2_outdir/Chimeric.out.junction
157M 1月 31 14:13 K002380T_HLWKVDSXY-L4_outdir/Chimeric.out.junction
191M 1月 31 13:55 K003021N_HLW7YDSXY-L4_outdir/Chimeric.out.junction
378M 1月 31 19:11 K003038T_HLW7YDSXY-L4_outdir/Chimeric.out.junction
378M 1月 31 16:50 K003450N_HLWHCDSXY-L3_outdir/Chimeric.out.junction
最耗时的步骤已经是过去了,理论上这个时候star-fusion流程内部的一个perl脚本去解析star比对过程中输出的Chimeric.out.junction文件就可以完成融合基因的搜索啦。
但是STAR-Fusion流程就报错
我看了看这个运行日志,以及对应的报错信息:
代码语言:javascript复制Running CMD: /home/data/fusion/miniconda3/envs/starFusion/lib/STAR-Fusion/util/STAR-Fusion.map_chimeric_reads_to_genes --genome_lib_dir /home/fusion/GRCh38_gencode_v37_CTAT_lib_Mar012021.plug-n-play/ctat_genome_lib_build_dir -J Chimeric.out.junction > /home/data/fusion/fusion_results/K001391N_HLMGGDSXY-L2_outdir/star-fusion.preliminary/star-fusion.junction_breakpts_to_genes.txt
-building interval tree based on /home/fusion/GRCh38_gencode_v37_CTAT_lib_Mar012021.plug-n-play/ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu
-done building interval tree (0.07 min).
-parsing fusion evidence: Chimeric.out.junction
-mapping reads to genes
# 接下来开始报错
Argument "brkpt_donorA" isn't numeric in preincrement ( ) at /home/data/fusion/miniconda3/envs/starFusion/lib/STAR-Fusion/util/STAR-Fusion.map_chimeric_reads_to_genes line 379, <$fh> line 1.
Can't use an undefined value as an ARRAY reference at /home/data/fusion/miniconda3/envs/starFusion/lib/STAR-Fusion/util/STAR-Fusion.map_chimeric_reads_to_genes line 511, <$fh> line 1.
确实是这个perl脚本报错了,简单谷歌这个关键词,就可以解决。
需要 重新下载star-fusion-1.9.0软件
在官网可以看到,https://anaconda.org/bioconda/star-fusion,确实是 linux-64 v1.6.0 ,所以conda默认是没办法下载star-fusion-1.9.0软件 。
我看了看 star-fusion 的版本还是蛮多的 :
代码语言:javascript复制conda search star-fusion -c bioconda
Loading channels: done
# Name Version Build Channel
star-fusion 0.4.0 pl5.18.2_0 bioconda
star-fusion 0.5.3 pl5.18.2_0 bioconda
star-fusion 0.5.3 pl5.22.0_0 bioconda
star-fusion 0.5.4 1 bioconda
star-fusion 1.6.0 1 bioconda
star-fusion 1.7.0 0 bioconda
star-fusion 1.9.1 hdfd78af_1 bioconda
star-fusion 1.10.0 hdfd78af_0 bioconda
star-fusion 1.10.0 hdfd78af_1 bioconda
担心这个软件跟其它软件冲突,我给它一个独立的环境:
代码语言:javascript复制conda create -n starFusion1.9.0
conda activate starFusion1.9.0
conda install -c bioconda/label/cf201901 star-fusion=1.9.0
conda search star-fusion -c bioconda
conda install -c conda-forge mamba
mamba search star-fusion -c bioconda
mamba install -c conda-forge perl-carp-assert
mamba search *python_abi* -c conda-forge
mamba install -c conda-forge python_abi=2.7
mamba install -c bioconda star-fusion=1.9.0
git clone --recursive https://github.com/STAR-Fusion/STAR-Fusion.git
但是我尝试了很多方法,都没办法成功安装独立的star-fusion-1.9.0软件 ,还是蛮奇怪的。
但是我git下载了它源代码,发现其压缩包里面的STAR-Fusion命令本来就是可以直接使用的,无需conda来管理了。可以看到, 其实1.9的star-fusion的这个STAR-Fusion.map_chimeric_reads_to_genes 脚本内容跟前面conda自己配置的1.6版本内容不一样:
代码语言:javascript复制 531 /home/data/fusion/STAR-Fusion-master/util/STAR-Fusion.map_chimeric_reads_to_genes
586 /home/data/fusion/miniconda3/envs/starFusion/lib/STAR-Fusion/util/STAR-Fusion.map_chimeric_reads_to_genes
主要是因为它们虽然是都解析的是Chimeric.out.junction文件,但是star这个比对软件本身就修改了Chimeric.out.junction文件的格式,导致后面的解析Chimeric.out.junction文件的perl脚本也不得不与时俱进。
如果你确实觉得我的教程对你的科研课题有帮助,让你茅塞顿开,或者说你的课题大量使用我的技能,烦请日后在发表自己的成果的时候,加上一个简短的致谢,如下所示:
代码语言:javascript复制We thank Dr.Jianming Zeng(University of Macau), and all the members of his bioinformatics team, biotrainee, for generously sharing their experience and codes.
十年后我环游世界各地的高校以及科研院所(当然包括中国大陆)的时候,如果有这样的情谊,我会优先见你。