-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathplotOpenEPEgms.m
154 lines (147 loc) · 5.47 KB
/
plotOpenEPEgms.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
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
function hFig = plotOpenEPEgms( userdata, varargin )
% PLOTOPENEPEGMS Plot eletrograms from OpenEP data
%
% Usage:
% [ hFig ] = plotOpenEPEgms( userdata, varargin )
%
% Where:
% userdata - see importcarto_mem
% hFig - a handle to the plotted figure
%
% PLOTOPENEPEGMS accepts the following parameter-value pairs
% 'iEgm' {:} | [a:b]
% an array indexing into userdata.electric.egm such that
% userdata.electric.egm(iEgmArray,:) are selected for plotting
% To convert from Carto point numbers to iEgmArray use
% getIndexFromCartoPointNumber.
% 'range' {'window'} | 'all'
% By default ('window') only the electrogram within the window of
% interest is drawn (+/-buffer). By specifying 'all' the entire point
% electrogram is drawn.
% 'buffer' {50} | double
% The time before and after the window of interest to draw. By
% default, 20ms, but can be changed by setting 'buffer' to an
% alternative value.
% 'egmtype' 'bip' | 'uni' | {'bip-uni'}
% Whether to plot only the bipolar electrograms, only the
% unipolar electrograms or both
% 'reference' 'off' | {'on'}
% Whether to plot the reference channel, off by default
% userdata.electric.egm(iEgmArray,:) are selected for plotting.
% To convert from Carto point numbers to iEgmArray use
% `getIndexFromCartoPointNumber.m`
% 'linewidth', {1} | integer
% The width of the lines drawing the electrograms
%
% PLOTOPENEPEGMS is a wrapper function for plotElectrograms.
%
% Author: Steven Williams (2017) (Copyright)
% SPDX-License-Identifier: Apache-2.0
%
% Modifications -
% SW 2020: Modified for incorporation into OpenEP
%
% See also PLOTELECTROGRAMS, GETINDEXFROMCARTOPOINTNUMBER,
% GETELECTROGRAMSATPOINTS
%
% Info on Code Testing:
% ---------------------------------------------------------------
% plotOpenEPEgms(userdata, 'iegm', getIndexFromCartoPointNumber(userdata,1))
% ---------------------------------------------------------------
%
% ---------------------------------------------------------------
% code
% ---------------------------------------------------------------
nStandardArgs = 2; % UPDATE VALUE
iEgmArray = ':';
range = 'window';
egmtype = 'bip-uni';
buffer = 50;
reference = 'on';
linewidth = 1;
if nargin > nStandardArgs
for i = 1:2:nargin-nStandardArgs
switch lower(varargin{i})
case 'iegm'
iEgmArray = varargin{i+1};
case 'axis'
hAx = varargin{i+1};
case 'window'
range = varargin{i+1};
case 'buffer'
buffer = varargin{i+1};
case 'egmtype'
egmtype = varargin{i+1};
case 'reference'
reference = varargin{i+1};
case 'linewidth'
linewidth = varargin{i+1};
end
end
end
%TODO: Check validity of input measurements
% Create the cell array of electrograms
if strcmpi(iEgmArray, ':')
iEgmArray = 1:numel(userdata.electric.tags);
end
nEgms = numel(iEgmArray);
for iEgm = 1:nEgms
switch egmtype
case 'bip'
egmTraces{iEgm} = userdata.electric.egm(iEgmArray(iEgm),:);
egmNames{iEgm} = char(userdata.electric.names(iEgmArray(iEgm),:));
acttime(iEgm) = userdata.electric.annotations.mapAnnot(iEgmArray(iEgm));
egmColors{iEgm} = 'b';
case 'uni'
for i = 1:2
egmTraces{i,iEgm} = userdata.electric.egmUni(iEgmArray(iEgm),:,i);
acttime(i,iEgm) = userdata.electric.annotations.mapAnnot(iEgmArray(iEgm));
egmNames{i,iEgm} = char(userdata.electric.names(iEgmArray(iEgm),:));
egmColors{i,iEgm} = 'g';
end
case 'bip-uni'
i = 1;
egmTraces{i,iEgm} = userdata.electric.egm(iEgmArray(iEgm),:);
egmNames{i,iEgm} = char(userdata.electric.names(iEgmArray(iEgm),:));
acttime(i,iEgm) = userdata.electric.annotations.mapAnnot(iEgmArray(iEgm));
egmColors{i,iEgm} = 'b';
for i = 1:2
egmTraces{i+1,iEgm} = userdata.electric.egmUni(iEgmArray(iEgm),:,i);
acttime(i+1,iEgm) = userdata.electric.annotations.mapAnnot(iEgmArray(iEgm));
egmNames{i+1,iEgm} = char(userdata.electric.names(iEgmArray(iEgm),:));
egmColors{i+1,iEgm} = 'g';
end
end
if strcmpi(reference, 'on')
egmTraces{end+1,iEgm} = userdata.electric.egmRef(iEgmArray(iEgm),:) / 20;
acttime(end+1,iEgm) = userdata.electric.annotations.referenceAnnot(iEgm);
egmNames{end+1,iEgm} = 'Ref';
egmColors{end+1,iEgm} = 'r';
end
end
egmTraces = flipud(egmTraces(:));
acttime = flipud(acttime(:));
egmNames = flipud(egmNames(:));
egmColors = flipud(egmColors(:));
% Work out the range
switch range
case 'all'
range = [NaN NaN];
case 'window'
range = userdata.electric.annotations.woi(iEgmArray(1),:) ...
+ userdata.electric.annotations.referenceAnnot(iEgmArray(1));
buffer = [-buffer buffer];
range = range + buffer;
end
% Finally, use plotElectrograms to actually draw the electrograms
hFig = plotElectrograms(egmTraces ...
, 'egmNames', egmNames ...
, 'range', range ...
, 'acttime', acttime ...
, 'egmColors', egmColors ...
, 'separation', 7.5 ...
, 'autogain', true ...
, 'title', 'off' ...
, 'linewidth', linewidth ...
);
end