https://github.com/simkind/Patch-clamp-analysis
Raw File
Tip revision: bde5c7399d9f7c789feec0ee26ab5dad4a661d90 authored by simkind on 13 January 2021, 04:40:28 UTC
Create How to use.md
Tip revision: bde5c73
checkresults.m
function [] = checkresults()
    files = uipickfiles('Prompt','Select .mat files from ephysanalysis');
    if isempty(files)
        error('Files not specified') % would happen if you hit 'done' without specifying files
    end
    if isnumeric(files)
        error('Files not specified') % would happen if you hit cancel button
    end
    %%
    for f = 1:length(files)
        load(char(files(f)))
        [~,filename,~] = fileparts(char(files(f)));
        if ~exist('Results','var')
            error('Could not find variable "Results." Check input file.')
        end
        
        FIELDS = fields(Results); % for IV analysis
        if ismember('Equation',FIELDS) % only true for IV analysis
            x = Results.I;
            y = Results.V;
            xmm = round(max(abs(x)));
            ymm = round(max(abs(y)));
            % Set up fittype and options.
            ft = fittype( 'poly1' );
            opts = fitoptions( ft );
            opts.Lower = [-Inf -Inf];
            opts.Upper = [Inf Inf];
            % Fit model to data.
            [fitresult, gof] = fit( x, y, ft, opts );
            coeffvals = coeffvalues(fitresult);
            m = coeffvals(1,1);
            b = coeffvals(1,2);
            text = sprintf('%g*x + %g',m,b);
            figure, scatter(x,y,'filled')
            hold on
            h = plot( fitresult, x, y );
            legend( h, 'V vs. I', 'Linear Fit', 'Location', 'NorthEast' );  
            xlim([-xmm xmm])
            ylim([-ymm ymm])
            xlabel('Current (pA)');
            ylabel('Voltage (mV)');
            axescenter
            set(gcf,'toolbar','figure')
            uicontrol('Style','text','Position',[100 350 150 20],'String',text)
            legend('off')
            title(sprintf('File:%s',filename))
        else
            for sweep = 1:length(Results)
                FIELDS = fields(Results(sweep));          
                data = Results(sweep).data;
                si = Results(sweep).SI;

                A = {'peak_idx','peak_amplitudes','threshold_index','threshold_amplitude','FastAHP_Time','FastAHP_Voltage'};
                B = {'peak_idx','peak_amplitudes','threshold_index','threshold_amplitude','FastAHP_Time','FastAHP_Voltage','AHPstart_time',...
                    'baseline_potential','AHPend_time','AHPpeak_negative_idx','Tau_time','Tau_amplitude'};
                C = {'AHPstart_time','baseline_potential','AHPend_time','Tau_time','Tau_amplitude'};
                D = {'peak_idx','peak_amplitudes','threshold_index','threshold_amplitude','FastAHP_Time','FastAHP_Voltage','AHPstart_time',...
                    'baseline_potential','AHPend_time','AHPpeak_negative_idx','Tau_time','Tau_amplitude','ADPpeak_idx','ADPend_time','ADPpeak_amplitude'};

                if length(unique(ismember(A,FIELDS))) == 1 && ~ismember('Tau_time',FIELDS) % for accommodation
                    loc = Results(sweep).peak_idx;
                    pks = Results(sweep).peak_amplitudes;
                    thresholdidx = Results(sweep).threshold_index;
                    thresholdamp = Results(sweep).threshold_amplitude;
                    FAHPidx = Results(sweep).FastAHP_Time/(si/1000);
%                     FAHPidx = str2double(sprintf('%16.f',FAHPidx));
                    FAHPamp = Results(sweep).FastAHP_Voltage;

                    f = figure;
                    zoomplot(data,(si/1000));
                    hold on
                    plot(1:length(data),data,'b',loc,pks,'r*')
                    plot(1:length(data),data,'b',thresholdidx,thresholdamp,'m*')
                    plot(FAHPidx,FAHPamp,'g.')
                    xlabel('Time (ms)')
                    ylabel('Voltage (mV)')
                    title(sprintf('Sweep %g File:%s',sweep,filename))
                    xlim([0 length(data)])                    
                elseif length(unique(ismember(B,FIELDS))) == 1  && ismember('Tau_time',FIELDS) && ~ismember('ADPpeak_idx',FIELDS) % for full AHP
                    loc = Results(sweep).peak_idx;
                    pks = Results(sweep).peak_amplitudes;
                    thresholdidx = Results(sweep).threshold_index;
                    thresholdamp = Results(sweep).threshold_amplitude;
                    FAHPidx = Results(sweep).FastAHP_Time/(si/1000);
