Skip to content

Commit

Permalink
updated scattering tests so they use the grid q vector generator as i…
Browse files Browse the repository at this point in the history
…t is not random
  • Loading branch information
ChiCheng45 committed Jan 31, 2025
1 parent adc6eaf commit ebbc436
Show file tree
Hide file tree
Showing 13 changed files with 55 additions and 26 deletions.
81 changes: 55 additions & 26 deletions MDANSE/Tests/UnitTests/Analysis/test_scattering.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,8 @@


@pytest.fixture(scope="module")
def qvector_spherical_lattice():
return (
"SphericalLatticeQVectors",
{"seed": 0, "shells": (5.0, 36, 10.0), "n_vectors": 10, "width": 9.0},
)
def qvector_grid():
return ("GridQVectors", {"hrange": [0, 3, 1], "krange": [0, 3, 1], "lrange": [0, 3, 1], "qstep": 1})


@pytest.fixture(scope="module")
Expand Down Expand Up @@ -87,25 +84,32 @@ def disf():


@pytest.mark.parametrize(
"trajectory",
[short_traj, mdmc_traj, com_traj],
"traj_info",
[("short_traj", short_traj), ("mdmc_traj", mdmc_traj), ("com_traj", com_traj)],
)
def test_dcsf(trajectory, qvector_spherical_lattice):
def test_dcsf(traj_info, qvector_grid):
temp_name = tempfile.mktemp()
parameters = {}
parameters["atom_selection"] = None
parameters["atom_transmutation"] = None
parameters["frames"] = (0, 10, 1, 5)
parameters["instrument_resolution"] = ("Ideal", {})
parameters["output_files"] = (temp_name, ("MDAFormat", "TextFormat"), "INFO")
parameters["q_vectors"] = qvector_spherical_lattice
parameters["q_vectors"] = qvector_grid
parameters["running_mode"] = ("single-core",)
parameters["trajectory"] = trajectory
parameters["trajectory"] = traj_info[1]
parameters["weights"] = "b_coherent"
dcsf = IJob.create("DynamicCoherentStructureFactor")
dcsf.run(parameters, status=True)
assert path.exists(temp_name + ".mda")
assert path.isfile(temp_name + ".mda")

result_file = os.path.join(result_dir, f"dcsf_{traj_info[0]}.mda")
with h5py.File(temp_name + ".mda") as actual, h5py.File(result_file) as desired:
keys = [i for i in desired.keys() if any([j in i for j in ["f(q,t)", "s(q,f)"]])]
for key in keys:
np.testing.assert_array_almost_equal(actual[f"/{key}"], desired[f"/{key}"])

os.remove(temp_name + ".mda")
assert path.exists(temp_name + "_text.tar")
assert path.isfile(temp_name + "_text.tar")
Expand All @@ -115,22 +119,33 @@ def test_dcsf(trajectory, qvector_spherical_lattice):
os.remove(temp_name + ".log")


def test_ccf(qvector_spherical_lattice):
@pytest.mark.parametrize(
"traj_info",
[("short_traj", short_traj), ("mdmc_traj", mdmc_traj), ("com_traj", com_traj)],
)
def test_ccf(traj_info, qvector_grid):
temp_name = tempfile.mktemp()
parameters = {}
parameters["atom_selection"] = None
parameters["atom_transmutation"] = None
parameters["frames"] = (0, 10, 1, 5)
parameters["instrument_resolution"] = ("Ideal", {})
parameters["output_files"] = (temp_name, ("MDAFormat", "TextFormat"), "INFO")
parameters["q_vectors"] = qvector_spherical_lattice
parameters["q_vectors"] = qvector_grid
parameters["running_mode"] = ("single-core",)
parameters["trajectory"] = short_traj
parameters["trajectory"] = traj_info[1]
parameters["weights"] = "equal"
dcsf = IJob.create("CurrentCorrelationFunction")
dcsf.run(parameters, status=True)
assert path.exists(temp_name + ".mda")
assert path.isfile(temp_name + ".mda")

result_file = os.path.join(result_dir, f"ccf_{traj_info[0]}.mda")
with h5py.File(temp_name + ".mda") as actual, h5py.File(result_file) as desired:
keys = [i for i in desired.keys() if any([j in i for j in ["J(q,f)", "j(q,t)"]])]
for key in keys:
np.testing.assert_array_almost_equal(actual[f"/{key}"], desired[f"/{key}"])

os.remove(temp_name + ".mda")
assert path.exists(temp_name + "_text.tar")
assert path.isfile(temp_name + "_text.tar")
Expand All @@ -140,15 +155,15 @@ def test_ccf(qvector_spherical_lattice):
os.remove(temp_name + ".log")


def test_output_axis_preview(qvector_spherical_lattice):
def test_output_axis_preview(qvector_grid):
temp_name = tempfile.mktemp()
parameters = {}
parameters["atom_selection"] = None
parameters["atom_transmutation"] = None
parameters["frames"] = (0, 10, 1, 5)
parameters["instrument_resolution"] = ("Ideal", {})
parameters["output_files"] = (temp_name, ("MDAFormat", "TextFormat"), "INFO")
parameters["q_vectors"] = qvector_spherical_lattice
parameters["q_vectors"] = qvector_grid
parameters["running_mode"] = ("single-core",)
parameters["trajectory"] = short_traj
parameters["weights"] = "b_coherent"
Expand All @@ -160,25 +175,32 @@ def test_output_axis_preview(qvector_spherical_lattice):


