Skip to content

Protein structure prediction

Protein sequences folded by one or several engines, then scored: how far each model can be trusted, where along the chain it is confident, how domains and chains sit relative to each other, and where the engines agree.

Experimental
Template version latest

The proteinfold template reads the models an nf-core/proteinfold run wrote for each target and engine (AlphaFold2 in standard or split-MSA mode, ColabFold, ESMFold, RoseTTAFold All-Atom, ...), and follows them from their scores to the engines' agreement:

  • Overview: the run in four key figures, live findings and four figures, each linked to the tab that explains it
  • Model scores: the pLDDT and pTM of every model, per engine
  • Structure: the picked structure in 3D over its sequence, per-residue confidence, the Ramachandran plot and the alignment it was folded from
  • Predicted error: the predicted aligned error matrix beside the structure, to pick a confident domain
  • Engines comparison: the engines and the models of one target, rank by rank and residue by residue
Live showcase nf-core/proteinfold, nf-core test data Open

The persistent Sample filters (assembly, target, target length) sit in the left panel and narrow every tab through the target hub.

Structures are read from the run, not resolved

The 3D and Ramachandran tiles read the top-ranked PDB that each engine publishes under top_ranked_structures/, so nothing leaves the server and the structure resolver (DEPICTIO_STRUCTURE_RESOLVER_ENABLED) is not used. Those PDBs are required: a run that published none has no structure to open.


Quick start

depictio ingest /path/to/proteinfold_results \
  --template nf-core/proteinfold/latest

The results directory is the only thing you have to pass, with one exception: proteinfold does not publish the samplesheet it ran on. The template looks for it at {DATA_ROOT}/input/samplesheet.csv; copy it there, or point to it:

depictio ingest /path/to/proteinfold_results \
  --template nf-core/proteinfold/latest \
  --var METADATA_FILE=/path/to/samplesheet.csv
Variable Default Role
METADATA_FILE {DATA_ROOT}/input/samplesheet.csv the samplesheet the run was started with
GROUP_COL assembly column the dashboard groups and filters targets by; assembly is derived (single chain or complex), and any samplesheet column beyond id and fasta works
GROUP_COL_DISPLAY Assembly reader-facing label of GROUP_COL in filters and cards
depictio config nextflow --install     # once per machine
nextflow run nf-core/proteinfold -r 2.1.0 -profile docker --outdir results

No depictio ingest, and no template named: the pipeline ingests its own output directory when it finishes and resolves this template from its own manifest. See Nextflow trigger. The trigger passes no --var, so put a copy of the samplesheet at results/input/samplesheet.csv before the run.


Reference

The unit of every structure tile is the entity: one engine's top-ranked structure of one target. Its id is the id the structures collection gives the PDB, <engine>__<target>, with a non-default AlphaFold2 mode between the two, so every per-structure table joins the 3D object without a lookup. The template reads the PDBs (pLDDT sits in the B-factor column), the per-model pLDDT, pTM, ipTM and ipSAE tables, the PAE matrix of the top-ranked model only (_0_ for AlphaFold2 and RoseTTAFold All-Atom, _1_ for ColabFold, which numbers its models from 1) and the integer-coded alignments of the MSA-based engines. Model ranks are renumbered from 1, and the pLDDT bands follow AlphaFold: very high from 90, confident from 70, low from 50, very low below.

ESMFold writes no alignment, no PAE and no TM scores, and single-chain targets write empty ipTM and ipSAE files, which read as no rows. Alignments are capped at 500 rows, and a profile longer than 200 residues is averaged over equal windows. The MultiQC reports repeat the residue table and cannot be bound generically, so the template has no MultiQC tab.

Self-adapting layout

The dashboard adapts to whatever the run actually produced: components bound to pruned or unparsed data collections are hidden, tabs left with no real visualizations are dropped entirely, and the remaining components are re-packed so there are no empty rows. The PAE matrices, the score files and the alignments are optional: a run that wrote no PAE drops the assess step of the Overview pipeline with them.

Pipeline nf-core/proteinfold 2.1.0 Template 1.1.0 Updated 1 Nov 2026

Template variables

Variables you provide when running the template: DATA_ROOT is the results directory given to depictio ingest, the others are set with --var NAME=value:

