Calculate 15N PREs with cross-correlation effects

This example shows how to PREs for 15N in the presence of CSA-Curie spin cross-correlation effects. \({\Delta\chi}\)-tensors are used from a previous PCS fitting.

Downloads

  • Download the data files 4icbH_mut.pdb, calbindin_Tb_N_R1_600.pre and calbindin_Tb_HN_PCS_tensor.txt from here:

  • Download the script pre_calc_nitrogen.py

Script + Explanation

First the relevant modules are loaded, the protein and data are read and the data is parsed by the protein.

from paramagpy import protein, metal, dataparse

# Load the PDB file
prot = protein.load_pdb('../data_files/4icbH_mut.pdb')

# Load PRE data
rawData = dataparse.read_pre('../data_files/calbindin_Tb_N_R1_600.pre')

# Parse PRE data
data = prot.parse(rawData)

The Tb tensor fitted from PCS data is loaded and the relevant parameters, in this case the magnetic field strength, temperature and rotational correlation time are set.

met = metal.load_tensor('../data_files/calbindin_Tb_HN_PCS_tensor.txt')
met.B0 = 14.1
met.T = 298.0
met.taur = 4.25E-9

A loop is conducted over the nitrogen atoms that are present in the experimental data. The PRE is calculated using the function paramagpy.metal.atom_pre(). Calculations without CSA are appended to the list cal and calculations including CSA cross-correlation with the Curie-spin relaxation are appended to the list cal_csa.

exp = []
cal = []
cal_csa = []
for atom, pre, err in data[['atm','exp','err']]:
	exp.append(pre)
	cal.append(met.atom_pre(atom, rtype='r1'))
	cal_csa.append(met.atom_pre(atom, rtype='r1', csa=atom.csa))

Finally the data are plotted. Clearly CSA cross-correlation is a big effect for backbone nitrogen atoms and should always be taken into account for Curie-spin calculations. Also note the existence and correct prediction of negative PREs!

from matplotlib import pyplot as plt
fig, ax = plt.subplots(figsize=(5,5))

# Plot the data
ax.scatter(exp, cal, label="Standard Theory")
ax.scatter(exp, cal_csa, label="CSA x Curie spin")

# Plot a diagonal
l, h = ax.get_xlim()
ax.plot([l,h],[l,h],'grey',zorder=0)
ax.set_xlim(l,h)
ax.set_ylim(l,h)

# Make axis labels and save figure
ax.set_xlabel("Experiment")
ax.set_ylabel("Calculated")
ax.legend()
fig.savefig("pre_calc_nitrogen.png")

Output: [pre_calc_nitrogen.png]

../_images/pre_calc_nitrogen.png