Skip to main content
  • Home
  • Development
  • Documentation
  • Donate
  • Operational login
  • Browse the archive

swh logo
SoftwareHeritage
Software
Heritage
Archive
Features
  • Search

  • Downloads

  • Save code now

  • Add forge now

  • Help

Revision 08e6b78f05cbc7492579753828440a5728b97b35 authored by MattCarter-WilliamsCollege on 29 March 2022, 19:51:14 UTC, committed by GitHub on 29 March 2022, 19:51:14 UTC
Create README.md
1 parent 6982b8b
  • Files
  • Changes
  • 6112acb
  • /
  • next_analysis_and_build_lovely_plots.m
Raw File Download
Permalinks

To reference or cite the objects present in the Software Heritage archive, permalinks based on SoftWare Hash IDentifiers (SWHIDs) must be used.
Select below a type of object currently browsed in order to display its associated SWHID and permalink.

  • revision
  • directory
  • content
revision badge
swh:1:rev:08e6b78f05cbc7492579753828440a5728b97b35
directory badge Iframe embedding
swh:1:dir:6112acbfdb2fb982c16da70db3788ff072c683f9
content badge Iframe embedding
swh:1:cnt:27a8ec3684df87c3c3a83cc918d03307725ce4c3
Citations

This interface enables to generate software citations, provided that the root directory of browsed objects contains a citation.cff or codemeta.json file.
Select below a type of object currently browsed in order to generate citations for them.

  • revision
  • directory
  • content
Generate software citation in BibTex format (requires biblatex-software package)
Generating citation ...
Generate software citation in BibTex format (requires biblatex-software package)
Generating citation ...
Generate software citation in BibTex format (requires biblatex-software package)
Generating citation ...
next_analysis_and_build_lovely_plots.m
% this is a script to build up to paper-quality plotting
%
% (will also want to build a script to do some re-analysis /
% re-normalization of the data, since KEJ is worried about the "detrending"
% step, but this part is independent and can always rerun this script after
% re-normalizing to re-plot).
%
% Requires all_data to be loaded into the Matlab workspace. (There's a
% command just below that will go get it for you too.)
%
% Kate Jensen - January 26, 2020


%% load the data -- either manually, or from here:

clear all
load('all_data.mat')


%% Build matrix of DeltaF/F aligned by t_stim
% this will be used to make a heatmap like subfigure *F* in the example
% manuscript, and also for doing statistics on what comes next

% build a separate matrix for each test Condition

% what are all of the conditions? I numbered them...
clear condition_number_list mouse_number_list
for i=1:length(all_data)
    condition_number_list(i,1) = all_data(i).condition_number; %tells me what and where all of the conditions are...
    mouse_number_list(i,1) = all_data(i).mouse_number;
    t_stim_list(i,1) = all_data(i).t_stim;
end
[all_condition_numbers, IA]  = unique(condition_number_list); %this is just the list of unique numbers

