370 likes | 529 Views
Vanier Piriform Cortex Model. Simon O’Connor University of Herfordshire OSB Hackathon 2013. Rat Olfactory System. O’Connor et al. (2012) Olfactory Bulb Model. Vanier (2001) Piriform Cortex Model. Model Constructed in Genesis.
E N D
Vanier Piriform Cortex Model Simon O’Connor University of Herfordshire OSB Hackathon 2013
Model Constructed in Genesis 125 interlocking GENESIS files including several different versions of the Vanier Piriform Cortex model. The generic version initiated by piriform.g
piriform.g include piriform_control.g // Top-level simulation control stuff. include piriform_free_params.g // "Free" parameters for the model. include piriform_setup.g // Set up simulation parameters. include piriform_sched.g // Simulation schedule. include piriform_params.g // Network parameters. include piriform_utils.g // Various utility functions. include piriform_reset.g // Reset functions. include piriform_check.g // Check functions. include piriform_inputs.g // Set up the inputs to the piriform cortex. include piriform_cells.g // Create the cells. include piriform_neuromod.g // Set up neuromodulation. include piriform_params_conn.g // Network parameters relating to connections. include neuron_groups.g // Define neuronal groups. include piriform_connect.g // Wire up the network. include piriform_weight_dump.g // Dump xview files of the synaptic weights. include piriform_outputs.g // Record outputs. //include piriform_test_cells.g // Calculate steady states of cells. include piriform_field.g // Set up field potential measuring system. include dumptables.g // Utilities for dumping channel table data.
piriform_cells.g includes 3 Cell types // genesis // // piriform_cells.g: creating and positioning the cell arrays. // include pyramidal.g // Superficial Layer 2 pyramidal cell include fb_inhib.g //Feedback inhibitory cell include ff_inhib.g // Layer 1 horizontal cell: a feed forward inhibitory interneuron
OSB Cortical Modelling Requirements • The ability to define a range of cells in terms of their morphology and biophysics
Parameter Optimisation Caveat // Shift the inactivation curve to the left. mod_scaletabchanpyr_Ka Y minf 1.0 1.0 -0.010 0.0 // Slow down the inactivation kinetics. mod_scaletabchanpyr_Ka Y tau 1.0 10.0 0.0 0.0 // Parameter search adjustments: mod_scaletabchanpyr_Ka X tau 1.0 1.39532 0.0 0.0 mod_scaletabchanpyr_Ka Y tau 1.0 0.538194 0.0 0.0 call pyr_Ka INITREFCOUNT
piriform_cells.g inti if (!{exists /cell_library}) create neutral /cell_library disable /cell_library end create neutral /piriform_cortex // NOTE: The Z position of piriform cortex pyramidal cell somas is 0.0.
piriform_cells.gsetting up a Pyramidal Cell array // ------------------------------------------------------------ // Pyramidal cells: // ------------------------------------------------------------ echo Creating {PIRIFORM_N_PYRAMIDAL} pyramidal cells in a" " -n echo {XSCALE} x {YSCALE} array.
piriform_cells.g// Ventral anterior piriform cortex: create_element_grid /cell_library/pyramidal_cell_vAPC \ /piriform_cortex \ {PIRIFORM_NX_PYRAMIDAL} \ {PIRIFORM_NY_PYRAMIDAL} \ -newname "pyramidal_cell" \ -delta {PIRIFORM_DX_PYRAMIDAL} \ {PIRIFORM_DY_PYRAMIDAL} \ -origin {PIRIFORM_PYRAMIDAL_X_OFFSET} \ {PIRIFORM_PYRAMIDAL_Y_OFFSET} \ -zposition {PIRIFORM_PYRAMIDAL_Z_OFFSET} \ -mask ellipse 0.0 0.0 \ {PIRIFORM_X_CENTER} \ {PIRIFORM_Y_CENTER} \ -debug 0
piriform_cells.g// The rest of piriform cortex: create_element_grid /cell_library/pyramidal_cell \ /piriform_cortex \ {PIRIFORM_NX_PYRAMIDAL} \ {PIRIFORM_NY_PYRAMIDAL} \ -delta {PIRIFORM_DX_PYRAMIDAL} \ {PIRIFORM_DY_PYRAMIDAL} \ -origin {PIRIFORM_PYRAMIDAL_X_OFFSET} \ {PIRIFORM_PYRAMIDAL_Y_OFFSET} \ -zposition {PIRIFORM_PYRAMIDAL_Z_OFFSET} \ -all \ -hole ellipse 0.0 0.0 \ {PIRIFORM_X_CENTER} \ {PIRIFORM_Y_CENTER} \ -replace \ -check \ -debug 0
OSB Cortical Modelling Requirements • The ability to define a range of cells in terms of their morphology and biophysics • The ability to arrange the cells in arrays • The ability to scale cell arrays by number of cells to allow small test set-ups to be scaled up in size for runs on large clusters computers
piriform_cells.g specify solver // Create the hsolvers for all pyramidal cells. // Use the Crank-Nicolson integration method (method 11). for (i = 0; i < PIRIFORM_N_PYRAMIDAL; i = i + 1) new_hsolve /piriform_cortex/pyramidal_cell[{i}] 11 end
navigating to another point in the script tree piriform_cells.g include pyramidal.g // genesis // // pyramidal.g: a reduced 15-compartment model of a layer 2 // pyramidal cell in piriform cortex. // include pyr_chans.g include pyr_cell.g make_pyramidal_cell
pyr_chans.g // genesis // // pyr_chans.g: Define the channel library for the // layer 2 pyramidal cell simulation. // include pyr_reversal_potentials.g include pyr_synchans.g include pyr_vdepchans.g
pyr_synchans.g // genesis // // pyr_synchans.g // // This script contains the final versions of various synaptic // objects that form part of the pyramidal cell model. // // // N.B. There is no compelling experimental evidence regarding what the // relative proportion of NMDA to non-NMDA receptors is. The Kapur // et. al. paper (J. Neurophys. 78(5): 2546-59, 1997) implies that // it's about 60% of the AMPA component, so that's what I'll use for // layer 1b. For layer 1a I'll use 20%, since the LTP evidence // (e.g. Kanter and Haberly, Brain Res. 525: 175-179 (1990)) suggests // that there's much less NMDA current in layer 1a. Other NMDA // parameters are also taken from Kapur et. al. // // The AMPA taus are from my own experimental work, but are similar // to what Kapur et. al. use (actually slightly slower). //
pyr_synchans.g // ---------------------------------------------------------------------- // // EXCITATORY SYNAPSES ONTO PYRAMIDAL CELLS. // // ---------------------------------------------------------------------- // The synaptic tau values for layer 1a and 1b synapses were taken from my // extracellular experiments. The facilitation/depression parameters were // taken from a parameter search; that's why there are so many decimal // places of "accuracy". // // 1) Afferent (layer 1a) synapses. //
pyr_synchans.gmod_facsynchan_wNMDA function make_pyr_aff_exc_syn if ({exists pyr_aff_exc_syn}) return end create mod_facsynchan_wNMDApyr_aff_exc_syn // N.B. Gbar is set by the cellreader. setfield ^ \ Gbar 0.0 \ Ek {PYR_AMPA_EREV} \ tau1 0.001 \ tau2 0.0016 \ mod_index 3 \ fac_depr_on 1 \ max_fac 2.0 \ fac_per_spike 3.64462 \ fac_tau 0.162229 \ depr1_per_spike 0.786772 \ depr1_tau 0.1262774 \ depr2_per_spike 0.640371 \ depr2_tau 0.321689 \ NMDA_Ek {PYR_NMDA_EREV} \ NMDA_tau1 0.060 \ NMDA_tau2 0.066 \ NMDA_pGbar {FP_PYR_AFF_NMDA_PGBAR} \ NMDA_Mg 1.0 \ // mM NMDA_eta {FP_NMDA_ETA} \ // mM^(-1) NMDA_gamma {FP_NMDA_GAMMA} \ // V^(-1) NMDA_mod_index 3 End
OSB Cortical Modelling Requirements • The ability to define a range of cells in terms of their morphology and biophysics • The ability to arrange the cells in arrays • The ability to scale cell arrays by number of cells to allow small test set-ups to be scaled up in size for runs on large clusters computers • The ability to handle synapse objects such as GENESIS facsynchan
pyr_cell.g // genesis // // pyr_cell.g: defines a layer 2 pyramidal cell in piriform cortex. // if (no_pyr_Kahp) strpyramidal_cell_parameter_file = "pyramidal_no_Kahp.p" str pyramidal_cell_parameter_file2 = "pyramidal_no_Kahp.p" else strpyramidal_cell_parameter_file = "pyramidal.p" str pyramidal_cell_parameter_file2 = "pyramidal.p" end
pyramidal.p // // pyramidal.p: superficial layer 2 pyramidal cell in piriform cortex. // // N.B. the high "accuracy" of some numbers is because these numbers // were derived from a parameter search. // // The conductance values used are: // // excitatory AMPA: 0.5 nS // inhibitory fast GABA-A: 1.15 nS // // Note that excitatory NMDA is implemented as a proportion of the total // AMPA conductance, so we don't need it here. This is also true for // inhibitory slow GABA-A and inhibitory slow GABA-B conductances. // For the ratios used see pyr_synchans.g. //
pyramidal.p *compt /library/pyr_compartment *set_compt_param RA 0.5829 *set_compt_param CM 0.0436 *set_compt_paramEm -0.0746751 *set_compt_paraminitVm -0.0746751 *set_compt_param RM 0.451628 //*lambda_unwarn
pyramidal.p soma none 0.0 0.0 21.3487 10.4300 \ pyr_Na 2006.63 \ pyr_Na_pers 64.8558 \ pyr_Kdr 241.793 \ // 251.793 pyr_Ka 440.684 \ pyr_KM 57.1509 \ pyr_Ca 11.1791 \ pyr_Ca_conc 1.26684e+19 \ pyr_Kahp 15.3955 \ pyr_layer2_3_inh_syn 0.5e-9 \ pyr_ext_exc_syn 0.2e-9 \ pyr_spikegen 0.0
piriform_params.g // ------------------------------------------------------------------------ // Cortical dimensions // ------------------------------------------------------------------------ float PIRIFORM_X_EXTENT = 8.0e-3 // 8 mm float PIRIFORM_Y_EXTENT = 3.0e-3 // 3 mm
piriform_params.g // ------------------------------------------------------------------------ // Cell numbers. // ------------------------------------------------------------------------ int XSCALE, YSCALE, XSCALE2, YSCALE2, XSCALE3, YSCALE3 • // For pyramidal cells. • if (scale == "large") • XSCALE = 50 • YSCALE = 20 • elif (scale == "medium") • XSCALE = 32 • YSCALE = 12 • elif (scale == "medium-small") • XSCALE = 20 • YSCALE = 10 • else // small • XSCALE = 16 • YSCALE = 6 • end
piriform_params.g // Pyramidal cells. int PIRIFORM_NX_PYRAMIDAL = {XSCALE} int PIRIFORM_NY_PYRAMIDAL = {YSCALE} int PIRIFORM_N_PYRAMIDAL = \ PIRIFORM_NX_PYRAMIDAL * PIRIFORM_NY_PYRAMIDAL
piriform_params.g // ------------------------------------------------------------------------ // Cell spacings. // ------------------------------------------------------------------------ float PIRIFORM_DX_PYRAMIDAL = {PIRIFORM_X_EXTENT / XSCALE} float PIRIFORM_DY_PYRAMIDAL = {PIRIFORM_Y_EXTENT / YSCALE}
piriform_params.g // ------------------------------------------------------------------------ // Relative cell positionings. // ------------------------------------------------------------------------ // Pyramidal cells. float PIRIFORM_PYRAMIDAL_X_START = 0.0 float PIRIFORM_PYRAMIDAL_X_OFFSET = PIRIFORM_DX_PYRAMIDAL / 2.0 float PIRIFORM_PYRAMIDAL_X_QUARTER = \ PIRIFORM_PYRAMIDAL_X_OFFSET + NXQUARTER * PIRIFORM_DX_PYRAMIDAL float PIRIFORM_PYRAMIDAL_X_MIDDLE = \ PIRIFORM_PYRAMIDAL_X_OFFSET + NXMIDDLE * PIRIFORM_DX_PYRAMIDAL float PIRIFORM_PYRAMIDAL_X_LAST = \ PIRIFORM_PYRAMIDAL_X_OFFSET + \ (PIRIFORM_NX_PYRAMIDAL - 1) * PIRIFORM_DX_PYRAMIDAL float PIRIFORM_PYRAMIDAL_X_END = \ PIRIFORM_PYRAMIDAL_X_LAST + PIRIFORM_PYRAMIDAL_X_OFFSET float PIRIFORM_PYRAMIDAL_X_LENGTH = \ PIRIFORM_PYRAMIDAL_X_END - PIRIFORM_PYRAMIDAL_X_START
piriform_params.g float PIRIFORM_PYRAMIDAL_Y_START = 0.0 float PIRIFORM_PYRAMIDAL_Y_OFFSET = PIRIFORM_DY_PYRAMIDAL / 2.0 float PIRIFORM_PYRAMIDAL_Y_MIDDLE = \ PIRIFORM_PYRAMIDAL_Y_OFFSET + NYMIDDLE * PIRIFORM_DY_PYRAMIDAL float PIRIFORM_PYRAMIDAL_Y_LAST = \ PIRIFORM_PYRAMIDAL_Y_OFFSET + \ (PIRIFORM_NY_PYRAMIDAL - 1) * PIRIFORM_DY_PYRAMIDAL float PIRIFORM_PYRAMIDAL_Y_END = \ PIRIFORM_PYRAMIDAL_Y_LAST + PIRIFORM_PYRAMIDAL_X_OFFSET float PIRIFORM_PYRAMIDAL_Y_LENGTH = \ PIRIFORM_PYRAMIDAL_Y_END - PIRIFORM_PYRAMIDAL_Y_START
piriform_params.g float PIRIFORM_PYRAMIDAL_Z_START = -5.0e-6 // Nominal value. float PIRIFORM_PYRAMIDAL_Z_OFFSET = 0.0 // By definition. float PIRIFORM_PYRAMIDAL_Z_LAST = 0.0 float PIRIFORM_PYRAMIDAL_Z_END = 5.0e-6 // Nominal value. float PIRIFORM_PYRAMIDAL_Z_LENGTH = \ PIRIFORM_PYRAMIDAL_Z_END - PIRIFORM_PYRAMIDAL_Z_START
piriform_params.g // ------------------------------------------------------------------------ // Other useful values. // ------------------------------------------------------------------------ float PIRIFORM_X_CENTER = PIRIFORM_X_EXTENT * 0.5 float PIRIFORM_Y_CENTER = PIRIFORM_Y_EXTENT * 0.5 float PYRAMIDAL_SOMA_Z = 0.0 float PYRAMIDAL_BASAL_1_Z = -79.6812e-6 float PYRAMIDAL_BASAL_2_Z = -79.6812e-6 * 2.0 float PYRAMIDAL_BASAL_3_Z = -79.6812e-6 * 3.0 float PYRAMIDAL_BASAL_4_Z = -79.6812e-6 * 4.0 float PYRAMIDAL_BASAL_5_Z = -79.6812e-6 * 5.0 float PYRAMIDAL_BASAL_6_Z = -79.6812e-6 * 6.0 float PYRAMIDAL_DEEPIB_1_Z = 57.8940e-6 float PYRAMIDAL_DEEPIB_2_Z = 57.8940e-6 * 2.0 float PYRAMIDAL_DEEPIB_3_Z = 57.8940e-6 * 3.0 float PYRAMIDAL_SUPIB_1_Z = 57.8940e-6 * 4.0 float PYRAMIDAL_SUPIB_2_Z = 57.8940e-6 * 5.0 float PYRAMIDAL_SUPIB_3_Z = 57.8940e-6 * 6.0 float PYRAMIDAL_IA_1_Z = 57.8940e-6 * 7.0 float PYRAMIDAL_IA_2_Z = 57.8940e-6 * 8.0
piriform_params_conn.g // ======================================================================== // Connection extents. // ======================================================================== float PYR_FB_CONNECTION_X_EXTENT = {FP_PYR_FB_CONNECTION_EXTENT} float PYR_FB_CONNECTION_Y_EXTENT = {FP_PYR_FB_CONNECTION_EXTENT} float PYR_FB_CONNECTION_Z_EXTENT = {FP_PYR_FB_CONNECTION_EXTENT} float FB_PYR_CONNECTION_X_EXTENT = {FP_FB_PYR_CONNECTION_EXTENT} float FB_PYR_CONNECTION_Y_EXTENT = {FP_FB_PYR_CONNECTION_EXTENT} float FB_PYR_CONNECTION_Z_EXTENT = {FP_FB_PYR_CONNECTION_EXTENT} float FF_PYR_CONNECTION_X_EXTENT = {FP_FF_PYR_CONNECTION_EXTENT} float FF_PYR_CONNECTION_Y_EXTENT = {FP_FF_PYR_CONNECTION_EXTENT} float FF_PYR_CONNECTION_Z_EXTENT = {FP_FF_PYR_CONNECTION_EXTENT} float PYR_FF_FB_CONNECTION_X_EXTENT = {FP_PYR_FF_FB_CONNECTION_EXTENT} float PYR_FF_FB_CONNECTION_Y_EXTENT = {FP_PYR_FF_FB_CONNECTION_EXTENT} float PYR_FF_FB_CONNECTION_Z_EXTENT = {FP_PYR_FF_FB_CONNECTION_EXTENT} float FF_FB_PYR_CONNECTION_X_EXTENT = {FP_FF_FB_PYR_CONNECTION_EXTENT} float FF_FB_PYR_CONNECTION_Y_EXTENT = {FP_FF_FB_PYR_CONNECTION_EXTENT} float FF_FB_PYR_CONNECTION_Z_EXTENT = {FP_FF_FB_PYR_CONNECTION_EXTENT} float FF_FB_FF_FB_CONNECTION_X_EXTENT = {FP_FF_FB_FF_FB_CONNECTION_EXTENT} float FF_FB_FF_FB_CONNECTION_Y_EXTENT = {FP_FF_FB_FF_FB_CONNECTION_EXTENT} float FF_FB_FF_FB_CONNECTION_Z_EXTENT = {FP_FF_FB_FF_FB_CONNECTION_EXTENT} float FB_FB_CONNECTION_X_EXTENT = {FP_FB_FB_CONNECTION_EXTENT} float FB_FB_CONNECTION_Y_EXTENT = {FP_FB_FB_CONNECTION_EXTENT} float FB_FB_CONNECTION_Z_EXTENT = {FP_FB_FB_CONNECTION_EXTENT}
piriform_params_conn.g float PYR_PYR_LOCAL_CONNECTION_X_EXTENT = \ {FP_PYR_PYR_LOCAL_CONNECTION_EXTENT} float PYR_PYR_LOCAL_CONNECTION_Y_EXTENT = \ {FP_PYR_PYR_LOCAL_CONNECTION_EXTENT} float PYR_PYR_LOCAL_CONNECTION_Z_EXTENT = \ {FP_PYR_PYR_LOCAL_CONNECTION_EXTENT} float PYR_PYR_VAPC_CONNECTION_X_HOLE = {FP_PYR_PYR_LR_VAPC_CONNECTION_HOLE} float PYR_PYR_VAPC_CONNECTION_Y_HOLE = {FP_PYR_PYR_LR_VAPC_CONNECTION_HOLE} float PYR_PYR_VAPC_CONNECTION_HOLE = {FP_PYR_PYR_LR_VAPC_CONNECTION_HOLE} float PYR_PYR_DAPC_CONNECTION_X_HOLE = {FP_PYR_PYR_LR_DAPC_CONNECTION_HOLE} float PYR_PYR_DAPC_CONNECTION_Y_HOLE = {FP_PYR_PYR_LR_DAPC_CONNECTION_HOLE} float PYR_PYR_DAPC_CONNECTION_HOLE = {FP_PYR_PYR_LR_DAPC_CONNECTION_HOLE} float PYR_PYR_PPC_CONNECTION_X_HOLE = {FP_PYR_PYR_LR_PPC_CONNECTION_HOLE} float PYR_PYR_PPC_CONNECTION_Y_HOLE = {FP_PYR_PYR_LR_PPC_CONNECTION_HOLE} float PYR_PYR_PPC_CONNECTION_HOLE = {FP_PYR_PYR_LR_PPC_CONNECTION_HOLE} // DELTA is a small nominal value used to prevent cells from // projecting to themselves. It should be at most half as large // as the smallest DX or DY parameter. float DELTA = 1.0e-5