外顯子(WES)panel分析基礎(chǔ)篇

作者遍蟋,Evil Genius

我們來分享一下關(guān)于WES分析部分的內(nèi)容,其中內(nèi)容主要包括三部分

  • 基礎(chǔ)部分发绢,包括WES數(shù)據(jù)的call SNP硬耍、INDEL、MSI边酒、fusion经柴、annovar、CNV等部分墩朦,我們不僅要會每個部分坯认,也要構(gòu)建全自動化腳本,實現(xiàn)一鍵式分析出結(jié)果氓涣,包括甄別配對樣本和單腫瘤樣本牛哺。

  • 高級注釋部分,基礎(chǔ)部分當(dāng)然annovar已經(jīng)做了很多的注釋了劳吠,但是仍然還差得遠(yuǎn)引润,還需要更多的數(shù)據(jù)庫注釋,其中最重要的就是OncoKB的自動化注釋痒玩,還有有很多人工添加的用藥位點淳附,同樣的道理,要實現(xiàn)一鍵式自動化出分析結(jié)果的內(nèi)容蠢古,其中還有計算TMB等內(nèi)容奴曙。

  • 臨檢報告的出具,這部分是WES核心內(nèi)容草讶,分析數(shù)據(jù)的解讀以及如何根據(jù)分析得到的數(shù)據(jù)進(jìn)行臨床用藥指導(dǎo)洽糟,同樣,我們需要代碼幫我們實現(xiàn)一鍵式出結(jié)果,對于敏感位點要報出warning坤溃,人工審核拍霜。

實際過程中接收到的樣本往往只有tumor樣本,其中血液樣本和組織樣本的過濾條件稍有不同薪介。

這一篇我們來實現(xiàn)第一部分沉御,其中分析用到的軟件大家可以自行查閱。我們從拿到數(shù)據(jù)開始昭灵。

第一步:數(shù)據(jù)質(zhì)控
普通質(zhì)控
fastp=fastp軟件路徑
fq1=tumor外顯子read1
fq2=tumor外顯子read2
$fastp -i fq1 -I fq2 -o tumor_clean.R1.fq.gz" -O \ 
tumor_clean.R2.fq.gz" \
 -h tumor_fastp.html \
-j tumor_fastp.json -3 -5  
實際分析過程則需要更多的過濾條件
fastp=fastp軟件路徑
$fastp -i normal_1.fastq.gz -o normal_1.depumi.fastq.gz \
-I normal_2.fastq.gz -O normal_2.depumi.fastq.gz \
        -U --umi_loc=per_read --umi_len=5 --umi_skip=4 --umi_prefix=UMI \
        -Q -L -A -3 -5 -h normal.html -j fastp/normal.json


$fastp -i tumor_1.fastq.gz -o tumor_1.depumi.fastq.gz -I tumor_2.fastq.gz \
-O tumor_2.depumi.fastq.gz \        
    -U --umi_loc=per_read --umi_len=5 --umi_skip=4 --umi_prefix=UMI \        
    -Q -L -A -3 -5 -h tumor.html -j tumor.json
第二步,數(shù)據(jù)比對
bwa=bwa路徑
samtools=samtools軟件路徑
$bwa mem -t 12 ucsc.hg19.fasta參考基因組路徑 \ 
tumor_clean.R1.fq.gz tumor_clean.R2.fq.gz  \
-R "@RG\tID:tumor\tLB:tumor\tPL:ILLUMINA\tSM:tumor\tPU:ILLUMINA" \
 | $samtools view -bS - -o tumor.raw.bam

這里面首先需要構(gòu)建好參考基因組伐谈,通常是hg19的烂完,還有就是-R的參數(shù)設(shè)置。示例是針對tumor樣本诵棵,對于normal也一樣的操作抠蚣。-t參數(shù)根據(jù)服務(wù)器性能自行調(diào)整。

第三步履澳,bam文件的sort和去重
gatk=gatk軟件路徑嘶窄,推薦最新版倒退一兩個版本

$samtools sort -@ 12 -m 10G tumor.raw.bam -o tumor.sort.bam

$gatk --java-options "-Xms5g -Xmx5g -Djava.io.tmpdir=臨時路徑" MarkDuplicates \
    -I tumor.sort.bam \
    -O tumor.markdup.bam \
    -M tumor.markdup_metrics.txt
