Skip to main content

Python implementation of the kinetic model of neuromuscular transmission dynamics.

Project description

Dynamics of Neuromuscular Transmission Reproduced by Calcium-Dependent and Reversible Serial Transitions in the Vesicle Fusion Complex

KiNeuron: Python implementation of the kinetic model of neuromuscular transmission dynamics.

KiNeuron is an open-source implementation of our mechanistic kinetic model of neuromuscular transmission based on sequential maturation transitions in the molecular fusion complex.

KiNeuron is:

  • Simple -- It is possible to simulate an alternative kinetic model with a few lines of code. This way, you can focus on the key parts of the problem that really matter.
  • Flexible -- It is possible to customise the kinetic model by adjusting the number of transition states, the kinetic transitions between states, as well as the rate constants. Further, KiNeuron allows the addition of a stimulation protocol.


Requirements

KiNeuron requires:

  • python >= 3.6
  • graphviz >= 0.19.1
  • matplotlib >= 3.3.4
  • numpy >= 1.19.5
  • pandas >= 1.1.5
  • tqdm >= 4.62.3

To use the graph display functions of the model, it is necessary to install Graphviz backend for your OS as described in following documentation.

Installation

There are two ways to install KiNeuron:

  1. Via PyPI repository (recommended):

    • In your local workspace, create a new Python Virtual Environment with venv or conda.
    • Install KiNeuron as follow:
    $ python -m pip install -U kineuron
    
    • All dependencies are downloaded and installed. To verify that it has been installed correctly, you can check the following output:
    $ python -c "import kineuron; print(kineuron.__version__)"
    '0.1.3'
    
  2. Via GitHub:

    • Clone this project repository to your local workspace.
    • Create a new Python Virtual Environment with venv or conda.
    • Install the required libraries from the file requeriments.txt into your virtual environment as follow:
    $ python -m pip install -r requeriments.txt
    

You are ready to use KiNeuron.

Usage Example

Creating a Model

Create a file main.py and import the following classes:

from kineuron import (KineticModel, RateConstant, Solver, Stimulation,
                      Transition, TransitionState)

Then, instantiate the model objects as follows:

model = KineticModel(name='my-model', vesicles=100)

docked = TransitionState(name='Docked')
fusion = TransitionState(name='Fusion')

alpha = RateConstant(name="α", value=0.3, calcium_dependent=True)
beta = RateConstant(name="β", value=15)

transition1 = Transition(name='Transition 1',
                 rate_constant=alpha,
                 origin="Docked",
                 destination="Fusion")
transition2 = Transition(name='Transition 2',
                 rate_constant=beta,
                 origin="Fusion",
                 destination="Docked")

Add all objects to the model as follow:

model.add_transition_states([docked, fusion])
model.add_transitions([transition1, transition2])

Finally, initialize the model:

model.init()

Likewise, a stimulation protocol should be defined (if the experiment expects it) as follows:

protocol = Stimulation(
     conditional_stimuli=5,
     period=0.03,
     time_start_stimulation=0.1,
     tau_stimulus=0.0013,
     time_wait_test=0.2,
     intensity_stimulus=100.0,
     type_stimulus='exponential_decay',
     name="Custom Stimulation Protocol")

The following lines show the time profile of the stimulation protocol:

import numpy as np

t = np.arange(0, 0.5, 0.0001)
protocol.plot(t)

Stimulation protocol

Model Information (Optional)

The general model information can be obtained as follows:

model.get_info()

and run the file main.py:

$ python main.py

==============  MODEL INFORMATION  ===============
MODEL NAME:                   my-model
TOTAL VESICLES:               100
RESTING STATE:                False

TRANSITION STATES             VESICLES
- Docked:                     100
- Fusion:                     0
--------------------------------------------------
NAME TRANSITION:              Transition 1
RATE CONSTANT NAME:           α
RATE CONSTANT VALUE:          0.3 s⁻¹
CALCIUM-DEPENDENT:            True
ORIGIN:                       Docked
DESTINATION:                  Fusion
--------------------------------------------------
NAME TRANSITION:              Transition 2
RATE CONSTANT NAME:           β
RATE CONSTANT VALUE:          15 s⁻¹
CALCIUM-DEPENDENT:            False
ORIGIN:                       Fusion
DESTINATION:                  Docked
==================================================

