首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >WGS分析实战-01:从SRA数据下载到构建GenomicsDatabase

WGS分析实战-01:从SRA数据下载到构建GenomicsDatabase

作者头像
生信菜鸟团
发布2022-04-08 17:33:23
发布2022-04-08 17:33:23
2.6K0
举报
文章被收录于专栏:生信菜鸟团生信菜鸟团

用于实战的数据集来自下面这篇于2017年发表在The Plant Journal的文章《Different mutational function of low- and high-linear energy transfer heavy-ion irradiation demonstrated by whole-genome resequencing of Arabidopsis mutants》

分析用到的软件

  • sratoolkits
  • fastp
  • samtools
  • bwa
  • GATK、picard

(1)原始测序数据 & 参考基因组下载 & 索引构建

首先根据文章的Bioproject编号(PRJDB5412),找到SRA Experiments这一栏

文章中用于分析的样本有16个,下载对应样本的SRA编号即可:

代码语言:javascript
复制
# mkdir 00.raw_data && mkdir 00.ref
prefetch --option-file SraAccList.txt

# cd ../00.ref
wget http://ftp.ensemblgenomes.org/pub/plants/release-52/fasta/arabidopsis_thaliana/dna/Arabidopsis_thaliana.TAIR10.dna.toplevel.fa.gz
gunzip Arabidopsis_thaliana.TAIR10.dna.toplevel.fa.gz --stdout > arab_ref.fa

samtools faidx arab_ref.fa
# 结果文件:arab_ref.fa.fai
bwa index arab_ref.fa
# 结果文件:
# arab_ref.fa.amb  
# arab_ref.fa.ann  
# arab_ref.fa.bwt   
# arab_ref.fa.pac  
# arab_ref.fa.sa

(2)SRA数据格式转换

代码语言:javascript
复制
# 工作目录:00.raw_data
# 存放到一个文件夹下
mkdir sra_file
for id in `ls -d D*`;do mv ${id}/${id}.sra sra_file;done

