阅读文献

本文分析的数据来自于文章:Reliability of Whole-Exome Sequencing for Assessing Intratumor Genetic Heterogeneity, Shi et al., 2018, Cell Reports
https://doi.org/10.1016/j.celrep.2018.10.046

3 读文献并下载数据 - 图1

原文作者主要是为了对比不同数据处理流程的结果异同与是否可靠,数据处理流程如下:

3 读文献并下载数据 - 图2

主要的全外显子组测序有:6 个 case,每个 case 有 5 个样本,分别是一个 Germline,A、B、C 三个 Biological replicate,一个 Technical replicate,一共是 30 个样本。

方法一:下载SRA数据

(不推荐)
NCBI 的 Sequence Read Archive (SRA),每个项目的 url 格式都是一样的,https://www.ncbi.nlm.nih.gov/Traces/study/?acc=SRPXXX 。在文章中,作者给出了 SRA 数据库的 id :SRP070662

3 读文献并下载数据 - 图3

我们可以先去到 sra 数据库:https://www.ncbi.nlm.nih.gov/sra/?term=,检索作者提供的 sra id:SRP070662

3 读文献并下载数据 - 图4

点击下图链接

3 读文献并下载数据 - 图5

进入该 id 所在的 sra 数据库详细列表
https://www.ncbi.nlm.nih.gov/Traces/study/?query_key=1&WebEnv=NCID_1_75412074_130.14.22.33_5555_1577745764_1047693658_0MetA0_S_HStore&o=acc_s%3Aa

3 读文献并下载数据 - 图6

点击 RunInfo Table 和 Accession List 下载两个文件并上传至服务器,存放至 ~/wes_cancer/project 目录下。

3 读文献并下载数据 - 图7

  1. cd ~/wes_cancer/project
  2. ls
  3. ## 0.sra 1.raw_fq 2.clean_fq 3.qc 4.align 5.gatk 6.mutect 7.annotation 8.cnv 9.pyclone 10.signature SRR_Acc_List.txt SraRunTable.txt

然后从 SRR_Acc_List.txt 文件中拿到 id 号并用 sra-tools 的 prefetch 命令下载 sra 文件

  1. cat SRR_Acc_List.txt | while read id
  2. do
  3. prefetch ${id} -O ./0.sra
  4. done

下载完成后,在 0.sra 目录下,每个 sra 文件以单独的文件夹的形式存放,每一个 sra 文件大小为 2~7G 不等。需要注意的是,还有一些非 sra 格式的文件也会被下载下来,要和 sra 文件放在一起,后面做格式转换的时候程序会自动检索,如果没有放在一起,可能会报错。不过我们这里只关心 sra 文件。

  1. 4.8G SRR3182418.sra
  2. 3.0G SRR3182419.sra
  3. 3.1G SRR3182420.sra
  4. 3.1G SRR3182421.sra
  5. ......

文件重命名

接下对 sra 文件进行重命名,方法如下:

  1. ## 首先提取 sra 文件的 id
  2. cat SraRunTable.txt | grep "WXS" | cut -f 15 > sra
  3. ## 然后提取 sra 文件对应的样本 id
  4. cat SraRunTable.txt | grep "WXS" | cut -f 17 | sed s/_1// >config
  5. ## 合并,结果如下:两列,第一列为 sra 文件的 id,第二列为重命名后的样本 id
  6. paste sra config > sra2case.txt
  7. cat sra2case.txt
  8. # SRR3182418 case5_germline
  9. # SRR3182419 case2_germline
  10. # SRR3182420 case4_germline
  11. # SRR3182421 case3_germline
  12. # SRR3182422 case6_germline
  13. # SRR3182423 case1_germline
  14. # SRR3182425 case4_biorep_B_techrep
  15. # SRR3182426 case4_biorep_C
  16. # SRR3182427 case3_biorep_A
  17. # SRR3182428 case3_biorep_B
  18. # ......
  19. ## 用下面代码重命名
  20. cat sra2case.txt | while read id
  21. do
  22. arr=(${id})
  23. sample=${arr[0]}
  24. case=${arr[1]}
  25. mv ./0.sra/${sample}/${sample}.sra ./0.sra/${case}.sra
  26. done
  27. ## 最后删掉没用的文件夹
  28. rm -r 0.sra/SRR*
  29. # nohup prefetch --option-file ../sra -t fasp -p -c -O . -X 50G > download_sra.log 2>&1 &
  30. ## vdb-validate
  31. # touch validate.out
  32. # ls SRR* | grep -v "vdb" | xargs vdb-validate - >> validate.out 2>&1
  33. # cat validate.out | grep consistent | wc

通过上面的方法重命名后,得到如下结果:

  1. case1_biorep_A_techrep.sra
  2. case1_biorep_B.sra
  3. case1_biorep_C.sra
  4. case1_germline.sra
  5. case1_techrep.sra
  6. ......

格式转换 sra 转 fq

