@@ -164,24 +164,47 @@ def __init__(
164
164
self .matlab_strict = matlab_strict
165
165
166
166
# Initialize attributes to be filled in later
167
- self .noisy_channels_original = None
168
- self .noisy_channels_before_interpolation = None
169
- self .noisy_channels_after_interpolation = None
170
- self .bad_before_interpolation = None
171
- self .EEG_before_interpolation = None
172
- self .reference_before_interpolation = None
173
- self .reference_after_interpolation = None
167
+ self .EEG_raw = self .raw_eeg .get_data ()
168
+ self .EEG_filtered = None
169
+ self .EEG_post_reference = None
170
+
171
+ # NOTE: 'original' refers to before initial average reference, not first
172
+ # pass afterwards. Not necessarily comparable to later values?
173
+ self .noisy_info = {
174
+ "original" : None , "post-reference" : None , "post-interpolation" : None
175
+ }
176
+ self .bad_channels = {
177
+ "original" : None , "post-reference" : None , "post-interpolation" : None
178
+ }
174
179
self .interpolated_channels = None
175
- self .still_noisy_channels = None
180
+ self .robust_reference_signal = None
181
+ self ._interpolated_reference_signal = None
176
182
177
183
@property
178
184
def raw (self ):
179
185
"""Return a version of self.raw_eeg that includes the non-eeg channels."""
180
186
full_raw = self .raw_eeg .copy ()
181
- if self .raw_non_eeg is None :
182
- return full_raw
183
- else :
184
- return full_raw .add_channels ([self .raw_non_eeg ])
187
+ if self .raw_non_eeg is not None :
188
+ full_raw .add_channels ([self .raw_non_eeg ])
189
+ return full_raw
190
+
191
+ @property
192
+ def current_noisy_info (self ):
193
+ post_ref = self .noisy_info ["post-reference" ]
194
+ post_interp = self .noisy_info ["post-interpolation" ]
195
+ return post_interp if post_interp else post_ref
196
+
197
+ @property
198
+ def remaining_bad_channels (self ):
199
+ post_ref = self .bad_channels ["post-reference" ]
200
+ post_interp = self .bad_channels ["post-interpolation" ]
201
+ return post_interp if post_interp else post_ref
202
+
203
+ @property
204
+ def current_reference_signal (self ):
205
+ post_ref = self .robust_reference_signal
206
+ post_interp = self ._interpolated_reference_signal
207
+ return post_interp if post_interp else post_ref
185
208
186
209
def remove_line_noise (self , line_freqs ):
187
210
"""Remove line noise from all EEG channels using multi-taper decomposition.
@@ -216,6 +239,7 @@ def remove_line_noise(self, line_freqs):
216
239
freqs = line_freqs ,
217
240
method = "spectrum_fit" ,
218
241
** settings ,
242
+ # Add support for parallel jobs if joblib installed?
219
243
)
220
244
self .EEG_filtered = (self .EEG_raw - eeg_detrended ) + eeg_cleaned
221
245
self .raw_eeg ._data = self .EEG_filtered
@@ -245,29 +269,28 @@ def robust_reference(self, max_iterations=4, interpolate_bads=True):
245
269
246
270
"""
247
271
# Perform robust referencing on the signal
248
- reference = Reference (
272
+ ref = Reference (
249
273
self .raw_eeg ,
250
274
self .prep_params ,
251
275
random_state = self .random_state ,
252
276
matlab_strict = self .matlab_strict ,
253
277
** self .ransac_settings ,
254
278
)
255
- reference .perform_reference (max_iterations , interpolate_bads )
279
+ ref .perform_reference (max_iterations , interpolate_bads )
256
280
257
- self .raw_eeg = reference .raw
258
- self .noisy_channels_original = reference .noisy_channels_original
259
- self .noisy_channels_before_interpolation = (
260
- reference .noisy_channels_before_interpolation
261
- )
262
- self .noisy_channels_after_interpolation = (
263
- reference .noisy_channels_after_interpolation
264
- )
265
- self .bad_before_interpolation = reference .bad_before_interpolation
266
- self .EEG_before_interpolation = reference .EEG_before_interpolation
267
- self .reference_before_interpolation = reference .reference_signal
268
- self .reference_after_interpolation = reference .reference_signal_new
269
- self .interpolated_channels = reference .interpolated_channels
270
- self .still_noisy_channels = reference .still_noisy_channels
281
+ self .raw_eeg = ref .raw
282
+ self .EEG_post_reference = ref .EEG_before_interpolation
283
+ self .robust_reference_signal = ref .reference_signal
284
+ self ._interpolated_reference_signal = ref .reference_signal_new
285
+
286
+ self .noisy_info ["original" ] = ref .noisy_channels_original
287
+ self .noisy_info ["post-reference" ] = ref .noisy_channels_before_interpolation
288
+ self .noisy_info ["post-interpolation" ] = ref .noisy_channels_after_interpolation
289
+
290
+ self .bad_channels ["original" ] = ref .noisy_channels_original ["bad_all" ]
291
+ self .bad_channels ["post-reference" ] = ref .bad_before_interpolation
292
+ self .bad_channels ["post-interpolation" ] = ref .still_noisy_channels
293
+ self .interpolated_channels = ref .interpolated_channels
271
294
272
295
def fit (self ):
273
296
"""Run the whole PREP pipeline."""
0 commit comments