Spike burst-pause dynamics of Purkinje cells regulate sensorimotor adaptation (Luque et al 2019)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:256140
"Cerebellar Purkinje cells mediate accurate eye movement coordination. However, it remains unclear how oculomotor adaptation depends on the interplay between the characteristic Purkinje cell response patterns, namely tonic, bursting, and spike pauses. Here, a spiking cerebellar model assesses the role of Purkinje cell firing patterns in vestibular ocular reflex (VOR) adaptation. The model captures the cerebellar microcircuit properties and it incorporates spike-based synaptic plasticity at multiple cerebellar sites. ..."
Reference:
1 . Luque NR, Naveros F, Carrillo RR, Ros E, Arleo A (2019) Spike burst-pause dynamics of Purkinje cells regulate sensorimotor adaptation. PLoS Comput Biol 15:e1006298 [PubMed]
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Neuron or other electrically excitable cell; Realistic Network;
Brain Region(s)/Organism: Cerebellum;
Cell Type(s): Cerebellum Purkinje GABA cell; Cerebellum interneuron granule GLU cell; Vestibular neuron; Abstract integrate-and-fire leaky neuron;
Channel(s): I K; I Na,t; I L high threshold; I M;
Gap Junctions:
Receptor(s): AMPA; Gaba;
Gene(s):
Transmitter(s):
Simulation Environment: EDLUT; NEURON; MATLAB;
Model Concept(s): Activity Patterns; Sleep; Long-term Synaptic Plasticity; Vestibular;
Implementer(s): Luque, Niceto R. [nluque at ugr.es];
Search NeuronDB for information about:  Cerebellum Purkinje GABA cell; Cerebellum interneuron granule GLU cell; AMPA; Gaba; I Na,t; I L high threshold; I K; I M;
/
LuqueEtAl2019
EDLUT
Articulo purkinje
CASE_A
include
spike
EDLUTException.h *
EDLUTFileException.h *
InputSpike.h *
InputSpikeGroupe.h *
Interconnection.h *
InternalSpike.h *
Network.h *
Neuron.h *
NeuronModelPropagationDelayStructure.h *
NeuronPropagationDelayStructure.h *
PropagatedSpike.h *
Spike.h *
TableBasedModelHFEvent.h *
TimeDrivenInternalSpike.h *
TimeDrivenPropagatedSpike.h *
                            
/***************************************************************************
 *                           Interconnection.h                             *
 *                           -------------------                           *
 * copyright            : (C) 2009 by Jesus Garrido and Richard Carrillo   *
 * email                : jgarrido@atc.ugr.es                              *
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 3 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 ***************************************************************************/

#ifndef INTERCONNECTION_H_
#define INTERCONNECTION_H_

/*!
 * \file Interconnection.h
 *
 * \author Jesus Garrido
 * \author Richard Carrido
 * \date August 2008
 *
 * This file declares a class which abstracts a spiking neural network connection.
 */

#include "../simulation/PrintableObject.h"
 

class Neuron;
class LearningRule;
class ConnectionState;

/*!
 * \class Interconnection
 *
 * \brief Spiking neural network connection
 *
 * This class abstract the behaviour of a spiking neural network connection.
 * It is composed by source and target neuron, an index, a connection delay...
 *
 * \author Jesus Garrido
 * \author Richard Carrillo
 * \date August 2008
 */
class Interconnection : public PrintableObject {
	
	private:
		
		/*!
		 * \brief The target neuron of the connection
		 */
		Neuron* target;

		/*!
		 * \brief The source neuron of the connection
		 */
		Neuron* source;
		
		/*!
		 * \brief The index of the connection in the network connections.
		 */
		long int index;
		
		/*!
		 * \brief The delay of the spike propagation.
		 */
		double delay;
		
		
		/*!
		 * \brief The synaptic weight of the connection.
		 */
		float weight;
		
		/*!
		 * \brief The maximum weight of the connection.
		 */
		float maxweight;

	
		/*!
		 * \brief The learning (or weight change) rule of the connection.
		 */
		LearningRule* wchange_withPost;
		

		/*!
		 * \brief The learning (or weight change) rule of the connection.
		 */
		LearningRule* wchange_withoutPost;

		/*!
		* \brief The connection type (excitatory, inhibitory, electrical coupling...)
		*/
		int type;

		/*!
		* \brief Index inside the Learning Rule.
		*/
		int LearningRuleIndex_withPost;
		
		/*!
		 * \brief Index inside the Learning Rule.
		 */
		int LearningRuleIndex_withoutPost;

		/*!
		 * \brief This connection is a trigger connection for the learning rule without post synpatic effect
		 */
		bool TriggerConnection;
		
	public:
	
		/*!
		 * \brief Default constructor.
		 * 
		 * It creates a new interconnection object without source or target neuron.
		 */ 
		Interconnection();
	
