v1.10.x¶
v1.10.1 (2026-04-20)¶
New features & enhancements¶
- Improved performance by caching BIDSPath matches for Maxwell Filter calibration and cross-talk files (#1215 by @larsoner).
- Improved performance and logging when skipping cached steps (#1216 by @larsoner).
Bug fixes¶
- Fixed a bug where the group average step would errantly write its sensor averaged Evoked plots to the last subject's report.
To fix this after-the-fact, delete the
derivatives/mne-bids-pipeline/sub-average/andderivatives/mne-bids-pipeline/sub-<LAST>folders and rerun the pipeline. (#1220 by @larsoner)
v1.10.0 (2026-04-06)¶
New features & enhancements¶
- Support for using
mne-icalabelto automatically label ICA components. This requires themne-icalabelpackage to be installed. (#1018 and #812 by @jschepers, @behinger, @SNaber, @hoechenberger, and @larsoner) - It is now possible to use separate MRIs for each session within a subject, as in longitudinal studies. This is achieved by creating separate "subject" folders for each subject-session combination, with the naming convention
sub-XXX_ses-YYY, in the freesurferSUBJECTS_DIR. (#987 by @drammock) - New config option
allow_missing_sessionsallows to continue when not all sessions are present for all subjects. (#1000 by @drammock) - New config option
mf_extra_kwspasses additional keyword arguments tomne.preprocessing.maxwell_filter. (#1038 by @drammock) - New value
"twa"for config optionmf_destination, to use the time-weighted average head position across runs as the destination position. (#1043 and #1055 by @drammock) - New config options
mf_cal_missingandmf_ctc_missingfor handling missing calibration and cross-talk files (#1057 by @harrisonritz) - New config options
find_bad_channels_extra_kws,notch_extra_kws, andbandpass_extra_kwsto pass additional keyword arguments tomne.preprocessing.find_bad_channels_maxwell,mne.filter.notch_filter, andmne.filter.filter_datarespectively (#1061 by @harrisonritz) - Bad channel reports now say which channels were marked as bad in the original data and which were detected automatically by the pipeline. (#1138 by @larsoner)
- Config option
ssp_ecg_channelnow allows dict values, for setting a different channel name for each subject/session (#1062 by @drammock) - New config option
epochs_custom_metadataallows for custom metadata when creating epochs. (#1088 by @harrisonritz) - New config option [
process_raw_clean] to allow not fully cleaning raw data to save computing resources (#1136 by @larsoner) - Automatically avoid using
joblib.Parallelwhen only one iteration is needed (anddaskis not being used), allowing multithreaded linear algebra operations to be used (#1136 by @larsoner) - Add support for processing multiple tasks simultaneously using a list like
task = ["task1", "task2"]in the config file (#1141 by @larsoner) - Add support for disabling time-by-time decoding while still performing full-epochs decoding using
decoding_time(#1141 by @larsoner) - Add support for setting decimation for time-by-time decoding using
decoding_time_decim(#1141 by @larsoner) - Add support for subject and session-specific EOG channels in config and change ssp_ecg_channel to accept 'default' key when dict (#1151 by @skjerns)
- Add support for computing data rank using
mne.compute_rankviacov_rank(#1159 by @larsoner) - Add support for setting the number of smoothing steps when averaging via
smoothing_steps(#1195 by @larsoner)
Behavior changes¶
- The pipeline will now raise an error if a loaded
SourceSpacesobject has a._subjectattribute different from what the pipeline expects / would have used if creating theSourceSpacesanew. (#1056 by @drammock) - Maxwell filtering steps now use the union of bad channels across all tasks and runs to help ensure more consistent rank and behavior (#1158 by @larsoner)
- The path passed to
noise_covcallables is no longer the evoked dataset but instead epochs. Note that the epochs haveprocessing="clean"in theBIDSPath. (#1159 by @larsoner) - Values within
dicts passed tocontrastsmay now be any sequence (not justlists). (#1197 by @drammock)
Bug fixes¶
- Empty room matching is now done for all sessions (previously only for the first session) for each subject. (#976 by @drammock)
noise_cov_methodis now properly used for noise covariance estimation from raw data (#1010 by @larsoner)-
When running the pipeline with
mf_filter_chpienabled (#977 by @drammock and @larsoner):- Emptyroom files that lack cHPI channels will now be processed (for line noise only) instead of raising an error.
- cHPI filtering is now performed before movement compensation.
-
Fix bug where the
config.procparameter was not used properly during forward model creation (#1014 by @larsoner) - Fix bug where emptyroom recordings containing EEG channels would crash the pipeline during maxwell filtering (#1040 by @drammock)
- Fix bug where only having mag sensors would crash compute_rank during maxwell filtering or epoching (#1061 and #1069 by @harrisonritz)
- Improvements to template config file generation (#1074 by @drammock)
- Fix bug where
mf_int_orderwasn't passed tomaxwell_filter. Added config option formf_ext_order. (#1092 by @harrisonritz) - Sanitize report tags that contain
"or', e.g., for certain metadata contrasts (#1097 by @harrisonritz) sub-averageis no longer run when--subjectis passed to the pipeline command line interface, allowing easier and more correct single-subject iteration (#1133 by @larsoner)- Fix bug where time-weighted head position was not cached properly (#1135 by @larsoner)
- Fix bug where some config options were unnecessarily passed to steps, possibly leading to unnecessary cache misses (#1152 by @larsoner)
- Fix bug where the
config.data_typechannels were not properly picked during ICA fitting, leading to potential errors during ICA application (#1156 by @larsoner) - Fix bug where a nonexistent evoked
BIDSPathwas passed to user-definednoise_covcallables, a path to epochs is now passed instead (#1159 by @larsoner) - Fix bug where ICA pre-filtering was only applied to run-1, now filters all runs (#1164 by @Okimoka)
- Fix bug where
runswere not handled properly when a singletaskwas specified but multiple tasks existed in a dataset (#1141 by @larsoner)
Documentation¶
- Choose the theme (dark of light) automatically based on the user's operating system setting (#979 by @hoechenberger)
- Bundle all previously-external JavaScript to better preserve users' privacy (#982 by @hoechenberger)
- Document the need for offscreen rendering support when running on headless servers (#997 by @drammock)
- Add more info on test suite installation and running (#1154 by @skjerns)
Code health and infrastructure¶
- Switch from using relative to using absolute imports (#969 by @hoechenberger)
- Enable strict type checking via mypy (#995, #1013, #1016 by @larsoner)
- Improve logging messages in maxwell filtering steps. (#893 by @drammock)
- Validate extra config params passed in during testing. (#1044 by @drammock)
- New testing/example dataset "funloc" added. (#1045 by @drammock)
- Bugfixes and better testing of session-specific MRIs. (#1039 and #1067 by @drammock)
- Drop legacy function
inst.pick_typesin favor ofinst.pick(#1073 by @PierreGtch) - Moved to
ty,lefthook, anddependency-groupsfor development (#1166 by @larsoner)