Olfactory bulb microcircuits model with dual-layer inhibition (Gilra & Bhalla 2015)

 Download zip file 
Help downloading and running models
Accession:153574
A detailed network model of the dual-layer dendro-dendritic inhibitory microcircuits in the rat olfactory bulb comprising compartmental mitral, granule and PG cells developed by Aditya Gilra, Upinder S. Bhalla (2015). All cell morphologies and network connections are in NeuroML v1.8.0. PG and granule cell channels and synapses are also in NeuroML v1.8.0. Mitral cell channels and synapses are in native python.
Reference:
1 . Gilra A, Bhalla US (2015) Bulbar microcircuit model predicts connectivity and roles of interneurons in odor coding. PLoS One 10:e0098045 [PubMed]
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Realistic Network;
Brain Region(s)/Organism: Olfactory bulb;
Cell Type(s): Olfactory bulb main mitral GLU cell; Olfactory bulb main interneuron periglomerular GABA cell; Olfactory bulb main interneuron granule MC GABA cell;
Channel(s): I A; I h; I K,Ca; I Sodium; I Calcium; I Potassium;
Gap Junctions:
Receptor(s): AMPA; NMDA; Gaba;
Gene(s):
Transmitter(s): Gaba; Glutamate;
Simulation Environment: Python; MOOSE/PyMOOSE;
Model Concept(s): Sensory processing; Sensory coding; Markov-type model; Olfaction;
Implementer(s): Bhalla, Upinder S [bhalla at ncbs.res.in]; Gilra, Aditya [aditya_gilra -at- yahoo -period- com];
Search NeuronDB for information about:  Olfactory bulb main mitral GLU cell; Olfactory bulb main interneuron periglomerular GABA cell; Olfactory bulb main interneuron granule MC GABA cell; AMPA; NMDA; Gaba; I A; I h; I K,Ca; I Sodium; I Calcium; I Potassium; Gaba; Glutamate;
import sys, pickle

sys.path.extend(["..","../networks","../simulations"])
from networkConstants import *
from stimuliConstants import *
from simset_odor import *

from moose_utils import *
from neuro_utils import * # has the dual exponential functions
from data_utils import *

from pylab import * # part of matplotlib that depends on numpy but not scipy
import scipy.optimize
import scipy.interpolate
import scipy.special # special function erf()
import scipy.stats
## for scipy.signal.deconvolve but it doesn't work
## if any of the respiration pulse coeff's are zero - see below.
#import scipy.signal

def compute_odor_params(delay_side, risetime_side, duration_side):
    """ the args are the number of SDs away, you want the corresponding param to be
    first compute delay, risetime and duration. risetime and delay are correlated.
    then get the double sigmoid params for the generated delay, risetime and duration."""
    ######### generate delay, risetime and duration
    x1 = delay_side
    x2 = risetime_side
    delay = x1*delay_sd + delay_mean
    #### delay and rise_time are correlated normal variables
    risetime = ( delay_risetime_correlation*x1 + \
        sqrt(1-delay_risetime_correlation**2)*x2 ) * risetime_sd + risetime_mean
    duration = duration_side*duration_sd + duration_mean
    
    return delay, risetime, duration

def allcombo_stimuli():

    ## fig with subpanels for each ORN combo
    fig = figure(facecolor='w')
    delaxes() # delete the main axes to accomodate subpanels

    row_num = 0
    rows = 2*2*2
    cols = rows
    for exc_delay in [-2,2]:
        for exc_rise in [-2,2]:
            for exc_duration in [-2,2]:
                for exc_amplitude in [1]:
                    col_num = 0
                    for inh_delay in [-2,2]:
                        for inh_rise in [-2,2]:
                            for inh_duration in [-2,2]:
                                for inh_amplitude in [1]:
                                    exc_delay, exc_risetime, exc_duration = \
                                        compute_odor_params(exc_delay, exc_rise, exc_duration)
                                    inh_delay, inh_risetime, inh_duration = \
                                        compute_odor_params(inh_delay, inh_rise, inh_duration)
                                    ## WARNING: need to add air response too
                                    ## WARNING the decay slope is taken ad hoc twice the risetime!
                                    exc_response = [(0,0),\
                                        (exc_delay,0),\
                                        (exc_delay+exc_risetime,exc_amplitude*FIRINGMEANA),\
                                        (exc_delay+exc_duration,exc_amplitude*FIRINGMEANA),\
                                        (exc_delay+exc_duration+2*exc_risetime,0),\
                                        (RESPIRATION,0)]
                                    inh_response = [(0,0),\
                                        (inh_delay,0),\
                                        (inh_delay+inh_risetime,-inh_amplitude*FIRINGMEANA),\
                                        (inh_delay+inh_duration,-inh_amplitude*FIRINGMEANA),\
                                        (inh_delay+inh_duration+2*inh_risetime,0),\
                                        (RESPIRATION,0)]
                                    ax = fig.add_subplot(rows,cols,row_num*cols+col_num+1)
                                    x,y = zip(*exc_response) # unpack and zip!
                                    ax.plot(x,y)
                                    x,y = zip(*inh_response) # unpack and zip!
                                    ax.plot(x,y)
                                    ax.set_xlim(0,RESPIRATION)
                                    col_num += 1
                    row_num += 1
                    print "Finished row",row_num

if __name__ == "__main__":
    allcombo_stimuli()
    show()