CB-Frequency-Coding-of-Motor-Kinematics / Supporting Functions / F_load_Ephys_data.m
F_load_Ephys_data.m
Raw
%% Modified from Apub_NSx_CohPSD_vb11_OpenEphys_Accelerator_MultiChannels
%  keep the loading part and Acc part only

function [res,para]=F_load_Ephys_data(para)
    %% Main function %%%%%%%%%%
    file=para.Ephys.EphysFile;
    %%%%%%%%%% Check error %%%%%%%%%%%%%%%%%%%%
    if para.Ephys.Highcut >250;
        error('Highcut is above 250 Hz');
    end
    %%%%%%%%  Load NSx data (BlackRock of OpenEphys) %%%%%%%%%%%%%%%%%%%%%%
    if para.Ephys.DataSource==1
    %[GetFileName GetFilePath]=uigetfile('*.ns*'); % get filename and path
    NSx=openNSx(file);
    end
    if para.Ephys.DataSource==2
    [NSx,EphysToMat]=Afun_OpenephysToNSx_v2(0,0,0);
    GetFilePath=[pwd '\']; % pwd is matlab intrinsic code for current path
    end

    if para.Ephys.DataSource==3
    NSx=openOpE(file);
    GetFilePath=NSx.MetaTags.OpenEphysFilePath;% get the source file path of openEphys settings.xml
    NSx.MetaTags.Filename=['o',NSx.MetaTags.OpenEphysFilePath(end-19:end-1)];
    GetFileName=NSx.MetaTags.Filename;
    end

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%AUX904%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    if para.Ephys.Accelerator_RMS==1
        %find channel
        Accelerator_ID=[]
        for i=1:length(NSx.ElectrodesInfo);
            for j=1:length(para.Ephys.Accelerator_Channel); %usually 1:3
                if NSx.ElectrodesInfo(i).ElectrodeID== para.Ephys.Accelerator_Channel(j)
                    Accelerator_ID=[Accelerator_ID i];
                end
            end
        end

        k=i+1; %number of new electrodes info

        NSx.ElectrodesInfo(k)=NSx.ElectrodesInfo(Accelerator_ID(1));
        NSx.ElectrodesInfo(k).ElectrodeID=904;
        NSx.ElectrodesInfo(k).Label='Accelerator_RMS';
        NSx.ElectrodesInfo(k).ConnectorPin=4;
        disp('ya');
        NSx.Data(k,:)=rms([NSx.Data(Accelerator_ID(1),:);NSx.Data(Accelerator_ID(2),:);NSx.Data(Accelerator_ID(3),:)],1);
        NSx.MetaTags.ChannelID(k,1)=904;
    end
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    SourceFile=[NSx.MetaTags.Filename NSx.MetaTags.FileExt];
    data=double(NSx.Data');
    NSx=rmfield(NSx,'Data'); 
    fs=double(NSx.MetaTags.SamplingFreq);
    para.Ephys.fs_Original=fs;
    para.Ephys.NSx.MetaTags=NSx.MetaTags;
    para.Ephys.NSx.ElectrodesInfo=NSx.ElectrodesInfo;
    for i =1:length(para.Ephys.ChSig)
        ChannelSignal=find(NSx.MetaTags.ChannelID==para.Ephys.ChSig(i));
        if para.Ephys.ChRef(i)==0; ChannelRef=0; 
        else ChannelRef=find(NSx.MetaTags.ChannelID==para.Ephys.ChRef(i));
        end
        %%% Trim data %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        if para.Ephys.Timecut~=0;
        data=data(para.Ephys.TrimStartTime*fs+1:para.Ephys.TrimStopTime*fs,:);
        end;
        %%% Assign channel %%%
        if ChannelRef==0;
            Signal=data(:,ChannelSignal);
        else
            Signal=data(:,ChannelSignal)-data(:,ChannelRef);
        end
        %% Down Sampling Data (use decimate)
        if para.Ephys.DownSampling==2;
            Signal=decimate(Signal,fs/para.Ephys.DownSamplingFreq,63,'fir');
            para.Ephys.fs=para.Ephys.DownSamplingFreq;
        end
            %%% Filtering Data (optional) %%%%%%%%%%%
        if para.Ephys.Filter==1;
           if max(ismember([para.Ephys.ChSig,para.Ephys.ChRef],para.Ephys.ChannelNotFilter))==0; % filter if ChSig1 and ChRef1 both not in the "nofilter channel" 
                if para.Ephys.HIGHPASS==1
                  Signal=highpass(Signal,para.Ephys.Lowcut,para.Ephys.fs);
                end
                Signal=A_applyfilter3(Signal,fs,para.Ephys.Lowcut,para.Ephys.Highcut,para.Ephys.FilterOrder);
           end
        end
        res.Ephys.Signal{i,3}=Signal;
        res.Ephys.Signal{i,1}=para.Ephys.ChSig(i);
        res.Ephys.Signal{i,2}=para.Ephys.ChRef(i);
    end
end