%                     FAHPidx = str2double(sprintf('%16.f',FAHPidx));
                    FAHPamp = Results(sweep).FastAHP_Voltage;
                    AHPstart_idx = Results(sweep).AHPstart_time/(si/1000);
                    AHPstart_idx = str2double(sprintf('%16.f',AHPstart_idx));
                    bl = Results(sweep).baseline_potential;
                    AHPend_idx = Results(sweep).AHPend_time/(si/1000);
                    AHPend_idx = str2double(sprintf('%16.f',AHPend_idx));
                    AHPpeak_idx = Results(sweep).AHPpeak_negative_idx;
                    AHPtau_idx = Results(sweep).Tau_time/(si/1000);
                    AHPtau_idx = str2double(sprintf('%16.f',AHPtau_idx));
                    AHPtau_amp = Results(sweep).Tau_amplitude;

                    f = figure;
                    zoomplot(data,(si/1000));
                    hold on
                    plot(1:length(data),data,'b',loc,pks,'r*')
                    plot(1:length(data),data,'b',thresholdidx,thresholdamp,'m*')
                    plot(FAHPidx,FAHPamp,'g.')
                    xlabel('Time (ms)')
                    ylabel('Voltage (mV)')
                    if sweep == length(Results)
                        title(sprintf('Mean Sweep File:%s',filename))     
                    else
                        title(sprintf('Sweep %g File:%s',sweep,filename))     
                    end
                    blline = zeros(1,length(data));
                    blline(:) = Results(sweep).baseline_potential;
                    xx = zeros(1,length(data));
                    xx(1,AHPstart_idx) = min(get(gca,'ylim')); %-100;
                    plot(blline)
                    bar(xx)
                    blline = zeros(1,length(data));
                    blline(:) = bl;
                    xx = zeros(1,length(data));
                    xx(1,AHPend_idx) = min(get(gca,'ylim')); %-100;
                    plot(blline)
                    bar(xx)
                    xx = zeros(1,length(data));
                    xx(1,AHPpeak_idx) = min(get(gca,'ylim')); % -100;
                    bar(xx,'edgecolor','k','facecolor','k')
                    blline = zeros(1,length(data));
                    blline(:) = AHPtau_amp;
                    xx = zeros(1,length(data));
                    xx(1,AHPtau_idx) = min(get(gca,'ylim'));%  -100;
                    plot(blline,'r')
                    bar(xx,'edgecolor','r','facecolor','r')
                    xlim([0 length(data)])
                elseif length(unique(ismember(C,FIELDS))) == 1   && ~ismember('peak_idx',FIELDS) % for AHP only
                    AHPstart_idx = Results(sweep).AHPstart_time/(si/1000);
                    AHPstart_idx = str2double(sprintf('%16.f',AHPstart_idx));
                    bl = Results(sweep).baseline_potential;
                    AHPend_idx = Results(sweep).AHPend_time/(si/1000);
                    AHPend_idx = str2double(sprintf('%16.f',AHPend_idx));
                    AHPpeak_idx = Results(sweep).AHPpeak_negative_time;
                    AHPpeak_idx = str2double(sprintf('%16.f',AHPpeak_idx));
                    AHPtau_idx = Results(sweep).Tau_time/(si/1000);
                    AHPtau_idx = str2double(sprintf('%16.f',AHPtau_idx));
                    AHPtau_amp = Results(sweep).Tau_amplitude;

                    f = figure;
                    zoomplot(data,(si/1000));
                    hold on
                    xlabel('Time (ms)')
                    ylabel('Voltage (mV)')
                    if sweep == length(Results)
                        title(sprintf('Mean Sweep File:%s',filename))     
                    else
                        title(sprintf('Sweep %g File:%s',sweep,filename))     
                    end      
                    blline = zeros(1,length(data));
                    blline(:) = Results(sweep).baseline_potential;
                    xx = zeros(1,length(data));
                    xx(1,AHPstart_idx) = min(get(gca,'ylim')); %-100;
                    plot(blline)
                    bar(xx)
                    blline = zeros(1,length(data));
                    blline(:) = bl;
                    xx = zeros(1,length(data));
                    xx(1,AHPend_idx) = min(get(gca,'ylim')); %-100;
                    plot(blline)
                    bar(xx)
                    xx = zeros(1,length(data));
                    xx(1,AHPpeak_idx) = min(get(gca,'ylim')); % -100;
                    bar(xx,'edgecolor','k','facecolor','k')
                    blline = zeros(1,length(data));
                    blline(:) = AHPtau_amp;
                    xx = zeros(1,length(data));
                    xx(1,AHPtau_idx) = min(get(gca,'ylim'));%  -100;
                    plot(blline,'r')
                    bar(xx,'edgecolor','r','facecolor','r')
                    xlim([0 length(data)])
            elseif length(unique(ismember(D,FIELDS))) == 1   % for AP analysis
                    loc = Results(sweep).peak_idx;
                    pks = Results(sweep).peak_amplitudes;
                    thresholdidx = Results(sweep).threshold_index;
                    thresholdamp = Results(sweep).threshold_amplitude;
                    FAHPidx = Results(sweep).FastAHP_Time/(si/1000);
