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