macでインフォマティクス

macでインフォマティクス

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

ロングリード配列やコンティグ配列をビニングする LRBinner

 

 メタゲノム解析の進歩により、環境から直接微生物群集を研究することが可能になった。メタゲノム解析は、微生物群集の種を特定するための重要なステップである。次世代シーケンサーのリードは、ショートリードの情報が限られているため、通常コンティグにアセンブルされる。第三世代シーケンサーでは、ショートリードからアセンブルしたコンティグに近い長さのリードを得ることができる。しかし、既存のコンティグビニングツールは、カバレッジ情報がないことや高いエラー率の存在により、ロングリードに直接適用することができない。既存のロングリードのビニングツールは、組成のみを使用するか、組成とカバレッジ情報を別々に使用するかのどちらかである。このため、存在量の少ない生物種に対応するビンを無視したり、coveragesが均一でない生物種に対応するビンを誤って分割してしまうことがある。本発表では、完全なロングリードのデータを使い、組成と被覆率を組み合わせた、参照不要のビン分割手法であるLRBinnerを紹介する。また、LRBinnerは距離ヒストグラムに基づくクラスタリングアルゴリズムを用いて、様々な大きさのクラスタを抽出することができる。
 シミュレーションデータと実データを用いた実験の結果、LRBinnerは、サンプリングを行わない完全なデータセットを扱う場合、ほとんどのケースで最良のビニング精度を達成することが分かった。さらに、LRBinnerを用いたビニング処理により、ビニング処理に必要な計算量を削減し、十分なビン化品質を達成することができた。
 LRBinnerは、メタゲノム解析におけるロングリードのビニングを支援するために、ディープラーニング技術を効果的な特徴量の集約に利用できることを示す。さらに、ロングリードの正確なビニングは、特に複雑なデータセットにおけるメタゲノム解析の改善をサポートする。また、ビニングはアセンブリに必要なリソースを削減することにも役立つ。LRBinnerのソースコードは、https://github.com/anuradhawick/LRBinner で自由に利用することができる。

 

 

インストール

依存

LRBinner is coded purely using C++ (v9) and Python 3.7. To run LRBinner, you will need to install the following python and C++ modules.

Python dependencies
Essential libraries

  • numpy 1.16.4
  • scipy 1.3.0
  • seaborn 0.9.0
  • h5py 2.9.0
  • tabulate 0.8.7
  • pytorch 1.4.0

Essential for contig binning

  • HDBSCAN

C++ requirements

  • GCC version 9.1.0
  • OpenMP 4.5 for multi processing

Github

mamba create -n lrbinner python=3.7 -y
conda activate lrbinner
mamba install -c conda-forge -c bioconda numpy scipy seaborn h5py tabulate pytorch hdbscan gcc openmp tqdm biopython fraggenescan hmmer
#pytorchははいらなかったのでpipで導入
pip install torch

git clone https://github.com/anuradhawick/LRBinner.git
cd LRBinner/
python setup.py build

> python LRBinner -h

$ python LRBinner -h

 

usage: LRBinner [-h] [--version] {reads,contigs} ...

 

LRBinner Help. A tool developed for binning of metagenomics long reads

 

(PacBio/ONT) and long read assemblies. Tool utilizes composition and coverage

 

profiles of reads based on k-mer frequencies to perform dimension reduction

 

via a deep variational auto-encoder. Dimension reduced reads are then

clustered. Minimum RAM requirement is 9GB (4GB GPU if cuda used).

 

optional arguments:

 

  -h, --help       show this help message and exit

 

  --version, -v    Show version.

 

LRBinner running Mode:

 

  {reads,contigs}

 

    reads          for binning reads

    contigs        for binning contigs

 

python LRBinner reads -h

usage: LRBinner reads [-h] --reads-path READS_PATH [--k-size {3,4,5}]

                      [--bin-size BIN_SIZE] [--bin-count BIN_COUNT]

                      [--ae-epochs AE_EPOCHS] [--ae-dims AE_DIMS]

                      [--ae-hidden AE_HIDDEN] [--threads THREADS] [--separate]

                      [--cuda] [--resume] --output <DEST>

                      [--min-bin-size MIN_BIN_SIZE]

                      [--bin-iterations BIN_ITERATIONS]

 

