Revision d4891b3428d062f9e4bf86805fe054ed1ce79674 authored by btenner on 26 October 2020, 06:39:25 UTC, committed by GitHub on 26 October 2020, 06:39:25 UTC
1 parent 707c9bf
Raw File
phase_shift.m
%%Organizes min6 traces from excel file from ImageAnalyzer

function data = phase_shift(conglom_data,interest)

    num_cells = round((size(conglom_data,2)-1)/7); %num of cells - assuming channels in IA
    num_timepoints = size(conglom_data,1); %num of time points

    data = struct;
    data.time = conglom_data(:,1);
    data.cfp_direct = conglom_data(:,2:num_cells+1);
    data.yfpfret = conglom_data(:,num_cells+2:2*num_cells+1);
    data.yfp_direct = conglom_data(:,2*num_cells+2:3*num_cells+1);
    data.FRET = conglom_data(:,3*num_cells+2:4*num_cells+1);
    data.FRET_norm = conglom_data(:,4*num_cells+2:5*num_cells+1);
    data.rfp = conglom_data(:,5*num_cells+2:6*num_cells+1);
    data.rfp_norm = conglom_data(:,6*num_cells+2:end);
    
    phase = [];
    strength = [];
    regularity = [];

    %rfp_lpfilt = data.rfp_norm(:,interest) - filter((1/10)*ones(1,10),1,data.rfp_norm(:,interest));
    %rfp_corrected = data.rfp_norm - repmat(mean(data.rfp_norm(1:8,:)),size(data.rfp_norm,1),1);
    %fret_corrected = data.FRET_norm - repmat(mean(data.FRET_norm(1:8,:)),size(data.rfp_norm,1),1);
    
    %high-pass filter calcium and fret
    rfp_corrected = data.rfp_norm - reshape(smooth(data.rfp_norm,20),size(data.rfp_norm));
    fret_corrected = data.FRET_norm - reshape(smooth(data.FRET_norm,20),size(data.rfp_norm));
    
    %normalize calcium and fret so max = 1
    rfp_corrected = rfp_corrected./repmat(max(rfp_corrected),size(rfp_corrected,1),1);
    fret_corrected = fret_corrected./repmat(max(fret_corrected),size(fret_corrected,1),1);
    
    %just needed to put quest dialog
    figure
    fprintf('Move figure away from the center of the screen then press enter... \n')
    pause
        
    %loop through each cell
    for i=1:size(rfp_corrected,2)
        
        %calculate cross corr between calcium and fret
        [acor,lag] = xcorr(rfp_corrected(6:end,i),fret_corrected(6:end,i)); %calculate autocorrelation between rfp sig and fret sig
        
        %redefine lag and acor so that we only look at 40 time-frame window
        lag = lag(ceil(end/2)-20:ceil(end/2)+20);
        acor = acor(ceil(end/2)-20:ceil(end/2)+20);
        
        %peak pick - change prom if necessary
        [pks,locs] = findpeaks(acor/max(acor),lag,'MinPeakProminence',0.7); % find the peaks of the xcorr
        
        disp(i)
        plotyy(data.time,data.FRET_norm(:,i),data.time,data.rfp_norm(:,i));
        
%         figure;
%         subplot(1,3,1);
%         plotyy(data.time,data.FRET_norm(:,i),data.time,data.rfp_norm(:,i));
%         subplot(1,3,2);
%         plotyy(data.time,fret_corrected(:,i),data.time,rfp_corrected(:,i));
%         subplot(1,3,3);
%         plot(lag,acor);
%         findpeaks(acor/max(acor),lag,'MinPeakProminence',0.7);
        
        %locs
        if ~isempty(min(abs(locs)))
            phase(1,i) = min(abs(locs));
            strength(1,i) = max(acor);
        else
            phase(1,i) = NaN;
            strength(1,i) =NaN;
        end
        
        questStr = 'What is this cells phase relationship?';
        choice = questdlg(questStr, 'Choose One','In-phase','Out-of-phase','Inconcl','Inconcl');
    
        switch choice
            case 'In-phase'   
                phase(2,i) = 1;
            case 'Out-of-phase'
                phase(2,i) = 2;
            case 'Inconcl'
                phase(2,i) = 3;
        end
        
        questStr = 'Is this cell responding (calcium)?';
        choice = questdlg(questStr, 'Choose One','Regular','Irregular','No','No');
    
        switch choice
            case 'Regular'
                regularity(1,i) = 1;
            case 'Irregular'
                regularity(1,i) = 2;
            case 'No'
                regularity(1,i) = 3;
        end
        
%         figure;
%         plotyy(data.time,fret_corrected(:,i),data.time,rfp_corrected(:,i));
        
    end
    
    data.phase = phase;
    data.strength = strength;
    data.regularity = regularity;
    
    close all
end
back to top