最开始将 sra 转成 fq 用到的命令是 fast-dump,但是速度很慢。新版本的 sra-tools ,可以使用更快的工具做格式转换 fasterq-dump。按照我的代码习惯,需要用到一个 config 配置文件,其实里面就是记录了样本的 id,后面我们会经常用到这个文件。

  1. $ cat config
  2. case1_biorep_A_techrep
  3. case2_biorep_A
  4. case3_biorep_A
  5. case4_biorep_A
  6. case5_biorep_A
  7. case6_biorep_A_techrep
  8. case1_biorep_B
  9. case2_biorep_B_techrep
  10. case3_biorep_B
  11. case4_biorep_B_techrep
  12. case5_biorep_B_techrep
  13. case6_biorep_B
  14. case1_biorep_C
  15. case2_biorep_C
  16. case3_biorep_C_techrep
  17. case4_biorep_C
  18. case5_biorep_C
  19. case6_biorep_C
  20. case1_techrep_2
  21. case2_techrep_2
  22. case3_techrep_2
  23. case4_techrep_2
  24. case5_techrep_2
  25. case6_techrep_2

这里我写了个简单的脚本 sra2fq.sh,然后通过 nohup…& 提交至服务器后台运行。

  1. cd ./0.sra
  2. ## fasterq-dump
  3. cat config | while read id
  4. do
  5. time fasterq-dump -3 -e 16 ${id}.sra -O ../1.raw_fq --outfile ${id}.fastq >> ../1.raw_fq/${id}_sra2fq.log 2>&1
  6. time pigz -p 10 -f ../1.raw_fq/${id}_1.fastq >../1.raw_fq/${id}_1.fastq.gz
  7. time pigz -p 10 -f ../1.raw_fq/${id}_2.fastq >../1.raw_fq/${id}_2.fastq.gz
  8. done
  9. nohup bash sra2fq.sh &

解释一下上面的脚本,首先通过 fasterq-dump 将 sra 转成 fastq格式,-e 16 指的是调用了 16 个线程,输出到了 1.raw_fq 文件夹中,得到了原始的 fq 文件,因为是双端测序,所以每个样本会有 2 个 fastq 文件${id}_1.fastq${id}_2.fastq,对应 reads_1 和 reads_2,还有一个垃圾文件 ${id}_fastq。原始的 fastq 文件很大,所以通过 pigz 压缩命令调用了 -p 10 个线程来压缩,可以留意一下压缩后文件的大小。

  1. 5.8G case1_biorep_A_techrep_1.fastq.gz
  2. 5.8G case1_biorep_A_techrep_2.fastq.gz
  3. 4.9G case1_biorep_B_1.fastq.gz
  4. 4.9G case1_biorep_B_2.fastq.gz
  5. 6.1G case1_biorep_C_1.fastq.gz
  6. 6.1G case1_biorep_C_2.fastq.gz
  7. 2.4G case1_germline_1.fastq.gz
  8. 2.4G case1_germline_2.fastq.gz
  9. ......

方法二:下载 fastq 数据

上面介绍的 SRA 数据下载比较麻烦,很多读者反映下载遇到问题,评论区更新几种可行的下载方法,这里我就再总结一个新的方法,从 EBI 数据库直接下载 fastq 格式数据,直接越过 SRA,而且不用再做格式转换。

1. 安装 Aspera

在服务器上安装一个 Aspera 软件,可以提高下载速度,方法很简单

  1. cd ~/wes_cancer/biosoft
  2. wget -c https://download.asperasoft.com/download/sw/connect/3.8.1/ibm-aspera-connect-3.8.1.161274-linux-g2.12-64.tar.gz
  3. tar -zxvf ibm-aspera-connect-3.8.1.161274-linux-g2.12-64.tar.gz
  4. bash ibm-aspera-connect-3.8.1.161274-linux-g2.12-64.sh

安装完成之后,会在家目录生成一个以点号隐藏文件夹 .aspera,为了方便使用,将其添加到环境变量,注意这里是两个大于号>>表示追加,不要打漏了:

  1. echo 'export PATH=~/.aspera/connect/bin/:$PATH' >> ~/.bashrc
  2. source ~/.bashrc

2. 获取下载链接

感谢@城管大队哈队长的提醒,可以到这个链接 https://sra-explorer.info/ 获取我们要下载的数据的 URL,直接在搜索框输入要下载的数据 id 号,然后选择要下载的数据即可,这里我仅仅下载外显子测序数据:

3 读文献并下载数据 - 图8
然后给出几种下载方式,这里我们直接选择 fastq 格式,用 Aspera 下载,网页就会自动生成下载的方式,直接copy或者download到服务器上就好,这里它还很个性化的帮我们重命名了,但是我后面还会再改名的:

3 读文献并下载数据 - 图9

如果你没法通过 SRA-explorer 网页获取下载地址,就直接去 ENA 数据库搜索 id 号然后找到下载地址,就可以通过 ascp 命令来下载了。

3. 下载数据

