CA1 pyramidal: Stochastic amplification of KCa in Ca2+ microdomains (Stanley et al. 2011)

 Download zip file 
Help downloading and running models
This minimal model investigates stochastic amplification of calcium-activated potassium (KCa) currents. Amplification results from calcium being released in short high amplitude pulses associated with the stochastic gating of calcium channels in microdomains. This model predicts that such pulsed release of calcium significantly increases subthreshold SK2 currents above what would be produced by standard deterministic models. However, there is little effect on a simple sAHP current kinetic scheme. This suggests that calcium stochasticity and microdomains should be considered when modeling certain KCa currents near subthreshold conditions.
1 . Stanley DA, Bardakjian BL, Spano ML, Ditto WL (2011) Stochastic amplification of calcium-activated potassium currents in Ca2+ microdomains. J Comput Neurosci 31:647-66 [PubMed]
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Neuron or other electrically excitable cell;
Brain Region(s)/Organism: Hippocampus;
Cell Type(s): Hippocampus CA1 pyramidal GLU cell;
Channel(s): I K,Ca; I_AHP;
Gap Junctions:
Gene(s): KCa2.2 KCNN2;
Simulation Environment: MATLAB;
Model Concept(s): Ion Channel Kinetics; Active Dendrites; Detailed Neuronal Models; Calcium dynamics; Noise Sensitivity; Markov-type model;
Implementer(s): Stanley, David A ;
Search NeuronDB for information about:  Hippocampus CA1 pyramidal GLU cell; I K,Ca; I_AHP;

% Matlab 2008b
% David Arthur Stanley
% Arizona State University, Feb 28, 2011

% Units:
	% Time is measured in seconds
	% Calcium concentration is measured in Mols
	% Channel activation is given in probabilities, with 1.0 being open.

clc; clear all;
resimulate = 1;

if set_values && resimulate
    plot_on = 1;    % Turns plotting on or off - useful to turn it off when using a script
    plot_raw = 1;   % Plot raw time series data
    plot_PSD = 0;   % Plot power spectral density (not yet implemented)
    plot_meanbar = 1; % Plot a bar graph of standard deviations
    exps_to_plot=[0];   % Leave this as default. This is used when embedding plot_struct within a larger script file
                        % to enable multiple subsets of scalingfactors to be run

    plot_across_experiments = 1;    % Plot one channel type under many different pulse protocols
        scalingfactors = [1 2 4 8 16 32 64 128]; % Scaling factor for calcium pulse height (p.Ca_level, defined below) is scaled by each of these values.
        								% Briefly, the calcium signal associated with scalingfactors=[1] is fixed at p.Ca_level (default 75nM).
       									% The calcium signal for scalingfactors=[2] is a 14msec pulse of height 150nM, followed by
       									% 14msec when calcium is zero. This preserves the mean Ca level at 75nM. Similarly for scalingfactors > 2.
        channel_list= {'hill2s','vTau2s','sAHP5s','sAHP6s','SK2_6s','SK2h_6s'}; % List of possible channels we have implemented
        exp_channel=channel_list{5};   % Channel name to plot; #5 is SK2 (in sLPo state)
        plot_theory = 0; % Plot analytical curves, rather than those calculated numerically (not implemented for all channels)


% % % Period, duty cycle of Ca, and total sim time

p.period_scale = 1.0;   % Scale the period of the pulse protocol (time-scales the input signal by this value)
p.rate_scale = 1;       % Scale the rate constants of the channel by this value
p.ti = 0;               % Simulation start time (seconds) = 10;               % Simulation stop time (default=180 sec, very slow)

p.per = 0.014;           % Period of the default pulse protocol (seconds)
p.dc = 1.0;             % Duty cycle of the defualt pulse
p.Ca_level = 75e-9;     % Pulse height (default)
p.per = p.per*p.period_scale;   % Implement period scale = * p.period_scale;   % Implement period scale
p.stats_start = 3.1;            % Settling time to wait before calculating stats. Should be adjusted depending on settling time of channel

for i = scalingfactors
    p.factor = i;       % Sets the factor by which to scale pulse height and total pulse length
    if resimulate; [tempdat2{i}, p] = exp_build(p,exp_channel); end
    tempdat2{i} = exp_stats(p,tempdat2{i});

% Plot single channel, multiple experiments
for jj = exps_to_plot
    if plot_across_experiments
        scalingfactors = [(scalingfactors+jj)];
        col_num = find_columns( tempdat2{scalingfactors(1)}.column_names,{exp_channel}); col_numstr=num2str(col_num);
        titlestr = strrep (tempdat2{scalingfactors(1)}.column_names{col_num},'_',' ');
        if plot_raw
            [plotmat leg_arr]= struct2matrix({tempdat2{scalingfactors}},['column{' col_numstr '}.data'], 'varname');
            if plot_theory; [plotmat_theory leg_arr]= struct2matrix({tempdat2{scalingfactors}},['column{' col_numstr '}.theory.y'], 'varname'); end
            t = tempdat2{scalingfactors(1)}.column{col_num}.datatimes;
            if plot_theory; t_theory = tempdat2{scalingfactors(1)}.column{col_num}.theory.t; end
            clear pso; pso.shift = -0.0e-11; pso.ds=1; pso.zero_means=0;
            if plot_on;
                plot_matrix (t, plotmat, pso, leg_arr);
                if plot_theory; hold on; plot_matrix(t_theory, plotmat_theory, pso); end
                title (['Plotting ' titlestr]);
                ylabel('Open probability');
        if plot_PSD
            [plotmat leg_arr]= struct2matrix({tempdat2{scalingfactors}},['column{' col_numstr '}.fft.psd'], 'varname');
    %         plotmat=abs(plotmat).^2;
            f = tempdat2{scalingfactors(1)}.column{col_num}.fft.f;
            clear pso; pso.plotloglog=1;
            if plot_on; figure; plot_matrix (f, plotmat, pso, leg_arr); title (['Plotting ' titlestr]); end
        if plot_meanbar
            [plotmat leg_arr] = struct2matrix({tempdat2{scalingfactors}},['column{' col_numstr '}.' statsdata_val],'varname');
            [plotmat_err leg_arr] = struct2matrix({tempdat2{scalingfactors}},['column{' col_numstr '}.' statsdata_err],'varname');
            if strcmp(tempdat2{scalingfactors(1)}.column_names{col_num},'vTau2s')
                [plotmat2 leg_arr] = struct2matrix({tempdat2{scalingfactors}},['column{' col_numstr '}.statsdata.theoreticalmean'],'varname');
            if plot_on; figure; plot_bar([plotmat'], plotmat_err', leg_arr); title (['Plotting ' titlestr]); xlabel('Pulse scaling factor'); ylabel('Mean open probability'); end