最近需要下载些公共数据,在简书上搜索到了有小伙伴介绍 iseq,测试了下效果不错,可以媲美 KingFisher,虽然还没曾正式发表(预印本),亲测效果不错,推荐。iSeq 是一个 Bash 脚本,允许您从 GSA[1]、SRA[2]、ENA[3] 和 DDBJ[4] 数据库下载测序数据和元数据。简单流程详细流程
安装
conda 可以轻松安装 iSeq
# 现在conda也正在追赶mamba的步伐,变得更快呢,当然还有更快的pixi
conda create -n iseq -c conda-forge -c bioconda iseq
conda activate iseq
新版本也可以从源码安装,但是这不是一般人的选择,这里就省略啦!
使用测试
速度是相当给力的,特别是瞬时速度,偶尔可以跑满宽带。当然,有少数样本会出现 md5 校验失败,反复下载也不行的,只有放弃啦!
iSeq 使用方法
$ iseq --help
Usage:
iseq -i accession [options]
Options:
Required parameter:
-i, --input TEXT accession (Project, Study, Sample, Experiment, or Run)
Optional parameters:
-m, --metadata Skip the sequencing data downloads and only fetch the metadata for the accession.
-g, --gzip Download FASTQ files in gzip format directly (*.fastq.gz).
note: if *.fastq.gz files are not available, SRA files will be downloaded and converted to *.fastq.gz files.
-q, --fastq Convert SRA files to FASTQ format.
-t, --threads INT The number of threads to use for converting SRA to FASTQ files or compressing FASTQ files (default: 8).
-e, --merge Merge multiple fastq files into one fastq file for each Experiment, the accession can't be the Run ID.
-d, --database [ena|sra] The database to download SRA files from (default: auto-detect),
note: some SRA files may not be available in the ENA database, even if you specify "ena".
-p, --parallel INT Download sequencing data in parallel, the number of connections needs to be specified, such as -p 10.
note: breakpoint continuation cannot be shared between different numbers of connections.
-a, --aspera Use Aspera to download sequencing data, only support GSA/ENA database.
-h, --help Show the help information.
-v, --version Show the script version.
1. -i
, --input
输入你想下载的 accession,首先获取 accession 的 metadata,然后逐一对包含在内的 Run ID 进行下载。
iseq -i PRJNA211801
目前支持以下 5 个数据库的 6 种数据格式,支持的 accession 前缀如下:
Databases | BioProject | Study | BioSample | Sample | Experiment | Run |
---|---|---|---|---|---|---|
GSA | PRJC | CRA | SAMC | CRX | CRR | |
SRA | PRJNA | SRP | SAMN | SRS | SRX | SRR |
ENA | PRJEB | ERP | SAME | ERS | ERX | ERR |
DDBJ | PRJDB | DRP | SAMD | DRS | DRX | DRR |
GEO | GSE | GSM |
其中对于来自于 GEO 数据库的两种数据格式GSE/GSM
,会直接获取到与之关联的PRJNA/SAMN
,然后获取到包含在内的 Run ID 并进行测序数据的下载。因此,本质上还是从 SRA 数据库中下载测序数据。
以下是一些例子:
Accession Type | Prefixes | Example |
---|---|---|
BioProject | PRJEB, PRJNA, PRJDB, PRJC, GSE | PRJEB42779, PRJNA480016, PRJDB14838, PRJCA000613, GSE122139 |
Study | ERP, DRP, SRP, CRA | ERP126685, DRP009283, SRP158268, CRA000553 |
BioSample | SAMD, SAME, SAMN, SAMC | SAMD00258402, SAMEA7997453, SAMN06479985, SAMC017083 |
Sample | ERS, DRS, SRS, GSM | ERS5684710, DRS259711, SRS2024210, GSM7417667 |
Experiment | ERX, DRX, SRX, CRX | ERX5050800, DRX406443, SRX4563689, CRX020217 |
Run | ERR, DRR, SRR, CRR | ERR5260405, DRR421224, SRR7706354, CRR311377 |
总之,无论你的 accession 是 6 种数据格式的哪一种,最终都会对其中包含的 Run ID 逐一下载并检查文件的 md5 值,如果 md5 值和公共数据库中的不一致,则会进行至多 3 轮的重新下载。如果在 3 次尝试内下载并校验成功,则会将文件名存入success.log
中,否则,下载失败,文件名将会存入fail.log
中。
2. -m
, --metadata
只下载 accession 的样本信息,跳过测序数据的下载。
iseq -i PRJNA211801 -m
iseq -i CRR343031 -m
因此,无论使用不使用-m
参数,accession 的样本信息都会被获取到,如果 metadata 获取不到的话,iSeq 程序会退出,不会执行后续下载。
[!NOTE] > 注意 1:如果检索的 accession 在 SRA/ENA/DDBJ/GEO 数据库中,iSeq 会首先在 ENA 数据库中进行检索,如果可以检索到样本信息,则会通过ENA API[5]下载
TSV
格式的 metadata,通常有 191 列。但是,有些最新在 SRA 数据库中公开的数据可能不会及时同步到 ENA 数据库中。因此,如果一旦无法在 ENA 数据库中获取到 metadata 的信息,则直接通过SRA Database Backend[6]下载CSV
格式的 metadata,通常有 30 列。为了和 TSV 格式保持一致,会通过sed -i 's/,/t/g'
的方式改为 TSV 格式,如何单个字段含有逗号,可能会造成列的混乱。最终,你将得到名字为${accession}.metadata.tsv
的样本信息。
[!NOTE] >注意 2:如果检索的 accession 在 GSA 数据库中,iSeq 会通过 GSA 的getRunInfo[7]接口获取样本信息,下载
CSV
格式的 metadata,通常有 25 列,上述得到的 metadata 信息会被保存为${accession}.metadata.csv
文件。为了补充更加详细的 metadata 信息,iSeq 会自动通过 GSA 的exportExcelFile[8]接口获取 accession 所属的 Project 的 metadata 信息,下载XLSX
格式的 metadata,通常有 3 个 sheet,分别是Sample
,Experiment
,Run
。最终得到的 metadata 信息会被保存为${accession}.metadata.xlsx
文件。总而言之,你最终将得到名字为${accession}.metadata.csv
和CRA*.metadata.xlsx
的样本信息。
3. -g
, --gzip
直接下载 gzip 格式的 FASTQ 文件,如果不能直接下载,则会下载 SRA 文件并通过多线程分解和压缩转换为 gzip 格式。
iseq -i SRR1178105 -g
由于GSA
数据库直接存储的格式大多数为gzip
格式,因此,如果检索的 accession 来自于GSA
数据库,无论是否使用-g
参数都可以直接下载gzip
格式的 FASTQ 文件。如果 accession 来自于SRA/ENA/DDBJ/GEO
数据库,那么 iSeq 会首先访问ENA
数据库,如果可以直接下载gzip
格式的 FASTQ 文件,则会直接下载,否则,会下载SRA
文件并通过fasterq-dump
工具转换为FASTQ
, 然后通过pigz
工具对FASTQ
文件进行压缩,最终得到gzip
格式的 FASTQ 文件。
4. -q
, --fastq
将下载完成的 SRA 文件分解为多个未压缩的 FASTQ 格式。
iseq -i SRR1178105 -q
该参数只有在 accession 来自于SRA/ENA/DDBJ/GEO
数据库,并且下载的文件为 SRA 文件时才有效。总之,SRA 文件下载完成后,iSeq 会通过fasterq-dump
工具转换为FASTQ
文件,除此之外,可以通过-t
参数指定转换的线程数。
[!NOTE] > 注意 1:
-q
在下载单细胞数据,尤其对于 scATAC-Seq 数据,可以很好的分解出I1
,R1
,R2
,R3
四个文件。而如果通过-g
参数直接下载 FASTQ 文件,只会得到R1
,R3
两个文件(如:SRR13450125),这可能会导致后续数据分析时出现问题。
[!NOTE] > **
注意2
**:-q
和-g
同时使用的时候,会先下载 SRA 文件,然后通过fasterq-dump
工具转换为FASTQ
文件,最后通过pigz
压缩为 gzip 格式。并不是直接下载 gzip 格式的 FASTQ 文件,这对获取全面的单细胞数据非常有用。
5. -t
, --threads
指定分解 SRA 文件为 FASTQ 文件或者压缩 FASTQ 文件的线程数,默认为 8。
iseq -i SRR1178105 -q -t 10
考虑到测序数据一般都是大文件,因此,可以通过-t
参数指定分解的线程数,但是,线程数不是越多越好,因为线程数过多会导致 CPU 或者 IO 负载过高,尤其是fasterq-dump
会占用大量 IO,从而影响其他任务的执行。
6. -e
, --merge
将 Experiment 中的多个 FASTQ 文件合并为一个 FASTQ 文件。
iseq -i SRX003906 -e -g
虽然大多数情况下,一个 Experiment 仅包含一个 Run,但是有些测序数据中的 Experiment 中可能包含多个 Run(如SRX003906, CRX020217),因此,可以通过-e
参数将 Experiment 中的多个 FASTQ 文件合并为一个 FASTQ 文件。考虑到双端测序时,fastq_1
和fastq_2
文件需要同时合并且对应行号的序列名需要保持一致,因此,iSeq 会按照相同的顺序合并多个 FASTQ 文件。最终,对于单端测序数据会生成一个文件:SRX*.fastq.gz
,对于双端测序数据会生成两个文件:SRX*_1.fastq.gz
和SRX*_2.fastq.gz
。
[!NOTE] > 注意 1:如果 accession 是 Run ID,则不能使用
-e
参数。目前,iSeq 支持合并 gzip 压缩和未压缩的 FASTQ 文件,对于 bam 文件和 tar.gz 文件等暂不支持合并。
[!NOTE] > 注意 2:正常情况下,一个 Experiment 仅包含一个 Run 时,相同的 Run 应该有相同的前缀。如
SRR52991314_1.fq.gz
和SRR52991314_2.fq.gz
都有相同的前缀名SRR52991314
,此时,iSeq 会直接重命名为SRX*_1.fastq.gz
和SRX*_2.fastq.gz
。但是有例外的情况,如CRX006713中包含有一个 Run 为CRR007192
,但是该 Run 包含多个前缀名不同的文件,此时,iSeq 会直接重命名为SRX*_原本的文件名
,如这里将直接重命名为:CRX006713_CRD015671.gz
和CRX006713_CRD015672.gz
。
7. -d
, --database
指定下载 SRA 文件的数据库,支持ena
和sra
两种数据库。
iseq -i SRR1178105 -d sra
通常情况下,iSeq 默认会自动检测可用的数据库,所以不需要指定-d
参数。但是,有些 SRA 文件可能在 ENA 数据库中下载速度较慢,此时可以通过-d sra
强制指定从 SRA 数据库下载数据。
[!NOTE] > 注意:如果在 ENA 数据库中没有找到对应的 SRA 文件,即使指定了
-d ena
参数,iSeq 依旧会自动切换到 SRA 数据库进行下载。
8. -p
, --parallel
开启多线程下载,需要指定下载的线程数。
iseq -i PRJNA211801 -p 10
考虑到wget
在部分情况下下载速度较慢,因此,可以通过-p
参数让iSeq
调用axel
工具进行多线程下载。
[!NOTE] > 注意 1:多线程下载的断点续传功能只能在同一个线程内有效,即如果在第一次下载时使用了
-p 10
参数,那么在第二次下载时也需要使用-p 10
参数,否则无法实现断点续传。
[!NOTE] > 注意 2:如上,iSeq 将全程保持 10 个连接进行下载,因此在下载的过程中你将多次看到相同的
Connection * finished
弹出,这是因为有些连接下载完成后会立即释放,然后重新建立新的连接进行下载。
9. -a
, --aspera
使用 Aspera 进行下载。
iseq -i PRJNA211801 -a -g
由于Aspera
下载速度较快,因此,可以通过-a
参数让iSeq
调用ascp
工具进行下载。可惜的是,目前仅有GSA
和ENA
数据库支持Aspera
下载,NCBI SRA
数据库由于广泛采用了Google Cloud
和 AWS Cloud
技术以及其他原因(请看Avoid-using-ascp),暂无法使用Aspera
进行下载。
推文内容来源:
-
生信 | iSeq 超便捷!快速下载 GSA/SRA/ENA 的数据以及 metadata 信息 – 简书 ]: https://www.jianshu.com/p/7ed73f036590 -
BioOmics/iSeq: Download sequencing data and metadata from GSA, SRA, ENA, and DDBJ databases. https://github.com/BioOmics/iSeq
GSA: https://ngdc.cncb.ac.cn/gsa/
[2]SRA: https://www.ncbi.nlm.nih.gov/sra/
[3]ENA: https://www.ebi.ac.uk/ena/
[4]DDBJ: https://www.ddbj.nig.ac.jp/
[5]!NOTE] > 注意 1:如果检索的 accession 在 SRA/ENA/DDBJ/GEO 数据库中,iSeq 会首先在 ENA 数据库中进行检索,如果可以检索到样本信息,则会通过[ENA API: https://www.ebi.ac.uk/ena/portal/api/swagger-ui/index.html
[6]SRA Database Backend: https://trace.ncbi.nlm.nih.gov/Traces/sra-db-be/
[7]!NOTE] >注意 2:如果检索的 accession 在 GSA 数据库中,iSeq 会通过 GSA 的[getRunInfo: https://ngdc.cncb.ac.cn/gsa/search/getRunInfo
[8]exportExcelFile: https://ngdc.cncb.ac.cn/gsa/file/exportExcelFile
本篇文章来源于微信公众号:微因