#cp ../haymod3e/runcontrol_check.py runcontrol.py # runcontrols # A script for determining the control neuron F-I curve and limit cycle. # # The input code for the hoc-interface is based on BAC_firing.hoc by Etay Hay (2011) # # Tuomo Maki-Marttunen, Oct 2014 # (CC BY) from neuron import h import mytools import pickle import numpy as np import sys spikfreqsAll = [] timescAll = [] VsomacAll = [] VDerivcAll = [] VDcoeffAll = [] VdendcAll = [] VdDcoeffAll = [] VdDerivcAll = [] CasomacAll = [] CaDerivcAll = [] CaDcoeffAll = [] CadendcAll = [] CadDerivcAll = [] CadDcoeffAll = [] times_controlAll = [] Vsoma_controlAll = [] Vdend_controlAll = [] Casoma_controlAll = [] Cadend_controlAll = [] Ihmod = 0.0 if len(sys.argv) > 1: Ihmod = float(sys.argv[1]) for icell in range(0,1): morphology_file = "morphologies/cell"+str(icell+1)+".asc" biophys_file = "models/L5PCbiophys3.hoc" template_file = "models/L5PCtemplate.hoc" v0 = -80 ca0 = 0.0001 proximalpoint = 400 distalpoint = 620 BACdt = 5.0 h(""" load_file("stdlib.hoc") load_file("stdrun.hoc") objref cvode cvode = new CVode() cvode.active(1) cvode.atol(0.0002) load_file("import3d.hoc") objref L5PC load_file(\""""+biophys_file+"""\") load_file(\""""+template_file+"""\") L5PC = new L5PCtemplate(\""""+morphology_file+"""\") access L5PC.soma objref st1 st1 = new IClamp(0.5) L5PC.soma st1 objref vsoma, vdend, recSite, vdend2, isoma, cadend, cadend2, casoma vsoma = new Vector() casoma = new Vector() vdend = new Vector() cadend = new Vector() vdend2 = new Vector() cadend2 = new Vector() objref sl,ns,tvec tvec = new Vector() sl = new List() double siteVec[2] sl = L5PC.locateSites("apic","""+str(distalpoint)+""") maxdiam = 0 for(i=0;i<sl.count();i+=1){ dd1 = sl.o[i].x[1] dd = L5PC.apic[sl.o[i].x[0]].diam(dd1) if (dd > maxdiam) { j = i maxdiam = dd } } siteVec[0] = sl.o[j].x[0] siteVec[1] = sl.o[j].x[1] print "distalpoint gCa_HVA: ", L5PC.apic[siteVec[0]].gCa_HVAbar_Ca_HVA print "distalpoint gCa_LVA: ", L5PC.apic[siteVec[0]].gCa_LVAstbar_Ca_LVAst L5PC.apic[siteVec[0]] cvode.record(&v(siteVec[1]),vdend,tvec) L5PC.apic[siteVec[0]] cvode.record(&cai(siteVec[1]),cadend,tvec) L5PC.soma cvode.record(&v(0.5),vsoma,tvec) L5PC.soma cvode.record(&cai(0.5),casoma,tvec) """) #Block or amplify Ih channels: h("""forall if(ismembrane("Ih")) { offma_Ih = offma_Ih + """+str(Ihmod)+""" } """) Is = [0.1*x for x in range(0,16)] spikfreqs = len(Is)*[0] Is_this = [0.0,1.0, 0.5] Niter = 15 Vmaxs_tested = [] Vmaxdends_tested = [] Is_tested = [] for iI in range(0,Niter): squareAmp = Is_this[min(iI,2)] squareDur = 15800 tstop = 16000 h(""" tstop = """+str(tstop)+""" v_init = """+str(v0)+""" cai0_ca_ion = """+str(ca0)+""" st1.amp = """+str(squareAmp)+""" st1.dur = """+str(squareDur)+""" st1.del = 10200 """) h.init() h.run() times=np.array(h.tvec) Vsoma=np.array(h.vsoma) Vdend=np.array(h.vdend) Casoma=np.array(h.casoma) Cadend=np.array(h.cadend) spikes = mytools.spike_times(times,Vsoma,-35,100) if iI < 2: continue if len(spikes) > 0: Is_this = [Is_this[0], Is_this[2], (Is_this[0]+Is_this[2])/2] else: Is_this = [Is_this[2], Is_this[1], (Is_this[2]+Is_this[1])/2] Vmaxs_tested.append(max(Vsoma)) Vmaxdends_tested.append(max(Vdend)) Is_tested.append(Is_this[min(iI,2)]) picklelist = [Is_tested,Vmaxs_tested,Vmaxdends_tested] file = open('fI_wait_Ihmod'+str(Ihmod)+'_thresh.sav', 'wb') pickle.dump(picklelist,file) file.close()