コード例 #1
0
def test_read_write_methods():
    for item in methods:
        kwargs = {
            "channels": ["93Nb"],
            "spectral_dimensions": [{
                "count": 1024,
                "spectral_width": 100
            } for _ in range(item.ndim)],
        }

        if item.__name__ == "SSB2D":
            kwargs["rotor_frequency"] = 1e3

        fn1 = item(**kwargs)

        # Parse against self
        assert_parsing(item, fn1)

        # Parse against Method class
        assert_parsing(Method, fn1)

        # Parse against Method1D/Method2D classes
        mth_d = Method1D if item.ndim == 1 else Method2D
        assert_parsing(mth_d, fn1)

        # save test
        sim = Simulator(spin_systems=[sys], methods=[fn1])

        # save/load with units
        sim.run()
        sim.save("test.mrsim")
        sim2 = Simulator.load("test.mrsim")
        check_sim_save(sim, sim2, "with units")

        # save/load with out units
        sim.run()
        sim.save("test.mrsim", with_units=False)
        sim2 = Simulator.load("test.mrsim", parse_units=False)
        check_sim_save(sim, sim2, "without units")

        # save/load methods
        sim.run()
        sim.export_methods("test.mrmtd")
        sim2 = sim.copy()
        sim2.load_methods("test.mrmtd")
        check_methods_save_load(sim, sim2)

        # save/load spin systems
        sim.run()
        sim.export_spin_systems("test.mrsys")
        sim2 = sim.copy()
        sim2.load_spin_systems("test.mrsys")
        assert sim.spin_systems == sim2.spin_systems

    os.remove("test.mrsim")
    os.remove("test.mrsys")
    os.remove("test.mrmtd")
