function all_activity = test_network(connections,external,duration) if ~exist('duration','var') || isempty(duration) duration = 10; end all_activity = zeros(size(connections,1),duration+1); all_ff_inputs = zeros(size(connections,1),duration+1); all_fb_inputs = zeros(size(connections,1),duration+1); for t = 1:duration % timestep of a half gamma oscillation i = t+1; if mod(t,2) ext = external(:,[2,4]); else ext = external(:,[1,3]); if t<3 ext([1,3],2) = 1; end end [ff_in,fb_in] = get_fixed_inputs(all_activity(:,i-1),ext,connections); [ff_in,fb_in] = update_inputs(ff_in,fb_in,all_activity(:,i),connections); all_ff_inputs(:,i) = ff_in; all_fb_inputs(:,i) = fb_in; all_activity(:,i) = get_unit_activity(all_ff_inputs(:,i-1:i),all_fb_inputs(:,i-1:i)); for j = 1:10 [ff_in,fb_in] = update_inputs(ff_in,fb_in,all_activity(:,i),connections); if (all(ff_in==all_ff_inputs(:,i)) && all(fb_in==all_fb_inputs(:,i))) break end all_ff_inputs(:,i) = ff_in; all_fb_inputs(:,i) = fb_in; all_activity(:,i) = get_unit_activity(all_ff_inputs(:,i-1:i),all_fb_inputs(:,i-1:i)); if (j==10) disp('Unstable!'); end end end function activity = get_unit_activity(ff_ins,fb_ins) activity = zeros(size(ff_ins,1),1); for unit = 1:size(ff_ins,1) if (fb_ins(unit,1)==0 && fb_ins(unit,2)==1) if (ff_ins(unit,1)==0 && ff_ins(unit,2)==1) activity(unit,1) = 2; else activity(unit,1) = 1; end end end function [ff_in,fb_in] = update_inputs(ff_in,fb_in,curr_act,connections) [ff_in_new,fb_in_new] = get_new_inputs(curr_act,connections); ff_in = ff_in | ff_in_new; fb_in = fb_in | fb_in_new; function [ff_in,fb_in] = get_fixed_inputs(prev_act,ext,connections) ff_in = zeros(size(connections,1),1); fb_in = zeros(size(connections,1),1); for target = 1:size(connections,1) ff_in(target,1) = ff_in(target,1) || (ext(target,1)==1) || (rand < ext(target,1)); fb_in(target,1) = fb_in(target,1) || (ext(target,2)==1) || (rand < ext(target,2)); [ff_in(target,1),fb_in(target,1)] = propagate_activity(ff_in(target,1),fb_in(target,1),prev_act,connections(target,:),1); end function [ff_in,fb_in] = get_new_inputs(curr_act,connections) ff_in = zeros(size(connections,1),1); fb_in = zeros(size(connections,1),1); for target = 1:size(connections,1) [ff_in(target,1),fb_in(target,1)] = propagate_activity(ff_in(target,1),fb_in(target,1),curr_act,connections(target,:),0); end function [ff_in,fb_in] = propagate_activity(ff_in,fb_in,act,connections,d) for j = 1:3 for k = 1:size(connections{1,j},1) source = connections{1,j}(k,1); delay = connections{1,j}(k,2); if (delay==d) if j==1 % lateral fb_in = fb_in || (act(source,1)==2); elseif j==2 % feedforward ff_in = ff_in || (act(source,1)==2); elseif j==3 % feedback fb_in = fb_in || (act(source,1)>0); end end end end