TEAP (Toolbox for Emotion Analysis using Physiological Signals) doc
Bulk_load.m
Go to the documentation of this file.
1 %This file is part of TEAP.
2 %
3 %TEAP is free software: you can redistribute it and/or modify
4 %it under the terms of the GNU General Public License as published by
5 %the Free Software Foundation, either version 3 of the License, or
6 %(at your option) any later version.
7 %
8 %TEAP is distributed in the hope that it will be useful,
9 %but WITHOUT ANY WARRANTY; without even the implied warranty of
10 %MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 %GNU General Public License for more details.
12 %
13 %You should have received a copy of the GNU General Public License
14 %along with TEAP. If not, see <http://www.gnu.org/licenses/>.
15 %
16 %> @file Bulk_load.m
17 %> @brief Loads a bdf file, into a TEAP bulk signal, containing EEG, ECG,
18 %> GSR, etc.
19 %> @param file_name: this variable includes the full path;
20 %> it can be any file supported by biogs sload/sopn
21 %
22 %> @retval BulkSig a TEAP bulk signal vector
23 
24 function [BulkSig] = Bulk_load(file_name)
25 %Copyright Mohammad Soleymani, 2014
26 
27 if(nargin ~= 1)
28  error('Usage: BulkSig = Bulk_load(phys_data)');
29 end
30 
31 if (~exist(file_name, 'file'))
32  error('Usage: the input file does not exist');
33 end
34 % if it is a mat file; it is assumed to be an EEGLAB file
35 if strcmp(file_name(end-2:end),'mat')
36  S = load(file_name);
37  vars = fieldnames(S);
38  phys_data = S.(vars{1});
39 else %otherwise load the file
40  phys_data = pop_biosig(file_name);
41 end
42 
43 %initialize signals to load
44 config_file;
45 
46 %initialize EEG electrode labels
47 signals = {};
48 electrode_labels = struct;
49 config_file;
50 
51 %Number of epochs:
52 nEpochs = length(phys_data.epoch);
53 
54 
55 %foreach epoch
56 if nEpochs>0
57  for iEpoch = [1:nEpochs]
58  Bulk = Bulk_new_empty();
59  for signal = signals
60  eval(['Bulk = add' signal{1} '(Bulk, iEpoch, electrode_labels.' signal{1} ');']);
61  end
62  BulkSig(iEpoch) = Bulk;
63  clear Bulk;
64  end
65 else
66  Bulk = Bulk_new_empty();
67  for signal = signals
68  eval(['Bulk = add' signal{1} '(Bulk, 0, electrode_labels.' signal{1} ');']);
69  end
70  BulkSig(1) = Bulk;
71  clear Bulk;
72 
73 end
74 
75 %EEG
76  function BulkSig = addEEG(BulkSig, iEpoch,correspondance)
77  numel = length(correspondance);
78  datlen = length(phys_data.data(1, :, 1));
79  data = zeros(numel, datlen);
80 
81  for i = [1:numel]
82  chaname = strtrim(correspondance{i});
83  chan = findMyChannel(chaname);
84  % disp(['Will do ' chaname ' - ' num2str(chan)]);
85  if(chan == 0)
86  warning(['The EEG channel ' correspondance{i} ' does not '...
87  'exist. Aborting EEG']);
88  return;
89  end
90  if iEpoch ==0
91  data(i,:) = squeeze(phys_data.data(chan, :));
92  else
93  data(i, :) = squeeze(phys_data.data(chan, :, iEpoch));
94  end
95  end
96 
97  EEGSig = EEG_aqn_variable(correspondance, data, phys_data.srate);
98  BulkSig = Bulk_add_signal(BulkSig, EEG__get_signame(), EEGSig);
99  end
100 
101 %GSR
102  function BulkSig = addGSR(BulkSig, iEpoch,correspondance)
103  GSRChannel = findMyChannel(correspondance{1});
104  if(GSRChannel == 0)
105  return;
106  end
107  if iEpoch ==0
108  data = phys_data.data(GSRChannel, :);
109  else
110  data = phys_data.data(GSRChannel, :, iEpoch);
111  end
112 
113  GSRSig = GSR_aqn_variable(squeeze(data), phys_data.srate);
114  BulkSig = Bulk_add_signal(BulkSig, GSR__get_signame(), GSRSig);
115  end
116 
117 %Temp/HST
118  function BulkSig = addHST(BulkSig, iEpoch,correspondance)
119  HSTChannel = findMyChannel(correspondance{1});
120  if(HSTChannel == 0)
121  return;
122  end
123  if iEpoch ==0
124  data = phys_data.data(HSTChannel, :);
125  else
126  data = phys_data.data(HSTChannel, :, iEpoch);
127  end
128 
129  HSTSig = HST_aqn_variable(squeeze(data), phys_data.srate);
130  BulkSig = Bulk_add_signal(BulkSig, HST__get_signame(), HSTSig);
131  end
132 
133 %Respiration
134  function BulkSig = addRES(BulkSig, iEpoch,correspondance)
135  RESChannel = findMyChannel(correspondance{1});
136  if(RESChannel == 0)
137  return;
138  end
139  if iEpoch ==0
140  data = phys_data.data(RESChannel, :);
141  else
142  data = phys_data.data(RESChannel, :, iEpoch);
143  end
144 
145  RESSig = RES_aqn_variable(squeeze(data), phys_data.srate);
146  BulkSig = Bulk_add_signal(BulkSig, RES__get_signame(), RESSig);
147  end
148 
149 %BVT/Plet
150  function BulkSig = addBVP(BulkSig, iEpoch,correspondance)
151  BVPChannel = findMyChannel(correspondance{1});
152  if(BVPChannel == 0)
153  return;
154  end
155  if iEpoch ==0
156  data = phys_data.data(BVPChannel, :);
157  else
158  data = phys_data.data(BVPChannel, :, iEpoch);
159  end
160 
161  BVPSig = BVP_aqn_variable(squeeze(data), phys_data.srate);
162  BulkSig = Bulk_add_signal(BulkSig, BVP__get_signame(), BVPSig);
163  end
164 
165 %EMG
166  function BulkSig = addEMG(BulkSig, iEpoch,correspondance)
167  for i = 1:length(correspondance)
168  EMGChannel(i) = findMyChannel(correspondance{i});
169  end
170  if any(EMGChannel == 0)
171  return;
172  end
173  if iEpoch ==0
174  data = phys_data.data(EMGChannel, :);
175  else
176  data = phys_data.data(EMGChannel, :, iEpoch);
177  end
178  temp = squeeze(zeros(size(data,1)/2,size(data,2),size(data,3)));
179  if mod(size(data,1),2)==0
180  for j = 1:size(data,1)/2
181  temp(j,:,:) = data(j*2-1,:,:) - data(j*2,:,:); %subtracting two leads
182  end
183  data = temp;
184  else
185  error('Usage: You need two leads!');
186  end
187  EMGSig = EMG_aqn_variable(squeeze(data), phys_data.srate);
188  BulkSig = Bulk_add_signal(BulkSig, EMG__get_signame(), EMGSig);
189  end
190 
191 %ECG
192  function BulkSig = addECG(BulkSig, iEpoch,correspondance)
193  for i = 1:length(correspondance)
194  ECGChannel(i) = findMyChannel(correspondance{i});
195  end
196  if any(ECGChannel == 0)
197  return;
198  end
199  if iEpoch ==0
200  data = phys_data.data(ECGChannel, :);
201  else
202  data = phys_data.data(ECGChannel, :, iEpoch);
203  data = squeeze(data);
204  end
205  if size(data,1)==2
206  data = data(1,:,:) - data(2,:,:); %subtracting two leads
207  elseif size(data,1)>2
208  error('Usage: We dont support more than two leads at the moment!');
209  else
210  error('Usage: You need two leads at least!');
211  end
212 
213  ECGSig = ECG_aqn_variable(data, phys_data.srate);
214  BulkSig = Bulk_add_signal(BulkSig, ECG__get_signame(), ECGSig);
215  end
216 
217 %Find my channel
218  function iChannel = findMyChannel(chanName)
219  for iChannel = [1:length(phys_data.chanlocs)]
220  % disp(['Will compare ' chanName ' and ' phys_data.chanlocs(iChannel).labels]);
221  if(strcmp(chanName, phys_data.chanlocs(iChannel).labels) == 1)
222  return;
223  end
224  end
225  iChannel = 0;
226  warning(['Could not find channel ' chanName ', it will not be included in the bulk. Please correct the configuration file (config_file.m) accordingly'])
227  end
228 
229 
230 end
231 
HST__get_signame
function HST__get_signame()
addBVP
function addBVP(in BulkSig, in iEpoch, in correspondance)
Bulk_add_signal
function Bulk_add_signal(in BulkSig, in signame, in sig)
GSR_aqn_variable
function GSR_aqn_variable(in rawGSR, in sampRate)
RES__get_signame
function RES__get_signame()
addGSR
function addGSR(in BulkSig, in iEpoch, in correspondance)
BVP__get_signame
function BVP__get_signame()
findMyChannel
function findMyChannel(in chanName)
Bulk_load
function Bulk_load(in file_name)
addHST
function addHST(in BulkSig, in iEpoch, in correspondance)
addRES
function addRES(in BulkSig, in iEpoch, in correspondance)
RES_aqn_variable
function RES_aqn_variable(in rawRES, in sampRate)
EMG_aqn_variable
function EMG_aqn_variable(in EMG, in EMG2, in sampRate)
function
function()
BVP_aqn_variable
function BVP_aqn_variable(in rawBVP, in sampRate)
sload
function sload(in FILENAME, in varargin)
GSR__get_signame
function GSR__get_signame()
EEG_aqn_variable
function EEG_aqn_variable(in eegChannels, in eegData, in sampRate)
ECG_aqn_variable
function ECG_aqn_variable(in ECG, in ECG2, in sampRate)
Bulk_new_empty
function Bulk_new_empty()
EEG__get_signame
function EEG__get_signame()
addEMG
function addEMG(in BulkSig, in iEpoch, in correspondance)
EMG__get_signame
function EMG__get_signame()
HST_aqn_variable
function HST_aqn_variable(in rawHST, in sampRate)
Copyright Frank Villaro-Dixon, 2014.
addECG
function addECG(in BulkSig, in iEpoch, in correspondance)
ECG__get_signame
function ECG__get_signame()
addEEG
function addEEG(in BulkSig, in iEpoch, in correspondance)
pop_biosig
function pop_biosig(in filename, in varargin)