optional arguments:

  -h, --help            show this help message and exit

  --reads-path READS_PATH, -r READS_PATH

                        Reads path for binning

  --k-size {3,4,5}, -k {3,4,5}

                        k value for k-mer frequency vector. Choose between 3

                        and 5.

  --bin-size BIN_SIZE, -bs BIN_SIZE

                        Bin size for the coverage histogram.

  --bin-count BIN_COUNT, -bc BIN_COUNT

                        Number of bins for the coverage histogram.

  --ae-epochs AE_EPOCHS

                        Epochs for the auto_encoder.

  --ae-dims AE_DIMS     Size of the latent dimension.

  --ae-hidden AE_HIDDEN

                        Hidden layer sizes eg: 128,128

  --threads THREADS, -t THREADS

                        Thread count for computations

  --separate, -sep      Flag to separate reads/contigs into bins detected.

                        Avaialbe in folder named 'binned'.

  --cuda                Whether to use CUDA if available.

  --resume              Continue from the last step or the binning step (which

                        ever comes first). Can save time needed count k-mers.

  --output <DEST>, -o <DEST>

                        Output directory

  --min-bin-size MIN_BIN_SIZE, -mbs MIN_BIN_SIZE

                        The minimum number of reads a bin should have.

  --bin-iterations BIN_ITERATIONS, -bit BIN_ITERATIONS

                        Number of iterations for cluster search. Use 0 for

                        exhaustive search.

> python LRBinner contigs -h

usage: LRBinner contigs [-h] --reads-path READS_PATH [--k-size {3,4,5}]

                        [--bin-size BIN_SIZE] [--bin-count BIN_COUNT]

                        [--ae-epochs AE_EPOCHS] [--ae-dims AE_DIMS]

                        [--ae-hidden AE_HIDDEN] [--threads THREADS]

                        [--separate] [--cuda] [--resume] --output <DEST>

                        --contigs CONTIGS

 

optional arguments:

  -h, --help            show this help message and exit

  --reads-path READS_PATH, -r READS_PATH

                        Reads path for binning

  --k-size {3,4,5}, -k {3,4,5}

                        k value for k-mer frequency vector. Choose between 3

                        and 5.

  --bin-size BIN_SIZE, -bs BIN_SIZE

                        Bin size for the coverage histogram.

  --bin-count BIN_COUNT, -bc BIN_COUNT

                        Number of bins for the coverage histogram.

  --ae-epochs AE_EPOCHS

                        Epochs for the auto_encoder.

  --ae-dims AE_DIMS     Size of the latent dimension.

  --ae-hidden AE_HIDDEN

                        Hidden layer sizes eg: 128,128

  --threads THREADS, -t THREADS

                        Thread count for computations

  --separate, -sep      Flag to separate reads/contigs into bins detected.

                        Avaialbe in folder named 'binned'.

  --cuda                Whether to use CUDA if available.

  --resume              Continue from the last step or the binning step (which

                        ever comes first). Can save time needed count k-mers.

  --output <DEST>, -o <DEST>

                        Output directory

  --contigs CONTIGS, -c CONTIGS

                        Contigs path

 

 

 

実行方法

ロングリードを直接binningするモード(reads )とcontigをbinningするモード(contigs)

がある。

1、LRBinnerの実行

レポジトリからリンクされる形でテストデータが公開されている。平均8500-bp、最小5000、最長37000-bpのシークエンシングリードのfastaファイルとなっている。

python LRBinner reads -r reads.fasta -bc 10 -bs 32 -o outdir --resume --cuda -mbs 5000 --ae-dims 4 --ae-epochs 200 -bit 0 -t 32

生のfastqには対応しているがgzipされたfasta/fastq配列には対応してない。

 

リードを提供した場合、各配列がどのbinに属するかの番号が出力ディレクトリ内に書き出される。

 

2、bin配列にリードを分類する。出力ディレクトリにあるPKLファイルと1で使ったリードファイルを指定する。

python separate_reads.py --reads reads.fasta -b outdir/binning_result.pkl -o bin

出力例

bin/

bin-1/

リードは重複しているので、このあと単離されたゲノムのアセンブラか、まだ汚染があるならメタゲノムアセンブラで個別にDe novoアセンブルする(*1)。

 

試した限り、k-mer frequency(3,4,5)の値で結果は変化することが多いです。issuesではパラメータについても議論されています。興味がある方は確認してみてください。

引用

Binning long reads in metagenomics datasets using composition and coverage information
Anuradha Wickramarachchi & Yu Lin 
Algorithms for Molecular Biology volume 17, Article number: 14 (2022)

 

関連


 

*1

ループで回す。

cd bin_dir/

#forでループ(ONTのリードの例)
mkdir fasta
for file in `\find bin-* -maxdepth 0 -type d`; do
 echo $file/reads.fasta
flye --nano-raw $file/reads.fasta --threads 16 -o $file/flye
cp $file/flye/assembly.fasta fasta/${file%/}.fasta
done

#リソースに余裕があればGNU parallelで10並列計算(ONTのリードの例)
ls -d bin* | parallel -j 10 --dry-run 'flye --nano-raw {}reads.fasta
--threads 4 -o {}flye'
#fasta/に配置
mkdir fasta
for file in `\find bin-* -maxdepth 0 -type d`; do
cp $file/flye/assembly.fasta fasta/${file%/}.fasta
done