macでインフォマティクス

macでインフォマティクス

HTS (NGS) 関連のインフォマティクス情報についてまとめています。

複数のラージゲノム間のシンテニーを高速に検出する ntsynt

2024/05/27 追記

 

 近年、リファレンスグレードのゲノムアセンブリは大幅に多様化している。このような豊富なデータにより、ゲノム間の配列保存に関する情報を提供し、種の進化に関する重要な知見に貢献するゲノムのシンテニーの検出を含む、スケーラブルな複数種の比較ゲノム解析のための堅牢なツールの開発が急務となっている。ntSyntは、最小化グラフベースのアプローチにより、大規模な複数ゲノムのシンテニーブロックを計算するスケーラブルなユーティリティである。ntSyntは、約3Gbpの複数のゲノムを用いて、34GBのメモリを用い、最大2時間で79-100%のカバー率を持つシンテニーブロックを生成する。既存の最先端手法と比較して、ntSyntは多様な入力ゲノム配列とシンテニーブロックの粒度に柔軟に対応できる。我々(著者ら)は、ntSyntが促進するマクロシンテニックゲノム解析が、生命のツリー全体にわたる種内および種間の重要な進化的洞察を生み出す上で、広範な有用性を持つことを期待している。

 

wiki

https://github.com/bcgsc/ntSynt/wiki/de-novo-statistics-summary

visualization

https://github.com/bcgsc/ntSynt/tree/main/visualization_scripts

 

インストール

依存

  • python 3.9+ with modules:
  • intervaltree
  • pybedtools
  • ncls
  • python-igraph

Github

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

 

その他

引用

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名で検索すればインストール手順は出てくる)

 

#mlrも必要

apt install miller -y

 

面倒なので全て導入後のdocker imageをpushしておきました。

$ docker pull kazumax/ntsynt 

$ docker run -w /root/ntSynt -itv $(pwd):/data --rm kazumax/ntsynt