/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Plot of VSFP responses in Fig. 9 A, 9B1, 9B2, 9C1, 9C2
of Akemann et al. Biophys. J. (2009) 96:3959-3976
Laboratory for Neuronal Circuit Dynamics
RIKEN Brain Science Institute, Wako City, Japan
http://www.neurodynamics.brain.riken.jp
Date of Implementation: July 2008
Contact: akemann@brain.riken.jp
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
load_file("morphology_mechanisms.hoc")
load_file("nrngui.hoc")
objref fig9A, fig9B1, fig9B2, fig9C1, fig9C2
objref vbox
begintemplate protocol
public stimStart, stimEnd, end, ampBase, ampStim, traceDT
stimStart = 0
stimEnd = 0
end = 0
ampBase = 0
ampStim = 0
traceDT = 0
endtemplate protocol
//*********************************************************************************
proc run_model() { localobj time, voltage, VP23activation, VP23fluorescence, VP31activation, VP31fluorescence, electrode
// $o1 protocol
if( $o1.stimStart >= $o1.stimEnd || $o1.stimEnd >= $o1.end ) {
print "Input error!"
return }
time = new Vector()
voltage = new Vector()
VP23activation = new Vector()
VP23fluorescence = new Vector()
VP31activation = new Vector()
VP31fluorescence = new Vector()
soma electrode = new IClamp(0.5)
soma nc_VSFP23M3 = 0
soma nc_VSFP31M3 = 0
simulate( $o1, time, voltage, electrode )
soma nc_VSFP23M3 = 500e8 // 500 units per um2
soma nc_VSFP31M3 = 0
simulateVSFP23( $o1, VP23activation, VP23fluorescence, electrode )
if( stoprun == 1 ) return
soma nc_VSFP23M3 = 0
soma nc_VSFP31M3 = 500e8
simulateVSFP31( $o1, VP31activation, VP31fluorescence, electrode )
if( stoprun == 1 ) return
vbox=new VBox()
vbox.intercept(1)
fig9A = new Graph()
fig9A.size( 0, 10, -1, 1 )
voltage.line( fig9A, time )
fig9A.label("voltage")
fig9A.exec_menu("View = plot")
fig9A.label(0.15, 0.5, "fig9A")
fig9B1 = new Graph()
fig9B1.size( 0, 10, -1, 1 )
VP23activation.line( fig9B1, time )
fig9B1.label("VSFP23 activation")
fig9B1.exec_menu("View = plot")
fig9B1.label(0.15, 0.5, "fig9B1")
fig9B2 = new Graph()
fig9B2.size( 0, 10, -1, 1 )
VP23fluorescence.line( fig9B2, time )
fig9B2.label("VSFP23 fluorescence")
fig9B2.exec_menu("View = plot")
fig9B2.label(0.15, 0.5, "fig9B2")
fig9C1 = new Graph()
fig9C1.size( 0, 10, -1, 1 )
VP31activation.line( fig9C1, time )
fig9C1.label("VSFP31 activation")
fig9C1.exec_menu("View = plot")
fig9C1.label(0.15, 0.5, "fig9C1")
fig9C2 = new Graph()
fig9C2.size( 0, 10, -1, 1 )
VP31fluorescence.line( fig9C2, time )
fig9C2.label("VSFP31 fluorescence")
fig9C2.exec_menu("View = plot")
fig9C2.label(0.15, 0.5, "fig9C2")
vbox.intercept(0)
vbox.map("figure 9 left panel simulations Akemann et al. 2009",120,180,600,500)
}
//**********************************************************************
proc simulate() {
// $o1 protocol
// $o2 time vector
// $o3 voltage vector
// $o4 electrode
if($o1.traceDT > dt) {$o1.traceDT = int($o1.traceDT/dt) * dt} else {$o1.traceDT = dt}
$o2.resize(int($o1.end/$o1.traceDT)+1)
$o3.resize(int($o1.end/$o1.traceDT)+1)
$o2.record( &t, $o1.traceDT )
$o3.record( &soma.v(0.5), $o1.traceDT )
$o4.del = 0
$o4.dur = $o1.end
$o4.amp = $o1.ampBase
tstop = $o1.stimStart
run()
if( stoprun ==1 ) return
$o4.amp = $o1.ampStim
continuerun($o1.stimEnd)
if( stoprun == 1 ) return
$o4.amp = $o1.ampBase
continuerun($o1.end)
if ( stoprun == 1) return
}
//**********************************************************************
proc simulateVSFP23() {
// $o1 protocol
// $o2 VPactivation vector
// $o3 VPfluorescence vector
// $o4 electrode
if($o1.traceDT > dt) {$o1.traceDT = int($o1.traceDT/dt) * dt} else {$o1.traceDT = dt}
$o2.resize(int($o1.end/$o1.traceDT)+1)
$o3.resize(int($o1.end/$o1.traceDT)+1)
$o2.record( &soma.fluoActivation_VSFP23M3(0.5), $o1.traceDT )
$o3.record( &soma.fluoSignal_VSFP23M3(0.5), $o1.traceDT )
$o4.del = 0
$o4.dur = $o1.end
$o4.amp = $o1.ampBase
tstop = $o1.stimStart
run()
if( stoprun ==1 ) return
$o4.amp = $o1.ampStim
continuerun($o1.stimEnd)
if( stoprun == 1 ) return
$o4.amp = $o1.ampBase
continuerun($o1.end)
if ( stoprun == 1) return
}
// ***************************************************************************
proc simulateVSFP31() {
// $o1 protocol
// $o2 VPactivation vector
// $o3 VPfluorescence vector
// $o4 electrode
if($o1.traceDT > dt) {$o1.traceDT = int($o1.traceDT/dt) * dt} else {$o1.traceDT = dt}
$o2.resize(int($o1.end/$o1.traceDT)+1)
$o3.resize(int($o1.end/$o1.traceDT)+1)
$o2.record( &soma.fluoActivation_VSFP31M3(0.5), $o1.traceDT )
$o3.record( &soma.fluoSignal_VSFP31M3(0.5), $o1.traceDT )
$o4.del = 0
$o4.dur = $o1.end
$o4.amp = $o1.ampBase
tstop = $o1.stimStart
run()
if( stoprun ==1 ) return
$o4.amp = $o1.ampStim
continuerun($o1.stimEnd)
if( stoprun == 1 ) return
$o4.amp = $o1.ampBase
continuerun($o1.end)
if ( stoprun == 1) return
}
//************* Main *******************************************
objref prot
prot = new protocol()
prot.stimStart = 200
prot.stimEnd = 400
prot.end = 700
prot.ampBase = -0.020 // (nA)
prot.ampStim = 0 // (nA)
dt = 0.005
v_init = -69.7
nrnsecmenu(0.5, 1)
//if( ismembrane("VSFP23M3") ) nrnglobalmechmenu("VSFP23M3")
//if( ismembrane("VSFP31M3") ) nrnglobalmechmenu("VSFP31M3")
xpanel("Figure 9 left panel")
xvalue("Start stimulus (ms)", "prot.stimStart")
xvalue("End of Simulation (ms)", "prot.stimEnd")
xvalue("End of Protocol (ms)", "prot.end")
xlabel("")
xvalue("Baseline current (nA)", "prot.ampBase")
xvalue("Stimulus current (nA)", "prot.ampStim")
xlabel("")
xvalue("dt", "dt")
xvalue("t", "t")
xbutton("Stop", "stoprun = 1")
xlabel("")
xbutton("Start", "run_model( prot )")
xlabel("")
xpanel()