diff --git a/loop/src/backbone.cc b/loop/src/backbone.cc index 648be1aa0b3d112620988933318320f3e0691bb6..3108e7f2efe3a962b29c27f40fe48902567ff511 100644 --- a/loop/src/backbone.cc +++ b/loop/src/backbone.cc @@ -1,4 +1,5 @@ #include <promod3/loop/backbone.hh> +#include <ost/conop/processor.hh> namespace{ @@ -648,6 +649,18 @@ void BackboneList::InsertInto(ost::mol::ChainHandle& chain, edi.Connect(last.FindAtom("C"),after.FindAtom("N")); edi.ReorderResidues(chain); + + // add backbone torsions + ost::mol::ResidueHandle r1; + ost::mol::ResidueHandle r2 = chain.FindResidue(n_num - 1); + ost::mol::ResidueHandle r3 = chain.FindResidue(n_num); + for (ost::mol::ResNum r_num = n_num; r_num <= c_num; ++r_num) { + // add for r_num + r1 = r2; + r2 = r3; + r3 = chain.FindResidue(r_num + 1); + ost::conop::AssignBackboneTorsions(r1, r2, r3); + } } diff --git a/sidechain/pymod/_reconstruct_sidechains.py b/sidechain/pymod/_reconstruct_sidechains.py index 7ec0a9f86f174d5f01f1bb915187173997afa76b..9b147775d790ac06447fd60a5dd6bc183feb86fb 100644 --- a/sidechain/pymod/_reconstruct_sidechains.py +++ b/sidechain/pymod/_reconstruct_sidechains.py @@ -294,8 +294,26 @@ def Reconstruct(ent, keep_sidechains = False, build_disulfids = True, if rot_id == sidechain.PRO: tor = r.GetOmegaTorsion() + omega = None if tor.IsValid(): - if abs(tor.GetAngle()) < 1.57: + omega = tor.GetAngle() + elif i > 0: + # fallback computation of omega as in OST-code + prev = prot.residues[i-1] + if prev.IsValid() and prev.IsPeptideLinking(): + ca_prev = prev.FindAtom("CA") + c_prev = prev.FindAtom("C") + n = r.FindAtom("N") + ca = r.FindAtom("CA") + valid = ca_prev.IsValid() and c_prev.IsValid() \ + and n.IsValid() and ca.IsValid() + if valid and mol.BondExists(c_prev.handle, n.handle): + omega = geom.DihedralAngle(ca_prev.GetPos(), + c_prev.GetPos(), + n.GetPos(), ca.GetPos()) + # omega not set if prev. res. missing + if omega is not None: + if abs(omega) < 1.57: rot_id = sidechain.CPR else: rot_id = sidechain.TPR