# dLGN model at P7-P10 Before running any simulations, please compile NEURON modules by the command ``` nrnivmodl lmods mods ``` Launch the `dLGNnetwork.py` script with or without additional arguments that alter parameters to run a simulation. The complete list of command line arguments is given below. ## Convergence Figure 2 To replicate the full simulations for Figure 2 on an HPC computer, use SLURM script `SLURM-scripts/converegence.sbatch` ``` cp SLURM-scripts/converegence.sbatch . sbatch -a 1-9 converegence.sbatch ``` Just to plot results from the cumulative database, run `convergence-reader.py` with the database. For NMDA+AMPA mixture ``` python convergence-reader.py -l homeostasis-G-CONV-TFR0.50-SIGMAXX-NMDA.json ``` For AMPA only ``` python convergence-reader.py -l homeostasis-G-CONV-TFR0.50-SIGMAXX-AMPA.json ``` ## TRN inhibition Figure 4 To replicate full simulation for Figure 3 on HPC computer use SLURM script `SLURM-scripts/trn-scan.sbatch` ``` cp SLURM-scripts/trn-scan.sbatch . sbatch -a 0-65 trn-scan.sbatch ``` To plot results from the cumulative database, run `trn-scan-reader.py` with the database. For NMDA+AMPA mixture ``` python trn-scan-reader.py -l homeostasis-G-CONV-TRN-TFR0.50-NMDA.json -M 2.3 ``` ## CTX excitation and TRN inhibition Figure 5 To replicate the full simulations for Figure 4 on an HPC computer, use SLURM script 'SLURM-scripts/dLGNnetwork-as-cortical-input.sbatch` and one of two setting files. Because overall simulation takes about 300 days on 16 nodes, 40 core in each node, we used Monte-Carlo sampling, which runs in two batches ``` for i in SLURM-scripts/dLGNnetwork-as-cortical-input.sbatch SLURM-scripts/homeostasis-G-CONV-TRN-CXT-TFR1.00-Nxx-Cxxx-20220816-100511.sbatch SLURM-scripts/homeostasis-G-CONV-TRN-CXT-TFR1.00-Nxx-Cxxx-20220816-100545.sbatch do cp $i . done sbatch -a 0-15 dLGNnetwork-as-cortical-input.sbatch homeostasis-G-CONV-TRN-CXT-TFR1.00-Nxx-Cxxx-20220816-100511.sbatch sbatch -a 0-15 dLGNnetwork-as-cortical-input.sbatch homeostasis-G-CONV-TRN-CXT-TFR1.00-Nxx-Cxxx-20220816-100545.sbatch ``` To plot results from the cumulative database, run `cxt-trn-motecarlo-reader.py` with the database. ``` python cxt-trn-motecarlo-reader.py -l homeostasis-G-CONV-TRN-CXT-TFR1.00-vX.json --cor-minmax 0.6 -I ``` ## Files and directories here |File or directory | Description | |:---------------------------|:------------------------------------------------------------------------------------------------------------------------| |dLGNnetwork.py | The main script to run simulations for Figure 2, 4, and 5 | |dLGNanalysis.py | collection of tools to analyze simulation results | |dLGNgraphs.py | graphical unities | |simtoolkit | module for support manipulation with model parameters and storage for bulky results (should be on GitHub and PyPI soon) | | mods | NEURON modules for TC neuron | | lmods | NEURON modules for synapses and vector activation | |SLURM-scripts | scripts to run simulations on HPC | |convergence-reader.py | reader for results of converegence.sbatch script | |homeostasis-G-CONV-TFR0.50-SIGMAXX-NMDA.json | database with cumulative results of NMDA+AMPA run | |homeostasis-G-CONV-TFR0.50-SIGMAXX-AMPA.json | database with cumulative results of AMPA only run | |trn-scan-reader.py | reader for results of trn-scan.sbatch script | |homeostasis-G-CONV-TRN-TFR0.50-NMDA.json | database with cumulative results of TRN run | |cxt-trn-motecarlo-reader.py | reader for results of dLGNnetwork-as-cortical-input.sbatch script | |homeostasis-G-CONV-TRN-CXT-TFR1.00-vX.json | database with cumulative results of CTX-TRN run | --- ## The full list of command line arguments for the main script ``` $python dLGNnetwork.py --help dLGN network desynchronization at P7-P10 Ruben Tikidji-Hamburyan GWU 2020-2022 Usage: python dLGNnetwork.py [options] [parameters] Any model parameter can be altered by /parameter_name=parameter_value in the command line Options: -o RD, --stkdb-record=RD Record the simulation in database (default dLGNnetwork.stkdb) -m RM, --stkdb-message=RM Supply database record with a massage. Useful when run scripts (default None) -c, --stkdb-cmd Add end command line to the data base (doesn't change model hash sum)' -L LG, --log=LG Output log to the file (default on the screen) -l LL, --log-level=LL Level of logging may be CRITICAL, ERROR, WARNING, INFO, or DEBUG (default INFO) -h, --help Print this help Parameters: /network/nprms/db = 'P07-selected-checked-gmin.json' : file with neuron parameter database /network/nprms/lst = 'models' : variable with list of parameters /network/nprms/gmin = 'gsynmin' : variable with minimal conductance /network/nprms/threshold = 0. : spike threshold /network/geom/shape = 'H' : H-hexagonal or S-square /network/geom/x = 7 : number of columns /network/geom/y = 16 : number of rows /network/annoying_hetero = True : If set True, it guarantees that all neurons in the population are different. For this : option, one needs a database bigger than network size. /network/gj/geom/p = 0.3 : gap junction probability /network/gj/geom/unit = 'n' : if 'n' - /network/gj/geom/p probability of connection per neuron. if 'c' - : /network/gj/geom/p is probability of connection per pear of neurons within maxd : distance if 'o' - /network/gj/geom/p is average number of GJ per neuron. /network/gj/geom/maxd = 1.5 : gap junction max distance /network/gj/geom/mind = None : gap junction min distance /network/gj/geom/dir = None : gap junction direction (random if None) /network/gj/r = 600. : gap junction resistance. 2022/02/04: For current neuron database this resistance : produces spikelets with dV = 1.7 +- 0.22 mV and absolute range for all neurons : [0.95,2.8] mV, Coupling coefficients mean = 0.4+-0.077 range=[0.087,0.58] aren't : Compatible with VBN coupling Lee et al. 2010, but spikelet amplitude is similar to : spikelets in cat LGN Hughes et al. 2002 /network/syn/gsyn = None : synaptic conductance: if positive - set for everyone, if negative - set the : portion of minimal synaptic conductance for a neuron, if None set to 1/3 of the : minimal synaptic conductance for each neuron. /network/syn/rand = False : If ture - gsyn randomly init between 0 and /syn/gsyn value /network/syn/prenorm = True : If true the total synaptic conductance will be set to /syn/gsyn value for each : neuron in the **beginning**! It is active only in model building. For dynamical : normalization see /network/btdp /network/syn/geom/unit = 'N' : Pattern of synaptic connectivity: : 'o' - one-to-one creates only one connection for each rGC to a closest LGN cell. : 'a' - all-to-all connections: each rGC connects all dLGN cells. This is the best configuration for btdp. : You can use /network/syn/sig2gsyn to create a Gaussian distributions of weights : 'e' - exponential distribution uses /network/syn/geom/pmax for maximum probability and : /network/syn/geom/sig for sigma. : 'E' - same as e but distance computed from the closets rGC : 'g' - Gaussian distribution. it uses /network/syn/geom/pmax for maximum probability and : /network/syn/geom/sig for sigma. : 'G' - same as g but distance computed from the closets rGC : 'r' - random distribution : 'n' - random number between /network/syn/geom/nmin and /network/syn/geom/nmax for each TC is generated. : rGC are picked randomly : 'c' - connect to closets (but not one) rGC : 'N' - same as n butcloset rGC are picked : ADD HERE MORE IF NEEDED! /network/syn/geom/pmax = None : peak of synaptic probability for exponential or Gaussian distributions. /network/syn/geom/sig = None : sigma for exponential or Gaussian distributions. /network/syn/geom/nmin = 7 : minimum of rGC connection per TC /network/syn/geom/nmax = 20 : maximum of rGC connection per TC /network/syn/sig2gsyn = None : sigma for create Gaussian distributions of weights with distance /network/syn/AMPA/p = 1 : portion of AMPA conductance /network/syn/AMPA/tau1 = 1. : AMPA rising time constant /network/syn/AMPA/tau2 = 2.2 : AMPA falling time contant From Chen & Regehr 2000 Table 1 P10-P14 Inconsistent with : Hauser et al. 2014 AMPA $\tau_d \approx 5.47$ ms /network/syn/NMDA/p = 2.25 : portion of NMDA conductance /AMPA/p and /NMDA/p are computed from Shah & Crair 2008 : as followed: For _P6–P7_ : $i_{AMPA}/i_{NMDA} = \beta_{P7} =0.78 \pm 0.09$ (peak-to- : peak) comparable with $\beta_{P10} = 0.5 \pm 0.1$ from Chen & Regehr 2000 for : voltage clamp $i_{vl}=g_{vl}*(E-V_{vl})$ where $E=0$ reversal potential for NMDA and : AMPA, and $v_{VL}$ potential for voltage clamp. $g_{vl}=i_{vl}/v_{vl}$ conductance : $\frac{g_{AMPA}}{g_{NMDA}}=\frac{i_{AMPA}}{i_{NMDA}} : \frac{\Delat_{NMDA}}{\Delat_{AMPA}}$, where $\Delat_{NMDA}$ and $\Delat_{AMPA}$ are : differences between holding potentials and the reversal potential for NMDA and AMPA : currents $\frac{\Delat_{NMDA}}{\Delat_{AMPA}}$ = 40 mV / 70 mV = 0.57 : $\frac{g_{NMDA}}{g_{AMPA}} = \frac{1}{0.57 \beta_{P7}} \approx 2.25$ Note that Dilger : et al. 2015 estimated $\beta_{P10} \approx 1$ which give /NMDA/p=1/0.57$\approx : 1.75$. The value from from Chen & Regehr 2000 $\beta_{P10} = 0.5 \pm 0.1$ gives : /NMDA/p=1/(0.57*0.5)$\approx 3.5$. /network/syn/NMDA/tau1 = 1. : NMDA rising time constant /network/syn/NMDA/tau2 = 150. : NMDA falling time contant From Chen & Regehr 2000 Table 1 P10-P14 Consistent with : Dilger et al 2015 /network/syn/ppr_u0 = 0.3 : sets presynaptic single spike depression it's adjusted to obtain paired-pulse ratio : 0.73 From Chen & Regehr 2000 Table 1 P10-P14 /network/syn/toneExc = None : Conductance for tonic excitation (None to block) /network/syn/toneInh = None : Conductance for GABA_B receptors (None to block) /network/file = 'dLGN-network.stkdata' : save/read network configuration to/from this file /network/load = True : read network from the file (if True) or from another file (if filename given) /network/save = True : save network to the file (if True) or to another file (if filename given) /network/reload/nprms = False : sets specific record within the file from there neuron parameters will be reread or : the first one if True /network/reload/gjcon = False : sets specific record within the file from there gap-junction connections list will : be reread or the first one if True /network/reload/syncon = False : sets specific record within the file from there list of synaptic connections will : be reread or the first one if True /network/reload/gsyncond = False : sets specific record within the file from there list of synaptic conductance will be : reread or the first one if True /network/reset/nprms = False : reset neuron parameters /network/reset/gjcon = False : resets gap junction connections /network/reset/syncon = False : resets list of synaptic connections /network/reset/gsyncond = False : resets list of synaptic conductances /network/annoying_reload/nprms = True : If True and neuron parameters hash doesn't match it stops /network/annoying_reload/gjcon = False : If True and gap junction connection list hash doesn't match it stops /network/annoying_reload/syncon = True : If True and synaptic connection hash doesn't match it stops /network/annoying_reload/gsyncond = False : If True and synaptic conductance list hash doesn't match it stops /network/annoying_reload/btdp = False : If True and /btdp/continue and /record/file does not have gsyn with correct hash - it : stops /network/btdp/enable = False : Set it to true for activation btdp /network/btdp/update = 5000. : update synaptic weights every # milliseconds. if btdp is enable it resets : /sim/record/interval /network/btdp/normgsyn = None : Target level to which .... /network/btdp/normn = 4 : strongest normn synapses are normalized, suppressing weaker synapses. /network/btdp/synthr = -0.05 : the threshold below with synapse assumed to be silent same as for /syn/normg : : positive sets the absolute level for the threshold, negative sets a relative to : minimal synaptic conductance for each neuron threshold and None sets all synapses : active /network/btdp/minact = @/network/btdp/normn@ : threshold of minimal number of active connections if the number of active synapses is : below this number - it creates new random synapses. **Note** if : /network/btdp/synthr=None, this mechanism is disabled. /network/btdp/frthr = 0.1 : if max firing rate at given interval /network/btdp/update for any pre or postsyn : below this value, correlations term of leaning rule will not computed. **Note** if : you set it in None, False, or below zero, correlation term will be compute always - : and two silent neurons will have very high correlation and ramp up connections. /network/btdp/frkernel = 25. : kernel for smoothing firing-rate. Effectively, gaussian kernel low-pass frequencies 4 : time lower than kernel size. Butts et al 1999, computed minimal jitter to perturb : spacial information around 100 ms, so ~25ms kernel should be OK. /network/btdp/frsmwidth = @/network/btdp/frkernel@*10. : one-side width of smoothing vector for firing-rate /network/btdp/continue = True : reads last update from record and reset weights /network/home/enable = False : Set it to true to activate homeostasis /network/home/update = 120000. : update synaptic weights every # milliseconds. if btdp is enable it will be set to : /sim/btdp/update if btdp is not enable, /home/update resets /sim/record/interval /network/home/tau = 60000. : homeostasis time constant in ms ~10 sec /network/home/target_fr = 0.5 : Target firing rate in spikes/sec from Murata & Colonnese 2018 Figure 5G1, it should : be ~ 1 spike/sec, but with blocked cortex it decreases ~50% Murata & Colonnese 2016 : Fig 3. /network/home/slope = 1. : sloe slope of activation function is spikes/sec /network/home/gmax = -2. : maximal synaptic conductance (notation is the same as in /network/syn/gsyn) /network/home/gmin = 0.0 : minimal synaptic conductance /network/home/delta = -0.2/111 : increment/decrement of synaptic weights /network/home/continue = True : reads last update from the record and reset weights /network/cx/enable = False : Set it to true for enabling **cortical feedback** /network/cx/delay = 15. : delay for spike travel to cortex and back /network/cx/gsyn = -0.005 : synaptic conductance. ATTENTION! If negative it set ratio to mean RGC input /network/cx/AMPA/p = @/network/syn/AMPA/p@ : portion of AMPA conductance /network/cx/AMPA/tau1 = @/network/syn/AMPA/tau1@ : AMPA rising time constant /network/cx/AMPA/tau2 = @/network/syn/AMPA/tau2@ : AMPA falling time constant /network/cx/NMDA/p = @/network/syn/NMDA/p@ : portion of NMDA conductance /network/cx/NMDA/tau1 = @/network/syn/NMDA/tau1@ : NMDA rising time constant /network/cx/NMDA/tau2 = @/network/syn/NMDA/tau2@ : NMDA falling time constant /network/cx/ppr_u0 = 0.7 : sets presynaptic PP depression /network/trn/enable = False : Set it to true for enabling **TRN inhibitory feedback** /network/trn/delay = 15. : delay for spike travel to TRN and back /network/trn/gsyn = -0.005 : synaptic conductance (same as /syn/gsyn) /network/trn/tau1 = 5. : GABA A rising time constant /network/trn/tau2 = 50. : GABA A falling time constant /network/trn/e = -70. : inhibitory reversal potential /block/gjcon = False : Block gap junction /block/syncon = False : Block synapses /sim/temperature = None : model temperature in celsius, if None it will try to find 'temperature' variable in : the neuron database /sim/Tmax = 600000. : Simulation duration in ms. If negative (any negative number) it defines by : stimulation recording /sim/record/interval = 60000 : record and clean buffers every /sim/record/interval milliseconds /sim/record/file = 'dLGN-record.stkdata' : save everything into this file /sim/record/save = True : enable any recordings /sim/record/spike = True : record spikes /sim/record/gsyn = False : if a number records synaptic weights every n updates, if true records synaptic : weights every update. Works only if btdp or homeostasis are enabled /sim/record/cont/dt = 0.5 : time step for continues recordings /sim/record/cont/cur = False : record currents /sim/record/cont/volt = True : record voltages /sim/record/cont/meancur = True : record current averaged through population /sim/parallel = True : sent number of cores or True for auto-detection /sim/Belly = False : ring the bell when simulation finishes /sim/timestamp = time.strftime("%Y%m%d-%H%M%S") : simulation time-stamp /stim/iapp = None : inject constant current. Current is slowly ramping up first 1000 ms /stim/rGC/file = "../experimentaldata/Maccione2014_P9_29March11_control_SpkTs_bursts_filtered.h5" : reads positions and spikes of RG from this file /stim/rGC/groups = [ 824,825,826,827,828,829,830,831, 849,850,851,852,853,854,855,856, 875,876,877,878,879,880,881,882, 905,906,907,908,909,910 ] : recorded rGC IDs which will be used for network stimulation if more than one neuron : on one electrode spike can be lumped together by putting IDs into tuple : (121,122,123) for example /stim/trecstart = 140000 : remove first milliseconds of the recording. /stim/shuffle = False : Shuffles spikes between electrodes /stim/uniform = False : uniform distribution of the same number of spikes over each electrode /stim/stimfile = None : used npy file with array (n,2) : [spike time,rGC] instead of spikes in the original : hd5 file /stim/poisson = None : Generate Poisson firing rate with given rate /FR/window = 100 : windows size for filtering firing rate /FR/kernel = 50. : Gaussian kernel to smooth FR /FR/kernelwidth = @/FR/kernel@*5 : 1/2 width of smoothing kernel (it is half, because +- boundary). It is set to 5 sigma : If /kernel and /kernelwidthare gaussian kernel is used to smooth 1ms bin histogram, : otherwise histogram with /FR/window will be plotted /FR/CorrDist/positive = 20. : Size of positive Gaussian kernel to smooth firing rate for computing Correlation : distribution /FR/CorrDist/negative = @/FR/CorrDist/positive@*4 : size of negative Gaussian kernel /FR/CorrDist/window = @/FR/CorrDist/negative@*5 : 1/2 of smoothing window size /FR/CorrDist/bins = False : set a number of bins in correlation distribution (must be int); default 201 /FR/CorrDist/left = False : left boundary of histogram range; default -1. /FR/CorrDist/right = False : right boundary of histogram range; default 1. /FR/Spectrum/filter-off = False : set False to remove filtration /FR/Spectrum/Fmax = 39. : Maximal frequency (Hz) /FR/Spectrum/dt = 1. : Histogram bin-size in ms /FR/Spectrum/kernel = 20. : Gaussian kernel to smooth FR (different to from the above to have high frequency : components) /FR/Spectrum/width = @/FR/Spectrum/kernel@*5 : 5 sigma for 1/2 of the window (n /FR/Spectrum/dt time units) /FR/Overall = True : computes overall FR for a run. If string is given, it jsones the list of overall FR : into a file with this name. /Figures/enable = True : if False will not generate figures and exit it will make a DB record only if -m : message is provided and the record won't have figures /Figures/X-term = False : saves all figures into a file with this prefix. If False - shows on screen /Figures/FigSize = (21,16) : XxY size of figures /Figures/FigLimit = None : If any of /sim/record/cont/{cur,volt} is set True, will show every # neuron, and all : if None /Figures/STKDB-Record = True : Add figures into record /Figures/connectivity/flat = False : if True makes 2D plot of connectivity instead of 3D /Figures/disable/connectivity = False : set True to disable connectivity plot /Figures/disable/volt = False : set True to disable voltage plot /Figures/disable/cur = False : set True to disable current plot /Figures/disable/cordist = False : set True to disable correlation distribution plot /Figures/disable/spectrum = False : set True to disable spectrum plot /Figures/disable/2dspiking = True : set False to activate interactive figure which can generates movies /Figures/formats = 'jpg svg'.split() : list of figures formats /analysis/connectivity = True : statistics of RGC to LGN connectivity /analysis/gj = True : statistics of number GJ per neuron ```