macでインフォマティクス

macでインフォマティクス

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

分子ドッキングを自動化する EasyDock 1.3

 

 分子ドッキングは創薬において広く利用されており、特に大規模な化合物ライブラリを対象とする場合に重要である。本著者らはこれまでに、このような大規模ドッキングを支援するため、複数サーバーへのタスク分散機能を備えた自動ドッキングパイプライン EasyDockを開発してきた。本研究では、その拡張版を報告する。対応するドッキングエンジンは拡充され、Vina系のCPU版・GPU版(QVina2、Vina-GPUなど)に加え、組み込みのクライアント–サーバーアーキテクチャを介して、深層学習ベースのドッキングエンジン(CarsiDock、SurfDock)にも対応した。リガンド前処理機能についても強化され、塩の除去、立体異性体の列挙、ならびに飽和環構造のコンフォメーションサンプリングが追加された。また、オープンソースのプロトン化状態予測ツール(pkasolver、MolGpKa、Uni-pKa)を統合することで、これまで必要であった商用ソフトウェアを置き換え、パイプライン全体を完全にオープンソース化した。ドッキング後解析には、タンパク質–リガンド相互作用フィンガープリント(PLIF)の計算、およびPoseBustersを用いたドッキングポーズの品質評価が新たに追加された。さらに、ドッキングエンジンおよびプロトン化ツール用のApptainer/Dockerコンテナを提供しており、インストールやHPC環境への導入を容易にしている。ソースコードは以下で公開されている。https://github.com/ci-lab-cz/easydock

 

HP

https://easydock.readthedocs.io/en/latest/

 

インストール

DockerはCarsiDock、SurfDock、Vina-GPU、Uni-pKaなど、コンテナ化された外部エンジンを使う場合に必要。

Github

git clone https://github.com/ci-lab-cz/easydock.git
cd easydock
mamba env create -f env.yml
conda activate easydock

> easydock --help

usage: easydock [-h] [-i FILENAME] -o FILENAME [-s INTEGER]

                [--protonation PROTONATION] [--pH FLOAT] [--no_tautomerization]

                [--prefix STRING] [--program STRING] [--config FILENAME]

                [--ring_sample] [--sdf] [--hostfile FILENAME]

                [--dask_report FILENAME] [--tmpdir DIRNAME] [--log FILENAME]

                [--log_level LEVEL] [-c NCPU] [-v]

Automated molecular docking pipeline including all necessary ligand preparation

steps.

options:

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

Input/output files:

  -i FILENAME, --input FILENAME

                        input file with molecules (SMI, SDF, SDF.GZ, PKL).

                        SMILES file should be tab-delimited. The argument can be

                        omitted if output DB was previously created, in this

                        case calculations will be continued from the interrupted

                        point. (default: None)

  -o FILENAME, --output FILENAME

                        output SQLite DB with scores and poses in PDBQT and MOL

                        formats. It also stores other information (input

                        structures, protein pdbqt file and grid box config). If

                        output DB exists all other inputs will be ignored and

                        calculations will be continued. (default: None)

Initialization parameters:

  -s INTEGER, --max_stereoisomers INTEGER

                        maximum number of isomers to enumerate. The default is

                        set to 1. (default: 1)

  --protonation PROTONATION

                        choose a protonation program supported by EasyDock

                        (chemaxon, pkasolver, molgpka, molgpka_fix). An existing

                        apptainer container (.sif) with implemented protonation

                        script and an installed environment can be passed as

                        well. (default: None)

  --pH FLOAT            pH value used for protonation. (default: 7.4)

  --no_tautomerization  disable tautomerization of molecules during protonation

                        (applicable to chemaxon only). (default: False)

  --prefix STRING       prefix which will be added to all molecule names. This

                        might be useful if multiple repeated runs are made which

                        will be analyzed together. (default: None)

Docking parameters:

  --program STRING      name of a docking program. Choices: vina, gnina, vina-

                        gpu, qvina, server, generic. (default: None)

  --config FILENAME     YAML file with parameters used by docking program. See

                        documentation for the format. (default: None)

  --ring_sample         sample conformations of saturated rings. Multiple

                        starting conformers will be docked and the best one will

                        be stored. Otherwise a single random ring conformer will

                        be used. (default: False)

  --sdf                 save best docked poses to SDF file with the same name as

                        output DB. (default: False)

  --hostfile FILENAME   text file with addresses of nodes of dask SSH cluster.

                        The most typical, it can be passed as $PBS_NODEFILE

                        variable from inside a PBS script. The first line in

                        this file will be the address of the scheduler running

                        on the standard port 8786. If omitted, calculations will

                        run on a single machine as usual. (default: None)

  --dask_report FILENAME

                        save Dask report to HTML file. It will have the same

                        name as the output database. (default: False)

  --tmpdir DIRNAME      path to a dir where to store temporary setup files

                        accessible to a program. Normally should be used if

                        calculations with dask have to be continued, (default:

                        None)

Common parameters for both docking and initialization):

  --log FILENAME        log file path. If omitted logging information wil be

                        printed to STDOUT. (default: None)

  --log_level LEVEL     logging level name: NOTSET, DEBUG, INFO, WARNING, ERROR,

                        or CRITICAL. Case-insensitive. (default: 20)

  -c NCPU, --ncpu NCPU  number of cpus. This affects only docking on a single

                        server. (default: 1)

  -v, --verbose         print progress to STDERR. (default: False)

 

 

実行方法

まず、SMILES形式のリガンド一覧、PDBQT形式の受容体、探索ボックスを記したgrid.txtを準備する。-cは並列に処理する分子数、config.yml内のncpuは各分子のドッキングに割り当てるCPU数。すでにリガンド調製を済ませたSQLiteデータベースを利用する場合は、入力ファイルの-i指定は不要。

# input.smi(SMILESと化合物名)を用意して実行。Vinaを使う
easydock -i input.smi -o output.db --program vina --config config.yml --protonation molgpka -c 4 --sdf

 

config.ymlには、受容体、探索ボックス、探索の深さ、ポーズ数などを指定する。

protein: /path/to/protein.pdbqt
protein_setup: /path/to/grid.txt
exhaustiveness: 8
seed: 0
n_poses: 5
ncpu: 4

Vinaが読む.pdbqt形式の受容体を指定している。

 

easydock -o output.db --program vina --config config.yml -c 4 --sdf

出力

output.dbには、リガンド調製結果、ドッキングスコア、ポーズなどがSQLite形式で保存される。

 

作成中

  • EasyDockは、数十万〜数百万規模の化合物を対象とした分子ドッキングを自動化するためのPythonパイプラインである。1つの標的タンパク質に対して大量の化合物をドッキングし、それぞれの結合しやすさをスコア化することで、有望な候補を効率的に絞り込む virtual screening(仮想スクリーニング) に利用できる。

  • EasyDock自体がドッキング計算を行うのではなく、Vina、QVina2、Vina-GPUなどの計算エンジンを利用し、複数のCPUやGPU、サーバーに処理を分散することで、大規模なドッキング解析を自動的に実行・管理できる。

  • v1.3では、AutoDock Vina、GNINA/Sminaに加えてQVina系、Vina-GPU系、CarsiDock、SurfDockなどを扱えるようになった。深層学習系やGPU系のように依存関係が重いエンジンは、長時間起動したサーバープロセスと通信する構成でコンテナ内から実行できる。さらに、PLIFによる相互作用比較、PoseBustersによる化学的・立体的に不自然なポーズの検出、飽和環の配座サンプリングも組み込まれている。
  • EasyDockが対象とするのはリガンド調製、ドッキング、ドッキング後解析であり、タンパク質調製そのものは別途行う必要がある。
  • リガンド調製とドッキングを独立した段階に分けるため、一度調製した化合物データベースを異なる標的やドッキングプログラムで再利用できる。結果はSQLiteデータベースに逐次保存され、中断した計算も同じコマンドで再開できる。
  • 受容体のプロトン化、欠損原子・残基の補完、探索ボックスの設計はEasyDockの範囲外であり、結果の解釈を左右するため別途妥当な手順で行う必要がある。
  • ドッキングスコアだけで候補を決めず、PLIF、PoseBusters、目視確認、必要に応じて再スコアリングや実験で評価する。
  • --sdfを付けると、ドッキング済みポーズをSDFとしても出力する。

引用

EasyDock 1.3: An Automated Pipeline for Molecular Docking. 

Minibaeva, G.; Yap, V.; Polishchuk, P.

Journal of Chemical Information and Modeling 2026, 66 (15), 8691–8697.  

 

メタゲノムから高品質微生物ゲノムを再構築して形質との関連を調べる MetaCAT

  

メタゲノムシーケンシングデータから高品質な微生物ゲノムを復元することは、微生物群集を正確にプロファイリングし、微生物の多様性を理解するうえで不可欠である。しかし、既存のクラスタリング手法は、しばしば精度やスケーラビリティに限界がある。本研究では、メタゲノムデータからの微生物ゲノムの復元と、それらの微生物と宿主形質との関連解析を統合したフレームワーク、MetaCAT(Metagenome Clustering and Association Tool)を提案する。MetaCATは、複雑なデータセットを高精度かつ効率的に分解するために、Sparse Weighted Dirichlet Process Gaussian Mixture Model(SWDPGMM;疎な重み付きディリクレ過程ガウス混合モデル)を組み込んでいる。また、k-mer頻度とリードカバレッジを組み合わせることで、微生物ゲノムの再構築精度を向上させている。さらに、微生物の一塩基多型(SNP)を同定するための専用ワークフローと、宿主形質を対象としたメタゲノムワイド関連解析(metagenome-wide association study)も提供する。MetaCATは、多様なデータセットにおいて、既存手法をクラスタリング精度と計算効率の両面で上回った。

大腸がんコホートのメタゲノムデータに適用したところ、これまで認識されていなかった大腸がん関連のマーカー種と、微生物由来の一塩基多型が明らかになった。MetaCATは、微生物群集のプロファイリングに適したスケーラブルなフレームワークを提供するとともに、宿主–微生物間相互作用に対する理解をさらに進展させるものである。

 

Documentation

MetaCAT/Documentation at main · liu-congcong/MetaCAT · GitHub

 

インストール

MetaCATは公式配布wheelから導入した。

Github

mamba create -n metacat -c conda-forge -c bioconda python=3.12 bowtie2 samtools
conda activate metacat

#本体
python -m pip install https://github.com/liu-congcong/MetaCAT/releases/download/v1.0.6/metacat-1.0.6-py3-none-any.whl

> MetaCAT --help

sage: MetaCAT [-h] [-v]

               {coverage,seed,cluster,cluster2mapping,mapping2cluster,benchmarkGT,benchmarkRW,indexBam,representative,abundance,abundanceTest,variant,mwas,plotMWAS,checkm2,gtdbtk}

               ...

MetaCAT: Metagenome Clustering and Association Tool

options:

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

  -v, --version         show program's version number and exit

command:

  Try "MetaCAT [command] -h|--help" for full help.

  {coverage,seed,cluster,cluster2mapping,mapping2cluster,benchmarkGT,benchmarkRW,indexBam,representative,abundance,abundanceTest,variant,mwas,plotMWAS,checkm2,gtdbtk}

    coverage            Generate COVERAGE file from bam files.

    seed                Generate SEED file from an assembly file.

    cluster             Cluster sequences based on ASSEMBLY, COVERAGE and SEED files.

    cluster2mapping     Generate mapping file from fasta formatted cluster files.

    mapping2cluster     Generate fasta formatted cluster files from assembly and mapping file.

    benchmarkGT         Benchmark with ground truth.

    benchmarkRW         Benchmark for real-world datasets.

    indexBam            Index bam files.

    representative      Select representatives from fasta formatted cluster files.

    abundance           Generate abundance table from metagenomic data.

    abundanceTest       Significance test for abundance.

    variant             Call SNPs from metagenomic data.

    mwas                MWAS for metagenomic data.

    plotMWAS            QQ and Manhattan plots for MWAS results.

    checkm2             Estimate the quality of clusters using CheckM2.

    gtdbtk              Classify the clusters using GTDB-Tk.

congcong_liu@icloud.com.

> MetaCAT indexBam

 

usage: MetaCAT indexBam [options] -b <BAMs>

options:

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

  -b <str> [<str> ...], --bam <str> [<str> ...]

                        Path to the sorted bam files or directories containing them.

                        All bam files must have the same header.

  -t <int>, --threads <int>

                        Number of threads.

                        Works only with multiple bam files.

                        The value should be a positive integer.

                        Default: 128.

  --bam-suffix <str>    If directories are provided with "-b|--bam", only files with the specified suffix will be selected.

                        Default: bam.

Error: the following arguments are required: -b/--bam

>MetaCAT seed

usage: MetaCAT seed [options] -f <ASSEMBLY> -o <SEED>

options:

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

  -f <str>, --fasta <str>

                        Path to the fasta formatted assembly file.

  -o <str>, --output <str>

                        Path to the seed file.

  -t <int>, --threads <int>

                        Number of threads.

                        The value should be a positive integer.

                        Default: 128.

  --fraggenescan <str>  Path to the "FragGeneScan".

                        Default: internal FragGeneScan.

  --hmmsearch <str>     Path to the "hmmsearch".

                        Default: internal hmmsearch.

  --temp <str>          Path to the temporary directory.

                        Default: /home/kazu/Desktop/MetaCAT.

>MetaCAT coverage

usage: MetaCAT coverage [options] -b <BAMs> -o <COVERAGE>

