HDX Workbench · Feature summary

Recent Improvements 2026

What is new in HDX Workbench, written for the people who run the experiments rather than the people who wrote the code.

Instruments Thermo · Waters · Bruker Acquisition DDA and DIA

DIA experiments now work end to end

A complete data-independent acquisition workflow, from building an undeuterated fragment library to reading deuterium uptake off individual fragments.

ADGLKSVTR

Cutting-edge residue-resolved analysis with PFNet

Import a PFNet model and it sits beside your measured data on the same colour scales, with the residues it could not resolve marked rather than smoothed over.

Volcano Plots apply a real significance test

A volcano plot that applies the accepted hybrid test, so a peptide counts as changed only when the change is both large enough and reproducible enough.

DIA experiments

Data-independent acquisition was the single largest piece of work in this period. Fragments do two jobs: they localise a peptide's uptake more finely than the peptide itself, and they show independently when that peptide actually eluted. The second is what removes most of the manual retention time curation from a run, and lets analysis proceed with far less intervention.

How a DIA run works
  1. The undeuterated samples are searched first to build an anchor library: which fragments belong to which peptide, and when they elute.
  2. The deuterated samples are then searched against that library, confirming each peptide and extracting the fragments that support it.
  3. Fragment deuteration is read off a fitted slope across the fragment series, anchored to the precursor measurement.
PHASE 1 · BUILD THE LIBRARY Undeuterated samples search Match fragments to peptides Anchor library which fragments, and when they elute reused, or rebuilt only if you ask PHASE 2 · MEASURE THE DEUTERIUM Deuterated samples Confirm peptide, extract fragments fragment mass shift slope = deuteration outlier, down-weighted fragment position along the peptide
Two passes over the data. The undeuterated samples establish which fragments belong to which peptide and when they elute. The deuterated samples are then read against that library, and uptake comes from the slope fitted across the whole fragment series rather than from any single fragment.

OpenSwath is the detection engine, with automatic conversion

Files that need converting to mzML are converted for you. If the required OpenMS tools are not installed, or the data is not actually DIA, the run stops immediately with a dialog that says so rather than quietly producing nothing.

Where Peptide set right-click, DIA Detect

Reuse an existing anchor library

A checkbox skips rebuilding the undeuterated library when you already have one, which saves the longest part of a repeat run.

DIA Quality tab

A cross-cell view: the fragment table across the top and a deuteration scatter below it, for spotting which cells in the whole experiment disagree before you go looking at individual spectra.

Where Spectra window, DIA Quality tab

MS2 tab, one cell at a time

Select a single replicate and you get four stacked panels for it: the precursor chromatogram, one chromatogram per detected fragment shaded by whether the fragment agreed with the others, the labelled fragment spectrum, and the deuteration model fitted through them. A properties sidebar carries the peptide, deuteration and quality numbers.

Where Spectra window, MS2 tab, with exactly one replicate selected
Screenshot of the MS2 tab showing the precursor chromatogram, fragment chromatograms, fragment spectrum and deuteration model.
The MS2 tab, one replicate at one labelling time. From the top: the precursor chromatogram, the fragment chromatograms coloured by ion series, the labelled fragment spectrum, and the deuteration model fitted through the fragments, with that cell's numbers listed alongside.

DIA Diagnostics

A panel for judging confidence across the run: confidence tiers, counts of cleanly matched fragments, whether the charge states agree with each other, and whether the fragment retention time matched the precursor. It also reports how far the DIA evidence would move each retention window if you let it.

Fragment deuteration follows the AutoHX approach

Fragment uptake is fitted as a slope across the fragment series and normalised to the precursor, so a single noisy fragment no longer swings the answer.

Retention time

Most bad HDX numbers come from measuring the right peptide at the wrong moment. Several features were added specifically to find, check and correct retention windows.

