Closed Ladme closed 9 months ago
Good find, and thanks for the detailed report! It makes my life much easier
This happens because modifications (which create the charged termini) are applied before the Links (which deal with the secondary-structure specifics). In particular, this link (https://github.com/marrink-lab/vermouth-martinize/blob/master/vermouth/data/force_fields/martini22/aminoacids.ff#L636) clobbers the charged terminus. As a work-around you could try setting the sec-struct for the termini to C, but that will probably mess up your bonded interactions.
I don't think we ever properly considered the interaction between Links and Modifications and as such we don't have a mechanism in place to indicate which should take priority. Unless @fgrunewald has any blinding insights I think our best bet is to consider the modifications when deciding whether to apply Links.
This leads to the following questions: 1) If a modification is found, but none is mentioned in the Link, do we apply the Link? (i.e. default apply, or default don't apply) 2) How do we communicate this to the user? It will make adding Links (and Mods) much harder
@pckroon I don't fully understand what happens though. The other secondary structure elements are fine but also they get different bead types assigned via the links. So why does this procedure only fail when we have F|H as secondary structure?
It will also fail for others. Any terminal residue that has a sec struct of T|3|E|2|1|H|F will show this. Any terminal ALA|PRO|HYP with sec struct S will as well.
During mapping the beadtype will be set to Qa/Qd, and once the links get applied this get overwritten.
@pckroon I think the simple solution would be to add a [non-edges]
directive excluding these statements from being applied here. It also makes sense in the Martini 2 logic. The bead-type changes as a function of secondary structure but this change shouldn't apply to the termini.
Regarding the other question, I guess a link overrules modifications for now. Just means we have to be careful with the force-fields.
Short description
vermouth-martinize
generates incorrect Martini 2.2 topologies for alpha-helical peptides.Detailed description
Using MODELLER, I generated a short 20 amino acids long polyleucine peptide in an alpha-helical conformation. I then used two different versions of
vermouth-martinize
(v0.9.6 and v0.9.7-dev9) and an old version ofmartinize.py
script (labeled as version 2.6_3) to coarse-grain the peptide.Commands used:
vermouth-martinize
:-f l20.pdb -o topol.top -x l20_martini.pdb -ss HHHHHHHHHHHHHHHHHHHH -p backbone -ff martini22
,martinize.py
:-f l20.pdb -o topol.top -x l20_martini.pdb -ss HHHHHHHHHHHHHHHHHHHH -p backbone
.Both versions of
vermouth-martinize
generated identical topologies with the following[ atoms ]
section:martinize.py
script generated this[ atoms ]
section:Clearly, the bead types for the backbone of the aminoacids near the termini of the peptide differ, with
martinize.py
generating correct bead types. Note especially that1 N0 1 LEU BB 1 1
which is a charged backbone bead obviously should not be of typeN0
.The parameters for bonds, angles, position restraints, and dihedrals seem to be consistent between the individual scripts.
I have attempted to force
vermouth-martinize
to generate the correct topology by providing a slightly different secondary structure. Namely, I used-ss 1111HHHHHHHHHHHH2222
instead of-ss HHHHHHHHHHHHHHHHHHHH
but obtained the same (incorrect) result as before.Files
All input and output files as well as the specific version of the
martinize.py
script used can be temporarily found at github.com/Ladme/vermouth-martinize-bug until the issue is resolved.Acknowledgments
Credit goes to Denys Biriukov and Peter Pajtinka for discovering this issue.