Convergence regulates synchronization-dependent AP transfer in feedforward NNs (Sailamul et al 2017)

 Download zip file 
Help downloading and running models
Accession:241979
We study how synchronization-dependent spike transfer can be affected by the structure of convergent feedforward wiring. We implemented computer simulations of model neural networks: a source and a target layer connected with different types of convergent wiring rules. In the Gaussian-Gaussian (GG) model, both the connection probability and the strength are given as Gaussian distribution as a function of spatial distance. In the Uniform-Constant (UC) and Uniform-Exponential (UE) models, the connection probability density is a uniform constant within a certain range, but the connection strength is set as a constant value or an exponentially decaying function, respectively. Then we examined how the spike transfer function is modulated under these conditions, while static or synchronized input patterns were introduced to simulate different levels of feedforward spike synchronization. We observed that the synchronization-dependent modulation of the transfer function appeared noticeably different for each convergence condition. The modulation of the spike transfer function was largest in the UC model, and smallest in the UE model. Our analysis showed that this difference was induced by the different spike weight distributions that was generated from convergent synapses in each model. Our results suggest that the structure of the feedforward convergence is a crucial factor for correlation-dependent spike control, thus must be considered important to understand the mechanism of information transfer in the brain.
Reference:
1 . Sailamul P, Jang J, Paik SB (2017) Synaptic convergence regulates synchronization-dependent spike transfer in feedforward neural networks. J Comput Neurosci 43:189-202 [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Realistic Network; Synapse;
Brain Region(s)/Organism:
Cell Type(s): Hodgkin-Huxley neuron;
Channel(s): I Sodium; I Potassium; I T low threshold; I Cl, leak;
Gap Junctions:
Receptor(s):
Gene(s):
Transmitter(s):
Simulation Environment: NEURON; MATLAB;
Model Concept(s): Synchronization; Oscillations; Action Potentials; Activity Patterns; Information transfer; Synaptic Convergence;
Implementer(s): Sailamul, Pachaya [pachaya_sailamul at brown.edu]; Jang, Jaeson ; Paik, Se-Bum ;
Search NeuronDB for information about:  I T low threshold; I Sodium; I Potassium; I Cl, leak;
% Generate connection from source layer to target layer with three convergence structures
% Gaussian-Gaussian(GG) model, Uniform-Constant (UC), and Uniform-Exponential (UE) models
% Please refer to the text for description of each structure
%%
clc
close all
clear all

%% Heterogeneity testing
HETEROGENEITY = true; % Randomize source cells activity or not
%%
PROP_SPEED = 1000 ; % [um/ms] speed of axonal propagation < 1 m/s >
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Cell position
layer1locTxt = 'Cells_position_source_layer1'; % layer 1 (source layer)
layer2locTxt = 'Cells_position_target_layer2'; % layer 2 (target layer)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Download cell position
[L1pos, L1Distmat, L1nnDist]= GetCellsDistInfo(layer1locTxt, 0); %Source Cell
[L2pos, L2Distmat, L2nnDist]= GetCellsDistInfo(layer2locTxt, 0); %Target Cell
DistMat = pdist2(L1pos,L2pos);

dirFile ='Input/'; % The location to save the connection
mkdir(dirFile)

%%

N_TRIAL = 10; % Any N
for TRIAL = 1:N_TRIAL
rng(TRIAL)
PLOT_FIG = 0;

W_SCALE = 0.00001; % Multiplication of weighting factor (because the exact weight value is really small)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Convergence Conditions
W_LST = [50:10:100]; %List of connection strength parameters
Range_LST = [50:10:100]; %List of connection range parameters
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

saveConn_g = cell(  length(Range_LST),  length(W_LST));     saveConn_u = cell(  length(Range_LST),  length(W_LST));     saveConn_e = cell(  length(Range_LST),  length(W_LST)); %Saved connection info
rw_NumCon_g = zeros(  length(Range_LST),  length(W_LST));     rw_NumCon_s = zeros(  length(Range_LST),  length(W_LST));    % Average number of Connection 
rw_sumW_g = zeros(  length(Range_LST),  length(W_LST));     rw_sumW_u = zeros(  length(Range_LST),  length(W_LST));     rw_sumW_e = zeros(  length(Range_LST),  length(W_LST)); %average summation of connection strength per target cell



for rr = 1 : length(Range_LST)
    for ww = 1 : length(W_LST)
    tt = tic();
    range = Range_LST(rr);
    weight_factor = W_LST(ww);

    %%
    gConnMat = DistMat.*0;  uConnMat = DistMat.*0;  eConnMat = DistMat.*0;
    gW_Mat = DistMat.*0;    uW_Mat = DistMat.*0;    eW_Mat = DistMat.*0;
    gDelay_Mat = DistMat.*0;    uDelay_Mat = DistMat.*0;    eDelay_Mat = DistMat.*0;
    Pmax = 0.85;

    SumConnectivity_g =  zeros( length(L2pos), 1);
    NumConnection_g = zeros( length(L2pos), 1);

    SumConnectivity_s =  zeros( length(L2pos), 1);
    NumConnection_s = zeros( length(L2pos), 1);

    SumTotalConnStrength_g =  zeros( length(L2pos), 1);
    SumTotalConnStrength_u =  zeros( length(L2pos), 1);
    SumTotalConnStrength_e =  zeros( length(L2pos), 1);

    SumConnStrength_g =  zeros( length(L2pos), 1);
    SumConnStrength_u =  zeros( length(L2pos), 1);
    SumConnStrength_e =  zeros( length(L2pos), 1);

    % Note : For Volume comparison , take summation values of all the cells
    % within range before make connection. This way, it's the closest to the
    % real volumn

    for l2_ID = 1 : length(L2pos) % for each cell in layer 2 (target layer)
        %%% only the cells within range
        potentialLayer1 = find(DistMat(:,l2_ID) <= range*3 ); % Cells that located within range

        %%% Convergent Connection Rule 1
    %     disp('--------------------- G-G ---------------------');
        % ############## Connectivity : Gaussian Distribution
        pp = func_gauss(Pmax, DistMat(potentialLayer1,l2_ID),range);
        xx = rand(size(pp));
        tmpVec_g =  xx < pp; sumProb = sum(pp); 
        tmpConnID = potentialLayer1(tmpVec_g);
        if isempty(tmpConnID) % check the case that there is no connection(xx > pp)
            continue
        end
        nCon_of_g = length(tmpConnID); 

        % Volume Comparison
        SumConnectivity_g(l2_ID) =  sumProb;
        NumConnection_g(l2_ID) = nCon_of_g;

        % Recorded Connection
        gConnMat(tmpConnID,l2_ID) = 1; % 1 = connection exist, 0 = no connection;    
        gDelay_Mat(tmpConnID,l2_ID) = DistMat(tmpConnID, l2_ID)./PROP_SPEED;

        % ############## Connection Strength : Gaussian Distribution
        tmpW = func_gauss(weight_factor*W_SCALE, DistMat(potentialLayer1, l2_ID),range); %for all possible connection within range 
        WforConnectedCells =  tmpW(tmpVec_g);    

        %Volume Comparison
        SumTotalConnStrength_g(l2_ID) = sum(tmpW);
        SumConnStrength_g(l2_ID) =  sum(WforConnectedCells);

        % Recorded Connection Strength
        gW_Mat(tmpConnID,l2_ID) = WforConnectedCells;


    %     disp('--------------------- Uniform Connectivity in U-C and U-E ---------------------');
        %%% Convergent Connection Rule 2 and 3 use the same kind of
        %%% connectivity = Uniform connection from uniform distribution (constant connection)  ----> Make Connectivity first

        % ############## Connectivity : Uniform Distribution
        pGauss = sumProb; % From Gaussian
        pp_s = ones(size(potentialLayer1)).*(pGauss / length(potentialLayer1)); % Average weight per one L1 cell
        xx = rand(size(pp_s));  sumProb_s = sum(pp_s); 
        tmpVec_s =  xx < pp_s;  
        tmpConnID_s = potentialLayer1(tmpVec_s);   
        nCon_of_s = length(tmpConnID_s); 

        % Volume Comparison
        SumConnectivity_s(l2_ID) =  sumProb_s;
        NumConnection_s(l2_ID) = nCon_of_s;

        % Recorded Connection
        % U-C
        uConnMat(tmpConnID_s,l2_ID) = 1; % 1 = connection exist, 0 = no connection;    
        uDelay_Mat(tmpConnID_s,l2_ID) = DistMat(tmpConnID_s, l2_ID)./PROP_SPEED;
        % U-E
        eConnMat(tmpConnID_s,l2_ID) = 1; % 1 = connection exist, 0 = no connection;    
        eDelay_Mat(tmpConnID_s,l2_ID) = DistMat(tmpConnID_s, l2_ID)./PROP_SPEED;


        %%% Convergent Connection Rule 2 : Connectivity - Uniform , Strength - Uniform
    %     disp('-----------------------U-C ---------------------');

        % ############## Connection Strength : Uniform Distribution
        % (Constant)
        wGauss = SumConnStrength_g(l2_ID);% The possible weight in Gaussian 
        avgW = wGauss ./ length(tmpConnID_s); 
        tmpW = ones(size(tmpConnID_s)).*avgW;
        WforConnectedCells_u = tmpW; %  % For Uniform distribution

        %Volume Comparison
        SumTotalConnStrength_u(l2_ID) = sum(tmpW);
        SumConnStrength_u(l2_ID) =  sum(WforConnectedCells_u);

        % Recorded Connection Strength
        uW_Mat(tmpConnID_s,l2_ID) = WforConnectedCells_u;

        %%% Convergent Connection Rule 3 : Connectivity - Uniform , Strength -
        %%% Negative Exponential
    %     disp('-----------------------U-E ---------------------');

        % ############## Connection Strength : Exponential Distribution
        wGauss = SumConnStrength_g(l2_ID);% The possible weight in Gaussian 
        avgW = wGauss./ length(tmpConnID_s); 
        tmpW = exprnd(avgW, size(tmpConnID_s));

        % control sum W to be same 
        tmpW = tmpW.* wGauss./ sum(tmpW); % already checked that distribution of tmpW is same before and after normalized
        WforConnectedCells_e = tmpW;%( tmpVec_s);  % For Exponential distribution
            
        %Volume Comparison
        SumTotalConnStrength_e(l2_ID) = sum(tmpW);
        SumConnStrength_e(l2_ID) =  sum(WforConnectedCells_e);

        % Recorded Connection Strength
        eW_Mat(tmpConnID_s,l2_ID) = WforConnectedCells_e;  


    if(l2_ID == 1)&&(PLOT_FIG) %plot
        figure; set(gcf,'position',[  350         380        1369         420]);
        subplot(131); hist(WforConnectedCells); title(['Gaussian, sum W =' num2str(sum(WforConnectedCells)) ]);
        subplot(132); hist(WforConnectedCells_u); title(['Uniform, sum W =' num2str(sum(WforConnectedCells_u)) ]);
        subplot(133); hist(WforConnectedCells_e); title(['Exponential, sum W =' num2str(sum(WforConnectedCells_e)) ]);
        suptitle('Distribution of weight in one layer2 cell (one cell example)');
    end

    end

    if(PLOT_FIG)
    % Connectivity
    figure; set(gcf,'position',[   657   384   712   420]);
    subplot(121); hist(SumConnectivity_g); title(['Gaussian, mean =' num2str(mean(SumConnectivity_g)) ]); 
    subplot(122); hist(SumConnectivity_s); title(['Uniform, mean =' num2str(mean(SumConnectivity_s)) ]); 
    suptitle('Average sum of connectivity of all cells within range (= Volume of Connectivity)');


    figure; set(gcf,'position',[  657   384   712   420]);
    subplot(121); hist(NumConnection_g); title(['Gaussian, mean =' num2str(mean(NumConnection_g)) ]); 
    subplot(122); hist(NumConnection_s); title(['Uniform, mean =' num2str(mean(NumConnection_s)) ]); 
    suptitle('Average Number of Connection');

    %Connection Strength
    figure; set(gcf,'position',[  350         380        1369         420]);
    subplot(131); hist(SumTotalConnStrength_g); title(['Gaussian, mean =' num2str(mean(SumTotalConnStrength_g)) ]); 
    subplot(132); hist(SumTotalConnStrength_u); title(['Uniform, mean =' num2str(mean(SumTotalConnStrength_u)) ]); 
    subplot(133); hist(SumTotalConnStrength_e); title(['Exponential, mean =' num2str(mean(SumTotalConnStrength_e)) ]); 
    suptitle('Average Total W of all possible connection within range (= Volume of Connection Strength)');

    figure; set(gcf,'position',[  350         380        1369         420]);
    subplot(131); hist(SumConnStrength_g); title(['Gaussian, mean =' num2str(mean(SumConnStrength_g)) ]); 
    subplot(132); hist(SumConnStrength_u); title(['Uniform, mean =' num2str(mean(SumConnStrength_u)) ]); 
    subplot(133); hist(SumConnStrength_e); title(['Exponential, mean =' num2str(mean(SumConnStrength_e)) ]); 
    suptitle('Average summation of effective strength ( strength of connected cells)');
    end

    %save
    tmpStruct.Conn_Mat = sparse(gConnMat);   tmpStruct.W_Mat = sparse(gW_Mat);  tmpStruct.Delay_Mat = sparse(gDelay_Mat); 
    saveConn_g{rr,ww} = tmpStruct;

    tmpStruct.Conn_Mat = sparse(uConnMat);   tmpStruct.W_Mat = sparse(uW_Mat);  tmpStruct.Delay_Mat = sparse(uDelay_Mat); 
    saveConn_u{rr,ww} = tmpStruct;

    tmpStruct.Conn_Mat = sparse(eConnMat);   tmpStruct.W_Mat = sparse(eW_Mat);  tmpStruct.Delay_Mat = sparse(eDelay_Mat); 
    saveConn_e{rr,ww} = tmpStruct;

    % G-G
    [i,j,val] = find(gConnMat);
    conn_list = zeros(length(val), 4);
    cnt = 0;
    for  m = 1: length(i)
            cnt = cnt + 1; 
            conn_list(cnt,:) =[i(m)-1 j(m)-1 gW_Mat(i(m),j(m)) gDelay_Mat(i(m),j(m))];
    end
        
    %Save to file
    fname = sprintf('ConvergentInput_GG_Wscale%.5f_W%g_range%g_Trial%g.txt', W_SCALE, weight_factor, range, TRIAL);
    fid = fopen([dirFile fname],'w');
    fprintf( fid,'%d %d \n', size(conn_list,1),  size(gW_Mat,1)); % Total number of Conn , Total number of cells in Layer1 
    fprintf( fid,'%d %d %1.9f %g\n', conn_list' ); % SourceID TargetID Weight Delay
    fclose(fid);

    % U-C
    [i,j,val] = find(uConnMat);
    conn_list = zeros(length(val), 4);
    cnt = 0;
    for  m = 1: length(i)
            cnt = cnt + 1; 
            conn_list(cnt,:) =[i(m)-1 j(m)-1 uW_Mat(i(m),j(m)) uDelay_Mat(i(m),j(m))];
    end

    %Save to file
    fname = sprintf('ConvergentInput_UC_Wscale%.5f_W%g_range%g_Trial%g.txt', W_SCALE, weight_factor, range, TRIAL);
    fid = fopen([dirFile fname],'w');
    fprintf( fid,'%d %d \n', size(conn_list,1),  size(uW_Mat,1)); % Total number of Conn , Total number of cells in Layer1 
    fprintf( fid,'%d %d %1.9f %g\n', conn_list' ); % SourceID TargetID Weight Delay
    fclose(fid);


    % U-E
    [i,j,val] = find(eConnMat);
    conn_list = zeros(length(val), 4);
    cnt = 0;
    for  m = 1: length(i)
            cnt = cnt + 1; 
            conn_list(cnt,:) =[i(m)-1 j(m)-1 eW_Mat(i(m),j(m)) eDelay_Mat(i(m),j(m))];
    end
     
    %Save to file
    fname = sprintf('ConvergentInput_UE_Wscale%.5f_W%g_range%g_Trial%g.txt', W_SCALE, weight_factor, range, TRIAL);
    fid = fopen([dirFile fname],'w');
    fprintf( fid,'%d %d \n', size(conn_list,1),  size(eW_Mat,1)); % Total number of Conn , Total number of cells in Layer1 
    fprintf( fid,'%d %d %1.9f %g\n', conn_list' ); % SourceID TargetID Weight Delay
    fclose(fid);

    rw_NumCon_g(rr,ww) = mean(NumConnection_g);  rw_NumCon_s(rr,ww) = mean(NumConnection_s); 
    rw_sumW_g(rr,ww) = mean(SumConnStrength_g); rw_sumW_u(rr,ww) = mean(SumConnStrength_u);  rw_sumW_e(rr,ww) = mean(SumConnStrength_e); 

    % Report
    disp('==================================================================================================');
    disp(['Done :: range = ' num2str(range) ', weight factor = ' num2str(weight_factor) ])
    disp(['Average Number of Connection::: Gaussian ' num2str(mean(NumConnection_g)) ', Uniform' num2str(mean(NumConnection_s)) ])
    disp(['Average summation of effective strength::: G-G = ' num2str(mean(SumConnStrength_g)) ', U-C = ' num2str(mean(SumConnStrength_u)) ', U-E = ' num2str(mean(SumConnStrength_e))])
    toc(tt)
    disp('==================================================================================================');

    end
end


%% SAVE sim data
save([dirFile 'NewGennConn_r' num2str(Range_LST(1)) '_' num2str(Range_LST(length(Range_LST))) '_w_' num2str(W_LST(1)) '_' num2str(W_LST(length(W_LST)))  '_trial' num2str(TRIAL) '_'  date '.mat'],'saveConn_g','saveConn_u','saveConn_e','W_LST','Range_LST','-v7.3');
disp('Save')
disp(['Trial = ' num2str(TRIAL)]);
end

% If want to test the cases where phase of source cells are random, hence
% non-homogeneous source layer
if (HETEROGENEITY)
    GenPhase_random_cntrl
end

Loading data, please wait...