Improper and special bonds - moltemplate, amb2lmp.py

Hello Andrew. I have two questions about special bonds commands in
moltemplate.
2. Also moltemplate uses pair style charmm which also has a 1-4 weighting
factor built in. Will this not affect the special bonds setting or will
special bonds setting over ride the 1-4 weighting factor by the pair style
charmm.

pair_style charmm works together with dihedral_style charmm to add
extra (custom) pairwise interactions between atoms which also appear
in a dihedral_angle. These 1-4 interactions ONLY added when you are
also using dihedral_style charmm, and only for the first and last atom
in each dihedral-angle interaction (using that style). I think these
extra 1-4 interactions are added, regardless of the special_bonds
setting you asked for. (In fact, if you use dihedral_style charmm,
you are suggested to use "special_bonds lj/coul 0 0 0" to turn off all
other 1-4 contributions, probably to avoid adding 1-4 interactions
twice.)

Unless you are trying to reproduce results using CHARMM, you don't
need to use dihedral_style charmm. And if you are NOT using
dihedral_style charmm, then you have nothing to worry about. In that
case the special_bonds settings takes precedence. You can use any
special_bonds setting you want and trust that it is behaving
correctly. (No additional 1-4 interactions will be added.)
Incidentally, the moltemplate AMBER and OPLSAA examples avoid using
dihedral_style charmm for this reason.

1. Initially I used amber2 lammps.py to prepare input files for my
simulation. There were no impropers defined by amber2lammps.py. As such the
functional form for both dihedrals and impropers are the same and I did care
about that much.
But when you carefully think about, amber2lammps.py, it is using special
bonds. Now for impropers the 1-4 weighting factor is zero. But
amber2lammps.py is interpreting the improper as a dihedral and thus accounts
for pairwise 1-4 interactions.

Is my above statement right ?
If it is then amber2lammps.py is wrong.

I would not be surprised if amber2lammps.py is generating incorrect
improper angles. Those interactions are very difficult to get right
because there are several different conventions for atom ordering.
People have posted questions on this topic before:
http://sourceforge.net/p/lammps/mailman/message/28833464/

There is probably a way to import the LAMMPS data file you created
into TOPOTOOLS, and re-generate the list improper-angles. But you
have to be careful to do this in a way which is compatible with AMBER
conventions, and those will depend on the atom types in your molecule
and their connectivity. (Actually, you may be able to infer this by
looking at your molecule, and looking for coplanar atoms. If you want
to lookup the official AMBER conventions for improper angles, download
the latest version of moltemplate, {v1.24 or later}, and look at the
"gaff.lt" file in the "common" subdirectory, and skip to the
"Impropers By Type" section and the subsequent list of
"improper_coeff" commands. You can also google "gaff.dat". but that
file may be harder to interpret.)

If you have a complicated system, and if you think there's a bug in
amber2lammps.py, then easiest path for you is probably to hunt down
the bug and fix it (and become a hero). If you do, please post your
corrections to the list.

Good luck!

Andrew

--- alternatives ---

At this point, if you are using GAFF, I think the latest version of
moltemplate (1.24 or later) is finally generating correct
AMBER-compatible LAMMPS output, including improper-angles. (fingers
crossed.) Unfortunately, moltemplate does not assign atom charges
according to AMBER conventions.

However AMBERtools does assign atom charge. If you built your system
using AMBERtools, you can convert it to a moltemplate-object using
ltemplify.py, and extract atom-charges this way. This would not be
too difficult for a small organic molecule. But if there are too many
atoms, that would be an arduous task, and you risk mixing up the atom
charges.

Alternately, you could extract the list of improper angles from
moltemplate output and copy that to the data file generated by
amber2lammps.py (taking care to renumber the atom-IDs carefully).
Again, it would be a bad idea to attempt this for a large molecule.

Hope this helps.