declared retention window retention time narrow slice wrong peak true apex, found by searching the whole window other replicates and charge states agree before the window moves
Why a window moves, and why it sometimes should not. Searching only a slice of the declared window can settle on an interfering peak that happens to be nearby. Detection now searches the whole window for the apex, and a correction is only written when the other replicates or charge states of the same peptide point the same way.

Refresh retention times from MS2 identifications

Runs a Sage search over your undeuterated files and updates the peptide set's retention times from the identifications. It offers a dry run first, so you can see what would change before anything is written, and it explains itself and stops if Sage is missing or your files carry no fragment spectra.

Where Protein right-click, Refresh RTs from MS2 (Sage)

Retention time rescue from DIA evidence

Where fragment evidence says a peptide elutes somewhere other than the saved window, the correction can be previewed as a table before being applied, and applying it can be rolled back completely.

Corroboration before a window is moved

A window is only corrected when other charge states of the same peptide, or the other replicates of the same cell, agree with the new position. A single outlying measurement cannot drag the window on its own.

A warning when detection lands far from the identification

Peptide sets are checked against the retention time the peptide was originally identified at, and cells that landed a long way off are flagged for you to look at.

Wider search for the real apex

Detection now searches the full declared retention window for the peak apex rather than a narrow slice of it, with score gates so a wider search does not mean a worse pick. Windows that had to be rescued this way are flagged rather than passed off as ordinary picks.

Detection quality

A group of changes aimed at one failure mode: the software confidently reporting deuteration for a peak that is not your peptide.

ACCEPTED evenly spaced, nothing in the way M0 mass VETOED something else is under the peptide a peak sits before the first isotope half-spaced peaks: another charge state mass
What now blocks a bad measurement. A peak just before the first isotope, or peaks at half the isotope spacing, mean something other than your peptide is contributing intensity. Either one can veto a pick that a good fit score alone would previously have waved through.

Interfering peaks are actively ruled out

Detection now checks for a peak sitting just before the peptide's first isotope, for evenly spaced peaks that suggest a different charge state overlapping, and for peptides whose masses conflict with each other. Any of these can veto a pick that would previously have been accepted on score alone.

Mass accuracy is enforced on the combined spectrum

A parts-per-million ceiling is applied to the combined undeuterated spectrum, so a peak at approximately the right mass is no longer good enough.

The measurement window respects physical limits

The window used to quantify a peptide is capped at the mass it could reach if every exchangeable hydrogen were deuterated. This also fixed a case where the reported centroid could fall outside the very window it was measured in.

Weak but real signals get a second chance

Cells that produced nothing on the first pass can be rescued from the combined spectrum, and cells whose signal only appears in a single scan can be latched onto when the evidence supports it. Every rescue is recorded on the cell rather than hidden.

Missing measurements no longer distort averages

A replicate that was marked usable but produced no measurement used to enter the averages as a placeholder value, quietly pulling means and standard deviations off. Those replicates are now left out and counted separately.

Bimodal analysis

Support for peptides whose isotope envelope splits into two populations, the signature of EX1 exchange or of two conformations in solution.

mass EX2 population less deuterated · 62 % of the signal EX1 population more deuterated · 38 % of the signal A single centroid across both humps would report a deuteration that neither population actually has.
Two populations under one envelope. The fit reports each population's deuteration and its share, and how much better the two-population description is than a single one. You decide which population to assign, and the choice is stored with the peptide and exported.

Fit and assign the two populations by hand

A toggle in the spectra view fits two populations to the displayed envelope and draws both, with each one's deuteration, share of the population and how much better the two-population fit is than a single one. You choose which population to assign, and assigning one the data does not support asks you to confirm first.

The assignment is saved with the peptide, appears in the results grid, and is written to the CSV export.

Where Spectra window, bottom bar of the signal view
Screenshot of the spectra view showing an isotope envelope fitted as two populations.
The bimodal fit on a fully deuterated control. The blue and orange curves are the two fitted populations and the dashed vertical line is the single measured centroid, which falls between them. A peptide like this needs looking at before either population is assigned.

