Human tactile FA1 neurons (Hay and Pruszynski 2020)

 Download zip file 
Help downloading and running models
"... 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"
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):
Gap Junctions:
Receptor(s): AMPA; NMDA;
Simulation Environment: MATLAB;
Model Concept(s): Sensory coding; Synaptic Integration; Receptive field;
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 [stim1,m_t] = get_stim(stim,sim_param)
	dx = sim_param.dx;
	dy = sim_param.dy;
	rf_size1 = round(sim_param.patch_length_y/dx);
	rf_size2 = round(sim_param.patch_length_x/dx);
	stim1 = zeros(rf_size1,rf_size2);
	dot_diam = dy;
	line_thickness = 0.5;
	if strcmp(stim{1},'dot') || strcmp(stim{1},'dot2') 
		i1 = 1 + round((stim{2}-1)*dot_diam/dx);
		i2 = round(stim{2}*dot_diam/dx);
		stim1(i1:i2,rf_size2-[1:floor(dot_diam/dx)]) = 0.5;
	elseif strcmp(stim{1},'line') || strcmp(stim{1},'line2') || strcmp(stim{1},'linepress') || strcmp(stim{1},'line3mm')
		line_angle = stim{2}*2*pi/360;
		for k = 1:rf_size1
			if line_angle <= 0
				yi = k;
				yi = rf_size1 - k + 1;
			stim1(yi,1 + [1:floor((((line_thickness^2) * (1 + tan(line_angle)^2))^0.5)/dx)] + floor((k-1)*abs(tan(line_angle)))) = 0.5;
		stim1 = stim1(:,end:-1:1);
	elseif strcmp(stim{1},'2dots')
		for k = 1:length(stim{2})		
			i1 = 1 + round((stim{2}(k)-1)*dot_diam/dx);
			i2 = 1 + round(stim{2}(k)*dot_diam/dx);
			stim1(i1:i2,rf_size2 + [1:floor(dot_diam/dx)]) = 0.5;
	i0 = find(sum(stim1)~=0,1,'first');
	stim1 = stim1(:,i0:end);
	stim1 = [zeros(rf_size1,rf_size2), stim1, zeros(rf_size1,rf_size2)];
	if strcmp(stim{1},'linepress')
		j1 = max(1,round((size(stim1,2) - rf_size2)/2));
		j2 = j1 + rf_size2 - 1;
		stim1 = stim1(:,j1:j2);
		m_t = 0:1:200;
		m_t = 0:(size(stim1,2)-rf_size2);
	if strcmp(stim{1},'line3mm')
		l1 = 3*cos(line_angle);
		i1 = round(rf_size1/2 - l1/dx);
		i2 = round(rf_size1/2 + l1/dx);
		stim1(1:i1,:) = 0;
		stim1(i2:end,:) = 0;