https://github.com/PerezOrtegaJ/Neural_Ensemble_Analysis
Raw File
Tip revision: 9d37fd031dfbdb4eb69faa449d0a6416267a7d4f authored by Jesús Pérez on 28 July 2020, 20:36:58 UTC
Update README.md
Tip revision: 9d37fd0
Get_Relevant_Coactivations.m
function [relevant,cleanedRaster,relevantFraction,spikesFractionRemoved,similarity,treeID,vectorID] =...
    Get_Relevant_Coactivations(raster,net,distanceTh)
% Get the relevant coactivations based on funtional connections
% (trick to reduce the noisy vectors to better extract neuronal ensembles)
%
%       [relevant,cleanedRaster,relevantFraction,spikesFractionRemoved,similarity,treeID,vectorID] =
%    Get_Relevant_Coactivations(raster,net,distanceTh)
%
% By Jesus Perez-Ortega, Dec 2019
% Modified May 2020
% Modified Jun 2020

% Remove noisy spikes based on functional connections
disp('   Removing noisy spikes...')
[cleanedRaster,spikesFractionRemoved] = Remove_Noisy_Spikes(raster,net);
%nonNoisyRaster = raster;

% Detect coactivations above 2 active neurons
disp('   Finding coactivation peaks...')
vectorID = Find_Peaks_Or_Valleys(sum(cleanedRaster),2,false);

if nnz(vectorID)>1
    neuronalVectors = Get_Peak_Vectors(cleanedRaster,vectorID,'binary');
    nCoactive = nnz(sum(raster)>2);
    nPeaks = max(vectorID);
    disp(['   ' num2str(nPeaks) '/' num2str(nCoactive) '(' num2str(nPeaks/nCoactive*100) '%) >2 coactive cells'])

    % Get the hierarchichal clustering
    disp(['   Get relevant coactivity vectors (>' num2str(1-distanceTh) ' jaccard similarity in dendrogram tree)...'])
    similarity = Get_Peaks_Similarity(neuronalVectors,'jaccard');
    tree = linkage(squareform(1-similarity,'tovector'),'single');

    % Get id from dendrogram
    figure; [~,~,treeID] = dendrogram(tree,0); close

    % Find the limit to consider relevant given a threshold
    limit = find(tree(:,3)>distanceTh,1,'first')-1;
    if isempty(limit)
        relevant = vectorID>0;
    else
        relevant = zeros(size(vectorID));
        for i = 1:limit
            relevant(vectorID==treeID(i)) = 1;
        end
    end

    nRelevant = nnz(relevant);
    relevantFraction = nRelevant/nCoactive;
    disp(['   ' num2str(nRelevant) '/' num2str(nCoactive) '(' num2str(relevantFraction*100) '%) relevant'])
else
    relevant = [];
    treeID = [];
    relevantFraction = [];
    similarity = [];
    warning('   There are less than 2 relevant coactive vectors!')
end
back to top