手元のPCでntデータベースを使用する機会があり、その際、時短に貢献してくれたツールについて備忘録を残しておきます。
第2世代シーケンサーやキャピラリーシーケンサー、Long readシーケンサーから得られたDNA配列の分類群を推定するとき、BLASTnによる相同性検索はメジャーな方法です。
BLASTnは誰でもweb上で行えるweb BLASTと、自身のPCに解析環境を用意して行うLocal Blast(BLAST+)があり、web BLASTはNCBIの配列データベースをそのまま使える利点がある一方で、カスタムやオートメーションには向かない印象。また、メンテナンスやサーバーダウンといった自身の管理下にないアクシデント時には、待つしか無いというデメリットがあります。
Local Blastはweb BLASTほど誰でも使えるといった簡便さは劣るものの、比較的、導入・使用までのハードルが低い相同性検索ツールです。
塩基配列に対してのBLAST検索はBLASTnを用い、その際必要となるのは以下の2点
- 系統推定したいDNA配列
- DNA配列データベース
BLAST検索したいと思うのであれば、なにかしら系統推定したいDNA配列は持っているでしょう。とすると、後はBLAST+の導入とDNA配列データベースが必要となります。
私の手元のPC環境はLinux PCとWindows PCだけなので、MaxOSで同様に動作するかは不明。
- Linux PC
- OS Ubuntu LTS 20.04
- Windows PC
- OS Windows 10
- WSL (Ubuntu LTS 20.04をインストール) 表現があっているかは不明
この記事の内容
BLAST+の導入
windowsにおいても、WSLの実行環境を整えているのであれば.exeなどの実行ファイルを用意しなくてもいいみたいです。
下記コマンドで導入
1 2 |
sudo apt update -y sudo apt isntall ncbi-blast+ |
確認
1 |
blastn -h |
ここまでは、すでに整っている方が大体なのではないかと思います。
pigzの導入
マルチコアで.gz圧縮・解凍を行ってくれるツール。.xzや.bz2についてはpxz/pixzやpbzip2があります。
1 2 3 4 |
# aptでのインストール sudo apt install pigz # condaベースのインストール mamba install pigz -y |
確認
1 |
pigz -h |
aria2の導入
curlやwgetと比べて、複数コネクションによる並列ダウンロードに対応しているようで、大きなファイルを短時間でダウンロードしたい場合には強力なツールです。
1 |
sudo apt install aria2 |
確認
1 |
aria2c -h |
これで必要なツールの導入は完了
NBCI v5 blastdbの確認
NCBIのデータベースはいくつかの括りがある。対象分類群が決まっているのであればそれにあったデータベースをダウンロードするほうが良いようです。
v5 ftpサイトは下記
最も大きい区分の塩基配列データベースはntデータベースのよう。2022年3月現在で58個に分割されているのですべてダウンロードします。おおよそ138GB。
aria2でntデータベースのblastdbをダウンロードしてtarとpigzで解凍する
aria2での並列ダウンロード
同時接続コネクション数は5 4。サーバーに負荷がかかるので、コネクション数には注意しましょう。
※ NCBI ftp serverから制限を受ける可能性があるので、aria2cのコネクト数を制限するオプションを追記
※ md5sumファイルの同時ダウンロードとファイルチェックを追記
※ –split=4 を追加
例えば00番のデータベースをダウンロードするのであれば、
1 |
aria2c --continue=true --max-connection-per-server=4 --split=4 --min-split-size=1M ftp://ftp.ncbi.nlm.nih.gov/blast/db/v5/nr.00.tar.gz |
とします。
ただ、これを59回もするのは面倒なので、for文で実行します。また、-Zオプションを使用して、md5sumファイルも同時にダウンロードします。
1 |
for i in `seq -f %02g 0 58` ; do aria2c --continue=true --max-connection-per-server=4 --split=4 --min-split-size=1M -Z ftp://ftp.ncbi.nlm.nih.gov/blast/db/v5/nt.$i.tar.gz ftp://ftp.ncbi.nlm.nih.gov/blast/db/v5/nt.$i.tar.gz.md5 ;done |
これでカレントディレクトリにnt.??.tar.gzファイルとnt.??.tar.gz.md5ファイルがダウンロードされました。
ダウンロードしたデータベースファイルのmd5sum値を確認していきます。
1 |
cat *.md5 > md5sum_v && md5sum -c md5sum_v |
nt.00.tar.gz: OK
nt.01.tar.gz: OK
nt.02.tar.gz: OK
といった感じでダウンロードした全ファイルのmd5値が一致していることを確認します。もし、FAILEDとなってしまった場合は再度ダウンロードしましょう。
tarとpigzで並列解凍
※ 解凍元のファイルを維持したままにする-kオプション を追記
tarはアーカイブ(複数のファイルやフォルダを1つにまとめる)ファイル(.tar)を作成したり、アーカイブされているものを分割できます。
pigzは単体では解凍と圧縮はできる一方で、アーカーブやアーカイブされているものを分割したりはできません。
そのため、複数階層・ファイルをもつフォルダの場合には、tarと一緒に利用することでフォルダを圧縮・解凍する可能です。
aria2でダウンロードしたnt.??.tar.gzの並列解凍は以下のようにします(ダウンロード時と同じくforを使用)。
1 2 3 4 |
# 解凍先フォルダを作成 mkdir -p nt-database # 解凍 for s in `seq -f %02g 0 58` ; do tar -xvf nt.$s.tar.gz -C nt-database/ -I "pigz -d -k"; done |
これでnt-databaseフォルダにblastnのデータベースファイルが用意できました。あとは好みの設定でblastnを実行して系統推定を進めてみてください。
感想
コアの多いPCの場合、並列実行や平行実行で作業・待ち時間を短縮できる可能性があるので、積極的に並列・並行化は進めていくといいと感じました。
xargsやGNU parallelも並列処理には有効だったのでぜひ使用してみてください。
Reference
- aria2
https://aria2.github.io/ - curlやwgetの数倍速い 爆速ダウンローダー aria2を使う
https://qiita.com/TokyoMickey/items/cb51805a19dcee416151#%E3%81%94%E6%B3%A8%E6%84%8F - マルチスレッドでのtar
https://mickey-happygolucky.hatenablog.com/entry/2018/04/21/011811
各ツールのUSAGE
blastn
1 |
blastn -h |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
USAGE blastn [-h] [-help] [-import_search_strategy filename] [-export_search_strategy filename] [-task task_name] [-db database_name] [-dbsize num_letters] [-gilist filename] [-seqidlist filename] [-negative_gilist filename] [-negative_seqidlist filename] [-taxids taxids] [-negative_taxids taxids] [-taxidlist filename] [-negative_taxidlist filename] [-entrez_query entrez_query] [-db_soft_mask filtering_algorithm] [-db_hard_mask filtering_algorithm] [-subject subject_input_file] [-subject_loc range] [-query input_file] [-out output_file] [-evalue evalue] [-word_size int_value] [-gapopen open_penalty] [-gapextend extend_penalty] [-perc_identity float_value] [-qcov_hsp_perc float_value] [-max_hsps int_value] [-xdrop_ungap float_value] [-xdrop_gap float_value] [-xdrop_gap_final float_value] [-searchsp int_value] [-penalty penalty] [-reward reward] [-no_greedy] [-min_raw_gapped_score int_value] [-template_type type] [-template_length int_value] [-dust DUST_options] [-filtering_db filtering_database] [-window_masker_taxid window_masker_taxid] [-window_masker_db window_masker_db] [-soft_masking soft_masking] [-ungapped] [-culling_limit int_value] [-best_hit_overhang float_value] [-best_hit_score_edge float_value] [-subject_besthit] [-window_size int_value] [-off_diagonal_range int_value] [-use_index boolean] [-index_name string] [-lcase_masking] [-query_loc range] [-strand strand] [-parse_deflines] [-outfmt format] [-show_gis] [-num_descriptions int_value] [-num_alignments int_value] [-line_length line_length] [-html] [-sorthits sort_hits] [-sorthsps sort_hsps] [-max_target_seqs num_sequences] [-num_threads int_value] [-remote] [-version] DESCRIPTION Nucleotide-Nucleotide BLAST 2.9.0+ Use '-help' to print detailed descriptions of command line arguments |
pigz
1 |
pgiz -h |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
Usage: pigz [options] [files ...] will compress files in place, adding the suffix '.gz'. If no files are specified, stdin will be compressed to stdout. pigz does what gzip does, but spreads the work over multiple processors and cores when compressing. Options: -0 to -9, -11 Compression level (level 11, zopfli, is much slower) --fast, --best Compression levels 1 and 9 respectively -b, --blocksize mmm Set compression block size to mmmK (default 128K) -c, --stdout Write all processed output to stdout (won't delete) -d, --decompress Decompress the compressed input -f, --force Force overwrite, compress .gz, links, and to terminal -F --first Do iterations first, before block split for -11 -h, --help Display a help screen and quit -i, --independent Compress blocks independently for damage recovery -I, --iterations n Number of iterations for -11 optimization -J, --maxsplits n Maximum number of split blocks for -11 -k, --keep Do not delete original file after processing -K, --zip Compress to PKWare zip (.zip) single entry format -l, --list List the contents of the compressed input -L, --license Display the pigz license and quit -m, --no-time Do not store or restore mod time -M, --time Store or restore mod time -n, --no-name Do not store or restore file name or mod time -N, --name Store or restore file name and mod time -O --oneblock Do not split into smaller blocks for -11 -p, --processes n Allow up to n compression threads (default is the number of online processors, or 8 if unknown) -q, --quiet Print no messages, even on error -r, --recursive Process the contents of all subdirectories -R, --rsyncable Input-determined block locations for rsync -S, --suffix .sss Use suffix .sss instead of .gz (for compression) -t, --test Test the integrity of the compressed input -v, --verbose Provide more verbose output -V --version Show the version of pigz -Y --synchronous Force output file write to permanent storage -z, --zlib Compress to zlib (.zz) instead of gzip format -- All arguments after "--" are treated as files |
aria2
1 |
aria2c -h |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 |
Usage: aria2c [OPTIONS] [URI | MAGNET | TORRENT_FILE | METALINK_FILE]... Printing options tagged with '#basic'. See 'aria2c -h#help' to know all available tags. Options: -v, --version Print the version number and exit. Tags: #basic -h, --help[=TAG|KEYWORD] Print usage and exit. The help messages are classified with tags. A tag starts with "#". For example, type "--help=#http" to get the usage for the options tagged with "#http". If non-tag word is given, print the usage for the options whose name includes that word. Possible Values: #basic, #advanced, #http, #https, #ftp, #metalink, #bittorrent, #cookie, #hook, #file, #rpc, #checksum, #experimental, #deprecated, #help, #all Default: #basic Tags: #basic, #help -l, --log=LOG The file name of the log file. If '-' is specified, log is written to stdout. Possible Values: /path/to/file, - Tags: #basic -d, --dir=DIR The directory to store the downloaded file. Possible Values: /path/to/directory Default: /home/naoki/Desktop Tags: #basic, #file -o, --out=FILE The file name of the downloaded file. It is always relative to the directory given in -d option. When the -Z option is used, this option will be ignored. Possible Values: /path/to/file Tags: #basic, #http, #ftp, #file -s, --split=N Download a file using N connections. If more than N URIs are given, first N URIs are used and remaining URLs are used for backup. If less than N URIs are given, those URLs are used more than once so that N connections total are made simultaneously. The number of connections to the same host is restricted by the --max-connection-per-server option. See also the --min-split-size option. Possible Values: 1-* Default: 5 Tags: #basic, #http, #ftp --file-allocation=METHOD Specify file allocation method. 'none' doesn't pre-allocate file space. 'prealloc' pre-allocates file space before download begins. This may take some time depending on the size of the file. If you are using newer file systems such as ext4 (with extents support), btrfs, xfs or NTFS (MinGW build only), 'falloc' is your best choice. It allocates large(few GiB) files almost instantly. Don't use 'falloc' with legacy file systems such as ext3 and FAT32 because it takes almost same time as 'prealloc' and it blocks aria2 entirely until allocation finishes. 'falloc' may not be available if your system doesn't have posix_fallocate() function. 'trunc' uses ftruncate() system call or platform-specific counterpart to truncate a file to a specified length. Possible Values: none, prealloc, trunc, falloc Default: prealloc Tags: #basic, #file -V, --check-integrity[=true|false] Check file integrity by validating piece hashes or a hash of entire file. This option has effect only in BitTorrent, Metalink downloads with checksums or HTTP(S)/FTP downloads with --checksum option. If piece hashes are provided, this option can detect damaged portions of a file and re-download them. If a hash of entire file is provided, hash check is only done when file has been already download. This is determined by file length. If hash check fails, file is re-downloaded from scratch. If both piece hashes and a hash of entire file are provided, only piece hashes are used. Possible Values: true, false Default: false Tags: #basic, #metalink, #bittorrent, #file, #checksum -c, --continue[=true|false] Continue downloading a partially downloaded file. Use this option to resume a download started by a web browser or another program which downloads files sequentially from the beginning. Currently this option is only applicable to http(s)/ftp downloads. Possible Values: true, false Default: false Tags: #basic, #http, #ftp -i, --input-file=FILE Downloads URIs found in FILE. You can specify multiple URIs for a single entity: separate URIs on a single line using the TAB character. Reads input from stdin when '-' is specified. Additionally, options can be specified after each line of URI. This optional line must start with one or more white spaces and have one option per single line. See INPUT FILE section of man page for details. See also --deferred-input option. Possible Values: /path/to/file, - Tags: #basic -j, --max-concurrent-downloads=N Set maximum number of parallel downloads for every static (HTTP/FTP) URL, torrent and metalink. See also --split and --optimize-concurrent-downloads options. Possible Values: 1-* Default: 5 Tags: #basic -Z, --force-sequential[=true|false] Fetch URIs in the command-line sequentially and download each URI in a separate session, like the usual command-line download utilities. Possible Values: true, false Default: false Tags: #basic -x, --max-connection-per-server=NUM The maximum number of connections to one server for each download. Possible Values: 1-16 Default: 1 Tags: #basic, #http, #ftp -k, --min-split-size=SIZE aria2 does not split less than 2*SIZE byte range. For example, let's consider downloading 20MiB file. If SIZE is 10M, aria2 can split file into 2 range [0-10MiB) and [10MiB-20MiB) and download it using 2 sources(if --split >= 2, of course). If SIZE is 15M, since 2*15M > 20MiB, aria2 does not split file and download it using 1 source. You can append K or M(1K = 1024, 1M = 1024K). Possible Values: 1048576-1073741824 Default: 20M Tags: #basic, #http, #ftp --ftp-user=USER Set FTP user. This affects all URLs. Tags: #basic, #ftp --ftp-passwd=PASSWD Set FTP password. This affects all URLs. Tags: #basic, #ftp --http-user=USER Set HTTP user. This affects all URLs. Tags: #basic, #http --http-passwd=PASSWD Set HTTP password. This affects all URLs. Tags: #basic, #http --load-cookies=FILE Load Cookies from FILE using the Firefox3 format and Mozilla/Firefox(1.x/2.x)/Netscape format. Possible Values: /path/to/file Tags: #basic, #http, #cookie -S, --show-files[=true|false] Print file listing of .torrent, .meta4 and .metalink file and exit. More detailed information will be listed in case of torrent file. Possible Values: true, false Default: false Tags: #basic, #metalink, #bittorrent --max-overall-upload-limit=SPEED Set max overall upload speed in bytes/sec. 0 means unrestricted. You can append K or M(1K = 1024, 1M = 1024K). To limit the upload speed per torrent, use --max-upload-limit option. Possible Values: 0-* Default: 0 Tags: #basic, #bittorrent -u, --max-upload-limit=SPEED Set max upload speed per each torrent in bytes/sec. 0 means unrestricted. You can append K or M(1K = 1024, 1M = 1024K). To limit the overall upload speed, use --max-overall-upload-limit option. Possible Values: 0-* Default: 0 Tags: #basic, #bittorrent -T, --torrent-file=TORRENT_FILE The path to the .torrent file. Possible Values: /path/to/file Tags: #basic, #bittorrent --listen-port=PORT... Set TCP port number for BitTorrent downloads. Multiple ports can be specified by using ',', for example: "6881,6885". You can also use '-' to specify a range: "6881-6999". ',' and '-' can be used together. Possible Values: 1024-65535 Default: 6881-6999 Tags: #basic, #bittorrent --enable-dht[=true|false] Enable IPv4 DHT functionality. It also enables UDP tracker support. If a private flag is set in a torrent, aria2 doesn't use DHT for that download even if ``true`` is given. Possible Values: true, false Default: true Tags: #basic, #bittorrent --dht-listen-port=PORT... Set UDP listening port used by DHT(IPv4, IPv6) and UDP tracker. Multiple ports can be specified by using ',', for example: "6881,6885". You can also use '-' to specify a range: "6881-6999". ',' and '-' can be used together. Possible Values: 1024-65535 Default: 6881-6999 Tags: #basic, #bittorrent --enable-dht6[=true|false] Enable IPv6 DHT functionality. Use --dht-listen-port option to specify port number to listen on. See also --dht-listen-addr6 option. Possible Values: true, false Default: false Tags: #basic, #bittorrent --dht-listen-addr6=ADDR Specify address to bind socket for IPv6 DHT. It should be a global unicast IPv6 address of the host. Tags: #basic, #bittorrent -M, --metalink-file=METALINK_FILE The file path to the .meta4 and .metalink file. Reads input from stdin when '-' is specified. Possible Values: /path/to/file, - Tags: #basic, #metalink URI, MAGNET, TORRENT_FILE, METALINK_FILE: You can specify multiple HTTP(S)/FTP URIs. Unless you specify -Z option, all URIs must point to the same file or downloading will fail. You can also specify arbitrary number of BitTorrent Magnet URIs, torrent/ metalink files stored in a local drive. Please note that they are always treated as a separate download. You can specify both torrent file with -T option and URIs. By doing this, download a file from both torrent swarm and HTTP/FTP server at the same time, while the data from HTTP/FTP are uploaded to the torrent swarm. For single file torrents, URI can be a complete URI pointing to the resource or if URI ends with '/', 'name' in torrent file is added. For multi-file torrents, 'name' and 'path' in torrent are added to form a URI for each file. Make sure that URI is quoted with single(') or double(") quotation if it contains "&" or any characters that have special meaning in shell. About the number of connections Since 1.10.0 release, aria2 uses 1 connection per host by default and has 20MiB segment size restriction. So whatever value you specify using -s option, it uses 1 connection per host. To make it behave like 1.9.x, use --max-connection-per-server=4 --min-split-size=1M. Refer to man page for more information. |