第四步,BQSR,其中bed文件一般試劑盒會提供
target=bed文件路徑
bedtools=bedtools軟件路徑
DBSNP=dbSNP數(shù)據(jù)庫路徑
MILLS=千人計劃基礎(chǔ)SNP位點
INDELS=千人計劃基礎(chǔ)indel位點

cat $target | awk -v OFS="\t" -v gap=500 '{$2=$2-gap;$3=$3+gap;print $0}' | $bedtools merge -i - > ./targetplus_bed
$gatk BaseRecalibrator \
    -R 參考基因組路徑 \
    -I tumor.markdup.bam \
    -L  ./targetplus_bed\
    --known-sites $DBSNP \
    --known-sites $MILLS \
    --known-sites $INDELS \
    -O tumor.recal_data

$gatk ApplyBQSR \
    --bqsr-recal-file tumor.recal_data \
    -L  ./targetplus_bed\
    -R 參考基因組路徑 \
    -I tumor.markdup.bam \
    -O tumor.markdup.BQSR.bam

rm ./targetplus_bed -rf

需要注意的是分析必須配備bed文件距贷,否則后續(xù)的數(shù)據(jù)解讀會出問題柄冲。

如果有normal樣本需要再來一次上述分析。
第五步忠蝗,HaplotypeCaller现横,其中參數(shù)的設(shè)置需要大家研究一下
有normal樣本
$gatk --java-options "-Xms5g -Xmx5g -Djava.io.tmpdir=臨時路徑" HaplotypeCaller \
    -R 參考基因組路徑 \
    -I normal.markdup.BQSR.bam \
    --output normal.raw.vcf \
    -L $target \
    -stand-call-conf 30.0 \
    --max-mnp-distance 5 \
    -RF GoodCigarReadFilter \
    --dont-use-soft-clipped-bases \
    --minimum-mapping-quality 20 \
    --native-pair-hmm-threads 8
只有tumor樣本
$gatk --java-options "-Xms5g -Xmx5g -Djava.io.tmpdir=臨時路徑" HaplotypeCaller \
    -R 參考基因組路徑 \
    -I tumor.markdup.BQSR.bam \
    --output tumor.raw.vcf \
    -L $target \
    -stand-call-conf 30.0 \
    --max-mnp-distance 5 \
    -RF GoodCigarReadFilter \
    --dont-use-soft-clipped-bases \
    --minimum-mapping-quality 20 \
    --native-pair-hmm-threads 8
filter,這一步的參數(shù)選擇前面已經(jīng)介紹過阁最,大家需要思考的是為什么只有tumor的時候也需要對tumor數(shù)據(jù)進(jìn)行HaplotypeCaller分析
$gatk SelectVariants \
    --select-type-to-exclude INDEL \
    -V tumor.raw.vcf \
    -O tumor.snp.vcf 
$gatk SelectVariants \
    --select-type-to-include INDEL \
    -V tumor.raw.vcf \
    -O tumor.indel.vcf 
$gatk VariantFiltration \
    -R 參考基因組路徑 \
    --filter-expression "QD < 2.0 || ReadPosRankSum < -20.0 || FS > 200.0 || SOR > 10.0" \
    --filter-name "Standard" \
    --filter-expression "DP <= 5" \
    --filter-name "DP_5" \
    --filter-expression  "DP < 20" \
    --filter-name "DP_20" \
    -V tumor.indel.vcf \
    -O tumor.indel.filter.vcf
$gatk VariantFiltration \
    -R 參考基因組路徑 \
    --filter-expression "QD < 2.0 || MQ < 40.0 || FS > 60.0 || MQRankSum < -12.5 || ReadPosRankSum < -8.0 || SOR > 3.0" \
    --filter-name "Standard" \
    --filter-expression "DP <= 5" \
    --filter-name "DP_5" \
    --filter-expression  "DP < 20" \
    --filter-name "DP_20" \
    -V tumor.snp.vcf \
    -O tumor.snp.filter.vcf
第六步戒祠,mutect,af_only_gnomad這個文件是什么大家自行查閱速种,這里就不過多介紹了姜盈。
在使用GATK4 Mutect2軟件分析候選體細(xì)胞變異時,最好使用Panel of Normals (PON)文件配阵,以提高變異分析準(zhǔn)確度馏颂。

GATK開發(fā)團(tuán)隊認(rèn)為,在生成PON文件時闸餐,正常對照樣本越多越好(至少40個)饱亮,但是其實一些小樣本(4-10個)也是可以的,有總比沒有好舍沙。

