Hotspots of dendritic spine turnover facilitates new spines and NN sparsity (Frank et al 2018)

 Download zip file 
Help downloading and running models
Accession:227087
Model for the following publication: Adam C. Frank, Shan Huang, Miou Zhou, Amos Gdalyahu, George Kastellakis, Panayiota Poirazi, Tawnie K. Silva, Ximiao Wen, Joshua T. Trachtenberg, and Alcino J. Silva Hotspots of Dendritic Spine Turnover Facilitate Learning-related Clustered Spine Addition and Network Sparsity
Reference:
1 . Frank AC, Huang S, Zhou M, Gdalyahu A, Kastellakis G, Silva TK, Lu E, Wen X, Poirazi P, Trachtenberg JT, Silva AJ (2018) Hotspots of dendritic spine turnover facilitate clustered spine addition and learning and memory. Nat Commun 9:422 [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; Connectionist Network;
Brain Region(s)/Organism:
Cell Type(s): Abstract integrate-and-fire leaky neuron with dendritic subunits;
Channel(s):
Gap Junctions:
Receptor(s): NMDA;
Gene(s):
Transmitter(s):
Simulation Environment: C or C++ program; MATLAB;
Model Concept(s): Active Dendrites; Synaptic Plasticity;
Implementer(s): Kastellakis, George [gkastel at gmail.com];
Search NeuronDB for information about:  NMDA;
/
tomodel
data
distributionPlot
exportfig
fig
figs
mtrand
README
.exrc *
an_m_to.m
an_to.m
barwitherr.m *
btagstats.m *
CImg.h *
constructs. *
constructs.cpp *
constructs.h
csvgraph.m
defaults.m
dir2.m *
gconstructs.cpp *
getspikedata.m *
getsynstate.m *
getsynstate2.m *
graphs.m *
hist_percents.m *
hist_with_errs.m *
interact.m *
kurtos.m *
lamodel
lamodel.cpp
LICENSE *
make_graphs.m *
Makefile *
matlab.mat *
mtrand.cpp *
mtrand.h *
multistats.m *
nextplot.m *
pairstrong.m *
repeated.m *
rotateXLabels.m *
run_to.sh
S2sparse.m *
savefig.m *
scratch.m *
sensitivity.m *
stats.m *
stats.py *
stderr.m *
strong2.m *
strongstrong.m *
submit_lamodel.sh *
three.m *
to.cpp
trevrolls.m *
vis.py *
weastrong.m *
wxglmodel *
wxglmodel.cpp *
wxglmodel.h *
wxmodel.cpp *
wxmodel.h *
                            
defaults


nruns =10
all = {};

all_ff = {};
all_ff_err = {};

all_br = {};

all_brturn = {};
all_brnoturn = {};

all_sparse = {};
all_sparse_err = {};

all_pops = {};
all_pops_err = {};


all_ovl = {};
all_ovl_err = {};

all_clusters = {};
all_clusters_err = {};
close all

Conditions = {'10CAP'}
LorG='L';

Turnovers = {0,5,10,15,20};
Patterns = {20};

ninputs=240
%ninputs = 100
npyrs=240


for NCOND=1:length(Conditions)
    CONDITION=Conditions{NCOND}
    
    ss1 = zeros(5, 190);
    
    for NBT=1:length(Turnovers)
        BT=Turnovers{NBT}
        
        
        for NPAT=1:length(Patterns)
            PAT=Patterns{NPAT}
            
            npatterns=PAT
            spks = zeros(npatterns, nruns);
            pops = zeros(npatterns, nruns);
            sparse = zeros(npatterns, nruns);
            
            branch_syns = zeros(npyrs*nbranches, nruns);
            br_hists = zeros(ninputs, 12, nruns);
            clustering = zeros(ninputs, nruns);
            brstrengths = zeros(ninputs, npyrs*nbranches);
            
            brweights = zeros(ninputs, npyrs*nbranches, nruns);
            nrnweights = zeros(ninputs, npyrs, nruns);
            brweightcors = zeros(ninputs, ninputs, nruns);
            brsyncors= zeros(ninputs, ninputs, nruns);
            nrnweightcors = zeros(ninputs, ninputs, nruns);
            
            brcommon = zeros(ninputs, ninputs, nruns);
            
            
            clust_all = {};
            clust_all = cell(9,1);
            
            ISI=120;
            
            bsyns_turn = zeros(npyrs*nbranches, nruns);
            bsyns_noturn = zeros(npyrs*nbranches, nruns);
            
            av = [];

            clusters = [];
            for run = 1:nruns
                
                fn = sprintf('./data/%s%d_0%s_%d_%d/spikesperpattern.dat', CONDITION, PAT, LorG, BT,run-1)
                spk = load( fn);
                
                recallspikes = spk(:, 1:npyrs)/(stimduration/1000);
                pop = recallspikes>CUTOFF; %Hz
                
                spks(:, run) = sum(recallspikes,2);
                
                pops(:,  run) = sum(pop,2);
                

                for npat=1:npatterns-1
                    av(end+1) = sum(pop(npat,:)&pop(npat+1,:));
                end
                
                
                
                for npat=1:npatterns
                    sparse(npat,  run) = trevrolls(recallspikes(npat,:) );

                end
                
                ff = sprintf('./data/%s%d_0%s_%d_%d/synstate.dat', CONDITION, PAT,LorG, BT,run-1);
                ss = load(ff);
                
                for i=1:size(ss,1)
                    bid=ss(i,2);
                    nid=ss(i,3);
                    srcid=ss(i,5);
                    bstrength = ss(i,6);
                    w=ss(i,7);
                    if (srcid >= 0 && bid <= npyrs*nbranches)
                        brweights(srcid+1, bid+1, run) = brweights(srcid+1, bid+1, run) + w;
                        brstrengths(srcid+1, bid+1)=bstrength;
                        nrnweights(srcid+1, nid+1,run) = nrnweights(srcid+1, nid+1,run) + w;
                    end
                    if (srcid >= 0 && bid <= npyrs*nbranches &&  w > 0.7)
                        branch_syns( bid+1, run) = branch_syns( bid+1, run)+1;
                        
                        branchid = mod(bid, nbranches);
                        
                        if (branchid < BT)
                            bsyns_turn(bid+1, run) = bsyns_turn(bid+1, run)+1;
                        else
                            bsyns_noturn(bid+1, run) = bsyns_noturn(bid+1, run)+1;
                        end
                        
                    end
                end
                clusters(end+1) = sum(branch_syns( :, run)>2)/length(branch_syns);
            end
            
            
            all_brturn{ NBT} = bsyns_turn;
            all_brnoturn{ NBT} = bsyns_noturn;
            all_br{NBT} = branch_syns;

            m_p = mean(pops, 2);
            s_p = stderr(pops' )';

            all_pops{NBT} = m_p;
            all_pops_err{NBT} = s_p;

            m_p = mean(spks, 2);
            s_p = stderr(spks' )';

            all_ff{NBT} = m_p/npyrs;
            all_ff_err{NBT} = s_p/npyrs;


            m_p = mean(sparse, 2);
            s_p = stderr(sparse')';

            all_sparse{ NBT} = m_p;
            all_sparse_err{ NBT} = s_p;
            
            
            m_p = mean(av);
            s_p = stderr(av);
            
            ss1(NBT, :) = av';
            
            all_ovl{ NBT} = m_p;
            all_ovl_err{ NBT} = s_p;
            
            m_p = mean(clusters);
            s_p = stderr(clusters);
            
            all_clusters{ NBT} = m_p;
            all_clusters_err{ NBT} = s_p;
        end
        
    end
    
end

% 
% figure()
% z = [];
% 
% for y=1:length(Turnovers)
%     
%     z(:,y) = all_ff{1, y};
% end
% mesh(z)
% tit='FF'
% title(tit);
% export_fig(sprintf('./figs/%s_mesh_%s.pdf',CONDITION, tit), '-transparent')
close all
figure;
hold on
mat  = cell2mat(all_sparse);
mat_err  = cell2mat(all_sparse_err);
errorbar( flipud(mat(:,1)), flipud(mat_err(:,1)), 'r');
errorbar( flipud(mat(:,3)), flipud(mat_err(:,3)), 'b');
errorbar( flipud(mat(:,5)), flipud(mat_err(:,5)), 'g');
legend( 'No turnover', 'Half dendrites', 'All dendrites');
%set(gca, 'XTick', [1:5])
%set(gca, 'XTickLabel', Patterns)
%ylim([.4, .8]);
%title(sprintf('%s', CONDITION));
xlabel('Age of memory (days)');
ylabel('Active Population Sparsity');
export_fig(sprintf('./figs/%s_%d_SPARSE%s.pdf',CONDITION, PAT, LorG), '-transparent');


figure;
hold on
mat  = cell2mat(all_pops)*100/npyrs;
mat_err  = cell2mat(all_pops_err)*100/npyrs;
errorbar( flipud(mat(:,1)), flipud(mat_err(:,1)), 'r');
errorbar( flipud(mat(:,3)), flipud(mat_err(:,3)), 'b');
errorbar( flipud(mat(:,5)), flipud(mat_err(:,5)), 'g');
legend( 'No turnover', 'Half dendrites', 'All dendrites');
%set(gca, 'XTick', [1:5])
%set(gca, 'XTickLabel', Patterns)
ylim([15, 65]);
%title(sprintf('%s', CONDITION));
xlabel('Age of memory (days)');
ylabel('Active Population (%)');
export_fig(sprintf('./figs/%s_%d_POPS%s.pdf',CONDITION, PAT,LorG), '-transparent');


figure;
hold on
mat  = cell2mat(all_ff);
mat_err  = cell2mat(all_ff_err);
errorbar( flipud(mat(:,1)), flipud(mat_err(:,1)), 'r');
errorbar( flipud(mat(:,3)), flipud(mat_err(:,3)), 'b');
errorbar( flipud(mat(:,5)), flipud(mat_err(:,5)), 'g');
legend( 'No turnover', 'Half dendrites', 'All dendrites');
%set(gca, 'XTick', [1:5])
%set(gca, 'XTickLabel', Patterns)
%ylim([.4, 1]);
%ylim([5, 40]);
%title(sprintf('%s', CONDITION));
xlabel('Age of memory (days)');
ylabel('Avg Firing Rate (Hz)');

export_fig(sprintf('./figs/%s_%d_FF%s.pdf',CONDITION, PAT,LorG), '-transparent');



figure;
hold on
mat  = cell2mat(all_clusters);
mat_err  = cell2mat(all_clusters_err);
errorbar( fliplr(mat)*100, fliplr(mat_err)*100, 'b');
hold off;
	set(gca, 'XTick', [1:5])
	set(gca, 'XTickLabel', [0:5:20])
%ylim([.4, 1]);
%%title(sprintf('%s', CONDITION));
xlabel('Number of Dendrites with turnover');
ylabel('Branches with clusters (%)');
export_fig(sprintf('./figs/%s_%d_CLUST%s.pdf',CONDITION, PAT,LorG), '-transparent');
csvwrite(sprintf('./figs/%s_%d_CLUST%s.csv',CONDITION, PAT,LorG), [fliplr(mat)*100; fliplr(mat_err)*100] )


figure;
hold on
mat  = cell2mat(all_ovl)*100/npyrs;
mat_err  = cell2mat(all_ovl_err)*100/npyrs;
errorbar( (mat), (mat_err), 'b');
hold off;
	set(gca, 'XTick', [1:5])
	set(gca, 'XTickLabel', [0:5:20])
%ylim([.4, 1]);
%%title(sprintf('%s', CONDITION));
xlabel('Number of Dendrites with turnover');
ylabel('Avg population overlap (%)');
export_fig(sprintf('./figs/%s_%d_OVL%s.pdf',CONDITION, PAT,LorG), '-transparent');
csvwrite(sprintf('./figs/%s_%d_OVL%s.csv',CONDITION, PAT,LorG), [mat; mat_err] )




mat  = cell2mat(all_sparse);
csvwrite(sprintf('./figs/%s_%d_SPAR%s.csv',CONDITION, PAT,LorG), mat)

%errorbar( mean(mat), stderr(mat), 'r');

%legend( 'No turnover', 'Half dendrites', 'All dendrites');
%set(gca, 'XTick', [1:5])
%set(gca, 'XTickLabel', Patterns)
%ylim([.4, .8]);
%title(sprintf('%s', CONDITION));
%xlabel('Age of memory (days)');
%ylabel('Active Population Sparsity');
%export_fig(sprintf('./figs/%s_SPARSE.pdf',CONDITION), '-transparent');