		/*!
		 * \brief Constructor with parameters.
		 * 
		 * It creates and initializes a new interconnection object with the parameters.
		 * 
		 * \param NewIndex The interconnection index in the network configuration file.
		 * \param NewSource Source neuron of this connection.
		 * \param NewTarget Target neuron of this connection.
		 * \param NewDelay Delay of this connection.
		 * \param NewType Connection type (excitatory, inhibitory, electrical coupling...) of this connection. The meaning of a value is depend on the neuron model.
		 * \param NewWeight Synaptic weight of this connection.
		 * \param NewMaxWeight Maximum synaptic weight of this connection.
		 * \param NewWeightChange Learning (or weight change) rule associated to this connection.
		 * \param NewLearningRuleIndex Current learning rule index.
		 */
		Interconnection(int NewIndex, Neuron * NewSource, Neuron * NewTarget, float NewDelay, int NewType, float NewWeight, float NewMaxWeight, LearningRule* NewWeightChange_withPost, unsigned int NewLearningRuleIndex_withPost, LearningRule* NewWeightChange_withoutPost, unsigned int NewLearningRuleIndex_withoutPost);
		
		/*!
		 * \brief Object destructor.
		 *
		 * It remove an interconnetion object an releases the memory of the connection state.
		 */
		~Interconnection();

		/*!
		 * \brief It gets the connection index.
		 * 
		 * It gets the connection index in the network connections.
		 * 
		 * \return The connection index.
		 */
		long int GetIndex() const;
		
		/*!
		 * \brief It sets the connection index.
		 * 
		 * It sets the connection index in the network connections.
		 * 
		 * \param NewIndex The new index of the connection.
		 */
		void SetIndex(long int NewIndex);
		
		/*!
		 * \brief It gets the source neuron.
		 * 
		 * It gets the source neuron of the connection.
		 * 
		 * \return The source neuron of the connection.
		 */	
		//Neuron * GetSource() const;
		inline Neuron * GetSource() const{
			return this->source;	
		}
		
		/*!
		 * \brief It sets the source neuron.
		 * 
		 * It sets the source neuron of the connection.
		 * 
		 * \param NewSource The new source neuron of the connection.
		 */
		void SetSource(Neuron * NewSource);
		
		/*!
		 * \brief It gets the target neuron.
		 * 
		 * It gets the target neuron of the connection.
		 * 
		 * \return The target neuron of the connection.
		 */
		//Neuron * GetTarget() const;
		inline Neuron * GetTarget() const{
			return this->target;
		}
		
		/*!
		 * \brief It sets the target neuron.
		 * 
		 * It sets the target neuron of the connection.
		 * 
		 * \param NewTarget The new target neuron of the connection.
		 */
		void SetTarget(Neuron * NewTarget);
		
		/*!
		 * \brief It gets the connection delay.
		 * 
		 * It gets the delay in the spike propagation through this connection.
		 * 
		 * \return The connection delay.
		 */
		//inline double GetDelay() const;
		inline double GetDelay() const{
			return delay;
		}
		
		/*!
		 * \brief It sets the connection delay.
		 * 
		 * It sets the delay of the connection.
		 * 
		 * \param NewDelay The new connection delay.
		 */
		void SetDelay(double NewDelay);
		
		/*!
		 * \brief It gets the connection type.
		 * 
		 * It gets the connection type (excitatory, inhibitory, electrical coupling...) of this connection. The meaning of a value is depend on the neuron model. 
		 * 
		 * \return The connection type.
		 */
		//int GetType() const;
		inline int GetType() const{
			return type;
		}
		
		/*!
		 * \brief It sets the connection type.
		 * 
		 * It sets the connection type (excitatory, inhibitory, electrical coupling...) of this connection. The meaning of a value is depend on the neuron model.
		 * 
		 * \param NewType The new connection type.
		 */
		void SetType(int NewType);
		
		/*!
		 * \brief It gets the synaptic weight.
		 * 
		 * It gets the synaptic weight of the connection.
		 * 
		 * \return The synaptic weight.
		 */
		//float GetWeight() const;
		inline float GetWeight() const{
			return weight;
		}
		
		/*!
		 * \brief It sets the synaptic weight.
		 * 
		 * It sets the synaptic weight of the connection.
		 * 
		 * \param NewWeight The new synaptic weight of the connection.
		 */
		//void SetWeight(float NewWeight);
		inline void SetWeight(float NewWeight){
			this->weight = NewWeight;
		}

		/*!
		 * \brief It increment the synaptic weight and checks the final value is inside the limits.
		 * 
		 * It increment the synaptic weight and checks the final value is inside the limits.
		 * 
		 * \param Increment The synaptic weight increment of the connection.
		 */
		//void IncrementWeight(float Increment);
		inline void IncrementWeight(float Increment){
			this->weight += Increment;
			if(this->weight > this->GetMaxWeight()){
				this->weight = this->GetMaxWeight();
			}else if(this->weight < 0.0f){
				this->weight = 0.0f;
			}
		}
		
