Addon and nodes for working with structural biology and molecular data in Blender.

Overview

Molecular Nodes 🧬 🔬 💻

Buy Me a Coffee to Keep Development Going!

Buy Me A Coffee

Join a Community of Blender SciVis People!

What is Molecular Nodes?

Molecular Nodes provides a convenient method for importing structural biology files into Blender, and several nodes for working with atomic data inside of Blender's Geometry Nodes.

Blender's Geometry Nodes provides a powerful interface for procedural modelling and animation. Currently it is limited in its ability to read any kind of structured data file as input, that isn't a 3D mesh. Molecular Nodes bridges this gap by providing an interface for converting .pdb and other file types into meshes that are usable by Geometry Nodes.

Acknowledgements

This addon is built crucially around the python library atomium, which provides a great lightweight and pure-python way to to parse a variety of structural biology files, that interface nicely with the built-in python interpreter that is bundled with Blender.

This addon is built using the excellent plugin for creating addons Serpens, which made the process of compiling a clear and concise addon, significantly reducing development time an creating a better addon overall.

Importantly none of this would be possible without the Blender and the Blender Foundation and the fantastic work of all the developers, from the community and the foundation itself.

This documentation is currently not complete for all of the nodes, but there should be enough to get you started. More complete documentation is in the works.

Installation

This addon is built with Blender v. 3.1.2, some of the nodes may break in earlier versions.

To install Molecular Nodes, download the latest release and install the addon through the preferences panel inside of Blender, and select the MolecularNodes_0.3.8.zip file

Edit -> Preferences -> Addons -> Install Screenshot highlighting the install addon button.

If the addon isn't highlighted, search for it and click the tick box to enable the addon. Screenshot highlighting the enable Molecular Nodes Addon

Installing Atomium

Windows: You must run Blender as Administrator to be able to install Atomium successfully.

Screenshot highlighting the Install Atomium Button

While still in the preferences panel, click the Install Atomium button to download and install the Atomium python library. This should only need to be done the first time you install Molecular Nodes. You will need to complete this step again if you reinstall Blender or upgrade the version.

The addon should now be enabled and available for use.

Loading Structures

You can load structures using the Molecular Nodes panel, which should be available at the top-right of the 3D viewport. You can press N to show & hide the side panels. Click on the Molecular Nodes tab to reveal the panel.

Screenshot highlighting the Molecular Nodes Penal

Molecular Nodes provides two ways to open files. You can fetch directly from the PDB by inputting the 4-character code into the top box and pressing the download button. This will download the file and open it inside of Blender.

Screenshot showing the interface of the Molecular Nodes Panel

You can also open a file saved on your local computer. Click the folder icon to navigate to your .pdb file, select it and press OK. Then press Open on the Molecular Nodes panel to read the file and load the model into Blender.

Using the Nodes

Atomic Properties

With Molecular Nodes enabled, create a geometry nodes node tree, and inside the add menu (Shift + A) there will be an additional category for Molecular Nodes. image

To access the atomic properties that are associated with the model, add the "Atomic Properties" node from Properties -> Atomic Properties and in the node, select the *_properties collection. This will scale the points according to their Atomic Radii, and make all of the atomic properties associated with the atoms (atomic number, is_backbone / is_sidechain) available for use inside of the node tree.

Styling

image

To quickly colour the structure, add the "Style Colour" node from Styling -> Style Colour, select a material for the atoms, and connect the atomic_number from the Properties node to the atomic_number of the style node. The outputted colour becomes an output for the node tree.

image

Name the output for the node tree in the modifier tab: image

And add an attribute node to the shader, inputting the name for the colour output fromt the GN node tree, in this case colour. image

Voila!

By default, the atoms are 'point clouds' and only visible inside of Cycles.

The atoms should now be visible, inside of the Cycles render engine: image

To make the atoms visible inside of EEVEE, use the Styling -> Atoms EEVEE node. You will need to create and assign a material for each element individually.

image

Animating Frames

To animate between frames of a .pdb file, add the Animate Frames node from Animation -> Animate Frames and choose the *_frames collection to give the model the infomation of the different structures. You can now animate between the frames by using the Animate 0...1 slider which will animate between the first frame (0) and the last frame (1). Attach the Animate Node from Animation -> Animate to automatically play through the frames.

image

You can now play back the animation!

In the example below, I create the .pdb frames from this tweet and imported them with the steps above, and added a Random Vector based on the chain number, to colour the carbons of the different chains different colours.

Want to support the development of this addon? Buy me a coffee! (it took a lot of them to make it)

Buy Me A Coffee

