BradyAJohnston / MolecularNodes

Toolbox for molecular animations in Blender, powered by Geometry Nodes.
https://bradyajohnston.github.io/MolecularNodes/
GNU General Public License v3.0
902 stars 83 forks source link

Question about the radii used for atoms and probe in surface generation #609

Closed isohelio closed 1 month ago

isohelio commented 1 month ago

Hi, I'm really loving the Molecular Nodes software.

I've seen some questions about the settings for the molecular surface generation and thought I would just ask where the radii are defined for the different atom types.

I'm trying to recreate a surface which looks the one shown here, but I can't quite find settings that recreate it. This surface is generated using typical extended atom VdW radii, which are approx 1.6A for most of the atom types, and a probe radius also of 1.5A. In particular notice how the tyrosine side chain above the active site can be discerned.

These radii also generate surfaces that show good complementarity at surface interfaces. The structure is 621p from the PDB.

Many thanks for your help, Mike

https://x.com/isohelio/status/1297957357113282562

EgNFPGlXkAE6qi2

BradyAJohnston commented 1 month ago

The radii values are currently defined in the data.py: https://github.com/BradyAJohnston/MolecularNodes/blob/main/molecularnodes/data.py

Partially the reason the surfaces look a bit different, is that inside of Geometry Nodes we are limited with potential algorithms that we can implement based on the nodes that are available. As it develops more and more we can get closer and closer to the algorithms used for regular surface generation, but currently they are still approximations of the approach as best implemented via Geometry Nodes.

This will improve in the future, but for the time being there will likely just be a difference between the surfaces and this is hard to avoid.

isohelio commented 1 month ago

OK, thanks for the info.

Is the code for the surface generation part of this repo?

BradyAJohnston commented 1 month ago

Yes and no. There isn't code that is defining the surface generation, it is a pre-defined Geometry Nodes node group, that is stored in the MN_data_file.blend in this repo. It's not a great solution as the node groups aren't possible to be version controlled by git, but you can open up the node groups yourself and have a look at them. You can right click on the node group when you add the style surface and Edit Group to look inside to see what nodes are being used & what computations are being done internally.

isohelio commented 1 month ago

Thank you for the explanation.

If you had time for one final question, is there a blender api to call external processes/functions for geometry node calculations?

BradyAJohnston commented 1 month ago

The question around an API is a little complicated, there is an API to interact with Blender, and through that you can create a custom Geometry Nodes tree that will do the calculations on a specific bit of geometry, but you can't directly access the calculations of the individual nodes through the API