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

Avoid loading the rotamer library several times for one model.

This can happen in case of ring punch fixes.
parent eddd11f1
No related branches found
No related tags found
No related merge requests found
......@@ -164,7 +164,8 @@ def _GetSimEntity(sim):
def BuildSidechains(mhandle, merge_distance=4, fragment_db=None,
structure_db=None, torsion_sampler=None):
structure_db=None, torsion_sampler=None,
rotamer_library=None):
'''Build sidechains for model.
This is a wrapper for :func:`promod3.modelling.ReconstructSidechains`,
......@@ -190,10 +191,16 @@ def BuildSidechains(mhandle, merge_distance=4, fragment_db=None,
if ring punches are found. A default one is loaded
if None.
:type torsion_sampler: :class:`~promod3.loop.TorsionSampler`
:param rotamer_library: Used as parameter for
:func:`modelling.ReconstructSidechains`, a default
one is loaded if None.
:type rotamer_library: :class:`~promod3.sidechain.RotamerLib` or
:class:`~promod3.sidechain.BBDepRotamerLib`
'''
prof = core.StaticRuntimeProfiler.StartScoped('pipeline::BuildSidechains')
ost.LogInfo("Rebuilding sidechains.")
ReconstructSidechains(mhandle.model, keep_sidechains=True)
ReconstructSidechains(mhandle.model, keep_sidechains=True,
rotamer_library=rotamer_library)
# check for ring punches
rings = GetRings(mhandle.model)
ring_punches = GetRingPunches(rings, mhandle.model)
......@@ -221,7 +228,8 @@ def BuildSidechains(mhandle, merge_distance=4, fragment_db=None,
FillLoopsByDatabase(mhandle, fragment_db, structure_db,
torsion_sampler, ring_punch_detection=2)
# re-build sidechains
ReconstructSidechains(mhandle.model, keep_sidechains=True)
ReconstructSidechains(mhandle.model, keep_sidechains=True,
rotamer_library=rotamer_library)
# restore gaps
mhandle.gaps = StructuralGapList()
for g in old_gaps:
......@@ -459,6 +467,7 @@ def BuildFromRawModel(mhandle, use_amber_ff=False, extra_force_fields=list()):
fragment_db = loop.LoadFragDB()
structure_db = loop.LoadStructureDB()
torsion_sampler = loop.LoadTorsionSamplerCoil()
rotamer_library = sidechain.LoadDunbrackLib()
merge_distance = 4
# remove terminal gaps
......@@ -471,7 +480,7 @@ def BuildFromRawModel(mhandle, use_amber_ff=False, extra_force_fields=list()):
# build sidechains
BuildSidechains(mhandle, merge_distance, fragment_db,
structure_db, torsion_sampler)
structure_db, torsion_sampler, rotamer_library)
# minimize energy of final model using molecular mechanics
MinimizeModelEnergy(mhandle, use_amber_ff=use_amber_ff,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment