olfactory-bulb
==============
A detailed network model of the dual-layer dendrodendritic inhibitory
microcircuits in the rat olfactory bulb comprising compartmental
mitral, granule and PG cells developed by Aditya Gilra and Upinder
S. Bhalla.
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.
#########################################################
The commit on 13th April, 2014 is the code for the paper:
"Bulbar microcircuit model predicts connectivity and roles of
interneurons in odor coding" by Aditya Gilra and Upinder Bhalla,
National Centre for Biological Sciences, Bangalore, India, which has
been accepted subject to minor revisions by PLOS ONE on Mar 4, 2014.
Any queries may be addressed to Aditya Gilra: aditya_gilra at yahoo
period com .
##########################################################
This code runs with MOOSE 1.4 beta downloadable at (see installation
below):
http://sourceforge.net/p/moose/code/HEAD/tree/moose/branches/moose_Beta_1.4/
It has been used with svn commit 3207, but later commits on this
branch should work too.
It has been used on Ubuntu linux 12.04 Desktop version, and on a
cluster gulabjamun at NCBS, running CentOS release 5.2 (Final).
A simplified model to work with other simulators is under development.
##########################################################
Installation:
0. This code works on Ubuntu linux 12.04, CentOS 5.2, and hopefully
other versions of linux. Windows and MacOS are unsupported.
You will require a reasonable comfort in working with linux,
python, make, etc.
1. Get this model's code as per instructions (github, modeldb, etc).
2. You also need to install python 2.6 or 2.7 -dev packages and python
modules numpy, scipy, matplotlib, mpi4py (via synaptic / manually).
3. Download MOOSE branch beta 1.4 from:
http://sourceforge.net/p/moose/code/HEAD/tree/moose/branches/moose_Beta_1.4/
The model code has been run with svn commit 3207, but later
versions of this branch should run fine too. You can use the
following command to download from svn:
svn checkout svn://svn.code.sf.net/p/moose/code/moose/branches/moose_Beta_1.4 moose-code
Then compile the pymoose version (not standalone version) and
install as per instructions in the INSTALL file for this branch
only. You will require packages libgsl0-dev, flex, bison, and
possibly others mentioned in the INSTALL file. No need for
libSBML, can set USE_SBML=0 as below. Typically this set of
commands should work on Ubuntu 12.04 if you have all the required
libraries:
`cd moose-code`
In Makefile and pymoose/Makefile, replace all occurences of 2.6
with 2.7 or whatever version of python your system has (with
development files i.e. python-dev package). In older versions
(<12.04) of Ubuntu, which use gcc 4.4 or 4.5, just
`make pymoose USE_SBML=0` should work fine. But in Ubuntu 12.04
and above, which use gcc 4.6 and above, you need to make further
changes as below: In Makefile, append -fpermissive to the
CXX_FLAGS lines 127 and 131. Similarly in pymoose/Makefile, to
line 27. `make pymoose USE_SBML=0`
(In case you face some error and need to recompile after modifying
say a Makefile, run `make clean` and `rm pymoose/moose_wrap.cxx`
first. Also, after running `make pymoose USE_SBML=0`, if you face
errors at linking stage, look at the full output above, some files
in directories like GSL, or genesis_parser, etc. may not have
compiled. You need to download the relevant libraries/packages
and install them in that case, like libGSL0-dev, flex, bison,
etc.)
Finally tell python to look for the moose module in
moose-code/python/
export PYTHONPATH=<path-to-moose-code>/moose-code/python:$PYTHONPATH
Confirm in a python terminal that `import moose` works fine. If
not, check MOOSE compilation and ensure that your PYTHONPATH
contains the python/ directory in the MOOSE code.
4. A lot of the simulation scripts use mpi for parallel farming of
jobs and collation of the output. So you need some mpi library
say openmpi on your cluster / desktop.
##########################################################
Running simulations:
In the top part of all runnable python scripts in various folders, you
will find a number of suggested usage commands. they typically have
`python2.6` in the command, but you can use just `python` as long as
you have python 2.6 or 2.7 installed.
1. Simulating experimental electro-physiology on a PG cell model: In a
terminal (linux shell), cd to cells/ folder and run:
python PGTest_mcquiston_katz.py PG2010
After simulation, this should pop up figure 2H of the paper, showing
electrophysiology of a plateauing PG cell. To get Figure 2G, for the
low-threshold spiking PG cell, run:
python PGTest_mcquiston_katz.py PG2013
2. Testing the synapses on a cell model
In a terminal (linux shell), cd to cells/ folder and run:
python CellTest_synapses.py granule mitral_granule Iclamp 100 6e-3 staggered
This will activate 100 randomly-chosen 'mitral-granule' synapses on a
granule cell staggered 6ms apart, and will plot the resulting Vm
trace showing the EPSPs, and resultant spiking. This is Figure 2F of
the paper, showing summation of EPSPs in a granule cell. You can try
other cells and synapses, Vclamp vs Iclamp, staggered vs
simultaneous, and can specify a compartment name also for
simultaneous (see top of script for usage examples).
3. Network simulations
For the network model simulation scripts in the simulations/ folder,
you have to first generate the network model file, then generate
'firefiles' that contain Poisson spike trains as: (a) background for
granule cells, and (b) as proxy for ORNs. Then you can run scripts
from the simulations folder, but many of these still require a
cluster.
An example not needing a cluster is provided below.
This shows backpropagation of action potentials along lateral
dendrites despite strong local inhibition, as shown in Figure 2E of
the paper. 15 Hz constant Poisson inputs as ORNs is provided to
glomerular tufts of mitral cells A and B whose somas are 400
micrometers apart. Simulated voltage recordings are shown on mitral
cell B at the soma, near A and further away.
(a) In generators/stimuliConstantsMinimal.py,
ensure below settings for generating the network file.
stim_net_seed = 100.0
mit_distance = 400.0 # microns ## irrelevant for odor responses
(b) In networks/networkConstantsMinimal.py
ensure below settings for generating the network file.
NUM_GLOMS = 2
(c) In simulations/simset_activinhibition_minimal.py
set the same seed and mitdistance as above in these lines:
netseedstr = "100.0"
mitdistance = 400.0 # microns
mitdistancestr = "_mitdist400.0" # microns
Also ensure these parameters:
ASYM_TEST = False
REVERSED_ADI = True
IN_VIVO = True
ODORINH = True
oninject_ext = 15.0 # Hz
You can also set which cell populations should be simulated or not in the same file:
NO_SINGLES = False
## spine inhibition and singles are self-inh
## toggle them on/off together
NO_SPINE_INH = NO_SINGLES
NO_JOINTS = False
NO_MULTIS = NO_JOINTS
NO_PGS = False
(d) Below directories are not tracked on github and not part of the
online modeldb code, but needed for the odor morph simulations.
Please create them (using mkdir or in a file browser), if running
for the first time: netfiles/, firefiles/firefiles_baseline/,
firefiles/firefiles_constrate/, figures/connectivity/cells/
(e.g. first firefiles/, then firefiles/firefiles_baseline as
nested above.)
(e) in generators/ folder run the following commands in a terminal
(i) generate network file:
python generate_neuroML.py 2GLOMS
(ii) generate the background input spike trains to granule cells
python generate_firefiles_gran_baseline.py noresp
(iii) generate the receptor (ORN) spike trains at various constant
rates for different glomeruli python
generate_firefiles_constantrate.py
(f) in simulations/ folder run the main simulation command in a terminal
python inhibition_tuftinput.py
This can take 5-10 min to run.
Various plots will come up: firing rates of a few of the
interneurons in different colours, Vm-s of the mitral cells A and
B. Figure 2E of the paper will be saved as
../figures/connectivity/cells/mitral_spikeprop.png.
##########################################################
Here is a list of directories and what they contain:
channels/
contains various channels as NeuroML 1.8.0 files, however channels for
the mitral cell are individual python class files. There is a helper
utility that loads all these channels into MOOSE path '/library', from
where they may be deep copied under each compartment of each cell and
connected via messages. For just running the scripts or loading
models, you don't need to bother about this.
synapses/
contains various synapses as NeuroML 1.8.0 files, however synapses for
the mitral cell are individual python class files. There is a helper
utility that loads all these synapses into MOOSE path '/library', from
where they may be deep copied under each compartment of each cell and
connected via messages. For just running the scripts or loading
models, you don't need to bother about this.
cells/
contains the three cell models i.e. morphology, channel distribution
and potential synaptic locations as single Level 1, 2 and 3 NeuroML
1.8.0 files.
The relevant files are:
mitral_bbmit1993davison_neuroML_L1_L2_L3_mod_withspikeinit.xml -- mitral cell 286 compartments
PG_aditya2013unified_neuroML_L1_L2_L3.xml -- low-threshold firing PG cell 3 compartments
PG_aditya2010unified_neuroML_L1_L2_L3.xml -- plateauing PG cell 3 compartments
granule_granadityaMS2007_neuroML_L1_L2_L3.xml -- granule cell 2 compartments
There is a helper utility load_cells.py that loads all the cells into MOOSE path '/library'.
from where they may be deep copied when generating the network.
For just running the scripts or loading models, you don't need to bother about this.
generators/
contains scripts for generating the NeuroML 1.8.0 full network in
netfiles/ folder based on various connectivity parameters specified
in networkConstants.py in networks/ folder.
contains scripts for generating the firing rate files in
generators/firerates/ folder that contain the firing rates needed for
(a) background granule input, (b) proxy for ORNs.
contains scripts for generating 'firefiles' in firefiles/ folder that
contain Poisson spike trains required for (a) background granule
input, (b) as proxy for ORNs.
stimuliConstants.py contains various 'constants' / stimulus parameters
for the model, the ones that need to be changed for different runs in
the paper are usually in stimuliConstantsMinimal.py .
netfiles/ contains the NeuroML 1.8.0 files generated by
generate_neuroML.py in the generators/ folder. Currently empty as
it's too huge to be distibuted.
networks/
contains a script OBModel.py that loads the NeuroML model generated
above and connects the various stimuli generated above to the
requisite cells.
networkConstants.py contains various 'constants' / model parameters,
the ones that need to be changed for different runs in the paper are
usually in networkConstantsMinimal.py .
simulations/
contains the scripts to run the various simulations: activity
dependent inhibition: in vitro and in vivo odor morphs for
decorrelation between sister cells and linearity in respiring
responses odor pulses for linearity in odor pulse train responses.
results/
has subfolders ADI, tuftADI, odor_morphs, odor_pulses to save results
from the various simulations run by scripts in the simulations
folder. For different simulation parameters, you may want to
rename/copy the results folders to avoid overwriting. This is empty
because it is too large to distribute.
analysis/
These require extensive sets of simulation results (running over a day
to a month) in the results\ folder to be analysed and made into
various figures in particular Figs 4-8 and S2-S7. I have these
results, but being huge (~3 GB), I have not uploaded them on
modeldb/github.
neuroml/
Some *.xsl to use xslt to transform neuroml files to .x3d files for
viewing using standard 3d viewers. First use neuroml_merge_cells.py
on a 'netfile' to get netfile that has the cell morphology built-in
and then run xslt to convert to x3d.
nml2/
a passive model of the mitral cell converted to NeuroML 2.
other folders are odds and ends -- not needed directly for the model.