Commit 7f234272 by maarten

added rama-angles application

git-svn-id: svn+ssh://gitlab/srv/svn-repos/pdb-redo/trunk@339 a1961a4f-ab94-4bcc-80e8-33b5a54de466
parent 4f2427e9
......@@ -173,12 +173,13 @@ typedef std::vector<Atom> AtomView;
class Residue
{
public:
Residue();
Residue(const Residue& rhs);
Residue& operator=(const Residue& rhs);
Residue() = default;
Residue(const Residue& rhs) = default;
Residue& operator=(const Residue& rhs) = default;
Residue(const Structure& structure)
: mStructure(&structure) {}
Residue(const Structure& structure, const std::string& compoundID,
const std::string& asymID, int seqID = 0,
const std::string& altID = "")
......@@ -195,6 +196,9 @@ class Residue
int seqID() const { return mSeqID; }
const std::string& altID() const { return mAltID; }
int authSeqID() const;
std::string authInsCode() const;
// return a human readable PDB-like auth id (chain+seqnr+iCode)
std::string authID() const;
......@@ -212,9 +216,9 @@ class Residue
protected:
const Structure* mStructure;
const Structure* mStructure = nullptr;
std::string mCompoundID, mAsymID, mAltID;
int mSeqID;
int mSeqID = 0;
mutable AtomView mAtoms;
};
......@@ -238,6 +242,8 @@ class Monomer : public Residue
float psi() const;
float alpha() const;
float kappa() const;
bool isCis() const;
Atom CAlpha() const { return atomByID("CA"); }
Atom C() const { return atomByID("C"); }
......@@ -265,8 +271,8 @@ class Polymer
public:
Polymer(const Structure& s, const std::string& asymID);
Polymer(const Structure& s, const std::string& entityID, const std::string& asymID);
Polymer(const Polymer&);
Polymer& operator=(const Polymer&);
Polymer(const Polymer&) = default;
Polymer& operator=(const Polymer&) = default;
struct iterator : public std::iterator<std::random_access_iterator_tag, Monomer>
{
......@@ -322,6 +328,8 @@ class Polymer
std::string asymID() const { return mAsymID; }
std::string entityID() const { return mEntityID; }
std::string chainID() const;
int Distance(const Monomer& a, const Monomer& b) const;
private:
......
......@@ -587,31 +587,40 @@ float Atom::radius() const
// --------------------------------------------------------------------
// residue
Residue::Residue()
: mStructure(nullptr), mSeqID(0)
string Residue::authInsCode() const
{
}
assert(mStructure);
Residue::Residue(const Residue& rhs)
: mStructure(rhs.mStructure)
, mCompoundID(rhs.mCompoundID), mAsymID(rhs.mAsymID), mAltID(rhs.mAltID), mSeqID(rhs.mSeqID)
{
string result;
try
{
tie(ignore, ignore, result) = mStructure->MapLabelToAuth(mAsymID, mSeqID);
ba::trim(result);
}
catch (...)
{
}
return result;
}
Residue& Residue::operator=(const Residue& rhs)
int Residue::authSeqID() const
{
if (this != &rhs)
assert(mStructure);
int result = 0;
try
{
tie(ignore, result, ignore) = mStructure->MapLabelToAuth(mAsymID, mSeqID);
}
catch (...)
{
mStructure = rhs.mStructure;
mCompoundID = rhs.mCompoundID;
mAsymID = rhs.mAsymID;
mSeqID = rhs.mSeqID;
mAltID = rhs.mAltID;
mAtoms = rhs.mAtoms;
}
return *this;
return result;
}
const Compound& Residue::compound() const
......@@ -844,6 +853,20 @@ float Monomer::kappa() const
return result;
}
bool Monomer::isCis() const
{
bool result = false;
if (mIndex + 1 < mPolymer->size())
{
Monomer next = mPolymer->operator[](mIndex + 1);
result = Monomer::isCis(*this, next);
}
return result;
}
bool Monomer::areBonded(const Monomer& a, const Monomer& b, float errorMargin)
{
bool result = false;
......@@ -928,18 +951,6 @@ Polymer::iterator::iterator(const iterator& rhs)
{
}
Polymer::iterator& Polymer::iterator::operator=(const iterator& rhs)
{
if (this != &rhs)
{
mPolymer = rhs.mPolymer;
mIndex = rhs.mIndex;
mCurrent = rhs.mCurrent;
}
return *this;
}
Polymer::iterator& Polymer::iterator::operator++()
{
auto& polySeq = mPolymer->mPolySeq;
......@@ -960,12 +971,6 @@ Polymer::iterator& Polymer::iterator::operator++()
return *this;
}
Polymer::Polymer(const Polymer& rhs)
: mStructure(rhs.mStructure), mEntityID(rhs.mEntityID), mAsymID(rhs.mAsymID), mPolySeq(rhs.mPolySeq)
{
}
Polymer::Polymer(const Structure& s, const string& asymID)
: mStructure(const_cast<Structure*>(&s)), mAsymID(asymID)
, mPolySeq(s.category("pdbx_poly_seq_scheme").find(cif::Key("asym_id") == mAsymID))
......@@ -995,6 +1000,11 @@ Polymer::iterator Polymer::end() const
return iterator(*this, mPolySeq.size());
}
string Polymer::chainID() const
{
return mPolySeq.front()["pdb_strand_id"].as<string>();
}
Monomer Polymer::getBySeqID(int seqID) const
{
for (auto m: *this)
......
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