Commit 00742f65 by maarten

werkende DSSP

git-svn-id: svn+ssh://gitlab/srv/svn-repos/pdb-redo/trunk@280 a1961a4f-ab94-4bcc-80e8-33b5a54de466
parent 1da97e6e
...@@ -275,7 +275,7 @@ class Polymer ...@@ -275,7 +275,7 @@ class Polymer
iterator end(); iterator end();
size_t size() const { return mPolySeq.size(); } size_t size() const { return mPolySeq.size(); }
Monomer operator[](size_t index) const { return Monomer(const_cast<Polymer&>(*this), index); } Monomer operator[](size_t index) const;
Structure* structure() const { return mStructure; } Structure* structure() const { return mStructure; }
......
...@@ -159,7 +159,25 @@ struct Res ...@@ -159,7 +159,25 @@ struct Res
else if (a.labelAtomId() == "C") mC = a.location(); else if (a.labelAtomId() == "C") mC = a.location();
else if (a.labelAtomId() == "N") mN = a.location(); else if (a.labelAtomId() == "N") mN = a.location();
else if (a.labelAtomId() == "O") mO = a.location(); else if (a.labelAtomId() == "O") mO = a.location();
else if (a.labelAtomId() == "H") mH = a.location(); // else if (a.labelAtomId() == "H") mH = a.location();
}
}
void assignHydrogen()
{
// assign the Hydrogen
mH = mN;
if (mType != kProline and mPrev != nullptr)
{
auto pc = mPrev->mC;
auto po = mPrev->mO;
double CODistance = Distance(pc, po);
mH.mX += (pc.mX - po.mX) / CODistance;
mH.mY += (pc.mY - po.mY) / CODistance;
mH.mZ += (pc.mZ - po.mZ) / CODistance;
} }
} }
...@@ -713,7 +731,7 @@ void CalculateSecondaryStructure(Structure& s) ...@@ -713,7 +731,7 @@ void CalculateSecondaryStructure(Structure& s)
vector<Res> residues; vector<Res> residues;
residues.reserve(nRes); residues.reserve(nRes);
for (auto p: s.polymers()) for (auto& p: polymers)
{ {
for (auto m: p) for (auto m: p)
residues.emplace_back(move(m)); residues.emplace_back(move(m));
...@@ -723,6 +741,8 @@ void CalculateSecondaryStructure(Structure& s) ...@@ -723,6 +741,8 @@ void CalculateSecondaryStructure(Structure& s)
{ {
residues[i].mNext = &residues[i + 1]; residues[i].mNext = &residues[i + 1];
residues[i + 1].mPrev = &residues[i]; residues[i + 1].mPrev = &residues[i];
residues[i + 1].assignHydrogen();
} }
CalculateHBondEnergies(residues); CalculateHBondEnergies(residues);
......
...@@ -745,6 +745,22 @@ Polymer::iterator::iterator(Polymer& p, uint32 index) ...@@ -745,6 +745,22 @@ Polymer::iterator::iterator(Polymer& p, uint32 index)
} }
} }
Monomer Polymer::operator[](size_t index) const
{
if (index >= mPolySeq.size())
throw out_of_range("Invalid index for residue in polymer");
string compoundID;
int seqID;
auto r = mPolySeq[index];
cif::tie(seqID, compoundID) =
r.get("seq_id", "mon_id");
return Monomer(const_cast<Polymer&>(*this), index, seqID, compoundID, "");
}
Polymer::iterator::iterator(const iterator& rhs) Polymer::iterator::iterator(const iterator& rhs)
: mPolymer(rhs.mPolymer), mIndex(rhs.mIndex), mCurrent(rhs.mCurrent) : mPolymer(rhs.mPolymer), mIndex(rhs.mIndex), mCurrent(rhs.mCurrent)
{ {
......
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