Models structure

DeNSE offers the chance to set different models for neuronal outgrowth. Models are structured in order to allow the user to enable or discard some specific properties and then set the relevant biological parameters or use the defaults. The table of parameters can be found at the end of this page, under the Parameters subsection.

What are models in DeNSE?

For now, models are mostly associated to growth cones. There are also branching models, but these are not yet covered in the documentation.

A full growth model is composed by a combination of three modules:

  • an extension component, modeling the

Making a new growth model

To add a new model to DeNSE, you need to decide on two things:

  • a name, for instance “great model”

  • the type of feature it implements among:

    • deciding how much the growth cone will grow (extension)

    • setting the probability of going into each of the filopodial direction (steering)

    • selecting the actual direction in which the growth cone will go next (direction selection).

For this example, our “great model” will implement a new way of steering the growth cone.

Create the files

The C++ files containing the code for the new model must be placed in src/models. Since we’re creating a steering model, we will name them steering_great_model.hpp and steering_great_model.cpp (replace of course steering with extension or direction_select if your model deals with those instead).

Create the class

Inside these files, we will create the class GreatSteeringModel following the same structure as visible in the other files containing existing models. This means that our class:

  • inherits from SteeringModel

  • defines all the functions mentioned in steering_interface.hpp

Tell the simulator about the new model

Full growth models are automatically generated by combining all possible modules into a extention/steering/direction-selection triplets.

This is performed by the python file src/models/models_generator.py.

To add a new model the, you must:

  1. include it in the associated methods list (here steering_methods) as ModelComponent(method="great-model", filename="steering_great_model.hpp", classname="GreatSteeringModel")

  2. add an associated abbreviation in abbrev, for instance "great-model": "gm"

  3. add steering_great_model.hpp and steering_great_model.cpp to the list of files in src/models/CMakeLists.txt

And that’s it, you’re done! Your new model is now available in DeNSE and should appear in the list returned by get_models().

Creating neurons and setting parameters

In order to simulate a system we need to initialize it, and, likely, we would like to set our own parameters to override the default described in previous section. Let’s assume we have 1 only neuron, how to manage many neurons and sets of parameters is described in another section.

Each neuron can be created with a different growth cone model, and in every moment these parameters can be overwritten, but it’s impossible to change the model, while is possible to turn off/on the neurite branching model (uniform, actin wave, van pelt) It’s possible to set the same parameters for dendrites and axon or to specify them, passing a dictionary with the respective name “axon_params” or “dendrite_params” to the create_neurons() function. This can also be done during the simulation with set_object_properties()

Parameters are set when kernel is initiated and the process is recursive. Each neuron is created with a StatusMap, which is a dictionary with all the non-default parameters, each neuron then set the parameters all its neurites, which set the parameters for all its growth cone. A similar process happen when status is set during the simulation.

The models of DeNSE are implemented in C++

class Neuron : public std::enable_shared_from_this<Neuron>

Implementation of the main container Neuron for the creation of neuronal networks.

class Neurite : public std::enable_shared_from_this<Neurite>

Neurite class,.

class growth::ActinWave : public std::enable_shared_from_this<ActinWave>

Public Functions

ActinWave(TNodePtr targetNode, double actin_content, NeuritePtr)

ActinWave is a single ActinWave element propagating in the neurite. ActinWave requires the ‘Neuron’ supports the AW models Each ‘ActinWave’, for each step can:

Parameters
  • NodePtrNode is the Node leading the segment of neurite where AW is.

  • double – DistanceToTarget is the distance to such a node.

class growth::Node : public growth::TopologicalNode

Public Functions

virtual void set_position(const BPoint&) final override

Set the position of the node.

Parameters

Point – xy: x and y of the node.

class growth::GrowthCone : public growth::TopologicalNode, public std::enable_shared_from_this<GrowthCone>

Subclassed by growth::GrowthConeModel< ElType, SteerMethod, DirSelMethod >

Public Functions

GrowthCone(const GrowthCone &copy)

Copy constructor for GrowthCone.

