Duration-tuned neurons from the inferior colliculus of vertebrates (Aubie et al. 2012)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:144511
These models reproduce the responses of duration-tuned neurons in the auditory midbrain of the big brown bat, the rat, the mouse and the frog (Aubie et al. 2012). They are written in the Python interface to NEURON and a subset of the figures from Aubie et al. (2012) are pre-set in run.py (raw data is generated and a separate graphing program must be used to visualize the results).
Reference:
1 . Aubie B, Sayegh R, Faure PA (2012) Duration tuning across vertebrates. J Neurosci 32:6373-90 [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Realistic Network; Neuron or other electrically excitable cell;
Brain Region(s)/Organism: Inferior Colliculus;
Cell Type(s):
Channel(s): I Sodium; I Potassium;
Gap Junctions:
Receptor(s): GabaA; AMPA; NMDA;
Gene(s):
Transmitter(s): Gaba; Glutamate;
Simulation Environment: NEURON; Python;
Model Concept(s): Coincidence Detection; Simplified Models; Sensory processing; Duration Selectivity; Audition;
Implementer(s): Aubie, Brandon [aubiebn at mcmaster.ca];
Search NeuronDB for information about:  GabaA; AMPA; NMDA; I Sodium; I Potassium; Gaba; Glutamate;
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(range(10), gmax=0.00080/10)
    net.cells["IC"]["cells"][0].sec["soma"].modifyGABAaRange(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






Loading data, please wait...