updated populationvector project
This commit is contained in:
parent
6ef0bce722
commit
eca31e3c95
@ -1,4 +1,4 @@
|
||||
all: projects evalutation
|
||||
all: projects evaluation
|
||||
|
||||
evaluation: evaluation.pdf
|
||||
evaluation.pdf: evaluation.tex
|
||||
|
@ -15,7 +15,7 @@
|
||||
\begin{document}
|
||||
|
||||
\sffamily
|
||||
\section*{Scientific computing WS16/17}
|
||||
\section*{Scientific computing WS17/18}
|
||||
|
||||
\begin{tabular}{|p{0.15\textwidth}|p{0.07\textwidth}|p{0.07\textwidth}|p{0.07\textwidth}|p{0.07\textwidth}|p{0.07\textwidth}|p{0.07\textwidth}|p{0.07\textwidth}|p{0.07\textwidth}|p{0.07\textwidth}|}
|
||||
\hline
|
||||
|
@ -11,7 +11,7 @@
|
||||
|
||||
|
||||
%%%%%%%%%%%%%% Questions %%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%\section{REPLACE BY SUBTHRESHOLD RESONANCE PROJECT!}
|
||||
\section{REPLACE BY SUBTHRESHOLD RESONANCE PROJECT!}
|
||||
\begin{questions}
|
||||
\question You are recording the activity of a neuron in response to
|
||||
constant stimuli of intensity $I$ (think of that, for example,
|
||||
|
@ -69,15 +69,15 @@ plt.show()
|
||||
|
||||
# tuning curves:
|
||||
nunits = 6
|
||||
unitphases = np.linspace(0.0, 1.0, nunits) + 0.05*np.random.randn(nunits)/float(nunits)
|
||||
unitphases = np.linspace(0.04, 0.96, nunits) + 0.05*np.random.randn(nunits)/float(nunits)
|
||||
unitgains = 15.0 + 5.0*(2.0*np.random.rand(nunits)-1.0)
|
||||
nangles = 12
|
||||
angles = 180.0*np.arange(nangles)/nangles
|
||||
for unit, (phase, gain) in enumerate(zip(unitphases, unitgains)):
|
||||
print '%.1f %.0f' % (gain, phase*180.0)
|
||||
print 'gain=%.1f phase=%.0f' % (gain, phase*180.0)
|
||||
allspikes = []
|
||||
for k, angle in enumerate(angles):
|
||||
spikes = lifadaptspikes(0.5*(1.0-np.cos(2.0*np.pi*(angle/180.0-phase))), gain)
|
||||
spikes = lifadaptspikes(0.5*(1.0+np.cos(2.0*np.pi*(angle/180.0-phase))), gain)
|
||||
allspikes.append(spikes)
|
||||
spikesobj = np.zeros((len(allspikes), len(allspikes[0])), dtype=np.object)
|
||||
for k in range(len(allspikes)):
|
||||
@ -89,10 +89,10 @@ for unit, (phase, gain) in enumerate(zip(unitphases, unitgains)):
|
||||
nangles = 50
|
||||
angles = 180.0*np.random.rand(nangles)
|
||||
for k, angle in enumerate(angles):
|
||||
print '%.0f' % angle
|
||||
print 'angle = %.0f' % angle
|
||||
allspikes = []
|
||||
for unit, (phase, gain) in enumerate(zip(unitphases, unitgains)):
|
||||
spikes = lifadaptspikes(0.5*(1.0-np.cos(2.0*np.pi*(angle/180.0-phase))), gain)
|
||||
spikes = lifadaptspikes(0.5*(1.0+np.cos(2.0*np.pi*(angle/180.0-phase))), gain)
|
||||
allspikes.append(spikes)
|
||||
spikesobj = np.zeros((len(allspikes), len(allspikes[0])), dtype=np.object)
|
||||
for i in range(len(allspikes)):
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -35,8 +35,6 @@
|
||||
\texttt{spikes} variables of the \texttt{population*.mat} files.
|
||||
The \texttt{angle} variable holds the angle of the presented bar.
|
||||
|
||||
%NOTE: the orientation is angle plus 90 degree!!!!!!
|
||||
|
||||
\continue
|
||||
\begin{parts}
|
||||
\part Illustrate the spiking activity of the V1 cells in response
|
||||
@ -50,13 +48,11 @@
|
||||
of the neurons.
|
||||
|
||||
\part Fit the function \[ r(\varphi) =
|
||||
g(1-\cos(\varphi-\varphi_0))/2 \] to the measured tuning curves in
|
||||
g(1+\cos(\varphi-\varphi_0))/2 \] to the measured tuning curves in
|
||||
order to estimated the orientation angle at which the neurons
|
||||
respond strongest. In this function $\varphi_0$ is the position of
|
||||
the peak (really? How exactly is $\varphi_0$ related to the
|
||||
position of the peak? Do you find a better function where
|
||||
$\varphi_0$ is identical with the peak position?) and $g$ is a
|
||||
gain factor that sets the maximum firing rate.
|
||||
the peak and $g$ is a gain factor that sets the maximum firing
|
||||
rate.
|
||||
|
||||
\part How can the orientation angle of the presented bar be read
|
||||
out from one trial of the population activity of the 6 neurons?
|
||||
@ -70,8 +66,8 @@
|
||||
An alternative read out is maximum likelihood (see script).
|
||||
|
||||
Load one of the \texttt{population*.mat} files, illustrate the
|
||||
data, and estimate the orientation angle of the bar by the two
|
||||
different methods.
|
||||
data, and estimate the orientation angle of the bar from single
|
||||
trial data by the two different methods.
|
||||
|
||||
\part Compare, illustrate and discuss the performance of your two
|
||||
decoding methods by using all of the recorded responses (all
|
||||
@ -81,16 +77,16 @@
|
||||
\end{parts}
|
||||
\end{questions}
|
||||
|
||||
%NOTE: change data generation such that the phase variable is indeed
|
||||
%the maximum response and not the minumum!
|
||||
|
||||
\end{document}
|
||||
|
||||
|
||||
gains and angles of the 6 neurons:
|
||||
|
||||
14.6 0
|
||||
17.1 36
|
||||
17.6 72
|
||||
14.1 107
|
||||
10.7 144
|
||||
11.4 181
|
||||
gain=10.7 phase=5
|
||||
gain=18.0 phase=38
|
||||
gain=11.3 phase=71
|
||||
gain=14.1 phase=108
|
||||
gain=19.0 phase=138
|
||||
gain=16.4 phase=174
|
||||
|
||||
|
||||
|
@ -1,7 +1,9 @@
|
||||
close all
|
||||
files = dir('../unit*.mat');
|
||||
datapath = '../';
|
||||
% datapath = '../code/';
|
||||
files = dir(strcat(datapath, 'unit*.mat'));
|
||||
for file = files'
|
||||
a = load(strcat('../', file.name));
|
||||
a = load(strcat(datapath, file.name));
|
||||
spikes = a.spikes;
|
||||
angles = a.angles;
|
||||
figure()
|
||||
@ -14,13 +16,13 @@ end
|
||||
|
||||
%% tuning curves:
|
||||
close all
|
||||
cosine = @(p,xdata)0.5*p(1).*(1.0-cos(2.0*pi*(xdata/180.0-p(2))));
|
||||
files = dir('../unit*.mat');
|
||||
cosine = @(p,xdata)0.5*p(1).*(1.0+cos(2.0*pi*(xdata/180.0-p(2))));
|
||||
files = dir(strcat(datapath, 'unit*.mat'));
|
||||
phases = zeros(length(files), 1);
|
||||
figure()
|
||||
for j = 1:length(files)
|
||||
file = files(j);
|
||||
a = load(strcat('../', file.name));
|
||||
a = load(strcat(datapath, file.name));
|
||||
spikes = a.spikes;
|
||||
angles = a.angles;
|
||||
rates = zeros(size(spikes, 1), 1);
|
||||
@ -32,10 +34,13 @@ for j = 1:length(files)
|
||||
p0 = [mr, angles(maxi)/180.0-0.5];
|
||||
%p = p0;
|
||||
p = lsqcurvefit(cosine, p0, angles, rates');
|
||||
phase = p(2)*180.0 + 90.0;
|
||||
phase = p(2)*180.0;
|
||||
if phase > 180.0
|
||||
phase = phase - 180.0;
|
||||
end
|
||||
if phase < 0.0
|
||||
phase = phase + 180.0;
|
||||
end
|
||||
phases(j) = phase;
|
||||
subplot(2, 3, j);
|
||||
plot(angles, rates, 'b');
|
||||
@ -49,40 +54,45 @@ end
|
||||
|
||||
|
||||
%% read out:
|
||||
a = load('../population04.mat');
|
||||
a = load(strcat(datapath, 'population04.mat'));
|
||||
spikes = a.spikes;
|
||||
angle = a.angle;
|
||||
unitphases = a.phases*180.0 + 90.0;
|
||||
unitphases = a.phases*180.0;
|
||||
unitphases(unitphases>180.0) = unitphases(unitphases>180.0) - 180.0;
|
||||
figure();
|
||||
subplot(1, 3, 1);
|
||||
angleestimates1 = zeros(size(spikes, 2), 1);
|
||||
angleestimates2 = zeros(size(spikes, 2), 1);
|
||||
[x, inx] = sort(phases);
|
||||
% loop over trials:
|
||||
for j = 1:size(spikes, 2)
|
||||
rates = zeros(size(spikes, 1), 1);
|
||||
for k = 1:size(spikes, 1)
|
||||
r = firingrate(spikes(k, j), 0.0, 0.2);
|
||||
rates(k) = r;
|
||||
end
|
||||
[x, inx] = sort(phases);
|
||||
plot(phases(inx), rates(inx), '-o');
|
||||
hold on;
|
||||
angleestimates1(j) = popvecangle(phases, rates);
|
||||
[m, i] = max(rates);
|
||||
angleestimates2(j) = phases(i);
|
||||
end
|
||||
xlabel('preferred angle')
|
||||
ylabel('firing rate')
|
||||
hold off;
|
||||
subplot(1, 3, 2);
|
||||
hist(angleestimates1);
|
||||
xlabel('stimulus angle')
|
||||
subplot(1, 3, 3);
|
||||
hist(angleestimates2);
|
||||
xlabel('stimulus angle')
|
||||
angle
|
||||
mean(angleestimates1)
|
||||
mean(angleestimates2)
|
||||
|
||||
|
||||
%% read out robustness:
|
||||
files = dir('../population*.mat');
|
||||
files = dir(strcat(datapath, 'population*.mat'));
|
||||
angles = zeros(length(files), 1);
|
||||
e1m = zeros(length(files), 1);
|
||||
e1s = zeros(length(files), 1);
|
||||
@ -90,7 +100,7 @@ e2m = zeros(length(files), 1);
|
||||
e2s = zeros(length(files), 1);
|
||||
for i = 1:length(files)
|
||||
file = files(i);
|
||||
a = load(strcat('../', file.name));
|
||||
a = load(strcat(datapath, file.name));
|
||||
spikes = a.spikes;
|
||||
angle = a.angle;
|
||||
angleestimates1 = zeros(size(spikes, 2), 1);
|
||||
@ -114,5 +124,9 @@ end
|
||||
figure();
|
||||
subplot(1, 2, 1);
|
||||
scatter(angles, e1m);
|
||||
xlabel('stimuluis angle')
|
||||
ylabel('estimated angle')
|
||||
subplot(1, 2, 2);
|
||||
scatter(angles, e2m);
|
||||
xlabel('stimuluis angle')
|
||||
ylabel('estimated angle')
|
||||
|
Reference in New Issue
Block a user