# 格式转换
ls sra_file/* > sra_id.txt
for id in `cat sra_id.txt`;do echo "fastq-dump --split-3 --gzip -O ./ ${id}" >> fastq-dump.sh;done

# ParaFly运行
ParaFly -c fastq-dump.sh -CPU 16 2>fastqdump.err.log
# rm -rf sra_file/

arab_ref.fa.fai内容如下,分别代表序列ID、序列长度、序列起始位置(这边计数的时候会把每一条序列的长度也算进来)、每一行有多少个base、每一行有多少个字节。

1

30427671

55

60

61

2

19698289

30934909

60

61

3

23459830

50961558

60

61

4

18585056

74812441

60

61

5

26975502

93707303

60

61

Mt

366924

121132452

60

61

Pt

154478

121505547

60

61

(3)质量过滤

代码语言:javascript
复制
# 工作目录;00.raw_data
# mkdir ../01.clean_data
cat SraAccList.txt | while read id
do
 echo "fastp -i ${id}_1.fastq.gz -I ${id}_2.fastq.gz -o ../01.clean_data/${id}_clean_1.fastq.gz -O ../01.clean_data/${id}_clean_2.fastq.gz --cut_tail --n_base_limit 3 --length_required 60 --correction --thread 4 --html ../01.clean_data/${id}.html --json ../01.clean_data/${id}.json" >> fastp.commandlines
done

# ParaFly运行
ParaFly -c fastp.commandlines -CPU 16 2>fastp.err.log &

(4)比对

1、bwa比对

代码语言:javascript
复制
# mkdir ../02.bwa
cat ../00.raw_data/SraAccList.txt | while read id;do echo "bwa mem -t 6 -R '@RG\tID:foo\tPL:illumina\tSM:${id}' ../00.ref/arab_ref.fa ${id}_clean_1.fastq.gz ${id}_clean_2.fastq.gz | samtools view -Sb - > ../02.bwa/${id}.unsorted.bam" >> bwa.commondlines; done
# ParaFly运行
ParaFly -c bwa.commondlines -CPU 8 2>bwa_mem.err.log &

没有经过排序的BAM文件,第4列还是乱序:

2、samtools排序

代码语言:javascript
复制
ls *.bam > unsorted_bam_id.txt
cat unsorted_bam_id.txt | while read id
do
 name=${id%%.*}
 echo "samtools sort -@ 6 -m 4G -O bam -o ${name}.sorted.bam ${id}" >> sortbam.commandlines
done

# ParaFly运行
ParaFly -c sortbam.commandlines -CPU 16 2>sortbam.err.log &
# 删除unsorted
# ls * | grep "unsorted.bam$" | xargs -i rm -rf {}

sort过后的bam文件:

(5)标记重复序列

在NCBI官网查看了每一个样本的建库情况,并不是全部都说明了使用PCR-free kit(甚至没有说明),保险起见还是对PCR duplicates进行标记。

代码语言:javascript
复制
ls *.sorted.bam > sorted_bam_id.txt
cat sorted_bam_id.txt | while read id
do
 name=${id%%.*}
 echo "java -jar ~/biosoft/picard.jar MarkDuplicates I=${id} O=${name}.markdup.bam M=${name}.markdup.metrc.csv" >> markdup.commandlines
done

# ParaFly运行
ParaFly -c markdup.commandlines -CPU 16 2>markdup.err.log &
# rm -rf *.sorted.bam
# 上述这一步骤完成之后,需要对结果文件建立索引,以.bai结尾
for id in `ls *.markdup.bam`;do echo "java -jar ~/biosoft/picard.jar BuildBamIndex I=${id}" >> buildbamindex.commondlines;done
# ParaFly运行
ParaFly -c buildbamindex.commondlines -CPU 16 2>buildbamindex.err.log &

上述建立索引这一步,也可以在运行MarkDuplicates就添加,即[--CREATE_INDEX]

(6)SNP calling

代码语言:javascript
复制
# 构建参考序列dict文件
java -jar ~/biosoft/picard.jar CreateSequenceDictionary R=../00.ref/arab_ref.fa O=../00.ref/arab_ref.dict
# 1、HaplotypeCaller
# mkdir 03.snpcalling && cd 03.snpcalling
ls ../02.bwa/*.bam | xargs -i basename {} > bam_id.txt
cat bam_id.txt | while read id
do
 name=${id%%.*}
 echo "gatk --java-options \"-Xmx15g\" HaplotypeCaller -R ../00.ref/arab_ref.fa -I ../02.bwa/$id -O ${name}.g.vcf.gz -ERC GVCF" >> haplotypecaller.commondlines
done

ParaFly -c haplotypecaller.commondlines -CPU 16 2>haplotypecaller.err.log &

这些gvcf文件的大小差异有点大,基于该实验设计似乎又蛮合理,不同程度的辐射对突变位点数量的影响肯定是不一样的,但是这还是只是GATK分析的第一步,所以按要求过滤完了之后再下定论也不迟。

代码语言:javascript
复制
# 2、GenomicsDBImport
ls *.g.vcf.gz > gvcf_id.txt
cut -d "." -f 1 gvcf_id.txt > sample_id.txt
paste -d "\t" sample_id.txt gvcf_id.txt > sample.map

my_database=arab_16_DB                    # 创建GenomicsDatabase的文件夹名称
samplemap=sample.map                      # 使用tab分隔符,第一列为sampleID,第二列为对应gvcf ID
interval_list=interval.list               # 每一行一个区域编号
gatk --java-options "-Xmx4g -Xms4g" \
GenomicsDBImport \
--genomicsdb-workspace-path $my_database \
--sample-name-map $samplemap \
-L $interval_list 2>genomicsDB_build.err.log &

上述这些步骤还不需要纠结很多分析参数,到了GATK硬过滤的时候,就需要考虑了。

参考资料

[1] https://gatk.broadinstitute.org/hc/en-us/articles/360035535932-Germline-short-variant-discovery-SNPs-Indels- [2] http://www.htslib.org/doc/faidx.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信菜鸟团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • (1)原始测序数据 & 参考基因组下载 & 索引构建
  • (2)SRA数据格式转换
  • (3)质量过滤
  • (4)比对
  • (5)标记重复序列
  • (6)SNP calling
  • 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档