Comments
  • Problem with the Atomium instalation on windows?

    Problem with the Atomium instalation on windows?

    I get the error below when trying to import a pdb-file, online or localy.

    I have followed the steps in the instalation guide: I run Blender as an administrator on Windows 10, and after installing the add-on, i click the button to install Atomium. I get a confirmation that Atomium is successfully installed.

    In the MolecularNodes panel i click the "Download" / "Open" button and get the error below. I assume the it is because the Atomium library is not properly installed.

    Python: Traceback (most recent call last):
      File "C:\Users\Jonas\AppData\Roaming\Blender Foundation\Blender\3.1\scripts\addons\molecular_nodes\__init__.py", line 1401, in execute
        sna_func_import_structure_EE5B6(bpy.context.scene.sna_pdb_code,
      File "C:\Users\Jonas\AppData\Roaming\Blender Foundation\Blender\3.1\scripts\addons\molecular_nodes\__init__.py", line 1134, in sna_func_import_structure_EE5B6
        pdb = atomium.fetch(pdb_id)
    UnboundLocalError: local variable 'atomium' referenced before assignment
    
    location: <unknown location>:-1
    

    I am very curious to try this amazing add-on, hope that you can help resolve the issue.

    bug 
    opened by chromascope 36
  • small chemical compounds atoms problem

    small chemical compounds atoms problem

    hello, when i render my model, some problem appear.

    1. i use chimera to generate small molecue dymamics file (.pdb)
    2. render lost atom -br see 2d structure reference:https://pubchem.ncbi.nlm.nih.gov/compound/66789061
    3. model file and render results plz see [https://github.com/wanjiangbo1985/mdynamics]

    thank u for your great work

    wanjiangbo

    bug 
    opened by wanjiangbo1985 17
  • Color by ChainID with specific color schemes

    Color by ChainID with specific color schemes

    Hi Brady,

    Thanks for developing such an awesome node for the scientific community. I'm just getting taste of the depth of Blender and your node while watching your tutorials to reproduce. I found most of functionalities and logical flows are very intuitive and I believe I can learn ton more by just simply connecting nodes here and there.

    Unfortunately, I'm having a bit of difficulty with coloring ribbon/surface/atom by chain ID manually rather than by random value node. For example, in ChimeraX, I would simply do "color /D #hexColor target c" for cartoon coloring with a specific color on a specific chain but I can't figure out how i can do the equivalent thing in this context.

    Can you please give me some hints if possible?

    Thank you so much.

    best, heejong

    opened by heejongkim 14
  • Chain ids not read correctly

    Chain ids not read correctly

    I am trying to colour a dimeric protein based on chain id, but the chain ids in the pdb seem to get mangled during the import. Or maybe I am misunderstanding something. My setup is pretty simple (see image below). I take the chain_number and connect it to a Map Range node, mapping 1-2 to 0-1 (tried different ranges), which is then passed to a ColorRamp node. The colour from the ramp is passed to all elements of a MOL_style_colour node, which in turn connects to the geometry output. However, the resulting colouring seems more or less random, albeit anticorrelated between the two chains (see image). The chain labels for the two monomers in the pdb file are C and D. Pymol seems to handle this fine (third image), so I don't think the pdb file is broken.

    Is this a bug? I will try and see if I can spot something in the source code and update if I find something suspicious. Screenshot 2022-09-27 at 12 48 40 Screenshot 2022-09-27 at 12 48 46 Screenshot 2022-09-27 at 13 00 48

    opened by ErikMarklund 12
  • PDB without 4-character code

    PDB without 4-character code

    I'm trying to load a PDB from a MD simulation from a folder. It has no 4-character code and all the times i tried to, it failed.

    Is there a way to load a "custom" pdb or only from PDBDatabank?

    image

    Thank you!

    enhancement 
    opened by Alexsg14 12
  • Group Input Node not Available

    Group Input Node not Available

    @orbeckst Thanks for the installation guide! That's really helpful and I got atomium and MDA linking to work(now both buttons are grey). When I was trying to load the pdb and xtc, I still got the following error. It seems to be something from blender blender-bug .

    Originally posted by @ChenouZhang in https://github.com/BradyAJohnston/MolecularNodes/issues/24#issuecomment-1174447127

    opened by BradyAJohnston 10
  • Atomium and big pdb file?

    Atomium and big pdb file?

    Hello Brady :)

    Long time ago I made a video on VMD of my Norovirus Capsid, and I thought that it could be a good test for your tool (Since I have 600K+ atom in the PDB). Here it is (just 1 state) morph_state001-capsid.zip

    The problem is that only one part seems to be read since the numbering stop at 99999 (cf. Screenshot 1). I tried different format (convertion with Pymol to mmtf, mmcif, cif, pdb.gz, cif.gz) and it fails for other format (But here the problem seems to come from the atomium library for reading mmtf or mmcif when the output comme from Pymol maybe ?)

    For this issue maybe the problem come from the atomium library itself ? But I wanted to repport it since with this new render system it seems possible to load very big systems, and unfortunatly the "assembly" coming from the PDB is splitted into different models (so your addon think it's a trajectory)

    Anyway, here's some extra information ⤵️ and thank you again for this already great piece of work =D Thibault.

    Screenshot 1: image

    traceback for loading when it's mmtf

    Python: Traceback (most recent call last):
      File "C:\Users\tubia\AppData\Roaming\Blender Foundation\Blender\3.1\scripts\addons\molecular_nodes\__init__.py", line 80, in execute
        sna_func_import_structure_EE5B6(bpy.context.scene.sna_pdb_code,
      File "C:\Users\tubia\AppData\Roaming\Blender Foundation\Blender\3.1\scripts\addons\molecular_nodes\__init__.py", line 1137, in sna_func_import_structure_EE5B6
        pdb = atomium.open(pdb_path)
      File "C:\Users\tubia\AppData\Roaming\Python\Python310\site-packages\atomium\utilities.py", line 41, in open
        return parse_string(filestring, path, *args, **kwargs)
      File "C:\Users\tubia\AppData\Roaming\Python\Python310\site-packages\atomium\utilities.py", line 122, in parse_string
        parsed = file_func(filestring)
      File "C:\Users\tubia\AppData\Roaming\Python\Python310\site-packages\atomium\mmtf.py", line 18, in mmtf_bytes_to_mmtf_dict
        return decode_dict(raw)
      File "C:\Users\tubia\AppData\Roaming\Python\Python310\site-packages\atomium\mmtf.py", line 40, in decode_dict
        new_value = [decode_dict(x) for x in new_value]
      File "C:\Users\tubia\AppData\Roaming\Python\Python310\site-packages\atomium\mmtf.py", line 40, in <listcomp>
        new_value = [decode_dict(x) for x in new_value]
      File "C:\Users\tubia\AppData\Roaming\Python\Python310\site-packages\atomium\mmtf.py", line 37, in decode_dict
        new_value = parse_binary_field(new_value)
      File "C:\Users\tubia\AppData\Roaming\Python\Python310\site-packages\atomium\mmtf.py", line 56, in parse_binary_field
        codec, length, params = struct.unpack(">iii", b[:12])
    struct.error: unpack requires a buffer of 12 bytes
    
    location: <unknown location>:-1
    

    Traceback for loading when it's mmcif

    Python: Traceback (most recent call last):
      File "C:\Users\tubia\AppData\Roaming\Python\Python310\site-packages\atomium\pdb.py", line 506, in add_atom_to_non_polymer
        ] = atom_line_to_dict(line, aniso_dict)
      File "C:\Users\tubia\AppData\Roaming\Python\Python310\site-packages\atomium\pdb.py", line 530, in atom_line_to_dict
        a["x"] = float(line[30:38].strip())
    ValueError: could not convert string to float: '9 ? -57.'
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "C:\Users\tubia\AppData\Roaming\Blender Foundation\Blender\3.1\scripts\addons\molecular_nodes\__init__.py", line 80, in execute
        sna_func_import_structure_EE5B6(bpy.context.scene.sna_pdb_code,
      File "C:\Users\tubia\AppData\Roaming\Blender Foundation\Blender\3.1\scripts\addons\molecular_nodes\__init__.py", line 1137, in sna_func_import_structure_EE5B6
        pdb = atomium.open(pdb_path)
      File "C:\Users\tubia\AppData\Roaming\Python\Python310\site-packages\atomium\utilities.py", line 41, in open
        return parse_string(filestring, path, *args, **kwargs)
      File "C:\Users\tubia\AppData\Roaming\Python\Python310\site-packages\atomium\utilities.py", line 124, in parse_string
        parsed = data_func(parsed)
      File "C:\Users\tubia\AppData\Roaming\Python\Python310\site-packages\atomium\pdb.py", line 86, in pdb_dict_to_data_dict
        update_models_list(pdb_dict, data_dict)
      File "C:\Users\tubia\AppData\Roaming\Python\Python310\site-packages\atomium\pdb.py", line 158, in update_models_list
        add_atom_to_non_polymer(line, model, res_id, aniso, full_names)
      File "C:\Users\tubia\AppData\Roaming\Python\Python310\site-packages\atomium\pdb.py", line 512, in add_atom_to_non_polymer
        "atoms": {int(line[6:11]): atom_line_to_dict(line, aniso_dict)}
      File "C:\Users\tubia\AppData\Roaming\Python\Python310\site-packages\atomium\pdb.py", line 530, in atom_line_to_dict
        a["x"] = float(line[30:38].strip())
    ValueError: could not convert string to float: '9 ? -57.'
    
    location: <unknown location>:-1
    
    enhancement 
    opened by tubiana 9
  • No way to distinguish waters in the structure.

    No way to distinguish waters in the structure.

    Currently there is no way to select, delete or distinguish water molecules in the structures that are imported.

    Having a is_water property would fix this issue.

    enhancement 
    opened by BradyAJohnston 8
  • MOL_atomic properties not a library

    MOL_atomic properties not a library

    Hi!

    I installed MolecularNodes, both the add-on and the atomium installation was said to be fine. However, when I tried to load a pdb file (even from pdb or file), I get the following error: image Blender version: 2.93.4, add-on version: 0.4.0

    What could the the issue?

    opened by Furman-Lab 8
  • Numerical Representation of Atom Name

    Numerical Representation of Atom Name

    To enable features like secondary structure detection and cartoon representations of proteins and nucleic acids, having the atom name field as an attribute inside of MN / GN.

    For some atoms this is currently hardcoded like is_alpha_carbon attribute field for alpha carbons, but this should be used more broadly so selections of particular parts of particular amino acids and molecules would be possible.

    The question would be how to numerically encode this information. For example, an array of atom names ['C', 'O', 'C1, 'C'] could be alphabetically ranked and numerically encoded as [0, 2, 1, 0] for GN to understand it.

    From looking into it briefly, I haven't been able to find a definitive list of which atom names are pre-defined and possible to be used. I assume that there is a common list for the 20 natural amino acids and the different nucleic acids, but then it could potentially be defined by users for more edge cases?

    Looking at an example structure 6n2y:

    import MolecularNodes as mn
    import numpy as np
    mol, file = mn.load.open_structure_rcsb('6n2y')
    np.unique(mol.atom_name)
    
    array(['C', "C1'", 'C2', "C2'", "C3'", 'C4', "C4'", 'C5', "C5'", 'C6',
           'C8', 'CA', 'CB', 'CD', 'CD1', 'CD2', 'CE', 'CE1', 'CE2', 'CE3',
           'CG', 'CG1', 'CG2', 'CH2', 'CZ', 'CZ2', 'CZ3', 'MG', 'N', 'N1',
           'N3', 'N6', 'N7', 'N9', 'ND1', 'ND2', 'NE', 'NE1', 'NE2', 'NH1',
           'NH2', 'NZ', 'O', 'O1', 'O1A', 'O1B', 'O1G', 'O2', "O2'", 'O2A',
           'O2B', 'O2G', 'O3', "O3'", 'O3A', 'O3B', 'O3G', 'O4', "O4'", "O5'",
           'OD1', 'OD2', 'OE1', 'OE2', 'OG', 'OG1', 'OH', 'P', 'PA', 'PB',
           'PG', 'SD', 'SG'], dtype='<U6')
    

    One could use a set of some amount to generate a list to work from. If you then have that list - how do you order it? So far I have just been encoding things in alphabetical order which I believe works well for amino acids. For these atom names however Having O so far down the list seems wrong, and I feel like the backbone atoms should be listed first. This could potentially make it easier to work with from a human perspective when having to manually define nodes inside of Blender to work with the numerical representations of these atom names. If you order the backbone atom names higher, should you also apply a level of order to the other atom names as well? If you end up with atom names which weren't accounted for, then where will they fall within the ordering?

    I would love any feedback or comments on the matter. Unfortunately, this will have to be somewhat hardcoded inside the nodes themselves, so updating will be tricky and a logical implementation the first time will be ideal.

    enhancement help wanted 
    opened by BradyAJohnston 7
  • AA_sequence_number not passed on with MOL_style_ribbon

    AA_sequence_number not passed on with MOL_style_ribbon

    I am struggling to get the AA_sequence_number attribute to work with MOL_style_ribbon. This is problematic if I want to use the sequence ID for something other than colouring, for example, the emission strength of the material.

    I have made an example below, which I tweak to show the behaviour with different node wiring. It is a dimer with chain_number 1 and 2, and each monomer has 129 aa, which are properly numbered in the pdb file. I try to store AA_sequence_number after mapping to the range 0–1 in a named property 'bzz'.

    Using the chain_number instead of AA_sequence_number works fine. The chains get different colour by passing bzz through a color_ramp in the material node tree. Screenshot 2022-10-06 at 13 39 51

    Mapping and storing AA_sequence_number doesn't work however. Screenshot 2022-10-06 at 13 40 09

    I know that AA_sequence_number is correct before the MOL_style_ribbon. I can for example use it to set the colour of C atoms and use the Color attribute for colouring the material. Note however that this doesn't solve the general problem, because I might want to use the attribute for something else, in addition to some clever colouring based on other features. Screenshot 2022-10-06 at 13 40 20

    I can also access chain_number directly from the materials node tree, but AA_sequence_number is a dead end. Screenshot 2022-10-06 at 13 42 04 Screenshot 2022-10-06 at 13 42 25

    I have inspected the geometry in the spreadsheet editor via a viewer node, and indeed the points are rich with attributes before the MOL_style_ribbon node, but the geometry that comes out have lost most of the attributes. I don't see a good reason why chain_number can be passed on to the ribbons but not AA_sequence_number.

    enhancement 
    opened by ErikMarklund 7
  • Multi-Model `b_factor` currently not available

    Multi-Model `b_factor` currently not available

    While previously using atomium for parsing, b_factor on a per-model basis was available.

    With the switch to Biotite, this is currently not available and b_factor is now taken from the first model and used for all other models as well.

    The issue is raised here and a fix will hopefully be coming when new functionality is added Biotite.

    bug 
    opened by BradyAJohnston 3
  • Biological Assembly from mmCIF

    Biological Assembly from mmCIF

    Attempt for a General Support for mmCIF biological assembly. Some code extract from ePMV to create the instance mesh. Handle cellpack cif files. I dont know if there is a performance difference between geometrynode and Instancing on Faces using the regular interface. Two examples : 2PLV and a cellpack model. image image

    opened by corredD 4
  • Support .MOL / .sdf files

    Support .MOL / .sdf files

    Biotite can read other more chemically-oriented file types. Need to add specific support for it inside of MN. Will require some tweaking as they won't contain the same types of attributes that protein-oriented file types encode.

    bug enhancement help wanted 
    opened by BradyAJohnston 0
  • Installation of Molecular Nodes 2.0.2 with Blender 3.4.0 on M1 Max Mac Ventura 13.0

    Installation of Molecular Nodes 2.0.2 with Blender 3.4.0 on M1 Max Mac Ventura 13.0

    Hi, I tried to install Molecular Nodes 2.0.2 with Blender 3.4.0 on M1 Max Mac Ventura 13.0. After installing the .zip file, there is a button "install packages" in the Molecular Nodes panel. When I click it, I see a beachball and after a while it says "Failed to install required packages. Please check log file: ..." That log file just contains this:

    Installer Started: 2022-12-17 15:55:53.117289

    ################################### Installer finished: 2022-12-17 15:56:24.477652 ###################################

    Any idea what might be the problem?

    Thanks, Gregor

    bug 
    opened by gha2012 4
Releases(v2.2.2)
  • v2.2.2(Jan 6, 2023)

  • v2.2.1(Jan 5, 2023)

    Added

    • multi-model b_factor is added when importing from .pdb files via biotite #133
    • 'Invert' field option to atom_properties and other selection nodes to optionally invert the selection
    • Added better detection of ligands and modifcations (such as sugars) and a separate selection node for them. Currently ligands are stored on the res_name attribute, starting at 100 and incrementing one for each unique ligand. (should mostly address #79)

    Fixed

    • include_bonds option was not being utilised on MD import #132
    • MOL_animate_res_wiggle was wiggling the OXT (res_name == 38) oxygen when a peptide chain ended. Added additional selection to not wiggle this atom, which should only ever appear when a peptide chain terminates.
    • fixed import of vdw_radii for elements not supported by biotite (such as Fe) by moving vdw_radii to the data dictionary rather than relying on a function from biotite which had a limited dictionary for vdw_radii lookup
    Source code(tar.gz)
    Source code(zip)
    MolecularNodes_2.2.1.zip(830.10 KB)
  • v2.2.0(Jan 2, 2023)

    Reimplemented several nodes from the previous MN, as well as adding styling for nucleic acids. More boolean attributes when importing via MDAnalysis and frame-specific information via occupancy when importing via MDAnalysis.

    Added

    • atom_name attribute, which is a numerical representation of the atom name (C, CA, C5 etc)
      • Dicussed in #118
      • Allows for more precise selections for new styling and animation nodes
    • Reimplemented amino acid 'wiggle' node: using the atom_name attribute
      • 3x faster with the improved atom_name attribute and refactor of the underlying nodes
    • Reimplemented the amino acid to curve node
    • Ribbon Style Nucleic: A ribbon representation for nucleic acids to complement the ribbon represenation of the proteins from alpha carbons. Enabled now thanks to the atom_name attribute.
    • Capturing the Index field in the selection node before the selection occurs, and added an Index field input to the MOL_animate_frames node to enable selection to occur before animating between frames, if the Pre-Sel Index field is used in the Index field of the MOL_animate_frames node
    • Added cutoff field for limiting the interpolation of atoms between frames based on a distance cutoff
    • Added bonds through MDAnalysis import when a trajectory supports it #129
    • Added is_solvent(), is_nucleic() and is_peptide() attributes when importing via MDAnalysis
    • Added frame-specific attribute occupancy which is added to each frame of the trajectory when imported via MDAnalysis. #128

    Fixed

    • Changed naming of MOL_style_atoms to MOL_style_atoms_cycles and MOL_style_ribbon to MOL_style_ribbon_protein
    Source code(tar.gz)
    Source code(zip)
    MolecularNodes_2.2.0.zip(802.47 KB)
  • v2.1.0(Dec 31, 2022)

    A number of bug fixes and minor improvements. Only major addition is the ability to specify custom string selections when importing via MDAnalysis.

    Added

    • Proper support for Fields for ribbon width, enabling 'licorice' representation amoung others
    • Tooltips documentation for each of the custom node groups that can be added in Geometry Nodes
    • More selection nodes for distance, XYZ slice and whole residues.
    • Custom selections using a string when importing via MDAnalysis #123
    • Added option to disable interpolation of atom positions between frames
    • Added node for animating any field between frames of a trajectory (no fields currently added on import, but used in the new Aniamte Frames backend)
    • UVs are now available for the ribbon mesh style, idea from ErikMarklund and implemented by quellenform

    Fixed

    • Error when defaulting to connect_via_distance() when importing with 'Find Bonds' enabled
    • Adding of a color node which was mis-labelled and couldn't be added
    • Non-.gro topology files were failling to add vdw_radii attribute #124
    • Remove use of np.int which is now deprecated and was causing errors when linking python on M1 Mac
    • Attributes now available on ribbon mesh which are sampled from backbone
    • Changed starting material to be appended instead of created, which should avoid duplication of material.
    Source code(tar.gz)
    Source code(zip)
    MolecularNodes_2.1.0.zip(661.58 KB)
  • v2.0.2(Dec 13, 2022)

  • v2.0.1(Dec 12, 2022)

    I never really released a v1.0 of these nodes, but given this was a complete re-write and is incompatible with earlier versions of Molecular Nodes, I figured I would try to make that incompatibility obvious by labelling this as v2.0.

    Major Changes

    A complete rewrite of Molecular Nodes, from the ground up. The underlying python libraries have changed, along with most of the nodes and internal attribute names so this will be a breaking change with previous versions.

    • Remove usage of Atomium and switched to Biotite for most internal structural file parsing

    • Removed reliance upon Serpens to build the addon. Can now be developed by anybody without the requirements of additional Blender addons.

      • Aspects of the addon can now have changes tracked properly by git, rather than inside a binary .blend Serpens file.
      • Now also allows easier and clearer contributions from others who wish to contribute
      • Custom node trees still remain opaque to git unfortunately
    • Attributes are now created and stored on the molecular model itself, removing the need for properties models that store the data XYZ positions. Makes the import process clearer, more robust and more easily expandable.

    • Bond information is available by default as edges of the mesh along with bond types

    • Improve MDAnalysis installation and usage internally

    • Expose operators and functions to Blender Python console to enable user scripting with the addon

    import MolecularNodes as mn
    
    # to fetch structures from the protein data bank
    struc_list = ['4ozs', '1xi4', '6n2y']
    for pdb in struc_list:
        mn.load.molecule_rcsb(pdb, starting_style = 1)
    
    # to open a local structure file
    mn.load.molecule_local('file_path_here.pdb', 'SomeMoleculeName', starting_style = 2)
    

    Current Limitations

    Due the nature of a complete rewrite, not everything that was in previous versions has been ported over. The new version of Molecular Nodes also commits to using new nodes introduced in Blender 3.4 and thus most nodes are incompatible with earlier versions of Blender.

    Missing Nodes

    Some nodes have still not been ported from the old Molecular Nodes, such as the Amino Acid Wiggle and the Amino Acid to curve nodes. Membranes have also not yet been ported.

    Limited Import Functionality

    While the code for importing structures is now more robust, it requires more effort to write and so not as many structure formats are currently supported. PDB / PDBx & mmCIF are supported as well as mmtf via Biotite. The MD formats via MDAnalysis should remain unchanged and still supported. The .mol and other more chemistry-specific formats are yet to have thorough support and testing, but I welcome pull requests from anyone who would be interested in working on it.

    Source code(tar.gz)
    Source code(zip)
    MolecularNodes_2.0.1.zip(819.79 KB)
  • v0.13(Sep 22, 2022)

  • v0.12.2(Sep 6, 2022)

  • v0.12.1(Sep 4, 2022)

    What's Changed

    • Multiple Bug Fixes by @BradyAJohnston in https://github.com/BradyAJohnston/MolecularNodes/pull/66
      • Fix error with Blender forgetting where the MDAnalysis installation was between sessions #45
      • Fix error with relative file paths breaking import #64

    Full Changelog: https://github.com/BradyAJohnston/MolecularNodes/compare/v0.12...v0.12.1

    Source code(tar.gz)
    Source code(zip)
    molecular_nodes_0.12.1.zip(1.22 MB)
  • v0.12(Aug 31, 2022)

  • v0.11(Aug 9, 2022)

  • v0.10.5(Jul 25, 2022)

  • v0.10.4(Jul 18, 2022)

  • v0.10.2(Jul 17, 2022)

  • v0.10(Jul 14, 2022)

  • v0.9.2(Jul 13, 2022)

  • v0.9.1(Jul 10, 2022)

  • v0.9(Jul 9, 2022)

    This release tweaks and adds some more styling (+ a 'Ball n Stick' preset) and a number of new selection nodes to improve the selection algebra.

    Bug Fixes:

    • Fixed error with with the scaling on biological assemblies that required translation.
    • Fixed non-functioning Style Atom node

    New Nodes:

    • Selection Element Name (first 20 elements)
    • Selection Atomic Number
    • Selection AA Number
    • Selection AA Number Range
    • Style Ball and Stick

    Also added the boolean math node under Molecular Nodes for ease of access for atomic selection algebra.

    Source code(tar.gz)
    Source code(zip)
  • v0.8(Jun 28, 2022)

    Bug Fixes;

    • Fixed breaking import with elements higher than atomic number 20
    • Fixed detection of ligands as different chains on import
    • Ensures that node tree is set up for Blender 3.2 import
    • Fixed broken EEEVEE atoms node (bumped to v0.8.1)

    New Nodes:

    • Ligands are now shown on the chain selection node
    • Center on selection node
    • Improved EEVEE atoms node
    • New and improved surface style node
    • New and improved ribbon style node
    • Added Brownian motion node under animation
    • Overhauled the sticks & find-bond nodes
    • Added node for more intuitive atom selection (without having to manually delete / separate geometry)
    Source code(tar.gz)
    Source code(zip)
    molecular_nodes_0.8.1.zip(663.40 KB)
  • v0.7(Jun 13, 2022)

  • v0.5.21(May 26, 2022)

    Multiple Bug Fixes:

    • Fixed custom chain selection node being added #27
    • Fixed AA name selection node being added #28
    • Fixed alpha carbon selection as part of atomic properties
    • Fixed problem where last atom of properties were being omitted, leading to incorrect element assignment to the last atom in the model #25

    Update:

    • Fixes broken UI not building. Bump version to 0.5.22

    Update:

    • fixes broken adding of nodes. Bump version to 0.5.23
    Source code(tar.gz)
    Source code(zip)
    molecular_nodes_0.5.23.zip(534.09 KB)
  • v0.5.15(May 23, 2022)

    EDIT: Quick fix added to solve the creation of node trees on MD import. Bumped version number to 0.5.16 EDIT2: additional quick fix to solve appending of nodes on import. Bumped version number to 0.5.17 EDIT3: additional quick change: changed default link for animate note from animate to animate mapped. Bumped version number to 0.5.18 EDIT4: quick fix: fixed import breaking when MD import did not detect any chains from topology. Bumped to v 0.5.19 EDIT5: quick fix: added node for interpolating between mismatched frames & fixed multi-append to single .blender file. Bumped to 0.5.20

    Additional release for Blender 3.1.2 to enable the beta-testing of additional features for importing MD trajectories like .dcd and .xtc files via the MDAnalysis package.

    • Addresses some issues raised in #13 preparing for a Blender 3.2 release, much work still needs to be done.

    New Features

    • Rework of the Molecular Nodes panel, added clearer categories for type of file import.
    • Moved panel to the Scene Properties tab, with optional panel in the 3D viewport enabled via the add-on preferences.
    • Import of topology and trajectory files from MD programs such as GROMACS etc, enabled via MDAnalysis package.
    • Launch of the documentation website to present more in-depth documentation than is possible with a GitHub README.
    • Added node to interpolate between multiple frames that have mismatching number of points. Currently atomic properties are not interpolated between frames except for b-factor.

    What's Changed

    • Mda import by @BradyAJohnston in https://github.com/BradyAJohnston/MolecularNodes/pull/23

    New Contributors

    • @BradyAJohnston made their first contribution in https://github.com/BradyAJohnston/MolecularNodes/pull/23

    Full Changelog: https://github.com/BradyAJohnston/MolecularNodes/compare/v0.4.1...v0.5.15

    Source code(tar.gz)
    Source code(zip)
    molecular_nodes_0.5.20.zip(717.56 KB)
  • v0.4.1(May 12, 2022)

    DOI

    Improvements:

    • No longer prompts to confirm when downloading or opening a structure file #18
    • Makes b_factors available per-frame, from the Animate Frames node #6, b_factors are also interpolated between frames when that option is selected.
    • New styling node for Ribbon representation, based on the alpha carbons.

    Bug Fixes

    • Fixes problemwith not-defined atom-types, causing the failure of all attributes to be imported #15
    • output_name for the object custom property previously failed to be assigned properly when opening a local file #17

    Future Releases

    This will likely be the last release targeting Blender 3.1.2, pending major bugs that arise, development will now focus on updating and improving the nodes to work with the Named Attributes that are coming in Blender 3.2 which will greatly improve the workflow and node trees. These future versions however will not be backwards compatible with previous versions of Blender or Molecular Nodes.

    Source code(tar.gz)
    Source code(zip)
    molecular_nodes_0.4.1.zip(513.54 KB)
  • 0.4(May 2, 2022)

    Import and setup are now much faster, with everything required for you to be able to see the atoms automatically set up on import, speeding up the workflow of importing multiple molecules.

    Cleanup of multiple node names and socket names, with some additional new features:

    New Features:

    • Auto-setup of GN node tree and shader node tree upon molecule import, should now be able to render molecules after 1 click.
    • Added a node for the selection of chains by their name, which is unique to each molecule.
    • Added ability to generate bonds on import (can be slow for large structures)
    • Added ability to build biological assembly on import.

    Bug Fixes:

    • Resolved errors with atomium installation and import that was reported on multiple systems (#4)
    • Fixed the is_alpha_carbon and not_alpha_carbon selections to not include other backbone carbons (#11)
    • Fixed Scale Radii node to properly scale the selected radii of the atoms
    • Fixed error in 0.3.8 release that was incorrectly assigning atomic properties to the atoms
    Source code(tar.gz)
    Source code(zip)
    molecular_nodes_0.4.0.zip(485.59 KB)
  • beta(Apr 26, 2022)

Owner
Brady Johnston
Biochemist and structural biologist interested in compelling visualisations of complex biological data.
Brady Johnston
This is a Python wrapper for TA-LIB based on Cython instead of SWIG.

TA-Lib This is a Python wrapper for TA-LIB based on Cython instead of SWIG. From the homepage: TA-Lib is widely used by trading software developers re

John Benediktsson 7.3k Jan 03, 2023
A facial recognition doorbell system using a Raspberry Pi

Facial Recognition Doorbell This project expands on the person-detecting doorbell system to allow it to identify faces, and announce names accordingly

rydercalmdown 22 Apr 15, 2022
Nonuniform-to-Uniform Quantization: Towards Accurate Quantization via Generalized Straight-Through Estimation. In CVPR 2022.

Nonuniform-to-Uniform Quantization This repository contains the training code of N2UQ introduced in our CVPR 2022 paper: "Nonuniform-to-Uniform Quanti

Zechun Liu 60 Dec 28, 2022
A hue shift helper for OBS

obs-hue-shift A hue shift helper for OBS This is a repo based on the really nice script Hegemege made. The original script can be found https://gist.g

Alexis Tyler 1 Jan 10, 2022
A Python library for adversarial machine learning focusing on benchmarking adversarial robustness.

ARES This repository contains the code for ARES (Adversarial Robustness Evaluation for Safety), a Python library for adversarial machine learning rese

Tsinghua Machine Learning Group 377 Dec 20, 2022
yufan 81 Dec 08, 2022
In this project, two programs can help you take full agvantage of time on the model training with a remote server

In this project, two programs can help you take full agvantage of time on the model training with a remote server, which can push notification to your phone about the information during model trainin

GrayLee 8 Dec 27, 2022
Deep Unsupervised 3D SfM Face Reconstruction Based on Massive Landmark Bundle Adjustment.

(ACMMM 2021 Oral) SfM Face Reconstruction Based on Massive Landmark Bundle Adjustment This repository shows two tasks: Face landmark detection and Fac

BoomStar 51 Dec 13, 2022
SPRING is a seq2seq model for Text-to-AMR and AMR-to-Text (AAAI2021).

SPRING This is the repo for SPRING (Symmetric ParsIng aNd Generation), a novel approach to semantic parsing and generation, presented at AAAI 2021. Wi

Sapienza NLP group 98 Dec 21, 2022
General Vision Benchmark, a project from OpenGVLab

Introduction We build GV-B(General Vision Benchmark) on Classification, Detection, Segmentation and Depth Estimation including 26 datasets for model e

174 Dec 27, 2022
Self Governing Neural Networks (SGNN): the Projection Layer

Self Governing Neural Networks (SGNN): the Projection Layer A SGNN's word projections preprocessing pipeline in scikit-learn In this notebook, we'll u

Guillaume Chevalier 22 Nov 06, 2022
A visualisation tool for Deep Reinforcement Learning

DRLVIS - Visualising Deep Reinforcement Learning Created by Marios Sirtmatsis with the support of Alex Bäuerle. DRLVis is an application used for visu

Marios Sirtmatsis 1 Nov 04, 2021
My implementation of Fully Convolutional Neural Networks in Keras

Keras-FCN This repository contains my implementation of Fully Convolutional Networks in Keras (Tensorflow backend). Currently, semantic segmentation c

The Duy Nguyen 15 Jan 13, 2020
chen2020iros: Learning an Overlap-based Observation Model for 3D LiDAR Localization.

Overlap-based 3D LiDAR Monte Carlo Localization This repo contains the code for our IROS2020 paper: Learning an Overlap-based Observation Model for 3D

Photogrammetry & Robotics Bonn 219 Dec 15, 2022
Face Library is an open source package for accurate and real-time face detection and recognition

Face Library Face Library is an open source package for accurate and real-time face detection and recognition. The package is built over OpenCV and us

52 Nov 09, 2022
Bu repo SAHI uygulamasını mantığını öğreniyoruz.

SAHI-Learn: SAHI'den Beraber Kodlamak İster Misiniz Herkese merhabalar ben Kadir Nar. SAHI kütüphanesine gönüllü geliştiriciyim. Bu repo SAHI kütüphan

Kadir Nar 11 Aug 22, 2022
Official Code Release for "TIP-Adapter: Training-free clIP-Adapter for Better Vision-Language Modeling"

Official Code Release for "TIP-Adapter: Training-free clIP-Adapter for Better Vision-Language Modeling" Pipeline of Tip-Adapter Tip-Adapter can provid

peng gao 187 Dec 28, 2022
An AI made using artificial intelligence (AI) and machine learning algorithms (ML) .

DTech.AIML An AI made using artificial intelligence (AI) and machine learning algorithms (ML) . This is created by help of some members in my team and

1 Jan 06, 2022
Config files for my GitHub profile.

Canalyst Candas Data Science Library Name Canalyst Candas Description Built by a former PM / analyst to give anyone with a little bit of Python knowle

Canalyst Candas 13 Jun 24, 2022
GndNet: Fast ground plane estimation and point cloud segmentation for autonomous vehicles using deep neural networks.

GndNet: Fast Ground plane Estimation and Point Cloud Segmentation for Autonomous Vehicles. Authors: Anshul Paigwar, Ozgur Erkent, David Sierra Gonzale

Anshul Paigwar 114 Dec 29, 2022