Variable Required Description
DATA_ROOT ✓ proteinfold output directory (one directory per engine, e.g. alphafold2/, colabfold/, esmfold/, plus multiqc/ and pipeline_info/).
METADATA_FILE — The samplesheet the run was started with (--input: id, fasta, any extra design columns). Defaults to input/samplesheet.csv under DATA_ROOT.
METADATA_ID_COL — Samplesheet id column. proteinfold fixes it to id (the target name every output file carries); recorded for auto-detection only.
GROUP_COL — Target hub column the dashboard groups and filters targets by. Defaults to assembly (single chain or complex, derived from the structures); any samplesheet column works.
GROUP_COL_DISPLAY — Reader-facing label of GROUP_COL, used in filter and card titles.

Data collections

11 data collections — 7 required 4 optional · 9 direct 2 derived.

Origin tells you whether a collection is real pipeline data or a reshape of it: direct = a pipeline output (scanned, or a recipe that reads raw files); derived = a recipe that reshapes one or more direct collections into the layout a visualization needs (no new measurement). Reads shows what produces it: a recipe .py transform, whose name links to its source on GitHub, or a raw file scanned off disk. (A direct collection can still have a recipe — one that merely parses/cleans the raw file; derived means the recipe reshapes another collection.)

Tag Origin Type Reads Status
targets direct Table recipe nf-core/proteinfold/targets.py required
proteinfold_structures direct indexed_file file .*/top_ranked_structures/[^/]+.pdb$ required
proteinfold_pae_matrices direct indexed_file file (?:.*/)?(?<![/])(?:(?P<cf_engine>colabfold)/(?P<cf_target>[/]+)/paes/(?P=cf_target)_1_pae.tsv|(?!colabfold/)(?P<engine>[/]+)/(?:standard/|(?P<mode>split_msa_prediction)/)?(?P<target>[/]+)/paes/(?P=target)_0_pae.tsv)$ optional
proteinfold_residues direct Table recipe proteinfold/residues.py required
proteinfold_engine_plddt direct Table recipe proteinfold/engine_plddt.py required
proteinfold_scores_raw direct Table file ^(?!.chainwise)._(?:ptm|iptm|ipsae).tsv$ optional
proteinfold_models derived Table recipe proteinfold/models.py required
proteinfold_structure_scores derived Table recipe nf-core/proteinfold/structures.py required
proteinfold_plddt_ranks direct Table recipe proteinfold/plddt_ranks.py required
proteinfold_pae direct Table recipe proteinfold/pae.py optional
proteinfold_msa direct Table recipe proteinfold/msa.py optional

13 links — selecting a value in the source collection filters the target. The join column is shown after the source.

Recipes

Each recipe reshapes raw pipeline output into a tidy table. The name links to its source; Output lists the validated OUTPUT_SCHEMA columns.

Recipe Transforms Output
nf-core/proteinfold/structures.py Structure table for nf-core/proteinfold: one row per top-ranked structure. entity, structure, engine, target, n_chains, n_residues, mean_plddt, confident_pct, very_low_pct, n_models, ptm, iptm
nf-core/proteinfold/targets.py Target hub for nf-core/proteinfold: one row per target of the samplesheet. target, assembly, n_chains, n_residues, n_engines, engines, sequence, fasta
proteinfold/engine_plddt.py Per-residue confidence of each engine's top-ranked model, one curve per engine. target, series, chain, position, plddt
proteinfold/models.py Confidence of every predicted model, one row per structure entity and model rank. model_id, structure, entity, engine, target, model_rank, is_top, n_residues, mean_plddt, confident_pct, very_low_pct, ptm, iptm, ipsae
proteinfold/msa.py The multiple sequence alignment each MSA-based engine folded from. msa_id, seq_id, rank, aligned_sequence, identity, coverage, chains, entity, engine, target, depth
proteinfold/pae.py Predicted aligned error of every top-ranked model, binned to a fixed grid. entity, engine, target, bin, residue_range, mean_pae, b01, b02, b03, b04, b05, b06, b07, b08, b09, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b50, b51, b52, b53, b54, b55, b56, b57, b58, b59, b60, b61, b62, b63, b64
proteinfold/plddt_ranks.py Per-residue pLDDT of each engine's models: the top-ranked curve and their spread. entity, engine, target, n_models, residue_index, plddt, plddt_min, plddt_max
proteinfold/residues.py Per-residue confidence of every top-ranked structure, one row per residue. entity, engine, target, chain, position, residue, value, category, confidently_placed

