Version 1.4.0 (2023-05-10)#
Enhancements#
Add functionality for reading CNT spans/annotations marked bad to
mne.io.read_raw_cnt()(#11631 by new contributor Jacob Woessner)Add
:unit:Sphinx directive to enable use of uniform non-breaking spaces throughout the documentation (#11469 by new contributor Sawradip Saha)Adjusted the algorithm used in
mne.decoding.SSDto support non-full rank data (#11458 by new contributor Thomas Binns)Changed suggested type for
ch_groupsinmne.viz.plot_sensorsfrom array to list of list(s) (arrays are still supported). (#11465 by Hyonyoung Shin)Add support for UCL/FIL OPM data using
mne.io.read_raw_fil()(#11366 by new contributor George O’Neill and Robert Seymour)Add harmonic field correction (HFC) for OPM sensors in
mne.preprocessing.compute_proj_hfc()(#11536 by new contributor George O’Neill and Eric Larson)Forward argument
axesfrommne.viz.plot_sensorstomne.channels.DigMontage.plot(#11470 by new contributor Jan Ebert and Mathieu Scheltienne)Add forward IIR filtering, using parameters
method='iir', phase='forward'(#11078 by new contributor Quentin Barthélemy)Added ability to read stimulus durations from SNIRF files when using
mne.io.read_raw_snirf()(#11397 by Robert Luke)Add
mne.Info.save()to save anmne.Infoobject to a fif file (#11401 by Alex Rockhill)Improved error message when downloads are corrupted for
mne.datasets.sample.data_path()and related functions (#11407 by Eric Larson)Improved
mne.get_config("")behavior to return a dict of key-value pairs (config key and its description) rather than just a tuple of config keys (#11166 by Clemens Brunner, Daniel McCloy, and Eric Larson)Add support for
skip_by_annotationinmne.io.Raw.notch_filter()(#11388 by Mainak Jas)Add support for
output='complex'tomne.time_frequency.psd_array_welch()and when usingmethod='welch'withmne.Epochs.compute_psd()(#11556 by Eric Larson)Slightly adjusted the window title for
mne.Epochs.plot()(#11419 by Richard Höchenberger and Daniel McCloy)Add
mne.count_events()to count unique event types in a given event array (#11430 by Clemens Brunner)Add a video to How MNE uses FreeSurfer’s outputs of a brain inflating from the pial surface to aid in understanding the inflated brain (#11440 by Alex Rockhill)
Add automatic projection of sEEG contact onto the inflated surface for
mne.viz.Brain.add_sensors()(#11436 by Alex Rockhill)Allow an image with intracranial electrode contacts (e.g. computed tomography) to be used without the freesurfer recon-all surfaces to locate contacts so that it doesn’t have to be downsampled to freesurfer dimensions (for microelectrodes) and show an example Locating micro-scale intracranial electrode contacts with
mne.transforms.apply_volume_registration_points()added to aid this transform (#11567 by Alex Rockhill)Use new
dipy.align.imwarp.DiffeomorphicMap.transform_points()to transform a montage of intracranial contacts more efficiently (#11572 by Alex Rockhill)Improve performance of raw data browsing with many annotations (#11614 by Eric Larson)
Add support for
mne.preprocessing.maxwell_filter()with gradient-compensated CTF data, e.g., for tSSS-only mode (#10554 by Eric Larson)Add support for eyetracking data using
mne.io.read_raw_eyelink()(#11152 by Dominik Welke and Scott Huberty)mne.channels.make_1020_channel_selections()gained a new parameter,return_ch_names, to allow for easy retrieval of EEG channel names corresponding to the left, right, and midline portions of the montage (#11632 by Richard Höchenberger)Methods for setting the sensor types of channels (e.g., for raw data,
mne.io.Raw.set_channel_types()) gained a new parameter,on_unit_change, to control behavior (raise an exception, emit a warning, or do nothing) in case the measurement unit is adjusted automatically (#11668 by Richard Höchenberger)mne.beamformer.trap_music()implements the TRAP-MUSIC localisation algorithm with the same signature asmne.beamformer.rap_music()(#11679 by Théodore Papadopoulo)
Bugs#
Improving compatibility with Qt6 by removing the use of deprecated
AA_UseHighDpiPixmapsattribute for this Qt version (#11662 by new contributor Florin Pop)Fix
mne.time_frequency.psd_array_multitaper()docstring where argumentbandwidthincorrectly reported argument as half-bandwidth and gave wrong explanation of default value (#11479 by new contributor Tom Stone)Fix bug where installation of a package depending on
mnewill error when done in an environment wheresetuptoolsis not present (#11454 by new contributor Arne Pelzer)Fix bug in
mne.Annotations.rename()where replacements were not done correctly (#11666 by new contributor Timur Sokhin and Eric Larson)Fix
mne.time_frequency.Spectrum.to_data_frame()’s docstring to reflect the correct name for the appended frequencies column (#11457 by new contributor Zvi Baratz)Fix bug with
mne.io.read_raw_egi()where events outside the recording window could break data reading (#11505 by new contributor Niels Focke)Fix bug where
mne.preprocessing.regress_artifact()andmne.preprocessing.EOGRegressionincorrectly trackedpicks(#11366 by Eric Larson)Fix bug where channel names were not properly sanitized in
mne.write_evokeds()and related functions (#11399 by Eric Larson)Fix bug where splash screen would not always disappear (#11398 by Eric Larson)
Fix bug where having a different combination of volumes loaded into
freeviewcaused different affines to be returned bymne.read_lta()for the same Linear Transform Array (LTA) (#11402 by Alex Rockhill)Fix how
mne.channels.DigMontageis set when usingmne.gui.locate_ieegso thatmne.Info.get_montage()works and does not returnNone(#11421 by Alex Rockhill)Fix
mne.io.read_raw_edf()when reading EDF data with different sampling rates and a mix of data channels when usinginfer_types=True(#11427 by Alex Gramfort)Fix how
mne.channels.DigMontageis set when usingmne.preprocessing.ieeg.project_sensors_onto_brain()so thatmne.Info.get_montage()works and does not returnNone(#11436 by Alex Rockhill)Fix configuration folder discovery on Windows, which would fail in certain edge cases; and produce a helpful error message if discovery still fails (#11441 by Richard Höchenberger)
Make
SlidingEstimatorandGeneralizingEstimatorrespect theverboseargument. Now withverbose=False, the progress bar is not shown during fitting, scoring, etc. (#11450 by Mikołaj Magnuski)Fix bug with
mne.gui.locate_ieegwhere Freesurfer?h.pial.T1was not recognized and suppress excess logging (#11489 by Alex Rockhill)All functions accepting paths can now correctly handle
Pathas input. Historically, we expected strings (instead of “proper” path objects), and only addedPathsupport in a few select places, leading to inconsistent behavior. (#11473 and #11499 by Mathieu Scheltienne)Fix visualization dialog compatibility with matplotlib 3.7 (#11409 by Daniel McCloy and Eric Larson)
Expand tilde (user directory) in config keys (#11537 by Clemens Brunner)
Fix bug in
mne.preprocessing.compute_maxwell_basis()where usingint_order=0would raise an error (#11562 by Eric Larson)In the legacy function
mne.viz.plot_epochs_psd_topomap(), the parameternamesnow works again (#11563 by Daniel McCloy)Fix
mne.io.read_raw()for file names containing multiple dots (#11521 by Clemens Brunner)Fix bug in
mne.export.export_raw()when exporting to EDF with a physical range set smaller than the data range (#11569 by Mathieu Scheltienne)Fix bug in
mne.concatenate_raws()where two raws could not be merged if the order of the bad channel lists did not match (#11502 by Moritz Gerster)Fix bug where
mne.Evoked.plot_topomap()opened an extra figure (#11607 by Alex Rockhill)Fix bug where
mne.transforms.apply_volume_registration_points()modified info in place (#11612 by Alex Rockhill)Fix bug where Maxwell-filtered data rank was not handled properly in
mne.beamformer.make_lcmv()(#11664 by Eric Larson)In
Report, custom figures now show up correctly whenimage_format='svg'is requested (#11623 by Richard Höchenberger)Fix bug where providing
axesinmne.preprocessing.ICA.plot_componentswould fail (#11654 by Mathieu Scheltienne)Fix deprecation of
title,vminandvmaxinplot_tfr_topomapcalled from interactivemne.time_frequency.AverageTFR.plot_topo(#11683 by Mathieu Scheltienne)
API changes#
Deprecate
mne.gui.locate_ieegin favor ofmne_gui_addons.locate_ieeg()(#11616 by Alex Rockhill)Deprecate arguments
kindandpathfrommne.channels.read_layout()in favor of a common argumentfname(#11500 by Mathieu Scheltienne)Change
aligned_ctpositional argument inmne.gui.locate_ieegtobase_imageto reflect that this can now be used with unaligned images (#11567 by Alex Rockhill)mne.warp_montage_volumewas deprecated in favor ofmne.preprocessing.ieeg.warp_montage()(acts directly on points instead of using an intermediate volume) andmne.preprocessing.ieeg.make_montage_volume()(which makes a volume of ieeg contact locations which can still be useful) (#11572 by Alex Rockhill)Deprecate
mne.pick_channels_evokedin favor ofevoked.copy().pick(...)(#11665 by Eric Larson)Set instance methods
inst.pick_typesandinst.pick_channelsas legacy in favor ofinst.pick(...)(#11665 by Eric Larson)The default of
inst.pick_channels(..., ordered=False)will change toordered=Truein 1.5 to avoid silent bugs (#11665 by Eric Larson)