Node

The data graph contains everything directly or indirectly added by the user through SAMSON’s user interface, plugins, etc. A data graph node has basic pre-defined data and functionalities to manage the data (models, apps, etc.).

All nodes in SAMSON’s data graph, e.g. atoms (samson.Modeling.StructralModel.Atom), bonds (samson.Modeling.StructralModel.Bond), etc., derive from samson.DataModel.DataGraph.Node.

Topology

SAMSON’s data graph is a directed graph, where each node has one and only one parent (with the exception of documents (samson.DataModel.Document.Document), which have no parent), and possibly some children. The parent of a node can never be directly set, but can be retrieved using the samson.DataModel.DataGraph.Node.getParent() function. Children are managed using the samson.DataModel.DataGraph.Node.addChild() and samson.DataModel.DataGraph.Node.removeChild() functions.

Node lifecycle

In SAMSON, a data graph node may go through four lifecycle stages:

Node identity

Each node in the data graph has a type, which may be retrieved using the ref getType function. For example, the type returned by the samson.Modeling.StructralModel.Atom class, which derives from the Node class, is Atom, while the type returned by the samson.Modeling.StructuralModel.StructuralModel class is StructuralModel. The samson.DataModel.DataGraph.Node.getTypeString() function is a convenience function that may be used to obtain a type of a node as a string.

# get a data graph node's type
node.type

# get a data graph node's type as a string
node.typeString

# the same as before
sam.DataModel.DataGraph.Node.getTypeString(node.type)

You can also check for a particular type of a node e.g. whether it is a visual model, an interaction mode, a structural particle, etc.

Let’s, for example, erase all visual models in the current selection:

# loop over all currently selected nodes in the active document
for node in SAMSON.getActiveDocument().getSelectedNodes():

        # check if this node is a visual model
        if node.isVisualModel():

                # turn the undo system on
                SAMSON.beginHolding("Erase selected visual models")

                # erase the node
                node.erase()

                # turn the undo system off
                SAMSON.endHolding()

Each data graph node also has a unique index, that is managed internally by SAMSON. All indices are contiguous unsigned integers between 0 and n-1, where n is the number of data graph nodes. As a result, the node index is not permanent: when node i is deleted (and i is different from n-1), then node n-1 becomes node i. Node indices are used for example when picking objects in a viewport, by writing integers into the framebuffer instead of colors. The unique node index can be retrieved using samson.DataModel.DataGraph.Node.getNodeIndex().

Flags

Each data graph node has four flags:

These flags are accessed through functions of samson.DataModel.DataGraph.Node and, except for the highlighting flag which has temporary purposes, changing these flags’ values is “undoable”.

The samson.DataModel.DataGraph.Node.getFlags() function returns an integer that combines the highlighting and selection flags, as well as the “mobility flag” (samson.Modeling.StructuralModel.Particle.mobilityFlag) of particles (atoms and pseudo-atoms).

Color schemes

Each data graph node may have a material (samson.DataModel.DataGraph.Material), which may affect its rendering in the viewport. A material may be applied to a node with the samson.DataModel.DataGraph.Node.setMaterial() function. When a material is added to a node, it affects the node itself and all its descendants (unless they have a material themselves, which then has priority). Precisely, the samson.DataModel.DataGraph.Node.getMaterial() function returns the material directly applied to the node, or determines the deepest ancestor that has a material applied (by examining the node’s parent, then its parent’s parent, etc.). If no material is found, the samson.DataModel.DataGraph.Node.getMaterial() function returns 0.

Each material has a color scheme (samson.DataModel.DataGraph.ColorScheme) which may be modified and used to associate a color to a node or a spatial position (samson.DataModel.Type.position3).

Please refer to samson.DataModel.DataGraph.ColorScheme.

Getting nodes

You can get an indexer of child nodes using the samson.DataModel.DataGraph.Node.getNodes() function and the Node Specification Language.

Let’s, for example, select all node’s children atoms:

# get all node's children atoms
atomIndexer = node.getNodes('node.type atom')

# the same using short names
atomIndexer = node.getNodes('n.t a')

# you can check the size of the indexer
atomIndexer

See also

See the Node Specification Language for more information and usage examples.

Printing info

For many node types, you can print some information on them:

atomIndexer = SAMSON.getNodes('node.type atom')

for atom in atomIndexer:
        print(atom)

atom = atomIndexer[0]
atom    # prints an information on atom

See also

SAMSON API: SBDDataGraphNode

class samson.DataModel.DataGraph.Node

Bases: samson.Core.Reference.ReferenceTarget