% in the condition of interest
for c_index = 1:numel(all_condition_numbers) %[1] %this indexes into the list of all_condition_numbers
    %this condition is...
    disp(['Currently doing analysis and plotting for condition: ' all_data(IA(c_index)).condition]) 
    
    %before starting to collect the data together, check what the *maximum*
    %t_stim for this condition was, because that will set the left edge
    %pixel of the heat map / matrix -- sets the reference t_stim
    t_stim_reference = max(t_stim_list(condition_number_list==all_condition_numbers(c_index)));
    %%%%%%%%%%%%% IF WANT *ALL* CONDITION MATRICES TO LINE UP THE SAME,
    %%%%%%%%%%%%% THEN THIS WOULD JUST BE max(t_stim_list) (the overall
    %%%%%%%%%%%%% max value)
    
    %what mice #s were tested under this condition? 
    %(this Matlab is getting a little fancy; don't worry!)
    mouse_numbers_this_condition = unique(mouse_number_list(condition_number_list==all_condition_numbers(c_index)));
    
    %now need to run through each mouse and all of its trials, pull out its
    %DeltaF/F data for both 405 and 465 wavelengths, and shift it to line
    %up the time axes...
    % after talking with Jessica (evening of 1/26), build two matrices: one
    % that has every trial for every mouse separately, and one that
    % averages together what each mouse did
    
    %run through the mice and trials for this condition...
    clear y_axis_labels  %build this up for the figure later
    k = 1;
    clear this_condition_matrix_F405 this_condition_matrix_F465 this_condition_avgd_matrix_F405 this_condition_avgd_matrix_F465 %will be all mice, all trials for this condition
    for m = 1:numel(mouse_numbers_this_condition)
        mousestr = ['mouse ' num2str(mouse_numbers_this_condition(m))];
        disp(mousestr)
        
        %how many trials? and what entries are they in the data structure?
        select_vector = (condition_number_list==all_condition_numbers(c_index) & mouse_number_list==mouse_numbers_this_condition(m));
        num_trials_this_mouse = sum(select_vector); %don't necessarily need this...
        index_list = find(select_vector); %this tells me where these experiment entries are in the data structure
        
        %now run through, grab all of these trials, and build a
        %mini-mouse-matrix out of them
        clear this_mouse_matrix_F405 this_mouse_matrix_F465
        for transitions = 1:num_trials_this_mouse
            n = index_list(transitions);
            %how much to shift the vector entries by to match up the t_stims...
            fs = all_data(n).fs;
            time_index_shift = round((t_stim_reference - all_data(n).t_stim)./(round(fs)/fs));
            
            %pick up the data:
            F405_DeltaFoverF = all_data(n).F405_DeltaFoverF;
            F465_DeltaFoverF = all_data(n).F465_DeltaFoverF;
            
            %stick it in the this-mouse matrix
            this_mouse_matrix_F405(transitions,1+time_index_shift:size(F405_DeltaFoverF,2)+time_index_shift) = F405_DeltaFoverF;
            this_mouse_matrix_F465(transitions,1+time_index_shift:size(F465_DeltaFoverF,2)+time_index_shift) = F465_DeltaFoverF;
            
            this_condition_matrix_F405(k,1+time_index_shift:size(F405_DeltaFoverF,2)+time_index_shift) = F405_DeltaFoverF;
            this_condition_matrix_F465(k,1+time_index_shift:size(F465_DeltaFoverF,2)+time_index_shift) = F465_DeltaFoverF;
            y_axis_labels{k} = mousestr;
            
            k = k+1; %keep k counting
            

            
        end
        
        %mark `null' entries as NaN at the end -- the only time
        %something can be identically zero is if it's a non-entry, and I
        %think marking them now will make them easier to identify later
        %on...
        this_mouse_matrix_F405(this_mouse_matrix_F405 == 0) = NaN;
        this_mouse_matrix_F465(this_mouse_matrix_F465 == 0) = NaN;

        %average the existing entries at each time to collapse this mouse's
        %data as best as possible...
        clear this_mouse_averaged_F405 this_mouse_averaged_F465
        for col = 1:size(this_mouse_matrix_F405,2)
            this_mouse_averaged_F405(1,col) =  mean(this_mouse_matrix_F405(~isnan(this_mouse_matrix_F405(:,col)),col));
            this_mouse_averaged_F465(1,col) =  mean(this_mouse_matrix_F465(~isnan(this_mouse_matrix_F465(:,col)),col));
        end
        
        %append these onto the averaged matrix for this condition:
        this_condition_avgd_matrix_F405(m,1:size(this_mouse_averaged_F405,2)) = this_mouse_averaged_F405;
        this_condition_avgd_matrix_F465(m,1:size(this_mouse_averaged_F465,2)) = this_mouse_averaged_F465;
       

       
    end %of all the different mice and trials for this condition
        
          %mark `null' entries as NaN at the end -- the only time
        %something can be identically zero is if it's a non-entry, and I
        %think marking them now will make them easier to identify later
        %on...
        this_condition_avgd_matrix_F405(this_condition_avgd_matrix_F405 == 0) = NaN;
        this_condition_avgd_matrix_F465(this_condition_avgd_matrix_F465 == 0) = NaN;
        this_condition_matrix_F405(this_condition_matrix_F405 == 0) = NaN;
        this_condition_matrix_F465(this_condition_matrix_F465 == 0) = NaN;
    
        
        % while we're here, extract the *mean* and *standard error* data
        % for later plotting 
        clear this_condition_F405_mean this_condition_F405_SE this_condition_F465_mean this_condition_F465_SE
        for col = 1:size(this_condition_matrix_F405,2)
            this_condition_F405_mean(1,col) =  mean(this_condition_matrix_F405(~isnan(this_condition_matrix_F405(:,col)),col));
            %calculating standard error (SE) as the standard devation
            %divided by the square root of the number of samples:
            this_condition_F405_SE(1,col) = std(this_condition_matrix_F405(~isnan(this_condition_matrix_F405(:,col)),col))/sqrt(sum(~isnan(this_condition_matrix_F405(:,col))));
            this_condition_F465_mean(1,col) =  mean(this_condition_matrix_F465(~isnan(this_condition_matrix_F465(:,col)),col));
            this_condition_F465_SE(1,col) = std(this_condition_matrix_F465(~isnan(this_condition_matrix_F465(:,col)),col))/sqrt(sum(~isnan(this_condition_matrix_F465(:,col))));
        end 
        
        
        %build the new time axis for the big matrices:
        t_downsampled_shifted = ((1:size(this_condition_matrix_F405,2))-1/2)*round(fs)/fs - t_stim_reference;
    
        %save the four matrices *this* condition specifically
        %EVAL with condition number
        eval(['condition_' num2str(all_condition_numbers(c_index)) '_avgd_matrix_F405 = this_condition_avgd_matrix_F405;'])
        eval(['condition_' num2str(all_condition_numbers(c_index)) '_avgd_matrix_F465 = this_condition_avgd_matrix_F465;'])
        eval(['condition_' num2str(all_condition_numbers(c_index)) '_matrix_F405 = this_condition_matrix_F405;'])
        eval(['condition_' num2str(all_condition_numbers(c_index)) '_matrix_F465 = this_condition_matrix_F465;'])
        eval(['condition_' num2str(all_condition_numbers(c_index)) '_t_downsampled_shifted = t_downsampled_shifted;'])
        
        eval(['condition_' num2str(all_condition_numbers(c_index)) '_F405_mean = this_condition_F405_mean;'])
        eval(['condition_' num2str(all_condition_numbers(c_index)) '_F405_SE = this_condition_F405_SE;'])
        eval(['condition_' num2str(all_condition_numbers(c_index)) '_F465_mean = this_condition_F465_mean;'])
        eval(['condition_' num2str(all_condition_numbers(c_index)) '_F465_SE = this_condition_F465_SE;'])
        eval(['condition_' num2str(all_condition_numbers(c_index)) '_mouse_numbers = mouse_numbers_this_condition;'])
        
        eval(['save condition_' num2str(all_condition_numbers(c_index)) '_summary.mat y_axis_labels c_index IA mouse_numbers_this_condition condition_' num2str(all_condition_numbers(c_index)) '_mouse_numbers this_condition_F405_mean this_condition_F405_SE this_condition_F465_mean this_condition_F465_SE t_downsampled_shifted this_condition_avgd_matrix_F405 this_condition_avgd_matrix_F465 this_condition_matrix_F405 this_condition_matrix_F465 ' ...
            'condition_' num2str(all_condition_numbers(c_index)) '_avgd_matrix_F405 condition_' num2str(all_condition_numbers(c_index)) '_avgd_matrix_F465 condition_' num2str(all_condition_numbers(c_index)) '_matrix_F405 condition_' num2str(all_condition_numbers(c_index)) '_matrix_F465 ' ... 
            'condition_' num2str(all_condition_numbers(c_index)) '_F405_mean condition_' num2str(all_condition_numbers(c_index)) '_F405_SE condition_' num2str(all_condition_numbers(c_index)) '_F465_mean condition_' num2str(all_condition_numbers(c_index)) '_F465_SE' ]) 
        
        
        %% PLOTTING
        % can also run this cell later after re-loading any of the
        % summary.mat files:
        figure('Name',[all_data(IA(c_index)).condition ' all trials heatmap F465'])
        imagesc(t_downsampled_shifted,1:size(this_condition_matrix_F465,1),this_condition_matrix_F465);
        hold all
        plot([0 0],[1 size(this_condition_matrix_F465,1)],'k--','LineWidth',1)
        
        set(gca,'LineWidth',1,'FontWeight','bold','FontSize',14)
        box on
        yticks(1:size(this_condition_matrix_F465,1))
        %yticklabels(y_axis_labels)
        caxis([-0.2 0.2]) %estimating, because initial "detrend" is messing up the scale
        xlabel('Time (s) ')
        title([all_data(IA(c_index)).condition ' all trials heatmap F465'])
        
        xlim([-50 50])
        
        %%if using colormap from kate jensen's 'kmap4' is in the
        %%workspace. Double click and click Finish to add to the workspaceThis can be found in the desktop folder called
        %%'KEJ_25Jan2020_new_scripts_from_Kate
        colormap(kmap4)
        
    %%%%%%%%%%%%%%    
        figure('Name',[all_data(IA(c_index)).condition ' mouse-averaged heatmap F465'])
        imagesc(t_downsampled_shifted,1:size(this_condition_avgd_matrix_F465,1),this_condition_avgd_matrix_F465);
        hold all
        plot([0 0],[1 size(this_condition_avgd_matrix_F465,1)],'k--','LineWidth',1)
        
        set(gca,'LineWidth',1,'FontWeight','bold','FontSize',18)
   
        32
        %yticks(1:numel(mouse_numbers_this_condition))
        %yticklabels(mouse_numbers_this_condition)
        caxis([-0.2 0.1]) %estimating, because initial "detrend" is messing up the scale
        %xlabel('Time (s) ')
        %ylabel('Mice ')
        title([all_data(IA(c_index)).condition ' mouse-averaged heatmap F465'])
        
        %fix the x-axis range
        xlim([-50 50])
        
        %Colormap and Make the colorbar visible
        colormap(kmap4)
        colorbar
     
        
     %%%%%%%%%%%%    
        figure('Name',[all_data(IA(c_index)).condition ' fuzzy line plots DeltaF/F F405 and F465'])
        %lay down error bars first
    %NOPE:    errorbar(t_downsampled_shifted,this_condition_F405_mean,this_condition_F405_SE)
        % the filled error plot turns out to be a little tricky... got some
        % help from the internets
        x_vector = [t_downsampled_shifted, t_downsampled_shifted(end:-1:1)];
        
        %405 standard error first
        %patch = fill(x_vector, [this_condition_F405_mean+this_condition_F405_SE, this_condition_F405_mean(end:-1:1)-this_condition_F405_SE(end:-1:1)], [81 38 152]/255);
        %set(patch, 'edgecolor', 'none');
        %set(patch, 'FaceAlpha', 0.5); %makes semi transparent
        hold all
        
        %465 standard error next 
        patch = fill(x_vector, [this_condition_F465_mean+this_condition_F465_SE, this_condition_F465_mean(end:-1:1)-this_condition_F465_SE(end:-1:1)], [1 0 1]);
        set(patch, 'edgecolor', 'none');
        set(patch, 'FaceAlpha', 0.5); %makes semi transparent     
        
        %now add the data
        %plot(t_downsampled_shifted, this_condition_F405_mean, 'DisplayName','405', 'LineWidth', 1.0,'Color',[81 38 152]/255)
        plot(t_downsampled_shifted, this_condition_F465_mean, 'DisplayName','465', 'LineWidth', 1.0,'Color',[0.25, 0.25, 0.25]/255)
       
        %fix the automatic y-axis limits
        ylim(ylim)
        
        %fix the x-axis range
        xlim ([-40 100])
        
        %note t_stim on the plot
        plot([0 0],[-0.5 0.5],'k-','LineWidth',1.0)
    
        %some plot formatting
        grid off; box on
        set(gca,'LineWidth',1,'FontWeight','bold','FontSize',20)
        title(['\DeltaF/F with SE averaged over all trials for ' all_data(IA(c_index)).condition])
        xlabel('Time (s) ')
        ylabel('?F/F' )
        

        %set the vertical limits manually
        ylim([-0.2 0.2])
        hold all
         
        %insert horizontal line at 0%%%%
         h = yline(0)
         set(h,'LineWidth',1.5, 'Color',[0.25, 0.25, 0.25]/255)
     
       
        %automatically show the legend
        %legend1 = legend(gca,'show');
        %set(legend1,'Location','northeast');
        
        
        
    
end %going through all of the conditions



The diff you're trying to view is too large. Only the first 1000 changed files have been loaded.
Showing with 0 additions and 0 deletions (0 / 0 diffs computed)
swh spinner

Computing file changes ...

Software Heritage — Copyright (C) 2015–2025, The Software Heritage developers. License: GNU AGPLv3+.
The source code of Software Heritage itself is available on our development forge.
The source code files archived by Software Heritage are available under their own copyright and licenses.
Terms of use: Archive access, API— Contact— JavaScript license information— Web API

back to top