only tumor
af_only_gnomad=af_only_gnomad路徑
$gatk --java-options "-Xmx5g -Xms5g -Djava.io.tmpdir=臨時路徑" Mutect2 \
    -R 參考基因組路徑 \
    -I tumor.markdup.BQSR.bam \
    -tumor tumor \
    -L $target \
    --output tumor.raw.vcf \
    --germline-resource $af_only_gnomad \
    --af-of-alleles-not-in-resource 0.00003125 \
    --f1r2-tar-gz tumor.f1r2.tar.gz \
    --min-base-quality-score 20 \
    --max-mnp-distance 5 \
    --disable-read-filter MateOnSameContigOrNoMappedMateReadFilter \
    --native-pair-hmm-threads 8 \
    -G StandardMutectAnnotation \
    --dont-use-soft-clipped-bases

$gatk LearnReadOrientationModel \
    -I tumor.f1r2.tar.gz \
    -O tumor.read-orientation-model.tar.gz 
  $gatk GetPileupSummaries \
    -I tumor.markdup.BQSR.bam \
    -L $small_exac_common \
    -V $small_exac_common \
    -O tumor.getpileupsummaries.table 
  $gatk CalculateContamination \
    -I tumor.getpileupsummaries.table \
    -O tumor_calculatecontamination.table 
  $gatk FilterMutectCalls \
    -V tumor.raw.vcf \
    -R 參考基因組路徑 \
    --ob-priors tumor.read-orientation-model.tar.gz \
    -contamination-table tumor_calculatecontamination.table \
    -O tumor.raw.filtered.vcf
有配對樣本
$gatk --java-options "-Xmx5g -Xms5g -Djava.io.tmpdir=臨時路徑" Mutect2 \
    -R 參考基因組路徑 \
    -I tumor.markdup.BQSR.bam \
    -tumor tumor \
    -I normal.markdup.BQSR.bam \
    -normal normal \
    -L $target \
    --output tumor.raw.vcf \
    --germline-resource $af_only_gnomad \
    --af-of-alleles-not-in-resource 0.00003125 \
    --f1r2-tar-gz tumor.f1r2.tar.gz \
    --min-base-quality-score 20 \
    --max-mnp-distance 5 \
    --disable-read-filter MateOnSameContigOrNoMappedMateReadFilter \
    --native-pair-hmm-threads 8 \
    -G StandardMutectAnnotation \
    --dont-use-soft-clipped-bases \
    -RF NotSupplementaryAlignmentReadFilter
后面的filter過程跟第六步就是一致的近上。
當(dāng)然這樣的清洗還是不夠,還需要對數(shù)據(jù)進(jìn)行分析調(diào)整
Mutect2_Filter=python的mutect的清洗腳本
python $Mutect2_Filter tumor.raw.filtered.vcf 
第七步拂铡,annovar壹无,數(shù)據(jù)庫filter和注釋葱绒,需要提前下載好注釋的數(shù)據(jù)庫文件,注意這里對HaplotypeCaller和mutect的分析結(jié)果均要進(jìn)行該操作,mutect文件就是tumor.raw.filtered.vcf,下面是示例斗锭。
humandb=數(shù)據(jù)庫路徑地淀,就在annovar軟件下面,常見的寫在了protocol參數(shù)下面
table_annovar=annovar軟件注釋路徑
perl $table_annovar  \
    --buildver hg19 \
    --otherinfo \
    --nastring . tumor.snp.filter.vcf $humandb \
    -protocol refGene,dbnsfp31a_interpro,avsnp150,snp138,1000g2015aug_all,exac03,clinvar_20210501,intervar_20180118,cosmic95,dbnsfp30a \
    -operation g,f,f,f,f,f,f,f,f,f \
    --vcfinput --remove
分析得到的文件示例如下:
第八步岖是,MSI
msisensor2=msisensor2軟件路徑
msisensor_pro=msisensor_pro軟件路徑
microsatellites=微衛(wèi)星位點的基線文件(軟件msisensor2)
microsatellites_pro=微衛(wèi)星位點的基線文件(軟件msisensor_pro)
modelhg19=models_hg19_GRCh37
####有normal樣本
$msisensor msi \
    -d $microsatellites \
    -n normal.BQSR.bam \
    -t tumor.BQSR.bam \
    -o tumor.MSI