PFNet residue-level results

PFNet models exchange at individual residues. HDX Workbench can now bring those results back in and show them next to your measured data.

Import a PFNet output archive

Import the zipped output and it is filed under the protein. Re-importing replaces that set and leaves any others alongside it, so several models can coexist.

Where PFNet menu, Import PFNet Results (Zip)

Modelled results in the sequence coverage view

The coverage dropdown gains a consolidated view per state and a state-versus-control view. Under each stretch of sequence sit three aligned tracks: your measured uptake averaged onto residues, the model's residue-level prediction on the same colour scale, and the model's confidence. Residues the model is least sure of are hatched rather than filled.

Because all three share the sequence ruler, you can see where the model reproduces what you measured, where it departs from it, and whether it was confident when it did. Both views export residue-level CSV files and PyMOL scripts for structure figures.

Screenshot of the sequence coverage map showing measured uptake, PFNet modelled uptake and model confidence as three aligned tracks beneath the protein sequence.
The consolidated coverage map for one state, three tracks per residue. The top track is your measured uptake averaged onto residues, the middle is the PFNet model's residue-level prediction on the same colour scale, and the bottom is the model's confidence. Hatching marks residues the model is least sure of, so agreement and doubt can be read off the same row of the sequence.

PFNet Residues panel

Per-residue exchange rates or free energies as bars with uncertainty, a track showing which stretches the model could not resolve to single residues, and low-confidence residues greyed so a prediction is never mistaken for a measurement.

Where Spectra window, PFNet tab

Point mutations

Wild type against a point mutant, from one protein entry and one peptide set. The substitution is declared on the wild-type peptide, and both variants are then measured side by side in the same run.

one row in the peptide set AASAA[MUT-3Y] WILD TYPE A A S A A 1 2 3 4 5 3Y position 3: S → Y MUTANT, DERIVED A A Y A A both candidates searched in every sample
One tagged row, two candidates. The tag does not say which sample the mutant is in. It declares that this peptide may appear as either variant, and both are searched everywhere, so wild-type and mutant samples run through the same peptide set.
How a substitution is declared
  1. Keep the wild-type protein entry, and keep the wild-type amino-acid letters in the peptide set.
  2. Append a tag to every peptide covering the substituted residue. AASAA[MUT-3Y] turns the third residue of that peptide from S to Y.
  3. The mutant peptide, AAYAA, is derived for you and both are searched. Peptides that do not cover the mutation are left exactly as they were.

One row defines both variants

A tagged row is not a mutant row. It defines the wild-type and the mutant candidate together, so there is no second row to add for that peptide and charge. Give the pair a retention window wide enough for both, since a substitution can shift when the peptide elutes.

Where Input peptide set CSV, sequence column

Tag positions are counted inside the peptide

The number in a tag is a one-based position within that peptide, not a position in the protein or in a PDB file. One protein mutation therefore takes a different number in every peptide that covers it, and each charge state of an affected peptide carries its own tag.

S42Y IN THE PROTEIN base protein G A A S A A 39 40 41 42 43 44 peptide 40–44 AASAA 1 2 3 4 5 42 − 40 + 1 = 3 AASAA[MUT-3Y] peptide 39–44 GAASAA 1 2 3 4 5 6 42 − 39 + 1 = 4 GAASAA[MUT-4Y]
The same mutation, two different tag numbers. S42Y sits at position 3 of a peptide starting at residue 40, and at position 4 of one starting at 39: subtract the peptide start from the protein position and add one. Check that the wild-type letter at that position is the residue you expected before trusting the tag.

Several substitutions in one peptide

Substitutions are joined inside a single tag with hyphens. AASATAA[MUT-3Y-5P] derives AAYAPAA, with both changes belonging to the same mutant variant rather than describing two separate mutants.

What the input looks like

Five columns, with explicit retention-time bounds. The example below carries all three rules at once: both charge states of the tagged peptide are tagged, the second peptide has the position recounted from its own start, and the peptide that does not cover the mutation is left plain.