options:

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

  -b <str> [<str> ...], --bam <str> [<str> ...]

                        Path to the sorted bam files or directories containing them.

                        All bam files must have the same header.

  -o <str>, --output <str>

                        Path to the coverage file.

  -ti <int>, --threads-index <int>

                        Number of threads for indexing files.

                        Works only with multiple bam files.

                        The value should be a positive integer.

                        Default: 128.

  -tc <int>, --threads-count <int>

                        Number of threads for counting depth.

                        The value should be a positive integer.

                        Default: 128.

  -m <int>, --min-sequence-length <int>

                        Calculations applies only to the sequences with length being greater than or equal to this value.

                        The value should be greater than 2 * "trim" + 1.

                        Default: 100.

  --bam-suffix <str>    If directories are provided with "-b|--bam", only files with the specified suffix will be selected.

                        Default: bam.

  -l, --long            Compute coverage for long-read bam files.

                        Default: False.

  --trim <int>          Ignore the regions at both ends of a sequence when do calculations.

                        The value should be a non-negative integer.

                        Default: 0.

  --mapq <int>          MAPQ threshold.

                        The value should be a non-negative integer.

                        Default: 0 (#sequences < 5000000), 20 (#sequences >= 5000000), 30 (#sequences >= 10000000).

  --identity <float>    Identity threshold.

                        The value should be from 0 to 1.

                        Default: 0.90.

  --no-index            Do not create bam index files.

                        Default: False.

> MetaCAT  cluster

 

usage: MetaCAT cluster [options] -f <ASSEMBLY> -c <COVERAGE> -s <SEED> -o <METACAT>

options:

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

  -f <str>, --fasta <str>

                        Path to the fasta formatted assembly file.

  -c <str>, --coverage <str>

                        Path to the coverage file.

  -s <str>, --seed <str>

                        Path to the seed file.

  -o <str>, --output <str>

                        Prefix for the output files.

                        "*.*.fasta" the fasta formatted cluster file.

                        "*.mapping" the mapping of sequences to clusters.

  -m <int>, --min-sequence-length <int>

                        Sequences with the length being greater than or equal to this value can be involved in the clustering algorithm.

                        The value should be a positive integer.

                        Default: 1000 (#samples = 1), 500 (#samples > 1).

  -t <int>, --threads <int>

                        Number of threads.

                        The value should be a positive integer.

                        Default: 128.

  --no-fasta            Do not output fasta formatted files.

                        Default: False.

  --no-mapping          Do not output mapping file.

                        Default: False.

  --min-pca-variance-ratio <float>

                        Minimum percentage of variance explained in PCA in SWDPGMM.

                        The value should be from 0 to 1.

                        Default: 0.90.

  --min-pca-components <int>

                        Minimum number of components retained in PCA in SWDPGMM.

                        The value should be a positive integer.

                        Default: 20.

  --swdpgmm-engine {auto,cpu,gpu}

                        Device used to run SWDPGMM.

                        Default: auto (SWDPGMM will automatically run on the GPU if it is available).

  --min-swdpgmm-clusters <int>

                        SWDPGMM is enabled if the estimated number of genomes is greater than or equal to this value.

                        The value should be an integer.

                        Default: 200.

  --min-swdpgmm-sequences <int>

                        SWDPGMM is enabled if the number of sequences that meet the length threshold is greater than or equal to this value.

                        The value should be an integer.

                        Default: 500000.

  --min-swdpgmm-n50 <int>

                        SWDPGMM is enabled if the N50 is greater than or equal to this value.

                        The value should be a positive integer.

                        Default: 1500.

  --max-swdpgmm-iterations <int>

                        Maximum number of SWDPGMM iterations to perform.

                        The value should be a positive integer.

                        Default: 30.

  --kmer-frequence-weight <float> [<float> ...]

                        Weights of kmer frequency probabilistic model for constructing the affinity graph.

                        The values should be from 0 to 1.

                        Default: 0.90 0.70 0.50 0.30 0.10.

  --min-kmer-frequence-probability <float>

                        Probability of kmer frequence probabilistic model lower than this value will be set to 0.

                        The value should be from 0 to 1.

                        Default: 0.50.

  --coverage-weight <float> [<float> ...]

                        Weight of read coverage probabilistic model for constructing the affinity graph.

                        The values should be from 0 to 1.

                        Default: 0.10 0.30 0.50 0.70 0.90.

  --min-coverage-probability <float>

                        Probability of coverage probabilistic model lower than this value will be set to 0.

                        The value should be from 0 to 1.

                        Default: 0.50.

  --seed-neighbors <int>

                        Number of neighbors in seed affinity model.

                        The values should be positive integer.

                        Default: 10.

  --sequence-neighbors <int>

                        Number of neighbors in sequence affinity model.

                        The values should be positive integer.

                        Default: 10.

  --min-cluster <int>   Minimum size of a cluster to output.

                        The value should be a positive integer.

                        Default: 100000 bp.

  --max-seeds <int>     Maximum number of seed sequences involved in the seed model.

                        The value should be a positive integer.

                        Default: 30000.

  --random-number <int>

                        Random number generator seeded by the given integer.

                        Default: 0.

> MetaCAT representative

usage: MetaCAT representative [options] -f <FASTAs> -c <CHECKM2> -g <GTDBTK> -o <REPRESENTATIVE>

options:

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

  -f <str> [<str> ...], --fasta <str> [<str> ...]

                        Path to the fasta formatted files or directories containing them.

  -c <str>, --checkm2 <str>

                        Path to the file generated by MetaCAT's checkm2.

                        A header line "Name<tab>Completeness<tab>Contamination ..." should be present.

  -g <str>, --gtdbtk <str>

                        Path to the file generated by MetaCAT's gtdbtk.

                        A header line "user_genome<tab>classification ..." should be present.

  -o <str>, --output <str>

                        Prefix for the output files.

                        "*.annotation": the classifications of all clusters.

                        "*.assembly": the combined representative assembly.

  -t <int>, --threads <int>

                        Number of threads.

                        The value should be a positive integer.

                        Default: 128.

  -e {fastANI,mash,skani}, --engine {fastANI,mash,skani}

                        Engine for computing the similarity between paired genomes.

                        Default: mash.

  --ani <float>         Minimum ANI to consider genomes as the same species.

                        The value should be from 0 to 100.

                        Default: 95.0.

  --mash <str>          Path to the "mash".

                        Default: internal mash.

  --mash-kmer-size <int>

                        K-mer size used in Mash.

                        The value should be a positive integer.

                        Default: 21.

  --mash-sketch-size <int>

                        Number of non-redundant min-hashes used in Mash.

                        The value should be a positive integer.

                        Default: 5000.

  --fastani <str>       Path to the "fastANI".

                        Default: environmental fastANI.

  --fastani-kmer-size <int>

                        K-mer size used in fastANI.

                        The value should be a positive integer.

                        Default: 16.

  --fastani-fragment-length <int>

                        Fragment length used in Mash.

                        The value should be a positive integer.

                        Default: 3000.

  --skani <str>         Path to the "skani".

                        Default: environmental skani.

  --skani-compression-factor <int>

                        Compression factor used in skani.

                        The value should be a positive integer.

                        Default: 125.

  --skani-marker-kmer-compression-factor <int>

                        Marker k-mer compression factor used in skani.

                        The value should be a positive integer.

                        Default: 1000.

  --fasta-suffix <str>  If directories are provided with "-f|--fasta", only files with the specified suffix will be selected.

                        Default: fasta.

  --contamination <float>

                        Contamination threshold.

                        The value should be from 0 to 1.

                        Default: 0.10.

  --completeness <float>

                        Completeness threshold.

                        The value should be from 0 to 1.

                        Default: 0.70.

  --temp <str>          Path to the temporary directory.

                        Default: /home/kazu/Desktop/MetaCAT.

> MetaCAT abundanceTest

usage: MetaCAT abundanceTest [options] -a <ABUNDANCE> -g <GROUP> -o <TEST>

options:

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

  -a <str>, --abundance <str>

                        Path to the abundance file.

                        A header line "Classification<tab>ID1<tab>ID2 ..." should be present.

  -g <str>, --group <str>

                        Path to the group file.

                        A header line "ID<tab>Group" should be present.

  -o <str>, --output <str>

                        Prefix for the output files.

                        "*.G1-G2.*: significance test for group G1 and G2."

  --coverage <float>    Minimum coverage in each of groups.

                        The value should be from 0 to 1.

                        Default: 0.50.

  --rows <int>          Number of rows of the subplot grid.

                        The value should be a positive integer.

                        Default: auto.

  --columns <int>       Number of columns of the subplot grid.

                        The value should be a positive integer.

                        Default: auto.

  --classification <str> [<str> ...]

                        Classification levels used for comparison.

                        The values can be s, g, f, o, c, p, d.

                        Default: s.

  --comparison <str> <str>

                        Paired groups for comparison.

                        Default: all paired groups.

  --alpha <float>       The probability of making the wrong decision when the null hypothesis is true.

                        Default: 0.05.

  --multiple-test <str>

                        Method for multiple hypothesis testing.

                        The values can be bonferroni, benjamini-hochberg, none.

                        Default: bonferroni.

  --width <float>       Width of a single plot in inches.

                        The value should be a positive float.

                        Default: 2.0

  --height <float>      Height of a single plot in inches.

                        The value should be a positive float.

                        Default: 1.2

> MetaCAT variant

 

usage: MetaCAT variant [options] -a <ANNOTATION> -b <BAMs> -o <VARIANT>

options:

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

  -a <str>, --annotation <str>

                        Path to the annotation file generated by MetaCAT's representative.

                        A header line "Cluster ID<tab>Classification" should be present.

  -b <str> [<str> ...], --bam <str> [<str> ...]

                        Path to the sorted bam files or directories containing them.

                        All bam files must have the same header.

  -o <str>, --output <str>

                        Path to the output file.

  -tc <int>, --threads-call <int>

                        Number of threads for calling variants.

                        The value should be a positive integer.

                        Default: 128.

  -ti <int>, --threads-index <int>

                        Number of threads for indexing files.

                        Works only with multiple bam files.

                        The value should be a positive integer.

                        Default: 128.

  --bam-suffix <str>    If directories are provided with "-b|--bam", only files with the specified suffix will be selected.

                        Default: bam.

  --coverage <float>    Minimum population coverage of a SNP.

                        Default: 0.50.

  --mapq <int>          MAPQ threshold.

                        The value should be a non-negative integer.

                        Default: 0.

  --identity <float>    Identity threshold.

                        The value should be from 0 to 1.

                        Default: 0.90.

  --depth <int>         Read depth for a sample less than this value will be set to 0.

                        The value should be a positive integer.

                        Default: 1.

> MetaCAT mwas

 

usage: MetaCAT mwas [options] -p <PHENOTYPE> -a <ABUNDANCE> -v <VARIANT> -o <MWAS>

options:

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

  -a <str>, --abundance <str>

                        Path to the abundance file generated by MetaCAT's abundance.

                        A header line "Classification<tab>ID1<tab>ID2 ..." should be present.

  -p <str>, --phenotype <str>

                        Path to the phenotype file.

                        A header line "ID<tab>Phenotype1<tab>Phenotype2 ..." should be present.

                        Each phenotype is a numeric value.

  -v <str>, --variant <str>

                        Path to the variant file generated by MetaCAT's variant.

                        A header line "Classification<tab>Chromosome<tab>Position<tab>Population<tab>ID1<tab>ID2 ..." should be present.

  -o <str>, --output <str>

                        Path to the output file.

  -c <str>, --covariate <str>

                        Path to the covariate file.

                        A header line "ID<tab>Covariate1<tab>Covariate2 ..." should be present.

  -t <int>, --threads <int>

                        Number of threads.

                        Default: 128.

  --mwas <str>          Path to the mwas file generated by MetaCAT's mwas.

                        Major alleles will be determined in this file rather than in the variant file.

                        A header line "Classification<tab>Chromosome<tab>Position<tab>Allele<tab>Beta<tab>SE<tab>P<tab>Significance" should be present.

  --alpha <float>       The probability of making the wrong decision when the null hypothesis is true.

                        Default: 0.05.

  --pca-components <int>

                        Number of components of GDM to keep.

                        Default: 5.

  --phenotype-column <int>

                        Column of phenotype.

                        Default: 2.

  --size <float>        Minimum proportion of samples for mwas.

                        Default: 0.50.

>MetaCAT plotMWAS

usage: MetaCAT plotMWAS [options] -m <MWAS> -o <MWAS>

options:

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

  -m <str>, --mwas <str>

                        Path to the mwas file generated by MetaCAT's mwas.

                        Major alleles will be determined in this file rather than in the variant file.

                        A header line "Classification<tab>Chromosome<tab>Position<tab>Allele<tab>Beta<tab>SE<tab>P<tab>Significance" should be present.

  -o <str>, --output <str>

                        Prefix for the output files.

                        "*.qq.pdf": the qq plot for the mwas.

                        "*.manhattan.pdf": the manhattan plot for the mwas.

  --variant-annotation <str>

                        Path to the variant annotation file.

                        A header line "Classification<tab>Chromosome<tab>Position<tab>Annotation ..." should be present.

  --alpha <float>       The probability of making the wrong decision when the null hypothesis is true.

                        Default: 0.05.

  --max-negative-log-p <float>

                        Maximum value of -log10(P).

                        Default: 20.

  --qq-width <float>    Width of the QQ plot in inches.

                        The value should be a positive float.

                        Default: 3.0

  --qq-height <float>   Height of the QQ plot in inches.

                        The value should be a positive float.

                        Default: 3.0

  --manhattan-width <float>

                        Width of the QQ plot in inches.

                        The value should be a positive float.

                        Default: 9.0

  --manhattan-height <float>

                        Height of the QQ plot in inches.

                        The value should be a positive float.

                        Default: 3.0

 

実行方法

1、アセンブリ配列をインデックス化し、各サンプルのトリミング済み・宿主DNA除去済みペアエンドリードをマッピングする。

#index
bowtie2-build --threads 8 assembly.gz assembly
#mapping bowtie2 -p 20 -x assembly -1 sample1_R1.fastq.gz -2 sample1_R2.fastq.gz | samtools sort -@ 8 -o sample1.bam

 

2、BAMの独自インデックス、seed、カバレッジ情報を作成してクラスタリングを行う。以下ではassembly.gz、sample1.1.fastq.gz、sample1.2.fastq.gzを用いる。

#1 MetaCAT index
MetaCAT indexBam -t 8 --bam sample1.bam
=> bam のindex: sample.bam.indexができる

#2 binningの手掛かりになるmarker/seed情報を作成 MetaCAT seed --threads 20 --fasta assembly.gz --output metacat.seed => metacat.seedができる

#3 カバレッジプロファイルの計算
MetaCAT coverage --threads-index 20 --threads-count 8 --bam sample1.bam --output sample1.metacat.coverage => sample1.metacat.coverageができる

#4 binning、k-mer composition、coverage、marker情報を組み合わせる (ここが重い)
MetaCAT cluster --threads 20 --fasta assembly.gz --seed metacat.seed --coverage sample1.metacat.coverage --output sample1.metacat

#sample2以降のfastqとアセンブリがあれば、上と同じように進めていく
#(サンプル分実行して、サンプル毎にbin.fastaまで出す)。
bowtie2-build --threads 8 sample2assembly.gz sample2assembly
bowtie2 -p 20 -x sample2assembly -1 sample2_R1.fastq.gz -2 sample2_R2.fastq.gz | samtools sort -@ 8 -o sample2.bam
MetaCAT indexBam -t 8 --bam sample2.bam
2-4は省略

MetaCAT cluster の --swdpgmm-engine は auto / cpu / gpu を選べて、デフォルトの auto ではGPU版を読み込めれば自動的にGPUを使う

 

出力例

bam.index, seed, coverage profile, bin.fastaなどがそれぞれできる。

 

3、代表ゲノムを選抜するために、MAGの品質評価や分類を行なう。GTDB-tkやcheckM2が必要 (DB含む)。

# CheckM2(紹介)
checkm2 database --setdblocation \
/path/to/CheckM2_database/uniref100.KO.1.dmnd
#run
MetaCAT checkm2 --fasta sample1.*.fasta sample2.*.fasta --output metacat.checkm2.tsv

# GTDB-Tk(紹介)
export GTDBTK_DATA_PATH=/path/to/release232
#run
MetaCAT gtdbtk --checkm2 metacat.checkm2.tsv \
--fasta sample1.*.fasta sample2.*.fasta --output metacat.gtdbtk.tsv

 

4、CheckM2とGTDB-Tkまで終わったら代表ゲノムセットを作る。

MetaCAT representative --threads 20 --fasta sample*.fasta \
--checkm2 metacat.checkm2.tsv --gtdbtk metacat.gtdbtk.tsv \
--output metacat.representative

出力例

 

5、リードを代表ゲノムセットにmappingし直す。古いbamがあれば先に消してから実行する。

bowtie2-build --threads 20 metacat.representative.assembly \
metacat.representative

bowtie2 -p 20 -x metacat.representative -1 sample1.1.fastq.gz -2 sample1.2.fastq.gz \
| samtools sort -@ 8 -o sample1.bam

bowtie2 -p 20 -x metacat.representative -1 sample2.1.fastq.gz \ -2 sample2.2.fastq.gz \
| samtools sort -@ 8 -o sample2.bam

 

6、菌種の存在量と表現型を比較するためにカバレッジプロファイルの計算ももう一度行なう。

#index
MetaCAT indexBam -t 20 --bam sample1.bam sample2.bam sample3.bam sample4.bam

#coverage profile
MetaCAT abundance --threads-index 20 --threads-count 20 \
--annotation metacat.representative.annotation \
--bam sample1.bam sample2.bam sample3.bam sample4.bam \
--output metacat.abundance.tsv

出力例

 

7、Control vs Diseaseで菌種量を比較する。6で作った菌種abundanceテーブルを使って統計比較を実行する。Mann–Whitney U検定と多重検定補正を行なう。

MetaCAT abundanceTest --abundance metacat.abundance.tsv --group Group.tsv --output metacat.abundanceTest  > metacat.abundanceTest.tsv

Group.tsvの形式。

ID    Group
sample1    Control
sample2    Control
sample3    Disease
sample4    Disease

このように各サンプルがどちらの群かを書いた表。これを用意して使う。

 

出力例

Classificationは菌の分類、Median (G1) と Median (G2) は各群の相対存在量の中央値の対数値、Flagは群間の大小関係で、> はG1で多く、< はG2で多いことを示す。PはMann–Whitney U検定のP値、Q は多重検定補正後の値。NAはその群で対象の菌がほぼ検出されなかったことを示す。

 

8、各サンプルのBAMからバリアントを呼び出し、代表ゲノム上の微生物SNP情報を得る。

MetaCAT variant --threads-index 20 --threads-call 20 --annotation metacat.representative.annotation --bam sample1.bam sample2.bam sample3.bam sample4.bam --output metacat.variant.tsv

どの菌のどの位置にどんな塩基多型があるか調査するコマンドとなる。結果のファイルをMetaCAT mwas に渡して、この微生物SNPがDiseaseと関連しているか統計検定する。

 

出力例

Classification、Chromosome、Positionは分類、染色体、ポジションは代表ゲノム上のコンティグ名と塩基位置。Populationは全サンプルをまとめたA/C/G/Tの塩基頻度で、例えば 0.0/0.3333/0.6667/0.0 は A=0%、C=33.3%、G=66.7%、T=0% を意味する。
sample1 以降の列には、各サンプル内でのA/C/G/Tの頻度が同じ形式で記録される。

 

9、微生物SNPと宿主表現型の関連を統計解析する。それぞれの菌について、見つかったSNPがDiseaseと関連しているかを検定する。sample毎にほかに何らかの共変量データがあるなら、 "--covariate"で指定する。

MetaCAT mwas --threads 20 --abundance metacat.abundance.tsv --phenotype Phenotype.tsv --covariate Covariate.tsv --variant metacat.variant.tsv --output metacat.mwas.tsv

Phenotype.tsv 

 

出力例

Classification、Chromosome、PositionはGWASを行った菌とゲノム位置、Alleleは解析対象となった塩基を示す。Betaはその塩基と表現型との関連の方向と効果量、SE はその標準誤差、Pは検定のP値。Significanceは多重検定補正後の有意性を示し、+ が有意、- が非有意を意味する。

 

10、結果を可視化

MetaCAT plotMWAS --mwas metacat.mwas.tsv --output metacat.mwas

テストデータでは有意な菌がいなかったため省略。

 

ここだけ公式データを使う。crc.715.mwas.gzは、約715サンプルを使った大腸がん(CRC)のMWASの結果のファイル*1。

https://zenodo.org/records/19653052

(公開されているデータセットには、菌種存在量、微生物SNPのvariant、そのSNPとCRC表現型との関連解析結果であるmwasなどが含まれている)

wget -O crc.715.mwas.gz https://zenodo.org/api/records/19653052/files/crc.715.mwas.gz/content
MetaCAT plotMWAS --mwas crc.715.mwas.tsv --output crc.715.mwas

 

出力例

metacat.mwas.manhattan.pdf

マンハッタンプロット。各微生物SNPの関連の強さをゲノム上の位置に沿って並べた図で、縦軸が -log10(P) 、上に突出した点ほど関連が強い。今回の公式CRCデータでは約594万SNPが解析され、そのうち98 SNPが有意と判定されている。

 

metacat.mwas.qq.pdf

QQプロット。横軸は帰無仮説のもとで期待される -log10(P)、縦軸は実際に観測された -log10(P) を示す。多くの点は低い範囲では対角線に沿っているが、P値が小さい領域では大きく上方に逸脱している。これは、偶然だけでは説明しにくい強い関連シグナルを持つ微生物SNPが存在することを示している 

 

その他

  • GPUバージョンのMetaCATもインストールできる。複雑なデータで使うSWDPGMMの部分をGPU対応化している。
  • binningの前処理であるseedステップでは、FragGeneScanとHMMERを使って細菌・古細菌のsingle-copy marker genesを検出している。
  • binningアルゴリズムとしては、marker geneを持つcontigをseedにして、k-mer組成 + read coverageからcontig間の類似性を計算している。複雑なデータでは独自のSWDPGMMという混合モデルを使い、比較的単純なデータではグラフ上でseedのラベルを周囲のcontigへ伝播してbinを作る。複雑なデータ、例えばクラスタ数が多い、配列数が50万以上などの条件を満たしたときにSWDPGMMへ入り、それより単純なデータでは、seedとk-mer/coverageの類似度グラフを使ったlabel propagationでbinningする。一度binningして終わりではなく、品質の悪いクラスタを次のiterationへ回し、再処理して精度を高めている。
  • binning精度については、CAMIの9種類の環境データで、MetaBAT2、VAMB、SemiBin2、COMEBin、Binny、CONCOCT、TaxVAMB、MetaDecoderなどと比較して、MetaCATはこれらの既存手法より全体として高いclustering accuracyを示し、計算効率も優れていた、としている。
  • MetaCATでは、メタゲノム解析でどんな菌がいるか調べることができる。さらにそれだけでなく、どの菌や変異が表現型と関係するのかまで解析できる。
  • MetaCATでは、微生物ゲノム上の1塩基多型をmicrobial SNPと呼び、宿主表現型との関連解析に利用している。1塩基バリアントはSNVだが、そのうち集団中で一定頻度以上、古典的には約1%以上で認められるものをSNP(single-nucleotide polymorphism)と呼ぶ。MetaCAT論文では、この区別を厳密に使い分けるよりも、解析対象となる微生物の1塩基多型を"SNP"として扱っている。
  • 宿主形質との関連はその研究における関連であり、因果関係を直接示すものではない点に注意する。

コメント

すごい強力なツールですね。単純にメタゲノムアセンブリまで終わってしまえば、その後のbinning、MAGの品質評価や分類、菌叢解析、群間比較、さらに微生物SNPと表現型のGWAS解析まで、一連の流れを実行できます。試してみてください。

引用

Liu CC, Dong SS, Guo J, et al. MetaCAT enables reconstruction of high-quality microbial genomes and their association with host traits from metagenomic data. Nature Microbiology. 2026. https://doi.org/10.1038/s41564-026-02472-7

 

関連

 

*1

複数の既報CRCコホートから便のshotgun metagenomeデータを合計715サンプル集め、それぞれMEGAHITでアセンブリし、MetaCATでbinning、CheckM2による品質評価、GTDB-Tkによる分類、代表ゲノムの作成まで行っている。それから、その代表ゲノムへ各被験者のfastqを再マッピングして、存在量とSNPを計算し、最後にCRC/Controlなどの表現型とのMWASを行った、という流れ。このMWASにはENA/SRA/NODEの6プロジェクトが使用されている。論文ではSNPががんを発生させると主張しているわけではなく、菌叢の違いだけでなく同じ微生物種(MAG)の中にある遺伝的な違い、つまりは微生物SNPsも大腸がんと有意に関連していたという報告になる。

どの菌(MAG)がいるかだけではなく、その菌がどんな遺伝型を持っているかまで見る必要があることを示している。

大規模なタンパク質間相互作用スクリーニングを行なう RoseTTAFold2-PPI

 

 タンパク質間相互作用(protein-protein interactions; PPIs)は、生物学的機能に不可欠である。共進化解析および深層学習(DL)に基づくタンパク質構造予測によって、細菌や酵母では包括的なPPI同定が可能になってきたが、より複雑なヒトプロテオームに対しては、これらの手法の成功は限定的であった。この課題を克服するために、30ペタバイトに及ぶ未アセンブルのゲノムデータから収集した、従来の約7倍の深さを持つ多重配列アラインメント(MSA)を用いて共進化シグナルを強化した。さらに、2億個の予測タンパク質構造から得られたドメイン間相互作用の拡張データセットを用いて学習させた、新しい深層学習ネットワークを開発した。

2億組のヒトタンパク質ペアを系統的にスクリーニングし、期待される精度(precision)が90%となる17,849件の相互作用を予測した。このうち3,631件は、これまでの実験的スクリーニングでは同定されていなかった相互作用であった。これらの予測相互作用の三次元モデルは、タンパク質の機能やヒト疾患の分子メカニズムについて、多数の新たな仮説を提供する。

 

インストール

Singularityイメージを使う方法と、Conda環境を構築する方法が用意されている。

Github


git clone https://github.com/CongLabCode/RoseTTAFold2-PPI.git cd RoseTTAFold2-PPI/ mamba create -n rf2ppi python=3.9 -y conda activate rf2ppi
mamba install -c conda-forge -c bioconda hhsuite -y
mamba install -c conda-forge python=3.9 pip -y python -m pip install numpy==1.21.2 pandas==1.5.3 biopython==1.79 scipy==1.7.1 einops python -m pip install torch==1.12.1+cu113 -f https://download.pytorch.org/whl/torch_stable.html

> python ../src/predict_list_PPI.py --help
usage: predict_list_PPI.py [-h] -list_fn LIST_FN -model_file MODEL_FILE [-number_seqs NUMBER_SEQS]

optional arguments:
  -h, --help            show this help message and exit
  -list_fn LIST_FN      List file containing input pMSA, L1 (length of the first protein)
  -model_file MODEL_FILE
                        The trained model to use
  -number_seqs NUMBER_SEQS
                        Number of paired sequences to include for inference. Default is 5000

 

モデルファイル

学習済み重みと関連データは、humanPPIページから取得できる。

humanPPI download page

cd RoseTTAFold2-PPI/src/models
wget --no-check-certificate https://conglab.swmed.edu/humanPPI/downloads/RF2-PPI.pt

RF2-PPI weightsをダウンロードする。日本からダウンロードするとやや時間がかかる。

 

実行方法

入力には、2つのタンパク質の相同配列を同じ生物種ごとに対応付けた、ペア化多重配列アラインメント(paired MSA)を用いる。モデルはこの共進化情報を利用し、2つのタンパク質のどの残基同士が相互作用する可能性があるかを推定する。出力される相互作用確率はペア全体のスクリーニングに使えるほか、残基間相互作用確率の行列としても保存される。

 

RF2-PPIの入力リストには、paired MSAのファイルパスと、1つ目のタンパク質の長さを空白区切りで記載する。

 

テストラン

5組のタンパク質(segment)の組み合わせについて、相互作用するかを予測する。

cd RoseTTAFold2-PPI/examples
#ディレクトリ名が間違っているので以下コマンドで修正する
sed -i 's#segment_paired_msas_new/#segment_paired_msas/#g' segment_pairs_input

segment_pairs_input

segment_paired_msas_new/O75886_S0__O95630_S0.i90.a3mは、UniProtのタンパク質ID: O75886のsegment 0とタンパク質ID: O95630のsegment 0を組み合わせた paired MSA ファイル。325は最初のタンパク質側であるO75886_S0の長さ(325 aa)。

 

実行する。predict_list_PPI.pyを使う。

python ../src/predict_list_PPI.py -list_fn segment_pairs_input -model_file ../src/models/RF2-PPI.pt

RTX3070 Tiでテストすると10分ほどかかった。

 

出力ファイル

次の2ファイルが生成される。

NPZファイルには、325残基 × 381残基の各組み合わせについての相互作用の確率の行列が保存されている。

 

相互作用候補を見るならlogファイルを使う。

> cat segment_pairs_input.log

5ペア中4ペアは相互作用確率が0.11〜0.18程度と低かった。値が1に近いほど相互作用する可能性が高く、0に近いほど低い。一方、O00206_S1–Q9Y6Y9_S0のペアでは相互作用確率0.932と非常に高い値を示した。

 

その他

  • ヒトプロテオームのすべてのタンパク質ペアを調べるには、約2億ペアを扱う必要がある。AlphaFold2のような高精度な構造予測法では、計算量が莫大になってしまう。

  • RoseTTAFold2-PPI(RF2-PPI)は、タンパク質間相互作用を高速に大規模にスクリーニングするための深層学習手法である。個々のタンパク質複合体の三次元構造を精密に予測することを主目的とするのではなく、候補となるタンパク質ペアが相互作用する確率を高速に評価する。
  • RF2-PPIは、タンパク質ペアを一つずつ高精度に構造予測する手法ではなく、paired MSAと軽量な深層学習ネットワークを使って、膨大な候補ペアから相互作用候補を優先順位付けするための手法である。予測確率は実験的な相互作用の証明ではなく、後続の構造解析や実験検証へ進める候補を選ぶための指標として扱う必要がある。また、paired MSAの深さと品質が結果に影響する。モデルの予測は確率的であり、MSAの品質とデプスが重要になる。
  • ペアMSAを生成するには、HHblitsなどのツールを使用して、各タンパク質のホモログを検索し(全ヒットを出力するために-allフラグ付けること)、各生物種においてクエリに最も近いヒット(配列同一性に基づく)を特定し、それ以外のヒットは破棄する。それから、同じ生物種由来の2つのヒット配列を連結する。このとき、hhfilterを使用して、配列同一性90%または95%の基準で冗長性を排除する。
  • パフォーマンスは、ペアリングされたMSAの品質に左右される。
  • より深い(シーケンス数の多い)MSAを取得する。
  • 保存性が低く、かつ天然変性領域(IDR)に相当する低品質な領域を除去する。
  • ペアリングされたMSAのみを使用し、ペアになっていない配列はすべて除去する
  • ほとんどのヒトタンパク質については、https://conglab.swmed.edu/humanPPI/humanPPI_download.html で公開している単一タンパク質用のomicMSAを使用して、ペアMSAを生成できる。また、公開しているomicMSAからペアMSAを生成するコマンドgenerate_protein_pair_MSA.pyが用意されている。

引用

Predicting protein-protein interactions in the human proteome.

Jing Zhang, Ian R. Humphreys, Jimin Pei, Jinuk Kim, Chulwon Choi, Rongqing Yuan, Jesse Durham, Siqi Liu, Hee-Jung Choi, Minkyung Baek, David Baker, Qian Cong. 

Science, 390(6771), eadt1630 (2025). 

 

補足1

paired MSAは、相互作用を調べたい2つのタンパク質について、それぞれのホモログ配列をで横に連結した多重配列アライメント。進化系統樹で複数のタンパク質MSAを連結したときのファイル形式。ここでは、相互作用を予測したい2つのMSAをペアとして連結したファイルをpaired MSAと呼んでいる。

 

追記

自閉症の原因となる遺伝子変異が脳の発達を乱す仕組みが判明

https://gigazine.net/news/20260905-autism-mutations-protein-networks/

2026年にScience誌に掲載されたこの研究では、自閉症スペクトラム症(ASD)関連タンパク質の相互作用ネットワークを大規模に解析している。構造予測にはAlphaFold 3ではなく、AlphaFold-Multimerが用いられている。まず、約100種類のASD関連タンパク質をbaitとして、wet実験のaffinity purification-mass spectrometry(AP-MS)により相互作用タンパク質を探索した。これにより1,800を超えるPPI候補が得られた。AP-MSでは、直接結合しているタンパク質と、同じ複合体に含まれるだけのタンパク質を区別しにくい。そこで、得られたbait–interactorペアについてAlphaFold-Multimerによる複合体構造予測を行った。preprintでは1,651ペアを解析し、平均ipTM > 0.5を基準として直接相互作用の可能性が高い候補を選別している。その結果、113組が高信頼の直接PPI候補となり、そのうち49組は新規相互作用であった。

さらに、ASD患者で見つかった54種類のミスセンス変異を導入したタンパク質についてもAP-MSを行い、野生型と比較した。各interactorについてMS signalの変化を定量し、変異によって減少、増加、消失、あるいは新たに生じるPPIを評価した。その結果、253個のPPIに有意な変化が検出され、136個が減少、117個が増加した。これらの変異位置をAlphaFold-Multimerによる複合体構造上に配置し、予測されたタンパク質間結合界面との位置関係を調べた。具体的には、AlphaFold-Multimerの構造モデルを使い、変異残基が予測されたPPI界面から何Å離れているかを調べた。34個の変異が界面から10 Å以内に位置していた。そして、この界面近傍変異とAP-MSで観測されたPPI変化を集計し、界面近傍の変異では46%で相互作用が低下したのに対して、相互作用が増加したものは18%だった、と定量的に示している。

さらに代表例については、AlphaFoldの3D構造そのものを図示している。例えばPPP2R5D E198Kでは、変異残基がPPP4Cとの予測界面から約1.6 Åという非常に近い位置にあり、AP-MSでもPPP4Cとの相互作用が低下していた。一方、GNAI1 I319TではRIC8Aとの界面近傍に変異がありながら、こちらは相互作用が増加する例として扱われている。

https://www.science.org/doi/10.1126/science.ady4523

 

 

真核生物の遺伝子構造を予測する OrionGeno

 

 真核生物ゲノムシーケンシングの急速な拡大により、正確かつスケーラブルなゲノムアノテーションに対する需要が急速に高まっている。既存のab initio法は、複雑な遺伝子構造を再構築することや、系統的に離れた生物群に対して汎化することがしばしば困難であり、大規模なアノテーションへの利用が制限されている。本研究では、真核生物ゲノムをエンドツーエンドでアノテーションするための、系統情報を考慮した深層学習モデルOrionGenoを提案する。OrionGenoは、系統学的コンテキスト、長距離の配列モデリング、および遺伝子構造と反復配列の同時予測を統合することにより、ゲノム配列から直接、エクソン、イントロン、非翻訳領域(UTR)、および反復配列をアノテーションする。NCBIに登録されているもののアノテーションが付与されていない染色体レベルの真核生物ゲノムに適用した結果、OrionGenoは5,300を超えるゲノムについてアノテーションを生成し、公開アノテーション資源を大幅に拡充した。多様な真核生物系統にわたる評価において、OrionGenoは、エクソン、遺伝子、タンパク質配列、およびタンパク質構造の各レベルで、最先端の既存手法を上回る性能を示した。さらに、十分にキュレーションされたゲノムにおいて、既存の参照タンパク質コード遺伝子アノテーションには含まれていない、タンパク質をコードする可能性のある候補遺伝子座も同定した。

Webプラットフォームおよび統合アノテーションデータベースと組み合わせることで、OrionGenoは、ゲノムアセンブリを機能的な生物学的資源へと変換するための、スケーラブルかつ利用しやすいフレームワークを提供するとともに、Earth BioGenome Project のような大規模生物多様性プロジェクトを支援するものである。

インストール

mambaでPython3.10環境を作成してインストールした。

  • Linux
  • Python 3.10.18
  • CUDA 12.x

git clone https://github.com/BGIResearch/OrionGeno.git
cd OrionGeno
#Python 3.10 環境を用意
mamba create -y -p ./.conda-envs/oriongeno python=3.10.18 pip biopython=1.85
conda activate ./.conda-envs/oriongeno
python -m pip install -r requirements.min.txt
python -m pip install --no-cache-dir --no-deps -r requirements.native-cu126.txt

#git lfsも導入
mamba install -c conda-forge git-lfs -y

> python main.py -h

usage: main.py [-h] [--genome GENOME] [--output OUT] [--checkpoint CHECKPOINT] [--length SEQ_LEN] [--flank FLANK_SIZE]

               [--batch-size BATCH_SIZE] [--hmm-parallel-factor HMM_PARALLEL_FACTOR] [--hmm-decode-batch HMM_DECODE_BATCH]

               [--profile-hmm PROFILE_HMM] [--output-gene OUTPUT_GENE] [--output-repeat OUTPUT_REPEAT]

               [--gene-filter-mode {strict,none}] [--species-name SPECIES_NAME]

Run OrionGeno prediction from a genome FASTA and checkpoint.

options:

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

  --genome GENOME       Genome FASTA input path. Required unless ORIONGENO_GENOME is set.

  --output OUT          Gene GFF output path. Repeat output uses the same basename with .repeat.gff.

  --checkpoint CHECKPOINT

                        OrionGeno checkpoint directory. Required unless ORIONGENO_CHECKPOINT is set.

  --length SEQ_LEN      Output window length.

  --flank FLANK_SIZE    Context bases added to each side of every output window.

  --batch-size BATCH_SIZE

                        Model-forward batch size. Use 'auto' to estimate from available GPU memory.

  --hmm-parallel-factor HMM_PARALLEL_FACTOR

                        Override the HMM chunk-parallel factor. Use 0 to choose it automatically.

  --hmm-decode-batch HMM_DECODE_BATCH

                        HMM Viterbi decode batch size, decoupled from --batch-size. Larger values improve CPU Viterbi batch-level

                        parallelism and amortize per-step CUDA kernel-launch overhead on the GPU fallback path; memory grows with

                        the batch and a CUDA OOM is handled by halving and retrying. Use 'auto' for a conservative tuned value;

                        use 0 to reuse the model-forward batch size (legacy behavior).

  --profile-hmm PROFILE_HMM

                        Print per-batch HMM timing breakdowns.

  --output-gene OUTPUT_GENE

  --output-repeat OUTPUT_REPEAT

  --gene-filter-mode {strict,none}

                        Gene annotation filtering mode. 'strict' writes only the strict-filtered records to --output; 'none'

                        writes unfiltered predictions to --output.

  --species-name SPECIES_NAME

                        Optional species name used only for species conditioning; it does not select a checkpoint.

 

モデルウエイト

学習済みモデルをHugging Faceから取得する。系統群に対応したcheckpointディレクトリを指定して使う。

Hugging Faceのページこちら

#Hugging FaceのBGI-Research/OrionGenoリポジトリをローカルに取得
git lfs install
git clone https://huggingface.co/BGI-Research/OrionGeno

現在いるディレクトリにOrionGeno/が作られ、その中にモデル関連ファイルがダウンロードされる(OrionGeno/checkpoints/)。モデル重みは合計約4.6 GB

OrionGeno/checkpoints/

大きな系統群ごとにモデルが用意されている。植物ゲノムの遺伝子予測を行うならOrionGeno/checkpoints/oriongeno_plants/をモデルのパスとして指定する。

 

実行方法

ゲノムのfastaファイルを指定して遺伝子予測を行う。--checkpoint には、対象生物に合った系統群のディレクトリを指定する。さらに、ゲノム配列をどのような長さのchunkで切り、どれだけ周辺情報を付け、何個ずつGPUにロードするか指定する。defaultでは--length 512000で、ゲノムを512 kb単位の出力窓として処理する--flankは、512 kbの左右に追加する配列のサイズ (chunk間の重複が0 bpだと、区切った境界上にある遺伝子の予測が不完全になるため)。現在の実装では--flank 0がデフォルト。

python main.py --genome genome.fna --output oriongeno.gtf --checkpoint OrionGeno/checkpoints/oriongeno_mammals --length 512000 --flank 64000 --batch-size 4 --output-gene True --output-repeat False --species-name Arabidopsis_thaliana
  • --genome   Genome FASTA input path. Required unless ORIONGENO_GENOME is set.
  • --output     Gene GFF output path. Repeat output uses the same basename with .repeat.gff.
  • --checkpoint    OrionGeno checkpoint directory. Required unless ORIONGENO_CHECKPOINT is set.
  • --length    Output window length.
  • --flank       Context bases added to each side of every output window.
  • --batch-size   Model-forward batch size. Use 'auto' to estimate from available GPU memory.

 

RTX 3070 Ti GPUを使い、シロイヌナズナのゲノムを使ってテストした、RTX 3070 TiはVRAM量が少ないので、 --length 51200と-batch-size 2を適用した。

 

出力例

GTFが出力される。リピートを有効にした場合は、出力名に .repeat を挿入したファイルが生成される。

 

> head -n 40 oriongeno.gtf

GTFには、gene、transcript、exon、intron、CDS、start_codon、stop_codon、five_prime_utr、three_prime_utr などのfeatureが含まれる。

 

その他

  • OrionGenoは、ゲノムDNA配列を入力し、RNA-seqや相同タンパク質などの外部エビデンスを用いずに遺伝子構造を予測するab initio型の深層学習モデルである。入力された塩基配列は、まず畳み込み型のencoderによって局所的な配列特徴へ変換され、ここに対象種の系統情報を表す特徴量が統合される。続いてBiMamba層が配列を両方向から処理し、スプライス部位のような局所的な特徴だけでなく、離れたexon間の関係や長いintronを含む長距離の配列依存性を捉える。得られた特徴はdecoderによって再び塩基単位の解像度へ戻され、各塩基について遺伝子外領域、CDS、intron、5′ UTR、3′ UTRなどの遺伝子構造に対応する状態の確率が出力される。同じ内部表現からrepeat領域も別の出力headによって同時に予測されるため、遺伝子構造と反復配列を一つのモデル内で扱う構成となっている。
  • 最後にViterbiアルゴリズムによって、これらの確率と遺伝子構造上の制約を同時に満たす最尤の状態列を求め、その状態列からexon、intron、CDS、UTRなどを含む最終的な遺伝子モデルをGTFとして出力する。
  • --gene-filter-mode strictをつけると、厳格な条件を満たした遺伝子モデルのみ出力される。noneだとフィルタリングなしの結果が出力される。
  • 複数GPUを使う場合は、サブコマンドmulti--devicesを指定する。
  • GPUメモリが足りない場合、batch sizeを下げる。またchunkサイズを下げるのも有効 (512の倍数である必要がある)
  • リピート領域も出力する場合は --output-repeat True を指定する。
  • ab initio法のOrionGenoは、ゲノム配列だけから遺伝子予測を行なうことができる(ab initio予測だけで最終版の注釈が完成するわけではない。予測された遺伝子構造は、RNA-seq、タンパク質相同性、既存のアノテーションなどと照合して評価する必要がある。
  • checkpointの系統群を誤ると、結果の精度や解釈に影響する。
  • OrionGenoのコードとモデルウエイトのライセンスはAcademic & Non-Commercial Use Only。
  • OrionGenoの論文では、まさにNCBIにゲノム配列は登録されているものの、遺伝子アノテーションが付いていない真核生物ゲノムを大量にOrionGenoでアノテーションしている(昆虫、植物、魚類、哺乳類、鳥類など)。5,310ゲノムすべてを40台のNVIDIA 5090D GPUで1週間以内に処理できた。結果は良好で、予測タンパク質のBUSCO completeness中央値は97.3%、5,310ゲノムのうち85.9%(4,560ゲノム)が90%以上だった。一方、HydrozoaやTrebouxiophyceaeなど、学習データに近縁種が少ない系統では精度が低下した。この大量アノテーションによって、これまで公開データベースにアノテーション済み代表種が1種も存在しなかった718 familyに新たに遺伝子アノテーションが付いた。結果は中国のCNGB DBに公開されている。
  • 6種についてRNA-seqで確認すると、予測遺伝子の平均93.1%がTPM > 1の転写レベルの発現エビデンスを持っていた。ゲノム配列しか使っていないにもかかわらず、RNA-seq+タンパク質を利用するBRAKER3と比較してBUSCO completenessが4.4%高くなった。またAkebia trifoliataでは60 exonからなる複雑な遺伝子も配列だけから再構築できた。

 

OrionGeno public annotation database:OrionGenoで生成したアノテーションを閲覧・探索するためのデータベース

https://db.cngb.org/genomics/orion_geno?utm_source=chatgpt.com

ログインが必要。クリックしてGTFアノテーションファイルを直接ダウンロードできる (日本だとやや遅め)。

 

引用

Advancing ab initio genome annotation with OrionGeno

Lin Liu, Xudong Cai, Shengfu Wang, Yuan Deng, Yiwen Wu, Youliang Pan, Jieyu Wang, Chao Zhang, Haopeng Xia, Nongzhang Tan, Kui Su, Yang Liu, Xuping Zhou, Longqi Liu, Tong Wei, Yong Zhang, Qiye Li, Yuxiang Li, Peng Yin, Xun Xu

bioRxiv. Posted August 24, 2026.

 

関連

 

RTX5090でもテストした。デフォルト設定だと、VRAM占有量は19GBくらいだった。ランタイムは、1Gbアセンブリで1時間ほどだった。

 

(細菌) ゲノム解析からAlphaFold 3によるPPI探索までを統合したGUIツール ppigFinder

 

 AlphaFoldを用いた構造予測は構造生物学を変革し、正確なタンパク質モデリングとタンパク質間相互作用(PPI)推定のための強力な枠組みを提供してきた。しかし、ゲノム配列から候補PPIを直接発見する作業は、依然として分断され、試行錯誤に大きく依存している。通常は、オープンリーディングフレーム(ORF)の予測、機能アノテーション、候補の選択、候補相手の反復的な検討、個々の構造予測ジョブの手作業による準備、そして信頼度指標の事後的な解釈を、別々のツールで行う必要がある。

本研究では、ヌクレオチド配列からゲノムに基づくPPIを発見するための、プロジェクト指向のグラフィカルワークフローを統合した、スタンドアロンでクロスプラットフォームなデスクトップアプリケーションProtein-Protein Interaction Genomic Finder(ppigFinder)を提示する。ppigFinderは、ORF予測、機能アノテーション、ゲノム近傍の調査、AlphaFold 3ジョブの生成、リモートジョブの投入、構造信頼度の解析を一つの環境に統合する。

概念実証として、Xanthomonas citri pv. citri strain 306を対象に、VirD4を中心とするAlphaFold 3インタラクトームスクリーニングを実施し、VirD4(ORF2601)と4,303個すべての予測染色体ORFをモデル化した。鎖間の最小predicted aligned error(PAEmin)で順位付けすると、XVIPCDを含む14個のエフェクター候補がすべて予測上位1%以内に入り、上位6モデルはXVIP候補に対応した。さらに、このスクリーニングは、リファレンスゲノムのアノテーションには存在しないXVIPCD含有タンパク質を見いだし、XVIPCD結合部位とは反対側の表面に結合すると予測される高信頼度候補も同定した。

 

 

ppigFinderでは大きく分けて以下を行う。

  1. 細菌ゲノムFASTA読み込み
  2. ProdigalによるORF予測
  3. BLASTやHMMERによるORFの機能的アノテーション
  4. 遺伝子近傍から手動で目的タンパク質と相互作用させたい候補の選択
  5. AlphaFold 3用のジョブの生成
  6. AF3ジョブをリモート計算環境へ投入
  7. AF3結果を読み込み、PAE_minやipTMなどでPPI候補を順位付けする

=> 予測された相互作用候補を評価する

 

インストール

Python 3.8以上が必要。WSLでConda環境を作成してテストした。

GitHub

# GitHub
git clone https://github.com/leepusp/ppigfinder.git
cd ppigfinder

# Conda
mamba create -n ppigfinder -c conda-forge python=3.11 numpy matplotlib pyqt -y
conda activate ppigfinder

# 推奨依存関係
python -m pip install pyrodigal
python -m pip install -e .

 

実行方法

GUIの起動

python main.py

GUIでは細菌ゲノムのFASTA、GenBank、SnapGene互換ファイルを読み込み、ORF予測を行った後、候補を選択してAlphaFold 3ジョブを作成することができる。

 

ゲノムをロードする。

 

翻訳 (遺伝子予測)。Translate genomeから遺伝子予測方法を選択する。

クリックしたら、そのまま他のボタンは押さずにしばらく待つ。ほかのボタンを押すとフリーズすることがある。

 

prodigalを選択したところ、数秒で結果が出力された。

表は並べ替えたりフィルタリングできる。

 

annotate all ORFs HMM。ユーザー提供のHMMプロファイル DBを使って機能的なアノテーションを付与する。

Pfam-Aなどをダウンロードして実行する。かなり時間がかかるので、今回はジョブの開始のみ確認した。

 

続いて予測されたタンパク質配列からAlphaFoldで複合体予測を行なう。まず、クエリとするORFを選択して、右上のパネルに登録する。

 

現在は、Modeが"Pairs (Hit vs Neighbor)となっている。これは、今ロードしたクエリORFの近傍ORF間でAlphaFoldで複合体予測するためのモードとなる。Neighbors: 5 となっているので、近いORFが5個選ばれる。

 

HIts versus all selectedだと、クエリvsクエリ以外の全タンパク質となる。

 

条件が決まったらAlphaFold Server用のJSONを生成する。

JSONは、1ジョブごとに2本のタンパク質鎖、ジョブ名、modelSeeds、dialect、versionなどを含んでいる。ローカル推論やリモート投入には、別途AlphaFold 3本体、モデルパラメータ、データベース、GPUまたは接続先HPCの設定が必要である。

 

出力例

 

JSONをAF3計算サーバーに投入する。

エラーが発生した。*1

 

結果のファイルをダウンロードして解凍し、File => Load AF3 directoryから読み込む。

読み込んでAF3 Table resultsに切り替えた。

 

=> 結果を順位付けして、重要性野高いPPIを絞っていく。そのために、AE_min が小さい順に並べたり、ipTMが高いペアから調査していく。

 

(この後のPPI mapとPPI analysisは、信頼性の高いタンパク質ペアが見つからなかったため省略 )

 

その他

  • ppigFinderは、AlphaFold 3の計算そのものを代替するのではなく、候補の整理、入力JSONの生成、HPCなど外部環境への投入、結果の読み込みと順位付けをつなぐ点を特徴とする。
  • ppigFinderは、予測ORFの表、タンパク質FASTA、TSV/CSV、プロジェクトスナップショット、HTMLレポート、AlphaFold 3用JSONなどを出力する。AlphaFold 3の結果を読み込んだ場合は、ipTM、pTM、cp_ipTM、PAE_inter、PAE_min、接触率などを出力する。
  • ppigFinderの論文の念実証では、VirD41つをクエリのタンパク質として、全プロテオーム約4,300 ORFとのAlphaFold 3複合体予測を網羅的に実施している。各複合体は主にinter-chain PAE_minを用いて順位付けし、相互作用候補を絞り込んた。その結果、既知のVirD4相互作用タンパク質14個がすべて上位1%以内に入り、本手法の妥当性が確認された。興味深いことに、上位に位置する未知タンパク質も見つかり、既知の結合部位とは異なるVirD4表面に結合すると予測され、新しい相互作用様式の存在も示唆された。

引用

ppigFinder: an integrated desktop application for bacterial genome annotation and AlphaFold 3 based protein-protein interaction screening.

Oka GU, Adan WC, Calomeno CQ, de Souza RF.

bioRxiv. Posted August 26, 2026. 

 

*1

AlphaFold 3用JSONを出力したところ、読み込めなかった。原因はJSON形式で、ppigFinderの出力は単一オブジェクト {} になっているが、AlphaFold Serverでは1ジョブだけの場合でもトップレベルを配列 [] にする必要がある。また、versionは1とする。

 

 

タンパク質間相互作用の界面を検索・分類する Foldseek-Interface

 

 タンパク質間相互作用は、細胞内のきわめて多様な機能を媒介しており、そのため結合様式も多岐にわたる。近年、タンパク質構造の全体像を網羅的に把握し分類しようとする大規模な取り組みが進んでいる一方で、相互作用界面の構造多様性をインタラクトーム規模で評価し、クラスタリングするための同等の手法はこれまで存在しなかった。本研究では、三次元の相互作用界面構造を検索可能な配列へと変換することで、タンパク質相互作用界面の高速なアラインメントとクラスタリングを可能にする手法、Foldseek-Interfaceを開発した。本手法は、最先端の既存ツールと同等の精度を示しながら、最大230倍高速に動作する。Foldseek-InterfaceをPDBに登録されているすべての生物学的アセンブリに適用した結果、310万の二量体を77,167個の相互作用界面クラスターに分類した。さらに、このリソースを用いて、相互作用界面の多様性、進化、および病原体による分子擬態の特徴を解析した。また、予測されたタンパク質複合体構造のデータベースにFoldseek-Interfaceを適用することで、これまで知られていない可能性のある新規な相互作用界面タイプを迅速に見いだすことができ、今後の実験的検証に値する候補を抽出できることを示した。Foldseek-Interfaceおよび相互作用界面クラスターのリソースは、検索用Webサーバー(https://search.foldseek.com/interface)および探索用Webサーバー(https://interface.foldseek.com)として無償で公開されている。

 

インストール

WSLで AVX2版 (GPU build)をダウンロードしてテストした。

Github

# Linux AVX2 build (check using: cat /proc/cpuinfo | grep avx2)
wget https://mmseqs.com/foldseek/foldseek-linux-avx2.tar.gz; tar xvzf foldseek-linux-avx2.tar.gz; export PATH=$(pwd)/foldseek/bin/:$PATH

# Linux AVX2 & GPU build (req. glibc >= 2.17 and nvidia driver >=525.60.13)
wget https://mmseqs.com/foldseek/foldseek-linux-gpu.tar.gz; tar xvfz foldseek-linux-gpu.tar.gz; export PATH=$(pwd)/foldseek/bin/:$PATH

# Linux ARM64 build
wget https://mmseqs.com/foldseek/foldseek-linux-arm64.tar.gz; tar xvzf foldseek-linux-arm64.tar.gz; export PATH=$(pwd)/foldseek/bin/:$PATH

#mamba (注;2026年9月1日現在のバージョンでは Foldseek-Interfaceには対応していない)
mamba create -n foldseek -y
conda activate foldseek
mamba install -c conda-forge -c bioconda foldseek -y

> foldseek 

Foldseek enables fast and sensitive comparisons of large structure sets. It reaches sensitivities similar to state-of-the-art structural aligners while being at least 20,000 times faster.

 

Please cite:

van Kempen, M., Kim, S.S., Tumescheit, C., Mirdita, M., Lee, J., Gilchrist, C.L.M., Söding, J., and Steinegger, M. Fast and accurate protein structure search with Foldseek. Nature Biotechnology, doi:10.1038/s41587-023-01773-0 (2023)

 

foldseek Version: e28c8d2045b2603f192f20ffdc81b6084b53cc5d

© Michel van Kempen, Stephanie Kim, Charlotte Tumescheit, Milot Mirdita, Jeongjae Lee, Cameron L. M. Gilchrist, Johannes Söding, Martin Steinegger

 

usage: foldseek <command> [<args>]

 

Easy workflows for plain text input/output

  easy-search           Structual search

  easy-cluster          Slower, sensitive clustering

  easy-rbh              Find reciprocal best hit

  easy-multimercluster  Multimer level cluster

  easy-interfacecluster Interface level cluster

  easy-interfacesearch  Interface level search

  easy-multimersearch   Multimer level search

 

Main workflows for database input/output

  createdb              Convert PDB/mmCIF/tar[.gz]/DB files or directory/TSV to a structure DB

  search                Sensitive homology search

  rbh                   Reciprocal best hit search

  cluster               Slower, sensitive clustering

  structureclusterupdate        Update structure clustering with new sequences using structural alignment

  multimercluster       Multimer level cluster

  interfacecluster      Interface level cluster

  interfacesearch       Interface level search

  multimersearch        Multimer level search

 

Input database creation

  databases             List and download databases

  createindex           Store precomputed index on disk to reduce search overhead

  createclusearchdb     Build a searchable cluster database allowing for faster searches

 

Unite and intersect databases

  createsubdb           Create a subset of a DB from list of DB keys

  createinterfacedb     Create an interface DB of a dimer DB

  createstructinterfacedb       Create an interface DB of a dimer DB

  createdimerdb         Create a dimer DB of a DB

 

Format conversion for downstream processing

  structty              Launch StrucTTY viewer for foldseek results

  convertalis           Convert alignment DB to BLAST-tab, SAM or custom format

  compressca            Create a new C-alpha DB with chosen compression encoding from a sequence DB

  convert2pdb           Convert a foldseek structure db to a single multi model PDB/mmCIF file or a directory of PDB/mmCIF files

  createmultimerreport  Convert complexDB to tsv format

 

Prefiltering

  expandmultimer        Re-prefilter to ensure complete alignment between multimers

 

Alignment

  tmalign               Compute tm-score

  lolalign              LoLalign. creating structure alignmetns by optimizing the Local distance log odds (LoL) score

  structurealign        Compute structural alignment using 3Di alphabet, amino acids and neighborhood information

  structurerescorediagonal      Compute sequence identity for diagonal

  aln2tmscore           Compute tmscore of an alignment database

  scoremultimer         Get multimer level alignments from alignmentDB

 

Clustering

  clust                 Cluster result by Set-Cover/Connected-Component/Greedy-Incremental

 

Profile databases

  result2profile        Compute profile DB from a result DB for both amino acid and 3di

 

>foldseek easy-interfacecluster -h

 usage: foldseek easy-interfacecluster <i:PDB|mmCIF[.gz]> ... <i:PDB|mmCIF[.gz]> <o:clusterPrefix> <tmpDir> [options]

 By Sooyoung Cha <ellen2g77@gmail.com>

options: prefilter:

 --comp-bias-corr INT                    Correct for locally biased amino acid composition (range 0-1) [1]

 --comp-bias-corr-scale FLOAT            Correct for locally biased amino acid composition (range 0-1) [1.000]

 --seed-sub-mat TWIN                     Substitution matrix file for k-mer generation [aa:3di.out,nucl:3di.out]

 -s FLOAT                                Sensitivity: 1.0 faster; 4.0 fast; 7.5 sensitive [4.000]

 -k INT                                  k-mer length (0: automatically set to optimum) [0]

 --target-search-mode INT                target search mode (0: regular k-mer, 1: similar k-mer) [0]

 --k-score TWIN                          k-mer threshold for generating similar k-mer lists [seq:2147483647,prof:2147483647]

 --max-seqs INT                          Maximum results per query sequence allowed to pass the prefilter (affects sensitivity) [300]

 --split INT                             Split input into N equally distributed chunks. 0: set the best split automatically [0]

 --split-mode INT                        0: split target db; 1: split query db; 2: auto, depending on main memory [2]

 --split-memory-limit BYTE               Set max memory per split. E.g. 800B, 5K, 10M, 1G. Default (0) to all available system memory [0]

 --diag-score BOOL                       Use ungapped diagonal scoring during prefilter [1]

 --exact-kmer-matching INT               Extract only exact k-mers for matching (range 0-1) [0]

 --mask INT                              Mask sequences in prefilter stage with tantan: 0: w/o low complexity masking, 1: with low complexity masking [0]

 --mask-prob FLOAT                       Mask sequences is probablity is above threshold [1.000]

 --mask-lower-case INT                   Lowercase letters will be excluded from k-mer search 0: include region, 1: exclude region [1]

 --mask-n-repeat INT                     Repeat letters that occur > threshold in a rwo [6]

 --min-ungapped-score INT                Accept only matches with ungapped alignment score above threshold [30]

 --spaced-kmer-mode INT                  0: use consecutive positions in k-mers; 1: use spaced k-mers [1]

 --spaced-kmer-pattern STR               User-specified spaced k-mer pattern

 --local-tmp STR                         Path where some of the temporary files will be created

 --exhaustive-search BOOL                Turns on an exhaustive all vs all search by by passing the prefilter step [1]

align:

 --sort-by-structure-bits INT            sort by bits*sqrt(alnlddt*alntmscore) [1]

 -a BOOL                                 Add backtrace string (convert to alignments with mmseqs convertalis module) [0]

 --alignment-mode INT                    How to compute the alignment:

                                         0: automatic

                                         1: only score and end_pos

                                         2: also start_pos and cov

                                         3: also seq.id [0]

 --alignment-output-mode INT             How to compute the alignment:

                                         0: automatic

                                         1: only score and end_pos

                                         2: also start_pos and cov

                                         3: also seq.id

                                         4: only ungapped alignment

                                         5: score only (output) cluster format [0]

 -e DOUBLE                               List matches below this E-value (range 0.0-inf) [1.000E+07]

 --min-seq-id FLOAT                      List matches above this sequence identity (for clustering) (range 0.0-1.0) [0.000]

 --min-aln-len INT                       Minimum alignment length (range 0-INT_MAX) [0]

 --seq-id-mode INT                       0: alignment length 1: shorter, 2: longer sequence [0]

 --alt-ali INT                           Show up to this many alternative alignments [0]

 -c FLOAT                                List matches above this fraction of aligned (covered) residues (see --cov-mode) [0.000]

 --cov-mode INT                          0: coverage of query and target

                                         1: coverage of target

                                         2: coverage of query

                                         3: target seq. length has to be at least x% of query length

                                         4: query seq. length has to be at least x% of target length

                                         5: short seq. needs to be at least x% of the other seq. length [0]

 --max-rejected INT                      Maximum rejected alignments before alignment calculation for a query is stopped [2147483647]

 --max-accept INT                        Maximum accepted alignments before alignment calculation for a query is stopped [2147483647]

 --gap-open TWIN                         Gap open cost [aa:10,nucl:10]

 --gap-extend TWIN                       Gap extension cost [aa:1,nucl:1]

 --min-assigned-chains-ratio FLOAT       Minimum ratio of assigned chains out of all query chains > thr [0.0,1.0] [0.000]

 --monomer-include-mode INT              Monomer Complex Inclusion 0: include monomers, 1: NOT include monomers [0]

 --expand-multimer-evalue DOUBLE         E-value threshold for multimer chain expansion (range 0.0-inf) [1.000E+04]

clust:

 --cluster-mode INT                      0: Set-Cover (greedy)

                                         1: Connected component (BLASTclust)

                                         2,3: Greedy clustering by sequence length (CDHIT) [0]

 --max-iterations INT                    Maximum depth of breadth first search in connected component clustering [1000]

 --similarity-type INT                   Type of score used for clustering. 1: alignment score 2: sequence identity [2]

 --set-mode BOOL                         0: Cluster by each entry

                                         1: Cluster by set [0]

kmermatcher:

 --weights STR                           Weights used for cluster priorization

 --cluster-weight-threshold FLOAT        Weight threshold used for cluster priorization [0.900]

profile:

 --mask-profile INT                      Mask query sequence of profile using tantan [0,1] [1]

 --e-profile DOUBLE                      Include sequences matches with < E-value thr. into the profile (>=0.0) [1.000E-01]

 --wg BOOL                               Use global sequence weighting for profile calculation [0]

 --filter-msa INT                        Filter msa: 0: do not filter, 1: filter [1]

 --filter-min-enable INT                 Only filter MSAs with more than N sequences, 0 always filters [0]

 --max-seq-id FLOAT                      Reduce redundancy of output MSA using max. pairwise sequence identity [0.0,1.0] [0.900]

 --qid STR                               Reduce diversity of output MSAs using min.seq. identity with query sequences [0.0,1.0]

                                         Alternatively, can be a list of multiple thresholds:

                                         E.g.: 0.15,0.30,0.50 to defines filter buckets of ]0.15-0.30] and ]0.30-0.50] [0.0]

 --qsc FLOAT                             Reduce diversity of output MSAs using min. score per aligned residue with query sequences [-50.0,100.0] [-20.000]

 --cov FLOAT                             Filter output MSAs using min. fraction of query residues covered by matched sequences [0.0,1.0] [0.000]

 --diff INT                              Filter MSAs by selecting most diverse set of sequences, keeping at least this many seqs in each MSA block of length 50 [1000]

 --pseudo-cnt-mode INT                   use 0: substitution-matrix or 1: context-specific pseudocounts [0]

 --profile-output-mode INT               Profile output mode: 0: binary log-odds 1: human-readable frequencies [0]

 --num-iterations INT                    Number of iterative profile search iterations (0: auto (select optimal), 1: default, 1-n), N≥2 exactly N) [1]

