染色体SV (Structural Variation)变异包含Insertion、Deletion、Duplication、Inversions、Translocation等5大类结构变异,其中最后一种变异类型要复杂一些,又可以细分染色体内、染色体间、是否反转等情况。目前分析SV的软件,在鉴定结构变异的底层逻辑是借助reads的比对情况,如pair-reads的比对方向是否一致,split-reads的比对结果。那么,首先要知道reads比对到参考基因组后会有哪些情况,如下图,展示了illumina平台pair-end测序的reads比对后,reads的方向情况:
split-reads可以理解为一条reads比对到两个不同的地方,或者只有一边的部分能比对上。软件借助这些信息,识别潜在的SV断点并确定突变的类型。各种变异类型与reads比对情况之间的关系如下图所示:
目前做SV分析的软件有很多,这里介绍的是Manta,该软件由illumina开发,根据文献的结果来看软件的效果不错。下图展示了软件包括的全部过程:
虽然流程图看着挺复杂,但软件使用起来确实挺简单的,不过,像Manta这样第一步先生成运行脚本的软件确实很少见。
configManta.py --bam normal_bqsr.bam --tumorBam tumor_bqsr.bam --referenceFasta genome.fasta --runDir sv_result
./manta/sv_result/runWorkflow.py -m local -j 6 -g 100
软件生成的运行脚本文件名字统一都是runWorkflow.py,多个样本时一定指定到不同的文件夹里,可以用样本名作为结果目录。如果后续想要在IGV展示结果,可以在生成脚本的时候添加--generateEvidenceBam
参数生成变异的bam文件。结果文件夹会生成好几个文件,每个文件的解释如下:
Manta虽然可以检测Insertions、Deletions、、Tandem Duplications、Inversions、Interchromosomal Translocations五种类型,但在结果文件里面却只有四种,可用下面的命令快速查看:
zcat somaticSV.vcf.gz | grep -v "^#" | grep -w "PASS" | cut -f 3 | tr ":" "\t" | cut -f 1 | sort | uniq -c
# 结果如下
350 MantaBND
40 MantaDEL
25 MantaDUP
45 MantaINS
另外三种都可以根据名称对应到变异类型,BND (breakend)看着就有点懵了。软件默认结果里将Inversions、Interchromosomal Translocations变异的结果都以断点的形式记录,例如一个Inversions由四个断点的记录组成:
chr1 17124941 MantaBND:1445:0:1:1:3:0:0 T [chr1:234919886[T 999 PASS SVTYPE=BND;MATEID=MantaBND:1445:0:1:1:3:0:1;CIPOS=0,1;HOMLEN=1;HOMSEQ=T;INV5;EVENT=MantaBND:1445:0:1:0:0:0:0;JUNCTION_QUAL=254;BND_DEPTH=107;MATE_BND_DEPTH=100 GT:FT:GQ:PL:PR:SR 0/1:PASS:999:999,0,999:65,8:15,51
chr1 17124948 MantaBND:1445:0:1:0:0:0:0 T T]chr1:234919824] 999 PASS SVTYPE=BND;MATEID=MantaBND:1445:0:1:0:0:0:1;INV3;EVENT=MantaBND:1445:0:1:0:0:0:0;JUNCTION_QUAL=999;BND_DEPTH=109;MATE_BND_DEPTH=83 GT:FT:GQ:PL:PR:SR 0/1:PASS:999:999,0,999:60,2:0,46
chr1 234919824 MantaBND:1445:0:1:0:0:0:1 G G]chr1:17124948] 999 PASS SVTYPE=BND;MATEID=MantaBND:1445:0:1:0:0:0:0;INV3;EVENT=MantaBND:1445:0:1:0:0:0:0;JUNCTION_QUAL=999;BND_DEPTH=83;MATE_BND_DEPTH=109 GT:FT:GQ:PL:PR:SR 0/1:PASS:999:999,0,999:60,2:0,46
chr1 234919885 MantaBND:1445:0:1:1:3:0:1 A [chr1:17124942[A 999 PASS SVTYPE=BND;MATEID=MantaBND:1445:0:1:1:3:0:0;CIPOS=0,1;HOMLEN=1;HOMSEQ=A;INV5;EVENT=MantaBND:1445:0:1:0:0:0:0;JUNCTION_QUAL=254;BND_DEPTH=100;MATE_BND_DEPTH=107 GT:FT:GQ:PL:PR:SR 0/1:PASS:999:999,0,999:65,8:15,51
可以利用软件提供的脚本convertInversion.py,将原始结果的BND转换一下:
convertInversion.py ~/software/samtools genome.fasta somaticSV.vcf.gz | gzip -c >somaticSV.convert.vcf.gz
上面展示的Inversions结果变成了下面所示的两条记录,所以,如果要统计Inversions的变异数,这两个记录只能算作一个:
chr1 17124940 MantaINV:1445:0:1:1:3:0 C <INV> 999 PASS END=234919885;SVTYPE=INV;SVLEN=217794945;CIPOS=0,1;CIEND=-1,0;HOMLEN=1;HOMSEQ=T;EVENT=MantaINV:1445:0:1:0:0:0;JUNCTION_QUAL=254;INV5 GT:FT:GQ:PL:PR:SR 0/1:PASS:999:999,0,999:65,8:15,51
chr1 17124948 MantaINV:1445:0:1:0:0:0 T <INV> 999 PASS END=234919824;SVTYPE=INV;SVLEN=217794876;EVENT=MantaINV:1445:0:1:0:0:0;JUNCTION_QUAL=999;INV3 GT:FT:GQ:PL:PR:SR 0/1:PASS:999:999,0,999:60,2:0,46
有意思的是,Interchromosomal Translocations的结果转换后还是以BND的形式保存。不过,这里面分成染色体内和染色体间易位,具体看断点是否在发生在不同染色体间。第三列为断点的ID,如MantaINV:1445:0:1:1:3:0
,该值是唯一的,记录了断点的情况,具体每个部分的含义如下:
从图上的解释来看,LocusID为SV在断点图上的标识,Node1ID、Node2ID分别标识了SV在断点图上的节点,由此可以推测这三个标识相同应该表示同一个变异,从上面的结果也同样可以看出。如果是这样的话,那么就可以据此统计易位的结果了。
除此之外,结果中的ALT表示方法也不容易理解,BND为断点的两个记录,CHROM、POS中为一个断点位置,在ALT中为另外一个断点位置。[...[...
和...]...]
分别表示易位序列发生在mate断点位置的5‘端还是3'端。
以上解释不确定是否正确,如果发现有问题的话可以告知一下。原以为SV很好分析,没成想看到Manta结果的时候整蒙圈了,生成的结果居然有点像半成品,想要成熟的结果还需要再深加工一下。更多信息可以阅读软件文档:https://github.com/Illumina/manta/blob/master/docs/userGuide/README.md