In [ ]:
import mbuild as mb
class Methane(mb.Compound):
def __init__(self):
super(Methane, self).__init__()
Any Compound
can contain other Compounds
which can be added using its add()
method. Compounds
at the bottom of such a hierarchy are referred to as Particles
. Note however, that this is purely semantic in mBuild to help clearly designate the bottom of a hierarchy.
In [ ]:
import mbuild as mb
class Methane(mb.Compound):
def __init__(self):
super(Methane, self).__init__()
carbon = mb.Particle(name='C')
self.add(carbon, label='C[$]')
hydrogen = mb.Particle(name='H', pos=[0.11, 0, 0])
self.add(hydrogen, label='HC[$]')
By default a created Compound/Particle
will be placed at 0, 0, 0
as indicated by its pos
attribute. The Particle
objects contained in a Compound
, the bottoms of the hierarchy, can be referenced via the particles
method which returns a generator of all Particle
objects contained below the Compound
in the hierarchy.
Note: All positions in mBuild are stored in nanometers.
Any part added to a Compound
can be given an optional, descriptive string label. If the label ends with the characters [$]
, a list will be created in the labels. Any subsequent parts added to the Compound
with the same label prefix will be appended to the list. In the example above, we've labeled the hydrogen as HC[$]
. So this first part, with the label prefix HC
, is
now referenceable via self['HC'][0]
. The next part added with the label HC[$]
will be referenceable via self['HC'][1]
.
Now let's use these styles of referencing to connect the carbon to the hydrogen. Note that for typical use cases, you will almost never have to explicitly define a bond when using mBuild - this is just to show you what's going on under the hood:
In [ ]:
import mbuild as mb
class Methane(mb.Compound):
def __init__(self):
super(Methane, self).__init__()
carbon = mb.Particle(name='C')
self.add(carbon, label='C[$]')
hydrogen = mb.Particle(name='H', pos=[0.11, 0, 0])
self.add(hydrogen, label='HC[$]')
self.add_bond((self[0], self['HC'][0]))
As you can see, the carbon is placed in the zero index of self
. The hydrogen could be referenced via self[1]
but since we gave it a fancy label, it's also referenceable via self['HC'][0]
.
Alright now that we've got the basics, let's finish building our Methane
and take a look at it:
In [ ]:
import mbuild as mb
class Methane(mb.Compound):
def __init__(self):
super(Methane, self).__init__()
carbon = mb.Particle(name='C')
self.add(carbon, label='C[$]')
hydrogen = mb.Particle(name='H', pos=[0.1, 0, -0.07])
self.add(hydrogen, label='HC[$]')
self.add_bond((self[0], self['HC'][0]))
self.add(mb.Particle(name='H', pos=[-0.1, 0, -0.07]), label='HC[$]')
self.add(mb.Particle(name='H', pos=[0, 0.1, 0.07]), label='HC[$]')
self.add(mb.Particle(name='H', pos=[0, -0.1, 0.07]), label='HC[$]')
self.add_bond((self[0], self['HC'][1]))
self.add_bond((self[0], self['HC'][2]))
self.add_bond((self[0], self['HC'][3]))
In [ ]:
methane = Methane()
methane.visualize()
In [ ]:
# Save to .mol2
methane.save('methane.mol2',overwrite=True)