pop


WM     Working Models     www.iModel.org/wm


CONTENTS
GUI - Graphical User Interface
Icons - Population icons
Population size and geometry
Maps, e.g. orientation
Cell attributes
Customize
Response output
Cortical unit function
Background input rates
Spike transmission
Synaptic Depression
Synaptic Interactions
Afferent Gain control
LGN
Mesh interface
Connectivity, <input>
Connectivity, LGN to CTX
Connectivity, CTX I to E
Connectivity, distrib
Models of this type



GUI

The GUI is activated by setting gui_flag to 1 in the .rsp file. It opens with two windows, the main window and the connections window. A third window, the monitor window, can be used to view the response and stimulus during the execution of the model. Some documentation can be listed in the shell (from which 'wm' was launched) by pressing h in the main window.

Examining connections

Some basic techniques for examining synaptic connections are described here.

The main window shows icons for a population of cells and an icon list (upper left) for all populations. Left-click on the icon list to select which population is displayed in the main window. Right-click on the icon list to select which population is displayed in the connections window. Clicking left/right on one of the icons among the 2D grid of icons in the main window (not in the header) will cause the pre/post synaptic connections with respect to the population in the connections window to be displayed. The display in the connections window can be binarized by pressing b, or normalized to max by pressing m, in the main window. Pressing the same key again will turn off the feature.

If an LGN population is displayed in the connections window, middle clicking an LGN unit in the connections window will show its post-synaptic targets in the main window.

Stimulus mode

Pressing 's' while the focus is in the main window will turn on (or off) the stimulus mode. This will display the stimulus in the connections window. This is useful for verifying the stimulus, examining how it overlaps with LGN inputs of a particular neuron, and selecting the stimulus that will be used if the model is executed in interactive mode. The following commands are relevant to stimulus mode:
  • ,. - pressing comma and period scroll forward and backword through video frames of the stimulus.
  • > < - less-than and great-than scroll forward and backward through the list of stimuli, if there are multiple stimuli specified in the .stm file.
  • s - enters or leaves stimulus mode.

Interactive mode

This mode allows execution of the model and visualization of the output in real time. Interactive mode is initiated by pressing i, which causes the monitor window to appear. This may steal the focus from the main window, so it is necessary to click the mouse back into the main window to issue commands.

The basics:

  1. Press i to enter interactive mode (you can leave only by exiting the model)

  2. Be sure that the desired stimulus has been selected in stimulus mode. You do not have to have stimulus mode turned on, once the desired stimulus has been selected.

  3. Verify that some cells are marked (with a dim white highlight) for recording. Cells will be marked based on requested outputs in the response (.rsp) file. You can mark cells in the GUI by clicking on them, then pressing f, then highlighting the desired output options, and using ESC (escape key) to quit.

  4. Note, the spacebar is used to clear all requested output.

  5. Press r to run the selected stimulus on the model.

Monitor Window

The monitor window shows responses as they are computed during simulation, and it can compute statistics of the traces that it monitors, and print them to the shell from which 'wm' was launched. Parameters that control the monitor configuration are listed in a section below.

Limitations

The monitor window currently shows output and does not accept input. The window can be resized with the mouse, but will not refresh properly until the next stimulus is run by pressing r in the main window.

Response file parameters

These parameters control the configuration of the GUI from the .rsp file.
  • gui_flag - 0-do not activate GUI, 1-activate GUI.
  • gui_win_x - x location of main window (pix)
  • gui_win_y - y location of main window (pix)
  • gui_win_w - width of gui main window (pix)
  • gui_win_h - height of gui main window (pix)
  • gui_win2_x - x location of connection window (pix)
  • gui_win2_y - y location of connection window (pix)
  • gui_win2_w - width of gui connection window (pix)
  • gui_win2_h - height of gui connection window (pix)
  • gui_colormapflag - 0-start w/o colormap, 1-w/ colormap
  • gui_stim_frame - [0] initial frame index of stimulus (this is the frame that will appear first when entering stimulus mode)
  • gui_stim_num - [0] initial stimulus number in stimulus mode

    Response Monitor

  • mon_flag - whether to show the monitor window (0 or 1)
  • mon_stim_flag - show visual stimulus in monitor window (0 or 1)
  • mon_t - temporal epoch (sec), use -1 for default time period
  • mon_dt - update monitor plot this often (sec)
  • mon_winw - monitor window width (pixels)
  • mon_winh - monitor window height (pixels)
  • mon_mV_y0 - y-axis lower bound for mV (-90)
  • mon_mV_y1 - y-axis upper bound for mV (-20)
  • mon_nS_y0 - y-axis lower bound for nS (-20)
  • mon_nS_y1 - y-axis upper bound for nS ( 40)

    Statistics (mean, SD) for plots

  • mon_stat_t0 - start of window for statistics (sec)
  • mon_stat_tn - duration of window for statistics (sec), 0=off
A line in the .rsp file like the following can be used to monitor spike trains from, for example, all inhibitory neurons that synapse onto the specified excitatory neuron:

  • mon_presyn_layer_to_cell in exs 8 8 0 spikes  # Monitor spikes from 'in' layer
    



Population Icons

Population icons are defined in the <pop> objects within the model parameter files (.moo). The following shapes are supported:
  • circle
  • square
  • polygon
    • nside [number_of_sides]
  • stellate
    • npoint [number_of_points]
  • cs - Center/Surround, used for LGN
Example of a simple blue circle:
  <icon>
    shape circle
    r 0.4
    g 0.4
    b 0.8
  </icon>
Example of green 5-pointed star:
  <icon>
    shape stellate
    r 0.0
    g 0.8
    b 0.2
    npoint 5
  </icon>



Population size and geometry

A population, defined by the <pop> object, consists of a set of units typically arranged on a cartesian grid. The geometry of the population is specified using the following object:
<geometry>
  xn  16           # Number of cells in x-dimension [Area xn?]
  yn  16           # Number of cells in y-dimension [Area yn?]
  zn   4           # Number of cells in z-dimension [1]
  x0   8           # Origin w.r.t. Area origin [0]
  y0   8           # Origin w.r.t. Area origin [0]
  xf   1.0         # Scaling w.r.t. Area (or stimulus grid?) [1.0]
  yf   1.0         # Scaling w.r.t. Area (or stimulus grid?) [1.0]
  oddxoff 0.0      # x-offset of odd row numbers [0.0] (grid units)
</geometry>
Values that are not specified default to those given for the area to which the population is assigned, or to fixed values, as specified above.

An <area> is defined as follows,

<area>
  name  v1           # Name to identify this area [exit]
  xn    16           # Size of area in x-dimension [exit]
  yn    16           # Size of area in y-dimension [exit]
  x0     8           # Origin w.r.t. stimulus grid [exit]
  y0     8           # Origin w.r.t. stimulus grid [exit]
  xf     1.0         # Scaling w.r.t. stimulus grid [1.0]
  yf     1.0         # Scaling w.r.t. stimulus grid [1.0]
  umx   59.0 (um)    # micons per Area grid unit [0.0]
  umy   59.0 (um)    # micons per Area grid unit [umx]
</area>
The stimulus grid is defined by the top-level parameters,
xn      16           # (pix) Size of stimulus in x-dimension [exit]
yn      16           # (pix) Size of stimulus in y-dimension [exit]
sscale   0.04        # (deg/pix) spatial scaling of stimulus grid [exit]



Maps

Maps, such as orientation or ocular dominance maps, can be applied to populations of cells to set attributes of those cells. Maps are applied to a population based on the size of the area assigned to the population.

Orienation. The following parameters govern the orientation map. Default values are specified in parentheses. Note, the phase shifts below refer to some fraction of a full cycle (0 to 360 deg), and the unit of deg here does not refer to the 0-180 degree orientation scale. [This can be confusing, and perhaps a range of 0.0 to 1.0 should be used instead.]

<map>
  name   orimap       # Name to identify this map [exit]
  type   ori          # Type of map, determines the orientation pattern [exit]
  ncol_x   2          # Number of orientation columns along x-axis [2]
  ncol_y   2          # Number of orientation columns along y-axis [ncol_x]
  phase_x  0.0        # (0-360 deg) shift pinwheels along x-axis [0.0]
  phase_y  0.0        # (0-360 deg) shift pinwheels along y-axis [0.0]
  phase_p  0.0        # (0-360 deg) rotate ori around pinwheel [0.0]
</map>
A particular algorithm for assigning orientations (from 0 to 180) is implied by the type parameter. This should be described here.

Direction. Currently, the orientation map sets a value that is interpreted as a direction, but only covers directions from 0-180. When forming direction selective (DS) cells, the direction can be changed by using a flag parameter, as follows:

  map_dir_flag  ori    # "ori", "ori_invert", "ori_alt_z", ...
where values have the following meaning:
  • ori - use the orientation map value for the reference direction
  • ori_invert - add 180 deg to the orientation map value
  • ori_alt_z - alternate between ori and ori+180 for z=0, 1, ... This allows the construction of multiple sheets of cells with opponent directions, consistent with the underlying orientation map.
Ocular Dominance. The following defines an ocular dominance map,
<map>
  name odmap          # Name to identify this map [exit]
  type ocdom          # Type of map [exit]
  ncol_x   4          # Number of OD columns in X-direction
  phase_x  1.0        # (0-360 deg) Phase of OD map on X-axis
</map>
RFX map. The following map defines how to align receptive field positions when an ocular dominance map is used,
<map>
  name rfxmap         # Name to identify this map [exit]
  type rfx            # Type of map
  ncol_x   4          # Number of OD columns in X-direction
  phase_x  1.0        # Phase of OD map on X-axis (deg)
</map>



Cell Attributes

Each cell in a population has several attributes that characterise its anatomical and physiological properties. These are
  • ori - orientation, 0..180.0
  • dir - direction, 0..360.0 (this is stored as 'ori', but can be referred to as 'dir' when the relevant values go from 0..360)
  • ori_cv - circular variance of orientation 0..1
  • phase - phase of spatial RF, 0..360.0
  • ocdom - Ocular dominance, -1.0 (left) to 1.0 (right)
  • rfx, rfy - position of center of RF on LGN/stimulus grid (xn by yn)
  • cx, cy - cortical location in microns
Some attributes can be rederived after an input is connected to a cell using the following commands in the body of an <input> object:
  • attr_ori_derive_from_pop [pop_name] - to compute the ori from the ori values of all synaptic inputs from the named population, weighted by the synaptic weights.
  • attr_dir_derive_from_pop [pop_name] - to compute the ori as a direction value (0..360) from the ori values and synaptic interactions (e.g. as DS02 with negative phase shift will add 180 to the input ori values).