This class is the base class to describe a node in the data graph.

class NodeType(self: samson.DataModel.DataGraph.Node.NodeType, arg0: int) → None

Bases: pybind11_builtins.pybind11_object

ArticulatedBody = NodeType.DynamicalModelNodeArticulatedBody
ArticulatedBodySystem = NodeType.DynamicalModelArticulatedBodySystem
Atom = NodeType.Atom
Backbone = NodeType.StructuralModelNodeBackbone
Bond = NodeType.StructuralModelNodeBond
Camera = NodeType.Camera
Chain = NodeType.StructuralModelNodeChain
Conformation = NodeType.StructuralModelConformation
Controller = NodeType.Controller
ControllerNode = NodeType.ControllerNode
DataGraphNodeGroup = NodeType.DataGraphNodeGroup
Document = NodeType.Document
DocumentManager = NodeType.DocumentManager
DynamicalGroup = NodeType.DynamicalModelNodeGroup
DynamicalModel = NodeType.DynamicalModel
DynamicalModelArticulatedBodySystem = NodeType.DynamicalModelArticulatedBodySystem
DynamicalModelNode = NodeType.DynamicalModelNode
DynamicalModelNodeArticulatedBody = NodeType.DynamicalModelNodeArticulatedBody
DynamicalModelNodeGroup = NodeType.DynamicalModelNodeGroup
DynamicalModelNodeParticle = NodeType.DynamicalModelNodeParticle
DynamicalModelNodeRigidBody = NodeType.DynamicalModelNodeRigidBody
DynamicalModelNodeRoot = NodeType.DynamicalModelNodeRoot
DynamicalModelParticleSystem = NodeType.DynamicalModelParticleSystem
DynamicalModelRigidBodySystem = NodeType.DynamicalModelRigidBodySystem
DynamicalNode = NodeType.DynamicalModelNode
DynamicalParticle = NodeType.DynamicalModelNodeParticle
DynamicalRoot = NodeType.DynamicalModelNodeRoot
Folder = NodeType.Folder
InteractionModel = NodeType.InteractionModel
InteractionModelArticulatedBodySystem = NodeType.InteractionModelArticulatedBodySystem
InteractionModelParticleSystem = NodeType.InteractionModelParticleSystem
InteractionModelRigidBodySystem = NodeType.InteractionModelRigidBodySystem
Label = NodeType.Label
Molecule = NodeType.StructuralModelNodeMolecule
NodeGroup = NodeType.DataGraphNodeGroup
ParticleSystem = NodeType.DynamicalModelParticleSystem
Path = NodeType.StructuralModelPath
PropertyModel = NodeType.PropertyModel
PropertyModelFunction = NodeType.PropertyModelFunction
Protein = NodeType.StructuralModelNodeProtein
PseudoAtom = NodeType.StructuralModelNodePseudoAtom
Residue = NodeType.StructuralModelNodeResidue
RigidBody = NodeType.DynamicalModelNodeRigidBody
RigidBodySystem = NodeType.DynamicalModelRigidBodySystem
Root = NodeType.StructuralModelNodeRoot
Segment = NodeType.StructuralModelNodeSegment
SideChain = NodeType.StructuralModelNodeSideChain
Simulator = NodeType.Simulator
SimulatorArticulatedBodySystem = NodeType.SimulatorArticulatedBodySystem
SimulatorParticleSystem = NodeType.SimulatorParticleSystem
SimulatorRigidBodySystem = NodeType.SimulatorRigidBodySystem
StateUpdater = NodeType.StateUpdater
StateUpdaterArticulatedBodySystem = NodeType.StateUpdaterArticulatedBodySystem
StateUpdaterParticleSystem = NodeType.StateUpdaterParticleSystem
StateUpdaterRigidBodySystem = NodeType.StateUpdaterRigidBodySystem
StructuralGroup = NodeType.StructuralModelNodeGroup
StructuralModel = NodeType.StructuralModel
StructuralModelConformation = NodeType.StructuralModelConformation
StructuralModelNode = NodeType.StructuralModelNode
StructuralModelNodeAtom = NodeType.Atom
StructuralModelNodeBackbone = NodeType.StructuralModelNodeBackbone
StructuralModelNodeBond = NodeType.StructuralModelNodeBond
StructuralModelNodeChain = NodeType.StructuralModelNodeChain
StructuralModelNodeGroup = NodeType.StructuralModelNodeGroup
StructuralModelNodeMolecule = NodeType.StructuralModelNodeMolecule
StructuralModelNodeParticle = NodeType.StructuralModelNodeParticle
StructuralModelNodeProtein = NodeType.StructuralModelNodeProtein
StructuralModelNodePseudoAtom = NodeType.StructuralModelNodePseudoAtom
StructuralModelNodeResidue = NodeType.StructuralModelNodeResidue
StructuralModelNodeRoot = NodeType.StructuralModelNodeRoot
StructuralModelNodeSegment = NodeType.StructuralModelNodeSegment
StructuralModelNodeSideChain = NodeType.StructuralModelNodeSideChain
StructuralModelPath = NodeType.StructuralModelPath
StructuralParticle = NodeType.StructuralModelNodeParticle
Undefined = NodeType.Undefined
VisualModel = NodeType.VisualModel
addChild(self: samson.DataModel.DataGraph.Node, node: samson.DataModel.DataGraph.Node, nextNode: samson.DataModel.DataGraph.Node=None) → bool

