Commit 5e5e5c21 by Maarten L. Hekkelman

sugar support, start

parent 299e2705
......@@ -287,7 +287,7 @@ namespace detail
void swap(ItemReference& b);
template<typename T>
template<typename T = std::string>
T as() const
{
return item_value_as<T>::convert(*this);
......@@ -1332,6 +1332,9 @@ class conditional_iterator_proxy
iterator end() const;
bool empty() const;
explicit operator bool() const { return not empty(); }
size_t size() const { return std::distance(begin(), end()); }
RowType front() { return *begin(); }
......
......@@ -242,6 +242,10 @@ class Residue
bool isEntity() const;
bool isWater() const { return mCompoundID == "HOH"; }
bool isSugar() const;
bool isPyranose() const;
bool isFuranose() const;
const Structure& structure() const { return *mStructure; }
......
......@@ -4268,7 +4268,7 @@ void PDBFileParser::ConstructEntities()
{ "polymer_flag", isPolymer ? "Y" : "N" },
{ "occupancy_flag", 1 },
{ "PDB_model_num", unobs.modelNr ? unobs.modelNr : 1 },
{ "auth_asym_id", unobs.chain },
{ "auth_asym_id", std::string{ unobs.chain } },
{ "auth_comp_id", unobs.res },
{ "auth_seq_id", unobs.seq },
{ "PDB_ins_code", unobs.iCode == ' ' ? "" : std::string{ unobs.iCode } },
......@@ -4286,7 +4286,7 @@ void PDBFileParser::ConstructEntities()
{ "polymer_flag", isPolymer ? "Y" : "N" },
{ "occupancy_flag", 1 },
{ "PDB_model_num", unobs.modelNr ? unobs.modelNr : 1 },
{ "auth_asym_id", unobs.chain },
{ "auth_asym_id", std::string { unobs.chain } },
{ "auth_comp_id", unobs.res },
{ "auth_seq_id", unobs.seq },
{ "PDB_ins_code", unobs.iCode == ' ' ? "" : std::string{ unobs.iCode } },
......@@ -4296,7 +4296,6 @@ void PDBFileParser::ConstructEntities()
{ "label_seq_id", seqNr > 0 ? std::to_string(seqNr) : "" },
{ "label_atom_id", atom }
});
}
}
}
......
......@@ -946,6 +946,21 @@ bool Residue::isEntity() const
return a1.size() == a2.size();
}
bool Residue::isSugar() const
{
return compound().isSugar();
}
bool Residue::isPyranose() const
{
return cif::iequals(compound().group(), "pyranose");
}
bool Residue::isFuranose() const
{
return cif::iequals(compound().group(), "furanose");
}
std::string Residue::authID() const
{
std::string result;
......@@ -1857,21 +1872,19 @@ std::tuple<char,int,char> Structure::MapLabelToAuth(
if (not found)
{
for (auto r: db["pdbx_nonpoly_scheme"].find(
cif::Key("asym_id") == asymID and
cif::Key("seq_id") == seqID))
auto r = db["pdbx_nonpoly_scheme"].find(cif::Key("asym_id") == asymID);
if (r.size() == 1)
{
std::string pdb_strand_id, pdb_ins_code;
int pdb_seq_num;
cif::tie(pdb_strand_id, pdb_seq_num, pdb_ins_code) =
r.get("pdb_strand_id", "pdb_seq_num", "pdb_ins_code");
r.front().get("pdb_strand_id", "pdb_seq_num", "pdb_ins_code");
result = std::make_tuple(pdb_strand_id.front(), pdb_seq_num,
pdb_ins_code.empty() ? ' ' : pdb_ins_code.front());
found = true;
break;
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment