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閱讀 228,238評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,430評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,134評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,893評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,653評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,136評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,212評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,372評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,888評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,738評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,939評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,482評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,179評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,588評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,829評論 1 283
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,610評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,916評論 2 372

推薦閱讀更多精彩內容