Leech Heart (HE) Motor Neuron conductances contributions to NN activity (Lamb & Calabrese 2013)

 Download zip file 
Help downloading and running models
"... To explore the relationship between conductances, and in particular how they influence the activity of motor neurons in the well characterized leech heartbeat system, we developed a new multi-compartmental Hodgkin-Huxley style leech heart motor neuron model. To do so, we evolved a population of model instances, which differed in the density of specific conductances, capable of achieving specific output activity targets given an associated input pattern. ... We found that the strengths of many conductances, including those with differing dynamics, had strong partial correlations and that these relationships appeared to be linked by their influence on heart motor neuron activity. Conductances that had positive correlations opposed one another and had the opposite effects on activity metrics when perturbed whereas conductances that had negative correlations could compensate for one another and had similar effects on activity metrics. "
1 . Lamb DG, Calabrese RL (2013) Correlated conductance parameters in leech heart motor neurons contribute to motor pattern formation. PLoS One 8:e79267 [PubMed]
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Realistic Network; Neuron or other electrically excitable cell;
Brain Region(s)/Organism: Leech;
Cell Type(s): Leech heart motor neuron (HE);
Channel(s): I Na,p; I A; I K; I K,leak; I K,Ca; I Sodium; I Calcium; I Na, leak;
Gap Junctions: Gap junctions;
Simulation Environment: GENESIS;
Model Concept(s): Action Potential Initiation; Activity Patterns; Bursting; Temporal Pattern Generation; Detailed Neuronal Models; Parameter sensitivity; Conductance distributions;
Implementer(s): Lamb, Damon [Damon.Lamb at neurology.ufl.edu];
Search NeuronDB for information about:  I Na,p; I A; I K; I K,leak; I K,Ca; I Sodium; I Calcium; I Na, leak;
// HNinput.g
// This file contains the code to load the spiketime files for all presynaptic HN cells
// as well as the 'modulation waveform' representing the presynaptic membrane voltage.
// Originally created while preparing multi-compartmental model for use with evolutionary algorithms.
// Oct 2010
// Damon Lamb

// loads HN spike tables from rootdir into 
// /HNinput/{input_id}_{mode}_spikes and modulation waveforms to /HNinput/HN{curID}_{curMode}_mod
// NOTE: table goes from 0 to length, resulting in one additional time step to account for the last entry.
//       input must be similarly structured. This is mathematically consistent with an end time
function loadHNinput(coord_modes, input_ids, rootdir, length, samplefreq)
  str coord_modes // peri or sync
  str input_ids  // 3, 4, 6, 7, or X for the source of the input 
  str rootdir //root directory for the spike and presynaptic Vm waveform files, WITHOUT trailing /
  float length, samplefreq  // length in seconds and sample frequency of presynaptic voltage file(s)
  int nsamples = length * samplefreq 
  float Vm	
  if ({verbose} == 1)
	echo "Loading HN spike times and presynaptic voltage tables from " {rootdir}
  str curMode, curID
  pushe /  
  create neutral HNinput

 // loop over modes and input IDs
  foreach curMode({arglist {coord_modes}})
    foreach curID ({arglist {input_ids}})
      if ({verbose} == 1)
        echo "   " HN{curID}_{curMode} into HNinput/{curID}_{curMode}_spikes
      // create a timetable for each mode-input ID pair
      create timetable HNinput/HN{curID}_{curMode}_spikes
      // initialize timetable
      setfield HNinput/HN{curID}_{curMode}_spikes maxtime 2000 method 4 act_val 1.0 fname {rootdir}/HN{curID}_{curMode}
      // load data into timetable
      call HNinput/HN{curID}_{curMode}_spikes TABFILL
      // create a spikegen to translate spiketimes into SPIKE messages to the synchans
      create spikegen HNinput/HN{curID}_{curMode}_spikes/spike
      setfield HNinput/HN{curID}_{curMode}_spikes/spike output_amp 1 thresh 0.5 abs_refract 0.005
      addmsg HNinput/HN{curID}_{curMode}_spikes HNinput/HN{curID}_{curMode}_spikes/spike INPUT activation
      if ({verbose} == 1)
        echo "   " HN{curID}_{curMode}_mod into HNinput/HN{curID}_{curMode}_mod
	  // create a voltage table for the presynaptic (modulation) waveform 		
      create table HNinput/HN{curID}_{curMode}_mod
      setfield HNinput/HN{curID}_{curMode}_mod step_mode 2 stepsize 0
      call HNinput/HN{curID}_{curMode}_mod TABCREATE {nsamples} 0 {length - 1/samplefreq}
      file2tab {rootdir}/HN{curID}_{curMode}_mod HNinput/HN{curID}_{curMode}_mod table -xy {nsamples} 
      // debug //			
      //tab2file ./Debug/testsyn{curID}table_{curMode}_new HNinput/HN{curID}_{curMode}_mod table -mode xy -overwrite