misc:

 --mask-bfactor-threshold FLOAT          mask residues for seeding if b-factor < thr [0,100] [0.000]

 --save-res-index BOOL                   Saves PDB residue indices of all residues in the input structures [0]

 --input-format INT                      Format of input structures:

                                         0: Auto-detect by extension

                                         1: PDB

                                         2: mmCIF

                                         3: mmJSON

                                         4: ChemComp

                                         5: Foldcomp [0]

 --input-compression-format INT          Compression format of input structures:

                                         0: Auto/File-ending based

                                         1: gzip

                                         2: zstd [0]

 --file-include STR                      Include file names based on this regex [.*]

 --file-exclude STR                      Exclude file names based on this regex [^$]

 --tmscore-threshold FLOAT               accept alignments with a tmsore > thr [0.0,1.0] [0.000]

 --tmscore-threshold-mode INT            0: alignment, 1: query 2: target length [0]

 --lddt-threshold FLOAT                  accept alignments with a lddt > thr [0.0,1.0] [0.200]

 --alignment-type INT                    How to compute the alignment:

                                         0: 3di alignment

                                         1: TM alignment

                                         2: 3Di+AA

                                         3: LoL alignmnet [2]

 --exact-tmscore INT                     turn on fast exact TMscore (slow), default is approximate [0]

 --prefilter-mode INT                    prefilter mode: 0: kmer/ungapped 1: ungapped, 2: nofilter, 3: ungapped&gapped [0]

 --tmalign-hit-order INT                 order hits by 0: (qTM+tTM)/2, 1: qTM, 2: tTM, 3: min(qTM,tTM) 4: max(qTM,tTM) [0]

 --tmalign-fast INT                      turn on fast search in TM-align [1]

 --lolalign-multidomain INT              MultiDomain Mode LoLalign [1]

 --candidate-seeds INT                   Number of candidate seeds to consider for expansion [10]

 --refine-seeds INT                      Whether to refine seeds by re-aligning top candidate seeds and picking the best one for expansion [3]

 --allow-deletion BOOL                   Allow deletions in a MSA [0]

 --cluster-search INT                    first find representative then align all cluster members [0]

 --interface-lddt-threshold FLOAT        accept alignments with a lddt > thr [0.0,1.0] [0.000]

 --chain-tm-threshold FLOAT              accept alignments with a tmsore > thr [0.0,1.0] [0.000]

 --multimer-tm-threshold FLOAT           accept alignments with a multimer tmsore > thr [0.0,1.0] [0.400]

 --min-aligned-chains INT                save alignments with at least n chain aligned between query and target [2]

 --distance-threshold FLOAT              Residues with C-alpha below this threshold will be part of interface [10.000]

 --min-interface-residues-perchain INT   save dimer/interface if there are N numbers of residues per chain [4]