コード例 #2
0
def test_sim_coesite():
    # coesite
    O17_1 = Site(
        isotope="17O",
        isotropic_chemical_shift=29,
        quadrupolar=dict(Cq=6.05e6, eta=0.000),
    )
    O17_2 = Site(
        isotope="17O",
        isotropic_chemical_shift=41,
        quadrupolar=dict(Cq=5.43e6, eta=0.166),
    )
    O17_3 = Site(
        isotope="17O",
        isotropic_chemical_shift=57,
        quadrupolar=dict(Cq=5.45e6, eta=0.168),
    )
    O17_4 = Site(
        isotope="17O",
        isotropic_chemical_shift=53,
        quadrupolar=dict(Cq=5.52e6, eta=0.169),
    )
    O17_5 = Site(
        isotope="17O",
        isotropic_chemical_shift=58,
        quadrupolar=dict(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 = BlochDecayCTSpectrum(
        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]

    sim_coesite.save("sample.mrsim")
    sim_load = Simulator.load("sample.mrsim")
    assert sim_coesite == sim_load

    os.remove("sample.mrsim")
コード例 #3
0
def test_simulator_2():
    sim = Simulator()
    sim.spin_systems = [
        SpinSystem(
            sites=[Site(isotope="1H"),
                   Site(isotope="23Na")],
            couplings=[Coupling(site_index=[0, 1], isotropic_j=15)],
        )
    ]
    sim.methods = [
        BlochDecaySpectrum(
            channels=["1H"],
            spectral_dimensions=[{
                "count": 10
            }],
            experiment=cp.as_csdm(np.arange(10)),
        )
    ]
    sim.name = "test"
    sim.label = "test0"
    sim.description = "testing-testing 1.2.3"

    sim.run()

    # save
    sim.save("test_sim_save.temp")
    sim_load = Simulator.load("test_sim_save.temp")

    sim_load_data = sim_load.methods[0].simulation
    sim_data = sim.methods[0].simulation
    sim_load_data._timestamp = ""
    assert sim_load_data.dict() == sim_data.dict()

    sim_load.methods[0].simulation = None
    sim.methods[0].simulation = None
    assert sim_load.spin_systems == sim.spin_systems
    assert sim_load.methods == sim.methods
    assert sim_load.name == sim.name
    assert sim_load.description == sim.description

    os.remove("test_sim_save.temp")
コード例 #4
0
def test_read_write_methods():
    def assert_parsing(method, fn1):
        fn2 = method.parse_dict_with_units(fn1.json())
        assert fn1 == fn2, f"Error with {method} parse with units."

        fn3 = method(**fn1.json(units=False))
        assert fn1 == fn3, f"Error with {method} parse with units."

        event_error = "Event objects are immutable for"
        serialize = fn1.json()
        ent = serialize["spectral_dimensions"][0]["events"]
        ent[0]["transition_query"][0]["ch1"]["P"] = [-100]

        if method not in [Method, Method1D, Method2D]:
            with pytest.raises(ImmutableEventError,
                               match=f".*{event_error}.*"):
                method.parse_dict_with_units(serialize)

            with pytest.raises(ImmutableEventError,
                               match=f".*{event_error}.*"):
                method(**serialize)

            with pytest.raises(ImmutableEventError,
                               match=f".*{event_error}.*"):
                ent.append({"transition_query": [{"ch1": {"P": [-100]}}]})
                method.parse_dict_with_units(serialize)

    def check_sim_save(sim1, sim2, message):
        for mth in sim2.methods:
            mth.simulation._timestamp = ""
            _ = [
                item.to("ppm", "nmr_frequency_ratio")
                for item in mth.simulation.x
            ]

        data1 = sim.methods[0].simulation.copy()
        sim.methods[0].simulation = None
        data2 = sim2.methods[0].simulation.copy()
        sim2.methods[0].simulation = None

        assert data1 == data2, f"data saved and loaded is not equal: type {message}."
        assert sim == sim2, f".mrsim saved and loaded is not equal: type {message}."

    for item in methods:
        kwargs = {
            "channels": ["93Nb"],
            "spectral_dimensions": [{
                "count": 1024,
                "spectral_width": 100
            } for _ in range(item.ndim)],
        }

        if item.__name__ == "SSB2D":
            kwargs["rotor_frequency"] = 1e3

        fn1 = item(**kwargs)

        # Parse against self
        assert_parsing(item, fn1)

        # Parse against Method class
        assert_parsing(Method, fn1)

        # Parse against Method1D/Method2D classes
        mth_d = Method1D if item.ndim == 1 else Method2D
        assert_parsing(mth_d, fn1)

        # save test
        sim = Simulator(spin_systems=[sys], methods=[fn1])

        # save/load with units
        sim.run()
        sim.save("test.mrsim")
        sim2 = Simulator.load("test.mrsim")
        check_sim_save(sim, sim2, "with units")

        # save/load with out units
        sim.run()
        sim.save("test.mrsim", with_units=False)
        sim2 = Simulator.load("test.mrsim", parse_units=False)
        check_sim_save(sim, sim2, "without units")

    os.remove("test.mrsim")
コード例 #5
0
def test_simulator_1():
    sim = Simulator()
    sim.spin_systems = [SpinSystem(sites=[Site(isotope="1H"), Site(isotope="23Na")])]
    sim.methods = [BlochDecaySpectrum(channels=["1H"])]
    sim.name = "test"
    sim.label = "test0"
    sim.description = "testing-testing 1.2.3"

    red_dict = sim.json(units=False)
    _ = [item.pop("description") for item in red_dict["methods"]]

    assert red_dict == {
        "name": "test",
        "label": "test0",
        "description": "testing-testing 1.2.3",
        "spin_systems": [
            {
                "sites": [
                    {"isotope": "1H", "isotropic_chemical_shift": 0.0},
                    {"isotope": "23Na", "isotropic_chemical_shift": 0.0},
                ],
            }
        ],
        "methods": [
            {
                "channels": ["1H"],
                "name": "BlochDecaySpectrum",
                "magnetic_flux_density": 9.4,
                "rotor_angle": 0.9553166181245,
                "rotor_frequency": 0.0,
                "spectral_dimensions": [
                    {
                        "count": 1024,
                        "events": [{"transition_queries": [{"ch1": {"P": [-1]}}]}],
                        "spectral_width": 25000.0,
                    }
                ],
            }
        ],
        "config": {
            "decompose_spectrum": "none",
            "integration_density": 70,
            "integration_volume": "octant",
            "number_of_sidebands": 64,
        },
    }

    # save
    sim.save("test_sim_save.temp")
    sim_load = Simulator.load("test_sim_save.temp")

    assert sim_load.spin_systems == sim.spin_systems
    assert sim_load.methods == sim.methods
    assert sim_load.name == sim.name
    assert sim_load.description == sim.description
    assert sim_load == sim

    # without units
    sim.save("test_sim_save_no_unit.temp", with_units=False)
    sim_load = Simulator.load("test_sim_save_no_unit.temp", parse_units=False)
    assert sim_load == sim

    os.remove("test_sim_save.temp")
    os.remove("test_sim_save_no_unit.temp")