stk icon indicating copy to clipboard operation
stk copied to clipboard

Build a MOF with given building blocks (metal and linkers)

Open ClinicalAI opened this issue 3 years ago • 7 comments

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,

ClinicalAI avatar Jan 27 '22 01:01 ClinicalAI

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

andrewtarzia avatar Jan 27 '22 08:01 andrewtarzia

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,

ClinicalAI avatar Jan 27 '22 17:01 ClinicalAI

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!

andrewtarzia avatar Jan 27 '22 17:01 andrewtarzia

Yes, could you please help me to implement. No matter if the orientation is not correct.

ClinicalAI avatar Jan 27 '22 17:01 ClinicalAI

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 in stk/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 (see NonLinearVertex in that file for an example). You will need two new classes, in my opinion, a Linear3DVertex (for building blocks with 2 functional groups) and a NonLinear3DVertex (for building blocks with 3 or more functional groups). A new vertex class only needs to redfine two methods: map_functional_groups_to_edges and place_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)

andrewtarzia avatar Jan 27 '22 17:01 andrewtarzia

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 avatar Jan 27 '22 17:01 ClinicalAI

@ClinicalAI I am interested in doing the same thing, did you implement this? I don't want to duplicate work.

Cheers.

KP-303 avatar Apr 13 '23 10:04 KP-303