Skip to content

Commit 4e0e039

Browse files
committed
Move bad chan info to dicts, rename attributes
1 parent fce1724 commit 4e0e039

File tree

1 file changed

+51
-28
lines changed

1 file changed

+51
-28
lines changed

pyprep/prep_pipeline.py

Lines changed: 51 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -164,24 +164,47 @@ def __init__(
164164
self.matlab_strict = matlab_strict
165165

166166
# 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+
}
174179
self.interpolated_channels = None
175-
self.still_noisy_channels = None
180+
self.robust_reference_signal = None
181+
self._interpolated_reference_signal = None
176182

177183
@property
178184
def raw(self):
179185
"""Return a version of self.raw_eeg that includes the non-eeg channels."""
180186
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
185208

186209
def remove_line_noise(self, line_freqs):
187210
"""Remove line noise from all EEG channels using multi-taper decomposition.
@@ -216,6 +239,7 @@ def remove_line_noise(self, line_freqs):
216239
freqs=line_freqs,
217240
method="spectrum_fit",
218241
**settings,
242+
# Add support for parallel jobs if joblib installed?
219243
)
220244
self.EEG_filtered = (self.EEG_raw - eeg_detrended) + eeg_cleaned
221245
self.raw_eeg._data = self.EEG_filtered
@@ -245,29 +269,28 @@ def robust_reference(self, max_iterations=4, interpolate_bads=True):
245269
246270
"""
247271
# Perform robust referencing on the signal
248-
reference = Reference(
272+
ref = Reference(
249273
self.raw_eeg,
250274
self.prep_params,
251275
random_state=self.random_state,
252276
matlab_strict=self.matlab_strict,
253277
**self.ransac_settings,
254278
)
255-
reference.perform_reference(max_iterations, interpolate_bads)
279+
ref.perform_reference(max_iterations, interpolate_bads)
256280

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
271294

272295
def fit(self):
273296
"""Run the whole PREP pipeline."""

0 commit comments

Comments
 (0)