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.