From 94956b2dba2831cc38c840c2f4aa35643b1216a2 Mon Sep 17 00:00:00 2001 From: Maciej Bartkowiak Date: Mon, 24 Feb 2025 17:38:16 +0000 Subject: [PATCH] Update DCSF results for changing unit cell --- .../CorrelationFramesConfigurator.py | 1 + .../UnitTests/Analysis/test_scattering.py | 32 +++++++++++++----- .../UnitTests/Results/dcsf_short_traj.mda | Bin 35104 -> 45168 bytes 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/MDANSE/Src/MDANSE/Framework/Configurators/CorrelationFramesConfigurator.py b/MDANSE/Src/MDANSE/Framework/Configurators/CorrelationFramesConfigurator.py index bc341933d..9cb7e337c 100644 --- a/MDANSE/Src/MDANSE/Framework/Configurators/CorrelationFramesConfigurator.py +++ b/MDANSE/Src/MDANSE/Framework/Configurators/CorrelationFramesConfigurator.py @@ -38,6 +38,7 @@ def configure(self, value: tuple[int, int, int, int]): first, last, step, c_frames = value super().configure((first, last, step)) + self._original_input = value if c_frames > self["n_frames"]: self.error_status = ( diff --git a/MDANSE/Tests/UnitTests/Analysis/test_scattering.py b/MDANSE/Tests/UnitTests/Analysis/test_scattering.py index dad03172d..3fc7b92e4 100644 --- a/MDANSE/Tests/UnitTests/Analysis/test_scattering.py +++ b/MDANSE/Tests/UnitTests/Analysis/test_scattering.py @@ -114,10 +114,18 @@ def test_dcsf(traj_info, qvector_grid): if any(key.startswith(j) for j in ["f(q,t)", "s(q,f)"]) ] for key in keys: - np.testing.assert_array_almost_equal( - actual[f"/{key}"] * actual[f"/{key}"].attrs["scaling_factor"], - desired[f"/{key}"], - ) + try: + scaling_factor = desired[f"/{key}"].attrs["scaling_factor"] + except KeyError: + np.testing.assert_array_almost_equal( + actual[f"/{key}"] * actual[f"/{key}"].attrs["scaling_factor"], + desired[f"/{key}"], + ) + else: + np.testing.assert_array_almost_equal( + actual[f"/{key}"] * actual[f"/{key}"].attrs["scaling_factor"], + desired[f"/{key}"] * scaling_factor, + ) os.remove(temp_name + ".mda") assert path.exists(temp_name + "_text.tar") @@ -215,10 +223,18 @@ def test_disf(traj_info, qvector_grid): 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}"] * actual[f"/{key}"].attrs["scaling_factor"], - desired[f"/{key}"], - ) + try: + scaling_factor = desired[f"/{key}"].attrs["scaling_factor"] + except KeyError: + np.testing.assert_array_almost_equal( + actual[f"/{key}"] * actual[f"/{key}"].attrs["scaling_factor"], + desired[f"/{key}"], + ) + else: + np.testing.assert_array_almost_equal( + actual[f"/{key}"] * actual[f"/{key}"].attrs["scaling_factor"], + desired[f"/{key}"] * scaling_factor, + ) os.remove(temp_name + ".mda") assert path.exists(temp_name + "_text.tar") diff --git a/MDANSE/Tests/UnitTests/Results/dcsf_short_traj.mda b/MDANSE/Tests/UnitTests/Results/dcsf_short_traj.mda index 3a739ce3620e95407e546be32501f5e0a73dd2cc..60a720142687f745007c2cb446dcf052947b78fa 100644 GIT binary patch literal 45168 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 HH~#+tYH74u literal 35104 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 TsjBFlM?0}R1>=PO7Tf