####only tumor
$msisensor_pro pro -d $microsatellites_pro -t tumor.markdup.BQSR.bam -o tumor.MSI
第九步帮毁,F(xiàn)usion,這里大家要考慮為什么用factera的時候需要對數(shù)據(jù)重新比對豺撑。
factera=factera.pl路徑
ref_bit=ucsc.hg19.2bit
exons_bed=外顯子的bed文件

#####重新比對
$bwa mem -Y -t 8 參考基因組路徑 tumor_clean.R1.fq.gz tumor_clean.R2.fq.gz  -R "@RG\tID:$prefix_t\tLB:tumor\tPL:ILLUMINA\tSM:tumor\tPU:ILLUMINA" | $samtools view -bS - -o tumor.raw.bam

$samtools sort -@ 12 -m 20G tumor.raw.bam -o tumor.sort.bam
perl $factera -F -o ./ tumor.sort.bam $exons_bed $ref_bit $target
如果有normal樣本的話需要再來一次這樣的分析烈疚。
第10步,CNV
cnvkit=cnvkit軟件路徑
access_hg19=access.hg19.bed文件
###有配對樣本
python3 $cnvkit batch \
    tumor.markdup.bam \
    --normal normal.markdup.bam \
    --targets $target \
    --annotate $refFlat \
    --fasta 參考基因組數(shù)據(jù)庫 \
    --access $access_hg19 \
    --output-reference tumor.reference.cnn \
    --output-dir ./ \
    --diagram --scatter

####只有tumor樣本
reference_cnn=CNV基線文件
python3 $cnvkit batch \
    tumor.markdup.bam \
    --reference $reference_cnn \
    --output-dir ./
第11步聪轿,bamdst爷肝,測序位點的突變內(nèi)容
bamdst=bamdst軟件路徑

$bamdst -p $target tumor.markdup.BQSR.bam -o ./

當(dāng)然我們實際分析過程不可能是這樣的一步一步操作,需要一鍵式出所有結(jié)果陆错,這就需要大家有更高的代碼能力灯抛,下面提供一個示例,用法是

只有tumor樣本
bash gatk.panel.sh sample.clean.R1.fastq.gz sample.clean.R2.fastq.gz sample(樣本名稱) 輸出路徑 -t bed文件 -c CNV基線文件
有配對樣本
bash gatk.panel.sh sample.clean.R1.fastq.gz sample.clean.R2.fastq.gz sample(樣本名稱) 輸出路徑 -t bed文件  -n normal_fq1 -N normal_fq2
核心腳本gatk.panel.sh
還有 68% 的精彩內(nèi)容
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
支付 ¥2000.00 繼續(xù)閱讀
  • 序言:七十年代末音瓷,一起剝皮案震驚了整個濱河市对嚼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌绳慎,老刑警劉巖猪半,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異偷线,居然都是意外死亡磨确,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進(jìn)店門声邦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來乏奥,“玉大人,你說我怎么就攤上這事亥曹〉肆耍” “怎么了?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵媳瞪,是天一觀的道長骗炉。 經(jīng)常有香客問我,道長蛇受,這世上最難降的妖魔是什么句葵? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上乍丈,老公的妹妹穿的比我還像新娘剂碴。我一直安慰自己,他們只是感情好轻专,可當(dāng)我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布忆矛。 她就那樣靜靜地躺著,像睡著了一般请垛。 火紅的嫁衣襯著肌膚如雪催训。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天宗收,我揣著相機(jī)與錄音瞳腌,去河邊找鬼。 笑死镜雨,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的儿捧。 我是一名探鬼主播荚坞,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼菲盾!你這毒婦竟也來了颓影?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤懒鉴,失蹤者是張志新(化名)和其女友劉穎诡挂,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體临谱,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡璃俗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了悉默。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片城豁。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖抄课,靈堂內(nèi)的尸體忽然破棺而出唱星,到底是詐尸還是另有隱情,我是刑警寧澤跟磨,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布间聊,位于F島的核電站,受9級特大地震影響抵拘,放射性物質(zhì)發(fā)生泄漏哎榴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望叹话。 院中可真熱鬧偷遗,春花似錦、人聲如沸驼壶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽热凹。三九已至泵喘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間般妙,已是汗流浹背纪铺。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留碟渺,地道東北人鲜锚。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像苫拍,于是被迫代替她去往敵國和親芜繁。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內(nèi)容