Controlling chirality on moltemplate

Hi Dr. Jewett,
I’m a graduate student at Univ. of Akron. I’m trying to synthesize a
copolymer in which monomers have chiral centers on backbone. I would like to
synthesize the copolymer by deleting hydrogens on these chiral centers, by
this way, I preserve the chirality on the carbon.

   I confess I don't know what you mean here. In order to run a
molecular dynamics simulation, you have to specify the location, type,
charge, and bond topology of all the atoms in your system. If it is
more convenient for you to construct a larger system and then delete
atoms, then yes. You can do that in moltemplate and other
molecular-builder programs as well. But I'm not sure this is the
easiest way to build a polymer.

Could you please direct
me on how to do this in moltemplate or provide me a example file on this if
you have any? Thank you for your time.

    If you use moltemplate to build a polymer, then you are
responsible to specify the position of every atom in your system
manually. By doing this, you control the chirality of each monomer.

   The only thing that moltemplate accomplishes is that it reduces
some of the redundancy, so that you can avoid repetitive work. In
some cases, it may also be able to lookup reasonable force-field
parameters for your system.

    To use moltemplate, you must define a monomer (including all of
the atoms, their types, their charges, and a list of bonds). Whether
or not that monomer has the correct chiral center is up to you.

   ---- example to follow: "" ----

Once you have defined your monomer (in this case "CH2"), you can build
a polymer using a command like this:

monomers = new CH2 [50].rot(180,1,0,0).move(1.2533223,0,0)

Here "CH2" is the name of a monomer which you have presumably defined
earlier (see below). Note that this single line is shorthand. It is
equivalent to the following lines:

monomers[0] = new CH2
monomers[1] = new CH2.rot(180,1,0,0).move(1.2533223,0,0)
monomers[2] = new CH2.rot(360,1,0,0).move(2.5066446,0,0)
monomers[3] = new CH2.rot(540,1,0,0).move(3.7599669,0,0)
monomers[4] = new CH2.rot(720,1,0,0).move(5.0132892,0,0)
monomers[5] = new CH2.rot(900,1,0,0).move(6.2666115,0,0)
monomers[49] = new CH2.rot(8820,1,0,0).move(61.4127927,0,0)

The "rot()" commands rotate each monomer by 180 degrees about the
polymer axis (in this case, the x axis). The "move()" command slides
it translationally by 1.2533223 in the x direction. The original
(unrotated) atom coordinates are defined in "CH2" (see below)

If you want to customize the ends of the polymer with a different
monomer type (IE CH3 instead of CH2), there are multiple ways to do
that. The result is shown here:

The definition of the "CH2" monomer type is provided below, and also at

------- -----

import "" # <-- defines the "OPLSAA" force field

CH2 inherits OPLSAA {

  # atom-id mol-id atom-type charge x y z

  write("Data Atoms") {
    $atom:C $mol:... @atom:81 0.00 0.000 0.000 0.000
    $atom:H1 $mol:... @atom:85 0.00 0.000 0.63104 0.89243
    $atom:H2 $mol:... @atom:85 0.00 0.000 0.63104 -0.89243

  # Atom type numbers (@atom:80,@atom:85) are defined in "". Excerpt:
  # @atom:80 12.011 #CT "Alkane CH3-" 6 partial charge=-0.18
  # @atom:81 12.011 #CT "Alkane -CH2-" 6 partial charge=-0.12
  # @atom:85 1.008 #HC "Alkane H-C" 1 partial charge=0.06
  # In this example, atomic charges are generated by atom type (according to
  # rules in, and can be omitted. Just leave them as "0.00" for now.
  # The "..." in "$mol:..." tells moltemplate that this molecule may be part
  # of a larger molecule, and (if so) to use the larger parent object's
  # molecule id number as it's own. For a complete list of atom types, see:

  # Now specify which pairs of atoms are bonded:
  write('Data Bond List') {
    $bond:CH1 $atom:C $atom:H1
    $bond:CH2 $atom:C $atom:H2

} # CH2

# Optional: Shift all the coordinates in the +Y direction by 0.4431163.
# This way, the carbon atom is no longer located at 0,0,0, but the
# axis of an alkane chain containing this monomer is at 0,0,0.
# (This makes it more convenient to construct a polymer later.
# If this is confusing, then simply add 0.4431163 to the Y
# coordinates in the "Data Atoms" section above.)