Adds a child to the node

canAddChild(self: samson.DataModel.DataGraph.Node, node: samson.DataModel.DataGraph.Node, nextNode: samson.DataModel.DataGraph.Node=None) → bool

Returns whether this node can add node as a child

canAddChildType(self: samson.DataModel.DataGraph.Node, nodeType: SBDDataGraphNode::Type) → bool

Returns whether this node can add a node with type nodeType as a child

castToInteractionModelParticleSystem(self: samson.DataModel.DataGraph.Node) → SBMInteractionModelParticleSystem

Casts (if possible) from SBDDataGraphNode to SBMInteractionModelParticleSystem

castToLabel(self: samson.DataModel.DataGraph.Node) → SBDDocumentLabel

Casts (if possible) from SBDDataGraphNode to SBDDocumentLabel

castToVisualModel(self: samson.DataModel.DataGraph.Node) → SBMVisualModel

Casts (if possible) from SBDDataGraphNode to SBMVisualModel

clone(self: samson.DataModel.DataGraph.Node) → samson.DataModel.DataGraph.Node

Returns a copy of the node and its descendants

countNodes(self: samson.DataModel.DataGraph.Node, selectionString: str='*', visitString: str='*', includeDependencies: bool=False) → int
Count nodes into nodeIndexer, based on a selectionPredicate and a visitPredicate, with our without dependencies).
For selectionString and visitString use Node Specification Language (SAMSON API: Node Specification Language
create(self: samson.DataModel.DataGraph.Node) → None

Creates the node

erase(self: samson.DataModel.DataGraph.Node) → None

Erases the node

getDocument(self: samson.DataModel.DataGraph.Node) → SBDDocument

Returns the document the node belongs to

getFlags(self: samson.DataModel.DataGraph.Node) → int

Returns the flags

getInheritedFlags(self: samson.DataModel.DataGraph.Node) → int

Returns the inherited flags

getMaterial(self: samson.DataModel.DataGraph.Node) → SBDDataGraphNodeMaterial

Returns the material of the node

getMaterialOwner(self: samson.DataModel.DataGraph.Node) → samson.DataModel.DataGraph.Node

Returns the node whose material is inherited

getMemoryFootprint(self: samson.Core.Reference.ReferenceTarget) → int

Returns the memory footprint

getNextNode(*args, **kwargs)

Overloaded function.

  1. getNextNode(self: samson.DataModel.DataGraph.Node) -> samson.DataModel.DataGraph.Node

Returns the pointer to the next node in the children of the node’s parent

  1. getNextNode(self: samson.DataModel.DataGraph.Node, nodeType: SBDDataGraphNode::Type) -> samson.DataModel.DataGraph.Node

Returns the pointer to the next node with type nodeType in the children of the node’s parent

getNode(self: int) → samson.DataModel.DataGraph.Node

Returns the unique node corresponding to the node index nodeIndex

getNodes(self: samson.DataModel.DataGraph.Node, selectionString: str='*', visitString: str='*', includeDependencies: bool=False) → SBDDataGraphNodeIndexer
Returns nodes (in a node indexer), based on a selectionString and a visitString, with our without dependencies).
For selectionString and visitString use Node Specification Language (SAMSON API: Node Specification Language
getParent(self: samson.DataModel.DataGraph.Node) → samson.DataModel.DataGraph.Node

Returns the parent of the node

getPreviousNode(*args, **kwargs)

Overloaded function.

  1. getPreviousNode(self: samson.DataModel.DataGraph.Node) -> samson.DataModel.DataGraph.Node

Returns the pointer to the previous node in the children of the node’s parent

  1. getPreviousNode(self: samson.DataModel.DataGraph.Node, nodeType: SBDDataGraphNode::Type) -> samson.DataModel.DataGraph.Node

Returns the pointer to the previous node with type nodeType in the children of the node’s parent

getRoot(self: samson.DataModel.DataGraph.Node) → samson.DataModel.DataGraph.Node

Returns the root of the hierarchy the node belongs to

getThisNode(self: samson.DataModel.DataGraph.Node) → samson.DataModel.DataGraph.Node

Returns the pointer to this node

getTypeString(type: SBDDataGraphNode::Type) → str

Returns a string describing the type of the data graph node

hasOneOf(self: samson.DataModel.DataGraph.Node, nodeIndexer: SBDDataGraphNodeIndexer) → bool

Returns true if and only if this node is one of the nodes of the nodeIndexer, or is the ancestor of one of them

isDynamicalModel(self: samson.DataModel.DataGraph.Node) → bool

Returns true when the node is a dynamical model

isIn(*args, **kwargs)

Overloaded function.

  1. isIn(self: samson.DataModel.DataGraph.Node, node: samson.DataModel.DataGraph.Node) -> bool

Returns true if and only if this node is node, or descends from it

  1. isIn(self: samson.DataModel.DataGraph.Node, nodeIndexer: SBDDataGraphNodeIndexer) -> bool

Returns true if and only if this node is one of the nodes of the nodeIndexer, or descends from one of them

isInteractionModel(self: samson.DataModel.DataGraph.Node) → bool

Returns true when the node is a interaction model

isModel(self: samson.DataModel.DataGraph.Node) → bool

Returns true when the node is a model

isOneOf(self: samson.DataModel.DataGraph.Node, nodeIndexer: SBDDataGraphNodeIndexer) → bool

Returns true if and only if this node is one of the nodes of the nodeIndexer

isPropertyModel(self: samson.DataModel.DataGraph.Node) → bool

Returns true when the node is a property model

isSimulator(self: samson.DataModel.DataGraph.Node) → bool

Returns true when the node is a simulator

isStructuralModel(self: samson.DataModel.DataGraph.Node) → bool

Returns true when the node is a structural model

isStructuralParticle(self: samson.DataModel.DataGraph.Node) → bool

Returns true when the node is a structural particle (an atom or a pseudo-atom)

isType(self: samson.DataModel.DataGraph.Node, type: SBDDataGraphNode::Type) → bool

Returns true when the type of the node corresponds to type

isVisualModel(self: samson.DataModel.DataGraph.Node) → bool

Returns true when the node is a visual model

printDebugInfo(self: samson.DataModel.DataGraph.Node, offset: int=0) → None

Prints some debugging information in stdout

removeChild(self: samson.DataModel.DataGraph.Node, node: samson.DataModel.DataGraph.Node) → bool

Removes a child from the node

removeMaterial(self: samson.DataModel.DataGraph.Node) → bool

Removes material from the node

setColor(self: samson.DataModel.DataGraph.Node, color: SBDColor) → bool

Sets the color for the node (modifies an existing material of the node or adds a material with a given color)

Args:
color (Color): color to set
setColorScheme(self: samson.DataModel.DataGraph.Node, colorScheme: SBDDataGraphNodeColorScheme) → bool

Sets the color scheme for the node (modifies an existing material of the node or adds a material with a given color scheme)

Args:
colorScheme (ColorScheme): color scheme to set
setMaterial(self: samson.DataModel.DataGraph.Node, material: SBDDataGraphNodeMaterial) → bool

Sets the material for the node.

Args:
material (Material): material to set
ArticulatedBody = NodeType.DynamicalModelNodeArticulatedBody
ArticulatedBodySystem = NodeType.DynamicalModelArticulatedBodySystem
Atom = NodeType.Atom
Backbone = NodeType.StructuralModelNodeBackbone
Bond = NodeType.StructuralModelNodeBond
Camera = NodeType.Camera
Chain = NodeType.StructuralModelNodeChain
Conformation = NodeType.StructuralModelConformation
Controller = NodeType.Controller
ControllerNode = NodeType.ControllerNode
DataGraphNodeGroup = NodeType.DataGraphNodeGroup
Document = NodeType.Document
DocumentManager = NodeType.DocumentManager
DynamicalGroup = NodeType.DynamicalModelNodeGroup
DynamicalModel = NodeType.DynamicalModel
DynamicalModelArticulatedBodySystem = NodeType.DynamicalModelArticulatedBodySystem
DynamicalModelNode = NodeType.DynamicalModelNode
DynamicalModelNodeArticulatedBody = NodeType.DynamicalModelNodeArticulatedBody
DynamicalModelNodeGroup = NodeType.DynamicalModelNodeGroup
DynamicalModelNodeParticle = NodeType.DynamicalModelNodeParticle
DynamicalModelNodeRigidBody = NodeType.DynamicalModelNodeRigidBody
DynamicalModelNodeRoot = NodeType.DynamicalModelNodeRoot
DynamicalModelParticleSystem = NodeType.DynamicalModelParticleSystem
DynamicalModelRigidBodySystem = NodeType.DynamicalModelRigidBodySystem
DynamicalNode = NodeType.DynamicalModelNode
DynamicalParticle = NodeType.DynamicalModelNodeParticle
DynamicalRoot = NodeType.DynamicalModelNodeRoot
Folder = NodeType.Folder
InteractionModel = NodeType.InteractionModel
InteractionModelArticulatedBodySystem = NodeType.InteractionModelArticulatedBodySystem
InteractionModelParticleSystem = NodeType.InteractionModelParticleSystem
InteractionModelRigidBodySystem = NodeType.InteractionModelRigidBodySystem
Label = NodeType.Label
Molecule = NodeType.StructuralModelNodeMolecule
NodeGroup = NodeType.DataGraphNodeGroup
ParticleSystem = NodeType.DynamicalModelParticleSystem
Path = NodeType.StructuralModelPath
PropertyModel = NodeType.PropertyModel
PropertyModelFunction = NodeType.PropertyModelFunction
Protein = NodeType.StructuralModelNodeProtein
PseudoAtom = NodeType.StructuralModelNodePseudoAtom
Residue = NodeType.StructuralModelNodeResidue
RigidBody = NodeType.DynamicalModelNodeRigidBody
RigidBodySystem = NodeType.DynamicalModelRigidBodySystem
Root = NodeType.StructuralModelNodeRoot
Segment = NodeType.StructuralModelNodeSegment
SideChain = NodeType.StructuralModelNodeSideChain
Simulator = NodeType.Simulator
SimulatorArticulatedBodySystem = NodeType.SimulatorArticulatedBodySystem
SimulatorParticleSystem = NodeType.SimulatorParticleSystem
SimulatorRigidBodySystem = NodeType.SimulatorRigidBodySystem
StateUpdater = NodeType.StateUpdater
StateUpdaterArticulatedBodySystem = NodeType.StateUpdaterArticulatedBodySystem
StateUpdaterParticleSystem = NodeType.StateUpdaterParticleSystem
StateUpdaterRigidBodySystem = NodeType.StateUpdaterRigidBodySystem
StructuralGroup = NodeType.StructuralModelNodeGroup
StructuralModel = NodeType.StructuralModel
StructuralModelConformation = NodeType.StructuralModelConformation
StructuralModelNode = NodeType.StructuralModelNode
StructuralModelNodeAtom = NodeType.Atom
StructuralModelNodeBackbone = NodeType.StructuralModelNodeBackbone
StructuralModelNodeBond = NodeType.StructuralModelNodeBond
StructuralModelNodeChain = NodeType.StructuralModelNodeChain
StructuralModelNodeGroup = NodeType.StructuralModelNodeGroup
StructuralModelNodeMolecule = NodeType.StructuralModelNodeMolecule
StructuralModelNodeParticle = NodeType.StructuralModelNodeParticle
StructuralModelNodeProtein = NodeType.StructuralModelNodeProtein
StructuralModelNodePseudoAtom = NodeType.StructuralModelNodePseudoAtom
StructuralModelNodeResidue = NodeType.StructuralModelNodeResidue
StructuralModelNodeRoot = NodeType.StructuralModelNodeRoot
StructuralModelNodeSegment = NodeType.StructuralModelNodeSegment
StructuralModelNodeSideChain = NodeType.StructuralModelNodeSideChain
StructuralModelPath = NodeType.StructuralModelPath
StructuralParticle = NodeType.StructuralModelNodeParticle
Undefined = NodeType.Undefined
VisualModel = NodeType.VisualModel
highlightingFlag
isCreated

Returns true if and only if the node is created

isErased

Returns true if and only if the node is erased

isHighlighted

Returns whether the node is highlighted

isSelected

Returns whether the node is selected

isSerializable

Returns true when the class is serializable

isVisible

Returns whether the node is visible

nodeIndex

Returns the node index (unique in the whole data graph, but non-persistent)

selectionFlag
type

Returns the type of the data graph node

typeString

Returns a string describing the type of this data graph node

visibilityFlag