From ece2bcb9dff0d83cafa60cce1314ec4e59336065 Mon Sep 17 00:00:00 2001 From: Chi Cheng Date: Tue, 2 Apr 2024 15:16:09 +0100 Subject: [PATCH 1/8] fixed so that it uses velocity in DOS, temperature and vacf calculations with interpolation order 0 --- .../Framework/Configurators/InterpolationOrderConfigurator.py | 2 +- MDANSE/Src/MDANSE/Framework/Jobs/DensityOfStates.py | 3 +-- MDANSE/Src/MDANSE/Framework/Jobs/Temperature.py | 3 +-- .../MDANSE/Framework/Jobs/VelocityAutoCorrelationFunction.py | 3 +-- 4 files changed, 4 insertions(+), 7 deletions(-) diff --git a/MDANSE/Src/MDANSE/Framework/Configurators/InterpolationOrderConfigurator.py b/MDANSE/Src/MDANSE/Framework/Configurators/InterpolationOrderConfigurator.py index 32fdbd8cd8..86aee3ae21 100644 --- a/MDANSE/Src/MDANSE/Framework/Configurators/InterpolationOrderConfigurator.py +++ b/MDANSE/Src/MDANSE/Framework/Configurators/InterpolationOrderConfigurator.py @@ -52,7 +52,7 @@ def configure(self, value): :type value: str one of *'no interpolation'*,*'1st order'*,*'2nd order'*,*'3rd order'*,*'4th order'* or *'5th order'*. """ - if not value: + if value is None: value = self._default IntegerConfigurator.configure(self, value) diff --git a/MDANSE/Src/MDANSE/Framework/Jobs/DensityOfStates.py b/MDANSE/Src/MDANSE/Framework/Jobs/DensityOfStates.py index 2a5cb5ad24..96d6e1a791 100644 --- a/MDANSE/Src/MDANSE/Framework/Jobs/DensityOfStates.py +++ b/MDANSE/Src/MDANSE/Framework/Jobs/DensityOfStates.py @@ -166,8 +166,7 @@ def run_step(self, index): indexes = self.configuration["atom_selection"]["indexes"][index] if self.configuration["interpolation_order"]["value"] == 0: - series = trajectory.read_configuration_variable( - self.configuration["trajectory"]["instance"], + series = trajectory.read_configuration_trajectory( indexes[0], first=self.configuration["frames"]["first"], last=self.configuration["frames"]["last"] + 1, diff --git a/MDANSE/Src/MDANSE/Framework/Jobs/Temperature.py b/MDANSE/Src/MDANSE/Framework/Jobs/Temperature.py index 7c5894ea34..ff475e38c7 100644 --- a/MDANSE/Src/MDANSE/Framework/Jobs/Temperature.py +++ b/MDANSE/Src/MDANSE/Framework/Jobs/Temperature.py @@ -121,8 +121,7 @@ def run_step(self, index): trajectory = self.configuration["trajectory"]["instance"] if self.configuration["interpolation_order"]["value"] == 0: - series = trajectory.read_configuration_variable( - self.configuration["trajectory"]["instance"], + series = trajectory.read_configuration_trajectory( index, first=self.configuration["frames"]["first"], last=self.configuration["frames"]["last"] + 1, diff --git a/MDANSE/Src/MDANSE/Framework/Jobs/VelocityAutoCorrelationFunction.py b/MDANSE/Src/MDANSE/Framework/Jobs/VelocityAutoCorrelationFunction.py index 86f641fcca..f77a6a2470 100644 --- a/MDANSE/Src/MDANSE/Framework/Jobs/VelocityAutoCorrelationFunction.py +++ b/MDANSE/Src/MDANSE/Framework/Jobs/VelocityAutoCorrelationFunction.py @@ -152,8 +152,7 @@ def run_step(self, index): indexes = self.configuration["atom_selection"]["indexes"][index] if self.configuration["interpolation_order"]["value"] == 0: - series = trajectory.read_configuration_variable( - self.configuration["trajectory"]["instance"], + series = trajectory.read_configuration_trajectory( indexes[0], first=self.configuration["frames"]["first"], last=self.configuration["frames"]["last"] + 1, From ec1b87c493e6dc595e57d4723847748556f81a5c Mon Sep 17 00:00:00 2001 From: Chi Cheng Date: Tue, 2 Apr 2024 16:17:28 +0100 Subject: [PATCH 2/8] set qspinbox max value to 5 --- .../Src/MDANSE_GUI/InputWidgets/InterpolationOrderWidget.py | 1 + 1 file changed, 1 insertion(+) diff --git a/MDANSE_GUI/Src/MDANSE_GUI/InputWidgets/InterpolationOrderWidget.py b/MDANSE_GUI/Src/MDANSE_GUI/InputWidgets/InterpolationOrderWidget.py index b8720a8bdc..10aa8e01ee 100644 --- a/MDANSE_GUI/Src/MDANSE_GUI/InputWidgets/InterpolationOrderWidget.py +++ b/MDANSE_GUI/Src/MDANSE_GUI/InputWidgets/InterpolationOrderWidget.py @@ -37,6 +37,7 @@ def __init__(self, *args, **kwargs): source_object = kwargs.get("source_object", None) self._field = QSpinBox(self._base) + self._field.setMaximum(5) self._field.setValue(1) label = QLabel("Interpolation order", self._base) self.numerator = QLabel("st order") From 76a2b32e68d51901a31a7ac2d95850fbfd5e45ad Mon Sep 17 00:00:00 2001 From: Chi Cheng Date: Tue, 2 Apr 2024 16:37:41 +0100 Subject: [PATCH 3/8] updated GUI so that order=0 is only available for trajectories with velocity data. order=0 is the default when velocity data exists. --- .../MDANSE/MolecularDynamics/Trajectory.py | 24 ++++++++++++++++--- .../InputWidgets/InterpolationOrderWidget.py | 8 ++++++- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/MDANSE/Src/MDANSE/MolecularDynamics/Trajectory.py b/MDANSE/Src/MDANSE/MolecularDynamics/Trajectory.py index d7e110965f..122bb441d6 100644 --- a/MDANSE/Src/MDANSE/MolecularDynamics/Trajectory.py +++ b/MDANSE/Src/MDANSE/MolecularDynamics/Trajectory.py @@ -366,17 +366,35 @@ def read_configuration_trajectory( if last is None: last = len(self) - grp = self._h5_file["/configuration"] - - if variable not in grp: + if self.has_variable(variable): raise TrajectoryError( "The variable {} is not stored in the trajectory".format(variable) ) + grp = self._h5_file["/configuration"] variable = grp[variable][first:last:step, index, :].astype(np.float64) return variable + def has_variable(self, variable: str) -> bool: + """Check if the trajectory has a specific variable e.g. + velocities. + + Parameters + ---------- + variable : str + The variable to check the existence of. + + Returns + ------- + bool + True if variable exists. + """ + if variable not in self._h5_file["/configuration"]: + return False + else: + return True + @property def chemical_system(self): """Return the chemical system stored in the trajectory. diff --git a/MDANSE_GUI/Src/MDANSE_GUI/InputWidgets/InterpolationOrderWidget.py b/MDANSE_GUI/Src/MDANSE_GUI/InputWidgets/InterpolationOrderWidget.py index 10aa8e01ee..be125bc4f2 100644 --- a/MDANSE_GUI/Src/MDANSE_GUI/InputWidgets/InterpolationOrderWidget.py +++ b/MDANSE_GUI/Src/MDANSE_GUI/InputWidgets/InterpolationOrderWidget.py @@ -38,7 +38,13 @@ def __init__(self, *args, **kwargs): self._field = QSpinBox(self._base) self._field.setMaximum(5) - self._field.setValue(1) + configurator = self._configurator + trajectory = configurator._configurable[ + configurator._dependencies["trajectory"] + ]["instance"] + if not trajectory.has_variable("velocities"): + self._field.setMinimum(1) + self._field.setValue(1) label = QLabel("Interpolation order", self._base) self.numerator = QLabel("st order") From 45f646d905853a9b3c03435ee772df040cc74e67 Mon Sep 17 00:00:00 2001 From: Chi Cheng Date: Tue, 2 Apr 2024 16:40:20 +0100 Subject: [PATCH 4/8] fix --- MDANSE/Src/MDANSE/MolecularDynamics/Trajectory.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MDANSE/Src/MDANSE/MolecularDynamics/Trajectory.py b/MDANSE/Src/MDANSE/MolecularDynamics/Trajectory.py index 122bb441d6..1c724f1b43 100644 --- a/MDANSE/Src/MDANSE/MolecularDynamics/Trajectory.py +++ b/MDANSE/Src/MDANSE/MolecularDynamics/Trajectory.py @@ -366,7 +366,7 @@ def read_configuration_trajectory( if last is None: last = len(self) - if self.has_variable(variable): + if not self.has_variable(variable): raise TrajectoryError( "The variable {} is not stored in the trajectory".format(variable) ) From 80c15f66ce4f473c41de448dc5289c5ddea0e2f8 Mon Sep 17 00:00:00 2001 From: Chi Cheng Date: Tue, 2 Apr 2024 16:40:44 +0100 Subject: [PATCH 5/8] fix --- MDANSE/Src/MDANSE/MolecularDynamics/Trajectory.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MDANSE/Src/MDANSE/MolecularDynamics/Trajectory.py b/MDANSE/Src/MDANSE/MolecularDynamics/Trajectory.py index 1c724f1b43..087d7fd9db 100644 --- a/MDANSE/Src/MDANSE/MolecularDynamics/Trajectory.py +++ b/MDANSE/Src/MDANSE/MolecularDynamics/Trajectory.py @@ -390,7 +390,7 @@ def has_variable(self, variable: str) -> bool: bool True if variable exists. """ - if variable not in self._h5_file["/configuration"]: + if variable in self._h5_file["/configuration"]: return False else: return True From ca634429fb0320f065fe06e496cab2e2b2c0a98c Mon Sep 17 00:00:00 2001 From: Chi Cheng Date: Tue, 2 Apr 2024 16:44:09 +0100 Subject: [PATCH 6/8] fix --- MDANSE/Src/MDANSE/MolecularDynamics/Trajectory.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/MDANSE/Src/MDANSE/MolecularDynamics/Trajectory.py b/MDANSE/Src/MDANSE/MolecularDynamics/Trajectory.py index 087d7fd9db..2e81a9d236 100644 --- a/MDANSE/Src/MDANSE/MolecularDynamics/Trajectory.py +++ b/MDANSE/Src/MDANSE/MolecularDynamics/Trajectory.py @@ -391,9 +391,9 @@ def has_variable(self, variable: str) -> bool: True if variable exists. """ if variable in self._h5_file["/configuration"]: - return False - else: return True + else: + return False @property def chemical_system(self): From 575032a5a19fe422a4aaf14eb7ad1cf5b86e3453 Mon Sep 17 00:00:00 2001 From: Chi Cheng Date: Tue, 2 Apr 2024 16:50:23 +0100 Subject: [PATCH 7/8] updated interpolation order configurator --- .../Framework/Configurators/InterpolationOrderConfigurator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MDANSE/Src/MDANSE/Framework/Configurators/InterpolationOrderConfigurator.py b/MDANSE/Src/MDANSE/Framework/Configurators/InterpolationOrderConfigurator.py index 86aee3ae21..cc92b9866b 100644 --- a/MDANSE/Src/MDANSE/Framework/Configurators/InterpolationOrderConfigurator.py +++ b/MDANSE/Src/MDANSE/Framework/Configurators/InterpolationOrderConfigurator.py @@ -52,7 +52,7 @@ def configure(self, value): :type value: str one of *'no interpolation'*,*'1st order'*,*'2nd order'*,*'3rd order'*,*'4th order'* or *'5th order'*. """ - if value is None: + if value is None or value == "": value = self._default IntegerConfigurator.configure(self, value) From b94eff35ba9fc3a502c1b811d52763ecf6992c40 Mon Sep 17 00:00:00 2001 From: Chi Cheng Date: Thu, 4 Apr 2024 12:24:59 +0100 Subject: [PATCH 8/8] updated InterpolationOrderConfigurator --- .../Configurators/InterpolationOrderConfigurator.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/MDANSE/Src/MDANSE/Framework/Configurators/InterpolationOrderConfigurator.py b/MDANSE/Src/MDANSE/Framework/Configurators/InterpolationOrderConfigurator.py index cc92b9866b..e9a070dc98 100644 --- a/MDANSE/Src/MDANSE/Framework/Configurators/InterpolationOrderConfigurator.py +++ b/MDANSE/Src/MDANSE/Framework/Configurators/InterpolationOrderConfigurator.py @@ -66,6 +66,12 @@ def configure(self, value): self["variable"] = "velocities" + elif value > 5: + self.error_status = ( + f"Use an interpolation order greater than 5 is not implemented." + ) + return + else: self["variable"] = "coordinates" self.error_status = "OK"