from sim import Simulation
import network
import neuron
import progress
from math import ceil
def run(netdef,tosave,modify,procs,thisProc,stims,param,repeats,sim_time,SaveSpikes,SaveVoltage,SaveConductance,SaveCurrent):
net = netdef()
if SaveVoltage:
net.recordVoltage()
repeats = int(repeats)
# Randomseed was 200 for most figures
# Changed to 200 for rat
# Changed to 200 for anurans
s = Simulation(net, randomseed=200,delay=25)
s.verbose = False
s.sim_time = sim_time
s.dt = 0.050
total = len(stims)*len(param)*repeats
spp = ceil(float(total)/procs)
start = thisProc*spp
end = (thisProc+1)*spp
count = 0
for a in param:
s.set_amplitude(net.sim_amp)
for d in stims*repeats:
if count >= start and count < end:
net = modify(net,a,d)
progress.update(count-start,spp,thisProc)
s.stim_dur = d
s.run()
key = [a,d]
net.savecells(tosave, key, spikes=SaveSpikes,voltage=SaveVoltage,conductance=SaveConductance,current=SaveCurrent)
count += 1
progress.update(spp,spp,thisProc)
r = [thisProc,net.savedparams,net.savedcells]
return r
def C_JUST_DNLL(net,a,stim,getparams=False):
# I used this simulation to figure out the actual input rate of the inhibitory spikes
# It turns out to be 250 Hz
if getparams:
stims = [1000]
param = [1]
return [1000,1500,stims,param]
mult = 1.0
# modifyAMPA/NMDA scale by total number of receptors so we multiply by 2 since we have 2 inputs
net.cells["IC"]["cells"][0].sec["soma"].modifyAMPA(gmax=0.004*2*mult)
net.cells["IC"]["cells"][0].sec["soma"].modifyNMDA(gmax=0.020*2*mult,mg=1.0)
net.cells["IC"]["cells"][0].sec["soma"].modifyGABAa(gmax=0.0025)
net.cells["IC"]["cells"][0].sec["soma"](0.5).pas.g = 1.0/4000
net.cells["MSO_ON"]["delay"] = 10
net.cells["MSO_OFF"]["delay"] = 6
net.cells["DNLL"]["delay"] = 0
net.cells["MSO_ON"]["stim"] = "IClamp"
net.cells["MSO_ON"]["stimamp"] = 0.1
net.cells["MSO_OFF"]["stim"] = "IClamp"
net.cells["MSO_OFF"]["stimamp"] = 0.1
return net
def C_PAIREDTONE(net,a,stim,getparams=False):
if getparams:
stims = [1]
delay = [i for i in range(0,105,5)]
param = []
for i in delay:
param.append([i])
return [20,250,stims,param]
# modifyAMPA/NMDA scale by total number of receptors so we multiply by 2 since we have 2 inputs
net.cells["IC"]["cells"][0].sec["soma"].modifyAMPA(gmax=0.004*4)
net.cells["IC"]["cells"][0].sec["soma"].modifyNMDA(gmax=0.020*4,mg=1.0)
net.cells["IC"]["cells"][0].sec["soma"].modifyGABAa(gmax=0.0025*2)
net.cells["IC"]["cells"][0].sec["soma"](0.5).pas.g = 1.0/4000
net.cells["MSO_ON"]["delay"] = 10+a[0]
net.cells["MSO_OFF"]["delay"] = 6+a[0]
net.cells["DNLL"]["delay"] = 9+a[0]
net.cells["MSO_ON2"]["delay"] = 10
net.cells["MSO_OFF2"]["delay"] = 6
net.cells["DNLL2"]["delay"] = 9
net.cells["MSO_ON"]["stim"] = "IClamp"
net.cells["MSO_ON"]["stimamp"] = 0.1
net.cells["MSO_OFF"]["stim"] = "IClamp"
net.cells["MSO_OFF"]["stimamp"] = 0.1
net.cells["MSO_ON2"]["stim"] = "IClampFixed15"
net.cells["MSO_ON2"]["stimamp"] = 0.1
net.cells["MSO_OFF2"]["stim"] = "IClampFixed15"
net.cells["MSO_OFF2"]["stimamp"] = 0.1
return net
def C_DEFAULT(net,a,stim,getparams=False):
if getparams:
stims = [i for i in range(1,26,1)]
param = [1]
return [1,100,stims,param]
mult = 1.0
# modifyAMPA/NMDA scale by total number of receptors so we multiply by 2 since we have 2 inputs
net.cells["IC"]["cells"][0].sec["soma"].modifyAMPA(gmax=0.004*2*mult)
net.cells["IC"]["cells"][0].sec["soma"].modifyNMDA(gmax=0.020*2*mult,mg=1.0)
net.cells["IC"]["cells"][0].sec["soma"].modifyGABAa(gmax=0.0025)
net.cells["IC"]["cells"][0].sec["soma"](0.5).pas.g = 1.0/4000
net.cells["MSO_ON"]["delay"] = 10
net.cells["MSO_OFF"]["delay"] = 6
net.cells["DNLL"]["delay"] = 9
net.cells["MSO_ON"]["stim"] = "IClamp"
net.cells["MSO_ON"]["stimamp"] = 0.1
net.cells["MSO_OFF"]["stim"] = "IClamp"
net.cells["MSO_OFF"]["stimamp"] = 0.1
return net
def C_NMDA_BETA(net,a,stim,getparams=False):
if getparams:
stims = [i for i in range(1,201,2)]#+[i for i in range(50,100,2)]+[i for i in range(100,251,5)];
NMDAbeta = [0.00165,0.0033,0.0066,0.0132]
param = []
for b in NMDAbeta:
param.append([a,b])
return [5,500,stims,param]
if stim <= 25:
mult = 0.375*(stim)
mult = 0.04*stim
mult = 1
else:
mult = 1.0
# modifyAMPA/NMDA scale by total number of receptors so we multiply by 2 since we have 2 inputs
net.cells["IC"]["cells"][0].sec["soma"].modifyAMPA(gmax=0.004*2*mult)
net.cells["IC"]["cells"][0].sec["soma"].modifyNMDA(gmax=(0.020+0.010)*2*mult,Beta=a[0],mg=1.0)
net.cells["IC"]["cells"][0].sec["soma"].modifyGABAa(gmax=0.0025) # Normally 0.0035
net.cells["MSO_ON"]["delay"] = 10
net.cells["MSO_OFF"]["delay"] = 6
net.cells["DNLL"]["delay"] = 9
net.cells["MSO_ON"]["stim"] = "IClamp"
net.cells["MSO_ON"]["stimamp"] = 0.1
net.cells["MSO_OFF"]["stim"] = "IClamp"
net.cells["MSO_OFF"]["stimamp"] = 0.1
return net
def C_TAU(net,a,stim,getparams=False):
if getparams:
stims = [i for i in range(1,201,5)]
tau = [7000,8000,9000,10000]
#tau = [2000,3000,4000,5000,6000]
param = []
for t in tau:
param.append([t])
return [20,300,stims,param]
mult = 1
# modifyAMPA/NMDA scale by total number of receptors so we multiply by 2 since we have 2 inputs
net.cells["IC"]["cells"][0].sec["soma"].modifyAMPA(gmax=0.004*2*mult)
net.cells["IC"]["cells"][0].sec["soma"].modifyNMDA(gmax=0.020*2*mult,Beta=0.0066,mg=1.0)
net.cells["IC"]["cells"][0].sec["soma"](0.5).pas.g = 1.0/a[0]
net.cells["IC"]["cells"][0].sec["soma"].modifyGABAa(gmax=0.0025) # Normally 0.0035
net.cells["MSO_ON"]["delay"] = 10
net.cells["MSO_OFF"]["delay"] = 6
net.cells["DNLL"]["delay"] = 9
net.cells["MSO_ON"]["stim"] = "IClamp"
net.cells["MSO_ON"]["stimamp"] = 0.1
net.cells["MSO_OFF"]["stim"] = "IClamp"
net.cells["MSO_OFF"]["stimamp"] = 0.1
return net
def C_GABA(net,a,stim,getparams=False):
if getparams:
stims = [i for i in range(1,201,5)]#+[i for i in range(50,100,2)]+[i for i in range(100,251,5)];
stims = [i for i in range(1,26,1)]
#stims = [i for i in range(1,51,2)]#+[i for i in range(50,100,2)]+[i for i in range(100,251,5)];
inhg = [0.0,0.001, 0.0015, 0.0025, 0.0035, 0.0045]
inhg = [0.0]
param = []
for i in inhg:
param.append([i])
return [20,200,stims,param]
mult = 1
# modifyAMPA/NMDA scale by total number of receptors so we multiply by 2 since we have 2 inputs
net.cells["IC"]["cells"][0].sec["soma"].modifyAMPA(gmax=0.004*2*mult)
net.cells["IC"]["cells"][0].sec["soma"].modifyNMDA(gmax=0.020*2*mult,Beta=0.0066,mg=1.0)
net.cells["IC"]["cells"][0].sec["soma"].modifyGABAa(gmax=a[0]) # Normally 0.0025
net.cells["IC"]["cells"][0].sec["soma"](0.5).pas.g = 1.0/4000
net.cells["MSO_ON"]["delay"] = 10
net.cells["MSO_OFF"]["delay"] = 6
net.cells["DNLL"]["delay"] = 9
net.cells["MSO_ON"]["stim"] = "IClamp"
net.cells["MSO_ON"]["stimamp"] = 0.1
net.cells["MSO_OFF"]["stim"] = "IClamp"
net.cells["MSO_OFF"]["stimamp"] = 0.1
return net
def C_NMDA(net,a,stim,getparams=False):
if getparams:
stims = [i for i in range(10,201,10)]#+[i for i in range(50,100,2)]+[i for i in range(100,251,5)];
stims = [i for i in range(1,51,2)]#+[i for i in range(50,100,2)]+[i for i in range(100,251,5)];
inhg = [0.0,0.005,0.01,0.015,0.02,0.025,0.03,0.035]
inhg = [0.035, 0.045, 0.55, 0.65, 0.75, 0.85, 0.95, 0.105]
param = []
for i in inhg:
param.append([i])
return [20,200,stims,param]
mult = 1
# modifyAMPA/NMDA scale by total number of receptors so we multiply by 2 since we have 2 inputs
net.cells["IC"]["cells"][0].sec["soma"].modifyAMPA(gmax=(0.004+0.002)*2*mult)
#net.cells["IC"]["cells"][0].sec["soma"].modifyAMPA(gmax=(0.004+0.002)*2*mult) # For NMDA onset test
net.cells["IC"]["cells"][0].sec["soma"].modifyNMDA(gmax=a[0]*2*mult,Beta=0.0066,mg=1.0)
net.cells["IC"]["cells"][0].sec["soma"].modifyGABAa(gmax=0.0025) # Normally 0.0035
net.cells["IC"]["cells"][0].sec["soma"](0.5).pas.g = 1.0/4000
net.cells["MSO_ON"]["delay"] = 10
net.cells["MSO_OFF"]["delay"] = 6
net.cells["DNLL"]["delay"] = 9
net.cells["MSO_ON"]["stim"] = "IClamp"
net.cells["MSO_ON"]["stimamp"] = 0.1
net.cells["MSO_OFF"]["stim"] = "IClamp"
net.cells["MSO_OFF"]["stimamp"] = 0.1
return net
def C_AMPA(net,a,stim,getparams=False):
if getparams:
stims = [i for i in range(1,51,2)]#+[i for i in range(50,100,2)]+[i for i in range(100,251,5)];
inhg = [0.0,0.002,0.004,0.006,0.008]
param = []
for i in inhg:
param.append([i])
return [20,200,stims,param]
mult = 1
# modifyAMPA/NMDA scale by total number of receptors so we multiply by 2 since we have 2 inputs
net.cells["IC"]["cells"][0].sec["soma"].modifyAMPA(gmax=a[0]*2*mult)
net.cells["IC"]["cells"][0].sec["soma"].modifyNMDA(gmax=0.020*2*mult,Beta=0.0066,mg=1.0)
net.cells["IC"]["cells"][0].sec["soma"].modifyGABAa(gmax=0.0025) # Normally 0.0035
net.cells["IC"]["cells"][0].sec["soma"](0.5).pas.g = 1.0/4000
net.cells["MSO_ON"]["delay"] = 10
net.cells["MSO_OFF"]["delay"] = 6
net.cells["DNLL"]["delay"] = 9
net.cells["MSO_ON"]["stim"] = "IClamp"
net.cells["MSO_ON"]["stimamp"] = 0.1
net.cells["MSO_OFF"]["stim"] = "IClamp"
net.cells["MSO_OFF"]["stimamp"] = 0.1
return net
def C_ONSET(net,a,stim,getparams=False):
if getparams:
stims = [i for i in range(1,61,2)]#+[i for i in range(50,100,2)]+[i for i in range(100,251,5)];
Onset = [10,20,30,40]
param = []
for a in Onset:
param.append([a])
return [20,500,stims,param]
mult = 1
# modifyAMPA/NMDA scale by total number of receptors so we multiply by 2 since we have 2 inputs
net.cells["IC"]["cells"][0].sec["soma"].modifyAMPA(gmax=0.004*2*mult)
net.cells["IC"]["cells"][0].sec["soma"].modifyNMDA(gmax=0.020*2*mult,Beta=0.0066,mg=1.0)
net.cells["IC"]["cells"][0].sec["soma"].modifyGABAa(gmax=0.0025) # Normally 0.0035
net.cells["IC"]["cells"][0].sec["soma"](0.5).pas.g = 1.0/4000
net.cells["MSO_ON"]["delay"] = a[0]
net.cells["MSO_OFF"]["delay"] = 6
net.cells["DNLL"]["delay"] = 9
net.cells["MSO_ON"]["stim"] = "IClamp"
net.cells["MSO_ON"]["stimamp"] = 0.1
net.cells["MSO_OFF"]["stim"] = "IClamp"
net.cells["MSO_OFF"]["stimamp"] = 0.1
return net
def C_RAT(net,a,stim,getparams=False):
if getparams:
stims = [i for i in range(5,206,10)]
stims = [5, 15, 26, 36, 46, 56, 67, 77, 87, 97, 108, 118, 128, 138, 149, 159, 169, 180, 190, 200]
param = [i for i in range(100)]
#param = [1]
return [20,500,stims,param]
mult = 1.0
# modifyAMPA/NMDA scale by total number of receptors so we multiply by 2 since we have 2 inputs
net.cells["IC"]["cells"][0].sec["soma"].modifyAMPA(gmax=0.0030*2*mult)
net.cells["IC"]["cells"][0].sec["soma"].modifyNMDA(gmax=0.012*2*mult,Beta=0.0066,mg=1.0)
net.cells["IC"]["cells"][0].sec["soma"].modifyGABAaRange(list(range(10)), gmax=0.00080/10)
net.cells["IC"]["cells"][0].sec["soma"].modifyGABAaRange(list(range(10,20)), gmax=0.0030/10) #0.00677
net.cells["IC"]["cells"][0].sec["soma"](0.5).pas.g = 1.0/10000
net.cells["MSO_ON"]["delay"] = 15
net.cells["MSO_OFF"]["delay"] = 32
net.cells["DNLL"]["delay"] = 50
net.cells["DNLLEarly"]["delay"] = 15
net.cells["DNLLEarly"]["mindur"] = 35
net.cells["MSO_ON"]["stim"] = "IClamp"
net.cells["MSO_ON"]["stimamp"] = 0.1
net.cells["MSO_OFF"]["stim"] = "IClamp"
net.cells["MSO_OFF"]["stimamp"] = 0.1
return net
def C_BAT(net,a,stim,getparams=False):
if getparams:
stims = [i for i in range(1,26,1)]
param = [1]
return [20,150,stims,param]
if stim <= 1:
mult = 0.0
else:
mult = 1.0
# modifyAMPA/NMDA scale by total number of receptors so we multiply by 2 since we have 2 inputs
net.cells["IC"]["cells"][0].sec["soma"].modifyAMPA(gmax=0.0090*2*mult)
net.cells["IC"]["cells"][0].sec["soma"].modifyNMDA(gmax=0.0*2*mult,Beta=0.0066,mg=1.0)
net.cells["IC"]["cells"][0].sec["soma"].modifyGABAa(gmax=0.0052)
net.cells["IC"]["cells"][0].sec["soma"](0.5).pas.g = 1.0/1500
net.cells["MSO_ON"]["delay"] = 13
net.cells["MSO_OFF"]["delay"] = 14
net.cells["DNLL"]["delay"] = 13
net.cells["MSO_ON"]["stim"] = "IClamp"
net.cells["MSO_ON"]["stimamp"] = 0.1
net.cells["MSO_OFF"]["stim"] = "IClamp"
net.cells["MSO_OFF"]["stimamp"] = 0.1
return net
def C_BAT_JUN2(net,a,stim,getparams=False):
if getparams:
stims = [i for i in range(1,26,1)]
param = [1]
return [20,150,stims,param]
if stim <= 1:
mult = 0.0
else:
mult = 1.0
# modifyAMPA/NMDA scale by total number of receptors so we multiply by 2 since we have 2 inputs
net.cells["IC"]["cells"][0].sec["soma"].modifyAMPA(gmax=0.012*2*mult)
net.cells["IC"]["cells"][0].sec["soma"].modifyNMDA(gmax=0.008*2*mult,Beta=0.0066,mg=1.0)
net.cells["IC"]["cells"][0].sec["soma"].modifyGABAa(gmax=0.0080)
net.cells["IC"]["cells"][0].sec["soma"](0.5).pas.g = 1.0/1200
net.cells["MSO_ON"]["delay"] = 12
net.cells["MSO_OFF"]["delay"] = 14
net.cells["DNLL"]["delay"] = 12
net.cells["MSO_ON"]["stim"] = "IClamp"
net.cells["MSO_ON"]["stimamp"] = 0.1
net.cells["MSO_OFF"]["stim"] = "IClamp"
net.cells["MSO_OFF"]["stimamp"] = 0.1
return net
def C_ANURANS_T(net,a,stim,getparams=False):
if getparams:
stims = [2,5,10,15,20,25,30,40,50,100]
#stims = [5,100]
param = [1]
return [20,200,stims,param]
mult = 1.0
# modifyAMPA/NMDA scale by total number of receptors so we multiply by 3 since we have 2 inputs
net.cells["IC"]["cells"][0].sec["soma"].modifyAMPA(gmax=0.00119*2*mult)
net.cells["IC"]["cells"][0].sec["soma"].modifyNMDA(gmax=0.036*2*mult,Beta=0.0066,mg=1.0)
net.cells["IC"]["cells"][0].sec["soma"].modifyGABAa(gmax=0.00032)
net.cells["IC"]["cells"][0].sec["soma"](0.5).pas.g = 1.0/9000
net.cells["MSO_ON"]["delay"] = 34+4
net.cells["MSO_OFF"]["delay"] = 0
net.cells["DNLL"]["delay"] = 25+4
net.cells["MSO_ON"]["stim"] = "IClamp"
net.cells["MSO_ON"]["stimamp"] = 0.1
net.cells["MSO_OFF"]["stim"] = "IClamp"
net.cells["MSO_OFF"]["stimamp"] = 0
return net
def C_ANURANS(net,a,stim,getparams=False):
if getparams:
stims = [2,5,10,15,20,25,30,40,50,100]
param = [1]
return [20,200,stims,param]
mult = 1.0
# modifyAMPA/NMDA scale by total number of receptors so we multiply by 2 since we have 2 inputs
net.cells["IC"]["cells"][0].sec["soma"].modifyAMPA(gmax=0.005*2*mult)
net.cells["IC"]["cells"][0].sec["soma"].modifyNMDA(gmax=0.020*2*mult,Beta=0.0066,mg=1.0)
net.cells["IC"]["cells"][0].sec["soma"].modifyGABAa(gmax=0.0014)
net.cells["IC"]["cells"][0].sec["soma"](0.5).pas.g = 1.0/5000
net.cells["MSO_ON"]["delay"] = 50
net.cells["MSO_OFF"]["delay"] = 0
net.cells["DNLL"]["delay"] = 25
net.cells["MSO_ON"]["stim"] = "IClamp"
net.cells["MSO_ON"]["stimamp"] = 0.1
net.cells["MSO_OFF"]["stim"] = "IClamp"
net.cells["MSO_OFF"]["stimamp"] = 0
return net
def C_MOUSE_SP(net,a,stim,getparams=False):
if getparams:
stims = [i for i in range(1,32,2)]+[50,75,100]
stims = [1, 3.6, 6.3, 8.9, 11.5, 14.2, 17,20,22,25,28,30,50,75,100]
param = [1]
return [20,250,stims,param]
if stim <= 1:
mult = 1.0
else:
mult = 1.0
# modifyAMPA/NMDA scale by total number of receptors so we multiply by 2 since we have 2 inputs
net.cells["IC"]["cells"][0].sec["soma"].modifyAMPA(gmax=0.0019*2*mult)
net.cells["IC"]["cells"][0].sec["soma"].modifyNMDA(gmax=0.019*2*mult,Beta=0.0066,mg=1.0)
net.cells["IC"]["cells"][0].sec["soma"].modifyGABAa(gmax=0.0012)
net.cells["IC"]["cells"][0].sec["soma"](0.5).pas.g = 1.0/5000
net.cells["MSO_ON"]["delay"] = 14
net.cells["MSO_OFF"]["delay"] = 6
net.cells["DNLL"]["delay"] = 12
net.cells["MSO_ON"]["stim"] = "IClamp"
net.cells["MSO_ON"]["stimamp"] = 0.1
net.cells["MSO_OFF"]["stim"] = "IClamp"
net.cells["MSO_OFF"]["stimamp"] = 0.1
return net