2022-01-10

###############################################################
####### #######
####### 1 reads比对 #######
####### 20220108 #######
###############################################################

基因组文件:reference.fasta
测序数据文件:example_R1.fq.gz example_R2.fq.gz

1 为参考基因组构建索引

samtools faidx reference.fasta
bwa index reference.fasta

2 将测序数据文件比对到参考基因组

-t 设置线程数,-R 添加reads的标签信息,view -Sb 将结果文件由sam转为bam,减少存储。

bwa mem -t 2 \ 
-R '@RG\tID:example\tPL:illumina\tSM:example' \ 
reference.fasta \ 
./example_R1.fq.gz ./example_R2.fq.gz \ 
| samtools view -Sb - > example.bam  

3 比对结果文件进行排序

-@ 设置线程数,-m 每个线程可使用的最大内存,-o 指定输出文件名称

samtools sort -@ 2 -m 10G -o example.sort.bam example.bam

4 去除比对结果中的PCR重复

samtools rmdup -S example.sort.bam example.sort.rmdup.bam

5 过滤比对质量少于20的reads

samtools view example.sort.rmdup.bam -q 20 -O BAM -o example.sort.rmdup.filter.bam

###############################################################
####### #######
####### 2 变异检测 #######
####### 20220108 #######
###############################################################

基因组文件:reference.fasta
比对结果文件:example.bam

注:GATK3中需要单独对bam文件进行局部重比对,以提高Indel附近区域比对结果的准确性,但在GATK4中,

局部重比对的步骤已经自动包含在HaplotypeCaller模块中,无需单独进行。

1 分别对每个样品进行变异检测

用到的GATK模块为HaplotypeCaller,--java-options 设置JAVA的参数 -XX:+UseSerialGC 单线程运行,-ERC 输出GVCF

gatk --java-options "-XX:+UseSerialGC"
HaplotypeCaller -R reference.fasta
-ERC GVCF
-I example.bam
-O example.g.vcf.gz

2 对所有样品的gvcf文件进行合并

用到的GATK模块为CombineGVCFs, -Xmx400g -Xms400g 指定最大内存,-V 每个样品的gvcf文件 -O 指定输出文件名称

gatk --java-options "-Xmx400g -Xms400g -XX:+UseSerialGC"
CombineGVCFs -R reference.fasta
-V example1.g.vcf.gz -V example2.g.vcf.gz -V example3.g.vcf.gz
-O combine.g.vcf.gz

3 群体变异检测

用到的GATK模块为GenotypeGVCFs, -V gvcf文件 -O 指定输出的vcf文件

gatk --java-options "-Xmx400g -Xms400g -XX:+UseSerialGC"
GenotypeGVCFs -R reference.fasta
-V combine.g.vcf.gz
-O combine.call.vcf.gz

4 提取SNP

用到的GATK模块为SelectVariants, -select-type 指定提取类型

gatk --java-options "-Xmx400g -Xms400g -XX:+UseSerialGC"
SelectVariants -R reference.fasta
-V combine.call.vcf.gz
-select-type SNP
-O combine.SNP.vcf.gz

4 过滤SNP

用到的GATK模块为VariantFiltration, --filter-expression 设置过滤参数及阈值

--filter-name 为每个位点添加标记,大于过滤阈值的标记为PASS,否则标记为Filter

gatk --java-options "-Xmx400g -Xms400g -XX:+UseSerialGC"
VariantFiltration -R reference.fasta
-V combine.SNP.vcf.gz
--filter-expression "QD < 2.0 || MQ < 40.0 || FS > 60.0
|| SOR > 3.0 || MQRankSum < -12.5 || ReadPosRankSum < -8.0"
--filter-name "Filter"
-O combine.SNP.filter.vcf.gz

5 提取过滤好的SNP

用到的GATK模块为SelectVariants,--exclude-filtered 去除被过滤掉的SNP,即标记为Filter的位点

gatk --java-options "-Xmx400g -Xms400g -XX:+UseSerialGC"
SelectVariants -R reference.fasta
-V combine.SNP.filter.vcf.gz
--exclude-filtered
-O combine.SNP.filtered.vcf.gz

###############################################################
####### #######
####### 3 变异过滤 #######
####### 20220109 #######
###############################################################

VCF文件:example.vcf

1 去除Indel附近7bp范围的SNP

-g 设置距离,单位bp, -O 指定输出文件格式 v表示未压缩的vcf文件

注:此步需要vcf文件中包含indel,过滤完后将indel去除

bcftools filter -g 7 -O v -o 1.vcf example.vcf

2 去除10bp范围内有大于3个SNP的SNP cluster