@pytest.mark.parametrize(
"trajectory",
[short_traj, mdmc_traj, com_traj],
"traj_info",
[("short_traj", short_traj), ("mdmc_traj", mdmc_traj), ("com_traj", com_traj)],
)
def test_disf(trajectory, qvector_spherical_lattice):
def test_disf(traj_info, qvector_grid):
temp_name = tempfile.mktemp()
parameters = {}
parameters["atom_selection"] = None
parameters["atom_transmutation"] = None
parameters["frames"] = (0, 10, 1, 5)
parameters["instrument_resolution"] = ("Ideal", {})
parameters["output_files"] = (temp_name, ("MDAFormat", "TextFormat"), "INFO")
parameters["q_vectors"] = qvector_spherical_lattice
parameters["q_vectors"] = qvector_grid
parameters["running_mode"] = ("single-core",)
parameters["trajectory"] = trajectory
parameters["trajectory"] = traj_info[1]
parameters["weights"] = "b_incoherent2"
disf = IJob.create("DynamicIncoherentStructureFactor")
disf.run(parameters, status=True)
assert path.exists(temp_name + ".mda")
assert path.isfile(temp_name + ".mda")

result_file = os.path.join(result_dir, f"disf_{traj_info[0]}.mda")
with h5py.File(temp_name + ".mda") as actual, h5py.File(result_file) as desired:
keys = [i for i in desired.keys() if any([j in i for j in ["f(q,t)", "s(q,f)"]])]
for key in keys:
np.testing.assert_array_almost_equal(actual[f"/{key}"], desired[f"/{key}"])

os.remove(temp_name + ".mda")
assert path.exists(temp_name + "_text.tar")
assert path.isfile(temp_name + "_text.tar")
Expand All @@ -189,24 +211,31 @@ def test_disf(trajectory, qvector_spherical_lattice):


@pytest.mark.parametrize(
"trajectory",
[short_traj, mdmc_traj, com_traj],
"traj_info",
[("short_traj", short_traj), ("mdmc_traj", mdmc_traj), ("com_traj", com_traj)],
)
def test_eisf(trajectory, qvector_spherical_lattice):
def test_eisf(traj_info, qvector_grid):
temp_name = tempfile.mktemp()
parameters = {}
parameters["atom_selection"] = None
parameters["atom_transmutation"] = None
parameters["frames"] = (0, 10, 1)
parameters["output_files"] = (temp_name, ("MDAFormat", "TextFormat"), "INFO")
parameters["q_vectors"] = qvector_spherical_lattice
parameters["q_vectors"] = qvector_grid
parameters["running_mode"] = ("single-core",)
parameters["trajectory"] = trajectory
parameters["trajectory"] = traj_info[1]
parameters["weights"] = "b_incoherent"
eisf = IJob.create("ElasticIncoherentStructureFactor")
eisf.run(parameters, status=True)
assert path.exists(temp_name + ".mda")
assert path.isfile(temp_name + ".mda")

result_file = os.path.join(result_dir, f"eisf_{traj_info[0]}.mda")
with h5py.File(temp_name + ".mda") as actual, h5py.File(result_file) as desired:
keys = [i for i in desired.keys() if "eisf" in i]
for key in keys:
np.testing.assert_array_almost_equal(actual[f"/{key}"], desired[f"/{key}"])

os.remove(temp_name + ".mda")
assert path.exists(temp_name + "_text.tar")
assert path.isfile(temp_name + "_text.tar")
Expand Down Expand Up @@ -252,7 +281,7 @@ def test_gdisf(traj_info):
os.remove(temp_name + ".log")


def test_ndtsf(disf, dcsf, qvector_spherical_lattice):
def test_ndtsf(disf, dcsf, qvector_grid):
temp_name = tempfile.mktemp()
parameters = {}
parameters["atom_selection"] = None
Expand Down
Binary file not shown.
Binary file not shown.
Binary file added MDANSE/Tests/UnitTests/Results/ccf_short_traj.mda
Binary file not shown.
Binary file added MDANSE/Tests/UnitTests/Results/dcsf_com_traj.mda
Binary file not shown.
Binary file added MDANSE/Tests/UnitTests/Results/dcsf_mdmc_traj.mda
Binary file not shown.
Binary file not shown.
Binary file added MDANSE/Tests/UnitTests/Results/disf_com_traj.mda
Binary file not shown.
Binary file added MDANSE/Tests/UnitTests/Results/disf_mdmc_traj.mda
Binary file not shown.
Binary file not shown.
Binary file added MDANSE/Tests/UnitTests/Results/eisf_com_traj.mda
Binary file not shown.
Binary file added MDANSE/Tests/UnitTests/Results/eisf_mdmc_traj.mda
Binary file not shown.
Binary file not shown.

0 comments on commit ebbc436

Please sign in to comment.