AuToGraFS Examples¶
the following examples work with all calculators of the ADF modeling suite. Any python script using these libraries should be launched using the “$ADFBIN/startpython” binary.
Generation of all available pillared SURMOF¶
# Required imports
from scm.autografs import *
from itertools import combinations_with_replacement
# create the generator object
mofgen = autografs.Autografs(path="./my_database/")
# the SURMOF family of frameworks is
topology = "pcu"
# get all available linkers, center, pillars for the pcu topology
centers = mofgen.get_available_centers(topology=topology)
for center in centers:
# the pcu topology accepts up to three different linkers.
# here, we'll use two and a pillar
linkers = mofgen.get_available_linkers(topology=topology, center=center)
for linker in combination_with_replacement(linkers, 2):
pillars = mofgen.get_available_pillars(topology=topology, center=center)
for pillar in pillars:
label = "{0}-{1}-{2}".format(center, linker,pillar)
# generate this particulat framework
framework = mofgen.make(label=label,
topology=topology,
center=center,
linker=linker,
pillar=pillar)
# write the UFF inpufile under "label.run" and "label.adf"
framework.write()
Generation of a defectuous UIO-66 MOF from custom files¶
# Required imports
from scm.autografs import *
from random import gauss
# get the building units as Fragment objects
center = utils.read_inp("UIO66_center.inp")
linker = utils.read_inp("UIO66_linker.inp")
# instantiate the generator
mofgen = autografs.Autografs()
# generate the MOF
mof = mofgen.make(label="UIO66", topology="bcu", center=center, linker=linker)
# get the 3*3*3 supercell
supercell = mof * (3,3,3)
# introduce 10 defects in a gaussian distribution around the center of the supercell
# the connections are capped with hydrogen.
indices = []
mu = len(supercell)/2
sigma = len(supercell)/4
number_of_defects = 10
while len(indices) < number_of defects:
index = int(abs(gauss(mu, sigma)))
if (index not in indices) and index < len(supercell):
indices.append(index)
supercell.insert_defect(indices = indices))
# view resulting framework in adfinput
supercell.view()
Generation of conformers in the IRMOF-5¶
# Required imports
from scm.autografs import *
from itertools import combinations_with_replacement
# instantiate the generator
mofgen = autografs.Autografs()
# generate the MOF
mof = mofgen.make(label="IRMOF-5", topology="pcu", center="mof5", linker="benzene")
# get the indices of the benzenes in the mof
benzenes = mof.get_linkers()
choice_angles = [0.0,45.0,90.0]
# generate all possible combinations
iteration = 0
for angles in combinations_with_replacement(choice_angles, 3):
conformer = mof.copy()
for benzene, angle in zip(benzenes, angles):
conformer.rotate_fragment(index=benzene, angle=angle)
conformer.write(name="conformer-{0}".format(iteration))
iteration += 1