rt_start,rt_end,charge,sequence,ms score
6.20,6.80,2,AASAA[MUT-3Y],1.0
6.20,6.80,3,AASAA[MUT-3Y],1.0
6.10,6.90,2,GAASAA[MUT-4Y],1.0
8.00,8.60,2,AAAAA,1.0

Retention times are in minutes. Keep the header and the column order, use uppercase one-letter residue codes, and leave no spaces inside a tag. This is an input peptide set rather than a detected-results export, so exported molecular formulas and masses are not something to edit by hand.

Where Saved as a comma-separated .csv

Wild type and mutant are paired in the results

In the Perturbation view the two variants share a comparison row while keeping their own sample observations, so the pair reads as a comparison without hiding what was actually detected in each sample.

Where Perturbation view

An ambiguous cell is withheld rather than averaged

If both variants are marked valid in the same sample at the same timepoint, statistics for that cell are withheld instead of averaging two populations into one number. The detections stay on screen for you to inspect, and an incorrect one should be rejected only after looking at the evidence behind it.

Statistics and differential analysis

Deciding which differences between two states are real, using the method the field has settled on.

The hybrid test, in one paragraph

A t-test alone will flag a tiny difference on a very reproducible peptide. A fixed cutoff alone will flag a large difference on a noisy one. The hybrid test requires both at once: the difference must be statistically significant and larger than a threshold calculated from how reproducible your own replicates actually were. Everything else stays on the plot, greyed, with a note saying which of the two gates it failed.

uptake gate uptake gate p-value gate PROTECTED DEPROTECTED significant but small large but noisy no detectable difference −0.8−0.40 +0.4+0.8 difference in uptake between the two states (Da) 012 34 strength of evidence protected deprotected significant but small large but noisy nothing detectable
One point per peptide, per labelling time. Only the upper corners, past both dashed lines, are reported as changes. The other three groups stay on the plot rather than disappearing, because a peptide that is significant but small and one that is large but noisy fail for opposite reasons and call for different follow-up.

Volcano plot

One point per peptide per labelling time, with the size of the difference across the plot and the strength of the evidence up it. Colour says what the point is: protected, deprotected, significant but small, large but noisy, or nothing detectable.

Both cutoff lines can be dragged. Hovering a point gives the full numbers behind it. Clicking one selects that peptide everywhere else in HDX Workbench, so its spectra and uptake curve come up. Dragging a box around a group selects them together for marking or export.

Where Spectra window, Volcano tab, and the Volcano menu
Screenshot of the Volcano tab showing the scatter of peptides with both cutoff lines and the class legend.
The Volcano tab, on a ligand against apo comparison. Points past both dashed gates are reported as changes. The classes inside them stay on the plot, so a peptide that is significant but small can be told apart from one that is large but noisy.

Exports that a reviewer can check

The plot exports as an image, the points or just the hits export as CSV, and a settings snapshot records the comparison, the replicates used, the threshold and how it was calculated, and the software version. The full CSV export gains the same verdict columns.

One rule across the views

The sequence coverage map now greys non-significant peptides using the same test as the volcano plot, so two views can no longer disagree about what counts as a change.

HXMS export

A standardised file for HX/MS results, written alongside the usual CSV. It carries the isotope envelope for every measurement, not only the centroid, which is what lets a downstream model work from the peak shape.

METADATA sequence · state · temperature · pH · D2O TIMEPOINT RECORDS one line per measurement, per charge state index · span · replicate · time · uptake · ENVELOPE the control is written with time inf PTM DICTIONARY sequence tags become entries; 0000 always present centroid ENVELOPE keeps every bar the shape, not one averaged position
Three blocks, and the envelope rides along. Metadata describes the sample, one record is written per measurement per charge state, and the dictionary resolves any sequence tags. The last field of each record holds the whole peak distribution normalised to sum 1. A centroid collapses that distribution to a single averaged position; the envelope field keeps all of it, which is what a peak-shape model needs.

