Human tactile FA1 neurons (Hay and Pruszynski 2020)

 Download zip file 
Help downloading and running models
Accession:266798
"... we show that synaptic integration across the complex signals from the first-order neuronal population could underlie human ability to accurately (< 3°) and rapidly process the orientation of edges moving across the fingertip. We first derive spiking models of human first-order tactile neurons that fit and predict responses to moving edges with high accuracy. We then use the model neurons in simulating the peripheral neuronal population that innervates a fingertip. We train classifiers performing synaptic integration across the neuronal population activity, and show that synaptic integration across first-order neurons can process edge orientations with high acuity and speed. ... our models suggest that integration of fast-decaying (AMPA-like) synaptic inputs within short timescales is critical for discriminating fine orientations, whereas integration of slow-decaying (NMDA-like) synaptic inputs supports discrimination of coarser orientations and maintains robustness over longer timescales"
Reference:
1 . Hay E, Pruszynski JA (2020) Orientation processing by synaptic integration across first-order tactile neurons. PLoS Comput Biol 16:e1008303 [PubMed]
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Neuron or other electrically excitable cell; Axon; Realistic Network;
Brain Region(s)/Organism: Human;
Cell Type(s):
Channel(s):
Gap Junctions:
Receptor(s): AMPA; NMDA;
Gene(s):
Transmitter(s):
Simulation Environment: MATLAB;
Model Concept(s): Sensory coding; Synaptic Integration; Receptive field;
Implementer(s):
Search NeuronDB for information about:  AMPA; NMDA;
% Author: Etay Hay
% Orientation processing by synaptic integration across first-order tactile neurons (Hay and Pruszynski 2020)

function model2 = mutate_model(model,ga_param,mutation_size);
	p_mutate = ga_param.p_mutate;
	model2 = model;

	k = ceil(rand()*size(model2.mr_subset,1));
	row = model2.mr_subset(k,1);
	col = model2.mr_subset(k,2);
	if rand() < 0.5
		lb = find(model2.mr_loc(row,:) == 1, 1, 'first');
		ub = find(model2.mr_loc(row,:) == 1, 1, 'last');
		model2.mr_subset(k,2) = max(min(ub,model2.mr_subset(k,2) + round((-1 + 2*rand())*(ub - lb)*mutation_size)),lb);
	else
		lb = find(model2.mr_loc(:,col) == 1, 1, 'first');
		ub = find(model2.mr_loc(:,col) == 1, 1, 'last');
		new_row = max(min(ub,model2.mr_subset(k,1) + round((-1 + 2*rand())*(ub - lb)*mutation_size)),lb);
		model2.mr_subset(k,1) = new_row;
		if max(model2.mr_loc(new_row,:),[],2)==0
			if model2.mr_subset(k,1) > model.mr_subset(k,1)
				model2.mr_subset(k,1) = new_row + find(max(model2.mr_loc((new_row+1):end,:),[],2) > 0, 1, 'first');
			else
				model2.mr_subset(k,1) = find(max(model2.mr_loc(1:(new_row-1),:),[],2) > 0, 1, 'last');
			end
		end
		if model.mr_loc(model2.mr_subset(k,1),model2.mr_subset(k,2)) == 0
			inds = find(model.mr_loc(model2.mr_subset(k,1),:) == 1);
			if model2.mr_subset(k,2) < inds(1)
				model2.mr_subset(k,2) = inds(1);
			else
				model2.mr_subset(k,2) = inds(end);
			end
		end
	end
	if isequal(model2.mr_subset(k,:),model.mr_subset(k,:))
		[r_loc,c_loc] = find(model.mr_loc == 1);
		rvec = randperm(length(r_loc));
		model2.mr_subset(k,1) = r_loc(rvec(1));
		model2.mr_subset(k,2) = c_loc(rvec(1));
	end
	if (ga_param.mr_wmin ~= ga_param.mr_wmax)
 		if rand() < p_mutate
			k = ceil(rand()*size(model2.mr_subset,1));
			model2.mr_w(k) = max(min(ga_param.mr_wmax,model2.mr_w(k) + (-1 + 2*rand())*(ga_param.mr_wmax - ga_param.mr_wmin)*mutation_size),ga_param.mr_wmin);
		end
		if rand() < p_mutate
			model2.m_maxrate = max(min(ga_param.m_maxrate_max,model2.m_maxrate + (-1 + 2*rand())*(ga_param.m_maxrate_max - ga_param.m_maxrate_min)*mutation_size),ga_param.m_maxrate_min);
		end
	end
	if (ga_param.mr_r1_min ~= ga_param.mr_r1_max)
		if rand() < p_mutate
			model2.mr_r1 = max(min(ga_param.mr_r1_max,model2.mr_r1 + (-1 + 2*rand())*(ga_param.mr_r1_max - ga_param.mr_r1_min)*mutation_size),ga_param.mr_r1_min);
		end
		if rand() < p_mutate
			model2.mr_r2 = max(min(ga_param.mr_r2_max,model2.mr_r2 + (-1 + 2*rand())*(ga_param.mr_r2_max - ga_param.mr_r2_min)*mutation_size),ga_param.mr_r2_min);
		end
	end
end