2024/05/27 追記
近年、リファレンスグレードのゲノムアセンブリは大幅に多様化している。このような豊富なデータにより、ゲノム間の配列保存に関する情報を提供し、種の進化に関する重要な知見に貢献するゲノムのシンテニーの検出を含む、スケーラブルな複数種の比較ゲノム解析のための堅牢なツールの開発が急務となっている。ntSyntは、最小化グラフベースのアプローチにより、大規模な複数ゲノムのシンテニーブロックを計算するスケーラブルなユーティリティである。ntSyntは、約3Gbpの複数のゲノムを用いて、34GBのメモリを用い、最大2時間で79-100%のカバー率を持つシンテニーブロックを生成する。既存の最先端手法と比較して、ntSyntは多様な入力ゲノム配列とシンテニーブロックの粒度に柔軟に対応できる。我々(著者ら)は、ntSyntが促進するマクロシンテニックゲノム解析が、生命のツリー全体にわたる種内および種間の重要な進化的洞察を生み出す上で、広範な有用性を持つことを期待している。
https://github.com/bcgsc/ntSynt/wiki/de-novo-statistics-summary
visualization
https://github.com/bcgsc/ntSynt/tree/main/visualization_scripts
インストール
依存
mamba create -n ntsynt python=3.9 -y
conda activate ntsynt
mamba install -c bioconda -c conda-forge ntsynt -y
> ntSynt -h
usage: ntSynt [-h] -d DIVERGENCE [-p PREFIX] [-k K] [-w W] [-t T] [--fpr FPR] [-b BLOCK_SIZE] [--merge MERGE] [--w_rounds W_ROUNDS [W_ROUNDS ...]] [--indel INDEL] [-n] [--benchmark] [-f] [--dev] [-v] fastas [fastas ...]
ntSynt: Multi-genome synteny detection using minimizer graphs
positional arguments:
fastas Input genome fasta files
optional arguments:
-h, --help show this help message and exit
-d DIVERGENCE, --divergence DIVERGENCE
Approx. maximum percent sequence divergence between input genomes (Ex. -d 1 for 1% divergence).
This will be used to set --indel, --merge, --w_rounds, --block_size
See below for set values - You can also set any of those parameters yourself, which will override these settings.
-p PREFIX, --prefix PREFIX
Prefix for ntSynt output files [ntSynt.k<k>.w<w>]
-k K Minimizer k-mer size [24]
-w W Minimizer window size [1000]
-t T Number of threads [12]
--fpr FPR False positive rate for Bloom filter creation [0.025]
-b BLOCK_SIZE, --block_size BLOCK_SIZE
Minimum synteny block size (bp)
--merge MERGE Maximum distance between collinear synteny blocks for merging (bp).
Can also specify a multiple of the window size (ex. 3w)
--w_rounds W_ROUNDS [W_ROUNDS ...]
List of decreasing window sizes for synteny block refinement
--indel INDEL Threshold for indel detection (bp)
-n, --dry-run Print out the commands that will be executed
--benchmark Store benchmarks for each step of the ntSynt pipeline
-f, --force Run all ntSynt steps, regardless of existing output files
--dev Run in developer mode to retain intermediate files, log verbose output
-v, --version show program's version number and exit
Default parameter settings for divergence values:
< 1% divergence: --block_size 500 --indel 10000 --merge 10000 --w_rounds 100 10
1% - 10% divergence: --block_size 1000 --indel 50000 --merge 100000 --w_rounds 250 100
> 10% divergence: --block_size 10000 --indel 100000 --merge 1000000 --w_rounds 500 250
If any of these parameters are set manually, those values will override the above.
If you have any questions about ntSynt, please create a GitHub issue: https://github.com/bcgsc/ntSynt
テスト1
git clone https://github.com/bcgsc/ntSynt.git
cd ntSynt/tests/
./run_ntSynt_demo.sh

テストには線虫の染色体の一部が使われている。
実行方法
ゲノムを指定する。生のfastaファイルを受け付ける(gzip圧縮されているとエラーを起こす)。
ntSynt -d 5 assembly1.fa assembly2.fa assembly3.fa
- -d Approx. maximum percent sequence divergence between input genomes (Ex. -d 1 for 1% divergence).
出力例

メインの出力ファイルは<prefix>.synteny_blocks.tsvで、このTSVファイルに計算されたシンテニーブロックが記録される。TSVの列は以下の通り。