One file per sample state, written with the rest of the export

Save Report writes a .hxms file for each state into the export folder, next to the CSV and HDXer files. The output is byte-identical to what the PFLink converter returns for the same CSV, so the files can be handed to PFNet or FEATHER without a conversion step in between.

Where Save Report, alongside the CSV export

What a record looks like

Illustrative, with the field order the format defines:

METADATA PROTEIN_STATE     apo
METADATA TEMPERATURE(K)   298.15
METADATA pH(READ)         7.00
REMARK   HXMS_DATA_FORMAT v1.0
TITLE_TP INDEX MOD START END REP PTM_ID TIME(Sec) UPTAKE ENVELOPE
TP       1     A   40    44  0   0000   3.0e+01   2.41   0.02,0.11,0.28,0.31,0.19,0.07,0.02
TP       2     A   40    44  0   0000   inf       4.86   0.01,0.06,0.19,0.33,0.26,0.11,0.04

Uptake is the centroid mass minus the peptide's own zero-second centroid. The fully deuterated control is written with a time of inf rather than a large number, so it cannot be mistaken for a very long labelling point.

The envelope is the point

The field is filled from the isotope distribution the Workbench already measured, so a residue-level model is not restricted to the centroid and can be run on the peak shape instead. This is what connects the export to PFNet's envelope model.

What is written, and what is left out

Every charge state of a cell gets its own record, since charge is not part of a peptide's identity in this format. Discarded replicates and the per-peptide aggregate rows are not exported. The zero-second reference is a replicate's own mean where it has one, and falls back to the other replicates when it does not.

Sequence tags carry through

Modification and mutation tags written in the peptide set become entries in the dictionary at the end of the file, so a downstream reader can resolve what a record refers to without going back to the peptide set.

Back-exchange and fully deuterated controls

Back-exchange metrics from your DMax samples

When a fully deuterated control is present, HDX Workbench calculates how much deuterium was actually recovered and how much was lost to back-exchange, per peptide, and reports a quality rating for the control itself.

Recovery in the peptide summary

A recovery column in the results grid, so peptides with poor deuterium recovery are visible while you review rather than only in the exported file.

Speed

Several runs that used to be left overnight now finish while you wait. The results were checked to be identical before and after each change.

PEPTIDE DETECTION same files, same answers before 874 seconds now 326 seconds 2.7× FASTER
Measured on the same data, with the same answers. The gain comes from reading each file once over only the retention range needed, rather than from any change to how deuteration is calculated, and the output was checked to be identical before and after.

Chromatogram extraction rewritten

Chromatogram extraction was rewritten to read each file once, over only the retention range actually needed, and to pull all isotope channels in a single pass.

Detection roughly three times faster

The same windowing applied across the readers, plus opening each raw file once per peptide instead of repeatedly, and searching within spectra rather than scanning every peak.

The results grid loads on demand

Statistics are calculated only for the columns you are looking at, the project tree loads a branch when you expand it, and the intensity plots build in the background instead of blocking the window.

Detect and HDX in one pass

One menu item runs the undeuterated detection, writes the peptide set from everything it found, and runs the HDX job from it, reusing the undeuterated results instead of measuring them twice. If any step fails, it cleans up after itself.

Where Protein right-click, Detect + HDX (one pass, reuse 0s results)

Timing reports

Each detection run writes a timing breakdown next to the job, so a slow run can be attributed to a stage rather than guessed at.

Adding to a run you have already done

Three ways to extend an experiment without reprocessing it: one more peptide, a list of them, or a whole new timepoint. Each reuses the settings the run was made with, and only the new work is searched.

TIMEPOINTS 0s 30s 5m new 1h peptides added only the new cells are searched everything else is left alone
Only the new cells are searched. An experiment is a grid of peptides against timepoints. Adding peptides adds rows and adding a timepoint adds a column, and the search runs over those alone. What you measured before is not recomputed, so the numbers you have already looked at do not move.

