def setup_spin_system(): site = Site( isotope="87Rb", isotropic_chemical_shift=-9, shielding_symmetric=SymmetricTensor(zeta=110, eta=0), quadrupolar=SymmetricTensor(Cq=3.5e6, eta=0.36, beta=70 * 3.14159 / 180), ) return SpinSystem(sites=[site])
def coupled_spin_system(j_coup=0, dipole=0): S1 = Site( isotope="1H", isotropic_chemical_shift=10, # in ppm shielding_symmetric=SymmetricTensor(zeta=-80, eta=0.25), # zeta in ppm ) S2 = Site(isotope="1H", isotropic_chemical_shift=-10) S12 = Coupling( site_index=[0, 1], isotropic_j=j_coup, dipolar=SymmetricTensor(D=dipole, eta=0), ) return SpinSystem(sites=[S1, S2], couplings=[S12])
def add_site(doctest_namespace): doctest_namespace["np"] = np doctest_namespace["plt"] = plt doctest_namespace["SpinSystem"] = SpinSystem doctest_namespace["Simulator"] = Simulator doctest_namespace["Site"] = Site doctest_namespace["Coupling"] = Coupling doctest_namespace["SymmetricTensor"] = SymmetricTensor doctest_namespace["st"] = SymmetricTensor doctest_namespace["pprint"] = pprint doctest_namespace["Isotope"] = Isotope doctest_namespace["sp"] = sp doctest_namespace["Method2D"] = Method2D site1 = Site( isotope="13C", isotropic_chemical_shift=20, shielding_symmetric=SymmetricTensor(zeta=10, eta=0.5), ) site2 = Site( isotope="1H", isotropic_chemical_shift=-4, shielding_symmetric=SymmetricTensor(zeta=2.1, eta=0.1), ) site3 = Site( isotope="27Al", isotropic_chemical_shift=120, shielding_symmetric=SymmetricTensor(zeta=2.1, eta=0.1), quadrupolar=SymmetricTensor(Cq=5.1e6, eta=0.5), ) doctest_namespace["spin_system_1H_13C"] = SpinSystem(sites=[site1, site2]) doctest_namespace["spin_systems"] = SpinSystem(sites=[site1, site2, site3]) spin_systems = [SpinSystem(sites=[site]) for site in [site1, site2, site3]] sim = Simulator() sim.spin_systems += spin_systems doctest_namespace["sim"] = sim # Transitions t1 = Transition(initial=[0.5, 0.5], final=[0.5, -0.5]) doctest_namespace["t1"] = t1 t2 = Transition(initial=[0.5, 0.5], final=[-0.5, 0.5]) doctest_namespace["t2"] = t2 path = TransitionPathway([t1, t2]) doctest_namespace["path"] = path
def rvs(self, size: int): """Draw random variates of length `size` from the distribution. Args: size: The number of random points to draw. Returns: A list of two NumPy array, where the first and the second array are the anisotropic/quadrupolar coupling constant and asymmetry parameter, respectively. Example: >>> Cq_dist, eta_dist = ext_cz_model.rvs(size=1000000) """ # czjzek_random_distribution model tensors = _czjzek_random_distribution_tensors(1, size) symmetric_tensor = self.symmetric_tensor if isinstance(symmetric_tensor, dict): symmetric_tensor = SymmetricTensor(**symmetric_tensor) zeta = symmetric_tensor.zeta or symmetric_tensor.Cq eta = symmetric_tensor.eta # the traceless second-rank symmetric Cartesian tensor in PAS T0 = [0.0, 0.0, 0.0] if zeta != 0 and eta != 0: T0 = get_principal_components(zeta, eta) # 2-norm of the tensor norm_T0 = np.linalg.norm(T0) # the perturbation factor rho = self.eps * norm_T0 / np.sqrt(30) # total tensor total_tensors = np.diag(T0) + rho * tensors if not self.polar: return get_Haeberlen_components(total_tensors) return x_y_from_zeta_eta(*get_Haeberlen_components(total_tensors))
from mrsimulator.methods import Method2D from mrsimulator import signal_processing as sp from mrsimulator.spin_system.tensors import SymmetricTensor from mrsimulator.method import SpectralDimension, SpectralEvent # sphinx_gallery_thumbnail_number = 3 # %% # Generate the site and spin system objects. site_Ni = Site( isotope="2H", isotropic_chemical_shift=-97, # in ppm shielding_symmetric=SymmetricTensor( zeta=-551, # in ppm eta=0.12, alpha=62 * 3.14159 / 180, # in rads beta=114 * 3.14159 / 180, # in rads gamma=171 * 3.14159 / 180, # in rads ), quadrupolar=SymmetricTensor(Cq=77.2e3, eta=0.9), # Cq in Hz ) site_Cu = Site( isotope="2H", isotropic_chemical_shift=51, # in ppm shielding_symmetric=SymmetricTensor( zeta=146, # in ppm eta=0.84, alpha=95 * 3.14159 / 180, # in rads beta=90 * 3.14159 / 180, # in rads gamma=0 * 3.14159 / 180, # in rads
import matplotlib.pyplot as plt from mrsimulator import Simulator, SpinSystem, Site from mrsimulator.method.lib import ThreeQ_VAS from mrsimulator import signal_processor as sp from mrsimulator.spin_system.tensors import SymmetricTensor from mrsimulator.method import SpectralDimension # sphinx_gallery_thumbnail_number = 3 # %% # Generate the site and spin system objects. Rb87_1 = Site( isotope="87Rb", isotropic_chemical_shift=-27.4, # in ppm quadrupolar=SymmetricTensor(Cq=1.68e6, eta=0.2), # Cq is in Hz ) Rb87_2 = Site( isotope="87Rb", isotropic_chemical_shift=-28.5, # in ppm quadrupolar=SymmetricTensor(Cq=1.94e6, eta=1.0), # Cq is in Hz ) Rb87_3 = Site( isotope="87Rb", isotropic_chemical_shift=-31.3, # in ppm quadrupolar=SymmetricTensor(Cq=1.72e6, eta=0.5), # Cq is in Hz ) sites = [Rb87_1, Rb87_2, Rb87_3] # all sites spin_systems = [SpinSystem(sites=[s]) for s in sites]
# as tools in creating a model for the least-squares fitting. # # **Step 1:** Create initial guess sites and spin systems. # # The initial guess is often based on some prior knowledge about the system under # investigation. For the current example, we know that Cuspidine is a crystalline silica # polymorph with one crystallographic Si site. Therefore, our initial guess model is a # single :math:`^{29}\text{Si}` site spin system. For non-linear fitting algorithms, as # a general recommendation, the initial guess model parameters should be a good starting # point for the algorithms to converge. # the guess model comprising of a single site spin system site = Site( isotope="29Si", isotropic_chemical_shift=-82.0, # in ppm, shielding_symmetric=SymmetricTensor(zeta=-63, eta=0.4), # zeta in ppm ) spin_system = SpinSystem( name="Si Site", description="A 29Si site in cuspidine", sites=[site], # from the above code abundance=100, ) # %% # **Step 2:** Create the method object. # # The method should be the same as the one used # in the measurement. In this example, we use the `BlochDecaySpectrum` method. Note, # when creating the method object, the value of the method parameters must match the
plt.figure(figsize=(4.25, 3.0)) ax = plt.subplot(projection="csdm") ax.plot(experiment, color="black", linewidth=0.5, label="Experiment") ax.set_xlim(200, -200) plt.grid() plt.tight_layout() plt.show() # %% # Create a fitting model # ---------------------- # **Spin System** P_31 = Site( isotope="31P", isotropic_chemical_shift=5.0, # in ppm, shielding_symmetric=SymmetricTensor(zeta=-80, eta=0.5), # zeta in Hz ) spin_systems = [SpinSystem(sites=[P_31])] # %% # **Method** # Get the spectral dimension parameters from the experiment. spectral_dims = get_spectral_dimensions(experiment) static1D = BlochDecaySpectrum( channels=["31P"], magnetic_flux_density=9.395, # in T rotor_frequency=0, # in Hz spectral_dimensions=spectral_dims,
plt.figure(figsize=(4.25, 3.0)) ax = plt.subplot(projection="csdm") ax.plot(experiment, color="black", linewidth=0.5, label="Experiment") ax.set_xlim(600, -700) plt.grid() plt.tight_layout() plt.show() # %% # Create a fitting model # ---------------------- # **Spin System** H_2 = Site( isotope="2H", isotropic_chemical_shift=-57.12, # in ppm, quadrupolar=SymmetricTensor(Cq=3e4, eta=0.0), # Cq in Hz ) spin_systems = [SpinSystem(sites=[H_2])] # %% # **Method** # Get the spectral dimension parameters from the experiment. spectral_dims = get_spectral_dimensions(experiment) MAS = BlochDecaySpectrum( channels=["2H"], magnetic_flux_density=9.395, # in T rotor_frequency=4517.1, # in Hz spectral_dimensions=spectral_dims,
import matplotlib.pyplot as plt from mrsimulator import Simulator, SpinSystem, Site from mrsimulator.method.lib import ThreeQ_VAS from mrsimulator import signal_processor as sp from mrsimulator.spin_system.tensors import SymmetricTensor from mrsimulator.method import SpectralDimension # sphinx_gallery_thumbnail_number = 2 # %% # Generate the site and spin system objects. site = Site( isotope="27Al", isotropic_chemical_shift=64.7, # in ppm quadrupolar=SymmetricTensor(Cq=3.25e6, eta=0.68), # Cq is in Hz ) spin_systems = [SpinSystem(sites=[site])] # %% # Select a Triple Quantum variable-angle spinning method. You may optionally # provide a `rotor_angle` to the method. The default `rotor_angle` is the magic-angle. method = ThreeQ_VAS( channels=["27Al"], magnetic_flux_density=7, # in T spectral_dimensions=[ SpectralDimension( count=256, spectral_width=1e4, # in Hz reference_offset=-3e3, # in Hz
import numpy as np import matplotlib.pyplot as plt from mrsimulator import Simulator, SpinSystem, Site from mrsimulator.method import Method, SpectralDimension, SpectralEvent from mrsimulator.spin_system.tensors import SymmetricTensor # sphinx_gallery_thumbnail_number = 2 # %% # Create a single-site arbitrary spin system. site = Site( name="27Al", isotope="27Al", isotropic_chemical_shift=35.7, # in ppm quadrupolar=SymmetricTensor(Cq=2.959e6, eta=0.98), # Cq is in Hz ) spin_system = SpinSystem(sites=[site]) # %% # Selecting the triple-quantum transition # --------------------------------------- # # For single-site spin-5/2 spin system, there are three triple-quantum transition # # - :math:`|1/2\rangle\rightarrow|-5/2\rangle` (:math:`P=-3, D=6`) # - :math:`|3/2\rangle\rightarrow|-3/2\rangle` (:math:`P=-3, D=0`) # - :math:`|5/2\rangle\rightarrow|-1/2\rangle` (:math:`P=-3, D=-6`) # # To select one or more triple-quantum transitions, assign the respective value of P and # D to the symmetry query object of `transition_queries`. Refer to the
plt.tight_layout() plt.show() # %% # Create a fitting model # ---------------------- # **Guess model** # # Create a guess list of spin systems. site = Site( isotope="2H", isotropic_chemical_shift=-90, # in ppm shielding_symmetric=SymmetricTensor( zeta=-610, # in ppm eta=0.15, alpha=0.7, # in rads beta=2.0, # in rads gamma=3.0, # in rads ), quadrupolar=SymmetricTensor(Cq=75.2e3, eta=0.9), # Cq in Hz ) spin_systems = [SpinSystem(sites=[site])] # %% # **Method** # # Use the generic 2D method, `Method2D`, to generate a shifting-d echo method. The # reported shifting-d 2D sequence is a correlation of the shielding frequencies to the # first-order quadrupolar frequencies. Here, we create a correlation method using the # :attr:`~mrsimulator.method.event.freq_contrib` attribute, which acts as a switch
from mrsimulator.methods import BlochDecaySpectrum from mrsimulator import signal_processing as sp from mrsimulator.spin_system.tensors import SymmetricTensor # sphinx_gallery_thumbnail_number = 1 # %% # **Spin Systems** # # Create a 13C-1H coupled spin system. spin_system = SpinSystem( sites=[ Site(isotope="13C", isotropic_chemical_shift=0.0), Site(isotope="1H", isotropic_chemical_shift=0.0), ], couplings=[Coupling(site_index=[0, 1], dipolar=SymmetricTensor(D=-2e4))], ) # %% # **Methods** # # Create a BlochDecaySpectrum method. method = BlochDecaySpectrum( channels=["13C"], magnetic_flux_density=9.4, # in T spectral_dimensions=[dict(count=2048, spectral_width=8.0e4)], ) # %% # **Simulator** # # Create the Simulator object and add the method and the spin system object.
plt.tight_layout() plt.show() # %% # Create a fitting model # ---------------------- # **Guess model** # # Create a guess list of spin systems. There are two spin systems present in this # example, # - 1) an uncoupled :math:`^{119}\text{Sn}` and # - 2) a coupled :math:`^{119}\text{Sn}`-:math:`^{117}\text{Sn}` spin systems. sn119 = Site( isotope="119Sn", isotropic_chemical_shift=-210, shielding_symmetric=SymmetricTensor(zeta=700, eta=0.1), ) sn117 = Site( isotope="117Sn", isotropic_chemical_shift=0, ) j_sn = Coupling( site_index=[0, 1], isotropic_j=8150.0, ) sn117_abundance = 7.68 # in % spin_systems = [ # uncoupled spin system SpinSystem(sites=[sn119], abundance=100 - sn117_abundance), # coupled spin systems
plt.grid() plt.tight_layout() plt.show() # %% # Create a fitting model # ---------------------- # **Guess model** # # Create a guess list of spin systems. For fitting the sideband profile at an isotropic # chemical shift cross-section from PASS/MAT datasets, set the isotropic_chemical_shift # parameter of the site object as zero. site = Site( isotope="13C", isotropic_chemical_shift=0, # shielding_symmetric=SymmetricTensor(zeta=-70, eta=0.8), ) spin_systems = [SpinSystem(sites=[site])] # %% # **Method** # # For the sideband-only cross-section, use the BlochDecaySpectrum method. # Get the dimension information from the experiment. spectral_dims = get_spectral_dimensions(pass_cross_section) PASS = BlochDecaySpectrum( channels=["13C"], magnetic_flux_density=9.395, # in T rotor_frequency=1500, # in Hz
import numpy as np import matplotlib.pyplot as plt from mrsimulator import Simulator, SpinSystem, Site from mrsimulator.method import Method, SpectralDimension, SpectralEvent from mrsimulator.spin_system.tensors import SymmetricTensor # sphinx_gallery_thumbnail_number = 4 # %% # Create a single-site arbitrary spin system. site = Site( name="27Al", isotope="27Al", isotropic_chemical_shift=35.7, # in ppm quadrupolar=SymmetricTensor(Cq=5.959e6, eta=0.32), # Cq is in Hz ) spin_system = SpinSystem(sites=[site]) # %% # Selecting spin transitions for simulation # ----------------------------------------- # # The arguments of the Method object are the same as the arguments of the # BlochDecaySpectrum method; however, unlike a BlochDecaySpectrum method, the # :ref:`spectral_dim_api` object in Method contains an additional argument---`events`. # # The :ref:`event_api` object is a collection of attributes, which are local to the # event. It is here where we define `transition_queries` to select one or more # transitions for simulating the spectrum. Recall, a TransitionQuery object holds a # channel wise SymmetryQuery. For more information, refer to the
ax.plot(experiment, color="black", linewidth=0.5, label="Experiment") ax.set_xlim(1200, -1200) plt.grid() plt.tight_layout() plt.show() # %% # Create a fitting model # ---------------------- # **Guess model** # # Create a guess list of spin systems. Al_1 = Site( isotope="27Al", isotropic_chemical_shift=76, # in ppm quadrupolar=SymmetricTensor(Cq=6e6, eta=0.0), # Cq in Hz ) Al_2 = Site( isotope="27Al", isotropic_chemical_shift=1, # in ppm quadrupolar=SymmetricTensor(Cq=5e5, eta=0.3), # Cq in Hz ) spin_systems = [ SpinSystem(sites=[Al_1], name="AlO4"), SpinSystem(sites=[Al_2], name="AlO6"), ] # %% # **Method**
# were obtained from Hansen `et al.` [#f1]_ import matplotlib.pyplot as plt from mrsimulator import Simulator, SpinSystem, Site from mrsimulator import signal_processing as sp from mrsimulator.methods import BlochDecaySpectrum from mrsimulator.spin_system.tensors import SymmetricTensor # sphinx_gallery_thumbnail_number = 3 # %% # **Step 1:** Create the sites. Si29_1 = Site( isotope="29Si", isotropic_chemical_shift=-89.0, # in ppm shielding_symmetric=SymmetricTensor(zeta=59.8, eta=0.62), # zeta in ppm ) Si29_2 = Site( isotope="29Si", isotropic_chemical_shift=-89.5, # in ppm shielding_symmetric=SymmetricTensor(zeta=52.1, eta=0.68), # zeta in ppm ) Si29_3 = Site( isotope="29Si", isotropic_chemical_shift=-87.8, # in ppm shielding_symmetric=SymmetricTensor(zeta=69.4, eta=0.60), # zeta in ppm ) # %% # **Step 2:** Create the spin systems from these sites. Again, we create three # single-site spin systems for better performance.
ax.set_xlim(200, -200) ax.set_ylim(75, -120) plt.grid() plt.tight_layout() plt.show() # %% # Create a fitting model # ---------------------- # **Guess model** # # Create a guess list of spin systems. Rb_1 = Site( isotope="87Rb", isotropic_chemical_shift=16, # in ppm quadrupolar=SymmetricTensor(Cq=5.3e6, eta=0.1), # Cq in Hz ) Rb_2 = Site( isotope="87Rb", isotropic_chemical_shift=40, # in ppm quadrupolar=SymmetricTensor(Cq=2.2e6, eta=0.95), # Cq in Hz ) spin_systems = [SpinSystem(sites=[s]) for s in [Rb_1, Rb_2]] # %% # **Method** # # Create the SSB2D method. # Get the spectral dimension parameters from the experiment.
from mrsimulator import Simulator, SpinSystem, Site, Coupling from mrsimulator.methods import Method1D from mrsimulator.method import SpectralDimension, SpectralEvent, MixingEvent from mrsimulator.spin_system.tensors import SymmetricTensor # sphinx_gallery_thumbnail_number = 2 # %% # For demonstration, we will create two spin systems, one with a single site and other # with two spin 1/2 sites. S1 = Site( isotope="1H", isotropic_chemical_shift=10, # in ppm shielding_symmetric=SymmetricTensor(zeta=-80, eta=0.25), # zeta in ppm ) S2 = Site(isotope="1H", isotropic_chemical_shift=-10) S12 = Coupling(site_index=[0, 1], isotropic_j=100, dipolar=SymmetricTensor(D=2000, eta=0, alpha=0)) spin_system_1 = SpinSystem(sites=[S1], label="Uncoupled system") spin_system_2 = SpinSystem(sites=[S1, S2], couplings=[S12], label="Coupled system") # %% # **Create a custom method** # # Writing a custom method is simply specifying an appropriate list of event objects per
def add_site(doctest_namespace): doctest_namespace["np"] = np doctest_namespace["plt"] = plt doctest_namespace["SpinSystem"] = SpinSystem doctest_namespace["Simulator"] = Simulator doctest_namespace["Site"] = Site doctest_namespace["SymmetricTensor"] = SymmetricTensor doctest_namespace["st"] = SymmetricTensor doctest_namespace["pprint"] = pprint doctest_namespace["Isotope"] = Isotope doctest_namespace["sp"] = sp doctest_namespace["apo"] = apo site1 = Site( isotope="13C", isotropic_chemical_shift=20, shielding_symmetric=SymmetricTensor(zeta=10, eta=0.5), ) doctest_namespace["site1"] = site1 site2 = Site( isotope="1H", isotropic_chemical_shift=-4, shielding_symmetric=SymmetricTensor(zeta=2.1, eta=0.1), ) doctest_namespace["site2"] = site2 site3 = Site( isotope="27Al", isotropic_chemical_shift=120, shielding_symmetric=SymmetricTensor(zeta=2.1, eta=0.1), quadrupole=SymmetricTensor(Cq=5.1e6, eta=0.5), ) doctest_namespace["site3"] = site3 spin_system_1H_13C = SpinSystem(sites=[site1, site2]) doctest_namespace["spin_system_1H_13C"] = spin_system_1H_13C spin_system_1 = SpinSystem(sites=[site1]) doctest_namespace["spin_system_1"] = spin_system_1 doctest_namespace["spin_systems"] = SpinSystem(sites=[site1, site2, site3]) spin_systems = [SpinSystem(sites=[site]) for site in [site1, site2, site3]] sim = Simulator() sim.spin_systems += spin_systems doctest_namespace["sim"] = sim # coesite O17_1 = Site( isotope="17O", isotropic_chemical_shift=29, quadrupolar=SymmetricTensor(Cq=6.05e6, eta=0.000), ) O17_2 = Site( isotope="17O", isotropic_chemical_shift=41, quadrupolar=SymmetricTensor(Cq=5.43e6, eta=0.166), ) O17_3 = Site( isotope="17O", isotropic_chemical_shift=57, quadrupolar=SymmetricTensor(Cq=5.45e6, eta=0.168), ) O17_4 = Site( isotope="17O", isotropic_chemical_shift=53, quadrupolar=SymmetricTensor(Cq=5.52e6, eta=0.169), ) O17_5 = Site( isotope="17O", isotropic_chemical_shift=58, quadrupolar=SymmetricTensor(Cq=5.16e6, eta=0.292), ) sites = [O17_1, O17_2, O17_3, O17_4, O17_5] abundance = [0.83, 1.05, 2.16, 2.05, 1.90] # abundance of each spin system spin_systems = [ SpinSystem(sites=[s], abundance=a) for s, a in zip(sites, abundance) ] method = BlochDecayCentralTransitionSpectrum( channels=["17O"], rotor_frequency=14000, spectral_dimensions=[{"count": 2048, "spectral_width": 50000}], ) sim_coesite = Simulator() sim_coesite.spin_systems += spin_systems sim_coesite.methods += [method] doctest_namespace["sim_coesite"] = sim_coesite
ax.set_xlim(100, -50) plt.grid() plt.tight_layout() plt.show() # %% # Create a fitting model # ---------------------- # # A fitting model is a composite of ``Simulator`` and ``SignalProcessor`` objects. # # **Step 1:** Create initial guess sites and spin systems O1 = Site( isotope="17O", isotropic_chemical_shift=60.0, # in ppm, quadrupolar=SymmetricTensor(Cq=4.2e6, eta=0.5), # Cq in Hz ) O2 = Site( isotope="17O", isotropic_chemical_shift=40.0, # in ppm, quadrupolar=SymmetricTensor(Cq=2.4e6, eta=0.0), # Cq in Hz ) spin_systems = [ SpinSystem(sites=[O1], abundance=50, name="O1"), SpinSystem(sites=[O2], abundance=50, name="O2"), ] # %% # **Step 2:** Create the method object. Create an appropriate method object that closely
from mrsimulator import Simulator, SpinSystem, Site from mrsimulator import signal_processor as sp from mrsimulator.method.lib import BlochDecayCTSpectrum from mrsimulator.spin_system.tensors import SymmetricTensor from mrsimulator.method import SpectralDimension # sphinx_gallery_thumbnail_number = 2 # %% # Create the sites. # default unit of isotropic_chemical_shift is ppm and Cq is Hz. O17_1 = Site( isotope="17O", isotropic_chemical_shift=29, quadrupolar=SymmetricTensor(Cq=6.05e6, eta=0.000), ) O17_2 = Site( isotope="17O", isotropic_chemical_shift=41, quadrupolar=SymmetricTensor(Cq=5.43e6, eta=0.166), ) O17_3 = Site( isotope="17O", isotropic_chemical_shift=57, quadrupolar=SymmetricTensor(Cq=5.45e6, eta=0.168), ) O17_4 = Site( isotope="17O", isotropic_chemical_shift=53, quadrupolar=SymmetricTensor(Cq=5.52e6, eta=0.169),
import matplotlib.pyplot as plt from mrsimulator import Simulator, SpinSystem, Site from mrsimulator.methods import Method2D from mrsimulator import signal_processing as sp from mrsimulator.spin_system.tensors import SymmetricTensor from mrsimulator.method import SpectralDimension, SpectralEvent # sphinx_gallery_thumbnail_number = 3 # %% # Generate the site and spin system objects. site = Site( isotope="87Rb", isotropic_chemical_shift=-9, # in ppm shielding_symmetric=SymmetricTensor(zeta=110, eta=0), quadrupolar=SymmetricTensor( Cq=3.5e6, # in Hz eta=0.36, alpha=0, # in rads beta=70 * 3.14159 / 180, # in rads gamma=0, # in rads ), ) spin_system = SpinSystem(sites=[site]) # %% # Use the generic 2D method, `Method2D`, to simulate a COASTER spectrum by customizing # the method parameters, as shown below. Note, the Method2D method simulates an infinite # spinning speed spectrum. coaster = Method2D(
# Here, we create three 13C-1H spin systems with different relative orientations # between the shielding and dipolar tensors. The Euler angle orientations # :math:`\alpha=\gamma=0` and :math:`\beta` values are listed below. beta_orientation = [np.pi / 6, 5 * np.pi / 18, np.pi / 2] # The `variable` spin_systems is a list of three coupled 13C-1H spin systems with # different relative shielding and dipolar tensor orientation. spin_systems = [ SpinSystem( sites=[ Site( isotope="13C", isotropic_chemical_shift=0.0, # in ppm shielding_symmetric=SymmetricTensor( zeta=18.87562, # in ppm eta=0.4, beta=beta, ), ), Site( isotope="1H", isotropic_chemical_shift=0.0, # in ppm ), ], couplings=[ Coupling( site_index=[0, 1], isotropic_j=200.0, dipolar=SymmetricTensor(D=-2.1e4) ) ], ) for beta in beta_orientation
# spectrum. The parameters for the simulation are obtained from Walder `et al.` [#f1]_. import matplotlib.pyplot as plt from mrsimulator import Simulator, SpinSystem, Site from mrsimulator.methods import SSB2D from mrsimulator.spin_system.tensors import SymmetricTensor # sphinx_gallery_thumbnail_number = 2 # %% # Generate the site and spin system objects. sites = [ Site( isotope="87Rb", isotropic_chemical_shift=16, # in ppm quadrupolar=SymmetricTensor(Cq=5.3e6, eta=0.1), # Cq in Hz ), Site( isotope="87Rb", isotropic_chemical_shift=40, # in ppm quadrupolar=SymmetricTensor(Cq=2.6e6, eta=1.0), # Cq in Hz ), ] spin_systems = [SpinSystem(sites=[s]) for s in sites] # %% # Use the ``SSB2D`` method to simulate a PASS, MAT, QPASS, QMAT, or any equivalent # sideband separation spectrum. Here, we use the method to generate a QMAT spectrum. # The QMAT method is created from the ``SSB2D`` method in the same as a PASS or MAT # method. The difference is that the observed channel is a half-integer quadrupolar # spin instead of a spin I=1/2.
ax[i].plot(experiment, color="black", linewidth=0.5, label="Experiment") ax[i].set_xlim(280, -10) ax[i].grid() plt.tight_layout() plt.show() # %% # Create a fitting model # ---------------------- # **Spin System**: The objective of a multi-data fitting is to optimize the spin # system parameters using multiple datasets. In this example, we create two single-site # spin systems, which are then shared by three method objects. C1 = Site( isotope="13C", isotropic_chemical_shift=176.0, # in ppm shielding_symmetric=SymmetricTensor(zeta=60, eta=0.6), # zeta in Hz ) C2 = Site( isotope="13C", isotropic_chemical_shift=43.0, # in ppm shielding_symmetric=SymmetricTensor(zeta=30, eta=0.5), # zeta in Hz ) spin_systems = [ SpinSystem(sites=[C1], name="C1"), SpinSystem(sites=[C2], name="C2") ] # %% # **Method**: Create the three MAS method objects with respective MAS spinning speeds.
plt.figure(figsize=(4.25, 3.0)) ax = plt.subplot(projection="csdm") ax.plot(experiment, "k", alpha=0.5) ax.set_xlim(100, -100) plt.grid() plt.tight_layout() plt.show() # %% # Create a fitting model # ---------------------- # **Spin System** B11 = Site( isotope="11B", isotropic_chemical_shift=20.0, # in ppm quadrupolar=SymmetricTensor(Cq=2.3e6, eta=0.03), # Cq in Hz ) spin_systems = [SpinSystem(sites=[B11])] # %% # **Method** # Get the spectral dimension parameters from the experiment. spectral_dims = get_spectral_dimensions(experiment) MAS_CT = BlochDecayCTSpectrum( channels=["11B"], magnetic_flux_density=14.1, # in T rotor_frequency=12500, # in Hz spectral_dimensions=spectral_dims, experiment=experiment, # add the measurement to the method.
import numpy as np import matplotlib.pyplot as plt from mrsimulator import Simulator, SpinSystem, Site from mrsimulator.method.lib import BlochDecayCTSpectrum from mrsimulator.spin_system.tensors import SymmetricTensor from mrsimulator.method import SpectralDimension # sphinx_gallery_thumbnail_number = 1 # %% # Create the spin system. site = Site( isotope="17O", isotropic_chemical_shift=320, # in ppm shielding_symmetric=SymmetricTensor(zeta=376.667, eta=0.345), quadrupolar=SymmetricTensor( Cq=8.97e6, # in Hz eta=0.15, alpha=5 * np.pi / 180, beta=np.pi / 2, gamma=70 * np.pi / 180, ), ) spin_system = SpinSystem(sites=[site]) # %% # Create a central transition selective Bloch decay spectrum method. method = BlochDecayCTSpectrum( channels=["17O"], magnetic_flux_density=11.74, # in T