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

 Download zip file 
Help downloading and running models
Accession:153355
"... 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. "
Reference:
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;
Receptor(s):
Gene(s):
Transmitter(s):
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}
  end
  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
      end
      // 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
	  end
	  // 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
    end
  end
  pope
  
end


// 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
        end
    end
  
end


// adjusted to be compatible with hines by moving SynE outside of the cell
function set_gbar(gbar, currentHE)
	float gbar
	str currentHE
	setfield /HE{currentHE}_peri_SynE/SynE Gbar {gbar}
	setfield /HE{currentHE}_sync_SynE/SynE Gbar {gbar} 
end

// uses hard coded modes (sync/peri)
function InstantiateSynE(curHE)
	str curHE

	create neutral HE{curHE}_peri_SynE 
	create neutral HE{curHE}_sync_SynE 
	
	copy /library/SynE HE{curHE}_peri_SynE 	
	copy /library/SynE HE{curHE}_sync_SynE 

	// sync
	addmsg HE{curHE}_peri/synaptic		HE{curHE}_sync_SynE/SynE VOLTAGE Vm
	addmsg HE{curHE}_sync/synaptic 		HE{curHE}_sync_SynE/SynE POSTVOLTAGE Vm		
	addmsg HE{curHE}_sync_SynE/SynE 	HE{curHE}_sync/synaptic INJECT Ik	

	// peri
	addmsg HE{curHE}_sync/synaptic 		HE{curHE}_peri_SynE/SynE VOLTAGE Vm
	addmsg HE{curHE}_peri/synaptic 		HE{curHE}_peri_SynE/SynE POSTVOLTAGE Vm
	addmsg HE{curHE}_peri_SynE/SynE		HE{curHE}_peri/synaptic INJECT Ik

end

// 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}})
		InstantiateSynE {curHE}
		// setup messages (and delay table for mod function)
		str curHEname, modTablename
		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 
		//filename = "HE" @ currentHE @ "soma_Vm.txt"
			    curHEname = "HE" @ {curHE} @ "_" @ {curMode}
			  //  echo {curHEname}
			    modTablename = "HNinput/HN" @ {curHN} @ "_" @ {curMode} @ "_" @ {curHEname} @ "_ModDelay"
			    //echo {modTablename}
			    
				create table {modTablename}
				setfield {modTablename} step_mode 6
			    if ({strcmp {curHN} "X"} == 0)
        			echo "WARNING: Delay from HNX per mode not implemented"
        			delaytime = {({curHE}-3)*delayPerGanglion}
				else
					delaytime = {({curHE}-{curHN})*{delayPerGanglion}}
				//	nsteps = {round {(({curHE}-{curHN})*{delayPerGanglion})/{dt}}}
				end
       			nsteps = {round {delaytime/dt}}
			//	echo {curHE} "-" {curHN} "  " {nsteps}
				call {modTablename} TABCREATE {nsteps-1} 0 {nsteps-1}
			//	echo "bump"
				setfield {modTablename} table ==={defaultmod}
				// link mod table to buffer
				addmsg /HNinput/HN{curHN}_{curMode}_mod {modTablename} INPUT output
				// link buffer to synchan
				addmsg  {modTablename}  /{curHEname}/synaptic/SynS{curHN} MOD output
				// link spikes to synchan 
				addmsg /HNinput/HN{curHN}_{curMode}_spikes/spike /{curHEname}/synaptic/SynS{curHN} SPIKE
				setfield /{curHEname}/synaptic/SynS{curHN} synapse[0].delay {delaytime}
				
				// Add links to slow synchan: ----------------------
				// link buffer to synchan
				addmsg  {modTablename}  /{curHEname}/synaptic/SynS_slow{curHN} MOD output
				// link spikes to synchan 
				addmsg /HNinput/HN{curHN}_{curMode}_spikes/spike /{curHEname}/synaptic/SynS_slow{curHN} SPIKE
				setfield /{curHEname}/synaptic/SynS_slow{curHN} synapse[0].delay {delaytime}
				// end slow synchan section ------------------------
  
			end
		end
	end
end