Repository navigation
PipeCompare 0.9.3
PipeCompare now works with EEGLAB 2022.0 and later (it needed 2024.2.1).
- EEGLAB 2022.0 to 2024.2: menu items, removing channels, the dataset history in the panel and
cutting data work there too. On EEGLAB 2024.0 and older with recent MATLAB, cutting time ranges
out of continuous data no longer stops with "Colon operands must be real scalars". - A warning in the Command Window when IC removal runs with ICLabel 1.5 (bundled with EEGLAB
2024.0), which classifies components wrongly; update ICLabel to 1.6 or later. - EEGLAB 2022.0 to 2024.2: ICA no longer opens runica's Interrupt window for every fit (a click
stopped the fit half way). PipeCompare fits ICA there as pop_runica does, without the window. - EEGLAB 2022: ASR no longer stops with "Not enough memory" for many channels or high sampling
rates; the memory ASR may use is raised to what its buffer needs (64 MB as before otherwise). - EEGLAB 2025.1 and later: a channel removed by re-referencing to it before PipeCompare is no
longer taken for a removed channel and interpolated back. - Interpolated bad channels and listed channels are now written in
EEG.history(EEGLAB's
pop_interp gives no command when called from a script, so the line was missing). - Save script… refuses file names that MATLAB cannot use as a function name (spaces, Chinese
characters, hyphens, a leading digit) or that would hide an existing MATLAB or EEGLAB function,
and writes the file in UTF-8. - Without the firfilt plugin, filter steps (and the high-passed copies for bad-channel detection
and ICA) are refused before the search with that reason, instead of failing in every pipeline. pop_pipecompareaccepts options written as MATLAB strings ("P3"), which made it stop after
the search.- The dialog, the panel and the results window fit on small screens (e.g. 1366 x 768) instead of
opening with the title bar off screen. - The full test suite runs automatically on every MATLAB release from R2021b to R2026a and on every
EEGLAB release from 2022.0 to 2026.0.0. The README lists the combinations. - README: how to start PipeCompare and use its results from the MATLAB command line.
Recommendations can change: ICA is now fitted without the noisiest stretches of data, the signal check now uses a known signal as wide as the measurement
window, which excludes a 1 Hz high-pass for broad components such as the LRP, and repairs never
touch a measured electrode (see below). Also changed: data cleaned with clean_rawdata from a script
whose high-pass PipeCompare now sees, and data with ear or mastoid channels.
- Montage check before a run: channels whose signal does not resemble their nearest neighbours
(1-30 Hz, average reference, first 10 minutes) are named with the channels they resemble most,
since their labels may not match the electrode positions. In the dialog's data line, the
Command Window and the advanced panel's data warnings; a warning only. - After a run, a note when ICA did nothing useful: ICLabel recognised almost no component (fewer
than 2 with Brain >= 0.5, or median Other above 0.8), or no pipeline removed a component. The
ICLabel line of each pipeline's step list gives the brain-like and Other counts. In the results
window, the Command Window and the advanced panel's notes. - ICA is fitted without the stretches of data far noisier than the rest (1 s windows or epochs
with a robust z of the log SD above 3, at most 20%), and applied to all of the data; parameter
fitCleanof the ica step (1 by default). ICA results can change. - Peak-to-peak rejection (ERP CORE):
reject_thresholdtakesmethodpeaktopeak(range within
a moving 200 ms window, 50 ms steps) andwindow; simple mode offers it under the rejection
(measure the limit peak-to-peak in 200 ms windows,'peaktopeak', limits 100, 150, 200 µV). - The signal check's known signal is now as wide at half maximum as the measurement window (was a
quarter-window SD): a 1 Hz high-pass is now caught for broad components such as the LRP, as at
their realistic widths. Results can change: such pipelines are now excluded. - Repairing epochs never repairs an electrode you measure (that epoch is rejected), and the result
says when the recommended pipeline interpolated a measured electrode as a bad channel: a
rebuilt electrode has less noise than a real one, so its SME looks better than it is. - Flat channels (no signal: a spread of zero or under 1% of the median) are named before a run and
are always bad in the bad-channel step, set aside before kurtosis and joint probability (which
are undefined on a constant). - After a run, a note when ICA had fewer than 20 x (components)² data points, and when one channel
was over the limit in at least half of the recommended pipeline's rejected epochs (likely a bad
channel the detection missed). In the same places. - Repairing epochs: a rejection step can keep an epoch failed by at most n channels, with those
channels interpolated within that epoch (parameterinterpolateof every rejection step in the
advanced panel and scripts; simple mode: instead, repair epochs with up to 3 channels over the
limit,'epochinterp', not part of Standard). The signal check replays the same repairs;
with the average reference, the data are averaged again after them. The simple mode's
Standard (all) button is now Standard. - Simple mode: instead of choosing between Standard and Filters only, tick the steps to
compare in a list shown in the order they run (bad channels, reference, ICA, high-pass,
low-pass, epochs, epoch rejection); the order stays fixed. Standard (all) and Filters only
are buttons that tick their steps. Steps the data cannot take are greyed out with the reason.
pop_pipecomparetakes'steps', e.g.{'highpass', 'lowpass', 'reject'};'recipe'works
as before. - Simple mode: the electrodes of a preset (an ERP component, or a band) can be changed with
Electrodes…; they start from the component's ERP CORE site(s) and several are averaged.
N2pc and LRP keep their pair.pop_pipecompare(..., 'channels', {...})does the same. - The results window lists what the recommended (or the selected) pipeline did, step by step in
order: each step's settings and its decisions on the data (bad channels interpolated, ICA
components removed, epochs rejected), then the trials kept per condition. Also in the Command
Window and in the advanced panel's details of a result row. - The result says how large a difference the recording can show: with the recommended pipeline's
SME, two conditions must differ by about 2.8 x sqrt(SME_a² + SME_b²) (80% power, two-sided
p < .05; one condition: 2.8 x SME against 0) to be told apart. When the differences seen are
smaller, it adds that more trials would help more than other preprocessing. In the results
window, the Command Window and the advanced panel. - Ear and mastoid channels (A1, A2, M1, M2, also as
POL A1from EDF exports, or typedREF) are
recognised in any dataset and handled like EOG channels: no longer tested as bad channels and
interpolated, nor counted in epoch rejection or the average reference. Before, Standard could
flag and interpolate them (for example A1 and A2 that a linked-ears reference left flat). Numbered
caps (BioSemi A1-A32) and channels typedEEGon purpose stay scalp channels. Recommendations can
change on data with such channels. - While a comparison runs, the Command Window prints each step and each finished pipeline as it
happens (in the simple mode it used to stay silent until the end); the same text is still kept
inpipecompare_last_run.log. - The progress window shows the step running now (e.g. fitting ICA) and the time so far,
updated every second. Before the first pipeline is done the bar moves back and forth, since
that first pipeline also runs the shared steps such as ICA, which can take minutes. The same
window is used by the simple mode and the panel, also when the search runs in parallel. - Save script… for ERPs now writes the components (name, window, electrodes, measure) into the
script's analysis contract, so that contract can be used to score data again. The script's steps
were already complete. - The EEGLAB history command of
pop_pipecomparekeeps'show', 'off', so repeating it does not
open windows. - When the signal-check copy fails at a step, only the signal check of the pipelines below is
missing (they are excluded with "signal check missing" and still scored); the pipelines are no
longer marked as failed although their data ran. - Advanced… from the simple dialog: the plan table shows the epoch and baseline taken over from
the dialog instead of "not set yet". - The progress window's time reads "2 h 0 min" instead of "1 h 60 min" (and "1 h 0 min" instead of
"60 min"). - Event-related band power: a baseline outside the epoch is reported before the run. A band-power
contract given bothsegmentandconditions/epoch/baselineis an error, since one of them
would be ignored. - Filters applied before PipeCompare: clean_rawdata's own high-pass is now recognised in every form
a history can hold: option names in any case or ashighpass_band, the option left out (it then
uses its default, a high-pass at 0.75 Hz), and switched off. Before, only the form the EEGLAB
dialog writes was read, so a high-pass done this way was not taken into account (the choice of
high-pass values and the warning about filters applied before PipeCompare use it). - Results window: a step that only some pipelines have (e.g. the high-pass when the data were
already filtered) is now named in every pipeline: "high-pass 0.5 Hz" or "high-pass as in the
data". Before, two such pipelines could have the same name. - Data re-referenced with
pop_averef(EEG.ref = 'averef') are recognised as average-referenced,
so the results no longer suggest trying the average reference. - Save script… of a pipeline that did not pass the checks asks first, as Use this pipeline
does, in the simple mode and in the panel. - Parallel search: the progress window counts the pipelines finished on the pool, and Stop stops
the pool's work too (it used to take effect only after the parallel part).