def is_bonded_to(self, other_atom, n_vdw_radii=1.2, default_vdw_radius=2.0*Angstroms): #TODO deal with units dist = magnitude(self.xyz - other_atom.xyz) vdw_me = self.element.vdw_radius if vdw_me is None: vdw_me = default_vdw_radius vdw_me = strip_units(vdw_me, convert_to=self.cartesian_units, assume_units=DistanceUnit.default) vdw_other = self.element.vdw_radius if vdw_other is None: vdw_other = default_vdw_radius vdw_other = strip_units(vdw_other, convert_to=self.cartesian_units, assume_units=DistanceUnit.default) return dist < (vdw_me * n_vdw_radii/2 + vdw_other * n_vdw_radii/2)
def _is_valid_key_for(self, key, item): if key is item: return True keysyms = tuple(a.full_symbol for a in key) itsyms = tuple(a.full_symbol for a in item) if keysyms != itsyms: return False kvals = strip_units(self.key_representation.values_for_molecule(key), DistanceUnit.default, assume_units=key.cartesian_units) itvals = strip_units(self.key_representation.values_for_molecule(item), DistanceUnit.default, assume_units=item.cartesian_units) cutoff = 10**(-self.equality_digits) return np.all(abs(kvals - itvals) < abs(cutoff * kvals))
def _is_valid_key_for(self, key, item): if key is item: return True keysyms = tuple(a.full_symbol for a in key) itsyms = tuple(a.full_symbol for a in item) if keysyms != itsyms: return False kvals = strip_units(self.key_representation.values_for_molecule(key), DistanceUnit.default, assume_units=key.cartesian_units) itvals = strip_units(self.key_representation.values_for_molecule(item), DistanceUnit.default, assume_units=item.cartesian_units) cutoff = 10**(-self.equality_digits) return np.all(abs(kvals - itvals) < abs(cutoff*kvals))
def _key_chain_str(self, item): itsyms = tuple(a.full_symbol for a in item) items = self._heads[itsyms] itvals = strip_units(self.key_representation.values_for_molecule(item), DistanceUnit.default, assume_units=item.cartesian_units) itvals = [i * self._hash_mult for i in itvals] return self._r_key_chain_str(items, itvals, "")
def _get_possibilities(self, item, create=True): itsyms = tuple(a.full_symbol for a in item) items = self._heads[itsyms] itvals = strip_units(self.key_representation.values_for_molecule(item), DistanceUnit.default, assume_units=item.cartesian_units) itvals = [i * self._hash_mult for i in itvals] return self._r_get_possibilities(items, itvals, create)
def is_bonded_to(self, other_atom, n_vdw_radii=1.2, default_vdw_radius=2.0 * Angstroms): #TODO deal with units dist = magnitude(self.xyz - other_atom.xyz) vdw_me = self.element.vdw_radius if vdw_me is None: vdw_me = default_vdw_radius vdw_me = strip_units(vdw_me, convert_to=self.cartesian_units, assume_units=DistanceUnit.default) vdw_other = self.element.vdw_radius if vdw_other is None: vdw_other = default_vdw_radius vdw_other = strip_units(vdw_other, convert_to=self.cartesian_units, assume_units=DistanceUnit.default) return dist < (vdw_me * n_vdw_radii / 2 + vdw_other * n_vdw_radii / 2)