%% Analyzing calcium activities related to behavioral events % show the neuron shape % Author: Hanfei Deng @CSHL 11/09/2018 %% extract file info nam = pwd; [filepath,file_name,ext] = fileparts(nam); load('FrameID.mat') load('neuron.mat') %% Parameters baseline_time = 4; % first X s (duration of baseline) stim_t_on = FrameID(1,3)+baseline_time; % timestamp of CS (or other interested time points) (only for sorting neurons) stim_t_off = stim_t_on+4; % timestamp of CS-off (only for sorting neurons) X_line = [4,7]; % reference line for CS and US signal_id = 2; % 1, C; 2, C_raw; 3, S psth_folder_name = 'psth_neuron'; %% % C_raw correspond to a scaled version of DF, which is a metric used in most calcium imaging literature. % C is its denoised version, and S is the inferred spiking activity. % signal_id = 2; % 1, C; 2, C_raw; 3, S C = neuron.C; C_raw = neuron.C_raw; % scaled dF/F S = neuron.S; % ubferred spiking activity A = neuron.A; % shape of neuron %% disp(['Imaging frame number (Bpod): ', num2str(size(FrameID,1))]) disp(['Imaging frame number (DAQ): ', num2str(size(C,2))]) disp(['Neuron number (DAQ): ', num2str(size(C,1))]) if size(C,2)~=size(FrameID,1) error('Error registration!') end switch signal_id case 1 SignalD = C; case 2 SignalD = C_raw; case 3 SignalD = S; end %% R = 28; % for colorspace C = 28; % for colorspace ColorMap = zeros(64,3); ColorMap(64-R+1:64,1) = linspace(0,1,R); % R ColorMap(1:C,2) = linspace(1,0,C); % G ColorMap(1:C,3) = linspace(1,0,C); % B %% trial_all = [1,2,0,-1]; trial_type0 = unique(FrameID(:,4)); loc = ismember(trial_all,trial_type0); trial_type = trial_all(loc); if length(trial_type)~=length(trial_type0) error('Please check the trial type setting!') end disp('... 0, quinine; 1, sucorse; 2, water ...') for kt=1:length(trial_type) trial_n{kt} = (FrameID(:,4)==trial_type(kt)); % Sucrose, Quinine, or Water title_text{kt} = ['TrialType ',num2str(trial_type(kt))]; end NeuronS = []; for neuron_id = 1:size(SignalD,1) signal_df = SignalD(neuron_id,:); for tt=1:numel(trial_n) NeuronS{neuron_id,tt} = []; if sum(trial_n{tt})>0 trial_num = unique(FrameID(trial_n{tt},2)); for k=1:length(trial_num) sel = ((FrameID(:,2)==trial_num(k))); NeuronS{neuron_id,tt}{k,1} = [signal_df(sel');FrameID(sel,3)']; end end end end %% NeuronSum = []; NeuronSumNorm = []; NeuronSumNorm_mean = []; for neuron_id = 1:size(NeuronS,1) for ii=1:size(NeuronS,2) signal_m = []; if isempty(NeuronS{neuron_id,ii}) continue; end for k=1:numel(NeuronS{neuron_id,ii}) temp_d = NeuronS{neuron_id,ii}{k}; signal_m(k,:) = temp_d(1,:); time_x = temp_d(2,:); end base_sel = ((1:length(time_x)) < baseline_time*10); base_mean0 = mean(signal_m(:,base_sel),2); base_mean = mean(base_mean0); base_std = std(base_mean0); NeuronSumNorm{neuron_id,ii} = (signal_m - base_mean)./base_std; NeuronSumNorm_mean{neuron_id,ii} = (mean(signal_m,1) - base_mean)./base_std; NeuronSum{neuron_id,ii} = signal_m; end end %% % ColorMap = exp_colormap('red-green',64); if ~exist(psth_folder_name, 'dir') mkdir(psth_folder_name); end for neuron_id = 1:size(NeuronSumNorm,1) figure('Position', [100 100 1500 800],'Name','Summary','numbertitle','off'); for trial_i=1:size(NeuronSumNorm,2) sm = NeuronSumNorm{neuron_id,trial_i}; if isempty(sm) continue; end Y = mean(sm,1); Y_err = std(sm)/sqrt(size(sm,1)); h(trial_i) = subplot(4,3,trial_i+3); AreaPlot(time_x-time_x(1),Y,Y_err,'k',0.4,1); hold on for xk=1:length(X_line) plot([X_line(xk),X_line(xk)],[min(Y),max(Y)],'b--'); end xlabel('Time (s)','FontSize', 8) ylabel('dF','FontSize', 8) set(gca,'TickDir', 'out','xlim',[0,time_x(end)-time_x(1)],'xtick',0:2:time_x(end)-time_x(1),'FontSize', 8,'box','off'); title(['Neuron',num2str(neuron_id),'-',title_text{trial_i}],'FontSize', 6) ax1 = subplot(4,3,trial_i); imagesc(time_x-time_x(1),1:size(sm,1),sm); colormap(ax1,ColorMap); colorbar; ylabel('Trial #','FontSize', 8) set(gca,'TickDir', 'out','xlim',[0,time_x(end)-time_x(1)],'xtick',0:2:time_x(end)-time_x(1),'YDir','reverse','FontSize', 8,'box','off'); caxis([-6 6]) end linkaxes(h,'xy'); subplot(4,3,[7,8,9]) neuron_trace = neuron.C(neuron_id, :); plot((1:length(neuron_trace))/10, neuron.C(neuron_id, :)*max(neuron.A(:, neuron_id)),'k'); xlabel(['Neuron ID: ',num2str(neuron_id)],'FontSize', 16) set(gca,'TickDir', 'out','FontSize', 8,'box','off'); ax2 = subplot(4,3,[10]); Amask = (neuron.A~=0); neuron.image(neuron.A(:, neuron_id).*Amask(:, neuron_id)); % colormap(ax2,parula) axis equal; axis off; ax3 = subplot(4,3,[12]); ctr = neuron.estCenter(); %neuron's center gSiz = neuron.options.gSiz; % maximum size of a neuron neuron.image(neuron.A(:, neuron_id).*Amask(:, neuron_id)); % colormap(ax3,parula) axis equal; axis off; x0 = ctr(neuron_id, 2); y0 = ctr(neuron_id, 1); if ~isnan(x0) xlim(x0+[-gSiz, gSiz]*2); ylim(y0+[-gSiz, gSiz]*2); end print([pwd,'\',psth_folder_name,'\NeuronPSTH_',num2str(neuron_id)],'-dpng'); close; end %% A = {}; for k=1:size(NeuronSumNorm,2) A0 = NeuronSumNorm_mean(:,k); A{k} = cell2mat(A0); end a_sort0 = A{1}(:,time_x>=stim_t_on & time_x<=stim_t_off); a_sort = mean(a_sort0,2); [~,idx]=sortrows(a_sort); figure('Position', [100 100 1200 400],'Name','Summary','numbertitle','off'); for k=1:size(NeuronSumNorm,2) A{k} = A{k}(idx,:); subplot(2,size(NeuronSumNorm,2),k); imagesc(time_x-time_x(1),1:size(A{k},1),A{k}); colormap(ColorMap); colorbar; xlabel('Time (s)','FontSize', 18) ylabel('Neuron #','FontSize', 18) caxis([-3 3]) set(gca,'TickDir', 'out',... 'YDir','reverse','FontSize', 16,'box','off'); title([title_text{k}]); subplot(2,size(NeuronSumNorm,2),k+size(NeuronSumNorm,2)) plot(time_x-time_x(1),mean(A{k},1),'k','LineWidth',2) xlabel('Time (s)','FontSize', 18) ylabel('Norm activity','FontSize', 18) ylim([-1 3]) xlim([0,time_x(end)-time_x(1)]); set(gca,'TickDir', 'out','FontSize', 16,'box','off'); end