Source code for atsim.potentials.config._pair_potential_builder
import logging
from .._potential import Potential
from ._potential_form_builder import Potential_Form_Builder
from ._potential_form_builder import UnknownModifierException, UnknownPotentialFormException
from ._common import ConfigurationException, Unknown_Modifier_Exception
[docs]class Pair_Potentials_From_Tuples_Builder(object):
"""Converts PairPotentialTuple instances into PairPotential objects"""
def __init__(self, potential_tuples, potential_form_registry, modifier_registry, log_section_name = "Pair"):
"""Create object which builds pair potential instances from tuples.
Args:
potential_tuples (list): List of PairPotentialTuple instances
potential_form_registry (Potential_Form_Registry): Available potential forms
modifier_registry (Modifier_Registry): Available potential modifiers
log_section_name (str, optional): Configuration file section name used for logging. Defaults to "Pair".
"""
self.potential_tuples = potential_tuples
self.potential_form_registry = potential_form_registry
self.modifier_registry = modifier_registry
self.log_section_name = log_section_name
self._potlist = None
def _create_potential(self, potrow, mrpfb):
logger = logging.getLogger(__name__).getChild("Pair_Potentials_From_Tuples_Builder._create_potential")
logger.debug("Creating potential object for potential row from [{}]: {}".format(self.log_section_name, potrow))
pot_func = mrpfb.create_potential_function(potrow.potential_form_instance)
# Make the potential object
potobj = Potential(potrow.species.species_a, potrow.species.species_b, pot_func)
return potobj
def _init_potentials(self):
pots = []
pfb = Potential_Form_Builder(self.potential_form_registry, self.modifier_registry)
for potrow in self.potential_tuples:
try:
pot = self._create_potential(potrow, pfb)
pots.append(pot)
except UnknownModifierException as ume:
msg = "Unknown modifier '{modifier_name}' for {species_a}-{species_b} in [{section_name}] section".format(
modifier_name = ume.args[0],
species_a = potrow.species.species_a,
species_b = potrow.species.species_b,
section_name = self.log_section_name)
raise Unknown_Modifier_Exception(msg)
except UnknownPotentialFormException as upe:
msg = "Unknown potential form '{potform_name}' for {species_a}-{species_b} in [{section_name}] section".format(
potform_name = upe.args[0],
species_a = potrow.species.species_a,
species_b = potrow.species.species_b,
section_name = self.log_section_name)
raise ConfigurationException(msg)
except ConfigurationException as ce:
msg = "Problem defining {species_a}-{species_b} in [{section_name}] section. {msg}".format(
msg = ce,
species_a = potrow.species.species_a,
species_b = potrow.species.species_b,
section_name = self.log_section_name)
raise ConfigurationException(msg)
return pots
@property
[docs] def potentials(self):
if self._potlist is None:
self._potlist = self._init_potentials()
return self._potlist
[docs]class Pair_Potential_Builder(object):
"""Uses the output of ConfigParser.pair and .potentialforms properties to build
Potential objects"""
def __init__(self, cp, potential_form_registry, modifier_registry):
""":param cp: atsim.potentials.config.ConfigParser instance.
:param potential_form_register: Potential_Form_Registry
:param modifier_register: Modifier_Registry"""
self._tuple_pot_builder = Pair_Potentials_From_Tuples_Builder(cp.pair, potential_form_registry, modifier_registry, "Pair")
@property
[docs] def potentials(self):
return self._tuple_pot_builder.potentials