Dashboard tabs

One dashboard: the Overview, then four child tabs in two groups, read from how far a model can be trusted to whether the engines agree. Each tab below carries the same icon and colour the dashboard gives it, so the page and the app read alike.

Group Tabs
Data & QC Model scores
Structure Structure, Predicted error, Engines comparison

Each child tab opens with a short intro and a strip of four cards, then at most three open sections; tables and record cards follow, collapsed. The Sample sheet (the targets of the samplesheet) is pinned, collapsed, to the bottom of every child tab. The pLDDT bands take AlphaFold's own colours.

Protein structure prediction, from the sequence to the model each engine builds.

A short hero links the run parameters. About this dashboard says how to move through the tabs, The run counts the targets, engines, models and residues and prints the requested mode, and Pipeline walks six steps (targets, align, fold, score, assess, compare), each linked to its parameters and its tab. The findings are live values that follow the filters: the structures and engines, the median mean pLDDT with the share of residues under 50, the mean PAE and the models ranked.

Filters and components

Filters · the left panel starts collapsed. Key figures has its own filter bar (assembly and target), Findings another (assembly and engine): each narrows its own section only.

Section What it holds
Top Hero, About this dashboard, The run, Pipeline
Key figures 4 headline cards: targets by assembly, top-ranked structures by engine, mean pLDDT, residues at pLDDT 70 or more
Findings Live result rows, then 4 figures: the first structure in 3D, the mean pLDDT per engine, the PAE matrix of the first structure and the top model of each engine per target
How to read this dashboard The tabs by group, each with its question

Data & QC · How far can each engine's top-ranked models be trusted?

The models predicted, the mean pLDDT of the top models, the share of residues at pLDDT 70 or more and the pTM of the top models. Then every model's mean pLDDT against its pTM, and the mean pLDDT of every model per engine. pLDDT scores each residue and pTM the whole fold, so a high pLDDT with a low pTM is a set of confident pieces placed loosely. Engines that write no TM score (ESMFold, RoseTTAFold All-Atom) are absent from the scatter and the pTM card.

Filters and components

Filters · Engine and Model rank on proteinfold_models.

Section What it holds
Models at a glance 4 cards
Confidence and fold quality 1 advanced visualization
Engines compared Mean pLDDT of every model, per engine

Structure · Where along each structure is the prediction confident?

Structure dashboard

The tab reads one target: its Target filter always holds a value and opens on the first. The strip gives the median residue pLDDT, the residues by confidence band, the likely disordered residues and the best mean pLDDT. Then a linked view holds the picked structure in 3D, coloured by pLDDT over its written sequence, on the left. Stacked on the right are a table with one row per engine's top-ranked structure, which picks the structure, the sequence with its pLDDT lane, the pLDDT profile of every engine and the Ramachandran plot of the picked structure (phi and psi computed in the browser, coloured by pLDDT). A click on a residue in 3D, on a letter or a brush on the track selects the same residues in all of them. The alignment the structure was folded from and the residue table are collapsed.

Filters and components

Filters · Target and Residue range on proteinfold_residues.

Section What it holds
Confidence at a glance 4 cards
Structures and confidence (linked view) Structures of the target, one row per engine, then 4 advanced visualizations: the structure, the sequence track, the Ramachandran plot and the pLDDT per engine
Alignment (collapsed) Alignment the structure was folded from
Residue table (collapsed) Residues of the structures in scope

A lone query row in the alignment

It is the data, not a filter: the engine found or used no homologs. ESMFold folds without an alignment, so its structure opens the tile on an empty state.

Structure · Which domains and chains does the model place confidently?

Predicted error dashboard

The tab reads one structure. The strip gives its mean PAE, the pLDDT of its residues, and the pTM and ipTM of its top-ranked model against AlphaFold's cut-offs (pTM 0.5; ipTM 0.8 and 0.6). Then the PAE matrix beside the same structure in 3D, coloured by pLDDT, and the sequence with its pLDDT lane below. A diagonal brush on the matrix selects a square as a residue range: the structure draws it red and the sequence track shades it, so a confident domain is picked in 3D. Dark blocks off the diagonal are domains or chains placed confidently relative to each other; on a complex the chain boundaries are marked.

Filters and components

Filters · a Structure picker on proteinfold_residues. It always holds a value and does not offer ESMFold's structures, which have no matrix. There is no engine filter: the structure id carries its engine.

