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