common:

 --gpu INT                               Use GPU (CUDA) if possible [0]

 --prostt5-model STR                     Path to ProstT5 model

 --threads INT                           Number of CPU-cores used (all by default) [16]

 -v INT                                  Verbosity level: 0: quiet, 1: +errors, 2: +warnings, 3: +info [3]

 --sub-mat TWIN                          Substitution matrix file [aa:3di.out,nucl:3di.out]

 --max-seq-len INT                       Maximum sequence length [65535]

 --db-load-mode INT                      Database preload mode 0: auto, 1: fread, 2: mmap, 3: mmap+touch [0]

 --compressed INT                        Write compressed output [0]

 --gpu-server INT                        Use GPU server [0]

 --gpu-server-wait-timeout INT           Wait for GPU server for 0: don't wait -1: no wait limit: >0 this many seconds [600]

 --remove-tmp-files BOOL                 Delete temporary files [1]

 --force-reuse BOOL                      Reuse tmp filse in tmp/latest folder ignoring parameters and version changes [0]

 --mpi-runner STR                        Use MPI on compute cluster with this MPI command (e.g. "mpirun -np 42")

expert:

 --chain-name-mode INT                   Add chain to name:

                                         0: auto

                                         1: always add

                                          [0]

 --model-name-mode INT                   Add model to name:

                                         0: auto

                                         1: always add

                                          [0]

 --write-mapping INT                     write _mapping file containing mapping from internal id to taxonomic identifier [0]

 --write-foldcomp INT                    write _fcz Foldcomp database [0]

 --coord-store-mode INT                  Coordinate storage mode:

                                         1: C-alpha as float

                                         2: C-alpha as difference (uint16_t) [2]

 --write-lookup INT                      write .lookup file containing mapping from internal id, fasta id and file number [1]

 --taxon-list STR                        Taxonomy ID, possibly multiple values separated by ','

 --blocklen INT                          Block length for forward-backward [16]

 --multimer-report-mode INT              Complex report mode:

                                         0: No report

                                         1: Write complex report [1]

 

