def test_sites(): iso = [1.02, 2.12, 13.2, 5.2, 2.1, 1.2] zeta = [1.02, 2.12, 13.2, 5.2, 2.1, 1.2] eta = [0.1, 0.4, 0.3, 0.6, 0.9, 1.0] sites = [ Site( isotope="13C", isotropic_chemical_shift=i, shielding_symmetric={ "zeta": z, "eta": e }, ) for i, z, e in zip(iso, zeta, eta) ] sim = Simulator() sim.spin_systems = [SpinSystem(sites=[s]) for s in sites] r_sites = sim.sites() for i, site in enumerate(sites): assert r_sites[i] == site # test sites to pd sites_table = sim.sites().to_pd() assert list(sites_table["isotope"]) == ["13C"] * len(iso) assert list(sites_table["isotropic_chemical_shift"]) == [ f"{i} ppm" if i is not None else None for i in iso ] assert list(sites_table["shielding_symmetric.zeta"]) == [ f"{i} ppm" if i is not None else None for i in zeta ] assert list(sites_table["shielding_symmetric.eta"]) == [ i if i is not None else None for i in eta ] # test Sites Class a = Sites([]) site = Site(isotope="1H") a.append(site) assert a[0] == site site2 = Site(isotope="17O") a[0] = site2 assert a[0] == site2 site_dict = {"isotope": "13C"} a[0] = site_dict assert a[0] == Site(**site_dict) with pytest.raises(ValueError, match="Only object of type Site is allowed."): a[0] = ""
def test_sites_to_pandas_df(): isotopes = ["29Si"] * 3 + ["17O"] shifts = [-89.0, -89.5, -87.8, 15.0] zeta = [59.8, 52.1, 69.4, 12.4] eta_n = [0.62, 0.68, 0.6, 0.5] Cq = [None, None, None, 5.3e6] eta_q = [None, None, None, 0.34] spin_systems = single_site_system_generator( isotope=isotopes, isotropic_chemical_shift=shifts, shielding_symmetric={"zeta": zeta, "eta": eta_n}, quadrupolar={"Cq": Cq, "eta": eta_q}, abundance=1, ) sim = Simulator() sim.spin_systems = spin_systems pd_o = sim.sites().to_pd() assert list(pd_o["isotope"]) == isotopes assert list(pd_o["isotropic_chemical_shift"]) == [ f"{i} ppm" if i is not None else None for i in shifts ] assert list(pd_o["shielding_symmetric.zeta"]) == [ f"{i} ppm" if i is not None else None for i in zeta ] assert list(pd_o["shielding_symmetric.eta"]) == [ i if i is not None else None for i in eta_n ] assert list(pd_o["quadrupolar.Cq"]) == [ f"{i} Hz" if i is not None else None for i in Cq ]
from mrsimulator import Simulator from mrsimulator.methods import BlochDecaySpectrum from mrsimulator import signal_processing as sp # sphinx_gallery_thumbnail_number = 1 # %% # Create the Simulator object and load the spin systems from an external file. sim = Simulator() file_ = "https://sandbox.zenodo.org/record/687656/files/protein_GB1_15N_13CA_13CO.mrsys" sim.load_spin_systems(file_) # load the spin systems. print(f"number of spin systems = {len(sim.spin_systems)}") # %% all_sites = sim.sites().to_pd() all_sites.head() # %% # Create a :math:`^{13}\text{C}` Bloch decay spectrum method. method_13C = BlochDecaySpectrum( channels=["13C"], magnetic_flux_density=11.74, # in T rotor_frequency=3000, # in Hz spectral_dimensions=[{ "count": 8192, "spectral_width": 5e4, # in Hz "reference_offset": 2e4, # in Hz "label": r"$^{13}$C resonances", }], )