Skip to content

PipeCompare 0.9.0

Choose a tag to compare

@github-actions github-actions released this 05 Oct 07:27
3f5036b
  • Use this pipeline (and adopt) no longer fits ICA again: the decomposition computed during
    the comparison is reused, so adopting a pipeline with ICA no longer waits for a whole ICA. The result is the same (runica already started from a fixed state, and the replay
    check still compares the scores); the dataset history keeps the pop_runica command.

  • ICLabel classifies each dataset once: pipelines that differ only in the ICLabel threshold share
    the classification. Standard for ERPs runs ICLabel 36 times instead of 108; the results are
    unchanged.

  • Signal check: the injected ERP is at least 50 ms wide at half maximum. For N170 (40 ms window)
    it was 10 ms wide in sigma, half a real N170, so a 20 Hz low-pass rang beyond the artifact limit
    and was always excluded, although it changes a realistic N170 by about 0.1 %. The other ERP CORE
    components are unaffected.

  • N2pc and LRP are scored contralateral minus ipsilateral, as ERP CORE measures them: the
    dialog takes the event types of each side (pop_pipecompare(..., 'left', {...}, 'right', {...})), each trial is scored as the electrode contralateral to its side minus the other, and
    the signal check uses a lateralized field. Before, the mean of the two electrodes was scored,
    which cancels the lateralized component and keeps the noise common to both hemispheres.

  • Band power, Standard: one high-pass and one low-pass edge (the catalog values nearest the
    band outside it) instead of every combination, so 9 pipelines instead of 108 (ICLabel runs 3
    times instead of 36). Outside the band a filter does not change its power. Filters only
    still compares the filters.

  • Band power: the signal check tested only the band centre, so a filter that cut into the band
    (a 40 Hz low-pass for a 30-45 Hz band) passed. It now also tests one frequency step inside each
    band edge. The simple mode no longer compares filter edges inside the band (e.g. a 20 Hz
    low-pass for beta, 13-30 Hz), and says so under Left out.

  • Simple mode on epoched data: the ERP CORE epoch (-200 to 800 ms) was required, so data epoched
    otherwise (e.g. -100 to 600 ms) were refused although they hold the measurement window. Epoched
    data now keep their own epochs; the baseline starts at the epoch start when the epochs start
    later, and a window or baseline the epochs do not hold is named in the message.

  • pop_pipecompare: when the search stopped with an error, its log was lost (only the error was
    shown); the log is now written to pipecompare_last_run.log first. 'recipe' defaults to
    'standard', as in the dialog (it was an error to leave it out); numeric event types are
    accepted; several selected datasets give a clear message.

  • Simple dialog: switching between your own window and your own band clears the numbers, so
    milliseconds are not read as hertz.

  • A single epoch (one event of the conditions, or rejection leaving one) stopped with a MATLAB
    formatting error; it now says that each condition needs at least two trials. Three error
    messages with time or frequency ranges failed the same way and now print their numbers.

  • Simple mode: Reference (as recorded, or average reference) as a fixed step of every pipeline,
    after the bad channels and before ICA (pop_pipecompare(..., 'reference', 'average')).
    Previously re-referencing had to be done before PipeCompare, which spread bad channels into
    the average.

  • Simple mode, Standard: bad channels are detected on a 1 Hz high-passed copy (slow drifts
    distorted the kurtosis of unfiltered data) and interpolated in the data as they are
    (badchannels parameter detectHighpass, 0 by default in the panel). EOG, ECG and EMG channels
    are no longer tested as bad channels or counted by the epoch-rejection threshold, where blinks
    removed many epochs; they are recognised by type or, when the type is not set, by name.

  • Save script... for band power wrote the default ERP contract, so the script did not cut the
    data into segments and failed at its epoch step; it now keeps the band-power contract.

  • A pop_clean_rawdata step added as an EEGLAB command is refused at plan time when ASR has no
    filter for the rate (no Signal Processing Toolbox), as the catalog ASR step is; it silently did
    nothing. An EEGLAB command with no argument after EEG no longer fails with a syntax error.

  • Simple mode reads the data unit from the amplitude scale, as the panel does: on data stored in
    volts the epoch-rejection thresholds previously removed nothing.

  • Simple mode no longer compares filter edges the data already have (from the history): they left
    the data unchanged but filtered the known signal, which favoured the lower high-pass edges.

  • The result window names pipelines by the settings compared (high-pass 0.5 Hz, low-pass
    30 Hz, …
    ) instead of the full step key, with one line for the steps all pipelines share; with
    no feasible pipeline it gives one pipeline's reason with its numbers.

  • The time left is estimated from the pipelines after the first (which alone runs ICA), shown as
    hours and minutes; Stop says it stops after the current step.

  • Simple mode: boundary markers are not offered as events; on epoched data the time-locking
    types are preselected; selected types can be scored as one condition ('pool'); a condition
    with fewer than 10 events is flagged before Run instead of excluding every pipeline after it.

  • Simple-mode dialog: one Measure list with what the data support (the data-type menu and the
    segment field are gone; segments stay settable from scripts), Standard preselected, and Run
    off when fewer than two pipelines would be compared. The list adds your own window and
    electrodes
    (ERP) and your own band and electrodes; pop_pipecompare takes them as
    'measure', 'custom' with 'window' and 'channels', or 'measure', 'band' with 'band'.

  • Save script… / writeScript writes a function that runs the pipeline's steps on any
    recording (pipecompare.PipeCompare.apply): bad channels, ICLabel components and rejected
    epochs are decided from that recording's data. Previously the file replayed this dataset's
    channel, component and epoch numbers, which gave wrong results on other recordings without an
    error. The exact commands follow as comments.

  • Advanced… in the simple dialog no longer leaves an empty panel and an error when the choices
    cannot be handed over (e.g. a missing electrode): it says why and the dialog stays open. It is
    off for band power, which the panel does not define.

  • Result window: Use this pipeline shows that it is building the pipeline again (ICA too) and
    then says the new dataset is not saved yet; Show all pipelines lists every pipeline with the
    reason it was excluded, in place of Details… (the panel remains in the menu).

  • pop_pipecompare prints a two-line summary instead of about 900 lines; the full log goes to
    pipecompare_last_run.log in tempdir. The menu item Show dataset state and history is
    removed (it only printed to the Command Window); pipecompare.PipeCompare.state() remains.

  • A plan with ASR or ICLabel IC removal is now illegal when the clean_rawdata or ICLabel plugin is
    missing, with that reason, before the search starts; previously every candidate failed during it.

  • ASR is also illegal when its filter cannot be built: without the Signal Processing Toolbox,
    clean_rawdata has it only for 100, 128, 200, 256, 300, 500 and 512 Hz, and at other rates it
    returned the data unchanged, so ASR candidates silently did nothing.

  • Simple mode, Standard: bad channels are detected once (kurtosis, z = 5) and ICA is fitted once,
    before the filters, so all filter choices share one decomposition: 108 pipelines and 1 ICA
    instead of 432 pipelines and 48 ICAs. Full is removed from the simple mode (it was always above
    the search limit); ASR stays available in the panel and from scripts.

  • Simple mode shows a progress window (pipelines done, time left) with Stop; stopping keeps the
    pipelines already run and the result covers those. Scripts get the same through the new
    progress option of optimize.

  • The simple-mode result window says in one sentence which pipeline to use and why; columns and
    buttons use plain words (Use this pipeline, Details…).