- synteny block ID - 同じIDを持つ行は同じsynteny blockの一部
- ゲノムファイル名
- ゲノム染色体/コンティグ
- ゲノム開始座標
- ゲノム終了座標
- 染色体/コンティグ鎖
- このシンテニブロックにマップされたミニマライザーの数
- 前のシンテニーブロックとの不連続の理由
(マニュアルより)
テスト2
実際にコマンドを打ちながら視覚化まで進める。*1のツールが必要。
https://github.com/bcgsc/ntSynt/tree/main/visualization_scripts
視覚化1
gggenomesを使ったリボンプロット
$1 パスを通す
cd ntSynt/visualization_scripts/
export PATH=$(pwd):$PATH
#2 適当なディレクトリにデータをコピー
cd ../tests/
mkdir ../test2/ && cp *fa.gz ../test2/
cd ../test2/
gzip -dv *gz
#3 ntsynt run:出力prefixは"ntSynt"
ntSynt celegans-chrII-III.fa celegans-chrII-III.A.fa celegans-chrII-III.B.fa --prefix ntSynt -d 0.5 --merge 3000 --indel 500
ntSynt.synteny_blocks.tsvが出力される。

#3 gggenomes向けにフォーマットを修正する
Usage: format_blocks_gggenomes.sh <synteny blocks TSV> <prefix> <length threshold> <assembly to use for colour> <FAI> <FAI> [FAI..]
#gggenomes向けにフォーマットを修正する
format_blocks_gggenomes.sh ntSynt.synteny_blocks.tsv ntSynt 500 celegans-chrII-III celegans-chrII-III.fa.fai celegans-chrII-III.A.fa.fai celegans-chrII-III.B.fa.fai
ntSynt.links.tsv、ntSynt.sequence_lengths.tsv、ntSynt.synteny_blocks.sorted.tsvが出力される。
#4 視覚化する。
plot_synteny_blocks_gggenomes.R -s ntSynt.sequence_lengths.tsv -l ntSynt.links.tsv
dplyrのarrange関数周りのエラーが出る。

視覚化2
ggplot2を使った染色体間のペインティングプロット
#1データをコピー
cd ../tests/
mkdir ../test2/ && cp celegans-chrII-III.fa.gz celegans-chrII-III.A.fa.gz ../test2/
cd ../test2/
#2 ntsynt run:出力prefixは"ntSynt"
ntSynt celegans-chrII-III.fa celegans-chrII-III.A.fa celegans-chrII-III.B.fa --prefix ntSynt -d 0.5 --merge 3000 --indel 500
ntSynt.synteny_blocks.tsvが出力される。
#3 ntSynt.synteny_blocks.tsvをchromosome painting R 向けに変換する
format_blocks_chromosome_painting.py --target celegans-chrII-III.fa ntSynt.synteny_blocks.tsv > format_chromosome_blocks.tsv
> cat format_chromosome_blocks.tsv

#4 plot_synteny_blocks-chromosome-painting.Rを使ってR scriptを実行する。
plot_synteny_blocks-chromosome-painting.R -b format_chromosome_blocks.tsv -p prefix
prefix.chr-paint-plot.png

その他
- analysis_scripts/denovo_synteny_block_stats.pyスクリプトを使うと計算されたsyntenyブロックのde novo統計量を高速に計算できる。
- visualization_scripts サブディレクトリのスクリプトを使って、計算されたsynteny ブロックを可視化できる。
引用
Multi-genome synteny detection using minimizer graph mappings
Lauren Coombe, Parham Kazemi, Johnathan Wong, Inanc Birol, René L. Warren
bioRxiv, Posted February 13, 2024.
*1
condaで作った仮想環境でRが見えないなら"conda acitvate base"するかRを入れる
$ mamba install conda-forge::r-base
$ which Rscript
さらにargparse, ggplot2、dplyr、gtools、scales、gggenesも必要
$ R
> install.packages("argparse")
> install.packages("ggplot2")
> install.packages("dplyr")
> install.packages("tidyr")
> install.packages("gtools")
> install.packages("scales")
> install.packages("devtools")
> devtools::install_github("thackl/gggenomes")
(condaで仮想環境を作っているなら、gggenomes以外はcondaを使って導入してもよい(仮想環境以外は汚染しない)。conda+Rのtool名で検索すればインストール手順は出てくる)
apt install miller -y
面倒なので全て導入後のdocker imageをpushしておきました。
$ docker pull kazumax/ntsynt
$ docker run -w /root/ntSynt -itv $(pwd):/data --rm kazumax/ntsynt