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]
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;
# -*- coding: utf-8 -*-

########## THIS FITTING PROGRAM IS MEANT TO BE A CLONE OF MUKUND'S AND ADIL'S MATLAB ONE
## USAGE: python2.6 fit_odor_morphs.py ../results/odor_morphs/2011-01-13_odormorph_SINGLES_JOINTS_PGS.pickle

metainfo = [
"E=400*1nS*2, no inhibition",
"E=400*1nS*2, I=10000*0.02nS, E/I~=4.0",
"E=400*1nS*2, I=10000*0.10nS, E/I~=0.8",
"E=400*1nS*2, I=10000*0.20nS, E/I~=0.4",
"E=400*1nS*2, I=10000*0.50nS, E/I~=0.16",
"E=400*1nS*2, I=10000*1.00nS, E/I~=0.08",
]
filelist = [
"2011_05_25_17_56_odormorph_NOSINGLES_NOJOINTS_NOPGS_numgloms1.pickle",
"2011_05_25_22_29_odormorph_NOSINGLES_NOJOINTS_NOPGS_numgloms1.pickle",
"2011_05_25_18_22_odormorph_NOSINGLES_NOJOINTS_NOPGS_numgloms1.pickle",
"2011_05_25_18_27_odormorph_NOSINGLES_NOJOINTS_NOPGS_numgloms1.pickle",
"2011_05_25_18_36_odormorph_NOSINGLES_NOJOINTS_NOPGS_numgloms1.pickle",
"2011_05_25_18_46_odormorph_NOSINGLES_NOJOINTS_NOPGS_numgloms1.pickle"
]
colorlist = ['r','g','b','c','m','y','k']
markerlist = ['s','o','d','+','x','^','<','>','v']

from pylab import *
import pickle
import sys

sys.path.extend(["..","../networks","../generators","../simulations"])

from stimuliConstants import * # has SETTLETIME, inputList and pulseList, GLOMS_ODOR, GLOMS_NIL
from simset_odor import * # has NUMBINS
from networkConstants import * # has central_glom
from sim_utils import * # has rebin() to alter binsize
from data_utils import *

## I override the NUMBINS in simset_odor above, and I rebin() below
NUMBINS = 17
## smooths / overlapping bins. non-overlapping would be RESPIRATION/NUMBINS
bin_width_time = 2.0*RESPIRATION/NUMBINS 

NUMMIX = len(inputList)

if __name__ == "__main__":
    
    for filenum,filename in enumerate(filelist):
        fig = figure(facecolor='w') # 'none' is transparent
        filenamefull = "../results/odor_morphs/"+filename
        f = open(filenamefull,'r')
        #### mitral_responses_list[avgnum][odornum][mitralnum][tnum]
        #### mitral_responses_binned_list[avgnum][odornum][mitralnum][binnum]
        mitral_responses_list, mitral_responses_binned_list = pickle.load(f)
        f.close()

        ###################### Input conditioning
        mitral_responses_binned_list = \
            rebin(mitral_responses_list, NUMBINS, bin_width_time)
        #### very important to convert to numpy array,
        #### else where() below returns empty list.
        mitral_responses_binned_list = array(mitral_responses_binned_list)
        mitral_responses_mean = mean(mitral_responses_binned_list, axis=0)
        mitral_responses_std = std(mitral_responses_binned_list, axis=0)
        ## since I fit the mean response,
        ## I must use standard error/deviation of the _mean_
        ## = standard deviation of a repeat / sqrt(num of repeats).
        NUMAVGs = len(mitral_responses_binned_list)
        mitral_responses_se = mitral_responses_std/sqrt(NUMAVGs)
        
        ######## scatter plot of std error vs firing rate
        scatter(mitral_responses_mean,mitral_responses_se,\
            s=20, color=colorlist[filenum], marker=markerlist[filenum], label=metainfo[filenum])
        
        ## Poisson noise
        plot(arange(0,50,1),[sqrt(val) for val in arange(0,50,1)],color='k',label='Poisson')
        legend()

    show()
        
        

Loading data, please wait...