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.