-
Notifications
You must be signed in to change notification settings - Fork 15
/
peerPC_cov.m
91 lines (78 loc) · 2.21 KB
/
peerPC_cov.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
function peerPC_cov(dataroot,matroot,useGPU,dex)
nPC = 2.^[0:10];
ndim0 = 1:512;
dall=load(fullfile(dataroot, 'dbspont.mat'));
clf;
%hold all;
%%
cov_neur = [];
var_all_neur = [];
rng('default');
%%
for d = [1:length(dall.db)]
%%
dat = load(fullfile(dataroot,sprintf('spont_%s_%s.mat',dall.db(d).mouse_name,dall.db(d).date)));
if isfield(dat.stat, 'redcell')
Ff = dat.Fsp(~logical([dat.stat(:).redcell]),:);
med = dat.med(~logical([dat.stat(:).redcell]),:);
else
Ff = dat.Fsp;
med = dat.med;
end
med = med(sum(Ff,2)>0,:);
Ff = Ff(sum(Ff,2)>0,:);
fprintf('\nrecording %d\n',d);
%%
NN = size(Ff,1);
% divide X and Y into checkerboard and use every other square
y = round(med(:,1));
ymax=max(med);
ymax = ymax(1);
nby = floor(ymax / 16);
ytrain = ([1:2:16]-1) * nby + [1:nby-10]';
ytrain = ytrain(:)';
ytrain = repmat(ytrain,NN,1);
nt= size(ytrain,2);
ntrain = find(sum(repmat(y,1,nt) == ytrain, 2)>0);
ytest = ([2:2:16]-1) * nby + [1:nby-10]';
ytest = ytest(:)';
ytest = repmat(ytest,NN,1);
nt = size(ytest,2);
ntest = find(sum(repmat(y,1,nt) == ytest, 2)>0);
%% bin spikes in 1.2 second bins
if dat.db.nplanes==10
tbin = 4;
else
tbin=3;
end
[NN, NT] = size(Ff);
Ff = squeeze(mean(reshape(Ff(:,1:floor(NT/tbin)*tbin),...
NN, tbin, []),2));
Ff = (Ff - mean(Ff,2));
NT = size(Ff,2);
%% divide time in half
%Ff = randn(size(Ff));
Lblock = 60;
fractrain = 0.5;
[itrain, itest] = splitInterleaved(NT, Lblock, fractrain, 1);
tic;
if useGPU
Ff = gpuArray(single(Ff));
end
npc = 1024;%min(size(vtrain,2));
[sneur, varneur, u, v] = SVCA(Ff, npc, ntrain, ntest, itrain, itest);
semilogx(sneur./varneur)
[u2,~,~] = svdecon(Ff(ntrain,itrain));
cpc = corr(gather_try(s1(1,:)'), gather_try(Ff(ntrain,itest)' * u2(:,1)));
disp(cpc);
corrPC1(d) = cpc;
cov_neur(:,d) = gather_try(sneur);
var_neur(:,d) = gather_try(varneur);
drawnow;
if d == dex
exampleV1 = gather_try(s1);
exampleV2 = gather_try(s2);
end
end
%%
save(fullfile(matroot,'PCpredict.mat'),'cov_neur','var_neur','exampleV1','exampleV2', 'corrPC1');