virtual void set_position(const BPoint &pos) final override

Set the position of the node.

Parameters

Point – xy: x and y of the node.

class growth::Branch

The Branch class is responsible for storing the spatial points representing the neurite in space. Each Branch instance is associated to a unique TopologicalNode and thus stores the continuous set of points that defines its trajectory over time.

Public Functions

Branch(const BPoint &origin)

Create a branch with initial position and if necesary an initial length.

Branch()

default constructor

double module_from_points(const BPoint&)

Get the module of length between the point and the last in the array.

Parameters

BPoint&

void set_first_point(const BPoint &xy, double distanceToSoma)

set first element of Branch container

Parameters
  • xy – the points where the branch starts

  • distanceToSoma – the distance from soma at branch start.

void resize_tail(stype new_size)

resize the head of the branch: first point invariate

Parameters

id_x – the length of the new branch container

BranchPtr resize_head(stype id_x) const

Create a new branch from tail of this Branch: tail invariate.

Parameters

id_x – the number of elements to delete from the begin of the container

Returns

void retract()

Remove one point from the container.

void append_branch(BranchPtr appended_branch)

Append a Branch to existing one.

Parameters

appended_branchBranch to add after the last element of the existing Branch

BPoint get_last_xy() const

return the last xy

PointArray at(stype idx) const

Return a BPoint object from the ‘idx’ element of the Branch

Parameters

Defines

BRANCHING_PROBA_DEFAULT
NEURITE_DIAMETER
SOMA_RADIUS
THINNING_RATIO
MIN_DIAMETER
DIAMETER_RATIO_AVG
DIAM_RATIO_STD
DIAMETER_ETA_EXP
POLA_STRENGTH
AXON_POLA_WEIGHT
MAX_GC_NUM
MAX_ARBOR_LENGTH
DURATION_RETRACTION
FILOPODIA_MIN_NUM
FILOPODIA_FINGER_LENGTH
FILOPODIA_SUBSTRATE_AFINITY
FILOPODIA_WALL_AFFINITY
MAX_SENSING_ANGLE
ONE_DEGREE
PROBA_RETRACTION
PROBA_DOWN_MOVE
PERSISTENCE_LENGTH
SCALE_UP_MOVE
SENSING_ANGLE
SPEED_RATIO_RETRACTION
SPEED_GROWTH_CONE
WALL_AFNTY_DECAY_CST
DEFAULT_POINTS_PER_CIRCLE
MIN_FILOPODIA_FINGER_LENGTH
SRF_AVOIDANCE_FACTOR
SRF_AVOIDANCE_SCALE
SRF_RIGIDITY_FACTOR
SRF_SOMATROPIC_FACTOR
SRF_SOMATROPIC_SCALE
USE_CRITICAL
CRITICAL_USE_RATIO
CRITICAL_LEAKAGE
CRITICAL_CORRELATION
CRITICAL_VARIANCE
CRITICAL_WEIGHT_DIAMETER
CRITICAL_WEIGHT_CENTRIFUGAL
CRITICAL_ELONGATION_FACTOR
CRITICAL_ELONGATION_TH
CRITICAL_RETRACTION_FACTOR
CRITICAL_RETRACTION_TH
CRITICAL_BRANCHING_TH
CRITICAL_BRANCHING_PROBA
CRITICAL_AVAILABLE
CRITICAL_GEN_VAR
CRITICAL_GENERATED
CRITICAL_GEN_TAU
CRITICAL_DEL_TAU
CRITICAL_GEN_CORR
CRITICAL_SLOPE
CRITICAL_GC_SUPPORT
GC_SPLIT_ANGLE_MEAN
GC_SPLIT_ANGLE_STD
USE_VAN_PELT
VP_B
VP_E
VP_S
VP_T
DIAM_FRAC_LB
LATERAL_BRANCHING_ANGLE_MEAN
LATERAL_BRANCHING_ANGLE_STD
UNIFORM_BRANCHING_RATE
USE_ACTIN_WAVES
ACTIN_CONTENT
ACTIN_CONTENT_TAU
ACTIN_WAVE_SPEED
AW_GENERATION_STEP
DEFAULT_MAX_RESOL
MAX_MAX_SYN_DIST
namespace growth
namespace names