Section What it holds
Error at a glance 4 cards
Error matrix and structure 2 advanced visualizations: the matrix and the structure
Domains along the sequence 1 advanced visualization, the sequence track

Structure · Do the engines and their models agree on each target?

The models in scope, split by engine, the median mean pLDDT per model, the weakest model's mean pLDDT against the 70 and 50 cut-offs, and the pTM per model. Then the mean pLDDT of each engine's top-ranked model, the mean pLDDT by model rank, one line per engine (a steep fall from the first model means the ranking was decisive), and the per-residue profile: one curve per engine, the line the top-ranked model and the band the lowest to the highest of its models. A wide band marks residues the engine's models disagree on, and curves that part mark residues the engines disagree on. The models table and its record card are collapsed.

Filters and components

Filters · Target compared (one at a time), Engines compared and Model rank on proteinfold_models.

Section What it holds
Models at a glance 4 cards
Best model per engine Mean pLDDT of each engine's top-ranked model
Rank and agreement Mean pLDDT by model rank, and 1 advanced visualization
Model detail (collapsed) Models, Model record

Tables and point views select on entity, the structure id, so a pick narrows the other tiles of its collection and follows the project links to the rest. The three single-unit pickers (the target of Structure and Engines comparison, the structure of Predicted error) always hold exactly one value, so the tiles that show one structure at a time agree on it.


Running the pipeline

Depictio reads the output of nf-core/proteinfold, it does not run the pipeline. Run the pipeline first:

nextflow run nf-core/proteinfold -r 2.1.0 \
  --input samplesheet.csv \
  --mode alphafold2,colabfold,esmfold \
  --outdir results \
  -profile docker

The samplesheet is id,fasta; extra columns are kept and can become the grouping column. --mode takes one or several engines, and each needs its own databases and weights: see the usage documentation. Then point Depictio at the results, naming the samplesheet the pipeline did not publish:

depictio ingest results/ \
  --template nf-core/proteinfold/latest \
  --var METADATA_FILE=samplesheet.csv

See nf-co.re/proteinfold/usage for full pipeline documentation.


Required data structure

Point depictio ingest at the directory holding the pipeline output. Depictio scans recursively and matches on file name; the engine, its AlphaFold2 mode and the target are read off the path.

<DATA_ROOT>/
├── input/
│   └── samplesheet.csv                         # --var METADATA_FILE (not published by the pipeline)
├── pipeline_info/
│   ├── params_*.json
│   └── *software*versions*.yml
└── <engine>[/<mode>]/                          # alphafold2/standard, colabfold, esmfold, ...
    ├── top_ranked_structures/<target>.pdb      # required: pLDDT in the B-factor
    ├── <target>_plddt.tsv                      # per-model pLDDT
    ├── <target>_{ptm,iptm,ipsae}.tsv           # optional; ipTM and ipSAE empty for one chain
    ├── <target>/paes/<target>_0_pae.tsv        # optional; _1_ for colabfold
    └── <target>/<target>_<engine>_msa.tsv      # optional; MSA-based engines only

Validation runs

The repository ships download_test_data.sh, which fetches the subset of nf-core's AWS megatest run that the template needs and copies the vendored samplesheet into input/:

bash depictio/projects/nf-core/proteinfold/2.1.0/download_test_data.sh \
  /tmp/proteinfold_test
depictio ingest /tmp/proteinfold_test \
  --template nf-core/proteinfold/latest

The run is s3://nf-core-awsmegatests/proteinfold/results-a414fd1368009500b66761e37e7cde80366a45e9/, a 2.1.0 development run (the 2.0.0 release run is empty): eleven test_full runs gathered under one prefix, AlphaFold2 (standard and split-MSA), ColabFold, ESMFold and RoseTTAFold All-Atom on two monomer targets, and AlphaFold2 multimer and ESMFold on one heterodimer. The script fetches the top-ranked PAE matrix of each engine and target only.


Additional resources


Authorship

Developers Wrote the template, its recipes and its dashboards. weber8thomas
Reviewers Nobody has run it on their own data and signed it off yet, which is what keeps it from Reviewed. Open
Maintainers Keep it working as nf-core/proteinfold releases. weber8thomas

Reviewing a template on your own data, or taking over a role here, is a contribution in itself: the contributing guide says what each one involves.