You are here

RosettaDock - protonation states

7 posts / 0 new
Last post
RosettaDock - protonation states



I'm attempting to compare protein-protein docking at pH 7 / 11. I've protonated my structures using PROPKA and have performed pre-packing and docking using the following commands:

docking_prepack_protocol.static.linuxgccrelease -database /apps/local/biology/rosetta/2020.11/bundle/rosetta_bin_linux_2020.11.61179_bundle/main/database/ -in:file:s model_5.pdb -unboundrot unbound_rotamers.pdb -nstruct 25 -partners A_B -ex1 -ex2aro

docking_protocol.static.linuxgccrelease -database /apps/local/biology/rosetta/2020.11/bundle/rosetta_bin_linux_2020.11.61179_bundle/main/database/ -in:file:s model_5_0006.pdb -unboundrot unbound_rotamers.pdb -nstruct 1000 -partners A_B -dock_pert 3 8 -ex1 -ex2aro -out:suffix _dock

However, for my pH 11 run, the protonation states have been reassigned according to neutral pH. Is there any way of keeping the protonation states and hydrogens assigned by PROPKA, or an alternative method to incorporate pH into the RosettaDock algorithm?

Thank you!

Post Situation: 
Tue, 2023-08-15 08:15


You need to turn on pH mode! (reference)

Use the following flags for each pH (changing the pH value as appropriate): -pH:pH_mode -pH:value_pH 11.0 

You may also want to use one or both of the following to maintain your input protonation state from PROPKA: -packing:no_optH or -pH:keep_input_protonation_state. Even when using these flags, the protonation state will change during the packing of the side chains, depending on the current environment of the side chain.

FYI, pH 11 is pretty extreme, and you may even see deprotonated tyrosines.

I hope that helps,


Tue, 2023-08-15 08:38

Hi David, 

Thanks for your response.  I've tried performing the prepacking step using pH mode on structures with/without the protonation states preassigned by PROPKA (using the flags to maintain protonation states where appropriate), however, the protonation states were set to pH 7 in all cases. I came across this post ( so tried adding the following to my commands: 

-score:weights talaris2013 -set_weights e_pH 1.0  -corrections::restore_talaris_behavior true

This worked for pH 11 (LYS side chains were deprotonated, around 50% TYR side chains deprotonated), but for pH 7, the LYS side chain is deprotonated at every residue in the structure. Do you have ideas as to how I can fix this? The commands I'm currently working with are:

docking_prepack_protocol.static.linuxgccrelease -database /apps/local/biology/rosetta/2020.11/bundle/rosetta_bin_linux_2020.11.61179_bundle/main/database/ -in:file:s model_1-pH7.pdb -unboundrot model_1-pH7.pdb -nstruct 25 -partners A_B -ex1 -ex2aro -score:weights talaris2013 -set_weights e_pH 1.0  -corrections::restore_talaris_behavior true -pH_mode true -value_pH 7.0 -pH:keep_input_protonation_state -packing:no_optH 

docking_prepack_protocol.static.linuxgccrelease -database /apps/local/biology/rosetta/2020.11/bundle/rosetta_bin_linux_2020.11.61179_bundle/main/database/ -in:file:s model_1-pH11.pdb -unboundrot model_1-pH11.pdb -nstruct 25 -partners A_B -ex1 -ex2aro -score:weights talaris2013 -set_weights e_pH 1.0  -corrections::restore_talaris_behavior true -pH_mode true -value_pH 11.0 -pH:keep_input_protonation_state -packing:no_optH 

Thanks again for your help

Thu, 2023-08-17 01:51

Ah, yes, my apologies for failing to mention the scoring term. I recall it crossing my mind, and I'm glad you found the solution.

What happens if you remove the no_optH flag?

The docking prepack protocol minimizes the sidechains and backbone across the protein so that artifacts aren't introduced (through relief of clashes, for example) as the docking protocol proceeds. But if your protein is absent of these issues, you might just proceed without the docking prepack protocol. What is the source of your input model, prior to running PROPKA? If it came from Rosetta (with a protocol like Relax involved) you should be fine.

Other methods that might act like the docking_prepack_protocol:

  • fixbb with the -minimize_sidechains flag
  • fixbb followed by the minimize application
  • relax using the -relax:constrain_relax_to_start_coords -relax:coord_constrain_sidechains -relax:ramp_constraints false flags (along with -ex1 -ex2 -use_input_sc and -flip_HNQ flags)

You'll want to include the pH_mode flags with each of these.