examples:

 #Clustering of PDB files

 foldseek easy-interfacecluster examples/ result tmp

 # Cluster output

 #  - result_rep_seq.fasta: Representatives

 #  - result_cluster.tsv:   Adjacency list

 

 # Important parameter: --cov-mode and -c

 #                  --cov-mode

 #                  0    1    2

 # Q: MAVGTACRPA  60%  IGN  60%

 # T: -AVGTAC---  60% 100%  IGN

 #        -c 0.7    -    +    -

 #        -c 0.6    +    +    +

 

 

references:

 - Kim, W., Mirdita, M., Levy Karin, E., Gilchrist, C.L.M., Schweke, H., Söding, J., Levy, E., and Steinegger, M. Rapid and sensitive protein complex alignment with Foldseek-Multimer. Nature Methods, doi:10.1038/s41592-025-02593-7 (2025)

 

> foldseek easy-interfacesearch -h

usage: foldseek easy-interfacesearch <i:PDB|mmCIF[.gz]> ... <i:PDB|mmCIF[.gz]>|<i:stdin> <i:targetFastaFile[.gz]>|<i:targetDB> <o:outputFileName> <tmpDir> [options]

 By Sooyoung Cha <ellen2g77@gmail.com>

options: prefilter:

 --comp-bias-corr INT                    Correct for locally biased amino acid composition (range 0-1) [1]

 --comp-bias-corr-scale FLOAT            Correct for locally biased amino acid composition (range 0-1) [1.000]

 --seed-sub-mat TWIN                     Substitution matrix file for k-mer generation [aa:3di.out,nucl:3di.out]

 -s FLOAT                                Sensitivity: 1.0 faster; 4.0 fast; 7.5 sensitive [4.000]

 -k INT                                  k-mer length (0: automatically set to optimum) [0]

 --target-search-mode INT                target search mode (0: regular k-mer, 1: similar k-mer) [0]

 --k-score TWIN                          k-mer threshold for generating similar k-mer lists [seq:2147483647,prof:2147483647]

 --max-seqs INT                          Maximum results per query sequence allowed to pass the prefilter (affects sensitivity) [300]

 --split INT                             Split input into N equally distributed chunks. 0: set the best split automatically [0]

 --split-mode INT                        0: split target db; 1: split query db; 2: auto, depending on main memory [2]

 --split-memory-limit BYTE               Set max memory per split. E.g. 800B, 5K, 10M, 1G. Default (0) to all available system memory [0]

 --diag-score BOOL                       Use ungapped diagonal scoring during prefilter [1]

 --exact-kmer-matching INT               Extract only exact k-mers for matching (range 0-1) [0]

 --mask INT                              Mask sequences in prefilter stage with tantan: 0: w/o low complexity masking, 1: with low complexity masking [0]

 --mask-prob FLOAT                       Mask sequences is probablity is above threshold [1.000]

 --mask-lower-case INT                   Lowercase letters will be excluded from k-mer search 0: include region, 1: exclude region [1]

 --mask-n-repeat INT                     Repeat letters that occur > threshold in a rwo [6]

 --min-ungapped-score INT                Accept only matches with ungapped alignment score above threshold [30]

 --spaced-kmer-mode INT                  0: use consecutive positions in k-mers; 1: use spaced k-mers [1]

 --spaced-kmer-pattern STR               User-specified spaced k-mer pattern

 --local-tmp STR                         Path where some of the temporary files will be created

 --exhaustive-search BOOL                Turns on an exhaustive all vs all search by by passing the prefilter step [1]

