function [t_sequence, t_sequence_time_point, node_input_weight, node_threshold, t_sequence_initial] = spike_generator_for_Bayesian(Ts,T,N,weight_matrix,Data_sigma_u,magnitude_of_noise_signal,det_ij,tal_s,tal_m,tal,threshold,T_refractory_abs) T_length = T; s = 0:Ts:T_length; det_ij_number = det_ij/Ts+1; epslong = 1/(1-tal_s/tal_m)*(exp(-(s-det_ij)/tal_m)-exp(-(s-det_ij)/tal_s)); epslong(1:det_ij_number) = 0; s = 0:Ts:T_length; eta = -threshold * exp(-s/tal); s_total = 0:Ts:T_length; epslong_prime = (1/tal_m) * exp(-s_total/tal_m) * Ts; T_refractory = T_refractory_abs/Ts; Gaussian_signal = zeros(T/Ts,N); for i = 1:N Gaussian_signal(:,i) = Data_sigma_u(i,i) .* rand(T/Ts,1); end external_input = magnitude_of_noise_signal*Gaussian_signal'; external_input_memberane_voltage = []; external_input_memberane_voltage_long = []; Jext = 1; for i = 1:N i; external_input_memberane_voltage_long(i,:) = Jext * conv(epslong_prime,external_input(i,:)); end external_input_memberane_voltage = external_input_memberane_voltage_long(:,1:T/Ts); t_sequence = cell(N,1); t_sequence_time_point = zeros(N,T/Ts); t_sequence_response = zeros(N,T/Ts); t_input_sum = zeros(N,T/Ts); t_input_sum_plus_external = zeros(N,T/Ts); t_nearest = zeros(N,1); t_sequence_initial_uninversed = ones(1,N); t_sequence_initial = t_sequence_initial_uninversed'; t_sequence_initial_size = size(t_sequence_initial); M = t_sequence_initial_size (2); for i = 1:N t_sequence{i} = find(t_sequence_initial(i,:)); end t_sequence_time_point(:,1:M) = t_sequence_initial; for i = 1:N if ~isempty(t_sequence{i}) t_sequence_size = size(t_sequence{i}); t_nearest(i) = t_sequence{i}(t_sequence_size(2)); end end node_input_weight = weight_matrix; node_threshold = threshold * ones(N,1); for t = (M+1):(T/Ts) t; for i = 1:N effectual_t_sequence_index_epslong = find( (T_length/Ts >= (t-t_sequence{i})) & ((t-t_sequence{i})>= det_ij/Ts)); effectual_t_sequence_size_epslong = size(effectual_t_sequence_index_epslong); effectual_t_sequence_length_epslong = effectual_t_sequence_size_epslong(2); for j =1:effectual_t_sequence_length_epslong if ~isempty(effectual_t_sequence_index_epslong) t_history_epslong(i) = t_sequence{i}(effectual_t_sequence_index_epslong(j)); t_sequence_response(i,t) = t_sequence_response(i,t) + epslong(t-t_history_epslong(i)+1); end end end for i = 1:N t_input_sum(i,t) = node_input_weight(i,:) * t_sequence_response(:,t); effectual_t_sequence_index_eta = find( (T_length/Ts >= (t-t_sequence{i})) & ((t-t_sequence{i})>= 0)); effectual_t_sequence_size_eta = size(effectual_t_sequence_index_eta); effectual_t_sequence_length_eta = effectual_t_sequence_size_eta(2); for j =1:effectual_t_sequence_length_eta if ~isempty(effectual_t_sequence_index_eta) t_history_eta(i) = t_sequence{i}(effectual_t_sequence_index_eta(j)); t_input_sum(i,t) = t_input_sum(i,t) + eta(t-t_history_eta(i)+1); end end t_input_sum_plus_external(i,t) = t_input_sum(i,t) + external_input_memberane_voltage(i,t); if (t_input_sum_plus_external(i,t) >= node_threshold(i,1)) && ((t-t_nearest(i)) >= T_refractory) t_sequence{i} = [t_sequence{i} t]; t_nearest(i) = t; t_sequence_time_point(i,t) = 1; end end end for i = 1:N t_sequence{i} = t_sequence{i}./1000*Ts; end