// Experiment with 2-component axon extention tail, and only Na channels in SIZ compartments 

// nrngui stuff and ion chans
load_file("inc-first.ses")

strdef file_name, ses_file
file_name = "ext-axon-70um-onlyNa"

sprint(ses_file, "neuron-CB-ext-axon-2pieces-chans-%s.ses", file_name)

//load CellBuilder
{load_file(ses_file)}


{
xpanel("RunControl", 0)
v_init = -60
xvalue("Init","v_init", 1,"stdinit()", 1, 1 )
xbutton("Init & Run","run()")
xbutton("Stop","stoprun=1")
runStopAt = 5
xvalue("Continue til","runStopAt", 1,"{continuerun(runStopAt) stoprun=1}", 1, 1 )
runStopIn = 1
xvalue("Continue for","runStopIn", 1,"{continuerun(t + runStopIn) stoprun=1}", 1, 1 )
xbutton("Single Step","steprun()")
t = 200
xvalue("t","t", 2 )
tstop = 110
xvalue("Tstop","tstop", 1,"tstop_changed()", 0, 1 )
dt = 0.025
xvalue("dt","dt", 1,"setdt()", 0, 1 )
steps_per_ms = 40
xvalue("Points plotted/ms","steps_per_ms", 1,"setdt()", 0, 1 )
screen_update_invl = 0.1
xvalue("Scrn update invl","screen_update_invl", 1,"", 0, 1 )
realtime = 1.12
xvalue("Real Time","realtime", 0,"", 0, 1 )
xpanel(893,777)
}

// load common funcs
load_file("fitfuncs.hoc")

print_elec_cell()

// calc morph stats
load_file("stats.hoc")

load_file("v-graph-bigger-axon-2pieces.ses")

load_file("vclamp_-85_to_-25mV.ses")

load_file("graph-i-vc-ext-axon.ses")

// save state in this file
sprint(state_file_name, "state-neuron-CB+act+elec+ext-axon-2piece-chans-%s.bin", file_name)

// Save voltage from multiple points in the cell
objref axonv[8]
axonv[0] = new Vector()
axonv[1] = new Vector()
axonv[2] = new Vector()
axonv[3] = new Vector()
axonv[4] = new Vector()
axonv[5] = new Vector()
axonv[6] = new Vector()
axonv[7] = new Vector()

// (1) end towards soma, (0) end distal
// axon[13] attaches to soma, axon[0] distal end

// axon[12].nseg=1
// axon[13].nseg=1
// record axon[12].v(0.5) & record axon[13].v(0.5)
// axon[13].ri=25.045413
// axon[12].ri=6.2445732
axon[13] axonv[6].record(&v(0.5))
axon[12] axonv[7].record(&v(0.5))
axonv[6].label("axon[13](0.5)")
axonv[7].label("axon[12](0.5)")

// axon[6] to axon[7] (both have nseg=1)
// axon[7].ri(0.5) = 1.8150921
axon[7] axonv[0].record(&v(0.5))
axon[6] axonv[1].record(&v(0.5))
axonv[0].label("axon[7](0.5)")
axonv[1].label("axon[6](0.5)")

// here we switch
// (0) end towards soma, (1) end distal
// axon_ext[1].nseg=25
// record axon_ext[1].v(0.02) & .v(0.06)
// .ri(0.06) = 98.22134
access axon_ext[1] 
axonv[2].record(&v(0.02))
axonv[3].record(&v(0.06))
axonv[2].label("axon_ext[1](0.02)")
axonv[3].label("axon_ext[1](0.06)")

// axon_ext[0].nseg=5
// record axon_ext[0].v(0.3) & .v(0.5)
// .ri(0.06) = 52.640496
access axon_ext[0] 
axonv[4].record(&v(0.3))
axonv[5].record(&v(0.5))
axonv[4].label("axon_ext[0](0.3)")
axonv[5].label("axon_ext[0](0.5)")


// saves vector into file, uses vector's label for name
// Usage: saveVec(vector, name_append)
// vector: object to write
// name_append: Name to append to file_name
proc saveVec() { strdef savefilename
  objref savefile
  sprint(savefilename, "data-%s_%s_%s_dt_%fms.bin", file_name, $o1.label(), $s2, dt)
  savefile=new File(savefilename)
  savefile.wopen()
  n = $o1.vwrite(savefile)
  if (n == 1) { print "Wrote '", savefilename, "'.\n"
  }
  savefile.close()
}

// run pas and active and save data
// Usage: runSave(name_append)
// name_append: will be appended after "pas"/"act"
proc runSave() { strdef savename
  // start w pas
  axon_ext[1].gmax_DmNaT = 0
  axon_ext[1].gmax_DmNaP = 0

  // run
  run()

  // after running, save the files
  sprint(savename, "pas%s", $s1)
  print axonv.size()
  for i = 0, 7 {
    saveVec(axonv[i], savename)
  }

  // run active & save data
  sprint(savename, "act%s", $s1)
  axon_ext[1].gmax_DmNaT = 0.24 // orig
  //axon_ext[1].gmax_DmNaT = 0.05   
  axon_ext[1].gmax_DmNaP = 0.00011 // orig
  //axon_ext[1].gmax_DmNaP = 0.0003
  run()
  for i = 0, 7 {
    saveVec(axonv[i], savename)
  }
}