open-source Python package for accessing and analyzing NMR data
Project description
makeshift
An open-source Python package for accessing and analyzing NMR data from either custom input or NMR-STAR files from the BMRB.
Installation
pip install git+https://github.com/WaymentSteeleLab/makeshift.git
Quickstart
import makeshift as ms
# Fetch and parse a BMRB entry into tidy chemical shifts
cs = ms.ChemicalShifts.from_bmrb(5363)
cs.data # one row per shift: Seq_ID, Comp_ID, Atom_ID, Atom_type, Val
cs.sequences() # one row per entity: ID, polymer type, sequence
# Re-reference shifts
cs = ms.ChemicalShifts.from_bmrb(4527, reref="lacs", calc_csi=True)
cs.reref_offsets # {atom: offset applied}
# Build an assigned peak list (e.g. for an HSQC)
peaks = cs.peaklist()
peaks.data
Modules
| Module | What it does |
|---|---|
makeshift (core) |
ChemicalShifts, NMRStarEntry, PeakList — fetch/parse BMRB entries, extract shifts, sequences, relaxation/order-parameter data, build peak lists. |
makeshift.reref |
LACS and PANAV chemical-shift re-referencing (via ChemicalShifts.reref). |
makeshift.spectra |
Read Sparky .ucsf spectra (Spectrum), pick peaks, and align peak lists (map_peaklists). |
makeshift.relaxation |
CPMG dispersion pipeline (CPMGExperiment) and RelaxationProfile — RelaxDB-style per-residue dynamics from deposited R1/R2/NOE. |
makeshift.hydronmr |
Predict per-residue T1/T2/NOE from a PDB structure (run). |
makeshift.talosn |
Predict backbone torsion angles, S2 order parameters, and secondary structure from chemical shifts via the NIH TALOS-N binary (TalosN). |
makeshift.utils |
Dependency-light helpers: dataset/structure fetching (fetch_structure), constants. |
See demos/ for worked examples:
quick_start.ipynb(core workflow),reref.ipynb(re-referencing),cpmg_demo.ipynb(the CPMG pipeline),bmrb_relaxation_demo.ipynb(deposited relaxation → dynamics profile)talosn_demo.ipynb(TALOS-N prediction).
Re-referencing
BMRB shifts are sometimes mis-referenced — a constant offset shifts every peak
of a given nucleus. ChemicalShifts.reref corrects this in place using one of
two methods:
- PANAV (Wang & Wishart 2005) — uses rarely-misreferenced HA shifts to assign secondary structure, then aligns N/CA/CB to curated per-structure reference distributions (Wang & Jardetzky 2002).
- LACS (Wang & Markley 2009) — fits secondary shift vs. CSI so the random-coil regime intercepts at the origin; covers CA, CB, C′, N, and HN.
cs = ms.ChemicalShifts.from_bmrb(4527)
cs.reref(method="panav") # or "lacs"
print(cs.reref_offsets) # {'N': ..., 'CA': ..., 'CB': ..., ...}
Entry 4527 is correctly referenced; entries 6586 and 4150 have been described in the literature as needing re-referencing. The two methods have not yet been extensively compared.
Relaxation and dynamics
NMRStarEntry extracts any deposited relaxation data, and RelaxationProfile
turns it into a per-residue dynamics analysis in the style of RelaxDB
(Wayment-Steele, El Nesr et al.).
Pull deposited data straight from an entry:
entry = ms.NMRStarEntry.from_bmrb(25013)
entry.datasets() # which data types the entry holds
entry.relaxation("T2") # R2 (also "T1"/"R1", "T1rho", "NOE") — units-aware
entry.order_parameters() # model-free S2 (S2, Tau_e, Rex)
entry.data_loop("spectral_density_values", "_Spectral_density") # anything else
RelaxationProfile assembles R1/R2/NOE into the R₂/R₁ observable, compares it to
a HYDRONMR rigid-body prediction, and labels each residue by motional regime:
from makeshift.relaxation import RelaxationProfile
prof = RelaxationProfile.from_bmrb(25013) # pulls T1/T2/NOE, aligns to the sequence
prof.add_rigid_prediction() # structure: deposited PDB → RCSB, else AlphaFold → AFDB
print(prof.label()) # per-residue motion string
prof.plot("R2_R1")
The structure for the rigid prediction can be a local PDB, a PDB id (fetched
from RCSB), or a UniProt accession (fetched from AlphaFold DB) — e.g.
add_rigid_prediction("1WRP"), ("P0DP23"), or ("model.pdb"); with no
argument it uses the entry's own cited PDB or AlphaFold model. makeshift does not
predict structure itself.
Label tokens: A ordered, ^ µs–ms exchange (elevated R₂/R₁), v ps–ns motion
(hetNOE ≤ 0.65), b both, . peak missing, t disordered terminus, p proline.
TALOS-N: prediction from chemical shifts
makeshift.talosn wraps the NIH
TALOS-N binary (Shen &
Bax, J. Biomol. NMR 2013), which predicts backbone φ/ψ torsion angles,
per-residue S2 order parameters, and secondary structure from assigned backbone
chemical shifts using a trained neural network.
The binary and its database aren't bundled — they're downloaded on demand from
NIH (under their Terms of Use,
which the installer prints) into a data_dir you choose. Keep that path in a
variable and pass the same one to install and to each TalosN:
from pathlib import Path
from makeshift import talosn
data_dir = Path.home() / "talosn_data"
talosn.install_talosn_data(data_dir=data_dir) # one-time, ~ a few hundred MB
tn = talosn.TalosN.from_bmrb(4527, data_dir=data_dir)
tn.run() # or run(auto_install=True) to fetch the binary on first use
tn.order_parameters # predS2.tab — per-residue S2
tn.torsion_angles # pred.tab — φ/ψ per residue + confidence class
tn.secondary_structure # predSS.tab — helix/sheet/coil
data_dir defaults to inside the installed package if omitted (usually not what
you want for a few-hundred-MB download).
NMR-STAR concepts
NMR-STAR files are organised around saveframes, each belonging to a category
(e.g. assigned_chemical_shifts, entity, sample). The three you interact
with most:
- Entry — a single BMRB deposition (one
.strfile). - Entity — a distinct molecular species (protein, DNA strand, ligand), each
with its own
Entity_ID. - Chemical shift list — the
_Atom_chem_shiftloop inside anassigned_chemical_shiftssaveframe; one row per observed shift.
License
MIT License.
makeshift.talosn downloads and runs the TALOS-N binary, which is distributed
separately by NIH under its own
Terms of Use (including no
redistribution without permission from the authors); those terms govern the
downloaded software, not this wrapper.
Acknowledgments
- The Biological Magnetic Resonance Bank (BMRB) for maintaining and sharing NMR data.
- The Bax lab at NIH for TALOS-N.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file makeshift_nmr-0.1.0.tar.gz.
File metadata
- Download URL: makeshift_nmr-0.1.0.tar.gz
- Upload date:
- Size: 87.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
85f3d8b45e0f8af68cd4623ba3585df7b4eb66d435d1371f32a62c66e25409d2
|
|
| MD5 |
deaa6946ec6c1b00eee875cd049cfe1f
|
|
| BLAKE2b-256 |
c7bce3fc165b491ebc5160b5e5f9a0b74a008ea05328db2e28fd32d0b96b38ae
|
File details
Details for the file makeshift_nmr-0.1.0-py3-none-any.whl.
File metadata
- Download URL: makeshift_nmr-0.1.0-py3-none-any.whl
- Upload date:
- Size: 93.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ff45c15efe285c98e446708b9ee30e8da6e30fa5c39910288cf42226474aa8d2
|
|
| MD5 |
6a356ebe01b11f98f69a893012769048
|
|
| BLAKE2b-256 |
a419f796c348264c817024deb99c4d6a003375c01ee812bdac9f2ea2847aa0dc
|