		/*!
		 * \brief It gets the maximum synaptic weight.
		 * 
		 * It gets the maximum synaptic weight of the connection.
		 * 
		 * \return The maximum synaptic weight.
		 */
		//float GetMaxWeight() const;
		inline float GetMaxWeight() const{
			return this->maxweight;
		}

		
		/*!
		 * \brief It sets the maximum synaptic weight.
		 * 
		 * It sets the maximum synaptic weight of the connection.
		 * 
		 * \param NewMaxWeight The new maximum synaptic weight of the connection.
		 */
		void SetMaxWeight(float NewMaxWeight);
		
		/*!
		 * \brief It gets the learning rule of this connection.
		 * 
		 * It gets the learning rule of the connection.
		 * 
		 * \return The learning rule of the connection. 0 if the connection hasn't learning rule.
		 */
		//LearningRule * GetWeightChange() const;
		inline LearningRule * GetWeightChange_withPost() const{
			return this->wchange_withPost;
		}
		
		/*!
		 * \brief It sets the learning rule of this connection.
		 * 
		 * It sets the learning rule of the connection.
		 * 
		 * \param NewWeightChange The new learning rule of the connection. 0 if the connection hasn't learning rule.
		 */
		void SetWeightChange_withPost(LearningRule * NewWeightChange_withPost);

				/*!
		 * \brief It gets the learning rule of this connection.
		 * 
		 * It gets the learning rule of the connection.
		 * 
		 * \return The learning rule of the connection. 0 if the connection hasn't learning rule.
		 */
		//LearningRule * GetWeightChange() const;
		inline LearningRule * GetWeightChange_withoutPost() const{
			return this->wchange_withoutPost;
		}
		
		/*!
		 * \brief It sets the learning rule of this connection.
		 * 
		 * It sets the learning rule of the connection.
		 * 
		 * \param NewWeightChange The new learning rule of the connection. 0 if the connection hasn't learning rule.
		 */
		void SetWeightChange_withoutPost(LearningRule * NewWeightChange_withoutPost);
		
		/*!
		 * \brief It gets the connection learning rule index.
		 * 
		 * It gets the connection learning rule index in the network connections.
		 * 
		 * \return The connection learning rule index.
		 */
		//int GetLearningRuleIndex() const;
		inline int GetLearningRuleIndex_withPost() const{
			return this->LearningRuleIndex_withPost;
		}

		/*!
		 * \brief It gets the connection learning rule index.
		 * 
		 * It gets the connection learning rule index in the network connections.
		 * 
		 * \return The connection learning rule index.
		 */
		//int GetLearningRuleIndex() const;
		inline int GetLearningRuleIndex_withoutPost() const{
			return this->LearningRuleIndex_withoutPost;
		}



		
		/*!
		 * \brief It sets the connection learning rule index.
		 * 
		 * It sets the connection learning rule index in the network connections.
		 * 
		 * \param NewIndex The new learning rule index of the connection.
		 */
		void SetLearningRuleIndex_withPost(int NewIndex);

		/*!
		 * \brief It sets the connection learning rule index.
		 * 
		 * It sets the connection learning rule index in the network connections.
		 * 
		 * \param NewIndex The new learning rule index of the connection.
		 */
		void SetLearningRuleIndex_withoutPost(int NewIndex);


		/*!
		 * \brief It clears the activity register of this connection.
		 * 
		 * It clears the activity register of this connections and sets their values to 0.
		 */
		void ClearActivity();
		
		/*!
		 * \brief It gets the activity in an specified index.
		 * 
		 * It gets the activity in an specified index.
		 * 
		 * \param index The index of the activity.
		 * 
		 * \return The activity in that index.
		 */
		float GetActivityAt(int index) const;
		
		/*!
		 * \brief It sets the activity in an specified index.
		 * 
		 * It sets the activity in an specified index.
		 * 
		 * \param The index of the activity.
		 * \param NewActivity The new activity to be changed.
		 */
		void SetActivityAt(int index, float NewActivity);
		
		/*!
		 * \brief It gets the time of the last propagated spike.
		 * 
		 * It gets the time of the last propagated spike through this connection.
		 * 
		 * \return The time of the last propagated spike.
		 */
		double GetLastSpikeTime() const;	
		
		/*!
		 * \brief It sets the time of the last propagated spike.
		 * 
		 * It sets the time of the last propagated spike through this connection.
		 * 
		 * \param NewTime The new time of the last propagated spike.
		 */
		void SetLastSpikeTime(double NewTime);
		
		/*!
		 * \brief It prints the interconnection info.
		 *
		 * It prints the current interconnection characteristics.
		 *
		 * \param out The stream where it prints the information.
		 *
		 * \return The stream after the printer.
		 */
		virtual ostream & PrintInfo(ostream & out);

		/*!
		 * \brief It sets the trigger connection option to true.
		 * 
		 * It sets the trigger connection option to true.
		 */
		void SetTriggerConnection();

		/*!
		 * \brief It return the trigger connection option.
		 * 
		 * It return the trigger connection option.
		 */
		bool GetTriggerConnection();
};
  
#endif /*INTERCONNECTION_H_*/