Another option is to run docking_prepack_protocol on the model before PROPKA. Then run PROPKA to generate the two input structures for docking.


The main concept here is to prepare your structure so that the docking protocol is not dominated by spurious corrections of issues in the structure.

I hope that helps. I've tagged some other experts to chime in, too.

Thu, 2023-08-17 05:53

Hi there. 

I agree with David's suggestion on pre-pack and docking protocols. For the protonation, I think Talaris 2013 is the compatible score function as far as I know. 

I am a little confused about your question. Please correct me if I am wrong. Since the Pka of Lys is ~10.4, I would imagine the deprotonation of Lys to be around 100% at around pH=7. What does the dissociation from PROPKA look like? 

 One thing I have noticed in the current Rosetta pH format is that the slope of the titration curve is quite sharp relative to the Henderson–Hasselbalch equation, which may be the reason for the difference. 

I hope this helps. 

Thanking you, 



Mon, 2023-08-21 06:58

Hi both, 

Thank you very much for your suggestions.  I believe with a pKa of ~10.4, the side-chain of LYS should be protonated at pH 7 and deprotonated at pH 11.  This is what is predicted by PROPKA.  I've tried several variations of the pH flags David initially suggested (with / with no_optH etc.), have tried relaxing my structure with pH flags, and have attempted prepacking prior to assigning protonation states in PROPKA and then performing docking with pH flags included, but the protonation states from PROPKA are not retained following docking. 

The new protonation states assigned from docking at pH 11 appear to be correct (LYS deprotonated, TYR deprotonated ~ 50%) but the protonation states from docking at pH 7 are unexpected (specifically - LYS deprotonated).  I'm wondering if there are any extra flags I need to add for the score function?  I've copied in my commands. 

Thanks again, your help is much appreciated! 


docking_protocol.static.linuxgccrelease -database /apps/local/biology/rosetta/2020.11/bundle/rosetta_bin_linux_2020.11.61179_bundle/main/database/ -in:file:s model-1_pH7.pdb -unboundrot model-1_pH7.pdb -nstruct 1000 -partners A_B -dock_pert 3 8 -ex1 -ex2aro -out:suffix _dock -score:weights talaris2013 -set_weights e_pH 1.0  -corrections::restore_talaris_behavior true -pH_mode true -value_pH 7.0 -pH:keep_input_protonation_state -ignore_zero_occupancy false

docking_protocol.static.linuxgccrelease -database /apps/local/biology/rosetta/2020.11/bundle/rosetta_bin_linux_2020.11.61179_bundle/main/database/ -in:file:s model-1_pH11.pdb -unboundrot model-1_pH11.pdb -nstruct 1000 -partners A_B -dock_pert 3 8 -ex1 -ex2aro -out:suffix _dock -score:weights talaris2013 -set_weights e_pH 1.0  -corrections::restore_talaris_behavior true -pH_mode true -value_pH 11.0 -pH:keep_input_protonation_state -ignore_zero_occupancy false

Thu, 2023-08-24 01:29

pH_mode is a relatively unutilized mechanism within Rosetta. You may need to look into the code to get a better understanding of the proton assignment algorithm.

You mention that the protonation states from PROPKA are not maintained. With pH_mode on, you would expect protonation to change during the trajectory in an environment-dependent manner. Try adding the -use_input_sc flag to include these "properly protonated" side chains in the rotamer library when sampling.

I ran pH-mode recently (2021-ish) and did not observe a general deprotonation of lysines at pH 7.4. (I was using the backrub and relax applications, though, not the docking app.) Are all of the lysines deprotonated, or just a few? If it's just a few, then the interpretation is that the deprotonation is an effect of other residues in the region. Here are the flags I used:

-pH:value_pH 7.4 (also pH 3/4/5/6/8/9/11)

-nblist_autoupdate true
-ignore_unrecognized_res false
-ignore_zero_occupancy false
-score:weights beta_nov16_pH.wts

I can't recall why I was using the beta_nov16 score function, but it's possible there's another reason I did this. I did not rescale the charges in the protonation states params files, though. However, I did observe sensical protonation states across the pH range.

You might try directly copying the talaris_2013 weights from the database to the local directory and adding the e_PH term to this file. Then, you can provide this file using the -score:weights option. I can't recall why I have a local copy of the score function with this modification in my latest run, but I do.

All of the available options are here: Searching the list for "pH" or "proton" may assist you in finding relevant flags. You can also run any application with -help to check for application specific options (and many others). Rosetta will tell you which provided options are not accessed at the end of each run.

Thu, 2023-08-24 08:21