File: molecule_factory.py

package info (click to toggle)
mmtk 2.7.9-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 11,788 kB
  • ctags: 6,600
  • sloc: python: 18,050; ansic: 12,400; makefile: 129; csh: 3
file content (65 lines) | stat: -rw-r--r-- 2,342 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# Create molecules from scratch
#
# This example shows how a molecular system (SPCE water) can be set up using
# molecule factories instead of the molecular database.
#

from MMTK import *
from MMTK.MoleculeFactory import MoleculeFactory
from MMTK.ForceFields import SPCEForceField

# Create a new molecule factory.
factory = MoleculeFactory()

# Create the empty molecule. There is no distinction between groups
# and molecules at this level. Everything is a building block.
factory.createGroup('water')

# Add the atoms.
factory.addAtom('water', 'O', 'O')
factory.addAtom('water', 'H1', 'H')
factory.addAtom('water', 'H2', 'H')

# Add the bonds.
factory.addBond('water', 'O', 'H1')
factory.addBond('water', 'O', 'H2')

# Define the atom positions
factory.setPosition('water', 'O', Vector(0., 0., 0.00655616814675))
factory.setPosition('water', 'H1',
                    Vector(-0.0756950327264, 0., -0.0520320595151))
factory.setPosition('water', 'H2',
                    Vector(0.0756950327264, 0., -0.0520320595151))

# Define atom types and charges for the SPCE force field.
factory.setAttribute('water', 'O.spce_atom_type', 'O')
factory.setAttribute('water', 'H1.spce_atom_type', 'H')
factory.setAttribute('water', 'H2.spce_atom_type', 'H')
factory.setAttribute('water', 'O.spce_charge', -0.8476)
factory.setAttribute('water', 'H1.spce_charge', 0.4238)
factory.setAttribute('water', 'H2.spce_charge', 0.4238)

# Define the PDB atom name map
factory.setAttribute('water', 'pdbmap',
                     [('HOH', {'O': factory.getAtomReference('water', 'O'),
                               'H1': factory.getAtomReference('water', 'H1'),
                               'H2': factory.getAtomReference('water', 'H2')})])

# Create the universe and add water molecules.
universe = OrthorhombicPeriodicUniverse((5., 5., 5.), SPCEForceField())
universe.addObject(factory.retrieveMolecule('water'))
universe.addObject(factory.retrieveMolecule('water'))
universe[0].translateBy(Vector(1., 0., 0.))
universe[1].translateBy(Vector(0., 1., 0.))

# Print energy terms
print universe.energyTerms()

# Write the factory to an XML file
factory.writeXML(file('water_factory.xml', 'w'))

# Write the universe to an XML file
universe.writeXML(file('water_universe.xml', 'w'))

# Write the universe to a PDB file
universe.writeToFile('water_universe.pdb')