Customize

The customize command allows properties of a specific cell to be modified.

Examples:

  • Delete all synapses where the specified pre-synaptic unit is involved in a synaptic interaction as index 0 and where the post-syn unit is in the specified layer.
    <customize>
      type        synapse_delete         # Delete synapses between units
      unit_pre    exs_11_11_0            # Pre-synaptic unit
      layer_post  ds                     # Post-synaptic layer name
      si_index    0                      # Synaptic interaction index
    </customize>
    
    
    
  • Adjust all synapses between the specified pre-synaptic unit and the post-synaptic layer. Currently, if there is a synaptic interaction, the weight only gets adjusted if the pre-syn unit has cell index 0.
    <customize>
      type        synapse_adjust         # Adjust synaptic weight
      unit_pre    exs_11_11_0            # Pre-synaptic unit
      layer_post  ds                     # Post-synaptic layer name
      syn_weight  6.23                   # Synaptic weight
    </customize>
    
    
    
  • Add a synapse between the specified pre-synaptic unit and the post-synaptic unit. (Layers not impl'd yet).
    <customize>
      type        synapse_add            # Add a synapse
      unit_pre    exs_11_11_0            # Pre-synaptic unit
      unit_post   ds_0_0_0               # Post-synaptic unit
      syn_weight  6.23                   # Synaptic weight
      syn_tdelay  0.0                    # Time delay (s), axon transit time
      syn_type    1                      # Synaptic type, 1-ex, 2-in
    </customize>
    
    
    

Below is old way - does not work with .moo files

Examples:
  • CUSTOMIZE unit ex_9_8_0 synapse_delete from_layer in

    deletes all synapses to the target unit (ex_9_8_0) from the named layer (in).

  • CUSTOMIZE unit ex_9_8_0 synapse_copy layer_to_unit in ex_8_8_0

    copy to the target unit (ex_9_8_0) all synapses from the named layer (in) to the source unit (ex_8_8_0).

  • CUSTOMIZE unit ex_8_8_0 set_param bg_rate_x 100.0

    set the parameter named "bg_rate_x" to the value (100.0) for the target unit (ex_8_8_0).

  • CUSTOMIZE unit ex_8_8_0 bg_corr_ex 0.90 ex_9_8_0
  • CUSTOMIZE unit ex_8_8_0 bg_corr_in 0.90 ex_9_8_0

    cause there to be 90% of shared spikes in the excitatory (first line) or inhibitory (second line) background inputs for ex_8_8_0 and ex_9_8_0. Both lines can be used together to correlate both ex and in background spike inputs. The fraction of identical spikes, here 0.9, may vary from 0 to 1.0.

  • CUSTOMIZE unit ex_8_8_0 style ds01

    Customize this unit according to a pre-defined style.




Response output

Cell - The following features of the state of a cell can be stored as output:
  • spikes - spike times
  • vm - Vm for soma (mV)
  • vd - Vm for dendrite (mV)
  • gad - Adaptation conductance (nS)
  • in_gi - Total inhibitory conductance from population "in"
  • in_ii - Current from population "in"
  • ex_gx - Total excitatory conductance from population "ex"
  • ex_ix - Current from intrcortical excitatory synapses, including "..._bg_rate_x".
  • lgn_ga - AMPA conductance from LGN, same as gx for inh cells
  • lgn_ia - AMPA current from LGN (nA)
  • lgn_gn - NMDA conductance from LGN (Not for inhib cells)
  • lgn_gx - Total excitatory g from LGN = lgn_ga + lgn_gn

  • lgn_gain - (a + b*gsum) signal which will divide original lgn_ga and lgn_gn (thus, lgn_gx).

    for LGN cells:

  • vm - sampling at 1000.0 (Don't know if other values work)
  • gx - sampling at 500.0 (Don't know if other values work)
  • gi - sampling at 500.0 (Don't know if other values work)
For example, to save spikes of unit (8,8) of the "ex" population:
  save_pop_unit_as_ex_8_8  s 1000.0  ex 8 8 0  spikes
Or, to save the Vm for the soma of unit (8,8) of the "ex" population:
  save_pop_unit_as_ex_8_8_vm  f 1000.0  ex 8 8 0  vm

Synapse - The following features of the state of a synapse can be stored as output:
  • si_mask - mask values for a synaptic interaction, such as si_ds02

  • si_mask1 - mask values for a synaptic interaction, using 'symmask'
  • si_mask2 - mask values for a synaptic interaction, using 'symmask'
For example, to save the synaptic interaction mask for the first synapse from ex (8,8,0) to ds (0,0,0),
  save_pop_syn_as_syn0  f 1000.0  ex 8 8 0  ds 0 0 0  si_mask



Cortical unit function

The population will all be of the same type, for example, "ux01" or "ui01" for generic excitatory and inhibitory units. This will determine how a units inputs are processed to produced its output.

The pre-computed (PC) inputs (from ON and OFF LGN cells) include the scale, bias, and noise for 'ifc_ex_' params. The IFC params for inhibitory scale, bias, and noise are currently not used, however, perhaps the bias and the noise could be used to form a PC inhibitory conductance?

The PC inputs are combined with the dynamic (D) inputs in the 'pop_util_deriv_01' routine.

Some excitatory units will have two compartments. The transfer resistance is set to be 15.4 nS = 65 MOhm (Larkum et al. 2004, Cerebral Cortex, used 65 MOhm).

  • ifc_ex_g_tran - (0 default) transfer conductance. If > 0, there will be a dendritic compartment, and NMDA can be used. If 0, then there will be no dendritic compartment, and no NMDA can be used.
Each excitatory cell has the following conductances:
  • AMPA - EPSC is given by the following parameters for alpha functions:
    • pop_ex_psc_tau_ex - onto ex cells
    • pop_ex_psc_amp_ex - This will set the amplitude of the AMPA conductance, and that for NMDA will be scaled according to 'nmda_frac'.

  • NMDA - (from Lauritzen et al., 2001; see also Carmignoto and Vicini 1992; Lester et al. 1990). Channels were 35.5% open at spike threshold, 52.5mV (Krukowski and Miller, 2001). Used 90% NMDA integrated current (Krukowski and Miller, 2001).

    To model the NMDA unitary conductance shape of Lauritzen et al. (2001), three alpha-functions are summed (see 'COMPARE_ALPHA_DBL_EXP' in 'test0.c'). The parameters are:

    • nmda_alpha_1 - 0.09 (time to peak = 1/alpha msec)
    • nmda_alpha_2 - 0.025
    • nmda_amp_2 - 0.8
    • nmda_alpha_3 - 0.008
    • nmda_amp_3 - 0.1

    The shape of this function is then scaled so that the fraction of integrated current (Krukowski and Miller, 2001, used 90%), NMDA/AMPA, is 'nmda_frac' for a cell clamped at the spike threshold. A separate value, 'lgn_nmda_frac' specifies the fraction for thalamocortical synapses.

    Apparently, increasing 'lgn_nmda_frac' adds to the NMDA input but keeps the same amount of AMPA input (as opposed to trying to keep the total excitatory conductance equal while only adjusting the relative fraction). Thus, changing the NMDA fraction from say 80% to 0 will reduce the total amount of excitatory input.

    The voltage dependence of the NMDA is given by Jahr and Stevens (1990) Equation 4a, whereas their Eqn 4c does not seem to be a very good approximation.

  • LEAKAGE
  • ADAPTATION
Excitatory units will recieve inputs from the LGN via AMPA/NMDA excitatory conductances. Inhibitory units will recieve only AMPA input. The precomputed LGN NMDA input has the same scaling as the AMPA input, but the bias and the noise are added only to the AMPA input because AMPA and NMDA are ultimately added together (after NMDA is scaled as a function of V).

Thomson and Deuchars, 1994 - cite Salt and Herring (1991) for the idea that LGN->CTX_E is non-NMDA. Has this been overturned?




Background input rates

Poisson activity can be added to the excitatory and inhibitory input conductances for the cortical units. The following examples show how to set the background rates to a single value for the entire population ("ex" here):
  • pop_ex_bg_ex_rate [rate] - (0.0 default) - spikes/sec arriving via the "ex" conductance
  • pop_ex_bg_ex_amp [amp] - (1.0 default) - EPSG amplitude relative to pop_ex_psc_amp_ex
  • pop_ex_bg_in_rate [rate] - (0.0 default) - spikes/sec arriving via the "in" conductance
  • pop_ex_bg_in_amp [amp] - (1.0 default) - EPSG amplitude relative to pop_ex_psc_amp_in
Correlated activity between a pair of cells (or several non-overlapping pairs) can be achieved using "CUSTOMIZE" commands.




Spike transmission

Spikes arriving to a cortical IFC unit add their PSG (post-synaptic conductance) to the appropriate synaptic conductance, for example g_ex or g_in. The PSG waveform for LGN spikes is a difference of exponential (DOE) function,
    DOE(t) = amp [ e^(-t/tau_f) - e^(-t/tau_r) ].
The PSG waveform for spikes of cortical origin is an alpha-function,
    ALPHA(t) = amp * a*t*e * e^(-a*t),
which has a peak value of "amp" at time 1/a. The alpha-function is used for cortical spike transmission for computational efficiency (Bernard et al, 1994 [ref #7025]).

When a spike is discharged in the population model, it is added to the input lists of post-synaptic cells with a 1.0 ms delay. The spike is represented in the list as a floating point value of 1.0 for full strength. Synaptic depression is applied by reducing the value that is added to the list.

See Boudreau and Ferster (2005) for cat synaptic depression.




Synaptic Depression

A factor 'f' that sets the efficacy immediately after a spike, and a time constant tau. Not used for I->E w/i cortex. See Kayser, Priebe, Miller (2001).

See Boudreau and Ferster (2005) for recent data?

The following parameters govern synaptic depression, which is separate for LGN-to-CTX and CTX-to-CTX:

    Cortex to Cortex

  • *** WARNING: these params control *all* intracortical transmission
  • ctx2ctx_ex_sdf - Efficacy immediate following a spike
  • ctx2ctx_ex_sdtau - (ms) time constant of recovery from depression

    LGN to Cortex

  • lgn2ctx_sdf - Efficacy following a spike at the synapse
    • 1.0 - no depression
    • 0.0 - full depression
  • lgn2ctx_sdtau - Time course of exponential recovery towards full efficacy (1.0)



Synaptic Interaction

A synpatic interaction (SI) allows spike trains from multiple cells to interact before they influence the conductance of a unit. This creates computational subunits that are separate from the integration of the soma.

si_ds02

This mechanism was created for implementing direction selective responses. It involves spike trains from a pair of units (u0,u1). The spikes from u1 are convolved with a mask template to create a function that multiplies the amplitude of the spikes from u0. The units corresponding to u0 and u1 are assigned cell index (CI) values of 0 and 1 respectively (CI is a value held within the synaptic interaction structure). The scaled spikes from u0 then influence the post-synaptic conductance in the usual way. Parameters are:
  • dt - time to peak of mask function
  • masktype - 1-sinusoid, 2-maxwell function
  • ph_shift - phase shift between spatial RFs of u0 and u1 (90.0 deg)
  • ph_dev - phase deviation around phase shift (5.0 deg)
The synaptic interaction is formed from an existing set of synapses, and the existing synapses will be assigned CI 0 and the new, paired synapses assigned CI 1. Thus, the new, paired synapses will make the mask.

si_nonlin

This implements a more general masking nonlinearity. The 'nonlin' value allows the use of one-way masking (cell 0 spikes are multiplied by a mask set by cell 1), or two-way (e.g., symmetric) masking where spikes from each cell are multiplied by a mask from the other, or multiplication, where the two mask functions multiply each other (this is more like a product of the g's).
  • nonlin - ['mask'] or 'mult' or 'symmask', the latter symmetrical mask causes each cell in the pair to set a mask for the spikes of the other.
  • dt - [must specify] Peak interaction time (s) or SD for Gaussian
  • masktype - [must specify] 1-sinusoid (down up down), 2-maxwell function (dt is peak), 3-sine positive lobe only, 4-half Gaussian, (dt is SD), 5-alpha function (dt is peak).
  • mask_comp - ['prod'] to mulitply by mask, 'prod1m' to multiply by 1-mask.
  • mask_amp - [1.0] mask amplitude. At its peak, the mask would take this value.

multiply

This nonlinearity allows a pair-wise multiplicative interaction of LGN inputs. The spike trains of a pair of LGN units are each converted to a conductance signal in the normal manner, by convolving with a function h(t), (after applying any synaptic depression) and the traces are then multiplied. The new multiplied signal is scaled by a factor equal to the integral of h(t) divided by the integral of the square of h(t).

An example of using this nonlinearity is as follows:

  <mech>
    name       pair1        # Name, to be referred to by an <input>
    type       multiply     # Multiply the two conductance traces
  <>

  <input>
    type            lgn_pair   # Create pairs of LGN inputs
    receptor        lgn_ex     # Mechanism for post-syn. conductance
    pair_mech       pair1      # Name of mechanism for paired computation
    pop_origin_1    lgn_a      # Population of origin of LGN inputs [lgn]
    pop_layer_z_1   -1         # z-Layer within population (-1 all z)
    pop_origin_2    lgn_b      # Population of origin of LGN inputs [lgn]
    pop_layer_z_2   -1         # z-Layer within population (-1 all z)

    offset_direction       0.0  (deg) # Offset direction (deg)
    offset_distance        0.25 (deg) # Offset distance (deg of visual angle)
    offset_jitter_para     0.0  (deg) # Jitter parallel to offset vector
    offset_jitter_orth     0.0  (deg) # Jitter orthogonal to offset vector
    offset_jitter_seed  1121          # Randomization seed

    <distrib>
      type   rf_center      # Distribution depends on RF center location
      form   Gaussian       # 'Gaussian', ...
      cdist      0.1  (deg) # critical distance (SD for Gaussian)
      minw       0.05       # suppress connections with lower weight
      normw     50.0        # normalize total weights to this; 0.0 no norm.
      n         10          # Number of inputs
      seed    1777          # Randomization seed
    </distrib>
  </input>

divide

This nonlinearity allows a pair-wise divisive interaction of LGN inputs. The spike trains of a pair of LGN units are each converted to a conductance signal in the normal manner, by convolving with a function h(t), (after applying any synaptic depression) and the traces are then divided as follows:
  y = g1 / (a + b*g2)

where 'g1' is the conductance from "pop_origin_1". An example of using this nonlinearity is as follows:

  <mech>
    name       pair1        # Name, to be referred to by an <input>
    type       divide       # Divide the two conductance traces
    div_a      1.0          # 'a' additive constant, to avoid division by zero
    div_b      1.0          # 'b' multiplicative constant
  <>

  <input>
    type            lgn_pair   # Create pairs of LGN inputs
    receptor        lgn_ex     # Mechanism for post-syn. conductance
    pair_mech       pair1      # Name of mechanism for paired computation
    pop_origin_1    lgn_a      # Population of origin of LGN inputs [lgn]
    pop_layer_z_1   -1         # z-Layer within population (-1 all z)
    pop_origin_2    lgn_b      # Population of origin of LGN inputs [lgn]
    pop_layer_z_2   -1         # z-Layer within population (-1 all z)

    offset_direction       0.0  (deg) # Offset direction (deg)
    offset_distance        0.25 (deg) # Offset distance (deg of visual angle)
    offset_jitter_para     0.0  (deg) # Jitter parallel to offset vector
    offset_jitter_orth     0.0  (deg) # Jitter orthogonal to offset vector
    offset_jitter_seed  1121          # Randomization seed

    <distrib>
      type   rf_center      # Distribution depends on RF center location
      form   Gaussian       # 'Gaussian', ...
      cdist      0.1  (deg) # critical distance (SD for Gaussian)
      minw       0.05       # suppress connections with lower weight
      normw     50.0        # normalize total weights to this; 0.0 no norm.
      n         10          # Number of inputs
      seed    1777          # Randomization seed
    </distrib>
  </input>



Afferent Gain Control

A gain control has been implemented for the LGN-to-cortex inputs. The afferent gain control (AGC) operates by dividing the total conductance (both the AMPA and NMDA, if any, from the LGN) for the input by a signal S(t). The signal S(t) is computed from a signal, h(t):
S(t) = gain_ca + gain_cb * h(t), 
where h(t), is a Gaussian weighted average involving the raw filter outputs, ri(t) of the n LGN afferents,
          n
  h(t) = SUM wi [ri(t) - rH] / rMax
         i=1
where w is a Gaussian weight, rH is the middle of the response range for any r and rMax is the maximum possible response. The Gaussian SD is set as the larger of sd_orth and sd_par, and it is applied radially from the center of the V1 RF to define the gain field.

In practice, The signal h(t) has been observed to have a value of about 0.04 for a grating of SF 1 cyc/deg and TF 8 Hz for the Dog.0.0 model. The value 0.04 indicates about 4% of maximal theoretical LGN activation on average across the gain field. The theoretical rMax is probably never achieved.

To smooth the signal, S(t), it is convolved with a one-sided decaying exponential with time constant gain_tau.

<input>
  type lgn_on_off
   ...
  gainflag   1      # 1-Apply gain control, 0-none
  gain_tau   0.020  # Exponential convolution, time constant (s)
  gain_ca    1.0    # Additive constant
  gain_cb   14.0    # Multiplicative constant (0.0=no gain control)
   ...
  sd_orth    0.125  # (deg) Gaussian SD for Gabor RF orthog to ori
  sd_par     0.215  # (deg) Gaussian SD for Gabor RF parallel to ori
   ...
</input>



LGN

The LGN spike trains may arise from two sources:
  1. DOG filter model (mod_dog_util.c)
  2. Retina network model (mod_mesh_util.c)
If there is a top-level object, <retina0>, in the .moo file, then it is assumed that the retina network is to be used. In that case, see the section below, Mesh interface, for a description of how the mesh model is coordinated with the pop model.

Otherwise, it will be assumed that the DOG filter is to be used, and the rest of the documentation in this section applies.

If the DOG filter is being used, there needs to be at least one population such as:

<pop>
  name lgn
  type lgn
  ...
  <geometry>
    zn    2          # Depth 2 for OFF and ON cells, use 4 if binocular
  </geometry>

  binocular   0      # 0-monocular, 1-binocular
  ...
</pop>
There may also be a population named lgn_m to create a second LGN population with a different DOG filter.

Density of LGN cells

The following reasoning is used to estimate the number of LGN cells available at different eccentricities.

Wassle et al (1990 Vis Res) Fig 6A shows ganglion cell densities vs. eccentricity for Macaque. At 8 deg, there are about 1000 cells per deg^2 (averaging temporal and nasal estimates):

Wassle et al (1990 Vis Res, p1910) state that 'Recent analysis shows, in contrast to previous estimates (Malpeli & Baker, 1975), that there is a one to one relationship between axons arriving in the optic tract and relay cells in the LGN (Schein & DeMonasterio, 1987). No difference in mapping has been found between M and P pathways (Livingstone & Hubel, 1988).'

The ratio of P to M is roughly 10:1 (e.g., Ahmad and Spear, 1993).

Normalization of LGN filter response

After the spatio-temporal DOG filter is computed, it is scaled so that the sum of all positive values in the filter is 1.0. In other words, the positive area is scaled to 1.0.

The maximum response from the filter is equal to the positive area, and the maximum value can only occur if the stimulus is 1.0 everywhere the filter is positive and 0.0 everywhere it is negative.

The normalized filter is convolved with the visual stimulus and the output is used to drive the excitatory input of an IF-unit, where the inhibitory input has been set to zero.

ON and OFF responses

To generate output spike trains for ON LGN cells, the response, R(t) of the DOG filter is used to control the excitatory conductance of a standard IFC (conductance-based integrate-and-fire) unit. For OFF LGN cells, the excitatory conductance is controlled by R'(t)=A-R(t), where A is the integral of the DOG filter. By linearity, R'(t) is, intuitively, the response of the DOG filter to "one minus the stimulus", where the visual stimulus has values from 0 to 1.

Correlation between LGN spike trains

Three parameters control the correlation between LGN spike trains:
  1. lgn_corr_distance - ("d") Distance in terms of cells, 1=no correlation
  2. lgn_corr_ppick - ("p") probability of adding a spike from a neighbor
  3. lgn_corr_tsd - SD of Gaussian for adding temporal jitter to spikes from neighbors. Time units should be msec.
Correlation is created by starting with the set of raw spike trains (which have only that correlation induced by the stimulus). Each cell (the target cell) then keeps only a fraction, k, of its original spikes and discards the rest. The target cell then adds spikes from neighboring cells (in particular, from their kept spikes) that lie within a square region of side length d centered on the cell. When d is even and centering is impossible, the target cell should lie to the lower left of center, as shown below for d=2 and d=4:

                            c c c c
                 c c c      c c c c      X - target cell
        c c      c X c      c X c c      c - neighbor cell
        X c      c c c      c c c c

        d=2       d=3         d=4

Here is a quantitative description of the algorithm:
  1. Assume every cell has n spikes on average, originally.
  2. Each cell will pick from b neighbors, where b = d*d-1
  3. Let k be the fraction of spikes to be kept by each cell.
  4. The average number of spikes picked from all neighbors is s = b*p*k*n
  5. Maintaining the average number of spikes at the original level requires that s = (1-k)*n
  6. Thus, k = 1/(p*b + 1)
For example, if d=2 and p=1, then b=3 and k = 1/4. Thus, all cells keep 1/4 of their spikes, and recieve all of the kept spikes from three neighbors. In this case, two horizontally or vertically adjacent cells will share 50% of their spikes, on average.

Decreasing p will cause each cell to keep more of its spikes and include fewer from its neighbors, thus decreasing the correlation. Increasing d will spread correlation over more cells, and the correlation to the more distant cells within the neigbhorhood will be weaker.

Collisions. Currently, this correlation generation algorthm causes spike collisions that are not removed. This violates the spike refractory period of LGN cells, which in our TF data for both M and P cells can be approximated by an absolute refractory period that varies from about 1 to 2 ms.




Mesh Interface

The pop model can be interfaced to the retinal mesh model. This describes the functions that are called from mod_pop_util.

To prepare, and receive information

  • mod_mesh_rgc_01_prep() - Prepare the retina mesh model
  • mod_mesh_get_mm_mosaic_cn() - get number of cones in mosaic
  • mod_mesh_ptr_mm_mosaic_cx() - get pointer to list of cone x-coords
  • mod_mesh_ptr_mm_mosaic_cy() - get pointer to list of cone y-coords
  • mod_mesh_ptr_mm_mosaic_cid() - get ptr. to cone ID: 0,1,2 (S,M,L)
  • mod_mesh_ptr_mm_mosaic_dens_deg() - get cone density, per deg^2.
  • mod_mesh_ptr_mm_mosaic_degpmm() - get deg/mm on retina.

On each trial, to get responses

  • mod_mesh_compute_diff_all() - Run mesh model on stimulus, compute P-H difference at all loci
  • mod_mesh_get_spikes_2d_flag() - Return spikes for each unit that is flagged in the indicator array



Connectivity - <input>

Connections between populations of cells are specified using the input object. The following types of inputs exist:
  • regular - inputs between cortical populations

  • lgn_on_off - inputs from LGN population
    (See section below on LGN to CTX).

  • bg - background spikes
    • ex_rate [rate] - (0.0 default) - spikes/sec arriving via the "ex" conductance
    • ex_amp [amp] - (1.0 default) - EPSG amplitude relative to pop_ex_psc_amp_ex
    • in_rate [rate] - (0.0 default) - spikes/sec arriving via the "in" conductance
    • in_amp [amp] - (1.0 default) - EPSG amplitude relative to pop_ex_psc_amp_in

    Example

      <input>
        type       bg     # Background input spikes
        ex_rate   100.0   # spikes/s
        ex_amp      4.0   # relative to _psc_amp_ex
        in_rate   200.0   # spikes/s
        in_amp      2.0   # relative to _psc_amp_in
      </input>
    

Writing and Reading from files

Some patterns of synaptic connections specified by <input> are time consuming to compute, and are best computed once and then read from a file during repeated use of the model.

Some input types can have associated connectivity files (.conn), which allow connection patterns to be stored to be read later. This is configured using the top-level parameters:

  • mod_conn_rw - "read", "write", or "none" (default)
  • mod_conn_dir_r - directory path prefix for file_read
  • mod_conn_dir_w - directory path prefix for file_write
Set mod_conn_rw to "write" or "read" to write or read connections, respectively. You cannot do both at once. Set it to "none" (the default), to do neither.

In addition to setting these top-level values, the following must be used within any relevant model inputs:

  <input>
    type    regular
    ...
    file_write conn/local/e2i.conn   # Writes only if 'mod_conn_rw' is "write"
    file_read  conn/global/e2i.conn  # Reads only if 'mod_conn_rw' is "read"
    ...
  </input>
The value of file_write is added to any prefix specified using mod_conn_dir_w, and likewise with file_read. In this example, connections would be written to one directory by setting mod_conn_rw to "write" and then read back from a different directory with the "read" setting.




Connectivity - LGN to CTX

The routine mod_conn_layer_gabor_map is called to set the connections from the LGN to cortical cells. Currently, this routine calls by default the routine mod_conn_gabor_02 to pick the specific connections.

mod_conn_gabor_02

  • Create a 2D Gabor function, called p.
  • Take the absolute value of p
  • Scale p to have a maximum value of 1.
  • Call the routine mod_conn_meth_02, sending p
    Make a set, G, of all grid points for which p is greater than eps (a small probability value). Choose at random with replacement from G the specified number of inputs. If any input is chosen more times than allowed (specified by ..._maxrep), then disregard this input, and choose another in its place.

Gabor function params

  • sf 1.00 # (cyc/deg) SF
  • sd_orth 0.25 # (deg) Gaussian SD for Gabor RF, orthog to ori
  • sd_par 0.43 # (deg) Gaussian SD for Gabor RF, parallel to ori
  • phseed 6577 # for chosing phase (random in 1 of 4 phases)
  • seed 1777 # for chosing DOG sampling
  • nsamp 200 # number of samples to select as inputs
  • maxrep 1 # number of times any one connection can be sampled
  • eps 0.05 # no connections where profile < this frac of max
  • balance 1 # 0-do not balance ON/OFF, 1-balance ON/OFF

  • cell_condition all # "all", "0", "1", "2" ... E.g., cone type

Gabor function params - phase

  • phtype 0 # 0-constant for all in z-axis, 1-regular steps
  • ph0 x # initial phase (phtype 1)
  • phstep x # step by this phase (phtype 1)



Connectivity - CTX I to E (and E-E, and I-I)

The connections from inhibitory to excitatory cortical cells are made in a correlation-based fashion. There are several algorithms for doing this, and the algorithm can be selected using the parameter conn_i2e_algorithm below.

Parameters

  • conn_i2e_algorithm - values are listed below (0 is default)
    • 0 (mod_conn_corr_on_off) - pointwise correlation
    • 1 (mod_conn_corr_on_off_01) - convolve sampling points (1's for ON, and -1's for OFF) with the center Gaussian of the DOG to create masks for both E and I RFs. The correlation metric is the sum of the products of the RF masks. The distribution of all negative values is formed. The values are scaled so that the mean plus 2 SDs is set to have weight 1. Any higher values are set to 1. Any values lower than conn_i2e_minw are set to 0.

  • conn_i2e_minw - Do not make synaptic connections if the weight would be below this value. This can significantly lower the number of I->E contacts, and may speed up the model.
  • conn_i2e_prob - Of the set of valid weights, choose connections with this probability (Default 1.0).
  • conn_i2e_seed - Randomization seed for i2e connections, used only when conn_i2e_prob < 1.0 (Default 1880).

  • conn_e2e_algorithm - (-1 default, no connections) 1=connections
  • conn_e2e_... - See parameters above for conn_i2e_...

  • conn_e2i_algorithm - (-1 default, no connections) 1=connections
  • conn_e2i_... - See parameters above for conn_i2e_...



Connectivity - "distrib"

The "distrib" object defines the distribution of connections between cells in layers. Below is a list of values that can be used for the value of type within the distrib.

NOTE there appears to be an inconsistency in the placement of the file parameter, because it appears for some 'distrib' types below, but not for 'ori_dist' (where it apparently appears in the 'input' object. This should be resolved.

ori_dist

  • cdist - (um) SD of Gaussian weighting function (max is 1) in orientation. Set to any negative value for SD infinity (i.e., no distance constraint). [-1.0 default]
  • cori - (deg) SD of Gaussian weighting function (max is 1) in cortical distance. Set to any negative value for SD infinity (i.e., no orientation constraint). [-1.0 default]

  • ori_mean_flag
    • 0 - [default] orientation of the post-syn cell is the reference
    • 1 - add an offset to the orientation of the post-syn cell
    • 2 - use a fixed, absolute orientation as the reference
  • cori_offset - (deg) used only if ori_mean_flag is 1
  • cori_mu - (deg) used only if ori_mean_flag is 2

  • minw - (0..1) make no synapses with weights below this threshold [0.0 default]
  • normw - (synapses) Normalize the total of all weights to this number of synapses [0.0, default, no normalization]
  • prob - () probability of making a connection [1.0 default]
  • seed - (non-zero int) randomization seed for applying 'prob' [23138 default]
  • self - (0/1) 0-disallow connection to self [1 default]

corr_lgn

  • file - (file name) read inputs from file, ignoring parameters here. Comment this out to disable.

  • algorithm - (0,1,...) strategy for picking random connections. Only '1' works now. [1 default]
  • minw - (0..1) make no synapses with weights below this threshold [0.0 default]
  • cdist - (um) Cutoff distance - no synapses beyond this distance; ignored if less than or equal to zero [0 default].
  • prob - () probability of making a connection [1.0 default]
  • seed - (non-zero int) randomization seed for applying 'prob' [23138 default]
  • corr_sign - (1) sign of correlation: 1-positive, -1-negative [1 default].
  • normw - (synapses) Normalize the total of all weights to this number of synapses [0.0, default, no normalization]

gabor_mask

  • file - (file name) read inputs from file, ignoring parameters here. Comment this out to disable.
  • mask_pre_pop - name of LGN layer, e.g., 'rgc' or 'lgn' [exit]

  • sf - (cyc/deg) [exit]
  • sd_orth - (deg) [exit]
  • sd_par - (deg) [exit]

  • cdist - () [exit]
  • minw - () [exit]
  • seed - () [exit]
  • prob - () [exit]
  • normw - () [exit]

binoc_mask

This implements a Gabor mask like 'gabor_mask', but allows binocular inputs with a disparity.
  • file - (file name) read inputs from file, ignoring parameters here. Comment this out to disable.

  • disp_x - (pix) [0.0]
  • disp_y - (pix) [0.0]

  • sf - (cyc/deg) [exit]
  • sd_orth - (deg) [exit]
  • sd_par - (deg) [exit]

  • cdist - () [exit]
  • minw - () [exit]
  • seed - () [exit]
  • prob - () [exit]
  • normw - () [exit]



Models of this type