Skip to content

PipeCompare 0.9.3

Choose a tag to compare

@github-actions github-actions released this 07 Oct 17:07
00c7cf3

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_pipecompare accepts 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
    fitClean of the ica step (1 by default). ICA results can change.
  • Peak-to-peak rejection (ERP CORE): reject_threshold takes method peaktopeak (range within
    a moving 200 ms window, 50 ms steps) and window; 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 (parameter interpolate of 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_pipecompare takes '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 A1 from EDF exports, or typed REF) 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 typed EEG on 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
    in pipecompare_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_pipecompare keeps '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 both segment and conditions/epoch/baseline is 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 as highpass_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).