align:

 --sort-by-structure-bits INT            sort by bits*sqrt(alnlddt*alntmscore) [1]

 -a BOOL                                 Add backtrace string (convert to alignments with mmseqs convertalis module) [0]

 --alignment-mode INT                    How to compute the alignment:

                                         0: automatic

                                         1: only score and end_pos

                                         2: also start_pos and cov

                                         3: also seq.id [0]

 --alignment-output-mode INT             How to compute the alignment:

                                         0: automatic

                                         1: only score and end_pos

                                         2: also start_pos and cov

                                         3: also seq.id

                                         4: only ungapped alignment

                                         5: score only (output) cluster format [0]

 -e DOUBLE                               List matches below this E-value (range 0.0-inf) [1.000E+07]

 --min-seq-id FLOAT                      List matches above this sequence identity (for clustering) (range 0.0-1.0) [0.000]

 --min-aln-len INT                       Minimum alignment length (range 0-INT_MAX) [0]

 --seq-id-mode INT                       0: alignment length 1: shorter, 2: longer sequence [0]

 --alt-ali INT                           Show up to this many alternative alignments [0]

 -c FLOAT                                List matches above this fraction of aligned (covered) residues (see --cov-mode) [0.000]

 --cov-mode INT                          0: coverage of query and target

                                         1: coverage of target

                                         2: coverage of query

                                         3: target seq. length has to be at least x% of query length

                                         4: query seq. length has to be at least x% of target length

                                         5: short seq. needs to be at least x% of the other seq. length [0]

 --max-rejected INT                      Maximum rejected alignments before alignment calculation for a query is stopped [2147483647]

 --max-accept INT                        Maximum accepted alignments before alignment calculation for a query is stopped [2147483647]

 --gap-open TWIN                         Gap open cost [aa:10,nucl:10]

 --gap-extend TWIN                       Gap extension cost [aa:1,nucl:1]

 --min-assigned-chains-ratio FLOAT       Minimum ratio of assigned chains out of all query chains > thr [0.0,1.0] [0.000]

 --monomer-include-mode INT              Monomer Complex Inclusion 0: include monomers, 1: NOT include monomers [0]

 --expand-multimer-evalue DOUBLE         E-value threshold for multimer chain expansion (range 0.0-inf) [1.000E+04]

 --view-structty BOOL                    Launch StrucTTY viewer after result generation (requires a build with -DENABLE_STRUCTTY=1) [0]

 --structty-mode INT                     Color mode for the StrucTTY viewer:

                                         0: protein

                                         1: chain

                                         2: rainbow

                                         3: plddt

                                         4: interface

                                         5: conservation

                                         6: align

                                         7: align-fs

                                         8: align-near [0]

 --structty-ss BOOL                      Show secondary structure (helix/sheet) in the StrucTTY viewer [0]

