6#ifndef GEMMI_SMALL_HPP_
7#define GEMMI_SMALL_HPP_
41 s += std::to_string(std::abs(
charge));
42 s +=
charge > 0 ?
'+' :
'-';
71 if (at.symbol == symbol)
78 std::bitset<(size_t)
El::END> table;
80 table.set((
size_t)atom.element.elem);
105 int len = label.size() > 1 && std::isalpha(label[1]) ? 2 : 1;
106 dest->element = len == 1 ? impl::find_single_letter_element(label[0] & ~0x20)
108 if (
dest->element !=
El::X && (label.back() ==
'+' || label.back() ==
'-')) {
109 int sign = label.back() ==
'+' ? 1 : -1;
110 if (label.size() - len == 1)
112 else if (label.size() - len == 2 && label[len] >=
'0' && label[len] <=
'9')
113 dest->charge = sign * (label[len] -
'0');
117inline std::vector<SmallStructure::Site>
120 std::vector<Site> all;
122 size_t start = all.size();
126 if (std::any_of(all.begin() + start, all.end(), [&](
const Site& other) {
127 return cell.distance_sq(fpos, other.fract) < sq(SPECIAL_POS_TOL);
131 all.back().fract =
fpos;
void vector_remove_if(std::vector< T > &v, F &&condition)
El find_element(const char *symbol)
const SpaceGroup * find_spacegroup_by_name(std::string name, double alpha=0., double gamma=0.) noexcept
void split_element_and_charge(const std::string &label, T *dest)
const char * name() const
Coordinates in Angstroms - orthogonal (Cartesian) coordinates.
Position orth(const gemmi::UnitCell &cell_) const
std::string element_and_charge_symbol() const
std::string spacegroup_hm
std::vector< Site > get_all_unit_cell_sites() const
std::vector< Site > sites
std::vector< AtomType > atom_types
void change_occupancies_to_crystallographic(double max_dist=0.4)
const SpaceGroup * find_spacegroup() const
const AtomType * get_atom_type(const std::string &symbol) const
std::bitset<(size_t) El::END > present_elements() const
Position orthogonalize(const Fractional &f) const
std::vector< FTransform > images
void set_cell_images_from_spacegroup(const SpaceGroup *sg)
int is_special_position(const Fractional &fpos, double max_dist) const
Counts nearby symmetry mates (0 = none, 3 = 4-fold axis, etc).