The following lines allow you to visualize the graph of the model:

graph = model.get_graph()
graph.view()

Graph Model

Run It

The Solver object that simulates the time evolution of the model must be instantiated. Here, we use an implementation of the Gillespie Stochastic Algorithm (1977).

experiment = Solver(model=model, stimulation=protocol)

Before initiating the simulation, make sure to obtain the resting state of the model, from which all repetitions of the experiment are starting. This is achieved as follows:

experiment.resting_state()

With the following lines the experiment is ran. The results can be obtained and saved in a .csv file for further analysis.

experiment.run(repeat=1)
results = experiment.get_results(mean=True)
results.to_csv("results.csv", index=True)

Finally, the main.py file should be executed to perform the complete simulation:

$ python main.py

Changelog

  • 0.1.3
    • Fixed bug compatibility typing with python <= 3.8 versions.
  • 0.1.2
    • Added an option to include the individual events of the transitions in the results.
    • A quantitative criterion was added to find the resting state automatically.
    • Added the ability to include an external custom function when instantiating the Stimulation object.
  • 0.1.1
    • Added a progress bar when simulations are running.
    • Fixed compatibility with pandas >=1.3.0 versions.
    • Simplification of adding objects to the model. It is not necessary to explicitly declare KineticModel.add_rate_constants() method.
    • Added a AssertionError if the model is not initialized.
    • Bug fixed in the number of vesicles when calling two or more times KineticModel.init() method.
  • 0.1.0
    • Stable version released.
  • 0.0.1
    • Work in progress.

Contributing

  • If you are interested in contributing to the project, please follow these guidelines:

    1. Fork it (https://github.com/alexini-mv/kinetic-neurotransmission).
    2. Create your feature branch:
    $ git checkout -b feature/fooBar
    
    1. Commit your changes:
    $ git commit -am 'Add some fooBar'
    
    1. Push to the branch:
    $ git push origin feature/fooBar
    
    1. Create a new Pull Request.
  • If you want to report a bug, please create a new issue here describing the error as clearly as possible.

Correspondence

Author: Alejandro Martínez-Valencia

Email: al.martinez.valencia@gmail.com

Citation

If you use our code for your research or scientific publication, we kindly ask you to refer to our work as follows:

  • Martínez-Valencia A., Ramírez-Santiago G. and De-Miguel F.F. (2022) Dynamics of Neuromuscular Transmission Reproduced by Calcium-Dependent and Reversible Serial Transitions in the Vesicle Fusion Complex. Front. Synaptic Neurosci. 13:785361. DOI: 10.3389/fnsyn.2021.785361

License

Distributed under the GNU General Public License. See LICENSE for more information.

Interesting Links

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

kineuron-0.1.3.tar.gz (30.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

kineuron-0.1.3-py3-none-any.whl (29.7 kB view details)

Uploaded Python 3

File details

Details for the file kineuron-0.1.3.tar.gz.

File metadata

  • Download URL: kineuron-0.1.3.tar.gz
  • Upload date:
  • Size: 30.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.2

File hashes

Hashes for kineuron-0.1.3.tar.gz
Algorithm Hash digest
SHA256 2d436db2c214dab146bc1a0c2971adf31acb9d7da06c4c217f8ad9432185d6e3
MD5 49763c04448f894d590043e7b4e96bb3
BLAKE2b-256 d78fbd2eee18c5fde48128ac89aee12854dc7f118d04a1f7e4d8d27f0d9bbfbe

See more details on using hashes here.

File details

Details for the file kineuron-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: kineuron-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 29.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.2

File hashes

Hashes for kineuron-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 fd305206175b2d6386d929c0d5729e0097dfad9927d55b468621c64a2bc87651
MD5 7345bbad6eceb535407ad47f7179c0bb
BLAKE2b-256 a0707b7b5362eec4797fca4aae720b38a2d4bd67fc8df978f9b2b03378aa57e2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page