工具:iSeq下载公开SRA数据科研利器
介绍
高通量测序技术[下一代测序(NGS)]越来越多地用于解决各种生物学问题。尽管NGS数据中包含丰富的信息,特别是来自NGDC基因组序列档案(GSA)等存储库的数据集不断增长,但对公共测序数据和元数据的程序化访问仍然有限。
我们开发iSeq是为了通过命令行界面从多个数据库中快速、直接地检索元数据和NGS数据。iSeq支持从GSA, SRA, ENA和DDBJ数据库同时检索。它处理超过25种不同的接入格式,支持Aspera下载、并行下载、多线程进程、FASTQ文件合并和完整性验证,简化了数据采集并增强了重新分析NGS数据的能力。
特性
- 多数据库支持:支持多个生物信息学数据库(GSA/SRA/ENA/DDBJ/GEO)。
- 多输入格式:支持多种访问编号(项目、研究、样本、实验或运行访问编号)。 元数据下载:支持为每个访问编号下载样本元数据。
- 文件格式选择:用户可以选择直接下载 gzip 格式的 FASTQ 文件,或者下载 SRA 文件并将其转换为 FASTQ 格式。
- 多线程支持:支持使用多线程加速 SRA 转换为 FASTQ 文件或 FASTQ 文件的压缩。
- 文件合并:对于实验级别的访问编号,脚本可以将多个 FASTQ 文件合并为一个。
- 并行下载:支持并行下载连接,允许指定连接数量以加快下载速度。 支持 Aspera 高速下载:对于 GSA/ENA 数据库,脚本支持使用
- Aspera 进行高速数据传输。 自动重试机制:如果下载或验证失败,脚本将自动重试,直到达到设定的尝试次数。
- 自动文件验证:下载完成后,脚本将自动验证文件的完整性,包括检查文件大小和 MD5 校验和。
- 错误处理:脚本在遇到错误时提供错误消息和解决方案建议。
安装
使用conda安装
代码语言:javascript代码运行次数:0运行复制conda install bioconda::iseq
查看版本
代码语言:javascript代码运行次数:0运行复制# Use the following command to check whether dependent software is installed
iseq --version
案例
- 通过项目编号下载
iseq -i PRJNA211801
- 使用Aspera下载fastq
iseq -i SRR_Acc_List.txt -a -g
使用手册
代码语言:javascript代码运行次数:0运行复制$ iseq --help
Usage:
iseq -i accession [options]
Required option:
-i, --input [text|file] Single accession or a file containing multiple accessions.
Note: Only one accession per line in the file, all accessions must be from the same database.
Optional options:
-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 [ex|sa|st] Merge multiple fastq files into one fastq file for each Experiment, Sample or Study.
-d, --database [ena|sra] Specify the database to download SRA sequencing data (default: ena).
Note: new 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.
-s, --speed int Download speed limit (MB/s) (default: 1000 MB/s).
-o, --output text The output directory. If not exists, it will be created (default: current directory).
-h, --help Show the help information.
-v, --version Show the script version.
1. -i
, --input
输入你想下载的accession,首先获取accession的metadata,然后逐一对包含在内的Run ID进行下载。v1.1.0版本之后可以接收文件输入,每行一个accession。但是要确保这些accession来自同一个数据库,因为不同数据库使用的密钥有时候不一致会导致下载失败,尤其是在使用aspera下载数据的时候。而且这个文件最好在linux下通过vim编辑,要不然从windows上传的话可能文字编码有问题影响下载(如win通常是CR LF, 而Linux能识别的是LF格式的)。
代码语言:javascript代码运行次数:0运行复制iseq -i PRJNA211801
Firstly, iSeq will retrieve the metadata of the accession, then proceed to download each Run contained within.
目前支持以下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的样本信息,跳过测序数据的下载。
代码语言:javascript代码运行次数:0运行复制iseq -i PRJNA211801 -m
iseq -i CRR343031 -m
因此,无论使用不使用-m参数,accession的样本信息都会被获取到,如果metadata获取不到的话,iSeq程序会退出,不会执行后续下载。
Note 注意1:如果检索的accession在SRA/ENA/DDBJ/GEO数据库中,iSeq会首先在ENA数据库中进行检索,如果可以检索到样本信息,则会通过ENA API下载TSV格式的metadata,通常有191列。但是,有些最新在SRA数据库中公开的数据可能不会及时同步到ENA数据库中。因此,如果一旦无法在ENA数据库中获取到metadata的信息,则直接通过SRA Database Backend下载CSV格式的metadata,通常有30列。为了和TSV格式保持一致,会通过sed -i 's/,/\t/g'的方式改为TSV格式,如何单个字段含有逗号,可能会造成列的混乱。最终,你将得到名字为${accession}.metadata.tsv的样本信息。
Note 注意2:如果检索的accession在GSA数据库中,iSeq会通过GSA的getRunInfo接口获取样本信息,下载CSV格式的metadata,通常有25列,上述得到的metadata信息会被保存为${accession}.metadata.csv文件。为了补充更加详细的metadata信息,iSeq会自动通过GSA的exportExcelFile接口获取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格式。
代码语言:javascript代码运行次数:0运行复制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文件。
[!TIP] parallel-fastq-dump can also convert SRA to gzip-compressed FASTQ files, typically 2-3 timesfaster than
fasterq-dump + pigz
. However, considering IO limitations,iSeq
currently does not supportparallel-fastq-dump
.
4. -q
, --fastq
将下载完成的SRA文件分解为多个未压缩的FASTQ格式。
代码语言:javascript代码运行次数:0运行复制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。
代码语言:javascript代码运行次数:0运行复制iseq -i SRR1178105 -q -t 10
考虑到测序数据一般都是大文件,因此,可以通过-t参数指定分解的线程数,但是,线程数不是越多越好,因为线程数过多会导致CPU或者IO负载过高,尤其是fasterq-dump会占用大量IO,从而影响其他任务的执行。
6. -e
, --merge
将Experiment中的多个FASTQ文件合并为一个FASTQ文件。 v1.1.0版本之后,不仅可以对同一个Experiment中的多个FASTQ文件合并,还可以选择不用的参数对Sample (-e sa)或者Study (-e st)进行合并。
代码语言:javascript代码运行次数:0运行复制iseq -i SRX003906 -g -e ex
虽然大多数情况下,一个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。对于Sample (-e sa)或者Study (-e st)同理。
Note 注意1:如果accession是Run ID,则不能使用-e参数,反正就是你想合并的时候,输入的accession必须大于等于要合并的那一级所需要的accession。目前,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两种数据库。
代码语言:javascript代码运行次数:0运行复制iseq -i SRR1178105 -d sra
通常情况下,iSeq默认会自动检测可用的数据库,所以不需要指定-d参数。但是,有些SRA文件可能在ENA数据库中下载速度较慢,此时可以通过-d sra强制指定从SRA数据库下载数据。
[!NOTE] 注意:如果在ENA数据库中没有找到对应的SRA文件,即使指定了-d ena参数,iSeq依旧会自动切换到SRA数据库进行下载。
8. -p
, --parallel
开启多线程下载,需要指定下载的线程数。
代码语言:javascript代码运行次数:0运行复制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进行下载。
代码语言:javascript代码运行次数:0运行复制iseq -i PRJNA211801 -a -g
由于Aspera下载速度较快,因此,可以通过-a参数让iSeq调用ascp工具进行下载。可惜的是,目前仅有GSA和ENA数据库支持Aspera下载,NCBI SRA数据库由于广泛采用了Google Cloud 和 AWS Cloud技术以及其他原因(请看Avoid-using-ascp),暂无法使用Aspera进行下载。
[!NOTE] 注意1:在访问GSA数据库时,如果存在HUAWEI Cloud的下载链接,iSeq会优先通过HUAWEI Cloud通道下载,即使使用了-a参数,iSeq也会自动切换到HUAWEI Cloud下载。这么做的原因是HUAWEI Cloud下载速度更快和稳定。因此,在下载GSA数据时,推荐使用-a参数,这样如果访问不到HUAWEI Cloud通道,通过Aspera通道下载速度也不慢,否则,只能通过wget或者axel进行下载,而这两种方式下载速度较慢。
[!NOTE] 注意2:由于Aspera需要key文件,因此,iSeq会自动在conda环境或者~/.aspera目录下查找key文件,如果没有找到,则无法下载。
10. -o
, --output
v1.1.0之后可以选择输出文件的位置,如果不存在相应的文件夹,则创建
代码语言:javascript代码运行次数:0运行复制iseq -i SRR931847 -o PRJNA211801
11. -s
, --speed
v1.2.0之后可以选择限速下载,单位是MB/s
代码语言:javascript代码运行次数:0运行复制iseq -i SRR931847 -s 10
输出
- If the query accession in SRA/ENA/DDBJ/GEO database, the following files will be generated:
Output | Description |
---|---|
SRA files | Can be converted to FASTQ files using -q option |
.metadata.tsv | Metadata for query accession |
success.log | Save the SRA file name that has been downloaded successfully |
fail.log | Save the SRA file name that has been downloaded failed |
- If the query accession in GSA database, the following files will be generated:
Output | Description |
---|---|
GSA files | Mostly in *.gz format, and a few are bam/tar/bz2 format |
.metadata.csv | Metadata for query accession |
.metadata.xlsx | Metadata for Project including query accession in xlsx format |
success.log | Save the GSA file name that has been downloaded successfully |
fail.log | Save the GSA file name that has been downloaded failed |
其他同类型软件
iSeq 的灵感来自 fastq-dl, fetchngs, pysradb, Kingfisher. 软件比较:
Software name | Program languages | Supported databases | Supported accessions | Supported formats | Supported methods | Fetch metadata | MD5 check | Resumable download | Parallel download | Merge FASTQ | Skip downloaded | Conda installable | URL |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
iSeq | Shell | GSA, SRA, ENA, DDBJ, GEO | All | fq, fq.gz, sra, bam | wget, axel, aspera | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | 本文发布于:2025-05-27,感谢您对本站的认可! 版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。 |
发布评论