Source code for hoobas.CGBead

#coding: utf-8
import warnings
import numpy as np
from typing import Union
from hoobas.Quaternion import Quat


[docs]class Bead(object): """ This is a particle (atom or CGbead) """ ret_prop_list = ['mass', 'position', 'body', 'image', 'charge', 'diameter', 'orientation', 'moment_inertia'] __slots__ = ['type', 'mass', '_position', 'body', 'residue', 'image', 'charge', 'diameter', 'orientation', 'moment_inertia'] def __init__(self, position: np.ndarray = np.array([0., 0., 0.]), beadtype: str = 'notype', mass: float = 1.0, body: int = -1, image: Union[None, np.ndarray] = None, charge: float = 0.0, diameter: float = 0.0, quaternion: Union[None, np.ndarray, Quat] = None, moment_inertia: Union[None, np.ndarray] = None, residue: Union[None, str] = None): self.type = beadtype self.mass = mass self._position = np.array(position, dtype=np.single) self.body = body self.residue = residue if image is None: self.image = np.array([0, 0, 0], dtype=np.int32) else: self.image = np.array(image, dtype=np.int32) self.charge = charge self.diameter = diameter if quaternion is None: self.orientation = np.array([1.0, 0.0, 0.0, 0.0], dtype=np.single) else: try: self.orientation = quaternion.q_w_ijk except AttributeError: # In case whatever is passed doesnt support q_w_ijk; warnings.warn( 'the quaternion passed doesnt support q_w_ijk; errors may be encountered while printing XML', UserWarning) self.orientation = quaternion if moment_inertia is None: self.moment_inertia = np.array([0.0, 0.0, 0.0], dtype=np.single) else: self.moment_inertia = np.array(moment_inertia, dtype=np.single) @property def beadtype(self) -> str: return self.type @beadtype.setter def beadtype(self, val: str) -> None: self.type = str(val) @property def position(self) -> np.ndarray: return self._position @position.setter def position(self, value: np.ndarray) -> None: self._position[:] = value[:] # iterable for snapshot feed def __iter__(self): for prop in Bead.ret_prop_list: yield (prop, getattr(self, prop)) def change_length_unit(self, multiplier: float) -> None: self.position *= multiplier self.diameter *= multiplier self.charge *= multiplier**0.5 self.moment_inertia *= multiplier**2.0 def change_mass_unit(self, multiplier: float) -> None: self.mass *= multiplier self.moment_inertia *= multiplier def change_energy_unit(self, multiplier: float) -> None: self.charge *= multiplier**0.5 def change_units(self, m_length: float, m_energy: float, m_mass: float) -> None: self.change_mass_unit(m_mass) self.change_energy_unit(m_energy) self.change_length_unit(m_length) def __str__(self): return self.beadtype