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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227 | tic
%% open/read file and set up Environment
%clear;clc;close all
activateCEDS64
% Wavelength
WAVELENGTH = 1999;
file = 'Z:\1_Maxwell_Gagnon\RuthProjectData\01_10_18\apples.smr';
fhand1 = CEDS64Open(file);
%% Read Channel information
load('jan12Workspace.mat')
% sineWave channel (8)
%[ ~, sineWave, ~ ] = CEDS64ReadWaveF(fhand1, 1, 600000000, 0);
% smoothed donor channel
%[ ~, smoothDonor, ~ ] = CEDS64ReadWaveF(fhand1, 17, 600000000, 0);
% smoothed acceptor channel
%[ ~, smoothAccept, ~ ] = CEDS64ReadWaveF(fhand1, 18, 600000000, 0);
% Peak Smoothed Donor EVENTS
%[~, dEvents] = CEDS64ReadEvents(fhand1, 13, 600000000, 0);
% Peak Smoothed Acceptor EVENTS
%[~, aEvents] = CEDS64ReadEvents(fhand1, 15, 600000000, 0);
% conversion
dEvents = dEvents ./ 100;
aEvents = aEvents ./ 100;
% segment data
segments = [34.4071319 80.417285 1 0.099389695
94.4198554 140.4404009 1 0.073845455
151.2009841 195.6984 1 0.075338549
195.6984 495.2002536 0 0.08428348
506.2521841 550.7570 1 0.076105695
550.7570 850.2618112 0 0.052867484
861.2737529 905.7913 1 0.059607717
905.7913 1205.2772104 0 0.052621968
1216.2876268 1260.7934 1 0.072681073
1260.7934 1560.2979148 0 0.049920258
1571.3062592 1615.7874 1 0.079747682
1615.7874 1915.3113427 0 0.044458184
1926.309162 1970.8137 1 0.091103762
1970.8137 2270.3144864 0 0.043255639
2279.5597266 2325.5662944 1 0.08406521
2339.6987457 2385.695773 1 0.125541727
2396.3908364 2440.4018015 1 0.068322224
2751.4312707 2795.4422358 1 0.045031675
];
%% EVENTS
for i = 1:length(segments)
segStart = floor(segments(i,1) * 1000);
segEnd = floor(segments(i,2) * 1000);
% remove incorrect events
if i == 1
dEvents(dEvents < segStart) = [];
aEvents(aEvents < segStart) = [];
elseif i == length(segments)
dEvents(dEvents > segEnd) = [];
aEvents(aEvents > segEnd) = [];
else
dEvents(dEvents > segEnd & dEvents < (floor(segments(i+1,1) * 1000))) = [];
aEvents(aEvents > segEnd & aEvents < (floor(segments(i+1,1) * 1000))) = [];
end
end
% find the dEvents that create windows that contain an aEvent
good_dEvents = [];
for i = 1:length(dEvents)
if sum((aEvents < (dEvents(i) + 5) & aEvents > (dEvents(i) - 5))) > 0
good_dEvents = [good_dEvents; aEvents((aEvents < (dEvents(i) + 5) & aEvents > (dEvents(i) - 5)))];
end
end
% NOTE: When looking for the windows, you might 'find' a match, when the match is
% OUT of the sinewave section! This causes the next section to lose a few
% windows!
eventcountON = [];
eventcountOFF = [];
VORON = [];
VOROFF = [];
EPSON = [];
EPSOFF = [];
%%
for i = 1:length(segments)
segStart = floor(segments(i,1) * 1000);
segEnd = floor(segments(i,2) * 1000);
% EVENT DATA
% find current segment's window starters
winInSeg = good_dEvents(good_dEvents > segStart & good_dEvents < segEnd);
% make the start time of the segment '0'
winInSeg = winInSeg - segStart;
% take modulo to find relative placement
winInSeg = mod(winInSeg, WAVELENGTH);
% SINE DATA
waveCount = floor((segEnd - segStart) / WAVELENGTH);
waveStart = segStart;
sineSlices = zeros(WAVELENGTH+1, waveCount);
donorSlices = zeros(WAVELENGTH+1, waveCount);
acceptorSlices= zeros(WAVELENGTH+1, waveCount);
for j=1:waveCount
% extract slices of data from stim, donor, & acceptor
sineSlices(:,j) = sineWave(waveStart:(waveStart+WAVELENGTH));
donorSlices(:,j) = smoothDonor(waveStart:(waveStart+WAVELENGTH));
acceptorSlices(:,j) = smoothAccept(waveStart:(waveStart+WAVELENGTH));
% update wave start time
waveStart = waveStart + WAVELENGTH + 1;
end
% plotting!
if segments(i,3) == 1
figure(1)
title('Dark: Stimulus')
plot(sineSlices)
hold on
figure(2)
title('Dark: Donor Signal')
plot(donorSlices)
hold on
figure(3)
title('Dark: Acceptor Signal')
plot(acceptorSlices)
hold on
figure(4)
title('Dark: Good Donor Events')
histogram(winInSeg, 200)
hold on
eventcountOFF = [eventcountOFF; i length(winInSeg)];
EPSOFF = [EPSOFF; i length(winInSeg) / ((segEnd - segStart) / 1000)];
VOROFF = [VOROFF; i segments(i, 4)];
else
figure(7)
title('Light: Stimulus')
plot(sineSlices)
hold on
figure(8)
title('Light: Donor Signal')
plot(donorSlices)
hold on
figure(9)
title('Light: Acceptor Signal')
plot(acceptorSlices)
hold on
figure(10)
title('Light: Good Donor Events')
histogram(winInSeg, 200)
hold on
eventcountON = [eventcountON; i length(winInSeg)];
EPSON = [EPSON; i length(winInSeg) / ((segEnd - segStart) / 1000)];
VORON = [VORON; i segments(i, 4)];
end
end
figure(5)
title('Event count')
scatter(eventcountOFF(:,1), eventcountOFF(:,2), 'r', '*')
hold on
plot(eventcountOFF(:,1), eventcountOFF(:,2), 'r')
hold on
scatter(eventcountON(:,1), eventcountON(:,2), 'K')
hold on
plot(eventcountON(:,1), eventcountON(:,2), 'K')
xlabel('Segment Number')
ylabel('# of Events')
hold on
figure(6)
title('Events / s')
scatter(EPSOFF(:,1), EPSOFF(:,2), 'r')
hold on
plot(EPSOFF(:,1), EPSOFF(:,2), 'r')
hold on
scatter(EPSON(:,1), EPSON(:,2), 'K')
hold on
plot(EPSON(:,1), EPSON(:,2), 'K')
xlabel('Segment Number')
ylabel('Events per second')
hold on
figure(11)
title('VOR')
scatter(VOROFF(:,1), VOROFF(:,2), 'r')
hold on
plot(VOROFF(:,1), VOROFF(:,2), 'r')
hold on
scatter(VORON(:,1), VORON(:,2), 'K')
hold on
plot(VORON(:,1), VORON(:,2), 'K')
xlabel('Segment Number')
ylabel('eyeHGain')
hold on
|