⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wave_clus.m

📁 wave cluster for biomedical signal proce
💻 M
📖 第 1 页 / 共 3 页
字号:
function varargout = wave_clus(varargin)% WAVE_CLUS M-file for wave_clus.fig%      WAVE_CLUS, by itself, creates a new WAVE_CLUS or raises the existing%      singleton*.%%      H = WAVE_CLUS returns the handle to a new WAVE_CLUS or the handle to%      the existing singleton*.%%      WAVE_CLUS('Property','Value',...) creates a new WAVE_CLUS using the%      given property value pairs. Unrecognized properties are passed via%      varargin to wave_clus_OpeningFcn.  This calling syntax produces a%      warning when there is an existing singleton*.%%      WAVE_CLUS('CALLBACK') and WAVE_CLUS('CALLBACK',hObject,...) call the%      local function named CALLBACK in WAVE_CLUS.M with the given input%      arguments.%%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one%      instance to run (singleton)".%% See also: GUIDE, GUIDATA, GUIHANDLES% Edit the above text to modify the response to help wave_clus% Last Modified by GUIDE v2.5 02-Feb-2005 20:30:47% Begin initialization code - DO NOT EDITgui_Singleton = 1;gui_State = struct('gui_Name',       mfilename, ...                   'gui_Singleton',  gui_Singleton, ...                   'gui_OpeningFcn', @wave_clus_OpeningFcn, ...                   'gui_OutputFcn',  @wave_clus_OutputFcn, ...                   'gui_LayoutFcn',  [], ...                   'gui_Callback',   []);if nargin & isstr(varargin{1})    gui_State.gui_Callback = str2func(varargin{1});endif nargout    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});else    gui_mainfcn(gui_State, varargin{:});end% End initialization code - DO NOT EDIT% --- Executes just before wave_clus is made visible.function wave_clus_OpeningFcn(hObject, eventdata, handles, varargin)% This function has no output args, see OutputFcn.% hObject    handle to figure% eventdata  reserved - to be defined in a future version of MATLAB% handles    structure with handles and user data (see GUIDATA)% varargin   unrecognized PropertyName/PropertyValue pairs from the%            command line (see VARARGIN)% Choose default command line output for wave_clushandles.output = hObject;handles.datatype ='CSC data (pre-clustered)';set(handles.isi1_accept_button,'value',1);set(handles.isi2_accept_button,'value',1);set(handles.isi3_accept_button,'value',1);set(handles.spike_shapes_button,'value',1);set(handles.force_button,'value',0);set(handles.plot_all_button,'value',1);set(handles.plot_average_button,'value',0);set(handles.fix1_button,'value',0);set(handles.fix2_button,'value',0);set(handles.fix3_button,'value',0);% Update handles structureguidata(hObject, handles);% UIWAIT makes wave_clus wait for user response (see UIRESUME)% uiwait(handles.figure1);% --- Outputs from this function are returned to the command line.function varargout = wave_clus_OutputFcn(hObject, eventdata, handles)% varargout  cell array for returning output args (see VARARGOUT);% hObject    handle to figure% eventdata  reserved - to be defined in a future version of MATLAB% handles    structure with handles and user data (see GUIDATA)% Get default command line output from handles structurevarargout{1} = handles.output;clus_colors = [0 0 1; 1 0 0; 0 0.5 0; 0 0.75 0.75; 0.75 0 0.75; 0.75 0.75 0; 0.25 0.25 0.25];set(0,'DefaultAxesColorOrder',clus_colors)% --- Executes on button press in load_data_button.function load_data_button_Callback(hObject, eventdata, handles)set(handles.isi1_accept_button,'value',1);set(handles.isi2_accept_button,'value',1);set(handles.isi3_accept_button,'value',1);set(handles.isi1_reject_button,'value',0);set(handles.isi2_reject_button,'value',0);set(handles.isi3_reject_button,'value',0);set(handles.isi1_nbins,'string','Auto');set(handles.isi1_bin_step,'string','Auto');set(handles.isi2_nbins,'string','Auto');set(handles.isi2_bin_step,'string','Auto');set(handles.isi3_nbins,'string','Auto');set(handles.isi3_bin_step,'string','Auto');set(handles.isi0_nbins,'string','Auto');set(handles.isi0_bin_step,'string','Auto');set(handles.force_button,'value',0);set(handles.force_button,'string','Force');set(handles.fix1_button,'value',0);set(handles.fix2_button,'value',0);set(handles.fix3_button,'value',0);pack;switch char(handles.datatype)    case 'Simulator'          [filename, pathname] = uigetfile('C_*.mat','Select file');        set(handles.file_name,'string',['Loading:    ' pathname filename]);        cd(pathname);        load([pathname filename]);                      %Load data        x.data=data;        x.sr=1000./samplingInterval;                handles.par = set_parameters_simulation(x.sr,filename,handles);     % Load parameters        set(handles.min_clus_edit,'string',num2str(handles.par.min_clus));        [spikes,thr,index] = amp_detect_wc(x.data,handles);     % Detection with amp. thresh.        [inspk] = wave_features_wc(spikes,handles);             % Extract spike features.                %Interaction with SPC        set(handles.file_name,'string','Running SPC ...');        handles.par.fname_in = 'tmp_data';        fname_in = handles.par.fname_in;        save([fname_in],'inspk','-ascii');                      %Input file for SPC        handles.par.fname = [handles.par.fname '_wc'];          %Output filename of SPC        handles.par.fnamespc = handles.par.fname;        handles.par.fnamesave = handles.par.fnamespc;        [clu,tree] = run_cluster(handles);        USER_DATA = get(handles.wave_clus_figure,'userdata');        USER_DATA{4} = clu;        USER_DATA{5} = tree;        USER_DATA{7} = inspk;        set(handles.wave_clus_figure,'userdata',USER_DATA)            case 'CSC data'                                              %neuralynks (CSC files)        [filename, pathname] = uigetfile('*.Ncs','Select file');        set(handles.file_name,'string',['Loading:    ' pathname filename]);        cd(pathname);        if length(filename) == 8            channel = filename(4);        else            channel = filename(4:5);        end        f=fopen(filename,'r','l');        fseek(f,16384,'bof');                                     %Skip Header, put pointer to the first record        TimeStamps=fread(f,inf,'int64',(4+4+4+2*512));            %Read all TimeStamps        fseek(f,16384+8+4+4+4,'bof');                             %put pointer to the beginning of data        time0 = TimeStamps(1);         timeend = TimeStamps(end);        delta_time=(TimeStamps(2)-TimeStamps(1));        sr = 512*1e6/delta_time;        handles.par = set_parameters_CSC(sr,filename,handles);     % Load parameters        set(handles.min_clus_edit,'string',num2str(handles.par.min_clus));                %Load continuous data         if strcmp(handles.par.tmax,'all')                          %Loads all data            index_all=[];            spikes_all=[];            lts = length(TimeStamps);            %Segments the data in par.segments pieces            handles.par.segments = ceil((timeend - time0) / ...                (handles.par.segments_length * 1e6 * 60));         %number of segments in which data is cutted            segmentLength = floor (lts/handles.par.segments);            tsmin = 1 : segmentLength :lts;            tsmin = tsmin(1:handles.par.segments);            tsmax = tsmin - 1;            tsmax = tsmax (2:end);            tsmax = [tsmax, lts];            recmax=tsmax;	        recmin=tsmin;            tsmin = TimeStamps(int64(tsmin));            tsmax = TimeStamps(int64(tsmax));            for j=1:length(tsmin)                                Samples=fread(f,512*(recmax(j)-recmin(j)+1),'512*int16=>int16',8+4+4+4);                x=double(Samples(:))';                clear Samples;                               %GETS THE GAIN AND CONVERTS THE DATA TO MICRO V.                eval(['scale_factor=textread(''CSC' num2str(channel) '.Ncs'',''%s'',41);']);                x=x*str2num(scale_factor{41})*1e6;                                handles.flag = j;                                   %flag for plotting only in the 1st loop                [spikes,thr,index]  = amp_detect_wc(x,handles);     %detection with amp. thresh.                index = index*1e6/sr+tsmin(j);                index_all = [index_all index];                spikes_all = [spikes_all; spikes];            end            index = (index_all-time0)/1000;            spikes = spikes_all;            USER_DATA = get(handles.wave_clus_figure,'userdata');            USER_DATA{2}=spikes;            USER_DATA{3}=index;            set(handles.wave_clus_figure,'userdata',USER_DATA);        else                                                        %Loads a data segment            tsmin = time0 + handles.par.tmin*1e6;                   %min time to read (in micro-sec)            tsmax = time0 + handles.par.tmax*1e6;                   %max time to read (in micro-sec)            index_tinitial = find(tsmin > TimeStamps);            if isempty(index_tinitial) ==1;                index_tinitial = 0;            else                index_tinitial = index_tinitial(end);            end                index_tfinal = find(tsmax < TimeStamps);            if isempty(index_tfinal) ==1;                index_tfinal = timeend;            else                index_tfinal = index_tfinal(1);            end                fseek(f,16384+8+4+4+4+index_tinitial,'bof');            %put pointer to the correct time            Samples=fread(f,512*(index_tfinal-index_tinitial+1),'512*int16=>int16',8+4+4+4);            x=double(Samples(:))';            clear Samples;            [spikes,thr,index] = amp_detect_wc(x,handles);          %Detection with amp. thresh.        end        fclose(f);        [inspk] = wave_features_wc(spikes,handles);                 %Extract spike features.                if handles.par.match == 'y';            naux = min(handles.par.max_spk,size(inspk,1));            inspk_aux = inspk(1:naux,:);        else            inspk_aux = inspk;        end                    %Interaction with SPC        set(handles.file_name,'string','Running SPC ...');        fname_in = handles.par.fname_in;        save([fname_in],'inspk_aux','-ascii');                      %Input file for SPC        handles.par.fnamesave = [handles.par.fname '_ch' ...                num2str(channel)];                                  %filename if "save clusters" button is pressed        handles.par.fname = [handles.par.fname '_wc'];              %Output filename of SPC         handles.par.fnamespc = handles.par.fname;        [clu,tree] = run_cluster(handles);        USER_DATA = get(handles.wave_clus_figure,'userdata');        USER_DATA{4} = clu;        USER_DATA{5} = tree;        USER_DATA{7} = inspk;        set(handles.wave_clus_figure,'userdata',USER_DATA)                    case 'CSC data (pre-clustered)'                                 %neuralynks (CSC files)        [filename, pathname] = uigetfile('*.Ncs','Select file');        set(handles.file_name,'string',['Loading:    ' pathname filename]);        cd(pathname);        if length(filename) == 8            channel = filename(4);        else            channel = filename(4:5);        end        f=fopen(filename,'r','l');        fseek(f,16384,'bof');                                       %Skip Header, put pointer to the first record        TimeStamps=fread(f,inf,'int64',(4+4+4+2*512));              %Read all TimeStamps        time0 = TimeStamps(1);         timeend = TimeStamps(end);        sr = 512*1e6/(TimeStamps(2)-TimeStamps(1));        clear TimeStamps;        handles.par = set_parameters_CSC(sr,filename,handles);      %Load parameters        set(handles.min_clus_edit,'string',num2str(handles.par.min_clus));                %Load spikes and parameters        eval(['load times_CSC' num2str(channel) ';']);        index=cluster_class(:,2)';        %Load clustering results        fname = [handles.par.fname '_ch' num2str(channel)];         %filename for interaction with SPC        clu=load([fname '.dg_01.lab']);        tree=load([fname '.dg_01']);        handles.par.fnamespc = fname;        handles.par.fnamesave = handles.par.fnamespc;        USER_DATA = get(handles.wave_clus_figure,'userdata');        USER_DATA{2} = spikes;        USER_DATA{3} = index;        USER_DATA{4} = clu;        USER_DATA{5} = tree;        if exist('inspk');            USER_DATA{7} = inspk;        end        set(handles.wave_clus_figure,'userdata',USER_DATA)         % LOAD CSC DATA (for plotting)        fseek(f,16384+8+4+4+4,'bof');                               %put pointer to the beginning of data        Samples=fread(f,ceil(sr*60),'512*int16=>int16',8+4+4+4);          x=double(Samples(:))';        clear Samples;         fclose(f);        %GETS THE GAIN AND CONVERTS THE DATA TO MICRO V.        eval(['scale_factor=textread(''CSC' num2str(channel) '.Ncs'',''%s'',41);']);        x=x*str2num(scale_factor{41})*1e6;        [spikes,thr,index] = amp_detect_wc(x,handles);              %Detection with amp. thresh.           case 'Sc data'        [filename, pathname] = uigetfile('*.Nse','Select file');        set(handles.file_name,'string',['Loading:    ' pathname filename]);        cd(pathname);        if length(filename) == 7            channel = filename(3);        else            channel = filename(3:4);        end        eval(['[index, Samples] = Nlx2MatSE(''Sc' num2str(channel) '.Nse'',1,0,0,0,1,0);']);        spikes(:,:)= Samples(:,1,:); clear Samples; spikes = spikes';        handles.par = set_parameters_Sc(filename,handles);          %Load parameters        set(handles.min_clus_edit,'string',num2str(handles.par.min_clus));        axes(handles.cont_data); cla                [inspk] = wave_features_wc(spikes,handles);                 %Extract spike features.        if handles.par.match == 'y';            naux = min(handles.par.max_spk,size(inspk,1));            inspk_aux = inspk(1:naux,:);        else            inspk_aux = inspk;        end                    %Interaction with SPC        set(handles.file_name,'string','Running SPC ...');        handles.par.fname_in = 'tmp_data';        fname_in = handles.par.fname_in;        save([fname_in],'inspk','-ascii');                         %Input file for SPC        handles.par.fnamesave = [handles.par.fname '_ch' ...                num2str(channel)];                                 %filename if "save clusters" button is pressed        handles.par.fname = [handles.par.fname '_wc'];             %Output filename of SPC        handles.par.fnamespc = handles.par.fname;        [clu,tree] = run_cluster(handles);        USER_DATA = get(handles.wave_clus_figure,'userdata');        USER_DATA{2} = spikes;        USER_DATA{3} = index/1000;        USER_DATA{4} = clu;        USER_DATA{5} = tree;        USER_DATA{7} = inspk;        set(handles.wave_clus_figure,'userdata',USER_DATA)            case 'Sc data (pre-clustered)'        [filename, pathname] = uigetfile('*.Nse','Select file');        set(handles.file_name,'string',['Loading:    ' pathname filename]);        cd(pathname);        if length(filename) == 7            channel = filename(3);        else            channel = filename(3:4);        end        eval(['[index, Samples] = Nlx2MatSE(''Sc' num2str(channel) '.Nse'',1,0,0,0,1,0);']);        spikes(:,:)= Samples(:,1,:); clear Samples; spikes = spikes';        handles.par = set_parameters_Sc(filename,handles);          %Load parameters        set(handles.min_clus_edit,'string',num2str(handles.par.min_clus));        axes(handles.cont_data); cla        %Load clustering results        fname = [handles.par.fname '_ch' num2str(channel)];         %filename for interaction with SPC        clu=load([fname '.dg_01.lab']);        tree=load([fname '.dg_01']);        handles.par.fnamespc = fname;        handles.par.fnamesave = handles.par.fnamespc;         USER_DATA = get(handles.wave_clus_figure,'userdata');        USER_DATA{2} = spikes;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -