stk
stk copied to clipboard
Build a MOF with given building blocks (metal and linkers)
Hi, I am wondering if there is any way to build the following MOF structures gives the metal and linker:
Clc1nc(Cl)c2c3c1ccc1c3c(c(c2Cl)Cl)cnc1.[Cu][Cu].[O-]C(=O)C#CC12CC(Cl)C(C(C1)Cl)(C(C2)Cl)C#CC(=O)[O-].[O-]C(=O)C#CC12CCC(C(C1Cl)Cl)(C(C2(Cl)Cl)(Cl)Cl)C#CC(=O)[O-] MOFid-v1.pcu.cat0;5068709
[O-]C(=O)c1cc(F)c(c(c1F)F)C(=O)[O-].[O-]C(=O)c1cc(F)c(cc1F)C(=O)[O-].[O-]C(=O)c1ccc(c(c1)F)C(=O)[O-].[Zn]O([Zn])[Zn] MOFid-v1.pcu.cat0
[O-]C(=O)c1ccc(c(c1)F)C(=O)[O-].[O-]C(=O)c1ccc(cc1)C(=O)[O-].[Zn]O([Zn])[Zn] MOFid-v1.pcu.cat1
[O-]C(=O)c1cc(F)c(c(c1F)F)C(=O)[O-].[Zn]O([Zn])[Zn] MOFid-v1.pcu.cat2
Clc1c(c2ccc(c(c2)Cl)C(=O)[O-])c(Cl)c(c(c1Cl)c1ccc(cc1)C(=O)[O-])Cl.Clc1cnccn1.[O-]C(=O)C1=C[C]=C(C=C1)C(=O)[O-].[Zn][Zn] MOFid-v1.pcu.cat0
For example given the following building blocks (metal and linkers)
- [O-]C(=O)c1ccc(c(c1)F)C(=O)[O-]
- [O-]C(=O)c1ccc(cc1)C(=O)[O-]
- [Zn]O([Zn])[Zn]
To make the following complex:
[O-]C(=O)c1ccc(c(c1)F)C(=O)[O-].[O-]C(=O)c1ccc(cc1)C(=O)[O-].[Zn]O([Zn])[Zn]
Any help or code example will be appreciated.
Thank you,
Hello and welcome!
Do you have an image or example structure of the mof and sbu complex topology?
That would help us determine if we can make it.
Andrew
Thanks for your reply,
For example something like this: https://mof.tech.northwestern.edu/mofs/15338
Given the linkers and metal: [O-]C(=O)c1cc(F)c(c(c1F)F)C(=O)[O-] [O-]C(=O)c1cc(F)c(cc1F)C(=O)[O-] [O-]C(=O)c1ccc(c(c1)F)C(=O)[O-] [Zn]O([Zn])[Zn]
We can build the MOF.
Thank you,
So, technically, stk can make things like this (see the Periodic COF topologies). However, as it stands, there is no 3D periodic PCU topology graph or vertices that will orient correctly.
Would you be interested in implementing this? if so, we can help you!
Yes, could you please help me to implement. No matter if the orientation is not correct.
If you are happy to have the first go, here are the things you need to implement:
- A new topology graph class that inherits from
Cof
: e.g.class PeriodicPcu(Cof):
. For this, I would copy one of the existing periodic topology graphs (e.g.PeriodicSquare
instk/src/stk/molecular/topology_graphs/cof/periodic_square.py
), and to make a new topology graph, you just need to define the unit cell vertices (positions and vertex class) and the edges between them. - For this new topology graph you will need new vertex classes in
stk/src/stk/molecular/topology_graphs/cof/vertices.py
that inherits from_CofVertex
(seeNonLinearVertex
in that file for an example). You will need two new classes, in my opinion, aLinear3DVertex
(for building blocks with 2 functional groups) and aNonLinear3DVertex
(for building blocks with 3 or more functional groups). A new vertex class only needs to redfine two methods:map_functional_groups_to_edges
andplace_building_block
. The first method defines how to assign an edge to a functional group, the second method defines how to place and orient a building block with respect to the edges connected to a vertex. There is quite a bit of testing to be done with both of these to get your structure right (avoid crossing bonds and bad alignment) -- again, I suggest using the existing vertices as starting points. - Finally, at any point, you can send a PR to this repository for either @lukasturcani or myself to review your code and we can help at those stages.
@lukasturcani - please edit/add/fill in details I have missed or got wrong. (I also think this could help the documentation if you think it is a good description)
Thanks for your help. To be honest, I was looking for a simpler way, something like this in molsimplify: http://hjkgrp.mit.edu/content/molsimplify-tutorial-7-easy-ligand-functionalization-molsimplify
Unfortunately, I couldn't install molsimplify yet due to technical issues. If I can't get the output from that, I will implement the code as you suggested. Thanks again for your help.
@ClinicalAI I am interested in doing the same thing, did you implement this? I don't want to duplicate work.
Cheers.