Skip to content
Snippets Groups Projects
Commit 97662e57 authored by Studer Gabriel's avatar Studer Gabriel
Browse files

use FRM rotamer model in any case for cystein disulfid bond evaluation

parent b888a131
No related branches found
No related tags found
No related merge requests found
......@@ -323,10 +323,10 @@ def _GetDisulfidBridges(frame_residues, cystein_indices, res_list, rotamer_libra
continue
cys_ca_positions.append(ca.GetPos())
cys_cb_positions.append(cb.GetPos())
# get RotamerGroup
# get RotamerGroup in case of disulfids, we do FRM in any case
rot_group = _GetRotamerGroup(r.handle, sidechain.CYD, i, rotamer_library,
rotamer_constructor, phi_angles[i],
psi_angles[i], use_frm, bbdep)
psi_angles[i], True, bbdep)
rot_group.AddFrameEnergy(frame)
cystein_rot_groups.append(rot_group)
indices_with_rot_groups.append(i)
......
......@@ -93,11 +93,7 @@ void SidechainEnvListener::Init(const loop::AllAtomEnv& base_env) {
if (use_frm_) frm_rotamer_group_.assign(num_residues, FRMRotamerGroupPtr());
else rrm_rotamer_group_.assign(num_residues, RRMRotamerGroupPtr());
if (add_cyd_rotamers_) {
if (use_frm_) {
cyd_frm_rotamer_group_.assign(num_residues, FRMRotamerGroupPtr());
} else {
cyd_rrm_rotamer_group_.assign(num_residues, RRMRotamerGroupPtr());
}
cyd_frm_rotamer_group_.assign(num_residues, FRMRotamerGroupPtr());
}
}
......@@ -203,13 +199,8 @@ void SidechainEnvListener::SetResidue_(loop::ConstAllAtomPositionsPtr all_pos,
}
// set extra cystein rotamer if needed
if (add_cyd_rotamers_ && r_id == CYS) {
if (use_frm_) {
CreateRotamerGroup(cyd_frm_rotamer_group_[res_idx], n_pos, ca_pos,
cb_pos, CYD, res_idx);
} else {
CreateRotamerGroup(cyd_rrm_rotamer_group_[res_idx], n_pos, ca_pos,
cb_pos, CYD, res_idx);
}
CreateRotamerGroup(cyd_frm_rotamer_group_[res_idx], n_pos, ca_pos,
cb_pos, CYD, res_idx);
}
}
} else {
......@@ -218,12 +209,11 @@ void SidechainEnvListener::SetResidue_(loop::ConstAllAtomPositionsPtr all_pos,
env_.Remove(&env_data_[res_idx], env_data_[res_idx].pos);
bb_frame_residue_[res_idx].reset();
sc_frame_residue_[res_idx].reset();
cyd_frm_rotamer_group_[res_idx].reset();
if (use_frm_) {
frm_rotamer_group_[res_idx].reset();
cyd_frm_rotamer_group_[res_idx].reset();
} else {
rrm_rotamer_group_[res_idx].reset();
cyd_rrm_rotamer_group_[res_idx].reset();
}
}
}
......
......@@ -83,16 +83,19 @@ public:
return rrm_rotamer_group_[res_idx];
}
FRMRotamerGroupPtr GetCydFRMRotamerGroup(uint res_idx) const {
if (!use_frm_) {
throw promod3::Error("SidechainEnvListener doesn't have FRMRotamers!");
}
return cyd_frm_rotamer_group_[res_idx];
}
RRMRotamerGroupPtr GetCydRRMRotamerGroup(uint res_idx) const {
if (use_frm_) {
throw promod3::Error("SidechainEnvListener doesn't have RRMRotamers!");
// typically all disulfid evaluations are done with FRM disulfids
// (even when use_frm is false), so this is just a nasty fallback
uint num_rotamers = cyd_frm_rotamer_group_[res_idx]->size();
std::vector<RRMRotamerPtr> rrm_rotamers(num_rotamers);
for(uint i = 0; i < num_rotamers; ++i){
rrm_rotamers[i] = (*cyd_frm_rotamer_group_[res_idx])[i]->ToRRMRotamer();
}
return cyd_rrm_rotamer_group_[res_idx];
RRMRotamerGroupPtr p(new RRMRotamerGroup(rrm_rotamers, res_idx));
return p;
}
// for convenience: use overload to set rot_group based on type
......@@ -190,7 +193,6 @@ private:
// extra rotamer groups (r_id == CYD) for cysteins to handle disulfid bridges
// -> constructed for res. with r_id == CYS indep. of all_rotamers_ setting!
std::vector<FRMRotamerGroupPtr> cyd_frm_rotamer_group_;
std::vector<RRMRotamerGroupPtr> cyd_rrm_rotamer_group_;
};
}} // ns
......
......@@ -375,8 +375,9 @@ void SidechainReconstructor::SolveSystem_(
// handle cysteins
res->disulfid_bridges.clear();
if (build_disulfids_) {
BuildDisulfids_<RotamerGroup>(res, cys_indices, frame_residues,
has_sidechain);
// we use the FRM rotamer model in any case for reconstructing disulfids
BuildDisulfids_<FRMRotamerGroup>(res, cys_indices, frame_residues,
has_sidechain);
}
// collect rotamers
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment