From 0e26503a10a92b64b63c058fc51670f723d0dd2f Mon Sep 17 00:00:00 2001 From: lkaraba Date: Tue, 14 Apr 2026 16:35:35 -0400 Subject: [PATCH] remove dependency on saved spikes files --- BARRs/BARR_PSTH.m | 302 ++++++++++++++++---------------------- BARRs/detectBARR.m | 19 ++- BARRs/pullSpikes.m | 132 +++-------------- BARRs/unitsForDetection.m | 8 +- 4 files changed, 159 insertions(+), 302 deletions(-) diff --git a/BARRs/BARR_PSTH.m b/BARRs/BARR_PSTH.m index b386acf..a7dda0d 100644 --- a/BARRs/BARR_PSTH.m +++ b/BARRs/BARR_PSTH.m @@ -154,40 +154,8 @@ function BARR_PSTH(plotSave,useState) %% PSTH -tempUseReg = unique(cell_metrics.brainRegion); -regions = []; tuC = 1; y1 = 0; y2 = 0; y3=0; -for i = 1:length(tempUseReg) - if contains(convertCharsToStrings(tempUseReg{i}),"CA1") - if ~y1 - regions{tuC} = "CA1"; - tuC = tuC+1; y1 = 1; - end - elseif contains(convertCharsToStrings(tempUseReg{i}),"CA2") - if (~y2) - regions{tuC} = "CA2"; - tuC = tuC+1; y2 = 1; - end - elseif contains(convertCharsToStrings(tempUseReg{i}),"CA3") - if (~y3) - regions{tuC} = "CA3"; - tuC = tuC+1; y3 = 1; - end - else - regions{tuC} = convertCharsToStrings(tempUseReg{i}); - tuC = tuC+1; - end -end - -check = ["CA1" "CA2" "CA3" "CTX" "DG" "MEC" "LEC"]; -regTot = 0; -for i = 1:length(check) - for j = 1:length(regions) - regCheck = regions{j}; - if contains(regCheck,check(i)) - regTot = regTot+1; - end - end -end +useReg = pullSpikes(basepath); +regTot = size(useReg,2); if (~isfield(cell_metrics.tags,'Pb'))&&(~isfield(cell_metrics.tags,'Nb'))&&(~isfield(cell_metrics.tags,'Pr'))&&(~isfield(cell_metrics.tags,'Nr')) runTags = 1; @@ -210,168 +178,146 @@ function BARR_PSTH(plotSave,useState) end subNum = 1; -for i = 1:length(check) - for j=1:length(regions) - regCheck = regions{j}; - if contains(regCheck, check(i)) - br = convertStringsToChars(check(i)); - if ~exist([basepath filesep 'Barrage_Files' filesep basename '.' br 'pyr.cellinfo.mat']) - spikes = importSpikes('brainRegion', check(i), 'cellType', "Pyramidal Cell"); - save([basepath filesep 'Barrage_Files' filesep basename '.' br 'pyr.cellinfo.mat'], 'spikes'); +for i=1:size(useReg,2) + br = useReg{i}; + spikes = importSpikes('cellType', "Pyramidal Cell", 'brainRegion', br); + if ~isempty(spikes.times) + if plotRips + % PSTH_ripples = computePSTH(ripples,spikes,'duration',1,'plots', false,'alignment','peaks','zscorePlot',false); + % [PSTH_ripples,PSTH_t] = makePETH(spikes,ripples.timestamps(:,1),[-3 3]); + [PSTH_ripples, PSTH_t] = manualPSTH(spikes, ripples.timestamps(:,1),[-1,1],1/100); %was 1/1000 + if runTags + %warning('NOT ADJUSTED TO NEW DIMENSIONS'); + % for k = 1:size(PSTH_ripples,1) + % if ((max(PSTH_ripples(k,91:111))-max(PSTH_ripples(k,1:71))) > 1.5*std(PSTH_ripples(k,:))) + % cell_metrics.tags.Pr = [cell_metrics.tags.Pr spikes.UID(k)]; + % else + % cell_metrics.tags.Nr = [cell_metrics.tags.Nr spikes.UID(k)]; + % end + % end + end + % [PSTH_ripples,PSTH_t] = makePETH(spikes,ripples.peaks,[-1 1]); + % index = getSort(PSTH_ripples); + index = 1:size(PSTH_ripples,1); + % PSTH_ripples = manualZscore(PSTH_ripples,spikes); + % PSTH_ripples = zscore(PSTH_ripples,1,2); + plotPSTH(PSTH_ripples, PSTH_t, index, regTot, subNum, strcat(br, '/ripples'),1); + PSTHmets.PSTH_ripples = PSTH_ripples; + PSTHmets.PSTH_ripT = PSTH_t; + PSTHmets.UID = spikes.UID; + end + % PSTH_bar = computePSTH(HSEnrem,spikes,'duration',1,'plots', false,'alignment','peaks','zscorePlot',false); + % [PSTH_bar,PSTH_t] = makePETH(spikes,HSEuse.timestamps(:,1),[-3 3]); + [PSTH_bar, PSTH_t] = manualPSTH(spikes, HSEuse.timestamps(:,1),[-1 1],1/100); %was 1/1000 + if runTags + %warning('NOT ADJUSTED TO NEW DIMENSIONS'); + % for k = 1:size(PSTH_bar,1) + % if (mean(PSTH_bar(k,1001:2001))-mean(PSTH_bar(k,1:100))) > 0.3 + % cell_metrics.tags.Pb = [cell_metrics.tags.Pb spikes.UID(k)]; + % else + % cell_metrics.tags.Nb = [cell_metrics.tags.Nb spikes.UID(k)]; + % end + % end + end + % PSTH_bar = manualZscore(PSTH_bar,spikes); + % PSTH_bar = zscore(PSTH_bar,1,2); + % [PSTH_bar,PSTH_t] = makePETH(spikes,HSEuse.peaks,[-1 1]); + plotPSTH(PSTH_bar, PSTH_t, index, regTot, subNum+(regTot*2), strcat(br, '/barrages'),1); + PSTHmets.PSTH_bar = PSTH_bar; + PSTHmets.PSTH_barT = PSTH_t; + + if useState == "NREM" + if contains(plotSave, 'clean') + save(strcat(basepath, filesep, 'Barrage_Files', filesep, 'PSTHmet', filesep, basename, '.clean.', br, 'PSTHmets.mat'), 'PSTHmets'); else - load([basepath filesep 'Barrage_Files' filesep basename '.' br 'pyr.cellinfo.mat']); + save(strcat(basepath, filesep, 'Barrage_Files', filesep, 'PSTHmet', filesep, basename, '.', br, 'PSTHmets.mat'), 'PSTHmets'); end - if ~isempty(spikes.times) - if plotRips - % PSTH_ripples = computePSTH(ripples,spikes,'duration',1,'plots', false,'alignment','peaks','zscorePlot',false); -% [PSTH_ripples,PSTH_t] = makePETH(spikes,ripples.timestamps(:,1),[-3 3]); - [PSTH_ripples, PSTH_t] = manualPSTH(spikes, ripples.timestamps(:,1),[-1,1],1/100); %was 1/1000 - if runTags - %warning('NOT ADJUSTED TO NEW DIMENSIONS'); -% for k = 1:size(PSTH_ripples,1) -% if ((max(PSTH_ripples(k,91:111))-max(PSTH_ripples(k,1:71))) > 1.5*std(PSTH_ripples(k,:))) -% cell_metrics.tags.Pr = [cell_metrics.tags.Pr spikes.UID(k)]; -% else -% cell_metrics.tags.Nr = [cell_metrics.tags.Nr spikes.UID(k)]; -% end -% end - end -% [PSTH_ripples,PSTH_t] = makePETH(spikes,ripples.peaks,[-1 1]); -% index = getSort(PSTH_ripples); - index = 1:size(PSTH_ripples,1); -% PSTH_ripples = manualZscore(PSTH_ripples,spikes); -% PSTH_ripples = zscore(PSTH_ripples,1,2); - plotPSTH(PSTH_ripples, PSTH_t, index, regTot, subNum, strcat(check(i), '/ripples'),1); - PSTHmets.PSTH_ripples = PSTH_ripples; - PSTHmets.PSTH_ripT = PSTH_t; - PSTHmets.UID = spikes.UID; - end - % PSTH_bar = computePSTH(HSEnrem,spikes,'duration',1,'plots', false,'alignment','peaks','zscorePlot',false); -% [PSTH_bar,PSTH_t] = makePETH(spikes,HSEuse.timestamps(:,1),[-3 3]); - [PSTH_bar, PSTH_t] = manualPSTH(spikes, HSEuse.timestamps(:,1),[-1 1],1/100); %was 1/1000 - if runTags - %warning('NOT ADJUSTED TO NEW DIMENSIONS'); -% for k = 1:size(PSTH_bar,1) -% if (mean(PSTH_bar(k,1001:2001))-mean(PSTH_bar(k,1:100))) > 0.3 -% cell_metrics.tags.Pb = [cell_metrics.tags.Pb spikes.UID(k)]; -% else -% cell_metrics.tags.Nb = [cell_metrics.tags.Nb spikes.UID(k)]; -% end -% end - end -% PSTH_bar = manualZscore(PSTH_bar,spikes); -% PSTH_bar = zscore(PSTH_bar,1,2); -% [PSTH_bar,PSTH_t] = makePETH(spikes,HSEuse.peaks,[-1 1]); - plotPSTH(PSTH_bar, PSTH_t, index, regTot, subNum+(regTot*2), strcat(check(i), '/barrages'),1); - PSTHmets.PSTH_bar = PSTH_bar; - PSTHmets.PSTH_barT = PSTH_t; - - if useState == "NREM" - if contains(plotSave, 'clean') - save([basepath filesep 'Barrage_Files' filesep 'PSTHmet' filesep basename '.clean.' br 'PSTHmets.mat'], 'PSTHmets'); - else - save([basepath filesep 'Barrage_Files' filesep 'PSTHmet' filesep basename '.' br 'PSTHmets.mat'], 'PSTHmets'); - end - else - if contains(plotSave, 'clean') - save(strcat(basepath, filesep, 'Barrage_Files', filesep, useState, filesep, basename, '.clean.', br, 'PSTHmets.mat'), 'PSTHmets'); - else - save(strcat(basepath, filesep, 'Barrage_Files', filesep, useState, filesep, basename, '.', br, 'PSTHmets.mat'), 'PSTHmets'); - end - end - + else + if contains(plotSave, 'clean') + save(strcat(basepath, filesep, 'Barrage_Files', filesep, useState, filesep, basename, '.clean.', br, 'PSTHmets.mat'), 'PSTHmets'); else - warning(['No pyramidal cells in ' br]); + save(strcat(basepath, filesep, 'Barrage_Files', filesep, useState, filesep, basename, '.', br, 'PSTHmets.mat'), 'PSTHmets'); end - - subNum = subNum+1; % should max at 4 end + + else + warning(['No pyramidal cells in ' br]); end + subNum = subNum+1; % should max at 4 end sgtitle('Pyramidal PSTH'); saveas(gcf,[plotSave 'PSTH.png']); subNum = 1; intEmpt = 0; -for i = 1:length(check) - for j=1:length(regions) - regCheck = regions{j}; - if contains(regCheck, check(i)) - br = convertStringsToChars(check(i)); - spikes = []; - if ~exist([basepath filesep 'Barrage_Files' filesep basename '.' br 'int.cellinfo.mat']) - spikes = importSpikes('brainRegion', check(i), 'cellType', ["Wide Interneuron"; "Narrow Interneuron"]); - save([basepath filesep 'Barrage_Files' filesep basename '.' br 'int.cellinfo.mat'], 'spikes'); +for i=1:size(useReg,2) + br = useReg{i}; + spikes = importSpikes('cellType', "Interneuron", 'brainRegion', br); + if ~isempty(spikes.times) + if plotRips + % PSTH_ripples = computePSTH(ripples,spikes,'duration',1,'plots', false,'alignment','peaks','zscorePlot',false); + % [PSTH_ripples,PSTH_t] = makePETH(spikes,ripples.timestamps(:,1),[-3 3]); + % [PSTH_ripples,PSTH_t] = makePETH(spikes,ripples.peaks,[-1 1]); + [PSTH_ripples, PSTH_t] = manualPSTH(spikes, ripples.timestamps(:,1),[-1 1],1/1000); + if runTags + warning('NOT ADJUSTED TO NEW DIMENSIONS'); + % for k = 1:size(PSTH_ripples,1) + % if (max(PSTH_ripples(k,91:111))-max(PSTH_ripples(k,1:71))) > 1.5*std(PSTH_ripples(k,:)) + % cell_metrics.tags.Pr = [cell_metrics.tags.Pr spikes.UID(k)]; + % else + % cell_metrics.tags.Nr = [cell_metrics.tags.Nr spikes.UID(k)]; + % end + % end + end + % index = getSort(PSTH_ripples); + index = 1:size(PSTH_ripples,1); + % PSTH_ripples = manualZscore(PSTH_ripples,spikes); + % PSTH_ripples = zscore(PSTH_ripples,1,2); + plotPSTH(PSTH_ripples, PSTH_t, index, regTot, subNum, strcat(br, '/ripples'),2); + PSTHmetsINT.PSTH_ripples = PSTH_ripples; + PSTHmetsINT.ripT = PSTH_t; + PSTHmetsINT.UID = spikes.UID; + end + % PSTH_bar = computePSTH(HSEnrem,spikes,'duration',1,'plots', false,'alignment','peaks','zscorePlot',false); + % [PSTH_bar,PSTH_t] = makePETH(spikes,HSEuse.timestamps(:,1),[-3 3]); + [PSTH_bar, PSTH_t] = manualPSTH(spikes, HSEuse.timestamps(:,1),[-1 1],1/1000); + if runTags + warning('NOT ADJUSTED TO NEW DIMENSIONS'); + % for k = 1:size(PSTH_bar,1) + % if (mean(PSTH_bar(k,101:201))-mean(PSTH_bar(k,1:100))) > 0.3 + % cell_metrics.tags.Pb = [cell_metrics.tags.Pb spikes.UID(k)]; + % else + % cell_metrics.tags.Nb = [cell_metrics.tags.Nb spikes.UID(k)]; + % end + % end + end + % [PSTH_bar,PSTH_t] = makePETH(spikes,HSEuse.peaks,[-1 1]); + % PSTH_bar = manualZscore(PSTH_bar,spikes); + % PSTH_bar = zscore(PSTH_bar, 1, 2); + plotPSTH(PSTH_bar, PSTH_t, index, regTot, subNum+(regTot*2), strcat(br, '/barrages'),2); + PSTHmetsINT.PSTH_bar = PSTH_bar; + PSTHmetsINT.barT = PSTH_t; + + if useState == "NREM" + if contains(plotSave, 'clean') + save(strcat(basepath, filesep, 'Barrage_Files', filesep, 'PSTHmet', filesep, basename, '.clean.', br, 'PSTHmetsINT.mat'), 'PSTHmetsINT'); else - load([basepath filesep 'Barrage_Files' filesep basename '.' br 'int.cellinfo.mat']); + save(strcat(basepath, filesep, 'Barrage_Files', filesep, 'PSTHmet', filesep, basename, '.', br, 'PSTHmetsINT.mat'), 'PSTHmetsINT'); end - if ~isempty(spikes.times) - if plotRips - % PSTH_ripples = computePSTH(ripples,spikes,'duration',1,'plots', false,'alignment','peaks','zscorePlot',false); -% [PSTH_ripples,PSTH_t] = makePETH(spikes,ripples.timestamps(:,1),[-3 3]); -% [PSTH_ripples,PSTH_t] = makePETH(spikes,ripples.peaks,[-1 1]); - [PSTH_ripples, PSTH_t] = manualPSTH(spikes, ripples.timestamps(:,1),[-1 1],1/1000); - if runTags - warning('NOT ADJUSTED TO NEW DIMENSIONS'); -% for k = 1:size(PSTH_ripples,1) -% if (max(PSTH_ripples(k,91:111))-max(PSTH_ripples(k,1:71))) > 1.5*std(PSTH_ripples(k,:)) -% cell_metrics.tags.Pr = [cell_metrics.tags.Pr spikes.UID(k)]; -% else -% cell_metrics.tags.Nr = [cell_metrics.tags.Nr spikes.UID(k)]; -% end -% end - end -% index = getSort(PSTH_ripples); - index = 1:size(PSTH_ripples,1); -% PSTH_ripples = manualZscore(PSTH_ripples,spikes); -% PSTH_ripples = zscore(PSTH_ripples,1,2); - plotPSTH(PSTH_ripples, PSTH_t, index, regTot, subNum, strcat(check(i), '/ripples'),2); - PSTHmetsINT.PSTH_ripples = PSTH_ripples; - PSTHmetsINT.ripT = PSTH_t; - PSTHmetsINT.UID = spikes.UID; - end - % PSTH_bar = computePSTH(HSEnrem,spikes,'duration',1,'plots', false,'alignment','peaks','zscorePlot',false); -% [PSTH_bar,PSTH_t] = makePETH(spikes,HSEuse.timestamps(:,1),[-3 3]); - [PSTH_bar, PSTH_t] = manualPSTH(spikes, HSEuse.timestamps(:,1),[-1 1],1/1000); - if runTags - warning('NOT ADJUSTED TO NEW DIMENSIONS'); -% for k = 1:size(PSTH_bar,1) -% if (mean(PSTH_bar(k,101:201))-mean(PSTH_bar(k,1:100))) > 0.3 -% cell_metrics.tags.Pb = [cell_metrics.tags.Pb spikes.UID(k)]; -% else -% cell_metrics.tags.Nb = [cell_metrics.tags.Nb spikes.UID(k)]; -% end -% end - end -% [PSTH_bar,PSTH_t] = makePETH(spikes,HSEuse.peaks,[-1 1]); -% PSTH_bar = manualZscore(PSTH_bar,spikes); -% PSTH_bar = zscore(PSTH_bar, 1, 2); - plotPSTH(PSTH_bar, PSTH_t, index, regTot, subNum+(regTot*2), strcat(check(i), '/barrages'),2); - PSTHmetsINT.PSTH_bar = PSTH_bar; - PSTHmetsINT.barT = PSTH_t; - - if useState == "NREM" - if contains(plotSave, 'clean') - save([basepath filesep 'Barrage_Files' filesep 'PSTHmet' filesep basename '.clean.' br 'PSTHmetsINT.mat'], 'PSTHmetsINT'); - else - save([basepath filesep 'Barrage_Files' filesep 'PSTHmet' filesep basename '.' br 'PSTHmetsINT.mat'], 'PSTHmetsINT'); - end - else - if contains(plotSave, 'clean') - save(strcat(basepath, filesep, 'Barrage_Files', filesep, useState, filesep, basename, '.clean.', br, 'PSTHmetsINT.mat'), 'PSTHmetsINT'); - else - save(strcat(basepath, filesep, 'Barrage_Files', filesep, useState, filesep, basename, '.', br, 'PSTHmetsINT.mat'), 'PSTHmetsINT'); - end - end - + else + if contains(plotSave, 'clean') + save(strcat(basepath, filesep, 'Barrage_Files', filesep, useState, filesep, basename, '.clean.', br, 'PSTHmetsINT.mat'), 'PSTHmetsINT'); else - warning(['No interneurons in ' br]); - intEmpt = intEmpt+1; + save(strcat(basepath, filesep, 'Barrage_Files', filesep, useState, filesep, basename, '.', br, 'PSTHmetsINT.mat'), 'PSTHmetsINT'); end - subNum = subNum+1; % should max at 4 end + + else + warning(['No interneurons in ' br]); + intEmpt = intEmpt+1; end + subNum = subNum+1; % should max at 4 end -if ~(intEmpt == length(regions)) +if ~(intEmpt == size(useReg,2)) sgtitle('Interneuron PSTH'); saveas(gcf,[plotSave 'PSTHint.png']); end diff --git a/BARRs/detectBARR.m b/BARRs/detectBARR.m index 6631e76..89ffcaf 100644 --- a/BARRs/detectBARR.m +++ b/BARRs/detectBARR.m @@ -59,8 +59,6 @@ % remRip: Logical option to zero firing during SWRs. This is % typically used for sessions containing stimulation (ie % ripple generation). Default: false -% newSpks: Logical option to regenerate spike groups if the regions or -% cell types have been adjusted. Default: false % %%%%%%%%%%%%%%% %%% OUTPUTS %%% @@ -103,7 +101,6 @@ addParameter(p, 'pareDur', 0.2, @isnumeric); addParameter(p, 'zeroRip', true, @islogical); addParameter(p, 'remRip', false, @islogical); -addParameter(p, 'newSpks', false, @islogical); parse(p, varargin{:}); @@ -121,7 +118,6 @@ pareDur = p.Results.pareDur; zeroRip = p.Results.zeroRip; remRip = p.Results.remRip; -newSpks = p.Results.newSpks; %% Check if BARRs have already been detected basename = basenameFromBasepath(basepath); @@ -139,10 +135,16 @@ mkdir([basepath filesep 'Barrage_Files']); end -pullSpikes('basepath', basepath, 'savePath', [basepath filesep 'Barrage_Files'], 'force', newSpks); %Get region/cell type spike files +useReg = pullSpikes(basepath); %Get region/cell type spike files -if ~exist(strcat(basepath,filesep,'Barrage_Files',filesep,basename,'.CA2pyr.cellinfo.mat')) - disp('No CA2 pyramidal cells detected, exiting'); +try + checkCA2 = importSpikes('cellType', "Pyramidal Cell", 'brainRegion', "CA2"); + if isempty(checkCA2.times) + disp('No CA2 pyramidal cells detected, exiting'); + return + end +catch + disp('Issue loading CA2 pyramidal cells, exiting'); return end @@ -164,7 +166,7 @@ load([savePath 'useSpk.cellinfo.mat']); %load in the spikes that we've picked and run to save if isempty(spikes.UID) - load([savePath 'CA2pyr.cellinfo.mat']); + spikes = importSpikes('cellType', "Pyramidal Cell", 'brainRegion', "CA2"); UIDkeep = spikes.UID; save([savePath 'useSpk.UIDkeep.mat'],'UIDkeep'); warning('unitsForDetection did not return any units, defaulting to all CA2pyr'); @@ -190,4 +192,5 @@ %% Run analysis script BARR_PSTH(savePath,"NREM"); +% BARR_PSTH(savePath,"nonTheta"); end \ No newline at end of file diff --git a/BARRs/pullSpikes.m b/BARRs/pullSpikes.m index 08929fc..363f64b 100644 --- a/BARRs/pullSpikes.m +++ b/BARRs/pullSpikes.m @@ -1,65 +1,27 @@ -function pullSpikes(varargin) +function useReg = pullSpikes(basepath) % Create spike structures per region and cell type % %%%%%%%%%%%%%% %%% INPUTS %%% %%%%%%%%%%%%%% % basepath: Full path where session is located. Default: pwd -% savePath: Location for spike structures to be saved. For example, -% '[basepath '/Barrage_Files']'. Default: pwd -% force: Logical option to force redetection of spikes. Default: -% false + +%%%%%%%%%%%%%%% +%%% OUTPUTS %%% +%%%%%%%%%%%%%%% +% useReg: Cell containing strings of the regions present in cell +% metrics, used for loading in some BARR-related analyses. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Handle inputs -p = inputParser; -addParameter(p,'basepath',pwd,@isfolder); -addParameter(p,'savePath',pwd,@ischar); -addParameter(p,'force',false,@islogical); - -parse(p, varargin{:}); - -basepath = p.Results.basepath; -savePath = p.Results.savePath; -force = p.Results.force; +if nargin<1 + warning('No basepath provided, defaulting to current directory'); + basepath = pwd; +end original = pwd; -cd(savePath); +cd(basepath); basename = basenameFromBasepath(basepath); -%% Remove old runs if necessary -getFiles = dir(); -if force - fun_existsPyr = @(x) (contains(x, 'pyr.cellinfo.mat')); - fun_existsInt = @(x) (contains(x, 'int.cellinfo.mat')); - toDelete = zeros(size(getFiles,1),1); - for j = 1:size(getFiles,1) - if fun_existsPyr(getFiles(j).name)||fun_existsInt(getFiles(j).name) - disp(['Deleting ' getFiles(j).folder filesep getFiles(j).name]); - toDelete(j) = 1; - end - end - if sum(toDelete) > 0 - disp('Going to delete - okay?: "dbcont" to continue') - keyboard - for j = 1:size(getFiles,1) - if toDelete(j)==1 - delete([getFiles(j).folder filesep getFiles(j).name]); - disp(['Deleted ' getFiles(j).folder filesep getFiles(j).name]); - end - end - end -else - fun_existsPyr = @(x) (contains(x, 'pyr.cellinfo.mat')); - fun_existsInt = @(x) (contains(x, 'int.cellinfo.mat')); - for j = 1:size(getFiles,1) - if fun_existsPyr(getFiles(j).name)||fun_existsInt(getFiles(j).name) - cd(original); - disp('Region spike structures detected, returning'); - return - end - end -end - cd(basepath); %% Load and prepare cell_metrics if exist([basepath filesep basename '.cell_metrics.cellinfo.mat']) @@ -82,22 +44,22 @@ function pullSpikes(varargin) %% Pull regions tempUseReg = unique(cell_metrics.brainRegion); -useReg = []; tuC = 1; y1 = 0; y2 = 0; y3=0; +useReg = []; tuC = 1; y1 = 0; y2 = 0; y3 = 0; for i = 1:length(tempUseReg) - if contains(convertCharsToStrings(tempUseReg{i}),"CA1") + if contains(convertCharsToStrings(tempUseReg{i}),"CA1") %in case sublayers labeled, collapse all into CA1 if ~y1 useReg{tuC} = "CA1"; - tuC = tuC+1; y1 = 1; + tuC = tuC+1; y1=1; end elseif contains(convertCharsToStrings(tempUseReg{i}),"CA2") if (~y2) useReg{tuC} = "CA2"; - tuC = tuC+1; y2 = 1; + tuC = tuC+1; y2=1; end elseif contains(convertCharsToStrings(tempUseReg{i}),"CA3") if (~y3) useReg{tuC} = "CA3"; - tuC = tuC+1; y3 = 1; + tuC = tuC+1; y3=1; end else useReg{tuC} = convertCharsToStrings(tempUseReg{i}); @@ -105,65 +67,5 @@ function pullSpikes(varargin) end end -%% Pull pyramidal per region -for i = 1:length(useReg) - spikes = []; - spikes = importSpikes('cellType', "Pyramidal Cell", 'brainRegion', useReg{i}); - countCheck = 0; UIDcheck = []; - for m = 1:length(cell_metrics.brainRegion) - if contains(cell_metrics.brainRegion{m}, useReg{i}) - if contains(cell_metrics.putativeCellType{m},'Pyr') - if isfield(cell_metrics.tags,'Bad') - if ~ismember(cell_metrics.UID(m),cell_metrics.tags.Bad) - countCheck = countCheck+1; - UIDcheck = [UIDcheck cell_metrics.UID(m)]; - end - else - countCheck = countCheck+1; - UIDcheck = [UIDcheck cell_metrics.UID(m)]; - end - end - end - end - if sum(UIDcheck==spikes.UID)==length(spikes.times) - save(strcat(savePath, filesep, basename, '.', useReg{i}, 'pyr.cellinfo.mat'), 'spikes'); - else - error('Issue with importing'); - end - - %% Pull interneurons per region - spikes = []; - spikes = importSpikes('cellType', "Int", 'brainRegion', useReg{i}); - countCheck = 0; UIDcheck = []; - for m = 1:length(cell_metrics.brainRegion) - if contains(cell_metrics.brainRegion{m}, useReg{i}) - if contains(cell_metrics.putativeCellType{m},'Int') - if isfield(cell_metrics.tags,'Bad') - if ~ismember(cell_metrics.UID(m),cell_metrics.tags.Bad) - countCheck = countCheck+1; - UIDcheck = [UIDcheck cell_metrics.UID(m)]; - end - else - countCheck = countCheck+1; - UIDcheck = [UIDcheck cell_metrics.UID(m)]; - end - end - end - end - if sum(UIDcheck==spikes.UID)==length(spikes.times) - save(strcat(savePath, filesep, basename, '.', useReg{i}, 'int.cellinfo.mat'), 'spikes'); - else - error('Issue with importing'); - end -end - -%% Pull all pyr or int cells -spikes = []; -spikes = importSpikes('cellType', "Pyramidal Cell"); -save([savePath filesep basename '.allpyr.cellinfo.mat'], 'spikes'); -spikes = []; -spikes = importSpikes('cellType', ["Narrow Interneuron"; "Wide Interneuron"]); -save([savePath filesep basename '.allint.cellinfo.mat'], 'spikes'); - cd(original); end \ No newline at end of file diff --git a/BARRs/unitsForDetection.m b/BARRs/unitsForDetection.m index 604223f..fb7111c 100644 --- a/BARRs/unitsForDetection.m +++ b/BARRs/unitsForDetection.m @@ -25,7 +25,9 @@ load([basename '.cell_metrics.cellinfo.mat']); %% Produce spike structure -load([basepath filesep 'Barrage_Files' filesep basename '.CA2pyr.cellinfo.mat']); +spikes = importSpikes('cellType', "Pyramidal Cell", 'brainRegion', "CA2"); + +%load([basepath filesep 'Barrage_Files' filesep basename '.CA2pyr.cellinfo.mat']); %% Get cell by cell firing rate tSmooth = 0.05; binsz = 0.01; @@ -78,4 +80,8 @@ spikes = keep; save([savePath 'useSpk.cellinfo.mat'], 'spikes'); save([savePath 'useSpk.UIDkeep.mat'],'UIDkeep'); + +load([basepath '\' basename '.cell_metrics.cellinfo.mat']); +cell_metrics.tags.BARR_UID = UIDkeep; +save([basepath '\' basename '.cell_metrics.cellinfo.mat']); end \ No newline at end of file