这里我是从上面网页 copy 下载方式的,然后在服务器上粘贴一下,写入一个脚本中:

  1. $ cd ~/wes_cancer/project/1.raw_fq
  2. $ cat >fq_download.sh
  3. #!/usr/bin/env bash
  4. ascp -QT -l 300m -P33001 -i $HOME/.aspera/connect/etc/asperaweb_id_dsa.openssh era-fasp@fasp.sra.ebi.ac.uk:vol1/fastq/SRR318/008/SRR3182418/SRR3182418.fastq.gz . && mv SRR3182418.fastq.gz SRR3182418_exome_sequencing_of_case5_germline.fastq.gz
  5. ascp -QT -l 300m -P33001 -i $HOME/.aspera/connect/etc/asperaweb_id_dsa.openssh era-fasp@fasp.sra.ebi.ac.uk:vol1/fastq/SRR318/008/SRR3182418/SRR3182418_1.fastq.gz . && mv SRR3182418_1.fastq.gz SRR3182418_exome_sequencing_of_case5_germline_1.fastq.gz
  6. ascp -QT -l 300m -P33001 -i $HOME/.aspera/connect/etc/asperaweb_id_dsa.openssh era-fasp@fasp.sra.ebi.ac.uk:vol1/fastq/SRR318/008/SRR3182418/SRR3182418_2.fastq.gz . && mv SRR3182418_2.fastq.gz SRR3182418_exome_sequencing_of_case5_germline_2.fastq.gz
  7. ......
  8. ascp -QT -l 300m -P33001 -i $HOME/.aspera/connect/etc/asperaweb_id_dsa.openssh era-fasp@fasp.sra.ebi.ac.uk:vol1/fastq/SRR318/006/SRR3182446/SRR3182446_2.fastq.gz . && mv SRR3182446_2.fastq.gz SRR3182446_exome_sequencing_of_case5_techrep_2_2.fastq.gz
  9. ascp -QT -l 300m -P33001 -i $HOME/.aspera/connect/etc/asperaweb_id_dsa.openssh era-fasp@fasp.sra.ebi.ac.uk:vol1/fastq/SRR318/007/SRR3182447/SRR3182447.fastq.gz . && mv SRR3182447.fastq.gz SRR3182447_exome_sequencing_of_case5_biorep_C.fastq.gz
  10. ascp -QT -l 300m -P33001 -i $HOME/.aspera/connect/etc/asperaweb_id_dsa.openssh era-fasp@fasp.sra.ebi.ac.uk:vol1/fastq/SRR318/007/SRR3182447/SRR3182447_1.fastq.gz . && mv SRR3182447_1.fastq.gz SRR3182447_exome_sequencing_of_case5_biorep_C_1.fastq.gz
  11. ascp -QT -l 300m -P33001 -i $HOME/.aspera/connect/etc/asperaweb_id_dsa.openssh era-fasp@fasp.sra.ebi.ac.uk:vol1/fastq/SRR318/007/SRR3182447/SRR3182447_2.fastq.gz . && mv SRR3182447_2.fastq.gz SRR3182447_exome_sequencing_of_case5_biorep_C_2.fastq.gz
  12. ^C

然后直接运行这个脚本就好:

  1. bash fq_download.sh

至于速度,大家自己看吧:

3 读文献并下载数据 - 图10

当然,这么大的数据,这样下载占用了命令行,所以,通常我们都是挂在后台下载的:

  1. nohup bash fq_download.sh &

下载完成后,每个样本会有 3 个 fastq 文件,分别对应 *_1.fastq.gz*_2.fastq.gz ,以及一个只有几百K没什么用的 fastq 文件,比如下面这个样本:

  1. 442K SRR3182418_exome_sequencing_of_case5_germline.fastq.gz
  2. 3.3G SRR3182418_exome_sequencing_of_case5_germline_1.fastq.gz
  3. 3.4G SRR3182418_exome_sequencing_of_case5_germline_2.fastq.gz

通常这个多余的 fastq 文件我都不关心,直接删掉,一个个删掉也有点麻烦,当然如果你的 Linux 基础比较好的话,是可以用命令来删除的:

  1. find ./*gz -size 1M | xargs rm

4. 重命名

虽然上面网页给的下载方式会顺便帮我们重命名,但是还是不符合我的命名习惯,因此,这里我再重新命名一次,通过观察文件名,可以发现每个文件的前 31 个字符都是可以去掉的,我们取后半部分就好,后半部分长短不一,我就直接取 100 个字符长度吧,管它呢。一句简单的代码即可实现:

  1. ls *gz | while read id; do mv ${id} ${id:31:100}; done

结果是:

  1. case1_biorep_A_techrep_1_1.fastq.gz
  2. case1_biorep_A_techrep_1_2.fastq.gz
  3. case1_biorep_B_1.fastq.gz
  4. case1_biorep_B_2.fastq.gz
  5. ......

注意一下,这里的技术重复样本,和我后面文章的命名方式稍有不同,如果读者是用这种方法下载数据,请在将后文经常用到的 config 文件进行一定的修改,至于怎么修改,就自己摸索一下吧:

  1. case1_biorep_A_techrep_1_1.fastq.gz
  2. case1_biorep_A_techrep_1_2.fastq.gz
  3. case1_techrep_2_1.fastq.gz
  4. case1_techrep_2_2.fastq.gz