通过VCF文件制作定制化的参考基因组

前言

最近做的项目要对reference genome基于突变进行一些modify,制作personalized genome或者说是psuedo-genome伪基因组。其实就是把某个测序样本call出来的SNP && indel替换掉参考基因组对应位置的碱基。
自己可以编写脚本修改,使用Perl中的substr来进行单个位点修改,把坐标按照从后往前的顺序,而不是从前到后。
其实有蛮多工具可以做这个的,在这里安利一下,大家可以使用体验一下。

GATK FastaAlternateReferenceMaker

GATK作为通用的变异检测的软件,其中有很多有用的工具,这里介绍一下FastaAlternateReferenceMaker: Create an alternative reference by combining a fasta with a vcf.

准备好检测的VCF文件,参考基因组FASTA文件,使用如下命令:

$ /gatk_software_path/gatk FastaAlternateReferenceMaker \
   -R /ref_genome_path/reference-genome.fasta 
   -O /ref_genome_path/psuedo-genome.fa \
   -L input.intervals \
   -V /variant_path/input.vcf \

   [--snp-mask mask.vcf]

这里的-L参数可以多单个基因或者基因组一段区域进行替换。
--snp-mask参数,当构建时psuedo-genome.fa时,该VCF文件中的SNP用作掩码(在序列中插入N)。
运行结束,个人的参考基因组就构建好了,一般制作psuedo-genome.fa就是为了消除变异带来的影响,部分其他参数可以到gatk官网查阅。另外FastaAlternateReferenceMaker使用简单的indel,当VCF文件包含复杂的位点时(complex substitutions),会忽略。
PS:

If there are multiple variants that start at a site, it chooses one of them randomly.
When there are overlapping indels (but with different start positions) only the first will be chosen.

perEditor

perEditor用于分析phased SNPs/indels,意味着VCF文件中的GT0|1/1|1/1|2,而不是我们常见的0/1这种,明确知道变异是在母本还是父本染色体上,第一个是母本,第二个是父本,使用方式如下:

$ perEditor ref_genome.fa snps_indels.vcf allele indivicual personalized_genome.fa

$ perEditor chr1.fa variations.vcf mother 1 chr1_customized.fa

这里对参数进行一下解释:
allele两个选项mother|father,代表等位基因来自于哪一个亲本;
indivicual,整数,这个是因为有一些VCF文件中不止包含一个样本的突变信息,参数代表选择第几个样本的突变来进行创建personalized genome1代表第一个样本;

1

2

perEditor_ra,允许用户把染色体重排信息考虑到创建个性化参考基因组中,一样只服务于phased的数据,另外还需要把涉及染色体重排的染色体放在一个目录下:

$ ls chr*fa
chr1.fa  chr2.fa  chr3.fa  chr4.fa
$ perEditor_ra rearrangements.vcf chr_length.bed centromeres.bed individual allele
$ perEditor_ra rearrangements_t.vcf chr_length_t.bed centromeres_t.bed 1 father

这里的individualallele参数和perEditor是一样的含义;
rearrangements_t.vcf,染色体重排注释结果,vcf format version 4.1;
chr_length_t.bed,文件中包含基因组每一条染色体的长度,即核苷酸总数,格式如下:

chr1    200
chr2    104
chr3    154
chr4    102

centromeres_t.bed,文件中包含每条染色体的着丝粒位置的文件,着丝粒坐标用于确定新染色体的身份,当两条染色体由于重排而合并时,新染色体将按照着丝粒来源的名称来命名,继承两个着丝粒,其名称则包含两个亲本染色体的名称,文件格式如下:

chr1    50  60
chr2    15  20
chr3    20  30
chr4    80  90

bed文件和vcf文件位于同一个工作目录下,最终生成的新的染色体命名中添加了new

$ ls *new*fa
chr1_new.fa  chr2_new.fa  chr3_new.fa  chr4_new.fa
3

g2gtools

g2gtools通过将SNP和indels整合到参考基因组中来创建自定义基因组,提取感兴趣的区域(例如外显子或转录本),并在两个基因组之间转换文件(bam,gtf,bed)的坐标。 与其他liftover 工具不同,g2gtools不会丢弃掉落在indel区域上的alignments。 版本0.2可以创建个人二倍体基因组。 新版本仍然将个人基因组坐标上的二倍体比对转换回参考基因组,因此我们可以比较种群样本之间的比对。

安装

$ conda config --add channels r
$ conda config --add channels bioconda
$ conda create -n g2gtools python=2 jupyter ipykernel
$ source activate g2gtools
$ conda install -c kbchoi g2gtools

Usage

先激活virtual environment:

source activate g2gtools

创建自定义的基因组,需要下列信息:

${REF}         reference genome in fasta format
${STRAIN}      strain name (usually a column name in the vcf file)
${VCF_INDELS}  vcf file for indels
${VCF_SNPS}    vcf file for snps
${GTF}         gene annotation file in gtf format

下面是操作流程:

# 创建映射两个基因组之间的碱基的chain文件
g2gtools vcf2chain -f ${REF} -i ${VCF_INDELS} -s ${STRAIN} -o ${STRAIN}/REF-to-${STRAIN}.chain
# 把snp添补到ref genome上
g2gtools patch -i ${REF} -s ${STRAIN} -v ${VCF_SNPS} -o ${STRAIN}/${STRAIN}.patched.fa
# 将indels整合到snp添补后的基因组中
$ g2gtools transform -i ${STRAIN}/${STRAIN}.patched.fa -c ${STRAIN}/REF-to-${STRAIN}.chain -o ${STRAIN}/${STRAIN}.fa
# 针对新的定制基因组创建定制基因注释
$ g2gtools convert -c ${STRAIN}/REF-to-${STRAIN}.chain -i ${GTF} -f gtf -o ${STRAIN}/${STRAIN}.gtf
$ g2gtools gtf2db -i ${STRAIN}/${STRAIN}.gtf -o ${STRAIN}/${STRAIN}.gtf.db

vcf2diploid

vcf2diploid通过将phased的变异整合到参考基因组中,从vcf文件创建二倍体基因组。

Installation

git clone https://github.com/abyzovlab/vcf2diploid.git
cd vcf2diploid
make

Running

java -Xmx10g -jar vcf2diploid.jar -id sample_id -chr file1.fa file2.fa ... [-vcf file1.vcf file2.vcf ...] > logfile.txt
OPTIONS:
id    - (required) the ID of individual whose genome is being constructed (e.g., NA12878). The tool recognizes by this ID in the VCF file 
chr   - (required) FASTA file(s) of reference sequence(s) 
vcf   - (required) VCF4.0 file(s) containing variants from parents and the individual 
Xmx   - max memory allocation for JAVA. In this example, 10GB was allocated.
logfile.txt - stores the standard output produce from the run

bcftools consensus

Usage

About: Create consensus sequence by applying VCF variants to a reference fasta
       file. By default, the program will apply all ALT variants. Using the
       --sample (and, optionally, --haplotype) option will apply genotype
       (or haplotype) calls from FORMAT/GT. The program ignores allelic depth
       information, such as INFO/AD or FORMAT/AD.
Usage:   bcftools consensus [OPTIONS] <file.vcf>
Options:
    -c, --chain <file>         write a chain file for liftover
    -e, --exclude <expr>       exclude sites for which the expression is true (see man page for details)
    -f, --fasta-ref <file>     reference sequence in fasta format
    -H, --haplotype <which>    choose which allele to use from the FORMAT/GT field, note
                               the codes are case-insensitive:
                                   1: first allele from GT
                                   2: second allele
                                   R: REF allele in het genotypes
                                   A: ALT allele
                                   LR,LA: longer allele and REF/ALT if equal length
                                   SR,SA: shorter allele and REF/ALT if equal length
    -i, --include <expr>       select sites for which the expression is true (see man page for details)
    -I, --iupac-codes          output variants in the form of IUPAC ambiguity codes
    -m, --mask <file>          replace regions with N
    -o, --output <file>        write output to a file [standard output]
    -s, --sample <name>        apply variants of the given sample
Examples:
   # Get the consensus for one region. The fasta header lines are then expected
   # in the form ">chr:from-to".
   samtools faidx ref.fa 8:11870-11890 | bcftools consensus in.vcf.gz > out.fa

定制基因组

$ bcftools consensus <file.vcf> \
  --fasta-ref <file> \
  --iupac-codes \
  --output <file> \
  --sample <name>
 
# Apply variants present in sample "NA001", output IUPAC codes for hets
$ bcftools consensus -i -s NA001 -f in.fa in.vcf.gz > out.fa

# Create consensus for one region. The fasta header lines are then expected
# in the form ">chr:from-to".
$ samtools faidx ref.fa 8:11870-11890 | bcftools consensus in.vcf.gz -o out.fa

vcfutils.pl

samtoolsbcftoolsvcfutils.pl三个程序联合使用,从BAM文件开始操作,到获得新的参考基因组:

$ samtools mpileup -d8000 -q 20 -Q 10 -uf  REFERENCE.fasta Your_File.bam | bcftools call -c | vcfutils.pl vcf2fq  > OUTPUT.fastq
# d, --max-depth
# -q, -min-MQ Minimum mapping quality for an alignment to be used
# -Q, --min-BQ Minimum base quality for a base to be considered
$ sed -i -e '/^+/,/^\@/{/^+/!{/^\@/!d}}; /^+/ d; s/@/>/g' OUTPUT.fastq

References

FastaAlternateReferenceMaker
perEditor A tool to create personalized genome sequences
g2gtools creates custom genomes by incorporating SNPs and indels into reference genome
Welcome to g2gtools’ documentation
Personal Genome Constructor (vcf2diploid tool)
construct DNA sequence based on variation and human reference

                                —— dulunar 后记于 2019.12
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342