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.SSD
to support non-full rank data (#11458 by new contributor Thomas Binns)Changed suggested type for
ch_groups
inmne.viz.plot_sensors
from 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
axes
frommne.viz.plot_sensors
tomne.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.Info
object 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_annotation
inmne.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_UseHighDpiPixmaps
attribute for this Qt version (#11662 by new contributor Florin Pop)Fix
mne.time_frequency.psd_array_multitaper()
docstring where argumentbandwidth
incorrectly 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
mne
will error when done in an environment wheresetuptools
is 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.EOGRegression
incorrectly 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
freeview
caused different affines to be returned bymne.read_lta()
for the same Linear Transform Array (LTA) (#11402 by Alex Rockhill)Fix how
mne.channels.DigMontage
is set when usingmne.gui.locate_ieeg
so 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.DigMontage
is 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
SlidingEstimator
andGeneralizingEstimator
respect theverbose
argument. Now withverbose=False
, the progress bar is not shown during fitting, scoring, etc. (#11450 by Mikołaj Magnuski)Fix bug with
mne.gui.locate_ieeg
where Freesurfer?h.pial.T1
was not recognized and suppress excess logging (#11489 by Alex Rockhill)All functions accepting paths can now correctly handle
Path
as input. Historically, we expected strings (instead of “proper” path objects), and only addedPath
support 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=0
would raise an error (#11562 by Eric Larson)In the legacy function
mne.viz.plot_epochs_psd_topomap()
, the parameternames
now 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
axes
inmne.preprocessing.ICA.plot_components
would fail (#11654 by Mathieu Scheltienne)Fix deprecation of
title
,vmin
andvmax
inplot_tfr_topomap
called from interactivemne.time_frequency.AverageTFR.plot_topo
(#11683 by Mathieu Scheltienne)
API changes#
Deprecate
mne.gui.locate_ieeg
in favor ofmne_gui_addons.locate_ieeg()
(#11616 by Alex Rockhill)Deprecate arguments
kind
andpath
frommne.channels.read_layout()
in favor of a common argumentfname
(#11500 by Mathieu Scheltienne)Change
aligned_ct
positional argument inmne.gui.locate_ieeg
tobase_image
to reflect that this can now be used with unaligned images (#11567 by Alex Rockhill)mne.warp_montage_volume
was 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_evoked
in favor ofevoked.copy().pick(...)
(#11665 by Eric Larson)Set instance methods
inst.pick_types
andinst.pick_channels
as legacy in favor ofinst.pick(...)
(#11665 by Eric Larson)The default of
inst.pick_channels(..., ordered=False)
will change toordered=True
in 1.5 to avoid silent bugs (#11665 by Eric Larson)