用GATK进行二代测序数据 SNP Calling 流程:(二)bwa比对和HaplotypeCaller 变异检测
1. 创建基因组索引
bwa index genome.fa
2. 查看read group信息,按read group分组, 比对、合并,生成gvcf
由于数据太多,无法存储过多的中间文件,因此写了一个脚本,边运行边删除中间文件,过程包括:
- 解压,按read group分组。(RG(read group) 信息非常重要,GATK需要通过RG来判断碱基测序质量。我的一个样品的测序数据可能会来自不同的title,不同的lane、flowcell,甚至不同的机器,这在重测序中比较常见。因此,我将一个fastq文件按RG分割,分别比对、添加RG信息。
- 比对,添加RG信息
- 用
picard
软件合并来自同一个材料的sam文件,并输出排序后的bam文件,建立索引。 - 用
picard
软件注释 Duplicates 信息。特殊的建库方式,如GBS、RAD-seq、RNA-seq数据可以忽略,因为它们或者用酶切建库,基因组打断的位置不随机,或者基于转录本建库,本身的表达丰度不同,都不适合去重。 - 用GATK4 进行SNP Calling,因为我是用群体 call SNP的策略,所以这里产生的是GVCF文件。
Tips:
- gzip压缩文件和sra压缩文件大小相近。
- 一个fastq文件,建议给予其大小5倍的存储空间,以免存储空间不足,导致程序强行终止。
- 如果数据很大,如重测序数据,或者同时处理的数据很多,建议给bwa、picard、gatk建立临时文件夹,如果用默认的系统临时文件夹
/tmp
,可能会存储空间不足,导致程序强行终止。
以下是运行代码:
#参考基因组(绝对路径)
Ref=genome.fa#bwa 参数
#线程
t=10
#索引
FM_index="genome.fa"#picard 参数
#最大运行内存
p_Xmx=20g#GATK4参数
# 临时文件夹(绝对路径)
tmpdir="tmpdir"
# bam 文件(绝对路径)
bam_dir="."
# java 运行内存
G_Xmx=20g#对fastq文件按reads group分组
while read id
do#解压gunzip -c /database/public/reseq355_clean/${id}_1.fq.gz >${id}_1.fqgunzip -c /database/public/reseq355_clean/${id}_2.fq.gz >${id}_2.fq#提取read group信息grep "^@ST" ${id}_1.fq|cut -d ':' -f1-4|sort|uniq >${id}.RG.tablewhile read rgdoaffix=`echo $rg|tr ":" "-"`#根据read group分隔文件grep -A 3 ${rg} ${id}_1.fq >${id}-${affix}_1.fqgrep -A 3 ${rg} ${id}_2.fq >${id}-${affix}_2.fqdone <${id}.RG.table#删除fastq文件,释放存储空间rm ${id}_1.fq ${id}_2.fq# bwa 比对#比对成功后,删除相应fastq文件while read rgdoaffix=`echo $rg|tr ":" "-"`bwa mem -t $t -M -R "@RG\tID:${affix}\tSM:${id}\tLB:${id}\tPL:illumina" $FM_index ${id}-${affix}_1.fq ${id}-${affix}_2.fq >${id}-${affix}.sam && rm ${id}-${affix}_*.fqdone <${id}.RG.table#用picard合并sam,排序,输出bam,indexls ${id}-*.sam|xargs -I [] echo "I="[]|xargs -L 1000000 \picard -Xmx${p_Xmx} MergeSamFiles \O=${id}.merged.sorted.bam \SORT_ORDER=coordinate \CREATE_INDEX=true \VALIDATION_STRINGENCY=LENIENT \REFERENCE_SEQUENCE=$Ref \TMP_DIR=${tmpdir} 2>${id%}.log \&&rm ${id}-*.sam# 用picard 进行Mark duplicatespicard -Xmx${p_Xmx} MarkDuplicates \I=${id}.merged.sorted.bam \O=${id}.merged.sorted.dedup.bam \M=${id}.Marked_dup_metrics.txt \CREATE_INDEX=true \VALIDATION_STRINGENCY=LENIENT \REFERENCE_SEQUENCE=$Ref \TMP_DIR=${tmpdir} 2>${id%}.log \&& rm ${id}.merged.sorted.bam*#用gatk HaplotypeCaller进行SNP Calling
#“-DF NotDuplicateReadFilter”:使用该参数则禁止对reads duplicate进行过滤,GBS或RNA-seq数据可能需要。
# 为gatk建立临时存储文件夹if [ ! -f "${tmpdir}/${id}_h" ];thenmkdir -p ${tmpdir}/${id}_helserm -r ${tmpdir}/${id}_h/*figatk --java-options "-Xmx${G_Xmx} -Djava.io.tmpdir=${tmpdir}/${id}_h" \HaplotypeCaller \-ERC GVCF \-R ${Ref} \-I ${id}.merged.sorted.dedup.bam \-O ${id}.gvcf.gz \1>${id}.gvcf.log 2>&1 \&& rm -r ${tmpdir}/${id}_h done < $1
用GATK进行二代测序数据 SNP Calling 流程:(二)bwa比对和HaplotypeCaller 变异检测相关推荐
- 用GATK进行二代测序数据 SNP Calling 流程:(四)变异过滤
GATK推荐的最好的过滤方式是用 VQSR功能,它通过机器学习算法来判断SNP的优劣,因此至少需要两个已存在的 SNP 数据集,一个是经过验证的高质量 SNP 数据集作为真集(如 HapMap),还需 ...
- 【Sentieon】PacBio HiFi三代测序数据SNP/Indel加速分析
Sentieon软件在二代测序中SNP/Indel变异检测流程已非常成熟,并以其检测准确性高和检测速度快而广受业内人士认可.近日,Sentieon推出了DNAscope LongReads分析流程,深 ...
- 关于文献中二代测序数据下载(NCBI)的问题
关于文献中二代测序数据下载(NCBI)的问题 现在二代测序用于生物学研究非常广泛,大部分文章的序列会上传到Sequence Read Archive(SRA)上,这东西也属于NCBI数据库中的吧,我理 ...
- DNA甲基化测序数据的分析流程及相关软件总结
目前检测DNA甲基化的方法众多,主要可以分为以下几类(如表1所示): 图片来源(凡时财等,中国科学: 生命科学,2015) <更多精彩,可关注微信公众号:AIPuFuBio,和大型免费综合生物信 ...
- 二代测序数据统计分析中为什么是负二项分布?
本文转载自"universebiologygirl",已获授权 1. 转录组数据统计推断的难题 在RNA-seq中进行两组间的差异分析是最正常不过的了 我们在其它实验中同样会遇到类 ...
- 二代测序linux软件,二代测序数据分析软件包大全
二代测序数据分析软件包大全 Integrated solutions*CLCbio Genomics Workbench-de novoand reference assembly of Sanger ...
- 三代测序数据纠错的方法、装置和计算机可读存储介质与流程
三代测序数据纠错的方法.装置和计算机可读存储介质与流程 文档序号:15616049发布日期:2018-10-09 21:24 导航: X技术> 最新专利>计算;推算;计数设备的制造及其应用 ...
- 经典:基因组测序数据从头拼接或组装算法的原理
基因组测序数据的拼接/组装 (图片来源:google) 每一个物种的参考基因组序列(reference genome)的产生都要先通过测序的方法,获得基因组的测序读段(reads),然后再进行从头拼接 ...
- 二代测序的原理和简介
二代测序的简介 第二代测序(Next-generation sequencing,NGS)又称为高通量测序(High-throughput sequencing),是基于PCR和基因芯片发展而来的 ...
最新文章
- MongoDB 进阶-关联查询
- 使用递归计算1-n之间的和
- 软件项目开发过程中主要遇到的核心问题小结
- 前端学习(1802):前端调试之事件伪类
- vs编译python好还是pycharm的好_Python学习 第3天 VS与PyCharm使用对比
- Java-Scanner进阶使用
- 《机器人学导论--Join J.Craig》第一章 绪论
- Java 算法 旅行家的预算
- 沃尔玛牵手Gatik推行自动驾驶试点项目 为客户配送订单
- 程序设计与算法----递归之n皇后问题
- Soul 网关源码阅读(四)Dubbo请求概览
- Libsvm Java
- 当js中的for循环遇到延时器或者定时器时需要注意的问题(这里有个大坑)
- 一个完整的计算器c语言源代码,分享一个C语言的计算器源代码
- 鸿蒙音波萨顶顶,萨顶顶把古代论文唱成歌,撒贝宁评价:“最难合作的艺人之一”...
- cαr怎么发音_最全英语口语发音规则与技巧
- 快收下这枚 Scrapy Requests 口味的爬虫“回魂丹”
- 小程序-实现列表- 搜索功能的实现(6)
- 位图矢量化:Potrace的应用
- 2021-04-10 粤嵌单片机兴趣课(一)
热门文章
- 有一个已经排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中
- ctrypto-js中,DES解密的iv向量处理
- 4 好青年胃癌低,酒精毒性搞清晰;脱发困扰国内外,运动过多也有害
- 赛尔号星球大战服务器维修,赛尔号星球大战11月29日更新公告
- ESP32 开发笔记(三)源码示例 8_DHT11_RMT 使用RMT实现读取DHT11温湿度传感器
- 一阶电路中的时间常数_电路时间常数怎么求
- 中山大学计算机类专业是什么,中山大学2017年计算机类专业自主招生条件及专业优势...
- 时序分析 43 -- 时序数据转为空间数据 (二) 马尔可夫转换场
- 如何使用Adobe Acrobat对PDF文档进行电子签名
- access转sql iif_Access中IIF,SWITCH,CHOOSE的使用技巧