Add a peptide to a job that has already run

Right-click the HDX job and add the peptide there, so it inherits that job’s working peptide set and the parameters it was run with rather than a fresh set of defaults. The sequence and charge are validated before anything starts, only the added peptide is searched, the results are saved the way a normal run saves them, and the view refreshes so the peptide appears alongside the rest.

Where HDX job right-click, Add peptide(s)

Bring in a list of peptides from CSV

The same column-mapping interface the protein editor already uses, so there is nothing new to learn about matching your columns. Sequence and charge are required and retention time is optional. Duplicate and invalid rows are reported rather than dropped quietly, and an import that stopped part way can be resumed from what is left.

Where Add peptide(s), CSV import

Add a timepoint to an existing experiment

Drop the raw files into a box for each sample and replicate. The timepoint is registered against the default HDX job’s full peptide set, and only the new files are searched, so the timepoints already measured are left exactly as they were.

Where HDX job right-click, Add timepoint

Day-to-day work

Drag the retention time and mass windows on the plot

Triangle handles on the chromatogram and the spectrum set the window boundaries directly. The text boxes follow as you drag, and pressing Enter afterwards applies the change. The old mass range slider is gone. Zooming still works; the handles only take over while you are actually holding one.

On a multi-cell view the boxes start empty and each cell keeps its own boundary, so you can move one edge across every loaded cell without flattening the other.

Undo the last recalculation

One level of undo for the Set button, restoring every field that the recalculation changed.

Blue and red as the default plot colours

Matching the convention used in the field, and the same scale the coverage maps use.

Mark and enable peptides straight from the grid

The Marked and Enabled columns are checkboxes you click, instead of a right-click menu, and the change is saved as you go.

The project tree remembers where you were

Expanded and collapsed branches survive closing and reopening a project, and expanding no longer takes two clicks.

Progress while Sage runs

Conversion and search progress is reported instead of the window appearing to hang.

Damaged result files no longer stop a view

A corrupt result file is skipped with a message rather than breaking the whole load, and there is a repair action that regenerates the affected files.

The experiment wizard checks the sample table

Sample assignments are validated before the experiment is created, so mistakes surface while you can still fix them easily.

Create experiments from the command line

A command-line tool builds experiments from a CSV description, for setting up many experiments at once or scripting a reprocessing run.

Grid presentation

Column widths were retuned, the default sort order fixed, and the peptide features column is hidden when nothing populates it.

Instrument support

The three major vendors are now handled by one common reading layer, which means a feature added for one instrument tends to arrive for the others too.

Thermo .raw Waters .raw Bruker .d Common reading layer spectra · chromatograms one interface Peptide detection DIA fragment search Spectra and plots
One reading layer, three vendors. Everything downstream asks the same questions of the data, so support added for one instrument reaches the others without being written twice. Bruker was added by fitting a new reader behind this layer rather than by touching detection.

Bruker timsTOF (.d) data new vendor

Bruker folders are recognised throughout the application: in the experiment wizard, when browsing to a folder, in the project tree, and in the spectra views. Ion mobility is taken into account when spectra are combined.

By default the raw data stays where it is and the project keeps a pointer to it, so a large acquisition is not duplicated into the project folder. There is a checkbox if you would rather copy it, and it checks you have the disk space first.

Where Experiment wizard, raw data step

The wizard tells you which instrument it found

The vendor detected from your files is shown while you set the experiment up, and a batch that mixes vendors is refused with an explanation instead of failing later in the run.

Waters data reads more accurately

Lockmass correction is applied when spectra are read, and profile spectra are converted to peaks at the reading boundary rather than later, which removes a source of small mass errors. Detection defaults were retuned for Waters instruments.

Where Detect dialog defaults, and automatically during any Waters run

Thermo isolation windows come from the file

The instrument's real isolation window boundaries are read out of the raw file instead of being inferred, which matters for assigning fragments in DIA runs.