// creates generic SynS (synchan + synS-mod chan) objects
function createHNsyn(input_ids)

  str input_ids  // 3, 4, 6, 7, or X for the source of the input 
  str HE_ids    // ganglia # of HE cells in which to create the SynS objects
  //echo "Creating SynS (mod and synchan) objects for HN: " {input_ids} 
  str curID, chanpath
 // loop over modes and input IDs

    foreach curID ({arglist {input_ids}})
       /* mod object not used anymore - mod waveform directly created and passed to synchan
        chanpath = "SynS" @ {curID}
        create  synchan {chanpath}
        if ({strcmp {curID} "X"} == 0)
        	echo {curID} ":X"
        	setfield        ^			\
        			Ek		-0.0625 	\
        			tau1	1.0e-2 		\      // sec
        			tau2	4.0e-3		\      // sec
        			gmax	0               // Siemens  	
        else // synchan from 2 4 6 7
        	setfield        ^			\
        			Ek		-0.0625		\
        			tau1	1.25e-2 		\      // sec // adjusted for testing the result of faster dynamics, formerly 5e-2s
        			tau2	4.0e-3		\      // sec
        			gmax	0               // Siemens
        	chanpath = "SynS_slow" @ {curID}
			echo "Creating slow aspect of synaptic input: " {chanpath}
        	create  synchan {chanpath}
       	  	setfield        ^			\  // Formerly, this was approximated with a single synchan (above). Slower dynamics are used here.
        			Ek		-0.0625		\
        			tau1	15e-2 		\   	
        			tau2	4.e-3		\      // sec
        			gmax	0               // Siemens

// NOTE: you cannot change the time step after setting the delay table nsteps (by calling this function)
//  todo: add a 'reset' of nsteps function to be called after changing the simulation dt
function make_syn_connections( coord_modes, input_ids, HE_ganglia, delayPerGanglion, dt, defaultmod)
	str input_ids  //= eg "3 4 6 7 X" //for the source of the input 
	str coord_modes //= eg "peri sync"
	str HE_ganglia // = "8 9 10 11 12 13 14"
	float delayPerGanglion, dt, defaultmod

	int nsteps
	float delaytime
	str curHN, curMode, curHE
	foreach curHE({arglist {HE_ganglia}})
	// setup gapjunction Vm, I_Injected messages
		addmsg HE{curHE}_peri/synaptic 		HE{curHE}_sync/synaptic/SynE VOLTAGE 	Vm
		addmsg HE{curHE}_sync/synaptic 		HE{curHE}_sync/synaptic/SynE POSTVOLTAGE Vm
		addmsg HE{curHE}_sync/synaptic/SynE HE{curHE}_sync/synaptic INJECT 			Ik

		addmsg HE{curHE}_sync/synaptic 		HE{curHE}_peri/synaptic/SynE VOLTAGE 	Vm
		addmsg HE{curHE}_peri/synaptic 		HE{curHE}_peri/synaptic/SynE POSTVOLTAGE Vm
		addmsg HE{curHE}_peri/synaptic/SynE HE{curHE}_peri/synaptic INJECT 			Ik
		// setup messages (and delay table for mod function)
		foreach curMode({arglist {coord_modes}})
			foreach curHN ({arglist {input_ids}})	
			    // create buffer table in each HE's synaptic compartment
			    //echo "  making:  " /HE{curHE}_{curMode}/synaptic/HN{curHN}_ModDelay 
				create table HE{curHE}_{curMode}/synaptic/HN{curHN}_ModDelay
				setfield HE{curHE}_{curMode}/synaptic/HN{curHN}_ModDelay step_mode 6
			    if ({strcmp {curHN} "X"} == 0)
        			echo "WARNING: Delay from HNX per mode not implemented"
        			delaytime = {({curHE}-3)*delayPerGanglion}
					delaytime = {({curHE}-{curHN})*{delayPerGanglion}}
				//	nsteps = {round {(({curHE}-{curHN})*{delayPerGanglion})/{dt}}}
       			nsteps = {round {delaytime/dt}}
			//	echo {curHE} "-" {curHN} "  " {nsteps}
				call /HE{curHE}_{curMode}/synaptic/HN{curHN}_ModDelay TABCREATE {nsteps-1} 0 {nsteps-1}
			//	echo "bump"
				setfield /HE{curHE}_{curMode}/synaptic/HN{curHN}_ModDelay table ==={defaultmod}
				// link mod table to buffer
				addmsg /HNinput/HN{curHN}_{curMode}_mod /HE{curHE}_{curMode}/synaptic/HN{curHN}_ModDelay INPUT output
				// link buffer to synchan
				addmsg  /HE{curHE}_{curMode}/synaptic/HN{curHN}_ModDelay  /HE{curHE}_{curMode}/synaptic/SynS{curHN} MOD output
				// link spikes to synchan 
				addmsg /HNinput/HN{curHN}_{curMode}_spikes/spike /HE{curHE}_{curMode}/synaptic/SynS{curHN} SPIKE
				setfield /HE{curHE}_{curMode}/synaptic/SynS{curHN} synapse[0].delay {delaytime}
				// Add links to slow synchan: ----------------------
				// link buffer to synchan
				addmsg  /HE{curHE}_{curMode}/synaptic/HN{curHN}_ModDelay  /HE{curHE}_{curMode}/synaptic/SynS_slow{curHN} MOD output
				// link spikes to synchan 
				addmsg /HNinput/HN{curHN}_{curMode}_spikes/spike /HE{curHE}_{curMode}/synaptic/SynS_slow{curHN} SPIKE
				setfield /HE{curHE}_{curMode}/synaptic/SynS_slow{curHN} synapse[0].delay {delaytime}
				// end slow synchan section ------------------------