Generator for topological frameworks and chemical structures.
Project description
AuToGraFS
=========
Original publication: `"Automatic Topological Generator for Framework Structures"`__.
.. _here: http://pubs.acs.org/doi/abs/10.1021/jp507643v
__ here_
*This version is under active development*. Bug hunting is very much going on, and there are still some old funtionalities that are not yet reimplemented.
TODO:
-----
High priority:
- the topologies should have a list of equivalent positions for realistic multiple components framework generation
Medium priority:
- the symmetry axes detection has trouble with planar shapes
- implement pillaring by using custom alignement rules
- more robust mmanalysis module
Low priority:
- unit testing coverage is non-existant
- documentation writing
- better handling of the databases:
+ precomputing sbu-topologies correspondance
+ list of paths to custom databases...
Install:
--------
.. highlight:: bash
$ pip install --user --upgrade AuToGraFS
For a manual install, first install the dependencies,
1. python >=3.4
2. ase, scipy, numpy<1.15.0
then clone this repository and add it to you pythonpath::
$ cd $HOME
$ git clone https://github.com/DCoupry/autografs.git
$ export PYTHONPATH=$HOME/autografs:$PYTHONPATH`
Examples:
---------
then from any python script or command line:
.. highlight:: python
>>> from autografs import Autografs
>>> mofgen = Autografs()
>>> mof = mofgen.make(topology_name="pcu",
>>> sbu_names=["Zn_mof5_octahedral", "Benzene_linear"])
>>> mof.write()
It is possible to pass more than one SBU of each shape, optionally with an associated probabilistic weight.
This weight defaults to 1.0/(number of similar sbu).
>>> mof = mofgen.make(topology_name="pcu",
>>> sbu_names=["Zn_mof5_octahedral", ("Benzene_linear",2.0),("Acetylene_linear",0.5)])
>>> mof.write()
This is particularly helpful in combination with an initial supercell for statistically introducing defects.
>>> mof = mofgen.make(topology_name="pcu",
>>> sbu_names=[("Zn_mof5_octahedral",2.0),("defect_octahedral",0.5), "Benzene_linear"],
>>> supercell=(3,3,3))
>>> mof.write()
Supercell can also be generated post-alignement, carrying everything done before.
>>> supercell_6x6x6 = mof.get_supercell(m=2)
>>> supercell_6x6x6.write()
Defects and modifications can be introduced at any time directly:
>>> # get the site directly
>>> sbu = mof[7]
>>> # change all hydrogens to Fluorine
>>> atoms = sbu.atoms.copy()
>>> symbols = atoms.get_chemical_symbols()
>>> symbols = [s if s!="H" else "F" for s in symbols]
>>> atoms.set_chemical_symbols(symbols)
>>> # by setting the atoms back,
>>> # mmtypes and bonding are updated.
>>> sbu.set_atoms(atoms=atoms,analyze=True)
>>> # delete another sbu. H will cap the dangling bits.
>>> del mof[8]
>>> mof.write()
Methods are also available for the rotation, functionalization and flipping.
>>> # rotate the sbu 7 buy 45 degrees
>>> mof.rotate(index=7,angle=45.0)
>>> # if a C* axis or reflection plane is detected
>>> # in the sbu 8 , flip around it
>>> mof.flip(index=8)
>>> # replace all functionalizable H sites with NH2
>>> nh2 = mofgen.sbu["NH2_point_group"]
>>> sites = mof.list_functionalizable_sites(self,symbol="H")
>>> for site in sites:
>>> mof.functionalize(where=site,fg=nh2)
>>> mof.write()
At any moment, we can monitor the bonding matrix and mmtypes, or get a cleaned version without dummies.
>>> from ase.visualize import view
>>> # with the dummies included
>>> mmtypes = mof.get_mmtypes()
>>> bonds = mof.get_bonds()
>>> # without the dummies
>>> atoms,bonds,mmtypes = mof.get_atoms(dummies=False)
>>> view(atoms)
If you know the shape of each slot and its index within the topology, it is possible to directly pass a dictionary mapping
the SBU to a particular slot.
>>> # method to investigate the topology shapes and slots
>>> topology = mofgen.get_topology(topology_name="pcu")
>>> sbu_dict = {}
>>> for slot_index,slot_shape in topology.shapes.items():
>>> # do something to choose an sbu
>>> ...
>>> sbu_dict[slot_index] = "chosen_sbu_name"
>>> # now pass it directly
>>> mof = mofgen.make(topology_name="pcu", sbu_dict=sbu_dict)
>>> mof.write()
You can access the databases as dictionaries using the following:
>>> sbudict = mofgen.sbu
>>> topodict = mofgen.topologies
Or using tools to find compatible objects:
>>> sbu_list = mofgen.list_available_sbu(topology_name="pcu")
>>> topology_list = mofgen.list_available_topologies(sbu_names=["Zn_mof5_octahedral", "Benzene_linear"])
A useful utility is the Atom typer, which assigns bond orders and UFF atom types to a structure:
>>> from autografs.mmanalysis import analyze_mm
>>> bonds, types = analyze_mm(sbu=mofgen.sbu["Zn_mof5_octahedral"])
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
AuToGraFS-2.2.0.tar.gz
(344.7 kB
view hashes)
Built Distribution
AuToGraFS-2.2.0-py3-none-any.whl
(361.9 kB
view hashes)
Close
Hashes for AuToGraFS-2.2.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0f0c58638553cae97658c23e322d50179375f2a10243b6dd1f2505cee7f853c0 |
|
MD5 | b0e9db78c5d4fa4845fcec2eba252932 |
|
BLAKE2b-256 | d3c05e9d45e2a1f0ecf81c1e26bfb98e83f050d1e8336ef01e6cdad1fb6d576f |