Attributes
Below are the attributes which are potentially created when a structure is imported. Explanations of type and domain conversions can be found in the Blender documentation here
World Scale
In Molecular Nodes, the world scale determines how real-world measurements are translated into the 3D environment of Blender which uses metres. Currently, 1 nanometre (nm) is equivalent to 1 metre (m). Scaling structural coordinates (which are in Å) by 0.1 correctly converts them and 0.1 is referred to as the world_scale.
This changed with Molecular Nodes v520: previously the world scale was 0.01, so 1 Å equalled 1 cm.
When an attribute is going to be read from the geometry, it is colored red like so: Index, chain_id, while when a specific data type is referenced it will be colored according to the data type like so: Int, Float, Vector, etc.
Data Types
Attribute Types
Attributes are always associated with Geometry. They will be stored on one of the domains of the geometry. The type of the attribute is determined by the type of the data it contains. The following types are supported by Geometry Nodes.
| Type | Description |
|---|---|
Int |
32-bit integers |
Float |
32-bit floating point numbers |
Bool |
A simple True or False value |
Vector |
A vector of (x, y, z) values. Can also be 2D, 3D or 4D although support outside of 3D vectors is limited. |
Matrix |
4x4 floating point matrices, also references as Transform inside of Geometry Nodes |
Color |
Linear RGBA colors, stored as (0..1, 0..1, 0..1, 0..1) values |
Rotation |
A (w, x, y, z) rotation that internally is represented as a quaternion, but can implicitly be converted to an Euler vector. |
Other Data Types
Additional data types which are not supported as Attributes but can be used in the node tree are:
| Type | Description |
|---|---|
String |
String support in Geometry Nodes is limited at the moment and you cannot store strings as attributes |
Object |
Access to objects in the 3D scene and their associated data |
Collection |
Access a collection of objects from the scene. Objects are returned as instances |
Material |
Material to be applied to the created geometry |
Menu |
A menu for selecting a value from a list of options |
Image |
A reference to an image data-block, for sampling or texturing |
Shader |
The output of shader nodes, used when building materials rather than geometry |
Bundle |
New in Blender 5.0: multiple sockets packed together and passed along a single link |
Closure |
New in Blender 5.0: a piece of node tree logic passed around as a value, to be evaluated elsewhere |
Attributes
All of the molecular attributes which are defined as strings such as chain_id, res_name, etc. are stored as integers in the geometry because Geometry Nodes does not support string attributes.
For chain_id, entity_id and other dynamic attributes, the unique values are first sorted alphabetically and then assigned an integer value based on their order.
For other attributes such as res_name, they are looked up from the dictionary and assigned an integer value.
Point Attributes
| Attribute | Type | Description |
|---|---|---|
Position |
Vector |
Coordinates in 3D space of the points, read from the molecular data file. They are scaled by the world scale 0.1 on import so that 1 nm == 1 m. |
b_factor |
Float |
The temperature factor for the atom on import. If importing an AlphaFold structure this corresponds to the pLDDT value. |
occupancy |
Float |
The crystallographic occupancy of the atom, or 0.0 if the file has none. |
charge |
Float |
The charge of the atom: partial charges when the topology provides them (e.g. simulation topologies), formal charges from structure files, or 0.0 if unavailable. |
vdw_radii |
Float |
The radii of the atom, stored in world space (~0.15). Values sourced from Wikipedia. |
lipophobicity |
Float |
Lipophobicity value for the atom, looked up from its residue and atom name. |
sec_struct |
Int |
Defines secondary structure for the residue the atom is part of. 0 for not a protein. 1 for helices, 2 for sheets, 3 for coils / unstructured. |
mass |
Float |
Mass of the element |
chain_id |
Int |
The integer representation of the chain ID, for it’s position in the sorted list of chain IDs in the structure. |
segid |
Int |
The index of the segment the atom belongs to, when the topology defines segments. The segment names are stored as metadata on the object. |
entity_id |
Int |
Multiple chains can be the same entity, if they are copies of the same protein that appear multiple times in the structure. Also sorted and assigned integers on import. |
res_name |
Int |
Residues are mapped to integer values based on the lookup table. |
res_id |
Int |
The residue number, which starts at 1 for the first residue in each chain. If a structure is truncated it might not start at 1. |
ures_id |
Int |
The ures_id starts at 0 and increases by 1 for each residue across the whole structure, compared to the res_id which starts at 1 and restarts at 1 for each chain. |
atomic_number |
Int |
Stores the atomic number of the atom for it’s position on the periodic table, instead of the element’s name. |
atom_name |
Int |
Atom names are mapped to integer values based on the lookup table. |
atom_types |
Int |
The force-field atom types from simulation topologies, sorted uniquely and assigned integers on import. The type names are stored as metadata on the object. |
Color |
Color |
Color of the atom, assigned on import but often changed in node trees. |
atom_id |
Int |
Unique ascending value for each atom in the file, starting at 1 |
is_alpha_carbon |
Bool |
Whether the atom is an alpha carbon (atom name CA, or BB for coarse-grained structures). |
is_side_chain |
Bool |
Whether the atom is part of a side chain: a peptide or nucleic atom that is not part of the backbone. |
is_backbone |
Bool |
Whether the atom is part of the peptide or nucleic backbone, based on its atom name. |
is_solvent |
Bool |
Whether the atom is part of a solvent molecule, based on its residue and atom names. |
is_nucleic |
Bool |
Whether the atom is part of a nucleic acid. |
is_peptide |
Bool |
Whether the atom is part of a peptide, including coarse-grained (Martini) beads. |
is_lipid |
Bool |
Whether the atom is part of a lipid, based on its residue name. |
is_hetero |
Bool |
Whether the atom is flagged as a hetero atom in the structure file. |
is_carb |
Bool |
Whether the atom is part of a carbohydrate, based on its residue name. |
Edge Attributes
Bonds between atoms are represented as edges in the geometry, and only the bond type is stored on the edge domain.
| Attribute | Type | Description |
|---|---|---|
bond_type |
Int |
The type of bond between the atoms. |
Bond types are currently the values used by biotite
| Bond Type | Integer Value | Description |
|---|---|---|
ANY |
0 |
Used if the actual type is unknown |
SINGLE |
1 |
Single bond |
DOUBLE |
2 |
Double bond |
TRIPLE |
3 |
Triple bond |
QUADRUPLE |
4 |
A quadruple bond |
AROMATIC_SINGLE |
5 |
Aromatic bond with a single formal bond |
AROMATIC_DOUBLE |
6 |
Aromatic bond with a double formal bond |
AROMATIC_TRIPLE |
7 |
Aromatic bond with a triple formal bond |
Domains
| Domain | Description |
|---|---|
Point |
Individual points of geometry. These can be the vertices in a mesh, the points in a point cloud, or the control points of a curve. |
Edge |
The edges of a mesh, defined as the indices between two points. |
Face |
A face of a mesh, defined as a collection of edges. |
Corner |
Corners of a face, where two edges meet. |
Curve |
A curve object, which contains multiple control points, but can itself store attributes. |
Instance |
Instances are references to other geometry. Instancing is useful for making lots of copies of some geometry for performance. |
Layer |
Layers are for Grease Pencil, and contain a collection of curves. |