Skip to content
Snippets Groups Projects
Commit 949c8e20 authored by Marco Biasini's avatar Marco Biasini
Browse files

forward GetCAlphaCBetaPos

parent 66b532f1
Branches
Tags
No related merge requests found
...@@ -58,34 +58,35 @@ bool ReducedPotentialImpl::VisitResidue(const mol::ResidueHandle& res) ...@@ -58,34 +58,35 @@ bool ReducedPotentialImpl::VisitResidue(const mol::ResidueHandle& res)
bool ReducedPotentialImpl::GetCAlphaCBetaPos(const mol::ResidueHandle& res, bool ReducedPotentialImpl::GetCAlphaCBetaPos(const mol::ResidueHandle& res,
geom::Vec3& ca_pos, geom::Vec3& ca_pos,
geom::Vec3& cb_pos) geom::Vec3& cb_pos)
{ {
const static Real bond_length=1.5; const static Real bond_length=1.5;
mol::AtomHandle ca=res.FindAtom("CA"); mol::AtomHandle ca=res.FindAtom("CA");
if (!ca.IsValid()) { if (!ca.IsValid()) {
return false; return false;
} }
ca_pos=ca.GetPos(); ca_pos=ca.GetPos();
mol::AtomHandle cb=res.FindAtom("CB"); mol::AtomHandle cb=res.FindAtom("CB");
if (cb.IsValid()) { if (cb.IsValid()) {
cb_pos=cb.GetPos(); cb_pos=cb.GetPos();
return true;
}
mol::AtomHandle n=res.FindAtom("N");
mol::AtomHandle c=res.FindAtom("C");
if (!(ca.IsValid() && c.IsValid() && n.IsValid())) {
LOG_WARNING("residue " << res.GetQualifiedName()
<< " doesn't have enough atoms to reconstruct Cbeta position");
return false;
}
geom::Vec3 v1=geom::Normalize(ca.GetPos()-n.GetPos());
geom::Vec3 v2=geom::Normalize(ca.GetPos()-c.GetPos());
geom::Vec3 in_plane_v=geom::Normalize(v1+v2);
geom::Plane p(ca.GetPos() ,n.GetPos(), c.GetPos());
// rotate around vector perpendicular to p and in_plane_v
geom::Vec3 axis=geom::Normalize(geom::Cross(p.GetNormal(), in_plane_v));
geom::Mat3 rot_mat=geom::AxisRotation(axis, (-54/180.0)*M_PI);
cb_pos=ca.GetPos()+rot_mat*in_plane_v*bond_length;
return true; return true;
} }
mol::AtomHandle n=res.FindAtom("N");
mol::AtomHandle c=res.FindAtom("C");
if (!(ca.IsValid() && c.IsValid() && n.IsValid())) {
LOG_WARNING("residue " << res.GetQualifiedName()
<< " doesn't have enough atoms to reconstruct Cbeta position");
return false;
}
geom::Vec3 v1=geom::Normalize(ca.GetPos()-n.GetPos());
geom::Vec3 v2=geom::Normalize(ca.GetPos()-c.GetPos());
geom::Vec3 in_plane_v=geom::Normalize(v1+v2);
geom::Plane p(ca.GetPos() ,n.GetPos(), c.GetPos());
// rotate around vector perpendicular to p and in_plane_v
geom::Vec3 axis=geom::Normalize(geom::Cross(p.GetNormal(), in_plane_v));
geom::Mat3 rot_mat=geom::AxisRotation(axis, (-54/180.0)*M_PI);
cb_pos=ca.GetPos()+rot_mat*in_plane_v*bond_length;
return true;
}
}}} }}}
...@@ -38,8 +38,9 @@ public: ...@@ -38,8 +38,9 @@ public:
virtual bool VisitResidue(const mol::ResidueHandle& res); virtual bool VisitResidue(const mol::ResidueHandle& res);
bool GetCAlphaCBetaPos(const mol::ResidueHandle& res, geom::Vec3& ca_pos, static bool GetCAlphaCBetaPos(const mol::ResidueHandle& res,
geom::Vec3& cb_pos); geom::Vec3& ca_pos,
geom::Vec3& cb_pos);
virtual void OnInteraction(AminoAcid aa_one, AminoAcid aa_two, virtual void OnInteraction(AminoAcid aa_one, AminoAcid aa_two,
Real dist, Real angle)=0; Real dist, Real angle)=0;
......
...@@ -61,6 +61,13 @@ private: ...@@ -61,6 +61,13 @@ private:
} }
bool ReducedPotential::GetCAlphaCBetaPos(const mol::ResidueHandle& res,
geom::Vec3& ca_pos,
geom::Vec3& cb_pos)
{
return impl::ReducedPotentialImpl::GetCAlphaCBetaPos(res, ca_pos, cb_pos);
}
ReducedPotentialPtr ReducedPotential::Load(const String& filename) ReducedPotentialPtr ReducedPotential::Load(const String& filename)
{ {
std::ifstream stream(filename.c_str(), std::ios_base::binary); std::ifstream stream(filename.c_str(), std::ios_base::binary);
......
...@@ -49,6 +49,11 @@ public: ...@@ -49,6 +49,11 @@ public:
Real GetTotalEnergy(ost::mol::EntityHandle ent, bool normalize=true); Real GetTotalEnergy(ost::mol::EntityHandle ent, bool normalize=true);
static bool GetCAlphaCBetaPos(const mol::ResidueHandle& res,
geom::Vec3& ca_pos,
geom::Vec3& cb_pos);
Real GetEnergy(AminoAcid aa_one, AminoAcid aa_two, Real GetEnergy(AminoAcid aa_one, AminoAcid aa_two,
Real ca_dist, Real angle) const Real ca_dist, Real angle) const
{ {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment