You are here

Multi Ligand docking to a protein

9 posts / 0 new
Last post
Multi Ligand docking to a protein

Hi! I am new to PyRosetta and from Pure Life Science background.
I am trying to dock three ligands to a protein and I have gotten as far getting the my protein with concatenated ligand pdbs to be accepted as pose. I am having a block as to what I should do next.
Should I be following DockingProtocol() or is there any other set protocol?

I would appreciate any help in the right direction.


Post Situation: 
Sun, 2013-08-04 10:46

I'm assuming by ligands you're talking about small molecule ligands. DockingProtocol() is really intended for protein-protein docking. Many of the internals are shared between protein-protein and protein-small molecule docking, but the search protocol and scoring is different. In the Rosetta world they're taken to be two distinct problems.

Instead, you may want to take a look at the various multi-ligand docking demos that exist for regular Rosetta - particularlly the paper "Rosetta Ligand docking with flexible XML protocols." ( These all use the RosettaScripts framework. The movers, filters and taskoperations of RosettaScripts correspond to single classes in PyRosetta, so you can pretty straightforwardly copy a RosettaScripts protocol into a PyRosetta protocol, by setting up the movers/etc with function calls instead of XML tags.

Mon, 2013-08-05 11:44

Hi! Thank you for responding.
I was actually trying to get to the RosettaLigand itself..but my requirememnts are a little different. I have already manually docked my ligand into the protein, now I want to minimise the energy and relax the structure. I tried MinMover, but it works with the entire protein. I was wondering if there is anything that will allow me move the residues in the vicinity of the ligand itself.
I am trying to stick to PyRosetta instead of migrating to Rosetta now.

Can anyone help me in this regard please?


Wed, 2013-08-07 08:08

Take it from someone who has a lot of experience in PyRosetta: You want to use both. Some things are easier in PyRosetta, others are easier in RosettaScripts, and others are simple via application. Use what works best.

That being said, here is an email from Sam DeLuca, of the Meiler Lab (Vanderbilt) where we asked him a bunch of questions regarding the current state of RosettaLigand (Many of the movers mentioned here should be accessible via PyRosetta):


I'm going to reference rosettaLigand a lot in this email. THe rosettaLigand application is no longer developed, and is kept around for legacy purposes. if you're doing ligand docking and want to take advantage of any work done on it in the last 5 years or so, you'll want to use the XML interface. look at the ligand_dock_script integration test for an example of what that looks like. All the steps in ligand docking are completely independent from each other, so you can use that XML file as a starting point and mix and match it. it's actually really cool

> Ligands don't have to be seperate chains? Right? So, you have a bunch of them, say water, all of chain x. To access their information, you would just do normal things like you would for protein? There is just jumps in between all of them?

In principle, ligands don't need to be separate chains. The fold tree will have jumps between all of them. That being said, the movers that comprise ligand docking all use chains as an interface, so if you have multiple ligands, they generally should have separate chain IDs. That being said, in some cases (waters, for example) its desirable to have multiple independent ligands, and treat them independently as seperate rigid bodies. To allow for this, we have low resolution docking movers called "Translates" and "Rotates" that will treat multiple ligands with the same chain id as separate entities. see the ligand_dock_script integration test for details.

If you aren't using ligand docking, but just want to interact with ligands, you can interact with them by jump.

> How do you sample conformations of a ligand?

Currently, you regenerate ligand conformations using your choice of conformer generation tools (i use MOE, some people like openeye omega, there are many options), and then output those conformations as a pdb file, with the conformations separated by TER cards. You then add a PDB_ROTAMERS line to your params file, like this:


where path.pdb is the pdb file containing your rotamers. this path is relative to the params file (I usually keep them in the same directory). These conformers will be imported as a single residue rotamer library, and can be sampled by the packer, or manually (as occurs in low resolution docking)

> Can you create a ligand and stick it on your pose, say a water molecule in a pocket?.

yep! make a new residue of the correct type, use one of the rigid body translation movers to put it wherever. Drawing up a residue de novo that you don't already have a param for is harder and is basically an ongoing research project in our lab. If you're interested in ligand design stuff let me know, its currently not all that feasible though it is technically possible.

> Does ligand docking use regular vanilla DockMCM for high-res docking?

Nope. Protein-protein docking and protein-ligand docking are different enough in terms of caveats and goals that the code bases are basically completely independent. protocols/ligand_docking/HighResDocker and protocols/ligand_docking/FinalMinimizer are the movers used in high res docking. The former does alternate rounds of packing, rotamer trials (rotamer conformation sampling) and minimization. the latter does minimization of the backbone and ligand.

> Is there a low-res docking for ligands?

Yep! the Translate and Rotate movers do that. (both in protocols/ligand_docking). Translate and Rotate are basically designed to come up with a reasonable initial placement. The use a really simplistic binary cartesian grid to try to put the ligand in a place where it isnt clashing with any backbone atoms prior to minimization. It's a very inefficient way of sampling the space and doesnt do a good job of scoring. It was designed with the assumption that you'd be making several hundred models. Transform is what I've been working on to try to replace Translate and Rotate. its still a work in progress, but i'll let you know when its usable (Dont use it now). It's designed so that it can be a drop-in replacement for Translate and Rotate.

> Can a ligand's position relative to a protein be minimized?

yes, FinalMinimizer and HighResDocker basically do this

> Is this just through minimizing the jump?

No, see description of FinalMinimizer and HighResDocker above?

> Can the ligand itself be minimized?

if chi angles are defined in the params file, you can minimize those angles. The minmover is used for this, and it's handled like any other kind of residue minimization in Rosetta.

> Last question, if your ligand is a lead atom can you transmute it into gold? ;)

