schrodinger.application.jaguar.nmr_utils module¶
- class schrodinger.application.jaguar.nmr_utils.NMRData(shifts: list[float], couplings: list[Tuple[int, int, float, int]], isotopes: list[str], jnames: list[str], spectrum_type: str, field: float, filename: str, map_to_struct: dict[int, int], table_data: list[dict[str, str | float]], structure_title: str, xmin: float, xmax: float, timestep_npoints: int = 8192, spectrum_npoints: int = 16536, sym_groups: list[str] | None = None, sym_spins: list[list[int]] | None = None, max_subgraph_size: int = 14, debug: bool = False)¶
Bases:
object
- Parameters
shifts – List of chemical shifts (in ppm) for each spin to simulate.
couplings – List of tuples with coupling information between spins.
isotopes – List of isotopes for each spin to simulate.
jnames – List of atom names for each spin to simulate.
spectrum_type – The type of NMR experiment to simulate.
field – Magnetic field strength to simulate (in Tesla).
filename – Name of job, used to define name of final output files.
map_to_struct – Dict mapping spins index to atom index in the original Structure.
table_data – List of Dict containing shift and coupling data needed for Maestro csv.
structure_title – Title of the original Structure.
xmin – Miminum of the range (in ppm) for the NMR spectrum simulation.
xmax – Maximun of the range (in ppm) for the NMR spectrum simulation.
timestep_npoints – Number of timestep points in NMR spin simulation.
spectrum_npoints – Number of X samples in NMR spectrum produced.
sym_groups – List of symmetry groups.
sym_spins – List of spin indexes associated with each symmetry group.
max_subgraph_size – Size above which we will prune couplings in spin simulation to keep basis size tractable.
debug – Flag that we should produce extra debugging information.
- shifts: list[float]¶
- couplings: list[Tuple[int, int, float, int]]¶
- isotopes: list[str]¶
- jnames: list[str]¶
- spectrum_type: str¶
- field: float¶
- filename: str¶
- map_to_struct: dict[int, int]¶
- table_data: list[dict[str, str | float]]¶
- structure_title: str¶
- xmin: float¶
- xmax: float¶
- timestep_npoints: int = 8192¶
- spectrum_npoints: int = 16536¶
- sym_groups: list[str] | None = None¶
- sym_spins: list[list[int]] | None = None¶
- max_subgraph_size: int = 14¶
- debug: bool = False¶
- __init__(shifts: list[float], couplings: list[Tuple[int, int, float, int]], isotopes: list[str], jnames: list[str], spectrum_type: str, field: float, filename: str, map_to_struct: dict[int, int], table_data: list[dict[str, str | float]], structure_title: str, xmin: float, xmax: float, timestep_npoints: int = 8192, spectrum_npoints: int = 16536, sym_groups: list[str] | None = None, sym_spins: list[list[int]] | None = None, max_subgraph_size: int = 14, debug: bool = False) None ¶
- schrodinger.application.jaguar.nmr_utils.read_nmr_input(infile_name: str) schrodinger.application.jaguar.nmr_utils.NMRData ¶
Deserialise the JSON file into NMRData object for spectrum calculation.
- Parameters
infile_name – Filename containing JSON serialised NMRData object.
- Returns
NMRData object with shifts/couplings information.
- schrodinger.application.jaguar.nmr_utils.get_spectral_params(spectrum_spin: str, isotopes: list[str], shifts: numpy.ndarray, magnet: float, units: Literal['ppm', 'Hz'] = 'ppm') tuple[float, float] ¶
Determine spectral range for the particular system under consideration.
- Parameters
spectrum_spin – isotope that 1D NMR is probing, e.g. 1H
isotopes – list of isotopes for each spin in the system
shifts – list of chemical shifts in ppm for each spin in the system
magnet – strength of NMR magnet in Tesla
units – units of output (ppm or Hz).
- Returns
min and max values of spectral window (in ppm or Hz)
- class schrodinger.application.jaguar.nmr_utils.PauliMatrices(multiplicity: int)¶
Bases:
object
Class building and holding Pauli matrices for a given multiplicity.
The Pauli matrices are stored as COO matrices, these are fairly efficient at building new sparse matrices because they allow the sparsity to change efficiently (unlike CSR/CSC). We aren’t doing matrix algebra with these; we will convert before doing so.
- __init__(multiplicity: int)¶
Build the Pauli matrices.
- Parameters
multiplicity – Multiplicity of the Pauli matrices to be built.
- class schrodinger.application.jaguar.nmr_utils.IsotopeData(multiplicity: int, mg_ratio: float)¶
Bases:
object
- multiplicity: int¶
- mg_ratio: float¶
- __init__(multiplicity: int, mg_ratio: float) None ¶
- schrodinger.application.jaguar.nmr_utils.negligible(something, tolerance: float) bool ¶
True if something is below tolerance, False otherwise. Wraps and inverts significant() function.
Operates in ‘tensor’, ‘vector’, or ‘scalar’ mode, calling respective max functions for sparse or dense tensors.
- Parameters
something – object to check
tolerance – the tolerance level for significance
- Returns
True if the object is negligible, False otherwise
- schrodinger.application.jaguar.nmr_utils.significant(something, tolerance: float) bool ¶
Determines whether a given object deserves attention given the tolerance specified. Used in the internal decision-making conducted by spin_system kernel functions.
Operates in ‘tensor’, ‘vector’, or ‘scalar’ mode, calling respective max functions for sparse or dense tensors.
- Parameters
something – object to check
tolerance – the tolerance level for significance
- Returns
True if the object is significant, False otherwise
- schrodinger.application.jaguar.nmr_utils.print_proclamation(msg: str)¶
Utility function to print title-formatted message.
- Parameters
msg – Message to be printed.
- schrodinger.application.jaguar.nmr_utils.where_sorted_array(a, row)¶
Bisection search to find matching row in a lexicographically sorted array. Raises RuntimeError if row not in a.
Significantly accellerated by @njit numba decorator, but this is currently removed due to JAGUAR-11740.
- Parameters
a – The array to be searched.
row – The row to locate.
- Returns
The index of the row in the array.
- schrodinger.application.jaguar.nmr_utils.lexical_ordering(a: numpy.ndarray, b: numpy.ndarray) int ¶
Compare two 1D arrays lexicographically. Returns 1 if a > b, -1 if a < b, or 0 if a == b.
This function is significantly accellerated by @njit numba decorator, but this is currently removed due to JAGUAR-11740
- Parameters
a – first array
b – second array
- Returns
1 if a > b, -1 if a < b, 0 if a == b
- schrodinger.application.jaguar.nmr_utils.remove_vals_below_thresh(mat: scipy.sparse._arrays.csr_array, thresh: float)¶
Floor small values to 0 in sparse matrices so that they are not stored explicitly. Modifies mat in place.
- Parameters
mat – matrix possibly with some small values
thresh – threshold for small values to be floored to zeros
- schrodinger.application.jaguar.nmr_utils.tesla_to_mhz(magnet: float, isotope: str = '1H') float ¶
- schrodinger.application.jaguar.nmr_utils.mhz_to_tesla(magnet: float, isotope: str = '1H') float ¶
- schrodinger.application.jaguar.nmr_utils.hz_to_ppm(hz: float, magnet: float, isotope: str = '1H') float ¶
- Parameters
hz – Value to convert in Hz (note NOT MHz).
magnet – Magnetic field strength in Tesla.
isotope – The isotope the experiment is probing.
- Returns
Value in ppm.
- schrodinger.application.jaguar.nmr_utils.ppm_to_hz(ppm: float, magnet: float, isotope: str = '1H') float ¶
- Parameters
ppm – Value to convert in ppm.
magnet – Magnetic field strength in Tesla.
isotope – The isotope the experiment is probing.
- Returns
Value in Hz (note NOT MHz).
- schrodinger.application.jaguar.nmr_utils.convert_to_acs_label(split_lab: str) str ¶
Helper function to convert general splitting label into ACS format. Truncates >5 into “multiplet”.
- schrodinger.application.jaguar.nmr_utils.count_protons(st: schrodinger.structure._structure.Structure, excluded_atoms: set[str]) int ¶
Count the number of atoms in a structure that are hydrogen with isotope 1 or 0 (default) and are not part of the excluded set. Exclusion allows us to ignore things like acidic hydrogen which do not show in NMR.
- Parameters
st – Structure to be counted.
excluded_atoms – Atom name strings which should be excluded.
- Returns
The number of non-excluded protons.
- schrodinger.application.jaguar.nmr_utils.json_to_nmrdata(infile_name: pathlib.Path) schrodinger.application.jaguar.nmr_utils.NMRData ¶
Reads a JSON file into an NMRData object. Will raise an exception if the NMR data is not for a 1H spectrum. Performs some additional checks for backward compatibility.
- Parameters
infile_name – Path to JSON file.
- Returns
NMRData object deserialized from JSON.
- schrodinger.application.jaguar.nmr_utils.read_csv(fname: str) tuple[numpy.ndarray[typing.Any, numpy.dtype[+ScalarType]], numpy.ndarray[typing.Any, numpy.dtype[+ScalarType]]] ¶
Helper function for parsing nmr.py format CSV into (X, Y) spectrum data.
- Parameters
fname – Path to CSV file.
- Returns
X data for spectrum (ppm).
- Returns
Y data for spectrum (intensity).
- schrodinger.application.jaguar.nmr_utils.all_were_assigned(mapping: dict['Signal', list['Signal']]) int ¶
Check if every experimental Signal has had enough theoretical signals assigned to it to exactly fill its expected number of protons and report details of this check.
- Parameters
mapping – Dictionary mapping the experimental signals to the theoretical signals.
- Returns
True if every experimental signal was exactly filled, false otherwise.
- Returns
The number of correctly filled experimental signals.
- Returns
The total number of experimental signals.