5#ifndef GEMMI_LINKHUNT_HPP_
6#define GEMMI_LINKHUNT_HPP_
31 std::multimap<std::string, const ChemLink*>
links;
34 std::map<ChemComp::Group, std::map<std::string, std::vector<std::string>>> aliases;
38 for (
const std::pair<std::string, std::string>&
r : a.related) {
40 aliases[
gr][
r.second].push_back(
r.first);
45 if (
link.rt.bonds.empty())
47 if (
link.rt.bonds.size() > 1)
48 fprintf(
stderr,
"Note: considering only the first bond in %s\n",
50 if (
link.side1.comp.empty() &&
link.side2.comp.empty())
62 std::vector<std::string> *
names1 =
nullptr, *
names2 =
nullptr;
63 if (
link.side1.comp.empty()) {
64 auto i = aliases.find(
link.side1.group);
65 if (
i != aliases.end()) {
66 auto j =
i->second.find(
bond.id1.atom);
67 if (
j !=
i->second.end())
71 if (
link.side2.comp.empty()) {
72 auto i = aliases.find(
link.side2.group);
73 if (
i != aliases.end()) {
74 auto j =
i->second.find(
bond.id2.atom);
75 if (
j !=
i->second.end())
80 for (
const std::string&
n1 : *
names1)
81 for (
const std::string&
n2 : *
names2)
97 Model& model =
st.first_model();
106 int image_idx,
double dist_sq) {
114 for (
auto iter = range.first;
iter != range.second; ++
iter) {
137 order1 ? aliasing1 : aliasing2,
138 order1 ? aliasing2 : aliasing1);
172 match.conn =
st.find_connection_by_cra(match.cra1, match.cra2);
bool atom_match_with_alias(const std::string &atom_id, const std::string &atom, const ChemComp::Aliasing *aliasing)
constexpr float sq(float x)
static bool is_nucleotide_group(Group g)
Check if the group is DNA/RNA.
const ChemLink * chem_link
void index_chem_links(const MonLib &monlib, bool use_alias=true)
std::multimap< std::string, const ChemLink * > links
const MonLib * monlib_ptr
std::vector< Match > find_possible_links(Structure &st, double bond_margin, double radius_margin, ContactSearch::Ignore ignore)
static std::string lexicographic_str(const std::string &name1, const std::string &name2)