Version 1.1.0 (2022-08-03)#
Enhancements#
Added new built-in montage R-Net 128 Ch (Brain Products) (#10974 by new contributor Ilias Machairas)
DigMontage
objects can now be checked for equality via==
(#10942 by new contributor Tziona NessAiver)Add a note to clarify the inclusion of average referencing gain matrix during whitening (#10922 by new contributor Mingjian He)
Add time axis scale bar for
mne.Epochs.plot()
using matplotlib backend (#10736 by new contributor Jordan Drew)Add
mne.bem.distance_to_bem()
to find depth of source positions (#10632 by new contributor Matt Courtemanche)Add support for ahdr files in
mne.io.read_raw_brainvision()
(#10515 by new contributor Alessandro Tonin)Add support for reading data from Gowerlabs devices to
mne.io.read_raw_snirf()
(#10555 by new contributor Samuel Powell and Robert Luke)Add built-in sensor layout files for Geodesic Head Web 130 and 280 devices (#10627 by Evan Hathaway)
Add
mne-icalabel
tomne.sys_info()
(#10615 by Adam Li)Add support for
overview_mode
inraw.plot()
and related functions/methods (#10501 by Eric Larson)Add
mne.io.Raw.crop_by_annotations()
method to get chunks of Raw data based onmne.Annotations
. (#10460 by Alex Gramfort)The
pick_channels
method gained averbose
parameter, allowing e.g. to suppress messages about removed projectors (#10544 by Richard Höchenberger)Add
mne.viz.plot_projs_joint()
for joint plotting of projectors and Evoked (#10720 by Eric Larson)The
mne.make_forward_dipole()
function can now take a list of dipoles to make a multi-dipole forward models (#10464 by Marijn van Vliet)Add
mode='outlines'
support tomne.Dipole.plot_locations()
andmne.viz.plot_dipole_locations()
(#10699 by Eric Larson)Add
mne.preprocessing.ICA.find_bads_muscle()
to find muscle-related ICA components with an example, Removing muscle ICA components (#10534 by Alex Rockhill)Add example of Xfit-style ECD modeling using multiple dipoles (#10464 by Marijn van Vliet)
Add
head_source
argument tomne.make_field_map()
to allow selecting which head source to use (#10568 by Eric Larson)Add support for
n_jobs=None
to supportjoblib:joblib.parallel_backend
for more precise control over parallelization (#10567 by Eric Larson)It is now possible to compute inverse solutions with restricted source orientations using discrete forward models (#10464 by Marijn van Vliet)
The new function
mne.preprocessing.maxwell_filter_prepare_emptyroom()
simplifies the preconditioning of an empty-room recording for our Maxwell filtering operations (#10533 by Richard Höchenberger and Eric Larson)Add keyboard shortcuts to toggle
mne.preprocessing.ICA.plot_properties()
topomap channel types (‘t’) and power spectral density log-scale (‘l’) (#10557 by Alex Rockhill)Add
--mri
, and--threshold
options to mne make_scalp_surfaces to improve head surface mesh extraction (#10591 by Eric Larson)Add
mne.preprocessing.compute_bridged_electrodes()
to detect EEG electrodes with shared spatial sources due to a conductive medium connecting two or more electrodes, add Identify EEG Electrodes Bridged by too much Gel for an example andmne.viz.plot_bridged_electrodes()
to help visualize (#10571 by Alex Rockhill)Add
'nearest'
as an option for theimage_interp
argument inmne.viz.plot_topomap()
to plot a topomap without interpolation using a Voronoi parcelation (#10571 by Alex Rockhill)Add
mne.preprocessing.interpolate_bridged_electrodes()
to use the spatially smeared signal to get a better interpolation rather than dropping those channels (#10587 by Alex Rockhill)Add support for hemoglobin type fNIRS data to temporal derivative distribution repair (TDDR)
mne.preprocessing.nirs.temporal_derivative_distribution_repair()
(#10125 by Johann Benerradi)mne.viz.plot_evoked_topomap()
andmne.Evoked.plot_topomap()
now display the time range the map was averaged over ifaverage
was passed (#10606 by Richard Höchenberger)mne.viz.plot_evoked_topomap()
andmne.Evoked.plot_topomap()
can now average the topographic maps across different time periods for each time point. To do this, pass a list of periods via theaverage
parameter (#10610 by Richard Höchenberger)mne.viz.plot_evoked()
andmne.Evoked.plot()
gained a new parameter,highlight
, to visually highlight time periods of interest (#10614 by Richard Höchenberger)Added fNIRS support to
mne.Info.get_montage()
(#10611 by Robert Luke)Add
mne.viz.plot_ch_adjacency()
to visualize and manually edit the channel adjacency matrix (#10633 by Mikołaj Magnuski)Add
mne.viz.Brain.get_view()
to get the current camera parameters such that they can be passed tomne.viz.Brain.show_view()
(#10661 by Alex Rockhill)Added support for Aurora version 2021.9.0.6 to
mne.io.read_raw_nirx()
(#10668 by Robert Luke)Added BrainVision format (
.vhdr
,.vmrk
,.eeg
) tomne.export.export_raw()
(#10681 by Stefan Appelhoff)Added
export
method tomne.Evoked
(#10681 by Stefan Appelhoff)Add timeformat
YYYY/MM/DD
tomne.io.ctf.info._convert_time
(#10674 by Simon Kern)mne.Report.add_figure()
andmne.Report.add_image()
gained a new parameter,section
, allowing to put multiple figures or images into the same “content block”. Previously, the only way to group figures and images was by means of a slider, which sometimes made content hard to discover. The slider remains available as an alternative (#10694 by Richard Höchenberger)All functions and methods that plot topographic maps for EEG (2D projections of the EEG sensor locations) now accept the parameter value
sphere='eeglab'
to lay out the sensors with respect to the head circle in a similar way to how EEGLAB does, i.e., T7/T8 and Fpz/Oz are placed directly on the circle for template montages (#10572 by Richard Höchenberger)mne.channels.get_builtin_montages()
gained a new parameter,descriptions
, which allows to retrieve the descriptions of the montages in addition to their names (#10373 by Richard Höchenberger)Add
include
option tomne.io.read_raw_edf()
,mne.io.read_raw_bdf()
andmne.io.read_raw_gdf()
. (#10734 by Michiru Kaneda)mne.gui.coregistration()
gained a new parameter,fullscreen
, to start the GUI in fullscreen mode (#10284 by Richard Höchenberger)The built-in FieldTrip channel adjacency matrices, which can be read via
read_ch_adjacency()
, have been synchronized with FieldTrip again. This means that numerous new adjacencies have been added, most notably those for standard 10-05 and 10-20 montages (#10749 by Richard Höchenberger)mne.Evoked.plot_field()
gained a new parameter,interaction
, to control the rotation axes when interacting with the head (#10788 by Richard Höchenberger)Add
mne.read_evoked_besa()
for reading evokeds from BESA.avr
and.mul
files. (#10892 by Marijn van Vliet)Add
mne.time_frequency.EpochsTFR.decimate()
to reduce size of time-frequency epochs objects (#10940 by Alex Rockhill)Add an alias that maps EGI reference channel names (
VREF
orVertex Reference
) to the electrode name in the standard EGI montages (Cz
). Now setting standard EGI montages withset_montage()
withmatch_alias=True
will avoid raising an error (#10823 by Scott Huberty)Add provenance in
mne.time_frequency.EpochsTFR.apply_baseline()
(#10979 by Alex Rockhill)
Bugs#
Fix bug in
mne.surface._project_onto_surface
for the conditionmethod != 'accurate' and return_nn
(#10930 by Christian O’Reilly)Fix bug in
mne.export.export_raw()
to ignore None value in filenames attribute ofmne.io.RawArray
(#10927 by new contributor Reza Nasri)Fix bug in
mne.io.read_raw_edf()
to allow reading in all Hypnodyne ZMax EDFs to be read in without issues (#10754 by new contributor Frederik Weber)Fix bug in
mne.Epochs.drop_bad()
where data was loaded although no rejection had to be performed (#10718 by new contributor Lukas Gemein)Pick also bad channels when selecting T1T2 magnetometers in
mne.preprocessing.maxwell_filter()
(#10639 by new contributor Matti Toivonen)Make
color
parameter check in inmne.viz.plot_evoked_topo()
consistent (#10217 by new contributor T. Wang and Stefan Appelhoff)Fix bug in
mne.io.read_raw_brainvision()
when BrainVision data are acquired with the Brain Products “V-Amp” amplifier and disabled lowpass filter is marked with value0
(#10517 by new contributor Alessandro Tonin)Fix bug in
mne.pick_types()
and related methods wherecsd=True
was not passed handled properly (#10470 by new contributor Matthias Dold)Fix bug where plots produced using the
'qt'
/mne_qt_browser
backend could not be added usingmne.Report.add_figure()
(#10485 by Eric Larson)Fix bug where
theme
was not handled properly inmne.io.Raw.plot()
(#10487, #10500 by Mathieu Scheltienne and Eric Larson)Fix bug in
raw.crop(start, stop)
that would cause annotations to be erroneously shifted whenstart != 0
and no measurement date was set. (#10491 by Eric Larson)Fix bug in
mne.io.read_raw_bti()
where unknown electrode locations were not handled properly (#10662 by Eric Larson)Fix bug in
mne.io.read_raw_ctf()
on Windows where large files could not be read (#10866 by Eric Larson)Fix bug in
mne.io.read_raw_ctf()
where invalid measurement dates were not handled properly (#10957 by Jean-Rémi King and Eric Larson)Rendering issues with recent MESA releases can be avoided by setting the new environment variable
MNE_3D_OPTION_MULTI_SAMPLES=1
or usingmne.viz.set_3d_options()
(#10513 by Eric Larson)Fix behavior for the
pyvista
3D renderer’squiver3D
function so that default arguments plot a glyph inarrow
mode (#10493 by Alex Rockhill)Retain epochs metadata when using
mne.channels.combine_channels()
(#10504 by Clemens Brunner)Fix epochs indexing with metadata containing boolean type and missing values (#10705 by Clemens Brunner and Alex Gramfort)
Fix reading of fiducial locations in
mne.io.read_raw_eeglab()
(#10521 by Alex Gramfort)Prevent creation of montage with invalid
[x, y, z]
coordinates withmne.channels.make_dig_montage()
(#10547 by Mathieu Scheltienne)Fix bug in coregistration GUI that prevented it from starting up if only a high-resolution head model was available (#10543 by Richard Höchenberger)
Fix bug with
mne.Epochs.add_reference_channels
where attributes were not updated properly so subsequentpick_types
calls were broken (#10912 by Eric Larson)Fix bug in the
mne.viz.Brain
tool bar that prevented the buttons to call the corresponding feature (#10560 by Guillaume Favelier)Fix issue with saving epochs once
compute_current_source_density()
has been used if a rejection threshold was used first (#10619 by Alex Rockhill and Richard Höchenberger)Fix bug in
mne.viz.plot_evoked_image()
that would cause incorrect sub-titles when usinggroup_by
(#10618 by Reza Shoorangiz)Reduce memory usage when loading an EDF file with
preload=False
(#10638 by Clemens Brunner)Fix bug in
mne.io.Raw.get_channel_types()
and related methods whereunique=True
would return aset
with arbitrary order rather than alist
that preserves the same order asinst.ch_names
(#10720 by Eric Larson)In
mne.preprocessing.find_bad_channels_maxwell()
, do not re-filter the data if a low-pass filter with the requested frequency has already been applied (#10664 by Richard Höchenberger)Fix a problem in
mne.Evoked.get_peak()
, where under certain circumstances themode
parameters'pos'
and'neg'
were not honored whentmin
and/ortmax
were passed as well (#10686 by Richard Höchenberger)mne.read_evokeds()
,mne.channels.read_custom_montage()
,mne.channels.read_dig_hpts()
,mne.channels.read_dig_polhemus_isotrak()
, andmne.channels.read_polhemus_fastscan()
now correctly expand~
in the provided path to the user’s home directory (#10685, #10688 by Richard Höchenberger)Fix bug in
mne.io.read_raw_eeglab()
andmne.read_epochs_eeglab()
, where the presence of channels without position in the.set
file caused positions incorrectly assigned to all further channels (#8754 by Mikołaj Magnuski)Combining channels of
mne.Epochs
ormne.Evoked
objects now properly retains baseline information (#10703 by Clemens Brunner)In
mne.Report
, some figures would have an undesired border added to the edges; this has now been resolved (#10730 by Richard Höchenberger)Fix selection of EEG channels and selected sphere when plotting bridged electrodes with
mne.viz.plot_bridged_electrodes()
(#10753 by Mathieu Scheltienne)Fix broken links in Fixing BEM and head surfaces (#10765 by Alex Rockhill)
The built-in FieldTrip channel adjacency matrix for
easycapM1
had a bug, where the channelPO8
was incorrectly labeled asPO6
This has been resolved by updating the adjacency matrix to the latest version provided by FieldTrip (#10749 by Richard Höchenberger)Add a YouTube video tutorial for editing Freesurfer surfaces in Blender to Fixing BEM and head surfaces (#10778 by Alex Rockhill)
The default interaction style of
mne.Evoked.plot_field()
has been changed such that if behaves likeplot_alignment()
when trying to rotate the head (#10788 by Richard Höchenberger)Add a video on how to operate the intracranial electrode contact location GUI in Locating intracranial electrode contacts (#10800 by Alex Rockhill)
Add a video on how to operate the coregistration GUI in Source alignment and coordinate frames (#10802 by Alex Rockhill)
Add
show
andblock
arguments tomne.gui.coregistration()
andmne.gui.locate_ieeg
to pop up the GUIs and halt execution of subsequent code respectively (#10802 by Alex Rockhill)Correctly report the number of available projections when printing measurement info in a Jupyter notebook (#10471 by Clemens Brunner)
Fix value set in
raw.orig_format
for readers of BrainVision (ASCII format), EGI and Artemis123 files (#10851 by Mathieu Scheltienne)When reading EGI MFF files, channel names are no longer ignored and reference channel information is properly incorporated (#10898 by Scott Huberty and Daniel McCloy)
Fix bug in
mne.time_frequency.psd_array_welch()
and related functions/methods where the bias was not accounted for whenaverage='median'
(#10990 by Eric Larson)Fix bug in
mne.decoding.TemporalFilter
where filter parameters were not handled properly (#10968 by Eric Larson)Fix documentation bug in
ica.plot_sources
to specify thatpicks
keyword argument is for picking ICA components to plot (#10936 by Adam Li)Annotations contained in EDF files are correctly read as UTF-8 according to the EDF specification (#10963 by Clemens Brunner)
Fix bug where complex-valued topoplots caused an error, convert to amplitude instead (#10978 by Alex Rockhill)
API and behavior changes#
When creating BEM surfaces via
mne.bem.make_watershed_bem()
andmne.bem.make_flash_bem()
, thecopy
parameter now defaults toTrue
. This means that instead of creating symbolic links inside the FreeSurfer subject’sbem
folder, we now create “actual” files. This should avoid troubles when sharing files across different operating systems and file systems (#10531 by Richard Höchenberger)The ordering of channels returned by
mne.io.read_raw_nirx()
is now ordered by channel name, rather than the order provided by the manufacturer. This enables consistent ordering of channels across different file types (#10555 by Robert Luke)For
mne.viz.plot_topomap()
,mne.viz.plot_evoked_topomap()
,mne.viz.plot_arrowmap()
,mne.viz.plot_ica_components()
,mne.Covariance.plot_topomap()
,mne.Evoked.plot_topomap()
,mne.Evoked.animate_topomap()
,mne.decoding.CSP.plot_patterns()
,mne.Projection.plot_topomap()
andmne.preprocessing.ICA.plot_components()
the topomap image interpolation was previously a cubic interpolation but now can be'linear'
and'nearest'
as well. Unlessimage_interp='nearest'
is passed mne uses a subsequent matplotlib bilinear interpolation to make the interpolated image smoother. Previously,'image_interp'
controlled this second interpolation step and, for the first interpolation, the only option was cubic. To simplify,image_interp
is now responsible for the main interpolation and the subsequent matplotlib image interpolation is bilinear but can be changed afterward usingim.set_interpolation
(#10617 by Alex Rockhill)The FLASH BEM surface generation via
mne.bem.make_flash_bem()
or the mne flash_bem command has now been clarified in terms of expected inputs. Inmne.bem.convert_flash_mris()
theconvert
parameter is now deprecated and theflash5
andflash30
now accept list of file names or nibabel images. One breaking change is that now the flash files are looked for as mef05_*.mgz and mef30_*.mgz in mri/flash folder (#10715 by Alex Gramfort)plot_compare_evokeds()
gets a new parametertime_unit
which can be"s"
or"ms"
(#10950 by Daniel McCloy)The
to_data_frame
methods forRaw
,Epochs
,Evoked
,SourceEstimate
,EpochsTFR
, andAverageTFR
all now have defaulttime_format=None
(keep time in seconds) instead oftime_format='ms'
(convert time to milliseconds) (#10925 by Daniel McCloy)mne.Evoked.decimate()
now aligns to the sample at time=0 (so that the exact sample when the event occurred is preserved) to be consistent withmne.Epochs.decimate()
(#10945 by Alex Rockhill)