profile:

 --mask-profile INT                      Mask query sequence of profile using tantan [0,1] [1]

 --e-profile DOUBLE                      Include sequences matches with < E-value thr. into the profile (>=0.0) [1.000E-01]

 --wg BOOL                               Use global sequence weighting for profile calculation [0]

 --filter-msa INT                        Filter msa: 0: do not filter, 1: filter [1]

 --filter-min-enable INT                 Only filter MSAs with more than N sequences, 0 always filters [0]

 --max-seq-id FLOAT                      Reduce redundancy of output MSA using max. pairwise sequence identity [0.0,1.0] [0.900]

 --qid STR                               Reduce diversity of output MSAs using min.seq. identity with query sequences [0.0,1.0]

                                         Alternatively, can be a list of multiple thresholds:

                                         E.g.: 0.15,0.30,0.50 to defines filter buckets of ]0.15-0.30] and ]0.30-0.50] [0.0]

 --qsc FLOAT                             Reduce diversity of output MSAs using min. score per aligned residue with query sequences [-50.0,100.0] [-20.000]

 --cov FLOAT                             Filter output MSAs using min. fraction of query residues covered by matched sequences [0.0,1.0] [0.000]

 --diff INT                              Filter MSAs by selecting most diverse set of sequences, keeping at least this many seqs in each MSA block of length 50 [1000]

 --pseudo-cnt-mode INT                   use 0: substitution-matrix or 1: context-specific pseudocounts [0]

 --profile-output-mode INT               Profile output mode: 0: binary log-odds 1: human-readable frequencies [0]

 --num-iterations INT                    Number of iterative profile search iterations (0: auto (select optimal), 1: default, 1-n), N≥2 exactly N) [1]

misc:

 --mask-bfactor-threshold FLOAT          mask residues for seeding if b-factor < thr [0,100] [0.000]

 --save-res-index BOOL                   Saves PDB residue indices of all residues in the input structures [0]

 --input-format INT                      Format of input structures:

                                         0: Auto-detect by extension

                                         1: PDB

                                         2: mmCIF

                                         3: mmJSON

                                         4: ChemComp

                                         5: Foldcomp [0]

 --input-compression-format INT          Compression format of input structures:

                                         0: Auto/File-ending based

                                         1: gzip

                                         2: zstd [0]

 --file-include STR                      Include file names based on this regex [.*]

 --file-exclude STR                      Exclude file names based on this regex [^$]

 --tmscore-threshold FLOAT               accept alignments with a tmsore > thr [0.0,1.0] [0.000]

 --tmscore-threshold-mode INT            0: alignment, 1: query 2: target length [0]

 --lddt-threshold FLOAT                  accept alignments with a lddt > thr [0.0,1.0] [0.200]

 --alignment-type INT                    How to compute the alignment:

                                         0: 3di alignment

                                         1: TM alignment

                                         2: 3Di+AA

                                         3: LoL alignmnet [2]

 --exact-tmscore INT                     turn on fast exact TMscore (slow), default is approximate [0]

 --prefilter-mode INT                    prefilter mode: 0: kmer/ungapped 1: ungapped, 2: nofilter, 3: ungapped&gapped [0]

 --tmalign-hit-order INT                 order hits by 0: (qTM+tTM)/2, 1: qTM, 2: tTM, 3: min(qTM,tTM) 4: max(qTM,tTM) [0]

 --tmalign-fast INT                      turn on fast search in TM-align [1]

 --lolalign-multidomain INT              MultiDomain Mode LoLalign [1]

 --candidate-seeds INT                   Number of candidate seeds to consider for expansion [10]

 --refine-seeds INT                      Whether to refine seeds by re-aligning top candidate seeds and picking the best one for expansion [3]

 --allow-deletion BOOL                   Allow deletions in a MSA [0]

 --cluster-search INT                    first find representative then align all cluster members [0]

 --interface-lddt-threshold FLOAT        accept alignments with a lddt > thr [0.0,1.0] [0.000]

 --chain-tm-threshold FLOAT              accept alignments with a tmsore > thr [0.0,1.0] [0.000]

 --multimer-tm-threshold FLOAT           accept alignments with a multimer tmsore > thr [0.0,1.0] [0.400]

 --min-aligned-chains INT                save alignments with at least n chain aligned between query and target [2]

 --format-mode INT                       Output format:

                                         0: BLAST-TAB

                                         1: SAM

                                         2: BLAST-TAB + query/db length

                                         3: Pretty HTML

                                         4: BLAST-TAB + column headers

                                         5: Calpha only PDB super-posed to query

                                         BLAST-TAB (0) and BLAST-TAB + column headers (4)support custom output formats (--format-output)

                                         (5) Superposed PDB files (Calpha only) [0]

 --format-output STR                     Choose comma separated list of output columns from: query,target,evalue,gapopen,pident,fident,nident,qstart,qend,qlen

                                         tstart,tend,tlen,alnlen,raw,bits,cigar,qseq,tseq,q3di,t3di,qheader,theader,qaln,taln,q3dialn,t3dialn,mismatch,qcov,tcov

                                         qset,qsetid,tset,tsetid,taxid,taxname,taxlineage,

                                         lddt,lddtfull,qca,tca,t,u,qtmscore,ttmscore,alntmscore,rmsd,prob

                                         complexqtmscore,complexttmscore,complexu,complext,qcomplexcoverage,tcomplexcoverage,qchaintms,tchaintms,qchains,tchains,interfacelddt,complexassignid

                                         qkey,tkey

                                          [query,target,fident,alnlen,mismatch,gapopen,qstart,qend,tstart,tend,evalue,bits]

 --distance-threshold FLOAT              Residues with C-alpha below this threshold will be part of interface [10.000]

 --min-interface-residues-perchain INT   save dimer/interface if there are N numbers of residues per chain [4]

common:

 --gpu INT                               Use GPU (CUDA) if possible [0]

 --threads INT                           Number of CPU-cores used (all by default) [16]

 -v INT                                  Verbosity level: 0: quiet, 1: +errors, 2: +warnings, 3: +info [3]

 --sub-mat TWIN                          Substitution matrix file [aa:3di.out,nucl:3di.out]

 --max-seq-len INT                       Maximum sequence length [65535]

 --db-load-mode INT                      Database preload mode 0: auto, 1: fread, 2: mmap, 3: mmap+touch [0]

 --compressed INT                        Write compressed output [0]

 --gpu-server INT                        Use GPU server [0]

 --gpu-server-wait-timeout INT           Wait for GPU server for 0: don't wait -1: no wait limit: >0 this many seconds [600]

 --remove-tmp-files BOOL                 Delete temporary files [1]

 --force-reuse BOOL                      Reuse tmp filse in tmp/latest folder ignoring parameters and version changes [0]

 --mpi-runner STR                        Use MPI on compute cluster with this MPI command (e.g. "mpirun -np 42")

expert:

 --chain-name-mode INT                   Add chain to name:

                                         0: auto

                                         1: always add

                                          [0]

 --model-name-mode INT                   Add model to name:

                                         0: auto

                                         1: always add

                                          [0]

 --write-mapping INT                     write _mapping file containing mapping from internal id to taxonomic identifier [0]

 --write-foldcomp INT                    write _fcz Foldcomp database [0]

 --coord-store-mode INT                  Coordinate storage mode:

                                         1: C-alpha as float

                                         2: C-alpha as difference (uint16_t) [2]

 --write-lookup INT                      write .lookup file containing mapping from internal id, fasta id and file number [1]

 --taxon-list STR                        Taxonomy ID, possibly multiple values separated by ','

 --blocklen INT                          Block length for forward-backward [16]

 --multimer-report-mode INT              Complex report mode:

                                         0: No report

                                         1: Write complex report [1]

 --db-output BOOL                        Return a result DB instead of a text file [0]

 

examples:

 # Search a single/multiple PDB file's interface against a set of PDB files and get interface-multimer level alignments

 foldseek easy-interfacesearch example/1tim.pdb.gz example/8tim.pdb.gz result tmp

 # Format output differently

 foldseek easy-interfacesearch example/1tim.pdb.gz example/8tim.pdb.gz result tmp --format-output query,target,qstart,tstart,cigar

 # Align with TMalign (global)

 foldseek easy-interfacesearch example/1tim.pdb.gz example/8tim.pdb.gz result tmp --alignment-type 1

 # Skip prefilter and perform an exhaustive alignment (slower but more sensitive)

 foldseek easy-interfacesearch example/1tim.pdb.gz example/8tim.pdb.gz result tmp --exhaustive-search 1

 

 

references:

 - Kim, W., Mirdita, M., Levy Karin, E., Gilchrist, C.L.M., Schweke, H., Söding, J., Levy, E., and Steinegger, M. Rapid and sensitive protein complex alignment with Foldseek-Multimer. Nature Methods, doi:10.1038/s41592-025-02593-7 (2025)

 

実行方法

foldseek easy-interfacecluster

複数のタンパク質複合体構造からタンパク質同士が接触している界面を抽出し、似た界面ごとにクラスタリングする。PDBかmmCIF(.cif、.mmcif)ファイルをディレクトリに集めて実行する。

foldseek easy-interfacecluster structures/ interface_clusters tmp/ --threads 8

 

出力例

interface_clusters_rep_seq.fasta

interface_clusters_cluster.tsv

exampleにある2つのPDBファイルを使って相互作用の界面に基づくクラスタリングをすると、8tim_A_Bを代表とする1つのクラスタができ、その中に2構造とも含まれた。

 

foldseek easy-interfacesearch 

界面を検索するには、クエリ構造と検索対象の構造データベースを指定する。対象データベースを何度も検索する場合は、あらかじめ構造データベースを作成しておく。

foldseek createdb structures/ targetDB
foldseek easy-interfacesearch query.pdb targetDB interface_hits.tsv tmp/ --threads 8

出力例

界面クラスタリングでは、代表界面とメンバーの対応を示すクラスタTSV、代表配列をまとめたFASTA、界面アラインメントのレポートなどが生成される。検索では、クエリと対象、アラインメント長、E-value、スコア、界面の類似度に関する情報をタブ区切りで取得できる。

 

interface_search.tsv

複数のタンパク質複合体から抽出した相互作用界面同士を比較し、類似する界面同士の検索結果をタブ区切りで記録したファイルとなる。各行には、比較した界面、配列一致率、整列長、E-value、スコアなどが含まれる。

 

検索感度、E-value、被覆率、界面LDDTを指定する。

foldseek easy-interfacesearch query.pdb targetDB
interface_hits.tsv tmp/ -s 4 -e 1e-3 --interface-lddt-threshold 0.65
  • --interface-lddt-threshold    accept alignments with a lddt > thr [0.0,1.0] [0.000]
  • -s    Sensitivity: 1.0 faster; 4.0 fast; 7.5 sensitive [4.000]
  • -e    List matches below this E-value (range 0.0-inf)

-s 4は検索感度を指定している。値を大きくすると遠い構造類似も拾いやすくなる。-e 1e-3は、E-valueが0.001未満の結果だけを出力する。--interface-lddt-threshold 0.65は、界面LDDTが0.65を超える検索結果だけを出力する。

 

Foldseek Search Server - PDB/mmCIFの複合体構造をアップロードして、その複合体界面と似た界面をPDBから探すことができる。

https://search.foldseek.com/interface

従来のFoldseekはタンパク質単体や複合体の類似した立体構造を検索する。コレに対して、Foldseek-Interfaceは2つのタンパク質鎖が接触している相互作用界面だけを取り出し、その界面構造を検索する。

 

Protein Interface Clusters - クラスタリング用のWebサービス

https://interface.foldseek.com

Protein Interface Clustersは、PDB全体をFoldseek-Interfaceでクラスタリングして作った既知タンパク質界面の分類データベース。プレプリントでは、PDB由来の約310万dimers(相互作用している2本のポリペプチド鎖のペア)を最終的に 77,167 interface clusters に分類し、そのクラスターを探索用Webサーバーとして公開している。

 

