// Octopus cell, stick representation
// From Spencer et al., Front. Comput. Neurosci., 22 October 2012 | https://doi.org/10.3389/fncom.2012.00083
// Figure 1.
load_file("nrngui.hoc")
load_proc("nrnmainmenu")

objref syn
objref ncl, weight
objref apc
strdef name

tstop = 1000

RM= 5000   // ohm cm2
ra=150  // ohm cm
c_m=0.9  //muF cm2
resting_Vm=-66.67
speccm = 0.9
totcap =12 // total cap in pF for cell 
somaarea = totcap *1E-6 / 1 // pf -> uF,assumes 1 uF/cm2; result is in cm2 
lstd = 1E4*sqrt(somaarea/PI) // convert from cm to um 

create soma
 soma   {nseg=1 diam=lstd L=lstd 
    insert klt ek_lt = -70
    insert kht ek_kht = -70
    insert jsrnaf ena_jsrnaf = 50
    insert ka ek_ka=-70
    insert ih eh_ih=-43
    insert hcno eh_hcno = -43 gbar_hcno = 0
    insert leak g_leak=1/10000 erev_leak = -65
    Ra=150 cm=1}
access soma

// convert from nanosiemens to mho/cm2.
func nstomho() {
    return (1E-9*$1/somaarea)
}

 soma {
    insert pas
    Ra=ra
    cm=c_m
    e_pas=resting_Vm
    g_pas=1/RM



}

 soma{
    gnabar_jsrnaf = nstomho(1000)
    gkhtbar_kht = nstomho(150)
    gkltbar_klt = 10*nstomho(600)
    gkabar_ka = 10*nstomho(0)
    ghbar_ih = 2*nstomho(0)
    gbar_hcno = nstomho(40)
    g_leak = nstomho(2)
    print " " , lstd
    print " " , gnabar_jsrnaf
    print " " , gkltbar_klt
    print " " , gkhtbar_kht
    print " " , g_leak
    print " " , gbar_hcno
}

objref syn[500], psyn[500], stim, stim1
nsyn=1
gmax=0 //uS (Minimum:0.5nS and Maximum 35nS)
/*
sections[6] { 
    syn[0]= new syn_g_Octopus(1)
    syn[0].onset=100
    syn[0].gmax=gmax
}
*/

amp=10
dur=150

amp1=-1
dur1=20

soma stim = new IClamp(0.5)

stim.del = 400
stim.dur = dur
stim.amp = amp

/*
sections [0] stim1 = new IClamp(0.5)

stim1.del = 420
stim1.dur = dur1
stim1.amp = amp1
*/


objref g[20]
ngraph=0

proc addgraph() { local ii  // define subroutine to add a new graph
                // addgraph("variable", minvalue, maxvalue)
    ngraph = ngraph+1
    ii = ngraph-1
    g[ii] = new Graph()
    g[ii].size(0,tstop,$2,$3)
    g[ii].xaxis()
    g[ii].yaxis()
    g[ii].addvar($s1,1,0)
    g[ii].save_name("graphList[0].")
    graphList[0].append(g[ii])
}


objref stfunc,shape
shape=new Shape(0)
shape.view(-792.112, -154.611, 1363.32, 1185.94, 5, 340, 300, 260)
shape.show(0)
proc make_shape_plot(){//DRAWS THE POINTS ON THE CELL
    shape.point_mark_remove()

    for i=0,nsyn{
        shape.point_mark(syn[i], 2, 4, 4)   
    }

}///END SHAPE

addgraph("soma.v(0.5)",-100,100)
//addgraph("sections[6].v(0.5)",-100,100)
//addgraph("syn[0].inmda",-1,1)
//addgraph("dend.v(0.5)",-100,100)
//addgraph("soma.i_pas(0.5)",-100,100)
//g[0].addexpr("soma.v(0)",2,1)
//g[1].addexpr("syn[1].gampa",-1,1)
//g[2].addexpr("syn[1].iampa",-1,1)
make_shape_plot()

nrncontrolmenu()