Nuclear Overhauser Effects (NOEs) API
nmr
NMR Spectroscopy utilities for synth-nmr.
This module is responsible for calculating synthetic NMR observables from generated structures, such as Nuclear Overhauser Effects (NOEs) based on inter-proton distances.
Functions
calculate_synthetic_noes(structure, cutoff=5.0, buffer=0.5, exclude_intra_residue=False)
Calculate synthetic NOE restraints from a structure.
Finds all proton pairs (H-H) within the specified cutoff distance. Generates an upper bound restraint for each pair.
EDUCATIONAL NOTE - The Physics of NOEs
The Nuclear Overhauser Effect (NOE) allows us to measure distances between
protons in a molecule.
NOE stands for Nuclear Overhauser Effect:
- "Nuclear": Involves atomic nuclei (protons).
- "Overhauser": Named after physicist Albert Overhauser who predicted it.
- "Effect": The phenomenon where spinning one nucleus affects the signal of its neighbor.
The intensity of the NOE signal is proportional to the inverse 6th power of the distance (I ~ 1/r^6).
This steep dependence means:
1. Close protons give VERY strong signals.
2. As distance increases, signal vanishes rapidly.
3. The practical limit for detection is usually 5.0 - 6.0 Angstroms.
In structure calculation, we treat these not as exact rulers, but as
"Upper Distance Bounds". If we see an NOE, the atoms MUST be close.
If we don't see one, they might be far, or there might be motion/noise.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
structure
|
AtomArray
|
The AtomArray containing the protein (must have Hydrogens). |
required |
cutoff
|
float
|
Maximum distance (Angstroms) to consider an NOE. Must be > 0. |
5.0
|
buffer
|
float
|
Amount to add to actual distance for the Upper Bound. Must be >= 0. |
0.5
|
exclude_intra_residue
|
bool
|
If True, ignore NOEs within same residue. |
False
|
Returns:
| Type | Description |
|---|---|
List[Dict]
|
List of restraint dictionaries, corrected to match documentation: |
List[Dict]
|
{ 'index_1': int, 'res_name_1': str, 'atom_name_1': str, 'chain_1': str, 'index_2': int, 'res_name_2': str, 'atom_name_2': str, 'chain_2': str, 'distance': float, 'upper_limit': float |
List[Dict]
|
} |
Raises:
| Type | Description |
|---|---|
TypeError
|
If the input structure is not a biotite.structure.AtomArray. |
ValueError
|
If cutoff or buffer have invalid values. |
Source code in synth_nmr/nmr.py
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 | |