Variables

const std::string description
const std::string growth_cone_model
const std::string num_neurites
const std::string soma_radius
const std::string has_axon
const std::string axon_polarization_weight
const std::string neurite_angles
const std::string polarization_strength
const std::string random_rotation_angles
const std::string neurite_names
const std::string max_gc_number
const std::string max_arbor_length
const std::string active
const std::string initial_diameter
const std::string axon_angle
const std::string initial_branch_lenght
const std::string branching_proba_default
const std::string neurite_type
const std::string taper_rate
const std::string diameter_ratio_avg
const std::string diameter_ratio_std
const std::string diameter_eta_exp
const std::string affinity_axon_self
const std::string affinity_axon_dendrite_same_neuron
const std::string affinity_axon_soma_same_neuron
const std::string affinity_axon_axon_other_neuron
const std::string affinity_axon_dendrite_other_neuron
const std::string affinity_axon_soma_other_neuron
const std::string affinity_dendrite_self
const std::string affinity_dendrite_axon_same_neuron
const std::string affinity_dendrite_dendrite_same_neuron
const std::string affinity_dendrite_soma_same_neuron
const std::string affinity_dendrite_axon_other_neuron
const std::string affinity_dendrite_dendrite_other_neuron
const std::string affinity_dendrite_soma_other_neuron
const std::string duration_retraction
const std::string filopodia_min_number
const std::string filopodia_finger_length
const std::string filopodia_wall_affinity
const std::string max_sensing_angle
const std::string proba_down_move
const std::string proba_retraction
const std::string scale_up_move
const std::string sensing_angle
const std::string speed_ratio_retraction
const std::string substrate_affinity
const std::string points_per_circle
const std::string persistence_length
const std::string rigidity_factor
const std::string speed_decay_factor
const std::string speed_growth_cone
const std::string speed_variance
const std::string memory_dist_cut
const std::string memory_dist_exp
const std::string memory_influence
const std::string somatropic_factor
const std::string somatropic_scale
const std::string somatropic_mode
const std::string self_avoidance_factor
const std::string self_avoidance_scale
const std::string noise_amplitude
const std::string critical_pull
const std::string resource
const std::string use_critical_resource
const std::string res_use_ratio
const std::string res_leakage
const std::string res_correlation
const std::string res_variance
const std::string res_weight_diameter
const std::string res_weight_centrifugal
const std::string res_elongation_factor
const std::string res_elongation_threshold
const std::string res_retraction_factor
const std::string res_retraction_threshold
const std::string res_branching_threshold
const std::string res_branching_proba
const std::string res_neurite_available
const std::string res_neurite_variance
const std::string res_neurite_generated
const std::string res_neurite_generated_tau
const std::string res_neurite_delivery_tau
const std::string res_increase_slope
const std::string res_typical_gc_support
const std::string gc_split_angle_mean
const std::string gc_split_angle_std
const std::string use_van_pelt
const std::string B
const std::string E
const std::string S
const std::string T
const std::string diameter_fraction_lb
const std::string flpl_branching_rate
const std::string lateral_branching_angle_mean
const std::string lateral_branching_angle_std
const std::string min_branching_distance
const std::string use_flpl_branching
const std::string use_uniform_branching
const std::string uniform_branching_rate
const std::string use_uniform_split
const std::string uniform_split_rate
const std::string use_actin_waves
const std::string actin_content
const std::string actin_content_tau
const std::string actin_wave_speed
const std::string actin_freq
const std::string event_type
const std::string interval
const std::string level
const std::string observable
const std::string observables
const std::string record_to
const std::string restrict_to
const std::string targets
const signed char lateral_branching
const signed char gc_splitting
const signed char gc_deletion
const std::string num_growth_cones
const std::string interactions
const std::string max_allowed_resolution
const std::string max_synaptic_distance
const std::string print_time
const std::string resolution