検索結果の例

検索結果には、類似した相互作用界面をもつPDB構造が並び、それぞれについて PDB ID、相互作用しているchain、UniProt ID、分類群、同じinterface clusterに含まれる構造数が表示される。この例では14-3-3関連タンパク質を含む複数の複合体構造がヒットしている。重要なのは、タンパク質全体の構造が似ているかではなく、2つのタンパク質が接触している部分の形や配置が似ているものがまとめて検索されるという点である。

MEMBERSは、その界面と同じタイプに分類されたPDB中のinterfaceが何件あるかを示す。したがって、この結果を見ることで、自分が入力した複合体の結合様式が既知構造の中でどの程度一般的なのかまたどのようなタンパク質で同じような結合様式が使われているのかを確認できる。

 

クラスタを選択すると、その相互作用界面についてさらに詳しい情報を確認できる (その結合様式をもつ構造がどれだけ存在し、どの生物に分布し、どのようなタンパク質同士で使われているか)。

この例では Cluster 43749830 に1244件のinterfaceが含まれており、代表構造として14-3-3 zetaとSOS1の複合体(PDB: 6F08)が表示されている。さらに、このクラスタでは どのような二次構造が界面を構成しているか、また 秩序のある構造どうしの相互作用か、天然変性領域を含む相互作用か といった特徴もまとめられている。下部には、このクラスタに含まれるinterfaceがどの生物群に分布しているかが系統分類に沿って表示される。Cluster membersでは、同じinterface clusterに分類された個々のPDB構造を一覧できる。Similar Predicted Interfacesには、PDBの実験からの構造だけでなく、HumanPPIなどの予測複合体データから、このclusterと類似したinterfaceも表示される。類似度はTM-scoreとともに示される。

 

その他、論文より

  • タンパク質には、独立して折りたたまれ三次構造を形成する領域(秩序領域、ordered regions)(1)と、単独の状態では構造を形成せず、天然変性領域(intrinsically disordered regions; IDRs)と呼ばれる領域(2)が存在する。秩序だったタンパク質領域同士やコイルドコイルを介した相互作用は、安定な複合体や剛直な足場構造を形成する。一方、天然変性領域が関与する相互作用では、しばしば短い直鎖状モチーフが相手タンパク質の秩序領域に結合し、一過性のシグナル伝達複合体の形成や凝縮体形成を媒介する(3)。

  • 類似した相互作用界面構造は、複合体全体としては互いに無関係なタンパク質の間にも、収斂進化によって生じ得る(7)。そのため、共通する結合様式を見いだすには、複合体全体を比較するのではなく、相互作用界面そのものを直接比較する必要がある。また、界面構造の類似性に基づいてクラスタリングすることで、既知のインタラクトームを繰り返し現れるトポロジー上のファミリーとして整理できると考えられる(8, 9)。

  • 本研究では、相互作用界面を高速かつ高精度にアラインメントする手法Foldseek-Interfaceを開発した。この手法では、抽出した界面残基を各鎖内でN末端からC末端の順に並べ直して新たに番号を付けることで、界面の非連続性という問題を解決する。これによって連続した3Di文字列を生成し、Foldseekで直接アラインメントできるようにする。一方で、対応する鎖の組み合わせの同定にはFoldseek-Multimerを用いる。さらに、界面部分だけを対象として算出したTM-score(interface-only TM-score)(20)の閾値に基づき、データベース規模で界面をクラスタリングするためのフレームワークも構築した。

  • この手法をPDBに登録されているすべてのbiological assemblyに適用した結果、310万個のタンパク質二量体を77,167個の非冗長な相互作用界面クラスターへ分類した。これらは、それぞれ異なる界面タイプを表すものと考えられる。また、タンパク質フォールドの新規発見が飽和しつつある一方で、新しい相互作用界面の発見は現在も続いていることを示した。

  • Foldseek-Interfaceを用いることで、病原体タンパク質が宿主のタンパク質間相互作用を構造的に模倣する例を網羅的に探索できる。実際の解析では、ヒト–ヒトPPIとヒト–病原体PPIで類似した界面を共有する候補が56クラスター見つかり、その多くはウイルス由来であった。特にdisordered regionを介した相互作用が多く、短いモチーフを利用して宿主タンパク質との結合を乗っ取るウイルスの戦略とよく一致する。PPI界面の類似性から、病原体による宿主分子の「なりすまし」を探索できる。
  • Foldseek-Interfaceは、PDBに登録された実験構造だけでなく、大規模に予測されたPPI構造の整理にも利用できる。HumanPPIで予測された約2.1万のヒトPPIを解析したところ、10,040の界面クラスターに分類され、そのうち1,780クラスターではPDB中に類似した既知界面が見つからなかった。実験的にまだ観測されていない新しい結合様式が多数含まれる可能性がある (大量のPPI予測結果から、既知の界面とは異なる候補を効率よく絞り込める)。
  • タンパク質全体の構造が似ていなくても、相互作用界面に共通した形状や残基配置があれば、機能的に似た結合様式の候補として見つけられる可能性がある。Foldseek-Interfaceは、この界面を検索の中心にしている。
  • 実用面では、既知のPDB構造から界面の候補を探すだけでなく、AlphaFold-Multimerなどで予測したタンパク質複合体を検索し、既知の界面クラスタに属するか、あるいは新しい界面タイプらしいかを調べられる。
  • Foldseek-Interfaceは、タンパク質全体ではなく、2本のタンパク質鎖が接触する相互作用界面を単位として検索・分類する。複数のPDB/mmCIF構造を入力して界面を抽出し、界面レベルでクラスタリングする場合はeasy-interfaceclusterを使う。

引用

Foldseek-Interface reveals a protein interface universe far from complete

Joelle Morgan Strom, Sooyoung Cha, Rachel Seongeun Kim, Harshit Sajal, Cameron L. M. Gilchrist, Martin Steinegger & Katja Luck

bioRxiv, Posted August 25, 2026.

 

関連

 

参考

 

 

高速なfastqのQCツール RastQC

 

ハイスループットシーケンシングデータの品質管理(quality control: QC)は、ゲノム解析パイプラインにおける重要な最初のステップである。FastQCは10年以上にわたり、シーケンシングQCの事実上の標準ツールとして利用されてきたが、Javaランタイムへの依存により、起動時のオーバーヘッド、メモリ消費量の増大、および導入の複雑化という問題がある。一方、Oxford Nanopore Technologies(ONT)およびPacific Biosciences(PacBio)のロングリードシーケンシングプラットフォームの普及に伴い、ショートリードとロングリードの双方を扱うことのできるQCツールに対する需要が急速に高まっている。しかし、既存の手法ではデータタイプごとに別々のツールが必要であり、さらに複数サンプルの結果を統合するためにMultiQCなどの追加の集約ツールが必要である。

本研究では、Rustで記述された統合型シーケンシングQCツールであるRastQCを開発した。RastQCは、FastQC互換のショートリードQC、ロングリード特異的な指標、複数サンプルのサマリー機能、MultiQC用JSONのネイティブ出力、およびWebベースのレポートビューアを、単一の2.1 MBのスタティックバイナリに統合したツールである。RastQCは、FastQCの標準12モジュールすべてを同等のアルゴリズムで実装しているほか、ロングリード向けに3つのモジュール、すなわちRead Length N50、Quality Stratified Length、およびHomopolymer Contentを追加している。5種類のモデル生物を用いた55件中55件の判定において、FastQCとのモジュールレベルでの一致率100%を達成した。

RastQCは、適応的なバッチサイズ調整を備えたストリーミング並列パイプラインにより、Illuminaショートリードデータでは1.8~3.2倍、ONT/PacBioロングリードデータでは4.7~6.5倍の高速化を達成した。また、小規模ファイルではメモリ使用量を8~9分の1に削減し、大規模ファイルではFastQCと同程度のメモリ使用量であった。RastQCはMITライセンスのもとで無償公開されており、AIエージェント向けスキルとしても https://github.com/Huang-lab/RastQC から利用可能である。

 

インストール

Gihtub

#ショートリード
mamba create -n RastQC -y
conda activate RastQC
mamba install -c bioconda rastqc -y #Nanopore
mamba install -c bioconda rastqc-nanopore -y

#ソースコードからビルドする。
#Github git clone https://github.com/Huang-lab/RastQC.git cd RastQC cargo build --release
#Nanopore 形式のサポートを有効にしてビルドする場合は、次のオプションを付ける。
cargo build --release --features nanopore

> rastqc 

Error: No input files specified. Pass file paths or use --stdin to read from standard input.

(RastQC) kazu@kazunoMacBook-Air ~ % rastqc -h

RastQC - A quality control tool for high throughput sequence data

 

Usage: rastqc [OPTIONS] [FILES]...

 

Arguments:

  [FILES]...  Input files (FASTQ, BAM, SAM). Use "-" to read FASTQ from stdin

 

Options:

      --stdin                        Read FASTQ from stdin (equivalent to passing "-" as input)

  -o, --outdir <OUTDIR>              Output directory

  -t, --threads <THREADS>            Number of threads [default: 10]

  -c, --contaminants <CONTAMINANTS>  Custom contaminant file

  -a, --adapters <ADAPTERS>          Custom adapter file

  -l, --limits <LIMITS>              Custom limits file

  -k, --kmer-size <KMER_SIZE>        Kmer size (default 7) [default: 7]

      --nofilter                     Don't filter low quality reads

      --extract                      Extract ZIP archive after creation

      --nozip                        Don't create ZIP, only HTML

      --summary                      Write multi-file summary report (summary.html + summary.tsv)

  -q, --quiet                        Quiet mode - suppress progress

      --dup-length <DUP_LENGTH>      Length to truncate sequences for duplication detection [default: 50]

      --multiqc-json                 Output native MultiQC JSON (multiqc_fastqc.json) alongside standard reports

      --exit-code                    Return QC-aware exit codes: 0=all pass, 1=warnings, 2=failures. Useful for automated QC gates in Nextflow, Snakemake, etc

      --serve                        Start a local web server to browse reports (default port: 8080)

      --port <PORT>                  Port for the web server (used with --serve) [default: 8080]

      --no-parallel                  Disable intra-file parallelism (streaming parallel is on by default for files >50MB)

      --time                         Show per-file and per-step timing breakdown

      --long-read                    Enable long-read QC modules (Read Length N50, Quality Stratified Length, Homopolymer Content). Auto-enabled for Fast5/POD5 inputs

  -h, --help                         Print help

  -V, --version                      Print version

> rastqc-nanopore -h

RastQC - A quality control tool for high throughput sequence data

 

Usage: rastqc-nanopore [OPTIONS] [FILES]...

 

Arguments:

  [FILES]...  Input files (FASTQ, BAM, SAM). Use "-" to read FASTQ from stdin

 

Options:

      --stdin                        Read FASTQ from stdin (equivalent to passing "-" as input)

  -o, --outdir <OUTDIR>              Output directory

  -t, --threads <THREADS>            Number of threads [default: 10]

  -c, --contaminants <CONTAMINANTS>  Custom contaminant file

  -a, --adapters <ADAPTERS>          Custom adapter file

  -l, --limits <LIMITS>              Custom limits file

  -k, --kmer-size <KMER_SIZE>        Kmer size (default 7) [default: 7]

      --nofilter                     Don't filter low quality reads

      --extract                      Extract ZIP archive after creation

      --nozip                        Don't create ZIP, only HTML

      --summary                      Write multi-file summary report (summary.html + summary.tsv)

  -q, --quiet                        Quiet mode - suppress progress

      --dup-length <DUP_LENGTH>      Length to truncate sequences for duplication detection [default: 50]

      --multiqc-json                 Output native MultiQC JSON (multiqc_fastqc.json) alongside standard reports

      --exit-code                    Return QC-aware exit codes: 0=all pass, 1=warnings, 2=failures. Useful for automated QC gates in Nextflow, Snakemake, etc

      --serve                        Start a local web server to browse reports (default port: 8080)

      --port <PORT>                  Port for the web server (used with --serve) [default: 8080]

      --no-parallel                  Disable intra-file parallelism (streaming parallel is on by default for files >50MB)

      --time                         Show per-file and per-step timing breakdown

      --long-read                    Enable long-read QC modules (Read Length N50, Quality Stratified Length, Homopolymer Content). Auto-enabled for Fast5/POD5 inputs

  -h, --help                         Print help

  -V, --version                      Print version

 

実行方法

RastQCはfastQCのようなリードQCを行うツール。ショートリードはrastqc、NanoporeのFast5/POD5 を扱う場合はrastqc-nanoporeを使用する。クリーニングしたfastqを出力するものではないので注意する。

 

FASTQ ファイルを指定する。レポートの出力先は-oで指定する。8スレッド指定。

#paired-end
rastqc -t 8 -o results/ sample_R1.fastq.gz sample_R2.fastq.gz

出力例

sample1_R1_fastqc.html

 

HTMLレポートだけを出力する。

#single
rastqc --nozip -o results/ sample.fastq.gz

 

標準入力にも対応している。

samtools fastq aligned.bam | rastqc --stdin -o results/

 

複数ファイルをまとめて確認する場合は--summaryを付ける。

rastqc --summary -o qc_results/ data/*.fastq.gz

 

--multiqc-jsonを指定すると、MultiQCで利用できるJSONも出力される。

rastqc --multiqc-json -o results/ sample.fastq.gz

 

パイプラインの品質管理に場合は--exit-codeを指定する。QC結果に応じて、0(PASS)、1(WARN)、2(FAIL)の終了コードを返す。

rastqc --exit-code sample.fastq.gz || echo "QC failed"

 

その他

  • 標準ではショートリード向けの12モジュールが有効で、ロングリード向けの3モジュールは --long-read で有効にする。ロングリード用の判定基準は Illumina のショートリードにそのまま適用するものではないため、データ形式に応じて使い分ける必要がある。

  • 作者自身によるベンチマーク評価が公開されている。

    https://www.reddit.com/r/bioinformaticstools/comments/1sftw8q/rastqc_faster_fastqcmultiqclongread_qc_mostly_for/

  • FastQCをRustで高速化しただけではなく、FastQC + MultiQC + long-read QCをまとめて扱いやすくしている。
  • SKILL.mdが公開されている(URL)。AI agentに普通にGithubリンクを渡すだけでも理解するが、SKILL.mdを提供することで、毎回確実に同じやり方で実行するようにできる(繰り返し使うワークフローなど)

引用

RastQC: High-Performance Sequencing Quality Control Written in Rust

Kuan-Lin Huang

bioRxiv, Posted April 06, 2026.

 

関連

 

注:RustQCは別のツール。