1 为vcf文件建立索引

gatk IndexFeatureFile -F 1.vcf

2 为符合要求的位点添加标记SNP cluster,-cluster 指定SNP数目 -window 指定窗口范围,单位bp

gatk VariantFiltration -V 1.vcf -cluster 3 -window 10 -O 2.vcf

3 去除SNP cluster

gatk --java-options "-XX:+UseSerialGC"
SelectVariants -V 2.vcf
-select "FILTER == SnpCluster"
--invertSelect
-O 2.Filtered.vcf

3 将质量值小于20,覆盖的reads数小于5的基因型设为miss即./.

vcftools --vcf 2.Filtered.vcf
--minDP 5 --minGQ 20
--recode --recode-INFO-all
--out 3.Filtered

4 去除非二等位基因、缺失率大于90%,次要等位基因频率小于5%的位点

vcftools --vcf 3.Filtered.recode.vcf
--max-allele 2 --min-allele 2
--max-missing 0.9 --maf 0.05
--recode --recode-INFO-all
--out 4.Filtered

5 过滤连锁不平衡位点

1 转换vcf文件为ped格式

plink --vcf 4.Filtered.recode.vcf
--allow-extra-chr --recode
--out 5.ld

2 将map文件中的第二列改为每个snp位点特有的标识符

awk '{print 1"\t"1"_"4"\t"3"\t"$4}' 5.ld.map > 5.ld1.map

3 修改相应的ped文件的名称

mv 5.ld.ped 5.ld1.ped

4 计算位点之间的ld值, --indep-pairwise 设置窗口、步长、r2值

plink --file 5.ld1
--allow-extra-chr
--indep-pairwise 50 10 0.2
--out ld

5 抽出低连锁的位点,--extract 抽取满足要求的位点,--make-bed 转换为bed格式

plink --file 5.ld1
--allow-extra-chr
--extract ld.prune.in
--make-bed --out filter_ld

6 将bed文件转为vcf文件

plink --bfile filter_ld
--allow-extra-chr
--recode vcf-iid --out filter_ld

###############################################################
####### #######
####### 4 系统树、Admixture和PCA #######
####### 20220109 #######
###############################################################

VCF文件:example.vcf
BED文件:example.bed

系统树

1 将SNP转为fasta格式,用到的软件为vcf2phylip.py(https://github.com/edgardomortiz/vcf2phylip)

python vcf2phylip.py -f -i example.vcf

2 megacc 构建NJ树

infer_NJ_nucleotide_NOld.mao为参数文件,常用参数如下:

[ AnalysisSettings ]

Analysis = Phylogeny Reconstruction

Scope = All Selected Taxa

Statistical Method = Neighbor-joining #指定建树方法

Phylogeny Test = ====================

Test of Phylogeny = Bootstrap method

No. of Bootstrap Replications = 1000 #指定Bootstrap次数

Substitution Model = ====================

Substitutions Type = Nucleotide

Model/Method = p-distance #指定模型

Number of Threads = 4 #指定线程数目

-a 指定参数文件,-d指定序列文件

megacc -a infer_NJ_nucleotide_NOld.mao -d example.fasta -o example_out

3 IQTREE 构建ML树

-s 指定序列文件,-o 指定外类群名称, -T 指定线程数目,-B 指定Bootstrap次数,-m MFP 自动搜索最适合模型并建树

iqtree -s example.fasta -o acoe -T 10 -B 1000 -m MFP

Admixture

1 依次计算K=2到K=20

for k in {2..20} ;do admixture --cv=10 example.bed k |tee log{k}.out; done

2 处理admixture结果

1 提取出Q文件中的个体顺序

awk '{print $2}' example.fam > ID

2 给Q文件添加个体id

for i in *Q ;do paste ID i >i.id ;done

3 按照sortID文件中的指定顺序,给Q文件排序

for i in *id ;do python3 sortQ.py sortID ii.sort ;done

3 绘图

a <- read.table("sort.5k",row.names = 1)
b <- t(as.matrix(a))
b.reverse <- b[,324:1]
p <- barplot(b.reverse,space = 0,border = NA,axisnames = F,
col = c("gold","firebrick","DarkGoldenrod4","IndianRed1",))
axis(side = 1, p, labels = F, at = c(0:324))
labs <- colnames(b.reverse)
text(cex=.3, x=p-0.25,y=-0.05,labs,xpd=TRUE,srt=45,adj = c(1,1))

PCA

--pca 324 计算324个PC的值,324为输入文件中的个体数

plink --allow-extra-chr --bfile example --pca 324

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

推荐阅读更多精彩内容