Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
ClinicalAI opened this issue Jan 27, 2022 · 7 comments
Open

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

ClinicalAI opened this issue Jan 27, 2022 · 7 comments

Comments

@ClinicalAI
Copy link

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,

@andrewtarzia
Copy link
Collaborator

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

@ClinicalAI
Copy link
Author

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,

@andrewtarzia
Copy link
Collaborator

andrewtarzia commented Jan 27, 2022

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!

@ClinicalAI
Copy link
Author

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

@andrewtarzia
Copy link
Collaborator

andrewtarzia commented Jan 27, 2022

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)

@ClinicalAI
Copy link
Author

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.

@KP-303
Copy link

KP-303 commented Apr 13, 2023

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

Cheers.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants