Esempio n. 1
0
 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)
Esempio n. 2
0
 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))
Esempio n. 3
0
 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))
Esempio n. 4
0
 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, "")
Esempio n. 5
0
 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)
Esempio n. 6
0
 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, "")
Esempio n. 7
0
 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)
Esempio n. 8
0
 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)