Source code for physical_validation.data.unit_data

###########################################################################
#                                                                         #
#    physical_validation,                                                 #
#    a python package to test the physical validity of MD results         #
#                                                                         #
#    Written by Pascal T. Merz <pascal.merz@me.com>                       #
#               Michael R. Shirts <michael.shirts@colorado.edu>           #
#                                                                         #
#    Copyright (c) 2017-2021 University of Colorado Boulder               #
#              (c) 2012      The University of Virginia                   #
#                                                                         #
###########################################################################
r"""
Data structures carrying simulation data.
"""
from typing import Optional


[docs]class UnitData(object): r"""UnitData: Information about the units used The information about units consists of different parts: * The name of the units (energy_str, length_str, volume_str, temperature_str, pressure_str, time_str), * the value of kB in the used energy units, and * the conversion factor to GROMACS units (kJ/mol, nm, nm^3, K, bar, ps). The names are only used for output (console printing and plotting), and are optional. The conversion factors and kB are, on the other hand, used in computations and need to be given. """ def __init__( self, kb: float, energy_conversion: float, length_conversion: float, volume_conversion: float, temperature_conversion: float, pressure_conversion: float, time_conversion: float, energy_str: str = "ENE", length_str: str = "LEN", volume_str: str = "VOL", temperature_str: str = "TEMP", pressure_str: str = "PRESS", time_str: str = "TIME", ): self.__kb = float(kb) self.__energy_str = str(energy_str) self.__energy_conversion = float(energy_conversion) self.__length_str = str(length_str) self.__length_conversion = float(length_conversion) self.__volume_str = str(volume_str) self.__volume_conversion = float(volume_conversion) self.__temperature_str = str(temperature_str) self.__temperature_conversion = float(temperature_conversion) self.__pressure_str = str(pressure_str) self.__pressure_conversion = float(pressure_conversion) self.__time_str = str(time_str) self.__time_conversion = float(time_conversion) @staticmethod def __units(): from . import GromacsParser, LammpsParser return { "GROMACS": GromacsParser.units(), "LAMMPS real": LammpsParser.units("real"), }
[docs] @classmethod def units(cls, name: Optional[str] = None): if name is None: return cls.__units().keys() if name in cls.__units(): return cls.__units()[name] else: raise KeyError("Name " + name + " does not match a registered unit type.")
def __eq__(self, other) -> bool: if type(other) is not type(self): return False return ( self.kb == other.kb and self.energy_conversion == other.energy_conversion and self.length_conversion == other.length_conversion and self.volume_conversion == other.volume_conversion and self.temperature_conversion == other.temperature_conversion and self.pressure_conversion == other.pressure_conversion and self.time_conversion == other.time_conversion ) @property def kb(self) -> float: """float: The value of the Boltzmann constant""" return self.__kb @property def energy_str(self) -> str: """str: Energy unit""" return self.__energy_str @property def length_str(self) -> str: """str: Length unit""" return self.__length_str @property def volume_str(self) -> str: """str: Volume unit""" return self.__volume_str @property def temperature_str(self) -> str: """str: Temperature unit""" return self.__temperature_str @property def pressure_str(self) -> str: """str: Pressure unit""" return self.__pressure_str @property def time_str(self) -> str: """str: Time unit""" return self.__time_str @property def energy_conversion(self) -> float: """float: Energy conversion factor, 1 energy_unit = energy_conversion * kJ/mol""" return self.__energy_conversion @property def length_conversion(self) -> float: """float: Length conversion factor, 1 length_unit = length_conversion * nm""" return self.__length_conversion @property def volume_conversion(self) -> float: """float: Volume conversion factor, 1 volume_unit = volume_conversion * nm^3""" return self.__volume_conversion @property def temperature_conversion(self) -> float: """float: Temperature conversion factor, 1 temperature_unit = temperature_conversion * K""" return self.__temperature_conversion @property def pressure_conversion(self) -> float: """float: Pressure conversion factor, 1 pressure_unit = pressure_conversion * bar""" return self.__pressure_conversion @property def time_conversion(self) -> float: """float: Time conversion factor, 1 time_unit = time_conversion * ps""" return self.__time_conversion