📄 if_gui.m
字号:
draw_SNR(tf/1000,t/1000,stimulus.param2,sigma,cumulative);
end;
if(drawpower)
if(membrane.type == 2) omega = membrane.C; else omega = stimulus.param2; end;
draw_power(tf/1000,t/1000,omega,cumulative);
end;
end;
function y = Iext_step(t,stimulus)
y = (t>stimulus.param3)*(t<stimulus.param3+stimulus.param2)*stimulus.param1;
function y = Iext_sine(t,stimulus)
y = stimulus.param3 + stimulus.param1*sin(2*pi*stimulus.param2*t/1000);
function y = Iext_uspike(t,stimulus,dt,C)
%y = -stimulus.param1*log(rand(1))/stimulus.param2 + stimulus.param1*log(rand(1))/stimulus.param2/2 ;
y = C*(stimulus.param1*poissrnd(dt*stimulus.param2) - stimulus.param3*poissrnd(dt*stimulus.param4));
y = y/dt;
function y = FIF(v,tau,C,Iext_func,t,varargin)
y = -v/tau + feval(Iext_func,t,varargin{:})/C;
% --------------------------------------------------------------------
% --------------------------------------------------------------------
function varargout = getparams(handles)
sim = struct('dt', str2num(get(handles.simparam1,'string')), 'duration', str2num(get(handles.simparam2,'string')));
noise = struct('dnoise',get(handles.noiseparam3_check,'value'), 'damp', str2num(get(handles.noiseparam3,'string')),...
'tnoise',get(handles.noiseparam1_check,'value'), 'tamp', str2num(get(handles.noiseparam1,'string')),...
'rnoise',get(handles.noiseparam2_check,'value'), 'ramp', str2num(get(handles.noiseparam2,'string')),...
'enoise',get(handles.noiseparam4_check,'value'), 'eamp', str2num(get(handles.noiseparam4,'string')));
stimtype = get(handles.popup_stimulus,'value');
if((stimtype==1)|(stimtype==2))
stimulus = struct('type',stimtype,...
'param1', str2num(get(handles.param1,'string')),...
'param2', str2num(get(handles.param2,'string')),...
'param3', str2num(get(handles.param3,'string')));
elseif((stimtype==3))
stimulus = struct('type',stimtype,...
'param1', str2num(get(handles.param1,'string')),...
'param2', str2num(get(handles.param2,'string')),...
'param3', str2num(get(handles.param3,'string')),...
'param4', str2num(get(handles.param4,'string')),...
'dt',str2num(get(handles.simparam1,'string')));
end;
model = get(handles.popup_model,'value');
if((model == 1) | (model == 2))
membrane = struct('type',model,...
'R',str2num(get(handles.modelparam2,'string')),...
'C',str2num(get(handles.modelparam1,'string')),...
'vth',str2num(get(handles.modelparam3,'string')),...
'vr',str2num(get(handles.modelparam5,'string')),...
'trefr',str2num(get(handles.modelparam4,'string')));
end;
state = get(handles.vshow_spikes,'checked');
if(strcmp(state,'on')) showspikes(1) = 1; else showspikes(1) = 0; end;
state = get(handles.cshow_spikes,'checked');
if(strcmp(state,'on')) showspikes(2) = 1; else showspikes(2) = 0; end;
state = get(handles.ISI_on,'checked');
if(strcmp(state,'on')) drawISI = 1; else drawISI = 0; end;
state = get(handles.draw_survivor,'checked');
if(strcmp(state,'on')) drawS = 1; else drawS = 0; end;
state = get(handles.draw_power,'checked');
if(strcmp(state,'on')) drawpower = 1; else drawpower = 0; end;
s = get(handles.phase_on,'checked'); if(strcmp(s,'on')) state1 = 1; else state1 = 0; end;
s = get(handles.draw_phase,'enable'); if(strcmp(s,'on')) state2 = 1; else state2 = 0; end;
state = (state1 & state2);
if(state) drawphase = 1; else drawphase = 0; end;
s = get(handles.draw_SNR,'checked'); if(strcmp(s,'on')) state1 = 1; else state1 = 0; end;
s = get(handles.draw_SNR,'enable'); if(strcmp(s,'on')) state2 = 1; else state2 = 0; end;
state = (state1 & state2);
if(state) drawSNR = 1; else drawSNR = 0; end;
varargout = {sim membrane noise stimulus showspikes drawphase drawISI drawS drawSNR drawpower};
% --------------------------------------------------------------------
function varargout = clear_Callback(h, eventdata, handles, varargin)
l = findobj('parent',handles.vaxes); set(l,'erasemode','normal'); delete(l);
l = findobj('parent',handles.Iaxes); set(l,'erasemode','normal');delete(l);
% --------------------------------------------------------------------
function varargout = popup_stimulus_Callback(h, eventdata, handles, varargin)
global STIM_PARAMS;
stimtype = get(h,'value');
switch(stimtype)
case 1 %%STEP PULSE
set(handles.param1_text,'visible','on','string','Amplitude =');
set(handles.param1_units1,'visible','on','string','n'); set(handles.param1_units2,'visible','on','string','A');
set(handles.param1,'visible','on','string',num2str(STIM_PARAMS{stimtype}{1}));
set(handles.param2_text,'visible','on','string','Duration =');
set(handles.param2_units,'visible','on','string','ms');
set(handles.param2,'visible','on','string',num2str(STIM_PARAMS{stimtype}{2}));
set(handles.param3_text,'visible','on','string','Onset time =');
set(handles.param3_units1,'visible','on','string','ms','visible','on','fontname','helvetica'); set(handles.param3_units2,'visible','off');
set(handles.param3,'visible','on','string',num2str(STIM_PARAMS{stimtype}{3}));
set(handles.param4_text,'visible','off');
set(handles.param4_units,'visible','off');
set(handles.param4,'visible','off');
set(handles.noiseparam3_check,'visible','on');
set(handles.noiseparam4_check,'visible','on');
%if(set(handles.noiseparam3_check,'value'))set(handles.noiseparam3_text,'visible','on');end;
%if(set(handles.noiseparam3_check,'value'))set(handles.noiseparam3,'visible','on');end;
set(handles.draw_phase,'enable','off');
set(handles.draw_SNR,'enable','off');
case 2 %%SINE WAVE
set(handles.param1_text,'visible','on','string','Amplitude =');
set(handles.param1_units1,'visible','on','string','n'); set(handles.param1_units2,'visible','on','string','A');
set(handles.param1,'visible','on','string',num2str(STIM_PARAMS{stimtype}{1}));
set(handles.param2_text,'visible','on','string','Frequency =');
set(handles.param2_units,'visible','on','string','Hz');
set(handles.param2,'visible','on','string',num2str(STIM_PARAMS{stimtype}{2}));
set(handles.param3_text,'visible','on','string','DC offset');
set(handles.param3_units1,'visible','on','string','n','visible','on','fontname','helvetica'); set(handles.param3_units2,'visible','on','visible','on');
set(handles.param3,'visible','on','string',num2str(STIM_PARAMS{stimtype}{3}));
set(handles.param4_text,'visible','off');
set(handles.param4_units,'visible','off');
set(handles.param4,'visible','off');
set(handles.noiseparam3_check,'visible','on');
set(handles.noiseparam4_check,'visible','on');
%if(set(handles.noiseparam3_check,'value')) set(handles.noiseparam3_text,'visible','on');end;
%if(set(handles.noiseparam3_check,'value'))set(handles.noiseparam3,'visible','on');end;
set(handles.draw_phase,'enable','on');
set(handles.draw_SNR,'enable','on');
case {3} %PULSE TRAINS
set(handles.param1_text,'visible','on','string','Excitatory amplitude =');
set(handles.param1_units1,'visible','on','string','n'); set(handles.param1_units2,'visible','on','string','A');
set(handles.param1,'visible','on','string',num2str(STIM_PARAMS{stimtype}{1}));
set(handles.param2_text,'visible','on','string','Excitatory rate =');
set(handles.param2_units,'visible','on','string','Hz');
set(handles.param2,'visible','on','string',num2str(STIM_PARAMS{stimtype}{2}));
set(handles.param3_text,'visible','on','string','Inhibitory amplitude =');
set(handles.param3_units1,'visible','on','string','n'); set(handles.param3_units2,'visible','on','string','A');
set(handles.param3,'visible','on','string',num2str(STIM_PARAMS{stimtype}{3}));
set(handles.param4_text,'visible','on','string','Inhibitory rate =');
set(handles.param4_units,'visible','on','string','Hz');
set(handles.param4,'visible','on','string',num2str(STIM_PARAMS{stimtype}{4}));
set(handles.noiseparam3_check,'value',0);
set(handles.noiseparam3_check,'visible','off');
set(handles.noiseparam3_text,'visible','off');
set(handles.noiseparam3,'visible','off');
set(handles.noiseparam4_check,'visible','on');
%set(handles.noiseparam4_text,'visible','on');
%set(handles.noiseparam4,'visible','on');
set(handles.draw_phase,'enable','off');
set(handles.draw_SNR,'enable','off');
end;
% --------------------------------------------------------------------
function varargout = param1_Callback(h, eventdata, handles, varargin)
global STIM_PARAMS;
stimtype = get(handles.popup_stimulus,'value');
newval = str2num(get(h,'string'));
STIM_PARAMS{stimtype}{1} = newval;
% --------------------------------------------------------------------
function varargout = param2_Callback(h, eventdata, handles, varargin)
global STIM_PARAMS;
stimtype = get(handles.popup_stimulus,'value');
newval = str2num(get(h,'string'));
STIM_PARAMS{stimtype}{2} = newval;
% --------------------------------------------------------------------
function varargout = param3_Callback(h, eventdata, handles, varargin)
global STIM_PARAMS;
stimtype = get(handles.popup_stimulus,'value');
newval = str2num(get(h,'string'));
STIM_PARAMS{stimtype}{3} = newval;
% --------------------------------------------------------------------
function param4_Callback(hObject, eventdata, handles)
global STIM_PARAMS;
stimtype = get(handles.popup_stimulus,'value');
newval = str2num(get(h,'string'));
STIM_PARAMS{stimtype}{4} = newval;
% --------------------------------------------------------------------
function varargout = noiseparam1_check_Callback(h, eventdata, handles, varargin)
if(get(handles.noiseparam1_check,'value')) r = 'on'; else r = 'off'; end;
set(handles.noiseparam1_text,'visible',r);
set(handles.noiseparam1,'visible',r);
% --------------------------------------------------------------------
function varargout = noiseparam2_check_Callback(h, eventdata, handles, varargin)
if(get(handles.noiseparam2_check,'value')) r = 'on'; else r = 'off'; end;
set(handles.noiseparam2_text,'visible',r);
set(handles.noiseparam2,'visible',r);
% --------------------------------------------------------------------
function varargout = noiseparam3_check_Callback(h, eventdata, handles, varargin)
if(get(handles.noiseparam3_check,'value')) r = 'on'; else r = 'off'; end;
set(handles.noiseparam3_text,'visible',r);
set(handles.noiseparam3,'visible',r);
% --------------------------------------------------------------------
function noiseparam4_check_Callback(hObject, eventdata, handles)
if(get(handles.noiseparam4_check,'value')) r = 'on'; else r = 'off'; end;
set(handles.noiseparam4_text,'visible',r);
set(handles.noiseparam4,'visible',r);
% --------------------------------------------------------------------
function varargout = noiseparam3_Callback(h, eventdata, handles, varargin)
% --------------------------------------------------------------------
function varargout = noiseparam2_Callback(h, eventdata, handles, varargin)
% --------------------------------------------------------------------
function varargout = noiseparam1_Callback(h, eventdata, handles, varargin)
% --------------------------------------------------------------------
function varargout = slider3_Callback(h, eventdata, handles, varargin)
% --------------------------------------------------------------------
function varargout = options_Callback(h, eventdata, handles, varargin)
% --------------------------------------------------------------------
function varargout = transfer_function_Callback(h, eventdata, handles, varargin)
global NPOINTS_TRANSFER_FUNCTION;
global TRANSFER_FUNCTION_IMAX;
h = findobj('type','figure','tag','transfer_function_figure');
if(isempty(h))
h = figure('tag','transfer_function_figure','name','transfer function','NumberTitle','off');
a = axes;
set(a,'parent',h);
end;
a = findobj('type','axes','parent',h);
if(isempty(a))
a = axes;
set(a,'parent',h);
end;
[sim membrane noise stimulus] = getparams(handles);
Imax = TRANSFER_FUNCTION_IMAX;
dI = Imax/NPOINTS_TRANSFER_FUNCTION;
I = [0:dI:Imax];
r = rate(I,membrane);
figure(h);
hold on;
plot(I,r,'color',rand(1,3),'parent',a);
set(get(a,'xlabel'),'string','input current (uA)');
set(get(a,'ylabel'),'string','firing rate (Hz)');
function r = rate(I,membrane)
switch(membrane.type)
case 1 %Integrate-and-fire model
i = find(I>membrane.vth/membrane.R);
r(find(I<=membrane.R*membrane.vth)) = 0;
r(i) = 1000./(membrane.trefr + membrane.R*membrane.C*log(1 + membrane.vth./(membrane.R*I(i)-membrane.vth)));
end;
% --------------------------------------------------------------------
function varargout = figure1_ResizeFcn(h, eventdata, handles, varargin)
% --------------------------------------------------------------------
function varargout = vshow_spikes_Callback(h, eventdata, handles, varargin)
state = get(handles.vshow_spikes,'checked');
if(strcmp(state,'on')) check = 'off'; else check = 'on'; end;
set(handles.vshow_spikes,'checked',check);
% --------------------------------------------------------------------
function varargout = cshow_spikes_Callback(h, eventdata, handles, varargin)
state = get(handles.cshow_spikes,'checked');
if(strcmp(state,'on')) check = 'off'; else check = 'on'; end;
set(handles.cshow_spikes,'checked',check);
% --------------------------------------------------------------------
function varargout = show_spikes_Callback(h, eventdata, handles, varargin)
% --------------------------------------------------------------------
function varargout = Untitled_1_Callback(h, eventdata, handles, varargin)
% --------------------------------------------------------------------
function varargout = draw_ISI_Callback(h, eventdata, handles, varargin)
state = get(handles.draw_ISI,'checked');
if(strcmp(state,'on')) check = 'off'; else check = 'on'; end;
set(handles.draw_ISI,'checked',check);
% --------------------------------------------------------------------
function varargout = draw_phase_Callback(h, eventdata, handles, varargin)
state = get(handles.draw_phase,'checked');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -