结构变异(Structural Variation)检测方法探析

举报
benymorre 发表于 2019/01/24 18:18:16 2019/01/24
【摘要】 结构变异一般是指染色体重组,在基因组上距离很远的两个基因发生融合,形成了新的编码序列。这样的结构变异往往会导致比较严重的疾病,所以通过NGS的方法检测结构变异对于医学研究有很大用途。最常见的思路是,对于已知的基因之间的融合,比如geneA和geneB, 分别进行比对,然后对生成的sam文件进行解析。这里选用NextGenMap进行比对,方法如下:ngm -r gene_A.fa -1 ${f...

结构变异一般是指染色体重组,在基因组上距离很远的两个基因发生融合,形成了新的编码序列。


这样的结构变异往往会导致比较严重的疾病,所以通过NGS的方法检测结构变异对于医学研究有很大用途。


最常见的思路是,对于已知的基因之间的融合,比如geneA和geneB, 分别进行比对,然后对生成的sam文件进行解析。

这里选用NextGenMap进行比对,方法如下:

ngm -r gene_A.fa -1 ${fq1} -2 ${fq2} -o geneA_region.sam -t 8
ngm -r gene_B.fa -1 ${fq1} -2 ${fq2} -o geneB_region.sam -t 8


-- 采用Python形式参数优化SAM解析过程


python中形式参数可以使用户解析多个变量,示例如下:

def p(*args):
    for i in args:
        print(i)

p(1,2,3)


这里要解析的是对geneA和geneB 比对产生的SAM,然后找出同时比对到两个基因上的reads, 根据reads split的位置判断是否是融合基因。

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

from collections import defaultdict
geneA_sam= './geneA_region.sam'
geneB_sam= './geneB_region.sam'

def getReadsN(*files):
    d = defaultdict(dict)
    for file1 in files:
        opFile = open(file1, 'r')
        for line in opFile:
            if not line.startswith('@'):
                xl = line.rstrip().split('\t')
                if xl[5] != '*':
                    chrName = xl[2]
                    d[xl[0]][chrName] = d[xl[0]].get(chrName, 0) + 1
    
        opFile.close()
    return d
    
testD  = getReadsN(geneA_sam, geneB_sam)

geneNames= ['X1' , 
            'C1' ,
            ]
outFile = open('Reads_ID_stats.txt', 'w')
outFile.write('Reads-ID\t' + '\t'.join(geneNames) + '\n')
for i in testD:
    if len(testD[i]) >  1:
        outFile.write(i)
        for j in geneNames:
            
            outFile.write( '\t{0}'.format( testD[i].get(j, 0) ) )
        outFile.write('\n')
outFile.close()


在结果中 会列出比对到两个基因上的Reads ID,后续的分析需要去找出比对的CIGAR上的位置


比如,Reads1 在geneA的比对信息是39M111S, 在geneB的比对信息是110M40S, 那么Reads1 很可能就代表geneA和geneB的一个融合位置。

M的含义是Match, S的含义是SoftClipping


CIGAR的含义在SAM文件的定义中有解释,参考 https://samtools.github.io/hts-specs/SAMv1.pdf

如下:


Op   BAM    Description    Consumes query    Consumes reference

M   0   alignment match (can be a sequence match or mismatch) yes yes
I      1   insertion to the reference yes no
D    2   deletion from the reference no yes
N    3   skipped region from the reference no yes
S    4   soft clipping (clipped sequences present in SEQ) yes no
H    5   hard clipping (clipped sequences NOT present in SEQ) no no
P    6   padding (silent deletion from padded reference) no no
=    7   sequence match yes yes
X    8   sequence mismatch yes yes

 

比较常见的就是M, S, I, D,其中I代表Insertion, D代表Deletion


目前检测SV已有很多发表的软件,比如novoBreak, 在 ICGC-TCGA DREAM 8.5 Somatic Mutation Calling Challenge 上得过奖。

还有GROC-SVs, 适用于10X genomics产生的长片段Reads。


以下是结构变异的示意图

结构1.png


Figure 1 表示的是常见的Break End 类型的结构变异

Figure 2 表示的是Chr2 的 321682 position与Chr13 的 123456 position 之间产生了有插入序列的结构变异,这种结果用本文提供的结构变异检测思路就难以检出,需要设计更好的算法。


在记录变异的VCF文件格式中,已有各种类型的SV的记录方法, 参考  http://samtools.github.io/hts-specs/VCFv4.2.pdf

 https://support.10xgenomics.com/genome-exome/software/pipelines/latest/output/sv-vcf

 

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。