Source code for pyretis.forcefield.potential
# -*- coding: utf-8 -*-
# Copyright (c) 2023, PyRETIS Development Team.
# Distributed under the LGPLv2.1+ License. See LICENSE for more info.
"""Define the class for a generic potential function.
This module defines the generic class for potential functions.
This class is sub-classed in all potential functions.
Important classes defined here
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PotentialFunction (:py:class:`.PotentialFunction`)
A class for representing generic potential functions.
"""
import logging
logger = logging.getLogger(__name__) # pylint: disable=invalid-name
logger.addHandler(logging.NullHandler())
__all__ = ['PotentialFunction']
[docs]class PotentialFunction:
"""Base class for a generic potential function.
Generic class for potential functions.
Attributes
----------
desc : string
Short description of the potential.
dim : int
Represents the spatial dimensionality of the potential.
params : dict
The parameters for the potential. This dict defines,
on initiation, the parameters the potential will handle
and store.
"""
[docs] def __init__(self, dim=1, desc=''):
"""Initialise the potential.
Parameters
----------
dim : int, optional
Represents the dimensionality.
desc : string, optional
Description of the potential function. Used to print out
information about the potential.
"""
self.dim = dim
self.desc = desc
self.params = {}
[docs] def set_parameters(self, parameters):
"""Update all parameters. Input is assumed to be a dict."""
for key in parameters:
if key in self.params:
self.params[key] = parameters[key]
else:
msg = 'Could not find "{}" in parameters. Ignoring!'
msg = msg.format(key)
logger.warning(msg)
self.check_parameters()
[docs] def check_parameters(self):
"""Check the consistency of the parameters.
Returns
-------
out : boolean
True if the check(s) pass.
"""
if not self.params:
logger.warning('No parameters are set for the potential')
return False
return True
[docs] def __str__(self):
"""Return the string description of the potential."""
msg = [f'Potential: {self.desc}']
strinfo = '{}: {}'
for key in sorted(self.params):
msg.append(strinfo.format(key, self.params[key]))
return '\n'.join(msg)