Package: kineuron
Dynamics of Neuromuscular Transmission Reproduced by Calcium-Dependent and Reversible Serial Transitions in the Vesicle Fusion ComplexKiNeuron: 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.Source Code:https://github.com/alexini-mv/kinetic-neurotransmissionBug reports:https://github.com/alexini-mv/kinetic-neurotransmission/issuesCiting in your work:https://doi.org/10.3389/fnsyn.2021.785361RequirementsKiNeuron requires:python >= 3.6graphviz >= 0.19.1matplotlib >= 3.3.4numpy >= 1.19.5pandas >= 1.1.5tqdm >= 4.62.3To use the graph display functions of the model, it is necessary to install Graphviz backend for your OS as described in followingdocumentation.InstallationThere are two ways to install KiNeuron:Via PyPI repository (recommended):In your local workspace, create a new Python Virtual Environment withvenvorconda.Install KiNeuron as follow:$python-mpipinstall-UkineuronAll 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'Via GitHub:Clone this projectrepositoryto your local workspace.Create a new Python Virtual Environment withvenvorconda.Install the required libraries from the filerequeriments.txtinto your virtual environment as follow:$python-mpipinstall-rrequeriments.txtYou are ready to use KiNeuron.Usage ExampleCreating a ModelCreate a filemain.pyand import the following classes:fromkineuronimport(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:importnumpyasnpt=np.arange(0,0.5,0.0001)protocol.plot(t)Model Information (Optional)The general model information can be obtained as follows:model.get_info()and run the file main.py:$pythonmain.py==============  MODEL INFORMATION  ===============MODEL NAME:                   my-modelTOTAL VESICLES:               100RESTING STATE:                FalseTRANSITION STATES             VESICLES- Docked:                     100- Fusion:                     0--------------------------------------------------NAME TRANSITION:              Transition 1RATE CONSTANT NAME:           αRATE CONSTANT VALUE:          0.3 s⁻¹CALCIUM-DEPENDENT:            TrueORIGIN:                       DockedDESTINATION:                  Fusion--------------------------------------------------NAME TRANSITION:              Transition 2RATE CONSTANT NAME:           βRATE CONSTANT VALUE:          15 s⁻¹CALCIUM-DEPENDENT:            FalseORIGIN:                       FusionDESTINATION:                  Docked==================================================The following lines allow you to visualize the graph of the model:graph=model.get_graph()graph.view()Run ItThe Solver object that simulates the time evolution of the model must be instantiated. Here, we use an implementation of theGillespie Stochastic Algorithm (1977).experiment=Solver(model=model,stimulation=protocol)Before initiating the simulation, make sure to obtain theresting stateof 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.csvfile for further analysis.experiment.run(repeat=1)results=experiment.get_results(mean=True)results.to_csv("results.csv",index=True)Finally, themain.pyfile should be executed to perform the complete simulation:$pythonmain.pyChangelog0.1.3Fixed bug compatibility typing with python <= 3.8 versions.0.1.2Added 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.1Added 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 declareKineticModel.add_rate_constants()method.Added aAssertionErrorif the model is not initialized.Bug fixed in the number of vesicles when calling two or more timesKineticModel.init()method.0.1.0Stable version released.0.0.1Work in progress.ContributingIf you are interested in contributing to the project, please follow these guidelines:Fork it (https://github.com/alexini-mv/kinetic-neurotransmission).Create your feature branch:$gitcheckout-bfeature/fooBarCommit your changes:$gitcommit-am'Add some fooBar'Push to the branch:$gitpushoriginfeature/fooBarCreate a new Pull Request.If you want to report a bug, please create a new issueheredescribing the error as clearly as possible.CorrespondenceAuthor: Alejandro Martínez-ValenciaEmail:al.martinez.valencia@gmail.comCitationIf 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.785361LicenseDistributed under the GNU General Public License. SeeLICENSEfor more information.Interesting LinksPerkel, Jeffrey M. (2022)How to fix your scientific coding errors. Nature 602, 172-173. DOI:10.1038/d41586-022-00217-0.Pylint, a tool that checks for errors in Python code.Tutorials and documentation.Autopep8, a package automatically formats Python code to conform to the PEP 8 style guide.Documentation.