yes. you can grab non-const access to atomtype parameters and modify them


Wed, 2013-08-07 09:39

To limit how much minimization you do, you'll want to use a movemap. Minimizers can take movemap which specify the degrees of freedom which can move during minimization. You'd set up a movemap such that the ligand and surrounding residues can move, but the distant residues can't.

Another alternative for your case is to use the protocols.enzdes.EnzRepackMinimize mover. By using the appropriate task operations you can set it up just to repack and minimize in the vicinity of a ligand, rather than doing a full redesign.

Wed, 2013-08-07 13:45

Thank you rmoretti and Jared! The above two replie certainly helped me! I am starting to work with Rosetta now. However, I am not sure how the installation should progress. The terminal says that Scons built the targets successfully...but keeps telling me that sh 1: 0 not found.
Is there any thread on the installation of Rosetta 3.5 you could direct me to?


Mon, 2013-08-12 09:58

Glad we could help!

The community is in the process of changing how we do documentation, so some things did not make it to the 3.5 manual unfortunately. One of those things was the building Rosetta page....

So, for now use both 3.5 and 3.4 documentation:

If you already did this, would you be able to post the full command you used to build, platform, etc so we can figure out a solution?

Mon, 2013-08-12 10:24

I need help for two ligand docking. I did following:
1) combined the two ligands (in pdb format) into one pdb file. Use different chain ID for the two ligands.
2) Added H in PyMol, and saved the "concatenated ligand" as mol format.
3) Ran "" on this file, two pdb files and two params files were generated that correspond to the two ligands. The chain ID seems the same, as X.
4) A new input file was generated by appending the two pdb files from step 3 to my receptor pdb. The two ligands look like a "two residue ligand" with X as chain ID, the residue number "1" and "2". I had to modify the atom name of the second ligand/residue in the pdb file because it was different from the atom name in the second params file.
5) The flags.txt and ligand_dock.xml.txt files are attached. The two ligands had been docked into the binding pocket by other program.
6) The results from ./rosetta_source/bin/rosetta-scripts.linusgccrelease @flags.txt showed that among the two ligands, only the first one (with residue number "1") moves.
My questions are: (1) Could we make both ligands move simultaneously during multi ligand docking? How? (2) How to define the start positions for two ligands if they are not in the pocket? And what necessary changes are for the ligand_dock.xml?


Wed, 2013-10-02 16:10

The discussion at is very helpful for this problem. Thanks.

Sun, 2013-10-06 16:01