%                     FastAHP_Time = str2double(sprintf('%16.f',FastAHP_Time))
                    FAHPamp = Results(sweep).FastAHP_Voltage;
                    AHPstart_idx = Results(sweep).AHPstart_time/(si/1000);
                    AHPstart_idx = str2double(sprintf('%16.f',AHPstart_idx));
                    bl = Results(sweep).baseline_potential;
                    AHPend_idx = Results(sweep).AHPend_time/(si/1000);
                    AHPend_idx = str2double(sprintf('%16.f',AHPend_idx));
                    AHPpeak_idx = Results(sweep).AHPpeak_negative_idx;
                    AHPtau_idx = Results(sweep).Tau_time/(si/1000);
                    AHPtau_idx = str2double(sprintf('%16.f',AHPtau_idx));
                    AHPtau_amp = Results(sweep).Tau_amplitude;
                    ADPend_idx = Results(sweep).ADPend_time/(si/1000);
                    ADPend_idx = str2double(sprintf('%16.f',ADPend_idx));
                    ADPpeak_idx = Results(sweep).ADPpeak_idx;
                    ADPpeak_amp = Results(sweep).ADPpeak_amplitude;

                    f = figure;
                    zoomplot(data,(si/1000));
                    hold on
                    plot(1:length(data),data,'b',loc,pks,'r*')
                    plot(1:length(data),data,'b',thresholdidx,thresholdamp,'m*')
                    plot(FAHPidx,FAHPamp,'g.')
                    xlabel('Time (ms)')
                    ylabel('Voltage (mV)')
                    title(sprintf('Sweep %g File:%s',sweep,filename))               
                    blline = zeros(1,length(data));
                    blline(:) = Results(sweep).baseline_potential;
                    xx = zeros(1,length(data));
                    xx(1,AHPstart_idx) = min(get(gca,'ylim')); %-100;
                    plot(blline)
                    bar(xx)
                    blline = zeros(1,length(data));
                    blline(:) = bl;
                    xx = zeros(1,length(data));
                    xx(1,AHPend_idx) = min(get(gca,'ylim')); %-100;
                    plot(blline)
                    bar(xx)
                    xx = zeros(1,length(data));
                    xx(1,AHPpeak_idx) = min(get(gca,'ylim')); % -100;
                    bar(xx,'edgecolor','k','facecolor','k')
                    blline = zeros(1,length(data));
                    blline(:) = AHPtau_amp;
                    xx = zeros(1,length(data));
                    xx(1,AHPtau_idx) = min(get(gca,'ylim'));%  -100;
                    plot(blline,'r')
                    bar(xx,'edgecolor','r','facecolor','r')
                    ADPpeakline = zeros(1,length(data));
                    ADPpeakline(:) = ADPpeak_amp;
                    xx = zeros(1,length(data));
                    xx(1,ADPpeak_idx) = min(get(gca,'ylim')); %-100; 
                    plot(ADPpeakline,'c')
                    bar(xx,'edgecolor','c','facecolor','c')
                    xlim([0 length(data)])
                else
                    error('Unknown analysis output')
                end
            end
        end
    end
end
%             elseif length(unique(ismember({'peak_idx','peak_amplitudes','threshold_index','threshold_amplitude','FastAHP_Time','FastAHP_Voltage'},FIELDS))) == 1
back to top