diff --git a/MDANSE/Src/MDANSE/Framework/Configurators/InterpolationOrderConfigurator.py b/MDANSE/Src/MDANSE/Framework/Configurators/InterpolationOrderConfigurator.py index 32fdbd8cd8..e9a070dc98 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 or value == "": value = self._default IntegerConfigurator.configure(self, value) @@ -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" 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, diff --git a/MDANSE/Src/MDANSE/MolecularDynamics/Trajectory.py b/MDANSE/Src/MDANSE/MolecularDynamics/Trajectory.py index d7e110965f..2e81a9d236 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 not 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 in self._h5_file["/configuration"]: + return True + else: + return False + @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 b8720a8bdc..be125bc4f2 100644 --- a/MDANSE_GUI/Src/MDANSE_GUI/InputWidgets/InterpolationOrderWidget.py +++ b/MDANSE_GUI/Src/MDANSE_GUI/InputWidgets/InterpolationOrderWidget.py @@ -37,7 +37,14 @@ def __init__(self, *args, **kwargs): source_object = kwargs.get("source_object", None) self._field = QSpinBox(self._base) - self._field.setValue(1) + self._field.setMaximum(5) + 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")